Продолжение коллекции скриншотов.
(Эту Web-страничку лучше просматривать с разрешением монитора 800x600 или выше).
О недоделанной функции 7 (рисование закрашенного треугольника) в INT_66.
Функция 7 в Пълдиновском прерывании INT_66 была зарезервирована для рисования закрашенного треугольника, однако так и не была доделана до конца разработчиками. В UniBASIC также была команда TRIANGLE x1,y1 TO x2,y2 TO x3,y3 для рисования закрашенного треугольника. Команда TRIANGLE вызывала функцию 7 в INT_66 и передавала ей необходимы параметры, однако результата выполнения функции TRIANGLE - не было, так как функция 7 в INT_66 не была сделана. Вот поэтому TRIANGLE и не описана в руководстве к UniBASIC.
Однако несложно написать драйвер, который бы перехватывал INT_66 и таким образом добавить возможность рисовать треугольник. Сделав функцию 7 в INT_66, функция TRIANGLE в UniBASIC'е заработает автоматически.
Вы можете скачать архив с драйвером NEW66 и демонстрационной программой: new66.zip, однако, единственное, что в этот драйвер встроен алгоритм рисования только сторон треугольника, а не закрашенного треугольника.
О недокументированной функции INT_$78
В unidos.cmd часть текстовых строк упакованы и для их распечатки используется функция INT_$78. Функция INT_$78 задаётся при загрузке unidos.cmd (её код находится внутри unidos.cmd, а после загрузки unidos - в 7 странице, т.е. в RAM памяти). Ни в одном руководстве она не описана. Синтаксис её такой: на входе: X - указатель к упакованной строке, результат выполнения - распакованная строка выводится на экран. Для упаковки строк авторы использовали программу на Си pack.c. Она находится в архиве int78.zip. Интересная особенность этого алгоритма: почему-то если в исходной строке встречались символы @ и ` то при распаковке на экран будут выведены пробелы. Пример использования функции INT_$78:
org $100 ldx #txt int $78 rts ;This message is packed txt dw $378C,$0301,$7795,$2BFB,$3845,$6413,$4539,$FAA5 end
Была проведена проверка, а какой же выигрыш от этого: Все строки в распакованном виде: 1087 байт, Все строки в упакованном виде: 840 байт + длина кода INT_$78: 112 байт, следовательно, выигрыш получаем 135 байт - выигрыш достаточно приличный, ведь весь модуль unidos'а должен уместиться в 8192 байта, а в последних версиях unidos'а свободными остаются всего 25-26 байт в конце, так что можно сказать, именно благодаря INT_$78 удалось уместить операционную систему unidos (точнее, интерпретатор команд unidos) в 8192 байт.
< < < На главную страничку < < <