Page 68 of 77

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

Posted: Fri Mar 20, 2015 6:49 pm
by Yason
Видимо код уже ненужен, но возможно пригодится новичкам, IMHO. :wink:

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

Posted: Mon Mar 23, 2015 3:40 pm
by ddarias
How can I use relative path to work with files? I have a executable .kex and a file (image.raw) and I want to use only the name of the file, not the full path. In the root directory /rd/1/ it works, but in another directory, for example /hd0/1/projects/ don't work. I remember hearing something about this but I do not remember where. Thanks in advance.

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

Posted: Mon Mar 23, 2015 3:49 pm
by hidnplayr
default path is /sys/ (= /rd1/1/)
It can be changed with sysfn 30.1
The path of the executable can be obtained through the last dword in header.

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

Posted: Mon Mar 23, 2015 3:51 pm
by hidnplayr
See line 162 of dungeons.asm for an example implementation
http://websvn.kolibrios.org/filedetails ... ngeons.asm

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

Posted: Mon Mar 23, 2015 3:57 pm
by ddarias
Thanks hidnplayr for your quick response. Very well explained

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

Posted: Tue Mar 24, 2015 9:44 am
by gc986
Yason wrote:
gc986 wrote:
Gluk wrote:А вы пользуетесь отладчиком?
Странно. Запустил под отладчиком. Данные аккумулируются в переменной, [button2], но у меня её нет в тексте программы. В отладчике вроде всё правильно - происходит аккумуляция, а далее ожидание события, требуется нажать на кнопку, Но когда программа работает нормально, я один раз нажимаю (видимо происходит цикл) и программа заканчивается.
Держи исправленый вариант. Программа отображает число нажатий на кнопку, и завершается, если на кнопку снизу, нажать 10 раз.
Бдагодарю! :D
Оказывается из-за невнимательности забыл вызвать функцию определения нажатой кнопки )))

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

Posted: Thu Apr 02, 2015 3:03 pm
by gc986
Я делаю калькулятор и теперь необходимо формировать строку из чисел соответствующих нажатой клавише. Чтобы поместить символ в строку на определённую позицию необходимо к адресу строки прибавить необходимое количество байт и затем помещать туда символ, например так

Code: Select all

mov byte [str+2], '1'
Но что делать если требуется постепенно перемещать курсор ввода (перемещаться по строке) и вводить данные, как в обычном калькуляторе? Или есть способ получше?
много вариантов перепробовал но постоянно нарушаю семантику языка

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

Posted: Mon Apr 06, 2015 8:35 pm
by Yason
gc986 wrote:Я делаю калькулятор и теперь необходимо формировать строку из чисел соответствующих нажатой клавише. Чтобы поместить символ в строку на определённую позицию необходимо к адресу строки прибавить необходимое количество байт и затем помещать туда символ, например так

Code: Select all

mov byte [str+2], '1'
Но что делать если требуется постепенно перемещать курсор ввода (перемещаться по строке) и вводить данные, как в обычном калькуляторе? Или есть способ получше?
много вариантов перепробовал но постоянно нарушаю семантику языка
Если я правильно понял, то тебе нужна косвенная адресация.

З.Ы. А вообще почитай книгу по Ассемблеру (например:Зубков С.В. - Ассемблер язык неограниченных возможностей), прежде чем задавать вопросы. Там, есть ответ на твой вопрос.

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

Posted: Wed May 27, 2015 12:14 am
by punk_joker
Какой алгоритм копирования файла наиболее оптимальный? В Eolite сейчас идет считывание всего файла за раз, и дальнейшая запись. Но, насколько я понимаю, это плохо. Копирования блоками фиксированного размера тоже плохо, если я понял правильно из последних обсуждений. Тоесть, наиболее оптимальный вариантЮ копироватиьб блоками размером x% от свободной ОЗУ, верно?

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

Posted: Wed May 27, 2015 1:37 am
by kiv
тот, который быстрее других найдет куда писать и откуда брать и выполнит копирование за меньшее количество операций с ОЗУ:
при копировании блоками тратится время на доступ к блоку за каждое обращение; если блоки не последовательны и не попали в кеш НЖМД, а они не попали в >99% случаев, то тратится время на доступ к каждому фрагменту; если сектор долго не читается, то проще его пропустить и вернутся к нему и другим таким в конце и т.д. и т.п.
эффективнее управлять DMA конечно, когда и если он будет...
а так, да, но для тестирования копирования чем больше, тем... :mrgreen:

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

