Мой вьювер графики для Linux и macOS - "Simple Viewer GL". Поддерживаемые форматы: scr (zx-spectrum), png, jpeg, psd, bmp, tiff, gif (в том числе и анимированные), pnm, dds, bmp, targa, ico, xwd. Поддерживает встроенные ICC-профили.
Моя уцелевшая игра для спека "King Valley".
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
andreyu, можете в evo sdk заглянуть для примера. это не мой продукт, конечно. но хорошо показывает подобную ситуацию. особенно с xnx и robo.
Я имел обыкновение думать, что это, но после того, как на самом деле пытается это с функции, имеющие более чем один или два параметра я больше не думаю, что это просто дело вкуса.Он неэкономно передаёт параметры (даже однобайтовые - всегда в двух байтах).
а вот это уже вопрос вкуса - кому то это не экономно, а кому то лишние 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:
[свернуть]
Если я прототипирование эту функцию принимает "Integer" параметры, как:Код:NIRVANAP_drawT( tmp0 , tmp, hit_col[index_player] );
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:
[свернуть]
Это добавляет до 40 байт и 216 циклов.Код: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
Если я прототипирование функцию, принимая мангалов параметры, как:
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:
[свернуть]
Это добавляет до 25 байт и 127 циклов. Это совсем немного лучше.Код: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
Это с 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.
[свернуть]
Sayman, можешь написать что используешь дляхайтека на цп/м? Геттинг стартид какой.
¡Un momento, señor fiscal!
Smalovsky, для запуска компилятора под вендой я использую такой консольный эмулятор цпм: http://www.vector.co.jp/soft/win95/util/se378130.html
он умеет возвращать винде код завершения HitechC, что нужно для make.
что ты имеешь в виду?Геттинг стартид какой.
Он имеет в виду мануал для быстрого вруливания в хайтех - что как и за чем делать. Хотя бы на примере ХеллоВорлда - от исходника на Си, пошагово как компилить, как запускать внешний оптимизатор, чуть-чуть тонкостей про ключики. И как получить на выхлопе окончательный сильно оптимизированный бинарь или tap/trd'шку ;-)
не. писать мануалы я не буду. можно заглянуть в профильный раздел Ориона. там есть тема про uzix. там есть архив описание как что собирать и есть make файл. опять таки, есть мануал на буржуйском на сам компилятор.
Решил на свою голову замутиться парой програмулек на sdcc 3.6.0. в процессе написания натолкнулся на некий неописуемый баг. решил, для теста написать просто пустой си файл с одной main функцией и одной строкой, в ней и проблема:
компилю и вижу строки в asm файле:Код:void main() { int a; a = 400; }
приехали! эт как? что делать с этим? писал писал, в итоге всё коту под хвост...Код:; --------------------------------- ; Function main ; --------------------------------- _main:: ;test3.c:28: a = 400; ret .area _CODE .area _INITIALIZER .area _CABS (ABS)
sdcc похуже z88dk
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)