Page 2 of 7

Re: Векторные функции

Posted: Mon Sep 07, 2009 6:09 pm
by IgorA
Исправил глюк с вылетом программы, теперь вроди работает нормально.
Документацию обновлю позже.

Re: Векторные функции

Posted: Wed Sep 09, 2009 3:27 pm
by IgorA
Заметил, что все программы использующие функцию рисующую кривую Безье из библиотеки не работают. А в эмуляторе KlbrInWin все функции работают. Что означает ошибка:
Page fault - Недостаток страницы

Re: Векторные функции

Posted: Wed Sep 09, 2009 5:04 pm
by Mario
Возможно указатель вышел за пределы выделенного участка памяти.

Re: Векторные функции

Posted: Wed Sep 09, 2009 10:08 pm
by DmitrySokolowsky
У меня всё кроме самолёта не работает.

Re: Векторные функции

Posted: Wed Sep 09, 2009 10:36 pm
by IgorA
Атауальпа wrote:У меня всё кроме самолёта не работает
Так и есть, дело в том что там пока не используются функции рисования Безье.
Недавно вычислил "глючное" место. Оказалось, что первая точка по координате Y имеет очень большое значение. Потому как сказал Mario, программа вылазила на чужую память. В эмуляторе этого глюка не заметно, т. к. WinAPI функции при неправильных координатах не вылетают (что с одной стороны хорошо, а с другой плохо: нельзя отлаживать программы если не видно глюков, тормозится рисование).
В общем проверял несколько раз алгоритм, и устранил глюк добавлением в функцию всего 1-й строки кода:

Code: Select all

finit
:o

Re: Векторные функции

Posted: Fri Sep 11, 2009 11:03 pm
by DmitrySokolowsky
Теперь работает, но со странным глюком.
Когда запущены часы или самолёт, во всех других приложениях не работают клавиатура и мышь! Я не могу ничего сделать ни с каким другим окном, пока не закрою демку. По клавише Win запускается меню, но ни один из его пунктов ничего не запускает ни мышью, ни клавиатурой.

Re: Векторные функции

Posted: Tue Sep 15, 2009 1:57 pm
by IgorA
немного обновил библиотеку:
1) работает масштабирование контуров (раньше масштаб всегда был = 1.0, даже если на входе подавалось другое число)
2) добавил функцию вывода векторного шрифта (в своем формате, хотелось-бы сделать поддержку стандартных, но до этого пока наверное очень далеко)
---
В примерах самолет и часы пока не нашел как устранить проблемы связанные с таймером.
В общем изменений не много.

Re: Векторные функции

Posted: Thu Sep 17, 2009 7:18 pm
by IgorA
версия 17.09.09:
1) вызов функции vect_conv_cont делается перед прорисовкой контуров автоматически (это упрощает написание программ)
2) изменен способ задания размера текста, и сама функция вывода текста доработана (символ 13 работает как перевод строки)
из недостатков:
1) пока шрифт не в отдельном файле
2) в шрифте есть не все символы

Re: Векторные функции

Posted: Thu Sep 17, 2009 8:48 pm
by Mario
Самолет убил систему запущенную под Qemu. Я думал, что такое невозможно. :mrgreen:

Итак ошибки:
1) samolot.asm

Code: Select all

draw_window:
  push eax ebx ecx edx
  mcall 12,1

  xor eax,eax
  mov ebx,50*65536+320
  mov ecx,30*65536+250
  mov edx,0
  or  edx,0x33000000
  mov edi,hed
  mcall

  mov eax,4 ;рисование текста
  mov ebx,5*65536+5
  mov ecx,0xffff00
  or  ecx,0x80000000
  mov edx,txtInfo
  mcall

  call draw_objects

  mcall 12,1
  pop edx ecx ebx eax
  ret
2) clock.asm

Code: Select all

draw_window:
  push eax ebx ecx edx
  mcall 12,1

  xor eax,eax
  mov ebx,50*65536+320
  mov ecx,30*65536+250
  mov edx,0+0x33000000
  mov edi,hed
  mcall

  mov eax,4 ;рисование текста
  mov ebx,5*65536+5
  mov ecx,0xffff00
  or  ecx,0x80000000
  mov edx,txtInfo
  mcall

  call draw_objects

  mcall 12,1
  pop edx ecx ebx eax
  ret
Вопрос на засыпку кто видит ошибки? Я вижу, но не скажу.

Как там было на bash.org.ru:
xxx: Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.

Re: Векторные функции

Posted: Thu Sep 17, 2009 8:55 pm
by diamond
Mario79 wrote:Как там было на bash.org.ru:
xxx: Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
Распространённый-то он распространённый, но это не влияет на тот факт, что этот способ не работает (неоднократно проверял... пришлось писать отладчик).
P.S. Да, а копипастить при программировании вообще не стоит. Хотя в данном случае скорее имеет место быть банальная опечатка.

Re: Векторные функции

Posted: Thu Sep 17, 2009 9:01 pm
by Heavyiron
Видим и намекнем. :) Незачем программам по 2 окна.

Re: Векторные функции

Posted: Thu Sep 17, 2009 9:04 pm
by IgorA
кажись я понял в чем юмор:
1)

Code: Select all

push eax ebx ecx edx ;в начале функции
...
mov edi,hed ;в нутри функции, хотя edi не в стеке
2)

Code: Select all

mcall 12,1 ;в начале
...
mcall 12,1 ;в конце, должно быть mcall 12,2

Re: Векторные функции

Posted: Thu Sep 17, 2009 9:06 pm
by Heavyiron
первое не критично, если по ходу программы ты в edi не хранишь нечто важное, хотя в твоем варианте, наверное проще написать pushad/popad

Re: Векторные функции

Posted: Sat Sep 19, 2009 11:14 am
by IgorA
Исправил ошибки в примерах, немного изменил 2 функции в библиотеке. Самое главное перенес данные по шрифту в отдельный файл. Теперь можно создавать файлы шрифтов, не сидящие внутри kex файла.
Если разобрать формат ttf, то думаю можно сделать прогрмму для конвертирования этих файлов, в таком случае не нужно будет создавать свои шрифты с 0 (тем более что я так до конца не заполнил все символы).

Re: Векторные функции

Posted: Sat Sep 19, 2009 11:51 am
by <Lrz>
Пример с отображением шрифта не очень удачный т.к. при непосредственном выводе без буферизации в ОЗУ глифов медленно. Конечно, лучше разобраться с существующими форматами шрифтов (хотя бы одним). У меня нет достаточно времени, что бы этим заняться...