Posted: Wed May 27, 2015 1:55 am
by punk_joker
kiv wrote:тот, который быстрее других найдет куда писать и откуда брать и выполнит копирование за меньшее количество операций с ОЗУ:
при копировании блоками тратится время на доступ к блоку за каждое обращение; если блоки не последовательны и не попали в кеш НЖМД, а они не попали в >99% случаев, то тратится время на доступ к каждому фрагменту; если сектор долго не читается, то проще его пропустить и вернутся к нему и другим таким в конце и т.д. и т.п.
эффективнее управлять DMA конечно, когда и если он будет...
а так, да, но для тестирования копирования чем больше, тем... :mrgreen:
Мне больше для правильной реализации в Eolite, а то длгадываюсь, что при текущей реализации для копирования фильма например, ОЗУ у меня не хватит :)

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

Posted: Wed May 27, 2015 2:31 am
by Pathoswithin
punk_joker, а Eolite вообще проверяет сколько памяти свободно? Если да, то можешь не торопиться - сейчас фильм будет копироваться где-то час. Поскольку память задействуется кратковременно, думаю, оптимально брать половину памяти. Тут такой момент, я в ntfs пока фрагментацию не делал, ищется цельное место. Когда сделаю редактирование файла, копирование маленькими кусками сможет приводить к сильной фрагментации, подход будет похерен и придётся писать ещё и дефрагментатор.

Или вот такой подход, без ограничений. Делишь размер файла на количество памяти, а потом делишь файл на равные куски.

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

Posted: Mon Jun 01, 2015 4:21 am
by punk_joker
Pathoswithin wrote:punk_joker, а Eolite вообще проверяет сколько памяти свободно? Если да, то можешь не торопиться - сейчас фильм будет копироваться где-то час. Поскольку память задействуется кратковременно, думаю, оптимально брать половину памяти. Тут такой момент, я в ntfs пока фрагментацию не делал, ищется цельное место. Когда сделаю редактирование файла, копирование маленькими кусками сможет приводить к сильной фрагментации, подход будет похерен и придётся писать ещё и дефрагментатор.

Или вот такой подход, без ограничений. Делишь размер файла на количество памяти, а потом делишь файл на равные куски.
В том то и дело, что не проверяет, и даже не сообщает о ошибке выделения. Потому и хочу переписать, чтоб было нормально. Думаю копирование кусками размером половину свободной ОЗУ будет наиболее оптимальным вариантом.

Eolite писался Leency еще когда он только начинал изучать программирование, потому под красивой шкуркой много плохого кода :D Хоть он многое и переписал уже в приличный вид, но некоторые куски все еще оставляют желать лучшего

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

Posted: Tue Aug 18, 2015 5:33 am
by GerdtR
Я тут в ядре решил кодом побаловаться, с WINDOW.INC . Добавил в функцию calculatescreen немного кода - запустил - вылетело всё. Исправил баги - опять вылетело. Вместо своего кода запихнул много nop'ов - вылетело. Тут я уже впал в некоторое недоумение. Вопрос такой: что такого сдвигает растолстевший немного calculatescreen и как всё таки мне сделать свою хотелку? Если что, вылет выглядит так: загрузился синий экран с 5 секундами успешно, нажимаю энтер и комп тут же на перезапуск. Ни логи, ни чего-то ещё не показывается(или не успеваю заметить, хотя вряд ли). Ещё в одной из моих глючных модернизаций вылетел драйвер RDC.SYS(в доске отладки написало), мышь перестала перерисовываться(подвигаю - не двигается, нажму кнопку Пуск - перерисовалась в новом месте). Вот. Версия ядра - 5665.

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

Posted: Tue Aug 18, 2015 6:54 pm
by Serge
Есть вероятность, что ты залез в стек ядра. Посмотри внимательно карту памяти ядра. Самый надёжный способ найти ошибку - протрассировать в Bochs. Даже 100% правильный на первый взгляд код может содержать ошибки.