Page 73 of 77

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

Posted: Fri Nov 04, 2016 4:56 pm
by Leency
0CodErr wrote:Leency, молодец, прикольно :)

Там, кстати, на сайте есть ещё picolzo, его тоже не трудно портировать, по крайней мере, оно у меня запускалось в PELoad
http://www.c--sphinx.narod.ru/FILES/picolzo.zip
Спасибо.

У меня на Win10 x64 не запустилось.
PELoad тоже не смог http://prntscr.com/d306ij
Как оно выглядит?

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

Posted: Fri Nov 04, 2016 5:04 pm
by 0CodErr
Leency, а, так я более новую версию kernel32 не выкладывал, оказывается.

Вообще, на сайте там написано
picolzo.zip (4k) Библиотека сжатия данных методом LZO от Kai-Hong Chen.
Вот так по идее должно запускаться
Usage: testLZO filename
Вот из picolzo.h--
/* picoLZO.h-- The fast data compression functions from miniLZO,
rewrite and rename to use in Sphinx C-- by Kai-Hong Chen.
picolzo_compress(byte *src,dword src_len,byte *dst,dword *dst_len,byte *wrkmem);
picolzo_decompress(byte *src,dword src_len,byte *dst,dword *dst_len,NULL);
Её можно портировать просто, и будет без PELoad запускаться в KolibriOS.

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

Posted: Fri Nov 04, 2016 8:42 pm
by 0CodErr
Leency, можно ещё в starfield сделать звёзды разноцветные с изменяющимся цветом. И сделать скринсэйвер из неё. Тогда вообще надолго можно залипнуть :)

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

Posted: Mon Nov 07, 2016 8:46 pm
by Leency
Порт http://c--sphinx.narod.ru/FILES/vc.zip

http://prntscr.com/d4a5e2
Дизайнер, который смог консоль и даже смог сделать кросскомпиляцию приложения WIN32 / Kolibri.
Но не смог понять почему цвет фона и текста не закрашивается. Есть какая-то магия в функции WriteConsoleOutputAttribute()

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

Posted: Mon Nov 07, 2016 8:57 pm
by 0CodErr
Leency, о прикольно :D
Spoiler:
1.PNG
1.PNG (51.52 KiB)
Viewed 15659 times
А что это и зачем?

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

Posted: Mon Nov 07, 2016 9:22 pm
by Leency
это Diff tool. Визуальное сравнение двух текстовых файлов. Вот только подсветка пока что не работает.

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

Posted: Mon Nov 07, 2016 11:45 pm
by punk_joker
О, полезная утилита будет.

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

Posted: Tue Nov 08, 2016 2:07 am
by GerdtR
Всё, или шарики за ролики заехали, или одно из двух. Аж не знаю в какую тему писать, поэтому сюда.
Итак. Загрузочная флешка, запускал в QEMU, видит флешку как /hd0/1, всё отлично, флешка в FAT32. Все файлы читаются и пишутся. Всё началось с того, что c-- отказывазывался читать файл ../lib/font.h(именно такой путь шёл в open(..) ), хотя он есть. Тогда написал на фасме микроутилиту, читает файл если есть или пишет error, если его нет. Помещаю в папку /hd0/1/cmm/0/textreader. Запускаю, и он его не открывает. Хотя файл есть. В папке ../lib есть файл font.h. Скопировал весь каталог lib в папку /hd0/1/boot , утилиту запускал из /hd0/1/boot/en-us, то есть относительные пути те же, ../lib/font.h также должен открываться - проверяю и он открывается. А из textreader - не открывается. И другие файлы ../lib/* также не открываются, если текущий каталог заканчивается на textreader.
Вот только что выяснил: текущий каталог 1234567 - ../lib/* открываются, а в 12345678 - уже нет. Зависит от количества символов, видимо.
В приложении исходник утилиты на всякий случай.
Spoiler:
qwe.GIF
qwe.GIF (54.21 KiB)
Viewed 15631 times

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

Posted: Fri Nov 11, 2016 10:49 am
by Serge
GerdtR
А ядро поддерживает относительные пути ?

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

Posted: Fri Nov 11, 2016 5:31 pm
by CleverMouse
GerdtR

Code: Select all

	mov	dword[fss+16],mybuf
	mov	[fss+16],0
	mov	dword[fss+21],myfile
...
fss db 25
mybuf rb 4096
Ты, наверное, имел в виду fss+20 и rb 25? А так fss накладывается на mybuf, в которой ты сам же прочитал текущую папку.

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

Posted: Fri Nov 11, 2016 6:59 pm
by GerdtR
Да, имел) Короче, явно не в ядре дело, после исправления всё как положено работает (Serge, да, полностью поддерживает). Вот cmm не хочет открывать относительные пути. Пробовал просто в main'е писать fopen("../lib/font.h", "rb") и файл не открывался, хотя он был на месте. Пока выяснил, что fopen никак не открывает файлы, если путь начинается с "..", хотя путь "lib/../font.h" нормально обрабатывается, так же как и ./font.h .

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

Posted: Fri Nov 11, 2016 8:45 pm
by CleverMouse
Leency wrote:Порт http://c--sphinx.narod.ru/FILES/vc.zip

http://prntscr.com/d4a5e2
Дизайнер, который смог консоль и даже смог сделать кросскомпиляцию приложения WIN32 / Kolibri.
Но не смог понять почему цвет фона и текста не закрашивается. Есть какая-то магия в функции WriteConsoleOutputAttribute()
WriteConsoleOutputAttribute устанавливает сразу пачку разных цветов - для первой позиции цвет attrs[0], для второй attrs[1] и так далее до того, сколько цветов ей указали. con_set_flags устанавливает текущий цвет, который будет использован для последующего вывода.

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

Posted: Sat Nov 19, 2016 3:11 pm
by Leency
CleverMouse
Спасибо, дизайнер смог.

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

Posted: Sun Jan 28, 2018 10:58 pm
by barbar89
Здравствуёте, извините если вопрос нубский, в ассемблере мало опыта имею. Я хотел модифицировать стандартный екзампл, чтобы он не звук издавал, а менял строчку вот что я изменил:

Code: Select all

;после start
mov ebx, message ;адрес message в ebx
mov eax, iter ;адрес итератора в ebx
mov [eax], ebx; по адресу записанному в eax(iter) записать содержимое ebx(адрес message)

;............ далее в key после mcall 2
movzx ebx, [iter] ;запишем в ebx значение iter(адрес message + кол-во вызовов)
mov [ebx], ah; записываем по адресу который находится в ebx код полученной клавиши
add ebx, 1;увеличиваем адрес на 1(в следующий раз ссылаемся на следующую букву)
mov eax, iter; адрес итератора в ebx
mov[eax], ebx; по адресу записанному в eax(iter) записать содержимое ebx(адрес message)
; рядом message я написал iter db 1
программа собирается но не работает(строка не меняется). Не подскажите где я мог ошибиться?

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

Posted: Sun Jan 28, 2018 11:59 pm
by Siemargl
Ты ошибаешься в косвенной адресации и в размере операндов. Смотри отладчиком MTDBG - там все наглядно видно.

Команд в нем немного - легко разобраться

bp 54 - поставит точку останова на второй кусок кода