Сопроцессор графических вычислений Перейдем к рассмотрению второго сопроцессора, называемого сопроцессором графических вычислений (Graphics Transformation Engine, GTE). Он применяется при любых расчетах трехмерной графики, таких как перспективная проекция, вращение и масштабирование объектов, вычисление освещенности и др. Для действий над векторами и матрицами предназначен специальный набор операций, которые сопроцессор выполняет гораздо быстрее центрального процессора приставки. Сопроцессор подключен к центральному процессору системы как СОР2 и не занимает адресов в пространстве CPU. Для работы с ним в системе команд центрального процессора предусмотрены специальные команды. Знакомство с трехмерной графикой Прежде чем говорить о принципах функционирования данного сопроцессора, системе команд и назначении внутренних регистров, напомним основные соотношения, используемые в трехмерной графике. Конечно, здесь мы представим лишь базовые понятия, дополнительную информацию можно найти в соответствующей литературе. Чтобы определить местоположение точки в трехмерном пространстве, обычно используют декартову систему координат, изображенную на рис. 4.3. В этой системе координат любая точка в пространстве может быть определена набором из трех значений, отражающих ее позицию вдоль каждой из осей. Обычно они указываются в угловых скобках, например <1,2,3>. Рис. 4.3. Декартова система координат в трехмерном пространстве Точка - это базовый примитив трехмерной графики, но строить изображение из точек слишком утомительно. Поэтому нам потребуются вершины и грани. Вершины (vertices) представляют собой точки, которые используются для задания положения таких объектов, как грани и сети, в трехмерном пространстве. Вершины, подобно точкам, указывают местонахождение, однако сами невидимы. Грань (face) - это плоский многоугольник, задаваемый своими вершинами. Каждая вершина устанавливает угол грани. Все вершины грани должны находиться в одной и той же плоскости, формируя плоскую грань. Грань, вершины которой принадлежат разным плоскостям, является неправильной, и нарисовать ее нереально. Простейшая грань определяется тремя вершинами. Получившаяся треугольная грань удобна для работы: во-первых, задать три вершины так, чтобы они не принадлежали одной и той же плоскости, невозможно, следовательно, грань всегда будет правильной; во-вторых, графический процессор использует именно треугольные грани, и, если вы укажете более сложные грани, для вывода на экран их все равно придется разделять на треугольники. Сеть (mesh) - это набор соединенных гранен, как правило, описывающий один объект в сцене. Сеть может иметь одну или много граней. Попробуем смоделировать трехмерные объекты, создавая грани и объединяя их в сеть. Для этого нужно познакомиться с базовыми преобразованиями трехмерных объектов. Преобразования рассматриваются применительно к отдельной точке. Если вы захотите выполнить такие операции для грани или сети, потребуется преобразовать каждую из вершин объекта. Вращение выполняют, умножая определяющий точку вектор на матрицу вращения. Матрица вращения - это матрица размером 3x3, которая состоит из трех единичных векторов, ортогональных друг к другу. Сведения о том, каким образом получают матрицы и как выполняется умножение вектора на матрицу, можно почерпнуть из учебника математики. Здесь мы приведем только конечный результат: Чтобы выполнить вращение вокруг нескольких осей одновременно, следует перемножить соответствующие матрицы, причем результат зависит от порядка множителей. К сожалению, сопроцессор графических вычислений не в состоянии вычислять тригонометрические функции - этим должен заниматься центральный процессор системы. Перемещение объекта осуществляется путем сложения вектора, задающего вершину, с вектором, определяющим направление и дальность передвижения. Еще раз напоминаем, что в операциях с матрицами и векторами очень важен порядок их выполнения. Изменив последовательность операндов, вы получите совсем другой результат. Теперь, ознакомившись с основными математическими понятиями, перейдем к рассмотрению их реализации в сопроцессоре игровой приставки SONY PLAYSTATION. Регистры сопроцессора графических вычислений Сопроцессор графических вычислений игровой приставки SONY PLAYSTATION имеет 64 внутренних регистра (32 управляющих и 32 регистра данных), которые используются при расчетах. Рассмотрим сначала управляющие регистры, предназначенные для хранения различных констант. Регистр 0 Имя: R11R12. Назначение. Элементы 11 и 12 матрицы вращения. Элемент 12 занимает разряды D32 - D16, а элемент 11 - разряды D15 - D0. Числа хранятся в формате (1, 3, 12): один знаковый разряд, три разряда для целой части числа и 12 разрядов для дробной. Регистр 1 Имя: R13R21. Назначение. Элементы 13 и 21 матрицы вращения. Элемент 21 занимает разряды D32 - D16, а элемент 13 - разряды D15 - DO. Числа хранятся в формате (1, 3, 12). Регистр 2 Имя: R22R23. Назначение. Элементы 22 и 23 матрицы вращения. Элемент 23 занимает разряды D32 - D16, а элемент 22 - разряды D15 - D0. Числа хранятся в формате (1, 3, 12). Регистр 3 Имя: R31R32. Назначение. Элементы 31 и 32 матрицы вращения. Элемент 32 занимает разряды D32 - D16, а элемент 31 - разряды D15 - D0. Числа хранятся в формате (1, 3, 12). Регистр 4 Имя: R33. Назначение. Элемент 33 матрицы вращения. Занимает разряды D15 - D0. Старшие 16 разрядов регистра не используются. Число хранится в формате (1, 3, 12). Регистр 5 Имя: TRX. Назначение. Элемент X вектора перемещения. Число хранится в формате (1, 31, 0). Регистр 6 Имя: TRY. Назначение. Элемент Y вектора перемещения. Число хранится в формате (1, 31, 0). Регистр 7 Имя: TRZ. Назначение. Элемент Z вектора перемещения. Число хранится в формате (1, 31, 0). Регистр 8 Имя: L11L12. Назначение. Элементы 11 и 12 матрицы освещения. Элемент 12 занимает разряды D32 - D16, а элемент 11 - разряды D15 - DO. Числа хранятся в формате (1, 3, 12): один знаковый разряд, три разряда для целой части числа и 12 разрядов для дробной. Регистр 9 Имя: L13L21. Назначение. Элементы 13 и 21 матрицы освещения. Элемент 21 занимает разряды D32 - D16, а элемент 13 - разряды D15 - D0. Числа хранятся в формате (1,3, 12). Регистр 10 Имя: L22L23. Назначение. Элементы 22 и 23 матрицы освещения. Элемент 23 занимает разряды D32 - D16, а элемент 22 - разряды D15 - D0. Числа хранятся в формате (1,3, 12). Регистр 11 Имя: L31L32. Назначение. Элементы 31 и 32 матрицы освещения. Элемент 32 занимает разряды D32 - D16, а элемент 31 - разряды D15 - DO. Числа хранятся в формате (1, 3, 12). Регистр 12 Имя: L33. Назначение. Элемент 33 матрицы освещения. Занимает разряды D15 - D0. Старшие 16 разрядов регистра не используются. Число хранится в формате (1,3,12). Регистр 13 Имя: RBK. Назначение. Красная составляющая цвета фона. Число хранится в формате (1, 19, 12). Регистр 14 Имя: GBK. Назначение. Зеленая составляющая цвета фона. Число хранится в формате (1, 19, 12). Регистр 15 Имя: ВВК. Назначение. Синяя составляющая цвета фона. Число хранится в формате (1, 19, 12). Регистр 16 Имя: LR1LR2. Назначение. Элементы 1 и 2 красной составляющей цветовой матрицы освещения. Элемент 2 занимает разряды D32 - D16, а элемент 1 - разряды D15 - D0. Числа хранятся в формате (1, 3, 12): один знаковый разряд, три разряда для целой части числа и 12 разрядов для дробной. Регистр 17 Имя: LR3LG1. Назначение. Элемент 3 красной составляющей и элемент 1 зеленой составляющей цветовой матрицы освещения. Зеленая составляющая занимает разряды D32 -D16, а красная - разряды D15 - D0. Числа хранятся в формате (1, 3, 12). Регистр 18 Имя: LG2LG3. Назначение. Элементы 2 и 3 зеленой составляющей цветовой матрицы освещения. Элемент 3 занимает разряды D32 - D16, а элемент 2 - разряды D15 - D0. Числа хранятся в формате (1,3, 12). Регистр 19 Имя: LB1LB2. Назначение. Элементы 1 и 2 синей составляющей цветовой матрицы освещения. Элемент 2 занимает разряды D32 - D16, а элемент 1 - разряды D15 - D0. Числа хранятся в формате (1, 3, 12). Регистр 20 Имя: LB3. Назначение. Элемент 3 синей составляющей цветовой матрицы освещения. Занимает разряды D15 - D0. Старшие 16 разрядов регистра не используются. Число хранится в формате (1, 3, 12). Регистр 21 Имя: RFC. Назначение.. Красная составляющая общей освещенности. Число хранится в формате (1, 27, 4). Регистр 22 Имя: GFC. Назначение. Зеленая составляющая общей освещенности. Число хранится в формате (1, 27, 4). Регистр 23 Имя: BFC. Назначение Синяя составляющая общей освещенности. Число хранится в формате (1, 27, 4). Регистр 24 Имя: OFX Назначение. Смещение экрана по оси X. Регистр 25 Имя: ОFY. Назначение. Смещение экрана по оси Y. Регистр 26 Имя: Н. Назначение. Расстояние до плоскости проекции. Число хранится в разрядах D16 - D0 в формате (0, 16, 0). Регистр 27 Имя: DQA. Назначение. Параметр, задающий глубину сцены. Число хранится в разрядах D16 - DO в формате (0, 7, 8). Регистр 28 Имя: DQB. Назначение. Параметр, задающий глубину сцены. Число хранится в разрядах D16 - DO в формате (0, 7, 8). Регистр 29 Имя: ZSF3. Назначение. Множитель Z3, обычно равен 1/3. Число хранится в разрядах D16 - D0 в формате (1, 3, 12). Регистр 30 Имя: ZSF4, Назначение. Множитель Z4, обычно равен 1/4. Число хранится в разрядах D16 - D0 в формате (1, 3, 12). Регистр 31 Имя: FLAG. Назначение. Состояние отдельных разрядов регистра сообщает о результате выполнения последней операции сопроцессора и о возникновении ошибок. Теперь рассмотрим назначение 32 регистров данных. Эти регистры служат для хранения данных, предназначенных для обработки, и результатов. Регистр 0 Имя: VXY0. Назначение. В регистре хранятся значения координат х и у для первого вектора. Координата у записывается в разряды D31 - D16, а координата х - в разряды D15 - D0. Числа могут храниться в формате (1, 3, 12) или (1, 15, 0). Регистр 1 Имя: VZ0. Назначение. В регистре хранится значение координаты z для первого вектора. Координата записывается в разряды D15 - D0 в формате (1, 3, 12) или (1, 15, 0). Старшие 16 разрядов регистра не используются. Регистр 2 Имя: VXY1. Назначение. В регистре хранятся значения координат х и у для второго вектора. Координата у записывается в разряды D31 - D16, а координата х - в разряды D15 - D0. Числа могут храниться в формате (1, 3, 12) или (1, 15, 0). Регистр 3 Имя: VZ1. Назначение. В регистре хранится значение координаты z для второго вектора. Координата записывается в разряды D15 - D0 в формате (1, 3, 12) или (1, 15, 0). Старшие 16 разрядов регистра не используются. Регистр 4 Имя: VXY2. Назначение. В регистре хранятся значения координат х и у для третьего вектора. Координата у записывается в разряды D31 - D16, а координата х - в разряды D15 - D0. Числа могут храниться в формате (1, 3, 12) или в формате (1, 15, 0). Регистр 5 Имя: VZ2. Назначение. В регистре хранится значение координаты z для третьего вектора. Координата записывается в разряды D15 - D0 в формате (1, 3, 12) или (1, 15, 0). Старшие 16 разрядов регистра не используются. Регистр 6 Имя: RGB. Назначение. В регистре хранится код цвета. Разряды D31 - D24 не используются, в разрядах D23 - D16 содержится код для синей составляющей, в разрядах D15 - D8 -для зеленой и в разрядах D7 - DO - для красной. Регистр 7 Имя: OTZ. Назначение. В младших 16 разрядах регистра хранится среднее значение z в формате (0, 15, 0). Регистр доступен только для чтения. Регистр 8 Имя: IR0. Назначение. Регистр для промежуточного результата. В старших 16 разрядах содержится копия знакового бита, а в младших - число в формате (1, 3, 12). Регистр 9 Имя: IR1. Назначение. Регистр для промежуточного результата. В старших 16 разрядах содержится копия знакового бита, а в младших - число в формате (1, 3, 12). Регистр 10 Имя: IR2. Назначение. Pei истр для промежуточного результата. В старших 16 разрядах содержится копия знакового бита, а в младших — число в формате (1, 3, 12). Регистр 11 Имя: IR3. Назначение. Регистр для промежуточного результата. В старших 16 разрядах содержится копия знакового бита, а в младших - число в формате (1, 3, 12). Регистр 12 Имя: SXY0. Назначение. Элемент очереди для хранения экранных координат х и у. Координата у хранится в разрядах D31 -D16 в формате (1, 15, 0), а координата х — в разрядах D15 - D0 в аналогичном формате. Очередь работает по принципу FIFO, то есть сначала считывается первый записанный элемент. Регистр 13 Имя: SXY1. Назначение. Элемент очереди для хранения экранных координат х и у. Регистр 14 Имя: SXY2. Назначение. Элемент очереди для хранения экранных координат х и у. Регистр 15 Имя: SXYP. Назначение. Элемент очереди для хранения экранных координат х и у. Регистр 16 Имя: SZ0. Назначение. Элемент очереди для хранения экранной координаты z. Она хранится в разрядах D15 - D0 в формате (0,16, 0) и всегда является положительной. Старшие разряды регистра не используются. Регистр 17 Имя: SZ1. Назначение. Элемент очереди для хранения экранной координаты z. Регистр 18 Имя: SZ2. Назначение. Элемент очереди для хранения экранной координаты z. Регистр 19 Имя: SZP. Назначение. Элемент очереди для хранения экранной координаты z. Регистр 20 Имя: RGB0. Назначение. Элемент очереди для хранения цветовых кодов. Формат хранения аналогичен используемому в регистре 6 (RGB). Регистр 21 Имя: RGB1. Назначение. Элемент очереди для хранения цветовых кодов. Формат хранения аналогичен используемому в регистре 6 (RGB). Регистр 22 Имя: RGB2. Назначение. Элемент очереди для хранения цветовых кодов. Формат хранения аналогичен используемому в регистре 6 (RGB). Регистр 23 Имя: RES1. Назначение. Регистр не используется и недоступен для программ. Регистр 24 Имя: МАСО. Назначение. Регистр хранения результата. Числа содержатся в формате (1, 31, 0). Регистр 25 Имя: МАС1. Назначение. Регистр хранения результата. Числа содержатся в формате (1, 31, 0). Регистр 26 Имя: МАС2. Назначение. Регистр хранения результата. Числа содержатся в формате (1, 31, 0). Регистр 27 Имя: МАСЗ. Назначение. Регистр хранения результата. Числа содержатся в формате (1, 31, 0). Регистр 28 Имя: IRGB. Назначение. Регистр ввода 15-разрядного кода цвета. В регистр записывается 15-разрядный код, при этом значение синей составляющей определяется разрядами D14 - D10, значение зеленой - разрядами D9 - D5, а значение красной - разрядами D4 -D0. Сразу после сохранения значения каждой составляющей цвета автоматически преобразуются в формат (1, 11, 4) и помещаются во внутренние регистры сопроцессора (IR1, IR2 и IR3). Регистр доступен только для записи. Регистр 29 Имя: ORGB. Назначение. Регистр чтения 15-разрядного кода цвета. При чтении из этого регистра содержимое внутренних регистров IR1, IR2 и IR3 автоматически преобразуется в 5-разрядные коды для цветовых составляющих, из которых получается значение в формате, аналогичном используемому в регистре 28 (IRGB). Регистр доступен только для чтения. Регистр 30 Имя: LZCS. Назначение. Регистр данных для счетчика ведущих нулей. Сюда записывается число в формате (1, 31, 0), а результат возвращается в регистре 31 (LZCR). Регистр доступен только для записи. Регистр 31 Имя: LZCR. Назначение. Счетчик ведущих нулей. При чтении из этого регистра возвращается 6-разрядное число, которое указывает количество ведущих нулей в числе, записанном в регистр 30 (LZCS). Если число в регистре 30 отрицательно, то передается число ведущих единиц. Регистр доступен только для чтения. После приведенного описания регистров сопроцессора графических вычислений игровой приставки SONY PLAYSTATION следует дать несколько пояснений. Во-первых, чтобы лучше разобраться с форматами хранения данных, нужно обратиться к рис. 4.4. Во-вторых, необходимо учитывать, что некоторые регистры образуют очереди. Работа с этими очередями ведется таким образом: когда вычисляется очередное значение, оно помещается в последний регистр очереди, а все элементы очереди РИС. 4.4. Форматы данных для сопроцессора графических вычислений сдвигаются на одну позицию к началу. Например, новое значение координат х и у будет помещено в регистр SXYP. Значение, которое здесь хранилось, копируется в регистр SXY2, значение из регистра SXY2 - в регистр SXY1 и значение из регистра SXY1 - в регистр SXY0. Работа с сопроцессором графических вычислений Ниже рассматриваются принципы взаимодействия ядра центрального процессора игровой приставки SONY PLAYSTATION и сопроцессора графических вычислений. С этой целью в систему команд центрального процессора введены шесть команд для обмена данными и одна команда для передачи сопроцессору кода выполняемой операции. Команды LWC2 и SWC2 позволяют загружать данные из памяти в регистры данных сопроцессора и записывать содержимое этих регистров в память. Команды МТС 2 и MFC 2 предназначены для передачи чисел из регистров центрального процессора в регистры данных сопроцессора и обратно. Обмен информацией между управляющими регистрами сопроцессора графических вычислений и регистрами центрального процессора осуществляется с помощью команд СТС2 и CFC2. Команда СОР2 служит для пересылки сопроцессору команд, которые необходимо выполнить. После нее указывается 25-разрядный код команды сопроцессора графических вычислений. Перед тем как центральный процессор обратится к сопроцессору графических вычислений, разряд 30 в регистре SR сопроцессора управления системой следует установить в 1, в противном случае обращение к сопроцессору вызовет возникновение исключения. Команды сопроцессора графических вычислений нельзя использовать в процедурах обслуживания исключений и запросов на прерывание. Если очередная команда обращения к сопроцессору будет выполнена центральным процессором до того, как сопроцессор закончит обработку предыдущей команды, центральный процессор остановится, ожидая окончания работы сопроцессора. Система команд сопроцессора графических вычислений Ниже мы расскажем о системе команд сопроцессора. Знакомство начнем с формата команды, изображенного на рис. 4.5. Любая команда представляет собой 25-разрядное двоичное число. В этом числе выделяется несколько полей, состояние разрядов в которых может влиять на местоположение операндов команды и алгоритм вычисления. Опишем поля более детально: sf - 0 - вычисления; 1 - вычисления со значениями из регистров IR; mх - 00 - умножение на матрицу вращения; 01 -умножение на матрицу освещенности; 10 -умножение на матрицу цвета; 11 - не используется; v - 00 - операнд в векторе 10; 01 - операнд в векторе I1; 10 - операнд в векторе 12; 11 - операнд в регистре IR; cv — 00 - прибавление вектора перемещения TR; 01 - прибавление вектора фонового цвета ВК; 10 - прибавление вектора удаленного освещения FAR (работает неправильно); 11 -прибавление вектора отсутствует; Im - 0 - нет ограничений на результат; 1 - результат ограничен нулем. Более подробные сведения о системе команд сопроцессора графических вычислений игровой приставки SONY PLAYSTATION можно найти в Internet. 4.2.3. Адресное пространство В этом разделе описывается распределение памяти, установленной в игровой приставке SONY PLAYSTATION. Блоки, рассмотрению которых посвящены следующие разделы, например видео память, здесь представлены очень кратко. ПЗУ, имеющееся в игровой приставке, и записанная в нем операционная система анализируются более развернуто, поскольку эти сведения необходимы для понимания функционирования основных узлов устройства. Итак, в приставке SONY PLAYSTATION память применяется центральным процессором, видеопроцессором, звуковым процессором и процессором управления приводом CD-ROM. К центральному процессору подключено ПЗУ, в котором записана операционная система, и 2 Мб I оперативной памяти, которые используются про-1 граммами. ПЗУ и ОЗУ вместе составляют основную память игровой приставки. Оперативная память располагается в самом начале адресного пространства (адреса 00000000h - 00200000h), однако часто в программах можно увидеть адрес, начинающийся с 80h. Дело в том, что центральный процессор преобразует логические 32-разрядные адреса Рис. 4.5. Формат команды сопроцессора графических вычислений в физические адреса установленной памяти. При этом адрес, начинающийся с 80h, разрешает работу кэш-памяти команд. Следовательно, память располагается и по адресам 80000000h- 80200000h. Первые 64 Кб задействуются ядром операционной системы, так что первый доступный для размещения программы адрес - 80010000h. Регистры различных контроллеров игровой приставки включены в общее адресное пространство, где для них имеется отдельная область. Эти регистры не являются частью ОЗУ или ПЗУ, но при программировании работа с ними ничем не отличается от работы с памятью. Видеопроцессор для хранения информации о формируемом изображении использует видео-ОЗУ объемом 1 Мб. Оно не является частью общего адресного пространства и доступно только через регистры видеопроцессора или посредством контроллера прямого доступа к памяти. Звуковой процессор также применяет собственную память объемом 256 Кб, одна часть которой зарезервирована для звуковых данных, поступающих с CD-ROM, а другая хранит данные, необходимые внутренним схемам звукового процессора при формировании аудиосигналов. Еще одно ОЗУ объемом 256 Кб подключено к контроллеру управления приводом CD-ROM. Эта память играет роль буфера, ускоряющего обращение к CD-ROM из программ. Рассмотрим более подробно операционную систему, которая записана в ПЗУ, игровой приставки. Операционная система SONY PLAYSTATION Операционная система приставки SONY PLAYSTATION представляет собой 32-разрядную многозадачную операционную систему, предназначенную для управления аппаратурой игровой приставки, работы с файловой системой на компакт-диске и осуществления межпоточного взаимодействия в программах. Вызовы функций операционной системы производятся через точку входа с адресом В0h. Номер функции передается через регистр с 1 центрального процессора. Таким образом, для обращения к функции операционной системы необходимо записать ее номер в регистр с 1 и выполнить команду jal $000000В0. Функция openevent Номер: 08h. Параметры: а0 - класс события; a1 - спецификатор события; а2 — режим события; аЗ - адрес функции, которая будет выполняться при возникновении события. Результат: v0 - дескриптор события или -1, если произошла ошибка. Описание. Данная функция создает структуру описателя события и добавляет ее в таблицу обрабатываемых событий. Параметры, помещаемые в регистры А0 - А2, рассматриваются ниже. Возвращаемый дескриптор события в дальнейшем используется при обращении к другим функциям. Класс события определяет, какое устройство вызывает возникновение данного события. Старший байт задает группу событий: FFh — события межпоточного взаимодействия; F4h - события системы ввода/вывода; F3h - пользовательские события; F2h - счетчики; F0h - события аппаратуры. Младшие три байта позволяют более детально охарактеризовать событие в зависимости от его группы. Для событий, возникающих по сигналам от аппаратуры, возможны следующие значения: F000000lh- прерывание по кадровому синхроимпульсу (VBLANK); F0000002h - сигнал от видеопроцессора (CPU); F0000003h - сигнал от дешифратора CD-ROM; F0000004h - контроллер прямого доступа к памяти; F0000005h - RTC0; F0000006h - RTC1; F0000007h - RTC2; F0000008h- игровой пульт; F0000009h- звуковой процессор; F000000Ah - параллельный порт; F000000Bh - последовательный порт; F00000l0h- исключение; F00000llh- карта памяти (memory card); F0000012h- карта памяти (memory card); F0000013h - карта памяти (memory card). Для событий таймера в старшем байте, как уже упоминалось, содержится число F2h, а в младшем байте — номер канала таймера от 0 до 3. Система ввода/вывода использует события, вызываемые картой памяти memory card с классом F4000001hH математической библиотекой с классом F4000002h. Спецификатор служит для более точного определения действия, вызвавшего возникновение события. Наиболее часто применяются следующие спецификаторы: 0001h - счетчик равен нулю; 0002h - работа прервана; 0004h - конец ввода/вывода; 0008h - файл закрыт; 0010h - подтверждение приема команды; 0020h - выполнение команды завершено; 0040h - данные готовы; 0080h - конец данных; 0l00h - время истекло; 0200h - неизвестная команда; 0400h - конец буфера чтения; 0800h - конец буфера записи; 1000h - прерывание; 2000h - новое устройство; 4000h - команда syscall; 030lh - ошибка в библиотеке libmat'h; 0302h - неправильный диапазон в библиотеке libmath И наконец, режим события определяет тип вызываемого обработчика. Если этот параметр равен 1000h, обслуживается запрос на прерывание или исключение; если же параметр равен 2000h, сразу вызывается обработчик события. Функция closeevent Номер: 09h. Параметры: а0 - дескриптор события. Результат: v0 - 1 при удаче, 0 при ошибке. Описание. Функция удаляет структуру описателя события из таблицы обрабатываемых событий. Функция enableevent Номер: 0Ch. Параметры: а0 - дескриптор события. Результат: v0 - 1 при удаче, 0 при ошибке. Описание. Функция разрешает обработку события из таблицы, определяемого заданным дескриптором. Чтобы в программе могло обслуживаться какое-либо событие, необходимо с помощью функции open-event сначала создать запись о нем, а затем посредством функции enableevent разрешить его обработку. Функция disableevent Номер: 0Dh. Параметры: а0 - дескриптор события. Результат: v0 - 1 при удаче, 0 при ошибке. Описание. Функция запрещает обслуживание события с указанным дескриптором. Из таблицы событий запись не удаляется, так что в дальнейшем можно снова разрешить обработку этого события, вызвав функцию enableevent, или удалить структуру описания события функцией closeevent. Функция open Номер: 32h. Параметры: а0 - указатель на имя файла; a1 - режим работы с файлом. Результат: v0 - дескриптор файла или -1 при ошибке. Описание. Функция открывает файл (на компакт-диске или на устройстве memory card) для дальнейшей работы с ним. Игровая приставка SONY PLAYSTATION может использовать одновременно не более 16 файлов. Режим задают следующие разряды: D0 - 1 для чтения. D1 - 1 для записи. D9 - 1 для создания нового файла. D16 - D31 - число блоков в карте памяти (memory card), резервируемое для нового файла. Возвращаемый функцией дескриптор файла при¬меняется другими функциями. Функция lseek Номер: 33h. Параметры: а0 - дескриптор файла; a1 - смещение; а2 - база. Описание. Функция перемещает указатель, определяющий текущую позицию доступа к файлу, на число байтов, заданное в регистре a1. Если в регистре а2 записан 0, то смещение вычисляется относительно начала файла, если 1 - относительно имеющейся позиции указателя. Никаких проверок на выход за границы файла не производится. Функция read Номер: 34h. Параметры: а0 - дескриптор файла; a1 - указатель на буфер для считанных данных; a1 - число байтов, которые будут прочитаны. Результат. v0 - число реально прочитанных байтов или -1 при ошибке. Описание. Функция читает данные из открытого файла и записывает их в память по указанному адресу. Функция write Номер: 35h. Параметры: а0 - дескриптор файла; a1 - указатель на записываемые данные; а2 - число записываемых байтов. Результат: v0 - число реально записанных байтов или -1 при ошибке. Описание. Функция записывает данные в карту memory card. При попытке сохранить информацию на CD-ROM в качестве результата будет возвращен 0. Функция close Номер: 36h. Параметры: а0 - дескриптор файла. Результат: v0 - дескриптор файла или -1 при ошибке. Описание. Функция закрывает определяемый дескриптором файл. Разумеется, функций в ПЗУ игровой приставки гораздо больше, чем описано здесь. В разделе приведен только минимальный набор, который позволит разобраться с излагаемым далее материалом, а также понимать тексты программ. |