Page 1 of 1

CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫКЕ

PostPosted: Fri, 01.08.2014 10:49:15
by ZEK
Image

Итак, имеем SDCC но не имеем нормальной IDE для работы с онным
Вернее IDE есть, звать её Code::Blocks но нужно слегка подпилить напильником

При установке Code::Blocks она определит наличие sdcc и пропишет его в настройках, поэтому ставим сначала SDCC, определяет хрен его знает как, возможно по PATH, возможно брутфорсит, не суть, если она не определила SDCC нужно его ручками прописать, у меня это выглядит так

Image
Image

В общем прописываем по аналогии, красненьким важное отмечено если что

Вроде как бы все, IDE вроде как знает SDCC, создавай проект и юзай, а нет! нужен выше упоминаемый напильник.
Необходимо поменять расширение объектных файлов для SDCC с "o" на "rel", в этом же диалоге настройки компилятора, следуем скринам

Image
Image

Вот теперь при можно создавать проект

Но главное!!! Не забыть перезапустить IDE а то возникнет удивление

************************************************************************************************************************************************
КОНЕЦ СООБЩЕНИЯ
************************************************************************************************************************************************

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Fri, 01.08.2014 11:16:56
by ZEK
Создание проекта, тут тоже как бы не все гладко, в IDE нет нужного типа проекта, аля сделай мне бинарник для ts-conf

Поэтому создаем проект как то так.....
Важно! выбирать проект С а не С++, с С++ не разбирался как собирать, да и не вижу целесообразности использования онного на ZX

Image
Image
Image
Image

Тобиш вроде как мы собираем консольное приложение и собираться оно у нас будет при помощи SDCC
Нужно теперь еще разок взяться за напильник и подрегулировать проект под собственные нужды
Для этого следуем вдоль крансной полосочки на скринах...

Image
Image

Нужно указать что собрать бинарь для Z80 и отключаем стандартны CRT0 бутстрапер, так же на вкладке линковщика
нужно указать размещение кода и данных приложения

Image
Image
Image

Жмем оки теперь можно даже собрать проект и он даже соберется!!! Идем смотрим в BIN и первое что видим бинарь у нас с раширенем EXE
ну и хрен с ним, будем считать это кривостью кодеблокса :) ну или как вариант доки почитат

************************************************************************************************************************************************
КОНЕЦ СООБЩЕНИЯ
************************************************************************************************************************************************

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Fri, 01.08.2014 11:26:59
by ZEK
Теперь о CRT0, он нужен, в нем как минимум задается размещение сегментов, вызвается инициализатор переменных и настраивается стек

Делаем свой CRT0, для этого создаем в проекте новый файл crt0.s именно с таким именем и расшрением что бы не возиться с настройкой параметров, я размещаю его в корне проекта, но хз может поймет если он не будет в корне

содержимое файла CRT0 может быть примерно таким:
Code: Select all

   .module crt0
   .globl   _main

   .area   _HEADER
init:
   ld   sp,#0xBFFF

    ;; Initialise global variables
    call    gsinit
   call   _main
   jp   _exit

_exit::
1$:
   halt
   jr   1$

   .area   _HOME
   .area   _CODE
   .area   _INITIALIZER
   .area   _GSINIT
   .area   _GSFINAL

   .area   _DATA
   .area   _INITIALIZED
   .area   _BSEG
   .area   _BSS
   .area   _HEAP

   .area   _CODE

    jp      init

   .area   _GSINIT
gsinit::
   ld   bc, #l__INITIALIZER
   ld   a, b
   or   a, c
   jr   Z, gsinit_next
   ld   de, #s__INITIALIZED
   ld   hl, #s__INITIALIZER
   ldir
gsinit_next:

   .area   _GSFINAL
   ret


Жмем собрать, получаем много ругни на вкладке Build Log
Нам нужно настроить как собирать asm файл

Жмем на нем правой кнопкой -> "Properties"
В диалоге свойств на вкладке "Advanced" ставим галку "Use custom command to build this file"
Тобиш для этого файла Code::Blocks не будет генерить строку сборки а будет юзаться прописанная
Строка сборки для ASM файлов такая "sdasz80 -g -o $object $file"
ключи
-g все неизвестные символы считаются внешними, что бы меньше писать
-o выходной файл

