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

User Tag List

Страница 31 из 38 ПерваяПервая ... 272829303132333435 ... ПоследняяПоследняя
Показано с 301 по 310 из 377

Тема: Ищу Си для Z80

  1. #301
    Member Аватар для andreyu
    Регистрация
    20.02.2016
    Адрес
    г. Минск, Беларусь
    Сообщений
    41
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    почему мои исходники на си писанные под z80 при сборке на sdcc каждый раз нужно тратить время и искать причину ошибок и править исходник?
    А можно посмотреть пример такого кода, до и после правки?
    Мой вьювер графики для Linux и macOS - "Simple Viewer GL". Поддерживаемые форматы: scr (zx-spectrum), png, jpeg, psd, bmp, tiff, gif (в том числе и анимированные), pnm, dds, bmp, targa, ico, xwd. Поддерживает встроенные ICC-профили.

    Моя уцелевшая игра для спека "King Valley".

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

  3. #302
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    andreyu, можете в evo sdk заглянуть для примера. это не мой продукт, конечно. но хорошо показывает подобную ситуацию. особенно с xnx и robo.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  4. #303
    Member
    Регистрация
    21.05.2006
    Адрес
    Canada
    Сообщений
    78
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Он неэкономно передаёт параметры (даже однобайтовые - всегда в двух байтах).
    а вот это уже вопрос вкуса - кому то это не экономно, а кому то лишние inc sp не экономно (а именно так sdcc и передаёт 8ми битные аргументы стэком, может посчитаем, как оно более оптимально по тактам передавать, просто на стек кинув значение или кинуть да ещё и стэком отдельно крутить?) мне 1 байт не впадлу со стэка отдать, у меня памяти не 48кб, не жалко.
    Я имел обыкновение думать, что это, но после того, как на самом деле пытается это с функции, имеющие более чем один или два параметра я больше не думаю, что это просто дело вкуса.

    Я могу вам сказать, что для игры "Piętro Bros" после изменения интерфейса нирванную использовать символы так, чтобы SDCC могли бы объединить два символа в один 16-битное значение в параметрах, размер программы сократился на 400 байт, а код был, вероятно, в целом немного быстрее.

    Я покажу вам, почему. Это одна строка C кода, вызывающего в нирване двигателя:

    Скрытый текст


    I used to think this but after actually trying this with functions having more than one or two parameters I no longer think it is simply a matter of taste.

    I can tell you that for the game "pietro bros" after changing the nirvana interface to use chars so that sdcc could combine two chars into a single 16-bit value in parameters, the program size shrank by 400 bytes and the code was probably overall a little bit faster.

    I will show you why. This is one line of C code calling into the nirvana engine:
    [свернуть]


    Код:
    NIRVANAP_drawT( tmp0 , tmp, hit_col[index_player] );
    Если я прототипирование эту функцию принимает "Integer" параметры, как:

    extern void NIRVANAP_drawT(unsigned int tile,unsigned int lin,unsigned int col);

    генерируемый в одном месте, это было:

    Скрытый текст


    If I prototyped this function taking integer parameters as in:
    the generated call in one place was this:
    [свернуть]


    Код:
    	ld	a,+((_hit_col) & 0xFF)
    	ld	hl,_index_player
    	add	a, (hl)
    	ld	c,a
    	ld	a,+((_hit_col) / 256)
    	adc	a,0x00
    	ld	b,a
    	ld	a,(bc)
    	ld	(ix-3),a
    	ld	(ix-2),0x00
    	ld	hl,_tmp
    	ld	c,(hl)
    	ld	b,0x00
    	ld	hl,_tmp0
    	ld	e,(hl)
    	ld	d,0x00
    	pop	hl
    	push	hl
    	push	hl
    	push	bc
    	push	de
    	call	_NIRVANAP_drawT_callee
    Это добавляет до 40 байт и 216 циклов.

    Если я прототипирование функцию, принимая мангалов параметры, как:

    extern void NIRVANAP_drawT(unsigned char tile,unsigned char lin,unsigned char col);

    результат был:

    Скрытый текст


    This adds up to 40 bytes and 216 cycles.

    If I prototyped the function taking char parameters as in:

    the result was:
    [свернуть]


    Код:
    	ld	a,(_index_player)
    	add	a,+((_hit_col) & 0xFF)
    	ld	c,a
    	ld	a,+((_hit_col) / 256)
    	adc	a,0x00
    	ld	b,a
    	ld	a,(bc)
    	push	af
    	inc	sp
    	ld	hl,(_tmp - 1)
    	ld	a,(_tmp0)
    	ld	l,a
    	push	hl
    	call	_NIRVANAP_drawT_callee
    Это добавляет до 25 байт и 127 циклов. Это совсем немного лучше.

    Это с zsdcc (версия z88dk о SDCC), так что SDCC само по себе не так хороша, но она по-прежнему бьет первую версию.

    Скрытый текст


    This adds up to 25 bytes and 127 cycles. That's quite a bit better.

    This is with zsdcc (z88dk's version of sdcc) so sdcc itself is not quite as good but it still beats the first version.
    [свернуть]

  5. #304
    Master
    Регистрация
    15.02.2015
    Адрес
    г. Могилёв, Беларусь
    Сообщений
    835
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    98
    Поблагодарили
    65 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Sayman, можешь написать что используешь дляхайтека на цп/м? Геттинг стартид какой.
    ¡Un momento, señor fiscal!


  6. #305
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Smalovsky, для запуска компилятора под вендой я использую такой консольный эмулятор цпм: http://www.vector.co.jp/soft/win95/util/se378130.html
    он умеет возвращать винде код завершения HitechC, что нужно для make.
    Геттинг стартид какой.
    что ты имеешь в виду?
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  7. #306
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,609
    Спасибо Благодарностей отдано 
    2,173
    Спасибо Благодарностей получено 
    133
    Поблагодарили
    99 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Он имеет в виду мануал для быстрого вруливания в хайтех - что как и за чем делать. Хотя бы на примере ХеллоВорлда - от исходника на Си, пошагово как компилить, как запускать внешний оптимизатор, чуть-чуть тонкостей про ключики. И как получить на выхлопе окончательный сильно оптимизированный бинарь или tap/trd'шку ;-)

  8. #307
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    не. писать мануалы я не буду. можно заглянуть в профильный раздел Ориона. там есть тема про uzix. там есть архив описание как что собирать и есть make файл. опять таки, есть мануал на буржуйском на сам компилятор.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  9. #308
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Решил на свою голову замутиться парой програмулек на sdcc 3.6.0. в процессе написания натолкнулся на некий неописуемый баг. решил, для теста написать просто пустой си файл с одной main функцией и одной строкой, в ней и проблема:
    Код:
    void main()
    {
       int a;
    
       a = 400;
    }
    компилю и вижу строки в asm файле:

    Код:
    ;	---------------------------------
    ; Function main
    ; ---------------------------------
    _main::
    ;test3.c:28: a = 400;
    	ret
    	.area _CODE
    	.area _INITIALIZER
    	.area _CABS (ABS)
    приехали! эт как? что делать с этим? писал писал, в итоге всё коту под хвост...
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  10. #309
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,125
    Записей в дневнике
    37
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    11 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    sdcc похуже z88dk

  11. #310
    Master
    Регистрация
    14.04.2013
    Адрес
    г. Ростов-на-Дону
    Сообщений
    608
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    в процессе написания натолкнулся на некий неописуемый баг. решил, для теста написать просто пустой си файл с одной main функцией и одной строкой, в ней и проблема:
    ...
    писал писал, в итоге всё коту под хвост...
    Это не баг, это фича. Переменная не используется, поэтому оптимизатор её удалил.

Страница 31 из 38 ПерваяПервая ... 272829303132333435 ... ПоследняяПоследняя

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

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

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

Ваши права

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