ZXNet эхоконференция «zxnet.soft»


тема: Предложение кодерам на алясме alasm



от: Alexander Bondarenko
кому: All
дата: 22 Apr 2004
---------------------------------------------------------
Переслал: Alexander Bondarenko из CODE.ZX
Дата: 22 Apr 2004
Время: 14:58
От: Alexander Bondarenko, 500:3432/3
Для: All
Тема: Предложение кодерам на алясме alasm
---------------------------------------------------------

*** Послано также в CODE.ZX (Для тех, кто кодить умеет...)
*** Послано также в ZXNET.SOFT (Софтина...)
*** Послано также в EKB.PROGRAMMING (Программинг в сети.)

Здравствуйте, All!

Для наращивания потенциала "умной" библиотеки процедур под
алясм нужна помощь кодеров. Hужны идеи, предложения и т. п.
Привожу краткое описание библиотеки для тех, кто заинтересовался.

=================================================================

LIB+

Библиотека LIB+ (в данный момент находящаяся в состоянии
разработки) представляет из себя сборник всяческих полезных
процедур и подпрограмм, пока их ещё только порядка 30 штук. Она
расчитана на ассемблер alasm - как единственный на реале, на
данный момент поддерживающий условную трансляцию ассемблер.

Общая организация библиотеки такова, что программисту не
требуется за ней никак следить, кроме того, как определить
одну служебную переменную (да и то, если оно нужно). Для
"вызова" библиотеки достаточно лишь ввести в конце программы:

INCLUDE "LIB+"

При этом, автоматически будет определено, какие процедуры
нужно компилировать, а какие - нет. В самой программе достаточно
где-то явно указать метку процедуры, чтобы она потом
прилинковалась:

CALL Procedure

или

LD BC,Procedure

Файл LIB+ - главный модуль библиотеки, определяет состояние
метки и в случае, если она используется, но не определена,
делает INCLUDE вспомогательного файла, в котором и содержится
процедура.

Вспомогательные файлы библиотеки содержат процедуры
определённой тематики. Всего на данный момент существует
следующий набор этих файлов:

SCREEN_P - процедуры для работы с адресами экрана
WINFX_R - процедуры различных эффектов с окнами на экране.
PR_R - три процедуры печати, соответственно на 42, 51
и 64 символа в строке. Вариант - для посимвольной
печати, шустрые. Hо для текстовых листалок
предпочтительнее другой вариант - строчный.
MEM128_P - процедуры для работы со страницами верхней памяти
(в данный момент - только для 128к)
WINMAN_P - менеждер окошка, позволяет задать такое-то окно
как текущее, либо "снять" параметры текущего окна
PRNMAN_R - менеджер процедуры печати, позволяет задать
процедуру печати как текущую, печатать с неё в
текущее окно и тут же переключаться на другие
процедуры печати. Автоматически стыкуется с
WINMAN_R.
INPUT_P - процедуры опроса клавиатуры (через 48-е ПЗУ)

Эти файлы разрешается вызывать в программе отдельно от LIB+,
что позволит компилировать определённые по тематике наборы
процедур в конкретное место кода. Можно вообще отказаться от
LIB+, но тогда самому придётся следить за процессом компиляции.

Буковка R или P в конце имени вспомогательного файла
означает, может ли он существовать самостоятельно, без
необходимости других вспомогательных файлов. Если имя
заканчивается на _P, то значит - может. Иерархия библиотеки:

+----->WINMAN_P
|
|
PRNMAN_R-----+ WINFX_R------>SCREEN_P
| ^
| |
+----->PR_R-------------+--->FONT42, FONT51, FONT64

MEM128_P
INPUT_P

При использовании LIB+, можно задать страницу после INCLUDE,
куда при компиляции будет грузиться весь комплект. Существует
так же возможность грузить LIB+ в одно место, а вспомогательные
файлы - в другое. Это задаётся переменной _LPG1. Если она
определена, то все вспомогательные файлы будут грузиться в
страницу, чей номер содержится в _LPG1. Это сделано для
частичного ускорения процесса компиляции.

Отдельные процедуры могут модифицироваться в зависимости от
того, используются ли какие-то другие процедурки, мало-мальски
связанные с этими. Hапример - процедура SET_WIN (задание
текущего окна), при использующемся модуле PRNMAN__R, будет, кроме
задания собственно окна экрана, делать перерасчёт и для
текущей процедуры печати. Если же модуль PRNMAN_R не
используется, то тогда в SET_WIN не будет даже и намёка на код,
занимающийся этим перерасчётом. Или - все процедуры спецэффктов
с окном, при использующемся WINMAN_R, наделяются второй точкой
входа (CW_ + название процедуры спецэффекта) - для работы с
текущим окном (не требует явно задавать параметры окна). Hо это
"наделение" происходит опять же в том случае, если оно где-либо
вызывалось.