Теперь можно собрать проект, CRT0 будет прилеплен, "jp init" будет первой командой бинаря

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Fri, 01.08.2014 18:25:06
by ZEK
На выходе есть бинарник, только он в HEX формате, не совсем подходит
нам нужно его в BIN формат преобразовать


1. В наборе с SDCC есть утилита makebin но она мягко говоря странная поэтому мы о ней сразу забываем
Нам нужен нормальный hex2bin брать тут http://gnuwin32.sourceforge.net/packages/hex2bin.htm

Нам нужно его где то разместить, можно сделать как я, создал себе каталог с утилитами и прописал его в PATH операционки
Можно просить его в папку Windows или Windows/System32 или в каталог bin к SDCC тем самым разводя срач, на ваше усмотрение в общем
Главное что бы из запущенной консоли был доступ к bin2hex


2. Нужно теперь указать что после успешной сборки нужно запустить утилиту bin2hex
Для этого на проекте жмем правой кнопкой -> Build options...
В диалоге настроек сборки есть вкладка "Pre/Post build steps" нужно в post build steps указать hex2bin -e bin $(PROJECT_DIR)$(TARGET_OUTPUT_FILE)

Все после сборки будет готовый bin файл с нужными байтам

3.Бинарный бинарник это уже шаг вперед, но с ним что то сделать надо, можно его в образ диска закинуть и запустить лоадером, но цель выше - нужен SPG
Для этого нужно 2 утилиты, приложены вложением, одна пакует файлы вторая собирает spg файлы, ложим их по соседству с hex2bin что бы были доступны из консоли
Теперь нужно задать правила сборки SPG файла

Для этого в корне проекта нужно создать файл к примеру spg.ini
содержимое следующее
Code: Select all
Desc = SDCC DEMO
Start = 0x4000
Stack = $BFFF
Resident = #5B00
Page3 = 0
; CPU clock: 0 - 3,5MHz / 1 - 7MHz / 2 - 14MHz / 3 - 14+MHz
Clock = 3
; INT: 0 - DI / 1 - EI
INT = 1
Pager = 0
; Blocks description: address (512 multiple, #C000-#FE00), page number, filename
Block = #C000, 5,  bin\debug\test.bin


Автоматизации тут пока нет, будем думать, опишу что нужно под себя прописать
Start= тут тоже самое что и прописано было линкеру в --code-loc
Stack= тут адрес стека, по хорошему то же самое что и crt0.s в строке "ld sp,#BFFF"
Blocks = #C0000 это значит писать с нулевого смещения в страницу 5, станица 5 в тоге окажется на своем месте после загрузки то есть по адресу 0x4000, далее пути до папки сборки

Теперь нужно дописать строку в post build steps
строка следующая: spgbld -b spg.ini out.spg

После сборки в корне проекта появится out.spg который может запускать эмулятор TS-Conf

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Fri, 01.08.2014 19:12:44
by ZEK
А вот демка C собранная одной кнопкой из Code::Blocks

После запуска, раз в 3 секунду примерно будет мигать бордюр
Если все правильно сделано, получиться SPG как в вложении

Code: Select all

#define TS_IO_BASE 0xAF
#define TS_PORT(x) __sfr __banked __at ((x<<8) | TS_IO_BASE)
TS_PORT(0x0F) TS_Border;

static void Loop()
{
    char i = 0;

    while (1)
    {
        TS_Border = i++;
        __asm
            halt
        __endasm;
    }
}

void main()
{
    Loop();
}


Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Sun, 03.08.2014 22:05:00
by amixgris
Таргеты для code::blocks. Собирают в BASIC-монолодер для режимов 48/128, IM1. Требуется версия SDCC, поддерживающая опцию --reserve-regs-iy, а также установка интерпретатора REXX - ReginaRexx.
В архиве также присутствует пример: набросок игры 2048.

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Mon, 04.08.2014 10:51:49
by ZEK
Надо шаблонов и визардов наделать, но с ними беда, нужно в конфигурационном скрипте их прописывать, есть еще такой пункт как User Template все руки не доходят посмотреть как оно работает, может быть есть шанс простым копированием добавить шаблоны

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Sat, 09.08.2014 19:19:14
by ZEK
Пример написаный на Ц, по мотивам тетриса попова - ТРЕШИКС

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Sat, 09.08.2014 22:51:21
by LessNick
ZEK wrote:Пример написаный на Ц, по мотивам тетриса попова - ТРЕШИКС


Хороший годный тетрис. Даж поиграл немного. единственное, что не понравилось, так это вращение, очень быстро. Успевает провернутся на 2 оборота, пока отпустишь клавишу.

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Mon, 11.08.2014 09:07:28
by ZEK
Да, управление надо чуть пофиксить, паузу перед авторипитом вставить и еще кое что помелочам

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Fri, 17.07.2015 15:22:07
by Yuri
Я установил версию 8.02, так как в версии 13.12 не мог собрать проект из-за Invalid Debugger.
Настройки сделал почти такие же. Только в Project /Build Options выбрал Type не Console Applications, а Native, при этом убрал флажок Auto-generate filename extension и вручную прописал расширение HEX.
Руководствовался также следующей статьёй:
Настройки проекта для версии 8.02
Какие у кого есть заголовочные файлы и файлы определений для TS-Config? Хочу удобно писать, что бы обращение к портам человеческое было, да и к другим устройствам.
Можно поподробней о CRT0 - что это и для чего?
Я так понимаю, для Z80 можно использовать следующие типы данных - char и int8_t. Можно ли без проблем использовать int16_t? Можно ли в тексте программ без проблем использовать целочисленные умножение и деление, не будет ли потом больших тормозов?

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Fri, 17.07.2015 15:35:34
by TS-Labs
Yuri wrote:Можно ли без проблем использовать int16_t?

Естественно. Как и 32. С реализовано в объеме стандарта для каждого компилера.
Yuri wrote:Можно ли в тексте программ без проблем использовать целочисленные умножение и деление

Заменяются на процедуры разной степени быдлокодности.

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Tue, 21.07.2015 14:36:58
by ZEK
В тетрисе есть заготовка заголовочного файла, более полный я уже год как пишу пишу не допишу, ибо хочется сделать либу конструктов, что бы юзать только то что нужно и в нужной форме

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Tue, 21.07.2015 14:37:46
by ZEK
crt0 это startup код приложения, настраивает стек, заполняет инициализированые переменные итд

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Sat, 10.02.2018 16:28:08
by dr_max
Может уже все понаделали себе визардов и молчат? )
предлагаю мой "визард", создающий консольный проект.
распаковать в папку с code::blocks с заменой файла config.script либо добавлением в него имеющийся строки:
Code: Select all
    RegisterWizard(wizProject,     _T("z80"),         _T("Z80 TS-Conf Console application"),          _T("Console"));


