Библиотеки для SDCC

CALL'ы и RET'ы

Postby amixgris » Thu, 15.08.2013 22:49:28

Предлагаю выкладывать/обсуждать в этой теме библиотеки SDCC для работы с TS-Config и (или) стандартным ZX.
1) TR-DOS.LIB
2) LikeREXXstr.LIB
Attachments
likerexxstr.zip
(4.01 KiB) Downloaded 92 times
evotrdos_src.zip
(11.45 KiB) Downloaded 146 times
Last edited by amixgris on Sun, 25.10.2015 19:02:15, edited 3 times in total.
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby amixgris » Mon, 14.04.2014 09:27:49

Из наименований всех функций, кроме Init, убран префикс "trdos" во избежание громоздкости.

Добавлена функция ReadSectorsDMA.
Читает данные с дискеты с указанных дорожки/сектора в буфер, а затем пребрасывает с помощью ПДП в память с заданной страницы.
Буфер фиксированный: 4кб с адреса 0x6000. Когда не пользуется чтение с дискеты, там можно держать что-угодно.
Добавлены функции CloseTRDOS и OpenTRDOS.

Вполне не плохая, думаю, получается модель памяти:
непрерывно 32кБ под сишный код в CPU2 и 3. С 0x6000 8кБ под всякие буферы, которые можно использовать безопасно для Си и назначать им ЧЕТНЫЕ адреса, так необходимые для ПДП.
В разделы CPU0 и 1 можно смело врубать паги для использования из Си.
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby amixgris » Mon, 09.06.2014 01:37:32

Раньше я библиотеки собирал с помощью досовских бат-файлов, каждый раз вручную добавляя в батник сведения о новой написанной функции.
Со временем осозналось, что это как-то "не по-возролому", в связи с чем было принято решение процесс хоть как-нибудь автоматизировать.
После безуспешной возни с убогими Code::Blocks и Eclipse захотелось чего-то необычного и одновременно простого, для души.

Итак, держите REXX-скрипт для автоматизированного создания SDCC-библиотеки из набора исходников.
(Возможно, конечно, я изобрёл велосипед, но мне, откровенно, пох... :) )

Работает так:
1. Помещаем его в папку с исходниками функций будущей библиотеки..
2. Запускаем с аргументом "имя_будущей_библиотеки_без_расширения", например:
Code: Select all
makelib.rx trdos

Теперь не надо заботиться о содержимом батника. Просто складываю все функции в одну папку со скриптом, и он сам мне собирает либу в лучшем виде.
(Кажется, просмотр рекламы не прошел бесследно для моего мозга :morse: )

Вот так выглядит пример результата его деятельности.
makelib.png
makelib.png (61.56 KiB) Viewed 6954 times


Естественно, этот скрипт будет работать только если у вас установлен интерпретатор REXX. Я себе поставил Regina REXX. Скачать эту замечательную программу
можно отсюда:
http://sourceforge.net/projects/regina-rexx/files/regina-rexx/3.8/

ОБНОВЛЕНИЕ 10-06-2014
Сделал версию скрипта для "умной" линковки библиотеки SDCC из монолитного исходника, задействовав утилиту Oleg N. Cher "smartlib.exe".
То есть, скрипт предварительно режет монолитный исходник на отдельные исходники для каждой функции, а затем компилит их.
Скрипт должен лежать (пока) в папке с исходником. Утилита smartlib - там же, или же должна быть добавлена в PATH.
Прилагаю архив: тестовый пример с библиотекой "evo.c". В ней, как раз, и увидите как "разрезать" исходник.
Attachments
makesmartlib_test.zip
Пример использования скрипта с библиотекой evo.c
(16.66 KiB) Downloaded 121 times
makelib.zip
REXX скрипт для создания библиотек SDCC
(984 Bytes) Downloaded 126 times
Last edited by amixgris on Tue, 10.06.2014 21:35:53, edited 1 time in total.
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby amixgris » Tue, 10.06.2014 21:34:46

Добавил скрипт, см. предыдущее сообщение.
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby Q-Master » Wed, 11.06.2014 15:55:09

cmake не пробовал?
Q-Master
 
Posts: 10
Joined: Mon, 12.08.2013 10:20:25

Postby amixgris » Thu, 12.06.2014 09:45:31

Q-Master wrote:cmake не пробовал?

Нет. Мы не ищем лёгких путей. В ночь перед наступлением мы меняем ландшафты, причём вручную, - утром противник теряется на незнакомой местности и приходит в полную небоеготовность! (с) не я. :)
Тем более, кто-то же должен в этом мире знать REXX. Так это буду я. :))))
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby Q-Master » Fri, 13.06.2014 14:53:49

amixgris wrote:Нет. Мы не ищем лёгких путей. В ночь перед наступлением мы меняем ландшафты, причём вручную, - утром противник теряется на незнакомой местности и приходит в полную небоеготовность! (с) не я. :)
Тем более, кто-то же должен в этом мире знать REXX. Так это буду я. :))))

Боюсь тебя расстроить, но в этом мире рекс знает куда больше народу. 8) У меня на нем фидонода крутилась, точнее кусок фидоноды. В 1998-2005.