Библиотека позволяет организовать исходник программы более
культурно и кое-где даже немного "думает" за программиста.
Привожу список процедур библиотеки:

SCREEN_P - работа с экранными адресами

SCRADR - раcчёт адреса в экране по знакоместным координатам
в DE (YX) и помещение его в HL
ATRADR - то же, но для адреса в атрибутах
SCPXADR - то же, но для адреса в экране и по пиксельным
координатам
SCR2ATR - конвертирование экранного адреса в HL для
соответствующему ему атрибутного.
DNHL - перерасчёт адреса экрана в HL линией ниже
UPHL - то же, но линией выше
DN8HL - то же, но 8-ю линиями ниже
UP8HL - то же, но 8-ю линиями выше

PR_R - процедуры печати

Данный модуль требует 3-х файлов шрифтов для процедур -
FONT42, FONT51 и FONT64. Если одноимённые метки уже определены,
то шрифт не будет подгружаться, что тоже позволяет
прилинковывать шрифты вручную в конкретное место программы.

PR42, PR51, PR64 - процедуры печати символа. Печатаемый
символ - в A.
GTXY42, GTXY51, GTXY64 - процедуры позиционирования
"каретки". DE - координаты печати в матрицах.
PRLIN42, PRLIN51, PRLIN64 - печать одной линии символа. A -
символ, DE - координаты печати в матрицах, B - номер линии в
знакоместе, H - адрес линии символа. Вспомогательные процедуры.

WINFX_R - набор спецэффектов. Для этих процедур координаты окна
задаются в DE (YX), размеры окна - в BC (высота/длина). Всё по
знакоместам.

CLRSWN (оконный вариант - CW_CLRSWN) - очистить экранную
область окна
FILAWN (CW_FILAWN) - заполнить байтом атрибутную область
окна
RMKWIN (CW_RMKWIN) - обрисовать окно рамкой. Рамка -
прямоугольная линия толщиной в 1 пиксель, заполненная 0 - вокруг
окна (работа ведётся с областью, граничащей с окном, поэтому
окно всегда должно иметь вокруг себя эту область, если оно
примыкает к границе экрана, то будут глюки), и такая же линия -
по нижней и правой границе прямоугольника окна, заполненная 1.
SLC_WIN_UP (CW_SLC_WIN_UP) - скроллинг окна вверх на
знакоместо, с атрибутами.
SLP_WIN_UP (CW_SLP_WIN_UP) - скроллинг окна вверх на пиксель
SLP_WIN_DN (CW_SLP_WIN_DN) - скроллинг окна вниз на пиксель

MEM128_P - процедуры для работы со страницами верхней памяти.

SET_PG - установить текущую страницу в A
PUSH_PG - сохранить номер текущей страницы на стеке
POP_PG - восстановить номер страницы со стека и установить
её

WINMAN_P - маленький менеджер окошек

SET_WIN - установить текущее окно (DE - YX, BC -
высота/длина). Если окно вылазит где-то за экран, то оно будет
подогнано под его размеры.
GET_WIN_INFO - получить параметры текущего окна.

PRNMAN_R

SET_CUR_PR - установить текущую процедуру печати (адрес - в
HL)
PR_WIN - печать символа (A) в окне
PR_STR_WIN - печать строки (адрес в HL, заканчивается 0 или
13)
GTXY_WIN - позиционирование каретки внутри окна

INPUT_P - опрос клавиатуры через 48-е ПЗУ

INKEY48 - номер нажатой клавиши в A
=================================================================

Вобщем, то, что существует на данный момент - это отнюдь не
вертолёт, работы над библиотекой ещё непочатый край.

Hадеюсь на поддержку народа.

С уважением,
Alexander.


-+- [code] [gfx] Current project (alasm LIB+): 25%
+ Origin: [9/I 2k] [Speccy rulez] [pc - suxx] (500:3432/3)
╙────────────────────────────────────────────╜

*Здравствуй, All!*


/Вот и всё, All, можешь листать дальше.../




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Разбиралка - Описание игры: MULTI PLAYER SOCCER MANAGER.
Humor - юмор.
От авторов - Virt group и газета ZX-News.
Железо - DMA.
Проходилка - Seymour Take One!

В этот день...   26 апреля