User Tag List

Страница 18 из 38 ПерваяПервая ... 141516171819202122 ... ПоследняяПоследняя
Показано с 171 по 180 из 377

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

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

    По умолчанию

    использование нативного SolidC для SprinterDOS
    не не, спасибо. такое я точно пользовать не буду. никаких 32 bit long, float, double, #asm/#endasm и других красивостей.

    Да кто-же всё ЦЕЛИКОМ-то на Сях пишет?!
    процедуры на асме тут не причём. тут только на фон нужно иметь 82кб буфер. про прочие спрайты, которые в среднем весят от 2.5кб до 5кб, а могут и больше. с такими данными шибко не удобно работать на сях. постоянно нужно следить за границами буферов. не удобно в общем.

    как сделать crt0.s для сборки екзешников
    вяжется это так, что хотел попробовать сдцц к спринтеру. попробовал. не понравилось. отложил.

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

  2. #172
    Activist Аватар для Sergey
    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    475
    Спасибо Благодарностей отдано 
    95
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Тест эффективности кода SDCC 3.5/HiTech 3.09/HiTech 7.50 (demo)

    DI DI/Gl.vars Коэфф.
    Ассемблер (эталон) 323 323 1,00
    HiTech C v.7.50 (MS-DOS) 432 1814 0,74
    Z88DK (Win32) 512 - 0,631
    SDCC v.3.51 (Win32) 528 765 0,612
    IAR (Win32) 803 858 0,4022
    HiTech C v.3.09 (cp/m, z80) 979 856 0,3320/0,3773
    Aztec C (cp/m, i8080) 1738 - 0,186
    HiSoft-C v.1.35 (CP/M, Z80) 3660 0,0000/0,0882
    MI-C v3.18I (CP/M, Z80) 4160 3760 0,0776/0,0859
    WarpC 14.01 (TR-DOS, Z80) 4910 4640 0,0660/0,0696
    MeSCC 1.08 (CP/M, i8080) 8370 4850 0,0386/0,0667

    Поскольку меня торкнуло написать печаталку на Сях, и она, таки, заработала, решил устроить небольшое соревнование между компиляторами Си, позволяющими компилировать код для ZX-Spectrum.
    Сам тест состоял в вызове 2560 (для очень медленных компиляторов - 256) раз процедуры печати текста. Текст был выбран случайно и оказался длиной 333 символа.
    Время запуска и окончания цикла фиксировалось по встроенным CMOS-часам. В таблице результаты времени отработки цикла в секундах.
    Изначально время замерялось при включенных прерываниях, что не совсем правильно. - В последующим данные для всех компиляторов будут дополнены.
    Кроме того интересно было оценить, насколько на эффективность влияет "локальность" переменных.
    Для процедуры на ассемблере ничего не дало - это естественно. Там можно было вынести в глобальные только переменную цикла. В Си-версии процедуры - их шесть. На примере Aztec C, разница заметно видна.

    За эталон взята самописная процеура печати 64 сим./стр. на ассемблере. Шрифт используется "экономный" в левых тетрадах байта латинские символы, в правой - кириллица. Итого 1кб.

    До кучи, сравнил эффективность кода Хайтек 3.09 до и после оптимизации (прерывания выключены): 483/472 секунд.

    Вот сишный исходник:

    Код:
    #include "minifont.c"
    
    #define LAT 0
    #define RUS 1
    
    char text[16];
    
    void i2s(char*, int num);
    unsigned int iBCD2int(unsigned int num);
    unsigned int rd_cmos_minsec(void);
    
    unsigned char atX,atY;
    
    const unsigned char* ScreenTable[24] = { 
    0x4000,0x4020,0x4040,0x4060,0x4080,0x40A0,0x40C0,0x40e0,
    0x4800,0x4820,0x4840,0x4860,0x4880,0x48A0,0x48C0,0x48e0,		
    0x5000,0x5020,0x5040,0x5060,0x5080,0x50A0,0x50C0,0x50e0
    };
    
    unsigned int iBCD2int(unsigned int num) __naked
    { num;
    __asm
        pop af
        pop de
        push de
        push af
        ld  hl,#0
        ld  a,d
        rrca
        rrca
        rrca
        rrca
        and a,#0x0f
        ld l,a
        call 2$ ; x10
        ld  a,d
        and a,#0x0f
        ld  b,h
        ld  c,a
        add hl,bc
        call 2$ ; x10
        add hl,hl
        ld  c,l
        ld  b,h
        add hl,hl
        add hl,bc ; x6
        ld  a,e
        rrca
        rrca
        rrca
        rrca
        and a,#0x0f
        add a,a
        ld  c,a
        add a,a
        add a,a
        add a,c
        ld  c,a ; x10
        ld  a,e
        and a,#0x0f
        add a,c
        ld  c,a
        ld  b,#0
        add hl,bc
        ret
    2$: add hl,hl
        ld  c,l
        ld  b,h
        add hl,hl
        add hl,hl
        add hl,bc
        ret
     __endasm;
    }
    
    unsigned int rd_cmos_minsec(void) __naked
    {
    __asm
    	ld	bc,#0xeff7
    	ld	a,#0x80
    	out	(c),a
    	ld	b,#0xdf
    	xor a
    	out	(c),a
    	ld  b,#0xbf
    	in	l,(c)
    	ld  b,#0xdf
    	ld  a,#2
    	out (c),a
    	ld  b,#0xbf
    	in	h,(c)
    	ld  b,#0xef
    	xor a
    	out (c),a
    	ret
    __endasm;
    }
    
    void i2s(char* d, int num) __naked
    { d, num;
    __asm
            pop     af
            pop     bc
            ex      (sp),hl
            push    bc
            push    af
    
            xor     a,a
            ld      de,#10000
            call    2$
            xor     a,a
            ld      de,#1000
            call    2$
            xor     a,a
            ld      de,#100
            call    2$
            xor     a,a
            ld      de,#10
            call    2$
            ld      a,#0x30
            add     a,l
            ld      (bc),a
            inc     bc
            xor     a,a
            ld      (bc),a
            ret
    2$:     or      a,a
            sbc     hl,de
            jp      c,1$
            inc     a
            jp      2$
    1$:     add     hl,de
    ;        or      a,a
    ;        ret     z
            add     a,#0x30
            ld      (bc),a
            inc     bc
            ret
    __endasm;
    }
    void put__ch(char sym)
    {
    unsigned char*  dest;
    unsigned char*  src;
    unsigned char   lang,q,i;
    unsigned int    index;
    
            dest = (unsigned char*)(ScreenTable[atY]+atX/2);
    
            lang = LAT;
            if(sym&0x80) lang = RUS;
            sym = sym&0x7f;
            index = sym*8;
    	src = (unsigned char*)(minifont + index);
            if(lang==0)	{
    				if(atX&0x01) {
    						for(i=0;i<8;i++)
    							{
    								q = (*dest)&0xf0;
    								*dest = q | ((*src++)/16&0x0f);
    								dest+=256;
    							}
                    }
                    else {
                        for(i=0;i<8;i++)
                            {
                                q = (*dest)&0x0f;
                                *dest = q | ((*src++)&0xf0);
                                dest+=256;
                            }
                    }
            }
            else {
                    if(atX&0x01) {
                        for(i=0;i<8;i++)
                        {
                            q = (*dest)&0xf0;
                            *dest = q | ((*src++)&0x0f);
                            dest+=256;
                        }
                    }
                    else {
                            for(i=0;i<8;i++)
                            {
                                q = (*dest)&0x0f;
                                *dest = q | ((*src++)*16)&0xf0;
                                dest+=256;
                            }
                    }
            }
    }
    
    void print(char* str)
    {
    	while(*str) {
    				put__ch(*str++);
    				atX++;
    				if(atX>63) {atX=0; atY++;};
    				}
    
    }
    
    void main(void)
    {
    unsigned int begin, end;
    unsigned int i = 2560;
        begin = rd_cmos_minsec();
    
        while(i) {
        atX=atY=0;
    	print("Привет, В форуме проскальзовали идеи о том, что дескать неплохо было бы с реального спектрума выходить в какой-никакой интернет. И даже якобы за рубежом изобрели какую-то хреновину, которая является чем-то типа модема для спектрума и вставляется в стандартный системный разъем фирменного спека. Только вот что было дальше я не понял.");
        --i;
        };
        end = rd_cmos_minsec();
        begin = iBCD2int(begin);
        end   = iBCD2int(end);
        end   = end - begin;
        i2s(text,end);
    
        atX  =0;
        atY +=2;
    
        print("Печать вышерасположенного текста 2560 раз заняла ");
        print(text);
        print(" секунд");
    
    }
    Кстати, сишный исходник, наверняка, можно оптимизировать. Если знатоки, решат его поправить, - добавлю в таблицу соответствующие данные. Это тоже интересно, сколько может дать оптимизация на высоком уровне. Пока в глаза бросается, что можно было обойтись без вычисления промежуточной переменной index и return(dest).
    Последний раз редактировалось Sergey; 16.02.2016 в 07:53.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

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

    По умолчанию

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

  4. #174
    Veteran Аватар для perestoronin
    Регистрация
    25.11.2011
    Адрес
    г. Красногорск
    Сообщений
    1,389
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это не странность, а плата за мультиплатформенность.

    sdcc никто и не тестирует для ретро-платформ, упор только на свои силы.

    Ретрокладовая продажи

    продажи
    [свернуть]

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

    По умолчанию

    ДДаааа... столь мелкий кодик sdcc собирает медленнее древнющего HTC, да ещё и бинарник медленный оказывается. уж не знаю про выше указанные тесты, но что-то тут не так, sdcc даёт код более медленный, хотя стоит оптимизация по скорости. При чём HTC версии 3.09, под цпм.
    Последний раз редактировалось Sayman; 10.12.2015 в 14:50.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

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

    По умолчанию

    Sergey, не могли бы вы предоставить ссылку, чтобы загрузить "minifont.c"?

    Я хотел бы, чтобы скомпилировать пример. Hitech C v7.50 очень редко производит более быстрый код, чем z88dk/sdcc во всех испытаниях я сделал, так что я хотел бы, чтобы скомпилировать двоичный для вас попробовать.

    Вы можете увидеть результаты некоторых тестах мы запускаем, в том числе Dhrystone 2.1 и Whetstone 1.2, здесь: http://www.z88dk.org/wiki/doku.php?i...#dhrystone_2.1

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


    Sergey could you provide a link to download "minifont.c" ?

    I would like to compile your example. Hitech C v7.50 very rarely produces faster code than z88dk/sdcc in all the testing I have done so I'd like to compile a binary for you to try.

    You can see results of some benchmarks we've run, including Dhrystone 2.1 and Whetstone 1.2, here: http://www.z88dk.org/wiki/doku.php?i...#dhrystone_2.1
    [свернуть]

  7. #177
    Activist Аватар для Sergey
    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    475
    Спасибо Благодарностей отдано 
    95
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Hello, Alcoholics Anonymous!
    I would be very grateful for your work. This is my sources adapted to z88dk.
    Вложения Вложения
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

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

    По умолчанию

    Hitech C v7.50 очень редко производит более быстрый код
    HiTech C постоянно выдаёт более быстрый код. Я перекопал форум msx, там довольно много кода сравнивали с z88dk, sdcc, msx-c и htc (как 3.09 так и 7.50/7.80). Почти всегда хайтех в лидерах.
    вот пример странички
    http://www.msx.org/forum/development...rison-part-two
    а тут конкретно z88dk и htc
    http://www.msx.org/forum/development...art-two?page=2
    6 пост сверху
    HTC: 8/9 secs
    z88dk: 21 secs.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  9. #179
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    107
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    HiTech C постоянно выдаёт более быстрый код. Я перекопал форум msx, там довольно много кода сравнивали с z88dk, sdcc, msx-c и htc (как 3.09 так и 7.50/7.80). Почти всегда хайтех в лидерах.
    вот пример странички
    http://www.msx.org/forum/development...rison-part-two
    а тут конкретно z88dk и htc
    http://www.msx.org/forum/development...art-two?page=2
    6 пост сверху
    А я 7.50/7.80 так и не нашел нормально поломаный и чтобы запускать из командника, а не из экранных форм. Где его можно взять погонять?
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

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

    По умолчанию

    Цитата Сообщение от Sergey Посмотреть сообщение
    Hello, Alcoholics Anonymous!
    I would be very grateful for your work. This is my sources adapted to z88dk.
    Я думаю, что некоторые из наших инструментов есть проблемы с кириллицей, которые мне придется взять добычу в.

    Но вот компиляции, что я надеюсь, что произведения. На эмуляторе я вижу выход, но, конечно, нет CMOS часы для измерения времени.

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


    I think some of our tools have problems with the cyrillic alphabet which I will have to take a loot at.

    But here's a compile that I hope works. On an emulator I can see the output but of course there's no cmos clock for time measurement.
    [свернуть]


    https://drive.google.com/file/d/0B6X...ew?usp=sharing

    Если вы используете бинарный вместо крана, вы должны CLEAR 32768, а затем загрузить двоичный обратиться 32768 и, наконец, RAND USR 32768.

    Позвольте мне знать, если он не работает.

    Одна вещь, я не сделать, изменить программу, чтобы передавать параметры реестра или использовать вызываемого абонента связь, которая большинство других компиляторов не может сделать, чтобы получить более прямое сравнение.

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


    If you use the binary instead of the tap, you must CLEAR 32768, then load the binary to address 32768 and finally RAND USR 32768.

    Let me know if it doesn't work.

    One thing I didn't do was change the program to pass parameters by register or use callee linkage which most of the other compilers cannot do to get a more direct comparison.
    [свернуть]
    Последний раз редактировалось Alcoholics Anonymous; 13.12.2015 в 01:52.

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

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

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

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

Ваши права

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