;============================================================================= ; ; MGB - Menuet Graphics Benchmark 0.3 ; Compile with FASM ; ;============================================================================= ; ; Original author and copyrights holder: ; Mikhail Lisovin a.k.a. Mihasik ; lisovin@26.ru ; ; Disassembled with IDA 5.0.0.879: ; http://www.datarescue.com/ ; With use of 'ida.int' and 'kloader.ldw': ; Eugene Grechnikov a.k.a. diamond ; diamondz@land.ru ; http://diamondz.land.ru/ ; ; Modified for version 0.3: ; Mike Semenako a.k.a mike.dld ; mike.dld@gmail.com ; http://www.mikedld.com/ ; ;============================================================================= org 0x0 use32 db 'MENUET01' dd 1 dd start dd APP_MEM_END dd 0x200000 dd 0x07FFF0 dd 0 dd 0 include '..\..\..\macros.inc' ;__CPU_type equ p6 ; charge it include 'proc32.inc' ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc start ; DATA XREF: seg000:off_Co ; FUNCTION CHUNK AT 000000CF SIZE 00000147 BYTES mov ecx, -1 call subGetThreadInfo mov edx, [dwMainPID] mov ecx, eax loc_36: ; CODE XREF: start+20j call subGetThreadInfo loc_3B: cmp edx, [dwMainPID] jz loc_46 dec ecx jnz loc_36 loc_46: ; CODE XREF: start+1Dj mov [dwMainWndSlot], ecx locRedrawEvent: ; CODE XREF: start+3Cj call subDrawMainWindow locWaitForEvent: ; CODE XREF: start+6Cj start:loc_B3j ... mcall 23, 20 ; Kolibri - WAIT FOR EVENT WITH TIMEOUT ; ebx = timeout ; Return: eax = event cmp eax, 1 jz locRedrawEvent loc_62: cmp eax, 2 jz locKeyEvent cmp eax, 3 loc_6A: jz locButtonEvent loc_70: ;btr word[wFlags], 2 ;jnb loc_87 ;mov eax, 58 ;mov ebx, stFileInfoBlock ;int 0x40 ; Kolibri - ACCESS TO FILE SYSTEM (obsolete) ; ebx -> fileinfo struc loc_87: ; CODE XREF: start+55j btr word[wFlags], 1 jnb locWaitForEvent call subDelay100ms mcall 0x12, 3, [dwMainWndSlot] ; Kolibri - ACTIVATE WINDOW ; ecx = slot call subDelay100ms loc_AE: call subDrawBars loc_B3: jmp locWaitForEvent endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subGetThreadInfo ; CODE XREF: start+5p start:loc_36p mcall 9, APP_MEM_END ; Kolibri - GET THREAD INFO ; ebx -> buffer, ecx = slot (-1 for self) ; Return: eax = maximum slot retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subDelay100ms ; CODE XREF: start+6Ep start+85p mcall 5, 0x0a ; Kolibri - DELAY ; ebx = time (in 1/100th of second) retn endp ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ; START OF FUNCTION CHUNK FOR start locKeyEvent: ; CODE XREF: start+41j mcall 2 ; Kolibri - GET KEY CODE ; Return: ah = keycode cmp ah, 't' jz locActionTest cmp ah, 'c' jz locActionComment cmp ah, 'p' jz locActionPattern cmp ah, 'o' jz locActionOpen cmp ah, 's' jz locActionSave jmp locWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locButtonEvent: ; CODE XREF: start:loc_6Aj mcall 0x11 ; Kolibri - GET PRESSED BUTTON ; Return: ah = button ID cmp ah, 1 jnz locNotClose mcall -1 ; Kolibri - FINISH EXECUTION locNotClose: ; CODE XREF: start+E6j cmp ah, 2 jnz locNotTest locActionTest: ; CODE XREF: start+B5j bts [wFlags], 0 jb locWaitForEvent mcall 5, 50 ; Kolibri - DELAY ; ebx = time (in 1/100th of second) loc_132: mcall 51, 1, subTestWndProc, 0x17FFF0; Kolibri - CREATE THREAD ; ebx = 1 - unique subfunction ; ecx = starting eip ; edx = starting esp jmp locWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locNotTest: ; CODE XREF: start+F2j cmp ah, 3 jnz locNotComment locActionComment: ; CODE XREF: start+BAj bts [wFlags], 0 jb locWaitForEvent mov [dwBufferPtr], aComment1 ; "Current "... mov [dwEditLabel], aComment ; "Comment" mov [dwEditLabelLen], 7 call subCreateOpenSaveDlg jmp locWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locNotComment: ; CODE XREF: start+12Cj cmp ah, 4 jnz locNotPattern locActionPattern: ; CODE XREF: start+BFj call subSavePattern call subDrawBars jmp locWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locNotPattern: ; CODE XREF: start+167j cmp ah, 5 jnz locNotOpen locActionOpen: ; CODE XREF: start+C8j bts [wFlags], 0 jb locWaitForEvent mov [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb "... mov [dwEditLabel], aOpenFile ; "Open file" mov [dwEditLabelLen], 9 call subCreateOpenSaveDlg jmp locWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locNotOpen: ; CODE XREF: start+17Bj cmp ah, 6 jnz locWaitForEvent locActionSave: ; CODE XREF: start+D1j bts [wFlags], 0 jb locWaitForEvent mov [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb "... mov [dwEditLabel], aSaveAs ; "Save as..." mov [dwEditLabelLen], 0Ah call subCreateOpenSaveDlg jmp locWaitForEvent ; END OF FUNCTION CHUNK FOR start ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subCreateOpenSaveDlg ; CODE XREF: start+15Ap start+1A9p ... mcall 51, 1, subOpenSaveDlgProc, 0x19FFF0; Kolibri - CREATE THREAD ; ebx = 1 - unique subfunction ; ecx = starting eip ; edx = starting esp retn endp ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ subTestWndProc: ; DATA XREF: start+118o mov esi,results_table+8 .next_test: call subInitTestTimer align 4 @@: push esi call dword[esi] pop esi call subIfTimeElapsed jb @b mov [esi-8],edi add esi,TEST_REC_SIZE cmp dword[esi],0 jnz .next_test macro unused { call subInitTestTimer locDrawNextWindow: ; CODE XREF: seg000:00000241j mov ecx, 4F0190h call testDrawWindow call subIfTimeElapsed jb locDrawNextWindow mov [results_table+TEST_REC_SIZE*0], edi call subInitTestTimer locDrawNextBar: ; CODE XREF: seg000:00000269j mcall 0x0d, 0x0A0064, 0x1E00FA, 0x6A73D0; Kolibri - DRAW RECTANGLE ; ebx = [xstart]*65536+[xsize], ecx = [ystart]*65536+[ysize] ; edx = 0xRRGGBB or 0x80RRGGBB for gradient call subIfTimeElapsed jb locDrawNextBar mov [results_table+TEST_REC_SIZE*1], edi call subInitTestTimer locDrawNextLine: ; CODE XREF: seg000:00000291j ; Kolibri - DRAW LINE mcall 38, 0x8C008C, 0x1E017C, 0x1090207F ; ebx = [xstart]*65536+[xend], ecx = [ystart]*65536+[yend] ; edx = 0x00RRGGBB - color or 0x01****** - inversed line call subIfTimeElapsed jb locDrawNextLine mov [results_table+TEST_REC_SIZE*2], edi call subInitTestTimer locDrawNextText1: ; CODE XREF: seg000:000002BEj ; Kolibri - DRAW STRING mcall 4, 0x0A012C, 0x0AA66, aTestText, 34 ; ebx = [xstart]*65536+[ystart] ; ecx = 0xX0RRGGBB, edx -> string call subIfTimeElapsed jb locDrawNextText1 mov [results_table+TEST_REC_SIZE*3], edi call subInitTestTimer locDrawNextText2: ; CODE XREF: seg000:000002EBj ; Kolibri - DRAW STRING mcall 4, 0x0A015E, 0x10E7B850, aTestText, 34 ; ebx = [xstart]*65536+[ystart] ; ecx = 0xX0RRGGBB, edx -> string call subIfTimeElapsed jb locDrawNextText2 mov [results_table+TEST_REC_SIZE*4], edi call subInitTestTimer locDrawNextNumber: ; CODE XREF: seg000:00000318j ; Kolibri - DRAW NUMBER ; bl = 0/1 - ecx is number/pointer ; bh = 0/1/2 - dec/hex/bin ; highword(ebx) = number of digits ; ecx = number/pointer ; edx = [x]*65536+[y] ; esi = 0xX0RRGGBB mcall 47, 80000h, 12345678, 140172h, 0E0B27Bh call subIfTimeElapsed jb locDrawNextNumber mov [results_table+TEST_REC_SIZE*5], edi call subInitTestTimer locDrawNextPixel: ; CODE XREF: seg000:00000340j ; Kolibri - PUT PIXEL ; ebx = x, ecx = y, edx = color mcall 1, 100, 100, 0x0FFFFFF call subIfTimeElapsed jb locDrawNextPixel mov [results_table+TEST_REC_SIZE*6], edi } bts word[wFlags], 1 btr word[wFlags], 0 ; Kolibri - FINISH EXECUTION mcall -1 ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subInitTestTimer ; CODE XREF: seg000:subTestWndProcp ; seg000:00000249p ... xor edi, edi mov eax, 26 mov ebx, 9 mcall ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER ; Return: eax = time counter inc eax mov ecx, eax add eax, 100 mov [dwTestEndTime], eax locWait10ms: ; CODE XREF: subInitTestTimer+22j mov eax, 26 mcall ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER ; Return: eax = time counter cmp eax, ecx jb locWait10ms retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subIfTimeElapsed ; CODE XREF: seg000:0000023Cp ; seg000:00000264p ... inc edi mov eax, 26 mov ebx, 9 mcall ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER ; Return: eax = time counter cmp eax, [dwTestEndTime] retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subSavePattern ; CODE XREF: start:locActionPatternp ; mov esi, dwDrawWindowTime ; mov edi, dwDrawWindowTime2 ; mov ecx, 18 ; cld ; rep movsd mov esi,results_table cld @@: lodsd mov [esi],eax add esi,TEST_REC_SIZE-4 cmp dword[esi+TEST_REC_SIZE-4],0 jne @b mov esi,aComment1 mov edi,aComment2 mov ecx,44/4 rep movsd retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subDrawMainWindow ; CODE XREF: start:locRedrawEventp mov eax, 12 mov ebx, 1 mcall ; Kolibri - BEGIN WINDOW REDRAW mov eax,48 mov ebx,4 mcall mov ebx, 100*65536+72*5+14;640145h mov ecx, 80*65536+TESTS_NUM*LINE_HEIGHT+15+20+35 add cx, ax mov edx, 34000000h mov edi, aCaption xor eax, eax mcall mov eax, 8 mov ebx, 050036h+12 mov ecx, 5*65536+20 mov edx, 2 mov esi, 0x00007F7F;702050h locDrawButtonsLoop: ; CODE XREF: subDrawMainWindow+3Bj mcall ; Kolibri - DEFINE/DELETE BUTTON ; ebx = [xstart]*65536+[xsize] ; ecx = [ystart]*65536+[ysize] ; edx = 0xXYnnnnnn, esi = color add ebx, 72*65536 inc edx cmp edx, 7 jb locDrawButtonsLoop mov ecx,31 mov edx,0x00007F7F mov esi,(72*5)/2 call drawSeparator mov eax, 4 mov ebx, 27*65536+12 mov ecx, 0x80DDEEFF mov edx, aButtonsText ; "Test Comment+ Pattern+ Open "... mcall ; Kolibri - DRAW STRING ; ebx = [xstart]*65536+[ystart] ; ecx = 0xX0RRGGBB, edx -> string call subDrawBars mov ecx,TESTS_NUM*LINE_HEIGHT+15+21 mov edx,0x00007F7F mov esi,(72*5)/2 call drawSeparator mov eax, 12 mov ebx, 2 mcall ; Kolibri - END WINDOW REDRAW retn endp proc drawSeparator mov eax,1 mov ebx,3 @@: mcall add ebx,2 dec esi jnz @b retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc testDrawWindow xor eax, eax mov ebx, 640145h mov ecx, 4F0190h mov edx, 3000000h mcall retn endp proc testDrawBar mov eax, 13 mov ebx, 0A0064h mov ecx, 1E00FAh mov edx, 6A73D0h mcall retn endp proc testDrawPicture mov eax, 7 mov ebx, 0 mov ecx, 90*65536+123 mov edx, 15*65536+33 mcall retn endp proc testDrawVertLine mov eax, 38 mov ebx, 300*65536+300 ;8C008Ch mov ecx, 30*65536+380 ;1E017Ch mov edx, 1090207Fh mcall retn endp proc testDrawHorzLine mov eax, 38 mov ebx, 30*65536+300 ;20008Ch mov ecx, 380*65536+380 ;17C017Ch mov edx, 1090207Fh mcall retn endp proc testDrawFreeLine mov eax, 38 mov ebx, 30*65536+300 ;20008Ch mov ecx, 380*65536+30 ;17C001Eh mov edx, 1090207Fh mcall retn endp proc testDrawText1 mov eax, 4 mov ebx, 0C012Ch mov ecx, 0AA66h mov edx, aTestText mov esi, 34 mcall retn endp proc testDrawText2 mov eax, 4 mov ebx, 1B013Bh mov ecx, 10E7B850h mov edx, aTestText mov esi, 34 mcall retn endp proc testDrawNumber mov eax, 47 mov ebx, 80000h mov ecx, 12345678 mov edx, 2A014Ah mov esi, 0E0B27Bh mcall retn endp proc testDrawPixel mov eax, 1 mov ebx, 100 mov ecx, 100 mov edx, 0FFFFFFh mcall retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subDrawBars ; CODE XREF: start:loc_AEp start+16Ep ... mov edi,results_table mov ebx,30+7 .next_result: cmp dword[edi+TEST_REC_SIZE-4],0 je .exit push ebx mov eax,13 movzx ecx,bx add ecx,-2 shl ecx,16 mov cx,LINE_HEIGHT mov ebx,0*65536+72*5+5 xor edx,edx mcall pop ebx and ebx,0x0000FFFF or ebx,5*65536 mov edx,[edi+TEST_REC_SIZE-4] mov ecx,0x8000CCCC ; 0x00E7E05A mov eax,4 mcall push '=' 0x00FFFF00 0x00FFFF7F 0x00FFFF7F mov eax,[edi+0] cmp eax,[edi+4] je @f jb .lp1 mov dword[esp+0],0x007FFF7F mov dword[esp+4],0x00FF7F7F mov dword[esp+8],0x0000FF00 mov byte[esp+12],'>' .lp1: ja @f mov dword[esp+0],0x00FF7F7F mov dword[esp+4],0x007FFF7F mov dword[esp+8],0x00FF0000 mov byte[esp+12],'<' @@: pop ecx call int2str add ebx,(72*5-6*8*2-6-10-5)*65536 ; 196 mov edx,APP_MEM_END mov esi,8 mov eax,4 mcall pop ecx mov eax,[edi+4] call int2str add ebx,(6*8+6+10)*65536 mov eax,4 mcall pop ecx add ebx,(-6-5)*65536 mov edx,esp mov esi,1 mcall add esp,4 add edi,TEST_REC_SIZE add bx,LINE_HEIGHT jmp .next_result .exit: mov eax, 13 mov ebx, 0*65536+72*5+5 mov ecx, (TESTS_NUM*LINE_HEIGHT+15+25)*65536+26 xor edx, edx mcall mov eax, 4 mov ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27) mov ecx, 0x8000CCCC mov edx, aLeft mcall ; Kolibri - DRAW STRING add ebx, (6*10)*65536 mov ecx, 0x00FFFF00 mov edx, aComment1 mov esi, 42 mcall ; Kolibri - DRAW STRING mov eax, 4 mov ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27+12) mov ecx, 0x8000CCCC mov edx, aRight mcall ; Kolibri - DRAW STRING add ebx, (6*10)*65536 mov ecx, 0x00FFFF00 mov edx, aComment2 mov esi, 42 mcall ; Kolibri - DRAW STRING retn endp proc int2str push eax ecx edx edi mov edi,APP_MEM_END+7 mov dword[APP_MEM_END+0],' ' mov dword[APP_MEM_END+4],' ' mov ecx,10 @@: xor edx,edx div ecx add dl,'0' mov [edi],dl dec edi or eax,eax jnz @b pop edi edx ecx eax retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subDrawResultComments ; CODE XREF: subDrawBars+92p ; subDrawBars+AFp ... xor di, di mov eax, 4 locDrawCommentsLoop: ; CODE XREF: subDrawResultComments+1Cj mcall ; Kolibri - DRAW STRING ; ebx = [xstart]*65536+[ystart] ; ecx = 0xX0RRGGBB, edx -> string add bx, 13;55 bt edi, 31 jnb loc_52F add edx, esi loc_52F: ; CODE XREF: subDrawResultComments+12j inc di cmp di, 7 jb locDrawCommentsLoop retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subDrawResultNumbers ; CODE XREF: subDrawBars+CDp ; subDrawBars+DCp xor edi, edi mov eax, 47 mov esi, 0DDEEFFh locDrawNumbersLoop: ; CODE XREF: subDrawResultNumbers+1Ej call subGetDigitsCount mcall ; Kolibri - add dx, 13;55 add ecx, 4 inc edi cmp edi, 7 jb locDrawNumbersLoop retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subGetDigitsCount ; CODE XREF: subDrawResultNumbers:locDrawNumbersLoopp xor ebx, ebx mov bh, 6 cmp dword[ecx], 99999 ja loc_589 dec bh cmp dword[ecx], 9999 ja loc_589 dec bh cmp dword[ecx], 999 ja loc_589 dec bh cmp dword[ecx], 99 ja loc_589 dec bh cmp dword[ecx], 9 ja loc_589 dec bh loc_589: ; CODE XREF: subGetDigitsCount+Aj ; subGetDigitsCount+14j ... bswap ebx inc bl retn endp ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ subOpenSaveDlgProc: ; CODE XREF: seg000:0000059Dj ; DATA XREF: subCreateOpenSaveDlg+Ao call subDrawOpenSaveDlg locOSDWaitForEvent: ; CODE XREF: seg000:000005ADj ; seg000:000005C3j ... mov eax, 10 mcall ; Kolibri - cmp eax, 1 jz subOpenSaveDlgProc cmp eax, 2 jz locOSDKeyEvent cmp eax, 3 jz locOSDButtonEvent jmp locOSDWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locOSDKeyEvent: ; CODE XREF: seg000:000005A2j mov eax, 2 mcall ; Kolibri - GET KEY CODE ; Return: ah = keycode cmp ah, 0B3h jnz locOSDNotRightKey mov eax, [dwOSDCaretPos] cmp eax, 41 ja locOSDWaitForEvent inc eax mov [dwOSDCaretPos], eax call subDrawOpenSaveDlgControls jmp locOSDWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locOSDNotRightKey: ; CODE XREF: seg000:000005B9j cmp ah, 0B0h jnz locOSDNotLeftKey mov eax, [dwOSDCaretPos] test eax, eax jz locOSDWaitForEvent dec eax mov [dwOSDCaretPos], eax call subDrawOpenSaveDlgControls jmp locOSDWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locOSDNotLeftKey: ; CODE XREF: seg000:000005D5j cmp ah, 0B6h jnz locOSDNotDeleteKey call subOSDDeleteChar call subDrawOpenSaveDlgControls jmp locOSDWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locOSDNotDeleteKey: ; CODE XREF: seg000:000005F0j cmp ah, 8 jnz locOSDNotBackspaceKey mov eax, [dwOSDCaretPos] test eax, eax jz locOSDWaitForEvent dec eax mov [dwOSDCaretPos], eax call subOSDDeleteChar call subDrawOpenSaveDlgControls jmp locOSDWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locOSDNotBackspaceKey: ; CODE XREF: seg000:00000601j cmp ah, 0Dh jnz locOSDNotReturnKey locOSDReturnKey: ; CODE XREF: seg000:000006E1j mov al, ' ' mov edi, [dwBufferPtr] add edi,43 mov ecx,43 std repe scasb cld inc edi mov byte[edi+1], 0 cmp [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb "... jnz locCloseOSD cmp [dwEditLabel], aOpenFile ; "Open file" jnz locSaveFile mov [stFileInfoBlock], 0 mov [dwDataSize], TESTS_NUM*4+44 bts word[wFlags], 2 mov eax,70 ; 58 mov ebx,stFileInfoBlock mcall mov esi,APP_MEM_END+100 mov edi,results_table+4 cld @@: cmp dword[edi+TEST_REC_SIZE-8],0 je @f movsd add edi,TEST_REC_SIZE-4 jmp @b @@: mov edi,aComment2 mov ecx,44 rep movsb jmp locCloseOSD ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locSaveFile: ; CODE XREF: seg000:00000654j mov [stFileInfoBlock], 2 ; 1 mov [dwDataSize], TESTS_NUM*4+44 bts word[wFlags], 2 mov esi,results_table+4 mov edi,APP_MEM_END+100 cld @@: cmp dword[esi+TEST_REC_SIZE-8],0 je @f movsd add esi,TEST_REC_SIZE-4 jmp @b @@: mov esi,aComment2 mov ecx,44 rep movsb mov eax,70 ; 58 mov ebx,stFileInfoBlock mcall jmp locCloseOSD ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locOSDNotReturnKey: ; CODE XREF: seg000:00000624j cmp [dwOSDCaretPos], 42 jnb locOSDWaitForEvent mov edi, [dwBufferPtr] add edi, 42 mov esi, edi dec esi mov ecx, 42 sub ecx, [dwOSDCaretPos] std rep movsb shr eax, 8 mov esi, [dwBufferPtr] add esi, [dwOSDCaretPos] mov [esi], al inc [dwOSDCaretPos] call subDrawOpenSaveDlgControls jmp locOSDWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locOSDButtonEvent: ; CODE XREF: seg000:000005A7j mov eax, 17 mcall ; Kolibri - GET PRESSED BUTTON ; Return: ah = button ID cmp ah, 1 jnz locNotCloseOSD jmp locOSDReturnKey ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locCloseOSD: ; CODE XREF: seg000:00000644j ; seg000:0000066Cj ... bts [wFlags], 1 btr [wFlags], 0 mov eax, -1 mcall ; Kolibri - FINISH EXECUTION locNotCloseOSD: ; CODE XREF: seg000:000006DFj cmp ah, 2 jnz locNotSetCaretOSD mov eax, 37 mov ebx, 1 mcall ; Kolibri - GET MOUSE COORDINATES, WINDOW-RELATIVE ; Return: eax = [x]*65536 + [y] shr eax, 16 sub eax, 21 xor edx, edx mov ebx, 6 div ebx mov [dwOSDCaretPos], eax call subDrawOpenSaveDlgControls jmp locOSDWaitForEvent ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ locNotSetCaretOSD: ; CODE XREF: seg000:00000700j jmp locOSDWaitForEvent ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subOSDDeleteChar ; CODE XREF: seg000:000005F2p ; seg000:00000612p mov edi, [dwBufferPtr] add edi, [dwOSDCaretPos] mov esi, edi inc esi mov ecx, 43 sub ecx, [dwOSDCaretPos] cld rep movsb retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subDrawOpenSaveDlg ; CODE XREF: seg000:subOpenSaveDlgProcp mov eax, 12 mov ebx, 1 mcall ; Kolibri - BEGIN WINDOW REDRAW xor eax, eax mov ebx, 64012Ch mov ecx, 640050h mov edx, 3780078h mcall ; Kolibri - DEFINE/DRAW WINDOW ; ebx = [xstart]*65536+[xsize] ; ecx = [ystart]*65536+[ysize] mov eax, 4 mov ebx, 80008h mov ecx, 10DDEEFFh mov edx, [dwEditLabel] mov esi, [dwEditLabelLen] mcall ; Kolibri - DRAW STRING ; ebx = [xstart]*65536+[ystart] ; ecx = 0xX0RRGGBB, edx -> string call subDrawOpenSaveDlgControls mov eax, 12 mov ebx, 2 mcall ; Kolibri - END WINDOW REDRAW retn endp ; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B R O U T I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ proc subDrawOpenSaveDlgControls ; CODE XREF: seg000:000005CBp ; seg000:000005E6p ... pusha mov eax, 8 mov ebx, 150102h mov ecx, 28000Fh mov edx, 40000002h mcall ; Kolibri - DEFINE/DELETE BUTTON ; ebx = [xstart]*65536+[xsize] ; ecx = [ystart]*65536+[ysize] ; edx = 0xXYnnnnnn, esi = color mov eax, 13 mov edx, 0E0E0E0h mcall ; Kolibri - DRAW RECTANGLE ; ebx = [xstart]*65536+[xsize], ecx = [ystart]*65536+[ysize] ; edx = 0xRRGGBB or 0x80RRGGBB for gradient push eax mov eax, 60000h mul [dwOSDCaretPos] add eax, 150006h mov ebx, eax pop eax mov edx, 6A73D0h mcall ; Kolibri - mov eax, 4 mov ebx, 15002Ch xor ecx, ecx mov edx, [dwBufferPtr] mov esi, 43 mcall ; Kolibri - DRAW STRING ; ebx = [xstart]*65536+[ystart] ; ecx = 0xX0RRGGBB, edx -> string popa retn endp ; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ dwMainWndSlot dd 0 ; DATA XREF: start:loc_46w start+7Dr dwBufferPtr dd 0 ; DATA XREF: start+13Cw start+18Bw ... dwEditLabel dd 0 ; DATA XREF: start+146w start+195w ... dwEditLabelLen dd 0 ; DATA XREF: start+150w start+19Fw ... aComment db 'Comment' ; DATA XREF: start+146o aOpenFile db 'Open file' ; DATA XREF: start+195o ; seg000:0000064Ao aSaveAs db 'Save as...' ; DATA XREF: start+1D4o dwOSDCaretPos dd 0 ; DATA XREF: seg000:000005BBr ; seg000:000005C6w ... macro unused { stFileInfoBlock dd 0 ; DATA XREF: start+5Co ; seg000:00000658w ... dd 0 dwDataSize dd 1 ; DATA XREF: seg000:0000065Ew ; seg000:00000678w dd APP_MEM_END+100 dd APP_MEM_END aPatternPath db '/hd0/1/pattern.mgb ' ; DATA XREF: start+18Bo } align 4 stFileInfoBlock dd 0,0,0 dwDataSize dd 1 dd APP_MEM_END+100 aPatternPath db '/hd0/1/pattern.mgb ' ; DATA XREF: start+18Bo ; start+1CAo ... wFlags dd 0 ; DATA XREF: start:loc_70w ; start:loc_87w ... dwTestEndTime dd 0 ; DATA XREF: subInitTestTimer+14w ; subIfTimeElapsed+Dr results_table dd \ ?,?,testDrawWindow,aDrawingWindow,\ ?,?,testDrawBar,aDrawingBar,\ ?,?,testDrawPicture,aDrawingPicture,\ ?,?,testDrawVertLine,aDrawingVLine,\ ?,?,testDrawHorzLine,aDrawingHLine,\ ?,?,testDrawFreeLine,aDrawingFLine,\ ?,?,testDrawText1,aDrawingText1,\ ?,?,testDrawText2,aDrawingText2,\ ?,?,testDrawNumber,aDrawingNumber,\ ?,?,testDrawPixel,aDrawingPixel,\ 0,0,0,0 LINE_HEIGHT = 13 TEST_REC_SIZE = 16 TESTS_NUM = ($ - results_table) / TEST_REC_SIZE - 1 macro cstr name,str { local ..end name db ..end-name-1,str ..end: } aDrawingWindow db 'Window Of Type #3, 325x400 px',0 aDrawingBar db 'Filled Rectangle, 100x250 px',0 aDrawingPicture db 'Picture, 55x123, px',0 aDrawingVLine db 'Vertical Line, 350 px',0 aDrawingHLine db 'Horizontal Line, 270 px',0 aDrawingFLine db 'Free-angled Line, 350 px',0 aDrawingText1 db 'Fixed-width Text, 34 chars',0 aDrawingText2 db 'Proportional Text, 34 chars',0 aDrawingNumber db 'Decimal Number, 8 digits',0 aDrawingPixel db 'Single Pixel',0 aTestText db 'This is a 34-charachters test text' ; DATA XREF: seg000:000002ADo ; seg000:000002DAo aButtonsText db 'Test Comment+ Pattern+ Open Save',0 ; DATA XREF: subDrawMainWindow+5Do aCaption db 'Menuet Graphical Benchmark 0.3',0 ; DATA XREF: subDrawMainWindow+4Co aLeft db 'Left :',0 aRight db 'Right :',0 aComment1 db 'current ' ; DATA XREF: start+13Co ; subDrawBars+9Co ;dwDrawWindowTime2 dd 0 ; DATA XREF: subSubSavePattern+5o ; ; subDrawBars+18o ... ; dd 0 ; dd 0 ; dd 0 ; dd 0 ; dd 0 ; dd 0 aComment2 db 'no pattern ' ; DATA XREF: subDrawBars+72o ; subDrawBars+B9o APP_MEM_END: rb 30 ; ; DATA XREF: seg000:off_10o ; subGetThreadInfo+5o ... dwMainPID dd ? ; DATA XREF: start+Ar start:loc_3Br