PDA

Просмотр полной версии : SDCC: библиотеки для ZX



Sergey
16.08.2013, 00:17
Предлагаю выкладывать/обсуждать в этой теме библиотеки SDCC для работы c ZX.
Для затравки привожу библиотеку-обёртку для функций TR-DOS. Заголовочный файл нужно поместить в SDCC/include/, библиотеку - в SDCC/lib/z80/.
25.10.2015г. Добавлена библиотека Like REXX strings.

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

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

Вполне не плохая, думаю, получается модель памяти:
непрерывно 32кБ под сишный код в CPU2 и 3. С 0x6000 8кБ под всякие буферы, которые можно использовать безопасно для Си и назначать им ЧЕТНЫЕ адреса, так необходимые для ПДП. И TR-DOS под боком :)
В разделы CPU0 и 1 можно смело врубать паги для использования из программы на Си.

Alcoholics Anonymous
15.04.2014, 08:29
Sergey,

Является TRDOS способны потокового ввода / вывода или будет, что должно быть сделано вручную?

Я искал для кода к вождению TRDOS на пару недель, поэтому я прошу. Я не был в состоянии найти ничего подходящего для потокового ввода / вывода в C еще.

Извините за плохой перевод.

Sergey
15.04.2014, 09:22
Sergey,

Является TRDOS способны потокового ввода / вывода или будет, что должно быть сделано вручную?

Я искал для кода к вождению TRDOS на пару недель, поэтому я прошу. Я не был в состоянии найти ничего подходящего для потокового ввода / вывода в C еще.

Извините за плохой перевод.

Hi! You may write in English. I understand a little :)

Sorry, stream i/o is not yet implemented. I hope soon to write the "fread"/"fwrite" functions. (I'm not a professional programmer).
Now my library is a simple interface to standard TR-DOS procedures based on 0x3d13 point.

By the way, have You ZX-Evolution?

Alcoholics Anonymous
15.04.2014, 10:08
Hi! You may write in English. I understand a little :)


Ха, спасибо Sergey. Я буду держать плохой русский наверху здесь для всех остальных.

Хорошо, я надеялся подтолкнуть вас к мысли о реализации потоков :) Я на самом деле один из разработчиков для z88dk и у нас есть подмножество С11, который включает поток ввода / вывода, так что мы искали заднем конце для дисковых устройств . Как вы можете себе представить, существует не так много доступны, так это выглядит, как нам придется написать все это: (

По крайней мере, имея некоторые примеры кода, как ваша помогает понять устройство. Английские руководства не настолько хороши.

Нет, к сожалению моя машина Синклер (Timex Sinclair 2068) умер много лет назад, когда я замкнут несколько строк случайно при подводилась мощность, так что я все эмуляции сейчас. Но у меня есть интерес ко всем Z80 машин, особенно Синклер, связанных с. Будучи из СУВ, мы не знаем, слишком много о ZX-Evo, лишь кое-что из того, что Alone Coder отправил.

=======



Sorry, stream i/o is not yet implemented. I hope soon to write the "fread"/"fwrite" functions. (I'm not a professional programmer).
Now my library is a simple interface to standard TR-DOS procedures based on 0x3d13 point.


Ok, I was hoping to prod you toward thinking of a streams implementation :) I am actually one of the devs for z88dk and we have a C11 subset that includes stream i/o so we're looking for the back-end for disk devices. As you can imagine, there isn't much available so it looks like we will have to write it all :(

At least having some sample code like yours helps to understand the device. The English manuals are not that good.



By the way, have You ZX-Evolution?

No, unfortunately my Sinclair machine (a Timex Sinclair 2068) died many years ago when I shorted a few lines by accident while power was applied, so I am all emulation now. But I have an interest in all z80 machines, particularly Sinclair-related. Being from WOS, we don't know too much about ZX-Evo, only a few things from what Alone Coder has posted.

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

Итак, REXX-скрипт для автоматизированного создания SDCC-библиотеки из набора исходников.

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

makelib.rx trdos
Теперь не надо заботиться о содержимом батника. Просто складываю все функции в одну папку со скриптом, и он сам мне собирает либу в лучшем виде.

Интерпретатор 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". В ней, как раз, и увидите как "разрезать" исходник.

smalcom
09.06.2014, 18:37
Чёт я не до конца понял. Это так было изобретено VCS и make?

Sergey
09.06.2014, 19:47
Думаю, можно к Code::blocks в качестве make для SDCC прикрутить скрипт на REXX, который будет парсить файл.project и компилить перечисленные в нём файлы.

---------- Post added at 19:47 ---------- Previous post was at 19:40 ----------


У меня тоже есть собственное решение - утилита smartlib...
Здорово, - можно её заюзать, и хранить исходник либы одним файлом - это удобней. А скрипт всё разрежет, откомпилит и соберёт. :v2_thumb:


"Умная" линковка (smart linking) в ZXDev/SDCC.
Да-да, умная линковка рулит. Переделал так либу EVO-SDK - выигрыш по памяти в конечном продукте на лицо.
http://www.zx.pk.ru/showpost.php?p=704377&postcount=23

Valen
10.06.2014, 17:04
Когда делал SDCC framework для v6z80p,
то долго думал, как бы попроще и по эффективнее решить задачу сборки проектов SDCC.

Сначала юзал обычный make, но походу, при добавлении либ и других сорцов, мэйк файлы уже превращались в некие "непроходимые джунгли".
Плюс, была необходимость собирать и под Линуксом и под Виндой (два юзера на линухе, а другие юзера то на винде были).

Долго выбирал - хотелось, что по проще, перебрал кучу всяких lua сборщиков. Главная проблема - это сложно вставить внутрь поддержку sdcc, плюс ещё и баги могут вылазить, в самом сборщике.

Вернулся, "к истокам" - cmake или scons - стабильные системы.
cmake - слишком тяжеловесен для такого небольшого проекта и там M4 подобный язык, мне не понравился

scons
- мульти платформер (Linux, Windows)
- хорошо-читаемый язык python 2
- легко вставить/прописать новый компилер, линковщик, асм
(прописал два асма sdasz80 и pasmo)

Принцип работы scons, такой же как у makefile:
1. строится дерево зависимостей
2. дерево собирается

Только scons строит это дерево, исполняя скрипт на питоне.
Но, если заюзаете scons, приготовитесь потратить немного времени именно на написание питон кода + чтение доков.

Пример: питон файлы sdcc для для scons
sdcclib.py
sdasz80.py
sdcc.py
pasmo.py
http://sourceforge.net/p/v6z80p/code/HEAD/tree/trunk/Contributions/Valen/c_programs/site_scons/site_tools/

И собственно мои файлы, там где сборка реализована. (может пригодится)
http://sourceforge.net/p/v6z80p/code/HEAD/tree/trunk/Contributions/Valen/c_programs/site_scons/

Sergey
10.06.2014, 20:55
Добавил скрипт для автоматической умной линковки. См сообщение №6
http://zx.pk.ru/showpost.php?p=715781&postcount=6

---------- Post added at 20:55 ---------- Previous post was at 20:52 ----------


И собственно мои файлы, там где сборка реализована. (может пригодится)
http://sourceforge.net/p/v6z80p/code/HEAD/tree/trunk/Contributions/Valen/c_programs/site_scons/

Круто! Поражаюсь лаконичностью.

Sergey
25.10.2015, 19:30
В первое сообщение добавлена библиотека для работы со строками в стиле REXX. Пока только 17 функций. Все процедуры проверены на работоспособность. Запланировано еще 15.
А пока довольствуемся этим:
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 COUNTSTR(char* needle, char* haystack);
int LENGHT(char* string);

Приложил небольшой примерчик, как работают некоторые функции.