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

User Tag List

Страница 15 из 38 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя
Показано с 141 по 150 из 377

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

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

    По умолчанию

    Alcoholics Anonymous, this is all good, but i need worked library for Sprinter. I can see - z88dk have small (for console and file io) Sprinter support (pps config). ok, but i can`t understand library source structure for make gfx library. Hi-Tech C and sdcc have many simple lib src structure. if you have some docs for make libs, please, give me...
    and pps_lib, as i think, very old. clib_ix or clib_iy is not support Sprinter. need to rewrite it for add Sprinter. and if we speech for new generation zx clones, then need to support zx-evolution to.
    Последний раз редактировалось Sayman; 21.03.2015 в 09:46.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

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

    По умолчанию

    Что ещё могу сказать: При попытке пересобрать библиотеки под windows 7, получаю 100500 ошибок. ваш makefile не совместим с windows. нет тут команды rm, а ключи для системных команд нужно задавать через символ / например, для rm -f эквивалент будет del /f. так же пути в makefile указаны через обратный slash, как в linux, в то время как в windows для указания пути используют \, а не /. и так по мелочам косяков хватает. адаптируйте для windows версии все makefile. опять таки - скудная документация по библиотекам и самому компилятору.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

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

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    Error404, спросить ещё хотел, у хайтеха в асми тексте при задании области через defs, область не инициализируется линкером. всегда заполняется кодом 1Ah. а надо бы нулями. не знаешь, чё ему надо?
    Ну, такая особенность ассемблера. Объявления через defs не инициализируются. Если надо занулить, просто объявляй их как "psect bss" - эта область обнуляется при старте программы из модуля crt (т.к. странно тащить в коде программы кучу нулевых массивов, увеличивая размер бинаря - это практически на всех реализациях С так сделано). Если надо ненулевые инициализированные переменные, то через defw/defb
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

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

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Ну, такая особенность ассемблера. Объявления через defs не инициализируются. Если надо занулить, просто объявляй их как "psect bss" - эта область обнуляется при старте программы из модуля crt (т.к. странно тащить в коде программы кучу нулевых массивов, увеличивая размер бинаря - это практически на всех реализациях С так сделано). Если надо ненулевые инициализированные переменные, то через defw/defb
    очень интересно, а размер области тогда как задать? у меня 490 байт нулей в заголовке без загрузчика должно быть, иначе дос на спринтере выплюнет такой файл.

    Ещё момент, часто при компиляции в хайтехе нарываюсь на один и тот же варнинг:
    declared implicit int (warning)
    и второй:
    illegal conversion of pointer to integer (warning)
    например, выдаёт вот на таком месте:
    Код:
    static char *icvt(register char *cp)
    {
    	ival = atoi(cp);
    	while(isdigit((unsigned)*cp)) 
    		cp++;
    	return cp;
    }
    
    ругается вот так:
        22:                 cp++;
                                ^ isdigit() declared implicit int (warning)
    
       117:                         if(isupper(c)) len = sizeof(long)/sizeof *a;
                 isupper() declared implicit int ^  (warning)
    вроде всё нормально, но ему что-то не нравится. как ты такое решаешь?
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

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

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    да, это я потом тоже нашёл. но вот что не могу понять и нигде не нахожу, это алгоритм по которому crt0 вообще прикручивается к компилируемому файлу. такое ощущение, что он прикручивается уже после main где или вообще где то в самом конце. пытаюсь сделать так, чтобы при сборке первыми байтами в файле бл заголовок ехе файла от спринтера. не лезет... что-то не так делаю или...?
    Пляши, Sayman
    Решил я твою проблему. Даже скрипт не понадобился.
    Проблема была в том, что ты хедер exe-файла не в ту секцию положил, а нужно, непосредственно ПЕРЕД меткой 'init:'.
    Вот так:
    Код:
    ; CRT startup module for Sprinter DOS executable by Amixgris. 22.03.2015.
       .module crt0
    
    	.globl	_main
    
    	.area _HEADER (ABS)
    
    	.org    0x7f00	;--code-loc = 0x8100 + 0x20 = 0x8120
    ; воообще для получения значения --code-loc нужно к адресу запуска прибавить
    ; размер стартапа от метки init до конца процедуры _exit. 0x20 - прибавлено с запасом.
    
        .ascii 'EXE'
    	.db 0
    	.dw 0x200
    	.dw 0
    	.dw 0
    	.dw 0
    	.dw 0
    	.dw 0
    	.dw init
    	.dw init
    	.dw 0xc000
    	.ds 490
    init:
        ;; Initialise global variables
    ;	ld sp,#0x0000
        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
    
       .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
    Далее. Если у тебя Спринтер запускает код с 0x8100, то ПОЧЕМУ ты значение --code-loc выставляешь в 0x0000?! code-loc должен начинаться ЗА процедурой инициализации, а не перед ней. Здесь инит занимает 12 байт, т.о. codе-lock = 0x7f00 + 0x200 + 0x0c = 0x810c. В этом свете, мне кажется, что "в лоб" адаптировать evo-sdk на Sprinter нельзя - она компилится с 0x0000. А твой екзешник не может с 0x0000 стартовать.
    Но ты можешь надергать оттуда процедур, и что-нибудь написать, чтоб уместилось с 0x8100 до 0xc000, включая стэк.
    Компилить exe для Sprinter DOS надо так:
    Один раз компилим crt0-файл, чтобы получить "crt0.rel":
    Код:
    sdasz80 -g -o crt0.s
    Затем каждый раз:
    Код:
    sdcc -c - mz80 my_exe_for_Sprinter.c
    sdcc -mz80 --code-loc 0x8120 --data-loc 0x0000 --no-std-crt0 crt0.rel my_exe_for_Sprinter
    hex2bin my_exe_for_Sprinter.ihx
    Переименуешь расширение с bin на exe, и будет тебе счастье
    Да, оформление выхода в DOS оставляю за тобой. Пока там вечный цикл.
    С уважением,
    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

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

    По умолчанию

    Sergey, это, конечно, спасибо (пошёл плясать )! я с sdcc пока не очень дружу. Однако, в лоб evosdk я не собирался адаптировать. в том виде как она сейчас есть, мне сильно не нравится. например, что почти все куски либы написаны на sjasm и собраны банально в bin файл. вся это громада, 8 с лишним килобайт, обязательно загружается. таким образом в этом sdk есть ложка дёгтя - минимальный размер собранного проекта, даже пустого, будет весить не менее 9кб (код либы+код того, что успел нагадить сам sdcc). меня это не устраивает. есть механизм линковки объектных файлов. те же lib файлы. если процедура не нужна, её в коде никогда не будет (если её не тянет какая-то другая процедура). в этом плане данный сдк сильно коряв. я как раз хочу перетащить всё в нормальные библиотеки. пока воюю с хатехом. с ним я знаком и там привычнее.
    ещё одним недостатком сдк является то. что оно использует заведомо известные страницы. т.е. проект забирает под себя любую страницу, какую захочется. в досе на Спринтере такой подход не работает. есть системный механизм выделения памяти. соответственно, работа с памятью требует сильного вмешательства, не только под порты, но и по работе с "динамически" выделяемыми страницами. Аксель ещё везде.
    Последний раз редактировалось Sayman; 22.03.2015 в 15:21.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

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

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    очень интересно, а размер области тогда как задать? у меня 490 байт нулей в заголовке без загрузчика должно быть, иначе дос на спринтере выплюнет такой файл.
    Раз нули должны быть в psect text, тогда используй "defw 0". Поскольку v3.09 несет весьма убогий ассемблер ZAS (ну как убогий, надо понимать: он же для С-компилятора, а не для удобного программирования на сыром ASM) и не знает про "документированный" макрос REPT c которым было бы просто:
    REPT 245
    defw 0
    ENDM

    То надо написать что-то такое:
    defw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
    defw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
    defw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
    defw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
    defw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
    defw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0
    defw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0


    Цитата Сообщение от Sayman Посмотреть сообщение
    Ещё момент, часто при компиляции в хайтехе нарываюсь на один и тот же варнинг:
    declared implicit int (warning)
    Это оттого что функция не объявлена, а все необъявленные функции или переменные для С - это int. Найди заголовочный файл где она объявлена и включи его по #include, или объяви сам как "extern ...."

    Цитата Сообщение от Sayman Посмотреть сообщение
    и второй:
    illegal conversion of pointer to integer (warning)
    Это или опять из-за невключеного хидера или из-за ошибки/неаккуратности в коде
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

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

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    Alcoholics Anonymous, this is all good, but i need worked library for Sprinter. I can see - z88dk have small (for console and file io) Sprinter support (pps config). ok, but i can`t understand library source structure for make gfx library. Hi-Tech C and sdcc have many simple lib src structure. if you have some docs for make libs, please, give me...
    and pps_lib, as i think, very old. clib_ix or clib_iy is not support Sprinter. need to rewrite it for add Sprinter. and if we speech for new generation zx clones, then need to support zx-evolution to.
    Для "классического" z80 библиотеки и графики поддержки, другой разработчик лучше спросить об этом у z88dk форумах, как я не так много с ним делать. Одна из проблем, что мы (как в не-русский) не слишком хорошо знакомы с Sprinter и других новых российских машин. Языковой барьер делает его трудно понять, как именно это работает. Sprinter, например, могут быть использованы как Spectrum, но он также имеет и другие родные графические режимы, какой-то простой растрового и, возможно, аппаратные спрайты?

    Я не думаю, что это трудно быстро добавить цель спринтер спектра мод на новый C Library без диска IO. Позвольте мне попробовать, что сегодня и, возможно, вы можете, дайте мне знать, где я сделал ошибки. Одна вещь, я не уверен, о том, что ORG по умолчанию должно быть и будет ли указатель стека устанавливается ОС спринтер к стоимости, указанной в этом заголовке 512 байт. Я также не уверен, о размещении командной строки в памяти, но я оставлю это при первом проходе.

    Вы правы по поводу отсутствия документации в настоящее время, в частности, о новой библиотечной. Это слишком для того чтобы иметь любое письменное еще!

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


    For the 'classic' z80 library and graphics support, another developer is better to ask about it at the z88dk forums as I don't have much to do with it. One problem is we (as in non-Russian) are not too familiar with the Sprinter and other new Russian machines. The language barrier makes it hard to understand exactly how things work. The Sprinter, eg, can be used like a Spectrum but it also has other native graphics modes, some kind of simple blitter and maybe hardware sprites?

    I don't think it is hard to quickly add a spectrum mode sprinter target to the new c library without disk io. Let me try that today and maybe you can let me know where I've made mistakes. One thing I am not sure about is what the default ORG should be and whether the stack pointer is set by the sprinter's OS to the value listed in that 512-byte header. I'm also not sure about the placement of the command line in memory but I will leave that out at first pass.

    You are right about the lack of documentation currently, especially about the new c library. It is too new to have any written yet!
    [свернуть]

  10. #150
    Master
    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    640
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    Что ещё могу сказать: При попытке пересобрать библиотеки под windows 7, получаю 100500 ошибок. ваш makefile не совместим с windows.
    Для таких штук лучше юзать не мэйкфайлы ибо там 100500 ifdef будет. Проще переписать, к примеру, на cmake. Ну или собирать под cygwin каким-нить.

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

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

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

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

Ваши права

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