Важная информация

User Tag List

Страница 1 из 6 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 53

Тема: SDCC: Автоматизация

  1. #1
    Activist Аватар для Sergey
    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    405
    Благодарностей: 101
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию SDCC: Автоматизация

    Предлагается публиковать всяческие утилитки, так или иначе автоматизирующие процесс создания программ в SDCC от компиляции до конечного продукта.
    Также приветствуются настройки CMAKE, Code::Blocks, Eclipse, иных сред разработки, для работы с SDCC.

    Прилагаю sdccscl.rex - скрипт, автоматизирующий процесс компиляции исходника на Си и преобразование в готовое к запуску приложение.
    В двух словах: на входе исходник на Си, на выходе - SCL c BASIC-монолодером, содержащим и запускающим результат компиляции исходника. Исходник относительно скрипта может размещаться где-угодно.

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

    К скрипту прилагается пример: scr.c. Программка должна заполнять спектрумовский экран кодом 0xAA, и она, таки, заполняет.

    P.S. Для тех, кто в танке: для работы скрипта требуется наличие установленного интерпретатора Regina REXX.
    Вложения Вложения
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card

  2. Этот пользователь поблагодарил Sergey за это полезное сообщение:
    perestoronin (20.01.2015)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Master
    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    610
    Благодарностей: 86
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вариант на cmake. Правда пока без автоматизации. Прикручу чуть позже.
    Вложения Вложения

  5. Эти 2 пользователя(ей) поблагодарили Q-Master за это полезное сообщение:
    perestoronin (20.01.2015), Sergey (06.07.2014)

  6. #3
    Veteran Аватар для creator
    Регистрация
    02.07.2006
    Адрес
    Новосибирск
    Сообщений
    1,391
    Благодарностей: 884
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я как-то попробовал, ничего не получилось. Вот это:
    Код:
    /* SCLView */
    
    parse arg scl
    if scl='?' then do
    options prompt 'FILE/A: '
    parse pull scl
    end
    if scl='' then do
    say 'required argument missing'
    say 'No file to view'
    exit
    end
    scl=strip(scl,,' "')
    if ~open(file,scl,'R') then do
    say 'No file to view'
    exit
    end
    
    if readch(file,8)~='SINCLAIR' then do
    say 'File is not SCL format'
    exit
    end
    
    say 'SCLView (R)  View Utility  Version 1.0  03-Dec-2000'
    say ' (c) 2000  Alex Kovrigin, 2:5000/28.19'
    say
    say 'Name        Start  Length  Sector'
    say '----------  -----  ------  ------'
    
    do c2d(readch(file))
    say readch(file,8) readch(file)||right(c2d(reverse(readch(file,2))),7)||right(c2d(reverse(readch(file,2))),8)||right(c2d(readch(file)),8)
    end
    На Амиге пашет как танк.
    Или так:
    Код:
    /* TAPView */
    
    PARSE ARG TAPFILE
    IF TAPFILE='?' THEN DO
    OPTIONS PROMPT 'FILE/A: '
    PARSE PULL TAPFILE
    END
    IF TAPFILE='' THEN DO
    SAY 'required argument missing'
    SAY 'No file to view'
    EXIT
    END
    TAPFILE=STRIP(TAPFILE,,' "')
    IF ~OPEN(FILE,TAPFILE,'R') THEN DO
    SAY 'No file to view'
    EXIT
    END
    FILELENGTH=SEEK(FILE,0,'E')
    SEEK(FILE,0,'B')
    SAY 'TAPView (R)  View Utility  Version 1.0  10-Dec-2000'
    SAY ' (c) 2000  Alex Kovrigin, 2:5000/28.19'
    SAY
    SAY 'Type             Name        Length  Start   Size'
    SAY '---------------  ----------  ------  -----  -----'
    
    LOOP:
    BLOCKLENGTH=C2D(REVERSE(READCH(FILE,2)))-2
    FLAG=C2D(READCH(FILE,1))
    IF FLAG=0&BLOCKLENGTH=17 THEN DO
    TYPE=C2D(READCH(FILE,1))
    SELECT
    WHEN TYPE=0 THEN TYPE='Programm'
    WHEN TYPE=1 THEN TYPE='Number Array'
    WHEN TYPE=2 THEN TYPE='Character Array'
    WHEN TYPE=3 THEN TYPE='Bytes'
    OTHERWISE
    END
    NAME=READCH(FILE,10)
    SIZE=C2D(REVERSE(READCH(FILE,2)))
    START=C2D(REVERSE(READCH(FILE,2)))
    IF TYPE='Program'&START>32767 THEN START=NONE
    LENGTH=C2D(REVERSE(READCH(FILE,2)))
    IF TYPE='Bytes' THEN LENGTH=''
    SAY LEFT(TYPE,15)||RIGHT(NAME,12)||RIGHT(LENGTH,8)||RIGHT(START,7)||RIGHT(SIZE,7)
    END
    ELSE DO
    SAY '-----Headerless--block-----'RIGHT(FLAG,15)||RIGHT(BLOCKLENGTH,7)
    SEEK(FILE,BLOCKLENGTH)
    END
    IF SEEK(FILE,1)=FILELENGTH THEN EXIT
    SIGNAL LOOP
    Последний раз редактировалось creator; 06.07.2014 в 19:06.
    В правильно заданном вопросе содержится половина ответа

  7. Этот пользователь поблагодарил creator за это полезное сообщение:
    Sergey (07.07.2014)

  8. #4
    Activist Аватар для Sergey
    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    405
    Благодарностей: 101
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от creator Посмотреть сообщение
    Я как-то попробовал, ничего не получилось.
    1. В функции STRIP третий аргумент должен быть одиночным символом, а у тебя строка из пробела и кавычки.
    2. То же самое, плюс баг Regina: "бесхозное" значение функции выводится в консоль, поэтому приходится значение функции чему-то присваивать.
    3. Чтобы включить все "плюшки" АмигаRexx, в начало программы нужно добавить строчки:
    OPTIONS AREXX_SEMANTICS
    OPTIONS AREXX_BIFS


    Подправил - работает отлично, в том числе в Linux.

    P.S. На усмотрение модератора, сообщения по поводу программирования на REXX можно переместить в отдельную тему "REXX на службе ZX".
    Вложения Вложения
    Последний раз редактировалось Sergey; 11.07.2014 в 13:50.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card

  9. Эти 2 пользователя(ей) поблагодарили Sergey за это полезное сообщение:
    creator (08.07.2014), perestoronin (20.01.2015)

  10. #5
    Master
    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    610
    Благодарностей: 86
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sergey Посмотреть сообщение
    Автоматизация, не обязательно, чтоб совсем полная, но ОБЛЕГЧАЮЩАЯ нудные процессы И для cmake, надо бы версию указать, а то там у каждой свои прибамбасы, как я понял.
    Да надо-бы таргеты для создания образа прикрутить, просто некогда.
    Насчет версии:
    Обычно прямо в CMakeLists.txt пишется минимальная требуемая версия.
    В данном случае:
    cmake_minimum_required(VERSION 2.8)

    Никаких заморочек которые сломались-бы в пост-идущих версиях там нет. Все просто как валенки. Ну и в теме с линковкой был выложен полный архив с проектом где все собирается cmake'ом. Лучше, наверное, посмотреть туда, т.к. там еще есть модули для сборки библиотек. Да и просто понятнее вариант.

  11. #6
    Veteran Аватар для creator
    Регистрация
    02.07.2006
    Адрес
    Новосибирск
    Сообщений
    1,391
    Благодарностей: 884
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sergey Посмотреть сообщение
    Подправил - работает отлично.
    Спасибо! Похоже сейчас мне масть и попрёт. Я ещё не знаю как, но какой-то прилив сил ощущаю. Ещё раз спасибо!
    В правильно заданном вопросе содержится половина ответа

  12. #7
    Master
    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    610
    Благодарностей: 86
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sergey Посмотреть сообщение
    Как раз тот тулчейн и отказался собирать под cmake 3.0 - уж не знаю почему. Так что, тут аккуратней надо.
    Хм. Возможно там поменялись названия переменных. Надо проверить. Мне пока не на чем. У меня 2.8.

  13. #8
    Activist Аватар для Sergey
    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    405
    Благодарностей: 101
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    magicwc.rex, собиралка плагинов для WC по типу make.
    Должна лежать в папке с исходниками плагина. Параметров не требует. Всё задаётся статично внутри скрипта.
    На входе имена исходных файлов (Си, ассемблер, данные), а на выходе - плагин.WMF.
    Имя плагина определяется по файлу для 0-й страницы.
    Более подробно - памятка в конце скрипта.

    Всё не тестировал, но прилагаемый пример компилится и работает. Об ошибках прошу докладывать незамедлительно.
    Вложения Вложения
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card

  14. Этот пользователь поблагодарил Sergey за это полезное сообщение:
    perestoronin (20.01.2015)

  15. #9
    Veteran Аватар для creator
    Регистрация
    02.07.2006
    Адрес
    Новосибирск
    Сообщений
    1,391
    Благодарностей: 884
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да что ж это такое творится с функцией seek()?
    Она работает, указатель по хэндлеру передвигает куда надо, но возвращает всегда 0 (а должна возвращать установленную позицию от начала). TAPView из-за этого косяка только первый заголовок и показывает т.к.:
    FILELENGTH=SEEK(FILE,0,'E') => FILELENGTH=0
    ...
    IF SEEK(FILE,1)=FILELENGTH THEN EXIT => 0=0 вот оно из цикла и выходит

    Я уже всю голову сломал.
    В правильно заданном вопросе содержится половина ответа

  16. #10
    Activist Аватар для Sergey
    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    405
    Благодарностей: 101
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от creator Посмотреть сообщение
    Да что ж это такое творится с функцией seek()?
    Она работает, указатель по хэндлеру передвигает куда надо, но возвращает всегда 0 (а должна возвращать установленную позицию от начала). TAPView из-за этого косяка только первый заголовок и показывает т.к.:
    FILELENGTH=SEEK(FILE,0,'E') => FILELENGTH=0
    ...
    IF SEEK(FILE,1)=FILELENGTH THEN EXIT => 0=0 вот оно из цикла и выходит

    Я уже всю голову сломал.
    Есть вещи, которые работают не так как должны или не работают
    Но это можно обойти другими средствами REXX. Сейчас на работе. Позже подумаю, как решить твой вопрос.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card

Страница 1 из 6 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. SDCC: библиотеки для ZX
    от Sergey в разделе Программирование
    Ответов: 10
    Последнее: 25.10.2015, 19:30
  2. Бага SDCC версии 3.3.0
    от TSL в разделе Программирование
    Ответов: 37
    Последнее: 20.04.2014, 15:31
  3. sdcc. с чего начать.
    от ALKO в разделе Программирование
    Ответов: 42
    Последнее: 16.09.2012, 13:49
  4. SDCC вокруг да около
    от andrews в разделе Программирование
    Ответов: 8
    Последнее: 26.03.2008, 08:16

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •