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

CALL'ы и RET'ы

Postby ZEK » Fri, 01.08.2014 10:49:15

Image

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

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

Image
Image

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

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

Image
Image

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

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

************************************************************************************************************************************************
КОНЕЦ СООБЩЕНИЯ
************************************************************************************************************************************************
Attachments
Screenshot_5.png
Screenshot_4.png
Screenshot_3.png
Screenshot_2.png
Screenshot_1.png
Last edited by ZEK on Fri, 01.08.2014 11:37:15, edited 1 time in total.
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby ZEK » Fri, 01.08.2014 11:16:56

Создание проекта, тут тоже как бы не все гладко, в IDE нет нужного типа проекта, аля сделай мне бинарник для ts-conf

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

Image
Image
Image
Image

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

Image
Image

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

Image
Image
Image

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

************************************************************************************************************************************************
КОНЕЦ СООБЩЕНИЯ
************************************************************************************************************************************************
Attachments
Screenshot_14.png
Screenshot_13.png
Screenshot_12.png
Screenshot_11.png
Screenshot_10.png
Screenshot_9.png
Screenshot_8.png
Screenshot_7.png
Screenshot_6.png
Last edited by ZEK on Fri, 01.08.2014 17:06:22, edited 2 times in total.
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby ZEK » Fri, 01.08.2014 11:26:59

Теперь о 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" будет первой командой бинаря
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby ZEK » Fri, 01.08.2014 18:25:06

На выходе есть бинарник, только он в 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
Attachments
spg.zip
(18.35 KiB) Downloaded 153 times
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby ZEK » Fri, 01.08.2014 19:12:44

А вот демка 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();
}

Attachments
out.spg
(1.5 KiB) Downloaded 192 times
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby amixgris » Sun, 03.08.2014 22:05:00

Таргеты для code::blocks. Собирают в BASIC-монолодер для режимов 48/128, IM1. Требуется версия SDCC, поддерживающая опцию --reserve-regs-iy, а также установка интерпретатора REXX - ReginaRexx.
В архиве также присутствует пример: набросок игры 2048.
Attachments
scl4codeblocks.zip
(107.36 KiB) Downloaded 154 times
User avatar
amixgris
 
Posts: 161
Joined: Mon, 30.07.2012 03:22:48
Location: Самара

Postby ZEK » Mon, 04.08.2014 10:51:49

Надо шаблонов и визардов наделать, но с ними беда, нужно в конфигурационном скрипте их прописывать, есть еще такой пункт как User Template все руки не доходят посмотреть как оно работает, может быть есть шанс простым копированием добавить шаблоны
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby ZEK » Sat, 09.08.2014 19:19:14

Пример написаный на Ц, по мотивам тетриса попова - ТРЕШИКС
Attachments
treshiks.spg
(5 KiB) Downloaded 203 times
TETRIS.zip
(96 KiB) Downloaded 177 times
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby LessNick » Sat, 09.08.2014 22:51:21

ZEK wrote:Пример написаный на Ц, по мотивам тетриса попова - ТРЕШИКС


Хороший годный тетрис. Даж поиграл немного. единственное, что не понравилось, так это вращение, очень быстро. Успевает провернутся на 2 оборота, пока отпустишь клавишу.
(∩。•o•。)っ.゚☆。・ TS-Conf для PentEvo — это классический Pentagon 128k для тех кто хочет больше!
User avatar
LessNick
грей сашу — сашу грей
 
Posts: 864
Joined: Thu, 26.07.2012 15:00:53

Postby ZEK » Mon, 11.08.2014 09:07:28

Да, управление надо чуть пофиксить, паузу перед авторипитом вставить и еще кое что помелочам
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby Yuri » Fri, 17.07.2015 15:22:07

Я установил версию 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? Можно ли в тексте программ без проблем использовать целочисленные умножение и деление, не будет ли потом больших тормозов?
User avatar
Yuri
 
Posts: 4
Joined: Thu, 02.07.2015 10:07:00

Postby TS-Labs » Fri, 17.07.2015 15:35:34

Yuri wrote:Можно ли без проблем использовать int16_t?

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

Заменяются на процедуры разной степени быдлокодности.
User avatar
TS-Labs
 
Posts: 4997
Joined: Thu, 26.07.2012 01:29:56

Postby ZEK » Tue, 21.07.2015 14:36:58

В тетрисе есть заготовка заголовочного файла, более полный я уже год как пишу пишу не допишу, ибо хочется сделать либу конструктов, что бы юзать только то что нужно и в нужной форме
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby ZEK » Tue, 21.07.2015 14:37:46

crt0 это startup код приложения, настраивает стек, заполняет инициализированые переменные итд
KOE сказал заработает, значит заработает. Он кандидат наук, а не радиолюбитель. (c) alone
User avatar
ZEK
 
Posts: 172
Joined: Mon, 10.06.2013 13:51:07

Postby dr_max » Sat, 10.02.2018 16:28:08

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


для сборки потребуются:
sdcc
spgbld
hex2bin
cp
Attachments
codeblocks_z80_ts_wizard.zip
(16.89 KiB) Downloaded 55 times
dr_max
 
Posts: 34
Joined: Thu, 26.01.2017 12:03:36

Postby TS-Labs » Sat, 10.02.2018 17:24:38

Спасибо!
User avatar
TS-Labs
 
Posts: 4997
Joined: Thu, 26.07.2012 01:29:56

Postby dr_max » Sat, 10.02.2018 18:30:29

TS-Labs, да не за что. может еще что впилю по мере освоения.
dr_max
 
Posts: 34
Joined: Thu, 26.01.2017 12:03:36


Return to Coding

Who is online

Users browsing this forum: No registered users and 1 guest

x