для сборки потребуются:
sdcc
spgbld
hex2bin
cp

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Sat, 10.02.2018 17:24:38
by TS-Labs
Спасибо!

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Sat, 10.02.2018 18:30:29
by dr_max
TS-Labs, да не за что. может еще что впилю по мере освоения.

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Mon, 18.11.2019 13:32:12
by dr_max
TS-Conf Wizard v0.2
+ добавлен проект WC plugin

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Mon, 18.11.2019 21:37:03
by LessNick
Спустя 5 лет тож решил поставить сию шарманку. В 2019м уже версия CODE::BLOCKS — 17.12

ZEK wrote:Необходимо поменять расширение объектных файлов для SDCC с "o" на "rel",


и в этой версии уже по умолчанию стояло расширение "rel" так что менять ничё не нужно (но это не точно :)

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Mon, 18.11.2019 23:10:24
by LessNick
Ещё пару интересных моментов:

Пока не убрал галочки «Auto-generate filename prefix» и «Auto-generate filename extention», автоматически менялось «.hex» на «.exe» у компилируемого файла:

1.png


ZEK wrote:В диалоге настроек сборки есть вкладка "Pre/Post build steps" нужно в post build steps указать hex2bin -e bin $(PROJECT_DIR)$(TARGET_OUTPUT_FILE)


Пока не поставил галочку «Always execute, even if target is up-to-date», бинарь не появлялся.

2.png


И ещё момент, пока не выбрал вот тут дебагер, задалбовало матерится ошибкой, что не указан дебагер:

3.png

Re: CODE::BLOCKS УДОБНАЯ СРЕДА ПРОГРАММИРОВАНИЯ НА ОДНОМ ЯЗЫ

PostPosted: Fri, 20.12.2019 19:31:35
by idxi
Ништяки ) ssdc по-тихоньку баги закрывает, улучшается )