Python для KolibriOS

...
  • Есть недоделанный шаблон модуля на FASM (вечером залью на SVN), хочется для начала запустить его.
    После этого помощь на его основе писать разные модули - нужно обсудить, какие именно. Навскидку, в таком порядке:
    а) Файловый ввод-вывод.
    б) Графический интерфейс.
    в) ...
    В перспективе ещё: слинковать VM в DLL и найти способ подгружать модули из отдельных файлов, не линкуя их с интерпретатором.
    В общем, планов громадьё :)
  • ок. вечером посмотрим.
  • реквестую модуль re =)
    И мы уже давно не пешки,
    Мы пули, мы орлы, и решки!
    Война ютит бинарный код,
    Умри, или иди вперед!
  • Кандидаты в президенты модули:

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


    A файл mymain.c стоит все-таки удалить
  • Сделал чтение и запись в файл. Прошу прощения, что на C - чтобы написать даже такой несложный модуль на FASM, мне нужен большой непрерывный кусок свободного времени, а его нет :(

    Небольшой пример идёт в комплекте (test.py).
    Подробнее:
    Spoiler:Вначале идёт строка "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.
  • Отладил модуль на FASM, экспортирует функцию debug_print(s), выводящую строку на доску отладки.
    Выложил на SVN документ, он же примерный план выступления на CC: http://kolibrios.org/repos/programs/dev ... olibri.txt. Про модуль kolibri допишу, как только доделаю вывод окна и сеть. Посоветуйте - о чём стоит рассказать подробнее? Может быть, о чём-то стоит умолчать?
  • Что, так и не удалось добиться работы командной строки в menuetlibc? Даже установка нормальных опций gcc, типа -mpreferred-stack-boundary=2 -mincoming-stack-boundary=2, не помогает?
    Сделаем мир лучше!
  • Не помогает, в main() передаётся argc = 268533588.
  • Неужели даже если сделать find /path/to/program/source -name '*.o' | rm -rf - чтобы точно всё было пересобрано - явно добавить в $(MENUETLIBC)/makefiles/Makefile_for_program указанные опции в правилах .c.o, .cpp.o, .cc.o и пересобрать, то gcc всё равно будет компилировать кошмарный код типа

    Code: Select all

    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 , если что.
    Сделаем мир лучше!
  • Удалить *.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 выглядит очень похоже.
  • Дополнительно поставить -march=i486 не помогает?
    Сделаем мир лучше!
  • Добавил march=i486, не помогает.
    Всё чудесатее и чудесатее.

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

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

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

    http://www.linuxquestions.org/questions ... db-627729/
    http://www.delorie.com/gnu/docs/gdb/gdb_56.html
  • Изменил порядок инициализации, теперь TinyPy можно запускать из shell. Тем не менее, причину странного поведения печаталок хотелось бы выяснить.
    tinypy.7z (42.67 KiB)
    Downloaded 293 times
  • Who is online

    Users browsing this forum: No registered users and 6 guests