Page 10 of 77

Re: Помогите новичку

Posted: Wed Feb 17, 2010 12:17 pm
by andrew_programmer
Ничто не мешает сделать эти функции на ассемблере и залить на SVN в папку SDK, чтобы каждый кому они понадобятся не изобретали их снова.
с математическими функциями (fsin, fcos, ...)
Математические функции находящиеся в библиотеке libm, а не libC, и так реализованы на ассемблере. Просто над ними сделана обёртка для передачи/получения параметров в стиле C. Поэтому нужно просто перекопировать эти функции из ассемблера AT&T в ассемблер FASM.
для работы со строками (strcpy, strcmp, strcat, strncmp, atoi, atof, sprintf, ...)
Эти функции не требуют системных вызовов OS и также прекрасно могут быть сделаны на ассемблере, тем более, что в ядре KolibriOS часть из них уже реализована для внутренних нужд ядра. К тому же strcpy/memmove(лучше использовать её) можно сделать не только через rep movsd, но и через MMX/SSE.
с памятью (malloc, free, ...)
В ядре KolibriOS Serge реализовал на ассемблере метод DougLea для выделения малых участков памяти из кучи. Поэтому реализацию этого метода можно взять из ядра.
Было бы неплохо иметь динамическую libc.obj, экспортируемые функции которой можно было бы использовать, как из программ на ЯВУ, так и ассемблере.
Я тоже так думаю, только лучше разбить функции по группам, чтобы из-за нескольких функций не грузить все, как это происходит в libC.

Re: Помогите новичку

Posted: Thu Feb 18, 2010 7:49 pm
by Asper
Mario
Mario wrote:Это игры. Эмулятор тоже не компилятор.
Это был ответ на вопрос:
Mario wrote:Как и зачем портировать в Колибри библиотеку, которую в самой Колибри не собрать ничем...
В основновном используется для портирования Сишного софта в Колибри.
Mario wrote:Если уж портируется библиотека то логично, что должен быть инструмент который ее использует.
Предлагаешь портировать gcc?

Albom
Мысль интересная. Предложение andrew_programmer'а разбить функции на группы и писать на ассемблере тоже кажется довольно резонным.

Re: Помогите новичку

Posted: Fri Feb 19, 2010 3:18 am
by Leency
Albom
Не помогло.

К чему это всё. Сейчас многие демки заливают фон окна, хотя рисуют на весь его размер. Из-за этого при активации/деактивации окна оно сильно моргает. Проблема в том, что приложение рисует _почти_ на весь размер окна из-за того, что высота скина может быть разной.
Выберете скин окна, в котором высокий заголовой - демка будет залазить снизу на ободок окна, слишком узкий - активное содержимое демки не дойдёт до нижнего ободка окна. Потому если фон прозрачный, часть окна снизу будет прозрачной, если фон залит - будет эта часть окна просто залитой.
Может и не столь важно, но, просмотрев разные версии Колибри (почти все версии), понимаешь что из таких вещей складывается отношение к ОС, такие же банальные вещи, как "показывать или нет @ процессы", "не капсом набранное меню" и т.д.
К чему я веду, надо это исправить. Если никто не возмёться, придёться напрячься и сесть за асм мне.

Re: Помогите новичку

Posted: Fri Feb 19, 2010 1:13 pm
by Asper
Для превращения Leency в ассемблерщика я даже согласен ничего не менять в демках. :lol:

Re: Помогите новичку

Posted: Fri Feb 19, 2010 3:09 pm
by Talkless
andrew_programmer wrote:Ничто не мешает сделать эти функции на ассемблере и залить на SVN в папку SDK, чтобы каждый кому они понадобятся не изобретали их снова.
Firstly, sorry that I can't write in Russian - but I can read though.

How about idea to port FASMLIB to KOS? I'v took a look into it, and if I understood correctly, all is needed is to port src/_linux, src/_windows "examples" to Kolibri by reimplementing alloc_heap/free_heap/realloc_heap, create/open/seek/read/tell and other platform-depended stuff.

Please correct me if mistaken.

Any comments about FASMLIB?

Re: Помогите новичку

Posted: Fri Feb 19, 2010 7:46 pm
by Leency
Asper wrote:Для превращения Leency в ассемблерщика я даже согласен ничего не менять в демках. :lol:
Ассемблерщик из меня не получится, проверено. Я, конечно, могу немного побыдлокодить, но лучше б я занялся, чем-то, что ближе мне, а тот, кому ближе ассемблер занялся бы демками.

Re: Помогите новичку

Posted: Fri Feb 19, 2010 9:18 pm
by IgorA
Недавно переводил часть библиотеки 'fasmlib'. Ниже в архиве получившиеся файлы. Если есть желание продолжить начатую работу, данные файлы могут помочь.
Recent transfer of the libraries 'fasmlib'. Below in the archive the resulting file. If there is a desire to continue this work, these files may help.

Re: Помогите новичку

Posted: Wed Feb 24, 2010 1:21 am
by Leency
Надо порезать путь, допустим, /hd1/2/Games/Heroes/ на части.

Code: Select all

void Func()
{
	int ii, jj=0, x_fol_btn=235;
	char folder[256];
	for (ii=0; ii<=strlen(#path); ii++;)
	{
		folder[jj]=path[ii];
		IF (path[ii]=='/')
		{
			WriteDebug(#folder);
			folder='';
			jj=0;
		}
	} 
}
Этот код на доску выводит влякую фигню :(
Где ошибка или как более правильно реализовать?

Re: Помогите новичку

Posted: Wed Feb 24, 2010 3:37 am
by art_zh
Leency,
для начала исправь три явных ошибки в цикле:
1) инкремент ii++ есть, а jj++ нигде в коде нет;
2) условие в заголовке цикла: поставь ii < (вместо ii<=), иначе будет лишний прогон в цикле;
3) инкремент в заголовке цикла: убери точку с запятой после ii++

Re: Помогите новичку

Posted: Mon Mar 01, 2010 12:51 am
by Mario
Возможно кому-нибудь, когда-нибудь, зачем-нибудь и пригодится:
Шесть советов по написанию более понятного программного кода
Все-таки IBM просто так не постит.

Re: Помогите новичку

Posted: Sun Mar 14, 2010 10:15 pm
by Gluk
кто знает, сколько байт займут команды "mov esi,1" и "jmp smth"? там ведь еще дальность прыжка учесть надо, или это у "ret"?

Re: Помогите новичку

Posted: Sun Mar 14, 2010 10:28 pm
by Veliant
mov esi, 1 = 5 байт, т.к 1 будет как dword (BE XXXXXXXX)
Лучше xor esi, esi и inc esi, что все вместе займет 3 байта
Короткий прыжок = 2 байта (EB XX), длинный = 5 (E9 XXXXXXXX)

Re: Помогите новичку

Posted: Sun Mar 14, 2010 10:52 pm
by Gluk
спасибо =)

Re: Помогите новичку

Posted: Sun Mar 14, 2010 11:16 pm
by Gluk
на "mov ecx,dword[tids+esi*8]" приложение вылетает с page fault, хотя "mov [tids+8*esi],eax" работает нормально.. как решить проблему?

Re: Помогите новичку

Posted: Mon Mar 15, 2010 1:42 am
by Mario
Может tids поменялся или esi слишком большое значение содержит - выведи на доску отладки перед вызовом.