Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Jan 18, 2020 1:43 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 144 posts ]  Go to page Previous 14 5 6 7 810 Next
Author Message
PostPosted: Fri Aug 29, 2014 3:12 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
68.16 - это нормальный способ загрузки в том числе и PE-драйверов, но имя драйвера должно заканчиваться нулевым символом. В 68.21 нужно указывать полный путь и дополнительно указывать командную строку.

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


Top
   
PostPosted: Tue Oct 07, 2014 4:19 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
Имеется структура
Code:
notify_struct:
        dd 7
        dd 0
  .msg  dd 0
        dd 0
        dd 0
        db '/sys/@notify', 0

И переменная
Code:
path:
   rb 4096

Как поместить n-й байт в notify_struct.msg?
Пробовал так:
Code:
    mov al, [path]
    mov byte[notify_struct.msg], al

Но в итоге в Notify выводится мусор.

_________________
я лишь учусь


Top
   
PostPosted: Tue Oct 07, 2014 7:43 am 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
notify_struct.msg - всего лишь ссылка. Варианта два:
а) если path уже не нужен, то
Code:
mov eax, path + 1
add eax, [n]
mov [eax], byte 0
mov [notify_struct.msg], path

P.S.: если будет ошибка на строчке path + 1, то помести в eax сначала path, а потом inc eax
б) создать еще один буфер, в него поместить n символов в цикле. Потом mov [notify_struct.msg], buffer
Code:
mov eax, buffer
mov ebx, path
mov ecx, [n]
@@:
mov dl, byte [ebx]
mov byte [eax], dl
inc eax
inc ebx
loop @b

mov [notify.msg], buffer

;-----
buffer rd 4096


А можно просто пересохранить байт [path + n + 1], потом сделать как в первом варианте, потом вернуть тот байт


Top
   
PostPosted: Tue Oct 07, 2014 11:48 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
Как-то это полегче делалось. С месяц назад я это уже делал, но исходники были утеряны. А вот теперь немогу понять как делал.

_________________
я лишь учусь


Top
   
PostPosted: Tue Oct 07, 2014 1:01 pm 
Offline
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 448
I'm not sure I understand you correctly, but here is my version:
Code:
; eax = n
movzx eax, byte[path + eax]
mov [notify_struct.msg], eax


Top
   
PostPosted: Tue Oct 07, 2014 2:40 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Моя ошибка, прочитал n байт, а не n-ый. Тогда dunkaist прав. Можно еще так
Code:
; eax = n
mov al, byte[path + eax]
mov byte[notify_struct.msg], al

Но при вызове нужно передавать не байт, а адрес, т.е. все ровно нужно создать где-то строку, в нее поместить нужный байт, затем 0, а потом mov [notify.msg], buffer, где buffer, строка, которую нужно вывести


Top
   
PostPosted: Tue Oct 07, 2014 7:54 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
Снова я с тупыми вопросами. Не могу разобраться с организацией кода для удаления tmp-дисков. Проблема скорее всего с неправильным заполнением структуры отдаваемой ф68.17. Буду рад если кто укажет на ошибки, а то у меня уже мозг кипит.


Attachments:
vdm.7z [1.04 KiB]
Downloaded 138 times

_________________
я лишь учусь
Top
   
PostPosted: Tue Oct 07, 2014 9:58 pm 
Offline
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 448
Hint: 'vdm d' deletes /tmp0.


Top
   
PostPosted: Wed Oct 15, 2014 10:09 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
И снова я с подобным вопросом. На этот раз немогу организовать создание tmp-диска, и прошу снова указать в каком направлении копать.


Attachments:
vdm.7z [1.17 KiB]
Downloaded 139 times

_________________
я лишь учусь
Top
   
PostPosted: Thu Oct 16, 2014 9:02 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
Проблема локализирована. Код снова работает, но неожиданным образом.

_________________
я лишь учусь


Top
   
PostPosted: Wed Oct 22, 2014 8:20 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1151
Помогите разобраться, почему edit_box ведет себя не так как надо. На события мыши он вроде как вообще не реагирует, покрайней мере фокус не снимается. А при событии нажатия клавиатуры он и воввсе ведет себя непонятным образом.


Attachments:
vdm.7z [2.03 KiB]
Downloaded 135 times

_________________
я лишь учусь
Top
   
PostPosted: Wed Oct 22, 2014 8:46 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
punk_joker wrote:
На события мыши он вроде как вообще не реагирует, покрайней мере фокус не снимается.

Spoiler: Show
Желательно:
Code:
mcall 40,0x27

А также в mouse_dd
Code:
ed_focus=                     10b   ;фокус приложения

Я в opendialog сделал:
Code:
   mov   edi,edit1
   or   [edi+44],dword ed_focus

И да, я знаю, что использовать "магические" числа неправильный путь, но так вышло.
Можно сразу сделать:
Code:
   or   [mouse_dd],dword ed_focus

