Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Jan 18, 2020 4:19 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 124 posts ]  Go to page Previous 1 2 3 4 59 Next
Author Message
PostPosted: Wed May 04, 2011 7:39 am 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 796
Поскольку схема тут не прижилась, решил я лучше поддержать питон. В чем нужна помощь сейчас?


Top
   
PostPosted: Wed May 04, 2011 9:20 am 
Offline
User avatar

Joined: Wed Aug 18, 2010 5:38 pm
Posts: 102
Есть недоделанный шаблон модуля на FASM (вечером залью на SVN), хочется для начала запустить его.
После этого помощь на его основе писать разные модули - нужно обсудить, какие именно. Навскидку, в таком порядке:
а) Файловый ввод-вывод.
б) Графический интерфейс.
в) ...
В перспективе ещё: слинковать VM в DLL и найти способ подгружать модули из отдельных файлов, не линкуя их с интерпретатором.
В общем, планов громадьё :)


Top
   
PostPosted: Wed May 04, 2011 9:27 am 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 796
ок. вечером посмотрим.


Top
   
PostPosted: Wed May 04, 2011 10:32 am 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
реквестую модуль re =)

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Thu May 05, 2011 9:21 am 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 796
Кандидаты в президенты модули:

random: https://bitbucket.org/urielka/tinypy/sr ... es/random/


A файл mymain.c стоит все-таки удалить


Top
   
PostPosted: Tue Jul 19, 2011 1:04 am 
Offline
User avatar

Joined: Wed Aug 18, 2010 5:38 pm
Posts: 102
Сделал чтение и запись в файл. Прошу прощения, что на C - чтобы написать даже такой несложный модуль на FASM, мне нужен большой непрерывный кусок свободного времени, а его нет :(

Небольшой пример идёт в комплекте (test.py).
Подробнее:
Spoiler: Show
Вначале идёт строка "import kolibri" - подключение модуля.

Открытие файла: f=kolibri.open(<filename>, <mode>)

filename - строка с полным именем файла.
mode - режим доступа(строка), первый символ 'r' (читать), 'w' (писать сначала), или 'a' (продолжить запись).
В f записывается ссылка на файловый объект. У него есть следуюзие атрибуты:

- f.write(obj) - записать строковое представление объекта в файл.

- f.writelines(list) - записать строковое представление объектов их списка в файл. Разделителя строк нет, объекты пишутся просто подряд.

- f.read() - прочитать весь файл в строку.

- f.name - имя файла

- f.pos - текущее положение в файле

- f.size - размер файла

- f.mode - режим доступа

- f.closed - tp_True, если файл был закрыт, иначе tp_False.


Top
   
PostPosted: Wed Aug 17, 2011 11:45 pm 
Offline
User avatar

Joined: Wed Aug 18, 2010 5:38 pm
Posts: 102
Отладил модуль на FASM, экспортирует функцию debug_print(s), выводящую строку на доску отладки.
Выложил на SVN документ, он же примерный план выступления на CC: http://kolibrios.org/repos/programs/dev ... olibri.txt. Про модуль kolibri допишу, как только доделаю вывод окна и сеть. Посоветуйте - о чём стоит рассказать подробнее? Может быть, о чём-то стоит умолчать?


Top
   
PostPosted: Thu Aug 18, 2011 12:00 am 
Online
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Что, так и не удалось добиться работы командной строки в menuetlibc? Даже установка нормальных опций gcc, типа -mpreferred-stack-boundary=2 -mincoming-stack-boundary=2, не помогает?

_________________
Сделаем мир лучше!


Top
   
PostPosted: Thu Aug 18, 2011 11:25 am 
Offline
User avatar

Joined: Wed Aug 18, 2010 5:38 pm
Posts: 102
Не помогает, в main() передаётся argc = 268533588.


Top
   
PostPosted: Thu Aug 18, 2011 2:29 pm 
Online
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Неужели даже если сделать find /path/to/program/source -name '*.o' | rm -rf - чтобы точно всё было пересобрано - явно добавить в $(MENUETLIBC)/makefiles/Makefile_for_program указанные опции в правилах .c.o, .cpp.o, .cc.o и пересобрать, то gcc всё равно будет компилировать кошмарный код типа
Code:
seg000:00000371                 lea     ecx, [esp+arg_0]
seg000:00000375                 and     esp, 0FFFFFFF0h
seg000:00000378                 push    dword ptr [ecx-4]
seg000:0000037B                 push    ebp
seg000:0000037C                 mov     ebp, esp
seg000:0000037E                 push    edi
seg000:0000037F                 push    esi
seg000:00000380                 push    ebx
seg000:00000381                 push    ecx
seg000:00000382                 sub     esp, 14h
seg000:00000385                 mov     edi, [ecx]
seg000:00000387                 mov     ebx, [ecx+4]
seg000:0000038A                 push    ds:off_1660
seg000:00000390                 call    sub_1D3
; после этого якобы edi = argc, ebx = argv, хотя при нормальной компиляции [ebp+8] = argc, [ebp+12] = argv

? Это взято из viewtopic.php?p=31720#p31720 , если что.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Thu Aug 18, 2011 3:58 pm 
Offline
User avatar

Joined: Wed Aug 18, 2010 5:38 pm
Posts: 102
Удалить *.o не помогло.
Пересобрал menuetlibc с этими же опциями - теперь tinypy не компилится:
../../libraries/menuetlibc/linuxtools/mgcc tpmain.c tpmain.o -mpreferred-stack-boundary=2 -mincoming-stack-boundary=2
tpmain.c:1:0: error: -mpreferred-stack-boundary=2 is not between 4 and 12
tpmain.c:1:0: error: -mincoming-stack-boundary=2 is not between 4 and 12
make: *** [tpmain.o] Error 1

Не нашёл в теме этого листинга, но функция main() в выводе objdump -S tpmain.o выглядит очень похоже.


Top
   
PostPosted: Thu Aug 18, 2011 4:27 pm 
Online
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Дополнительно поставить -march=i486 не помогает?

_________________
Сделаем мир лучше!


Top
   
PostPosted: Thu Aug 18, 2011 11:30 pm 
Offline
User avatar

Joined: Wed Aug 18, 2010 5:38 pm
Posts: 102
Добавил march=i486, не помогает.
Всё чудесатее и чудесатее.

Ставлю в main печаталки:

con_printf("argc=%d\n", argc);
con_printf("argv0=%s\n", argv[0]);

выводит правильный argc и мусор вместо argv[0]. Но если первую строку закомментировать, вторая отрабатывает правильно.
Что бы это могло означать?


Top
   
PostPosted: Thu Aug 18, 2011 11:34 pm 
Offline
User avatar

Joined: Tue Aug 25, 2009 4:45 pm
Posts: 796
Запустить в qemu образ колибри с параметрами -s, подключиться с gdb, запустить программу, остановить на этой стадии, проинспектировать память.

http://www.linuxquestions.org/questions ... db-627729/
http://www.delorie.com/gnu/docs/gdb/gdb_56.html


Top
   
PostPosted: Fri Aug 19, 2011 12:12 am 
Offline
User avatar

Joined: Wed Aug 18, 2010 5:38 pm
Posts: 102
Изменил порядок инициализации, теперь TinyPy можно запускать из shell. Тем не менее, причину странного поведения печаталок хотелось бы выяснить.
Attachment:
tinypy.7z [42.67 KiB]
Downloaded 127 times


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 124 posts ]  Go to page Previous 1 2 3 4 59 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited