Сообщения: 1019 Откуда: Днепропетровская обл.
|
Как мы используем двоичные данные из бейсика? Определяем свободный участок памяти по адресу N, загружаем туда машинный код (или данные) с внешнего накопителя информации (или из бейсика с помощью READ/DATA) и работаем с ними (USR N, PEEK/POKE). С точки зрения Оберона ресурсы представляют собою массивы байтовых данных, которые мы тоже можем загружать, но при их использовании распределением адресов занимается сам компилятор, и обычно париться с этим не нужно. С массивами работаем или по идентификатору (который указывает на адрес, но без явной циферки), или по индексу. Это гораздо более кроссплатформенно. Использовать POKE/PEEK и прямую адресацию в Обероне в общем-то никто не запрещает, но страдает переносимость, и понятно, что делать такое нужно только на низком уровне. Для включения в программу ресурсов (спрайтов, шрифтов, музыки, звуков, уровней и т.п.) я обычно завожу ресурсный модуль Rsrc, в который вставляю двоичные данные, подготовленные утилитой XDev/ZXDev/Bin/Bin2c.exe, в виде инициализированных массивов. Обычно имеет смысл заводить один массив на один ресурс (чтобы не заниматься сложными расчётами адресов). Пример такого модуля, в который занесён набор спрайтов лазер бейсика Sprite2B, можно посмотреть в файле XDev/ZXDev/Lib/C/LaserSprite2B.c. Пусть использование языка Си для подключения ресурсов (да и асмового кода) Вас не ужасает, ничего сложного там нет. Со временем разберётесь. ![Улыбается :-)](./images/smilies/icon_e_smile.gif) Насчёт включения в программу музыки. Проблем нет, просто нужно выбрать плеер, а мелодии подключить в виде ресурсов. В ZXDev Оберон-программа может работать в любом режиме прерываний (IM0/IM1, IM2 или DI). Режим задаётся в файле-конфигураторе BasicCfg.h. Для режима IM0 компилятор SDCC поддерживает специальный ключик --reserve-regs-iy, который запрещает использование регистра IY, оставляя его бейсику на откуп. Компилировать код: F11, линковать запуском XDev/ZXDev/MoveSpr.bat Это и много ещё другого описано в документации: XDev/ZXDev/Docu/ZXDevRus.txt В итоге должен получиться образ диска MoveSpr.trd, который открываете в эмуляторе. Пока процесс выглядит так, далее может автоматизируем. По лазер бейсику смотрите XDev/ZXDev/Docu/LaserBasic.txt. Есть по нему ещё документация на русском (гуглируйте). Да, всё вышеперечисленное Вами он умеет. Вот список процедур — интерфейс лазер бейсика для использования в своих программах на Обероне. Предлагаю убедиться как легко его сгенерировать автоматически (а часто для пользования функционалом модуля это единственное, что нужно знать; все механизмы реализации скрыты от конечного пользователя интерфейсом). Откройте: File -> Open -> ZXDev/Lib/Mod/Laser.Def Нажмите F12 (скомпилируем наш модуль подсистемой Dev, таким образом создастся символьный файл — сгенерированный интерфейс экспортов модуля). Дважды щёлкните на слове Laser и нажмите Ctrl+D. Откроется что-то такое: Код: "OBERON" DEFINITION Laser; PROCEDURE ASLV (col, row, len, hgt: BYTE); PROCEDURE ASRV (col, row, len, hgt: BYTE); PROCEDURE ATDV (col, row, len, hgt: BYTE); PROCEDURE ATOF; PROCEDURE ATON; PROCEDURE ATUV (col, row, len, hgt: BYTE); PROCEDURE AWLV (col, row, len, hgt: BYTE); PROCEDURE AWRV (col, row, len, hgt: BYTE); PROCEDURE CLSM (spN: BYTE); PROCEDURE CLSV (col, row, len, hgt: BYTE); PROCEDURE GMAT (col, row, spD, spS: BYTE); PROCEDURE GMBL (col, row, spD, spS: BYTE); PROCEDURE GMND (col, row, spD, spS: BYTE); PROCEDURE GMOR (col, row, spD, spS: BYTE); PROCEDURE GMXR (col, row, spD, spS: BYTE); PROCEDURE GTBL (col, row, spN: BYTE); PROCEDURE GTND (col, row, spN: BYTE); PROCEDURE GTOR (col, row, spN: BYTE); PROCEDURE GTXR (col, row, spN: BYTE); PROCEDURE INVM (spN: BYTE); PROCEDURE INVV (col, row, len, hgt: BYTE); PROCEDURE Init; PROCEDURE MARV (col, row, len, hgt: BYTE); PROCEDURE MIRV (col, row, len, hgt: BYTE); PROCEDURE PMAT (col, row, spD, spS: BYTE); PROCEDURE PMBL (col, row, spD, spS: BYTE); PROCEDURE PMND (col, row, spD, spS: BYTE); PROCEDURE PMOR (col, row, spD, spS: BYTE); PROCEDURE PMXR (col, row, spD, spS: BYTE); PROCEDURE PTBL (col, row, spN: BYTE); PROCEDURE PTND (col, row, spN: BYTE); PROCEDURE PTOR (col, row, spN: BYTE); PROCEDURE PTXR (col, row, spN: BYTE); PROCEDURE PWBL (col, row, spN, spCol, spRow, len, hgt: BYTE); PROCEDURE PWND (col, row, spN, spCol, spRow, len, hgt: BYTE); PROCEDURE PWOR (col, row, spN, spCol, spRow, len, hgt: BYTE); PROCEDURE PWXR (col, row, spN, spCol, spRow, len, hgt: BYTE); PROCEDURE SCRM (spN, npx: BYTE); PROCEDURE SCRV (col, row, len, hgt, npx: BYTE); PROCEDURE SETV (col, row, len, hgt: BYTE); PROCEDURE SL1M (spN: BYTE); PROCEDURE SL1V (col, row, len, hgt: BYTE); PROCEDURE SL4M (spN: BYTE); PROCEDURE SL4V (col, row, len, hgt: BYTE); PROCEDURE SL8M (spN: BYTE); PROCEDURE SL8V (col, row, len, hgt: BYTE); PROCEDURE SR1M (spN: BYTE); PROCEDURE SR1V (col, row, len, hgt: BYTE); PROCEDURE SR4M (spN: BYTE); PROCEDURE SR4V (col, row, len, hgt: BYTE); PROCEDURE SR8M (spN: BYTE); PROCEDURE SR8V (col, row, len, hgt: BYTE); PROCEDURE WCRM (spN, npx: BYTE); PROCEDURE WCRV (col, row, len, hgt, npx: BYTE); PROCEDURE WL1M (spN: BYTE); PROCEDURE WL1V (col, row, len, hgt: BYTE); PROCEDURE WL4M (spN: BYTE); PROCEDURE WL4V (col, row, len, hgt: BYTE); PROCEDURE WL8M (spN: BYTE); PROCEDURE WL8V (col, row, len, hgt: BYTE); PROCEDURE WR1M (spN: BYTE); PROCEDURE WR1V (col, row, len, hgt: BYTE); PROCEDURE WR4M (spN: BYTE); PROCEDURE WR4V (col, row, len, hgt: BYTE); PROCEDURE WR8M (spN: BYTE); PROCEDURE WR8V (col, row, len, hgt: BYTE); END Laser.
Вручную вычислять адрес, по которому грузится лазер бейсик, не нужно, — это компилятор делает автоматически. Всё, что Вам нужно для его использования, — знать имена процедур и правильно указать их параметры. Правильность последних контролирует компилятор. Автор Оберона Никлаус Вирт совершенно не против, что пользуются его языком. Он его для этого и разрабатывал. Если говорить о коммерческом аспекте, то надо смотреть на конкретную реализацию транслятора или системы. Есть и коммерческие, но гораздо больше свободных. Среду XDev/ZXDev можно использовать для разработки и реализации программ под любой удобной для Вас лицензией.
|
|