punk_joker wrote:
А при событии нажатия клавиатуры он и воввсе ведет себя непонятным образом.

Code:
mcall 2

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sat Oct 25, 2014 8:09 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Есть вопрос по FPU. Пишу функцию которая множит матрицу m(4*4) на вектор v(4). Пока что для упрощения беру единичную матрицу, т. е. после умножения я должен получить исходный вектор. Проблема в том что первое число получаемого вектора равно 1.0, другие числа совпадают. Вычисляю числа вектора в цикле потому для всех чисел по идее используются одни и те же формулы. Потому-то и не могу понять почему именно первое число делается единицей :?
Сама функция для тех кто не хочет смотреть весь код.
Code:
align 4
proc func_mv, m:dword, v:dword
pushad
   mov ebx,[m]
   mov edx,[v]
   mov ecx,4
   .cycle_0:
      finit
      fld dword[edx]
      fld dword[edx+4]
      fld dword[edx+8]

      fld dword[ebx]      ;st0 = m[0]
      fmul st0,st3      ;st0 *= v.coord.X
      fld dword[ebx+4]   ;st0 = m[1]
      fmul st0,st3      ;st0 *= v.coord.Y
      fld dword[ebx+8]   ;st0 = m[2]
      fmul st0,st3      ;st0 *= v.coord.Z
      fadd dword[ebx+12] ;st0 += m[3]
      fadd st0,st1      ;st0 += v.coord.Z * m[2]
      fadd st0,st2      ;st0 += v.coord.Y * m[1]
      fstp dword[edx]    ;v.coord.X = v.coord.X * m[0] + v.coord.Y * m[1] + v.coord.Z * m[2] + m[3]
      add ebx,16 ;следущая строка матрицы
      add esi,4  ;следущая координата вектора

      loop .cycle_0
   stdcall print_matrix,[v],1
popad
   ret
endp

.........

align 4
matr1 dd 1.0,0.0,0.0,0.0
   dd 0.0,1.0,0.0,0.0
   dd 0.0,0.0,1.0,0.0
   dd 0.0,0.0,0.0,1.0

vect1 dd 0.5,0.7,0.9,1.1


Attachments:
File comment: программа множит матрицу и вектор, на доску отладки пишет результат
matr_asm.zip [14.01 KiB]
Downloaded 134 times
Top
   
PostPosted: Sat Oct 25, 2014 8:57 pm 
Offline
Mentor
User avatar

Joined: Mon Oct 19, 2009 10:58 am
Posts: 448
У тебя ведь даже не планировалось умножение матрицы на вектор:
Code:
fld dword[edx]
fld dword[edx+4]
fld dword[edx+8]
...
fstp dword[edx]    ; v.coord.X = v.coord.X * m[0] + v.coord.Y * m[1] + v.coord.Z * m[2] + m[3]

Вот так выводит 0.5 0.7 0.9 1.1:
Code:
proc func_mv, m:dword, v:dword
pushad
        mov ebx,[m]
        mov edx,[v]
        mov esi,edx
        mov ecx,4
        .cycle_0:
                finit
                fld dword[edx]
                fld dword[edx+4]
                fld dword[edx+8]
                fld dword[edx+12]
;fwait
                fld dword[ebx]     ;st0 = m[0]
                fmul st0,st4       ;st0 *= v.coord.X
                fld dword[ebx+4]   ;st0 = m[1]
                fmul st0,st4       ;st0 *= v.coord.Y
                fld dword[ebx+8]   ;st0 = m[2]
                fmul st0,st4       ;st0 *= v.coord.Z
                fld dword[ebx+12]
                fmul st0, st4

                fadd st0,st1       ;st0 += v.coord.Z * m[2]
                fadd st0,st2       ;st0 += v.coord.Y * m[1]
                fadd st0,st3
                fstp dword[esi]    ;v.coord.X = v.coord.X * m[0] + v.coord.Y * m[1] + v.coord.Z * m[2] + m[3]
;               fincstp
;               fincstp
;fwait
                add ebx,16
                add esi,4
;fwait
                loop .cycle_0
        stdcall print_matrix,[v],1
popad
        ret
endp



Top
   
PostPosted: Sat Oct 25, 2014 9:58 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Спасибо. Кажется понял я пропустил 4-ю координату, и забыл сделать сдвиг по вектору при выводе результата, потому последняя единица попадала в начало вектора. Остальные координаты не менялись, а я считал что они пересчитанные.
Уже много раз менял этот код в ходе экспериментов и много чего уже сделанного правильно выкинул из него. В начале вообще планировал загрузку вектора вынести перед циклом, чтобы не грузить его 4 раза, и по идее он будет меняться с каждым циклом, так что доработка еще будет нужна.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 144 posts ]  Go to page Previous 14 5 6 7 810 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


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:  
Powered by phpBB® Forum Software © phpBB Limited