Ну и на цмэйке таки писать сурово проще.
Q-Master
 
Posts: 10
Joined: Mon, 12.08.2013 10:20:25

Postby amixgris » Sun, 25.10.2015 19:05:27

Добавил в первый пост библиотеку Like REXX string. - Реализация РЕКСовых функций работы со строками для Z80 (SDCC). Пока 17 функций. Работоспособность ПРОВЕРЕНА. Планируется еще 15. Далее по обстоятельствам.
Итак:
Code: Select all
void CHANGESTR(char* dest, char* needle, char* haystack, char* newneedle);
void UPPER(char* d, char* s);
void COMPRESS(char* d, char* s, char* list);
void COPIES(char* d, char* s, unsigned char num);
void DELSTR(char* d, char* s, int start, int lenght);
void LEFT(char* d, char* s, unsigned char lenght, char pad);
void REVERSE(char* d, char* s);
void SPACE(char* d, char* s, unsigned char len, char pad);
void TRIM(char* d, char* s);
int  COMPARE(char* s1, char* s2, char pad);
int  WORDINDEX(char* string, int WordNum);
int  WORDS(char* string);
void WORD(char* dst, char* string, int WordNum);
int  WORDLENGHT(char* string, int WordNum);
int  WORDPOS(char* phrase, char* string, int startpos);
int  LENGHT(char* string);
int  COUNTSTR(char* needle, char* haystack);


Добавил пример работы некоторых функций.
Attachments
LkRexxDemo.zip
(2.43 KiB) Downloaded 98 times
Last edited by amixgris on Mon, 26.10.2015 07:39:56, edited 1 time in total.
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby g0blinish » Sun, 25.10.2015 20:13:53

Что-то твоя демка кисло выглядела..
пердачок защеканца лвд после чтения моих постов..

[14:29:28] <Alone> На пентагоне картинки на бордюре рисуют. Это вообще нечестно

Теперь поезд ваш в депо, а мой локомотив мчится на укрепление демосцены спектрума.(с)Пиздунков
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3573
Joined: Tue, 18.06.2013 10:59:01

Postby amixgris » Mon, 26.10.2015 07:40:37

Увы :(
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby g0blinish » Mon, 26.10.2015 09:01:09

тогда неясно, зачем проект? типа just4fun?

А как это будет работать?
amixgris wrote:int  LENGHT(char* string);
пердачок защеканца лвд после чтения моих постов..

[14:29:28] <Alone> На пентагоне картинки на бордюре рисуют. Это вообще нечестно

Теперь поезд ваш в депо, а мой локомотив мчится на укрепление демосцены спектрума.(с)Пиздунков
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3573
Joined: Tue, 18.06.2013 10:59:01

Postby amixgris » Mon, 26.10.2015 12:09:54

g0blinish wrote:тогда неясно, зачем проект? типа just4fun?

Ну да. Захотелось, - и написалось. Пока писал испытывал определённое удовольствие от процесса.
Может, кому-нибудь пригодится когда для парсинга текстовиков всяких на ZX.

g0blinish wrote:А как это будет работать?

amixgris писал(а):
int LENGHT(char* string);


Ну как...
типа:
Code: Select all
int n;
char txtbuf[100];
void main(void)
{
blablabla();

COMPRESS(txtbuf, "   My    very 777 nice  string!!!!     ", "7!");
n = LENGHT(txtbuf);

blablabla();

}

так узнаём, какой длинны получилась сжатая строка.
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby psb » Mon, 26.10.2015 13:52:00

не хватает функции PARSE :)
User avatar
psb
 
Posts: 715
Joined: Tue, 30.12.2014 23:22:32

Postby g0blinish » Mon, 26.10.2015 14:00:59

psb wrote:не хватает функции PARSE

ага, заодно match()

непонятно с длиной строки.
пердачок защеканца лвд после чтения моих постов..

[14:29:28] <Alone> На пентагоне картинки на бордюре рисуют. Это вообще нечестно

Теперь поезд ваш в депо, а мой локомотив мчится на укрепление демосцены спектрума.(с)Пиздунков
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3573
Joined: Tue, 18.06.2013 10:59:01

Postby amixgris » Mon, 26.10.2015 15:01:31

g0blinish wrote:непонятно с длиной строки.
- длина без завершающего нуля.
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby amixgris » Mon, 26.10.2015 15:08:45

psb wrote:не хватает функции PARSE
Всему свое время. Может, и до неё дойду.
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby g0blinish » Mon, 26.10.2015 15:49:55

coming soon PARSE megademo!

ААА спрятался в угол и рыдает от зависти...
пердачок защеканца лвд после чтения моих постов..

[14:29:28] <Alone> На пентагоне картинки на бордюре рисуют. Это вообще нечестно

Теперь поезд ваш в депо, а мой локомотив мчится на укрепление демосцены спектрума.(с)Пиздунков
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3573
Joined: Tue, 18.06.2013 10:59:01


Return to Coding

Who is online

Users browsing this forum: No registered users and 1 guest

x