Subversion Repositories Kolibri OS

Rev

Rev 386 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;=============================================================================
  2. ;
  3. ; MGB - Menuet Graphics Benchmark 0.3
  4. ; Compile with FASM
  5. ;
  6. ;=============================================================================
  7. ;
  8. ; Original author and copyrights holder:
  9. ;     Mikhail Lisovin a.k.a. Mihasik
  10. ;     lisovin@26.ru
  11. ;
  12. ; Disassembled with IDA 5.0.0.879:
  13. ;     http://www.datarescue.com/
  14. ; With use of 'ida.int' and 'kloader.ldw':
  15. ;     Eugene Grechnikov a.k.a. diamond
  16. ;     diamondz@land.ru
  17. ;     http://diamondz.land.ru/
  18. ;
  19. ; Modified for version 0.3:
  20. ;     Mike Semenako a.k.a mike.dld
  21. ;     mike.dld@gmail.com
  22. ;     http://www.mikedld.com/
  23. ;
  24. ;=============================================================================
  25.  
  26. org 0x0
  27. use32
  28.  
  29.   db 'MENUET01'
  30.   dd 1
  31.   dd start
  32.   dd APP_MEM_END
  33.   dd 0x200000
  34.   dd 0x07FFF0
  35.   dd 0
  36.   dd 0
  37.  
  38. include 'macros.inc'
  39. ;__CPU_type     equ     p6  ; charge it
  40.  
  41. include 'proc32.inc'
  42.  
  43. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  44.  
  45.  
  46. proc            start                   ; DATA XREF: seg000:off_Co
  47.  
  48. ; FUNCTION CHUNK AT 000000CF SIZE 00000147 BYTES
  49.  
  50.                 mov     ecx, -1
  51.                 call    subGetThreadInfo
  52.                 mov     edx, [dwMainPID]
  53.                 mov     ecx, eax
  54.  
  55. loc_36:                                 ; CODE XREF: start+20j
  56.                 call    subGetThreadInfo
  57.  
  58. loc_3B:
  59.                 cmp     edx, [dwMainPID]
  60.                 jz      loc_46
  61.                 dec     ecx
  62.                 jnz     loc_36
  63.  
  64. loc_46:                                 ; CODE XREF: start+1Dj
  65.                 mov     [dwMainWndSlot], ecx
  66.  
  67. locRedrawEvent:                         ; CODE XREF: start+3Cj
  68.                 call    subDrawMainWindow
  69.  
  70. locWaitForEvent:                        ; CODE XREF: start+6Cj start:loc_B3j ...
  71.                 mcall   23, 20          ; Kolibri - WAIT FOR EVENT WITH TIMEOUT
  72.                                         ; ebx = timeout
  73.                                         ; Return: eax = event
  74.                 cmp     eax, 1
  75.                 jz      locRedrawEvent
  76.  
  77. loc_62:
  78.                 cmp     eax, 2
  79.                 jz      locKeyEvent
  80.                 cmp     eax, 3
  81.  
  82. loc_6A:
  83.                 jz      locButtonEvent
  84.  
  85. loc_70:
  86.                 ;btr     word[wFlags], 2
  87.                 ;jnb     loc_87
  88.                 ;mov     eax, 58
  89.                 ;mov     ebx, stFileInfoBlock
  90.                 ;int     0x40             ; Kolibri - ACCESS TO FILE SYSTEM (obsolete)
  91.                                         ; ebx -> fileinfo struc
  92.  
  93. loc_87:                                 ; CODE XREF: start+55j
  94.                 btr     word[wFlags], 1
  95.                 jnb     locWaitForEvent
  96.                 call    subDelay100ms
  97.                 mcall   0x12, 3, [dwMainWndSlot]        ; Kolibri - ACTIVATE WINDOW
  98.                                         ; ecx = slot
  99.                 call    subDelay100ms
  100.  
  101. loc_AE:
  102.                 call    subDrawBars
  103.  
  104. loc_B3:
  105.                 jmp     locWaitForEvent
  106. endp
  107.  
  108.  
  109. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  110.  
  111.  
  112. proc            subGetThreadInfo        ; CODE XREF: start+5p start:loc_36p
  113.                 mcall   9, APP_MEM_END  ; Kolibri - GET THREAD INFO
  114.                                         ; ebx -> buffer, ecx = slot (-1 for self)
  115.                                         ; Return: eax = maximum slot
  116.                 retn
  117. endp
  118.  
  119.  
  120. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  121.  
  122.  
  123. proc            subDelay100ms           ; CODE XREF: start+6Ep start+85p
  124.                 mcall   5, 0x0a         ; Kolibri - DELAY
  125.                                         ; ebx = time (in 1/100th of second)
  126.                 retn
  127. endp
  128.  
  129. ; ───────────────────────────────────────────────────────────────────────────
  130. ; START OF FUNCTION CHUNK FOR start
  131.  
  132. locKeyEvent:                            ; CODE XREF: start+41j
  133.                 mcall   2               ; Kolibri - GET KEY CODE
  134.                                         ; Return: ah = keycode
  135.                 cmp     ah, 't'
  136.                 jz      locActionTest
  137.                 cmp     ah, 'c'
  138.                 jz      locActionComment
  139.                 cmp     ah, 'p'
  140.                 jz      locActionPattern
  141.                 cmp     ah, 'o'
  142.                 jz      locActionOpen
  143.                 cmp     ah, 's'
  144.                 jz      locActionSave
  145.                 jmp     locWaitForEvent
  146. ; ───────────────────────────────────────────────────────────────────────────
  147.  
  148. locButtonEvent:                         ; CODE XREF: start:loc_6Aj
  149.                 mcall   0x11            ; Kolibri - GET PRESSED BUTTON
  150.                                         ; Return: ah = button ID
  151.                 cmp     ah, 1
  152.                 jnz     locNotClose
  153.                 mcall   -1              ; Kolibri - FINISH EXECUTION
  154.  
  155. locNotClose:                            ; CODE XREF: start+E6j
  156.                 cmp     ah, 2
  157.                 jnz     locNotTest
  158.  
  159. locActionTest:                          ; CODE XREF: start+B5j
  160.                 bts     [wFlags], 0
  161.                 jb      locWaitForEvent
  162.                 mcall   5, 50           ; Kolibri - DELAY
  163.                                         ; ebx = time (in 1/100th of second)
  164.  
  165. loc_132:
  166.                 mcall   51, 1, subTestWndProc, 0x17FFF0; Kolibri - CREATE THREAD
  167.                                         ; ebx = 1 - unique subfunction
  168.                                         ; ecx = starting eip
  169.                                         ; edx = starting esp
  170.                 jmp     locWaitForEvent
  171. ; ───────────────────────────────────────────────────────────────────────────
  172.  
  173. locNotTest:                             ; CODE XREF: start+F2j
  174.                 cmp     ah, 3
  175.                 jnz     locNotComment
  176.  
  177. locActionComment:                       ; CODE XREF: start+BAj
  178.                 bts     [wFlags], 0
  179.                 jb      locWaitForEvent
  180.                 mov     [dwBufferPtr], aComment1 ; "Current                               "...
  181.                 mov     [dwEditLabel], aComment ; "Comment"
  182.                 mov     [dwEditLabelLen], 7
  183.                 call    subCreateOpenSaveDlg
  184.                 jmp     locWaitForEvent
  185. ; ───────────────────────────────────────────────────────────────────────────
  186.  
  187. locNotComment:                          ; CODE XREF: start+12Cj
  188.                 cmp     ah, 4
  189.                 jnz     locNotPattern
  190.  
  191. locActionPattern:                       ; CODE XREF: start+BFj
  192.                 call    subSavePattern
  193.                 call    subDrawBars
  194.                 jmp     locWaitForEvent
  195. ; ───────────────────────────────────────────────────────────────────────────
  196.  
  197. locNotPattern:                          ; CODE XREF: start+167j
  198.                 cmp     ah, 5
  199.                 jnz     locNotOpen
  200.  
  201. locActionOpen:                          ; CODE XREF: start+C8j
  202.                 bts     [wFlags], 0
  203.                 jb      locWaitForEvent
  204.                 mov     [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb                             "...
  205.                 mov     [dwEditLabel], aOpenFile        ; "Open file"
  206.                 mov     [dwEditLabelLen], 9
  207.                 call    subCreateOpenSaveDlg
  208.                 jmp     locWaitForEvent
  209. ; ───────────────────────────────────────────────────────────────────────────
  210.  
  211. locNotOpen:                             ; CODE XREF: start+17Bj
  212.                 cmp     ah, 6
  213.                 jnz     locWaitForEvent
  214.  
  215. locActionSave:                          ; CODE XREF: start+D1j
  216.                 bts     [wFlags], 0
  217.                 jb      locWaitForEvent
  218.                 mov     [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb                             "...
  219.                 mov     [dwEditLabel], aSaveAs ;        "Save as..."
  220.                 mov     [dwEditLabelLen], 0Ah
  221.                 call    subCreateOpenSaveDlg
  222.                 jmp     locWaitForEvent
  223. ; END OF FUNCTION CHUNK FOR start
  224.  
  225. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  226.  
  227.  
  228. proc            subCreateOpenSaveDlg      ; CODE XREF: start+15Ap start+1A9p ...
  229.                 mcall   51, 1, subOpenSaveDlgProc, 0x19FFF0; Kolibri - CREATE THREAD
  230.                                         ; ebx = 1 - unique subfunction
  231.                                         ; ecx = starting eip
  232.                                         ; edx = starting esp
  233.                 retn
  234. endp
  235.  
  236. ; ───────────────────────────────────────────────────────────────────────────
  237.  
  238. subTestWndProc:                         ; DATA XREF: start+118o
  239.  
  240.                 mov     esi,results_table+8
  241.   .next_test:   call    subInitTestTimer
  242.  
  243. align 4
  244.         @@:     push    esi
  245.                 call    dword[esi]
  246.                 pop     esi
  247.                 call    subIfTimeElapsed
  248.                 jb      @b
  249.                 mov     [esi-8],edi
  250.  
  251.                 add     esi,TEST_REC_SIZE
  252.                 cmp     dword[esi],0
  253.                 jnz     .next_test
  254. macro unused {
  255.                 call    subInitTestTimer
  256.  
  257. locDrawNextWindow:                      ; CODE XREF: seg000:00000241j
  258.                 mov     ecx, 4F0190h
  259.                 call    testDrawWindow
  260.                 call    subIfTimeElapsed
  261.                 jb      locDrawNextWindow
  262.                 mov     [results_table+TEST_REC_SIZE*0], edi
  263.                 call    subInitTestTimer
  264.  
  265. locDrawNextBar:                         ; CODE XREF: seg000:00000269j
  266.                 mcall   0x0d, 0x0A0064, 0x1E00FA, 0x6A73D0; Kolibri - DRAW RECTANGLE
  267.                                         ; ebx = [xstart]*65536+[xsize], ecx = [ystart]*65536+[ysize]
  268.                                         ; edx = 0xRRGGBB or 0x80RRGGBB for gradient
  269.                 call    subIfTimeElapsed
  270.                 jb      locDrawNextBar
  271.                 mov     [results_table+TEST_REC_SIZE*1], edi
  272.                 call    subInitTestTimer
  273.  
  274. locDrawNextLine:                        ; CODE XREF: seg000:00000291j
  275.                 ; Kolibri - DRAW LINE
  276.                 mcall   38, 0x8C008C, 0x1E017C, 0x1090207F
  277.                                         ; ebx = [xstart]*65536+[xend], ecx = [ystart]*65536+[yend]
  278.                                         ; edx = 0x00RRGGBB - color or 0x01****** - inversed line
  279.                 call    subIfTimeElapsed
  280.                 jb      locDrawNextLine
  281.                 mov     [results_table+TEST_REC_SIZE*2], edi
  282.                 call    subInitTestTimer
  283.  
  284. locDrawNextText1:                       ; CODE XREF: seg000:000002BEj
  285.                 ; Kolibri - DRAW STRING
  286.                 mcall   4, 0x0A012C, 0x0AA66, aTestText, 34
  287.                                         ; ebx = [xstart]*65536+[ystart]
  288.                                         ; ecx = 0xX0RRGGBB, edx -> string
  289.                 call    subIfTimeElapsed
  290.                 jb      locDrawNextText1
  291.                 mov     [results_table+TEST_REC_SIZE*3], edi
  292.                 call    subInitTestTimer
  293.  
  294. locDrawNextText2:                       ; CODE XREF: seg000:000002EBj
  295.                 ; Kolibri - DRAW STRING
  296.                 mcall   4, 0x0A015E, 0x10E7B850, aTestText, 34
  297.                                         ; ebx = [xstart]*65536+[ystart]
  298.                                         ; ecx = 0xX0RRGGBB, edx -> string
  299.                 call    subIfTimeElapsed
  300.                 jb      locDrawNextText2
  301.                 mov     [results_table+TEST_REC_SIZE*4], edi
  302.                 call    subInitTestTimer
  303.  
  304. locDrawNextNumber:                      ; CODE XREF: seg000:00000318j
  305.                                         ; Kolibri - DRAW NUMBER
  306.                                         ; bl = 0/1 - ecx is number/pointer
  307.                                         ; bh = 0/1/2 - dec/hex/bin
  308.                                         ; highword(ebx) = number of digits
  309.                                         ; ecx = number/pointer
  310.                                         ; edx = [x]*65536+[y]
  311.                                         ; esi = 0xX0RRGGBB
  312.                 mcall   47, 80000h, 12345678, 140172h, 0E0B27Bh
  313.  
  314.  
  315.  
  316.                 call    subIfTimeElapsed
  317.                 jb      locDrawNextNumber
  318.                 mov     [results_table+TEST_REC_SIZE*5], edi
  319.                 call    subInitTestTimer
  320.  
  321. locDrawNextPixel:                       ; CODE XREF: seg000:00000340j
  322.                                         ; Kolibri - PUT PIXEL
  323.                                         ; ebx = x, ecx = y, edx = color
  324.                 mcall   1, 100, 100, 0x0FFFFFF
  325.                 call    subIfTimeElapsed
  326.                 jb      locDrawNextPixel
  327.                 mov     [results_table+TEST_REC_SIZE*6], edi
  328. }
  329.                 bts     word[wFlags], 1
  330.                 btr     word[wFlags], 0
  331.                 ; Kolibri - FINISH EXECUTION
  332.                 mcall   -1
  333.  
  334. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  335.  
  336.  
  337. proc            subInitTestTimer        ; CODE XREF: seg000:subTestWndProcp
  338.                                         ; seg000:00000249p ...
  339.                 xor     edi, edi
  340.                 mov     eax, 26
  341.                 mov     ebx, 9
  342.                 mcall            ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER
  343.                                         ; Return: eax = time counter
  344.                 inc     eax
  345.                 mov     ecx, eax
  346.                 add     eax, 100
  347.                 mov     [dwTestEndTime], eax
  348.  
  349. locWait10ms:                            ; CODE XREF: subInitTestTimer+22j
  350.                 mov     eax, 26
  351.                 mcall            ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER
  352.                                         ; Return: eax = time counter
  353.                 cmp     eax, ecx
  354.                 jb      locWait10ms
  355.                 retn
  356. endp
  357.  
  358.  
  359. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  360.  
  361.  
  362. proc            subIfTimeElapsed        ; CODE XREF: seg000:0000023Cp
  363.                                         ; seg000:00000264p ...
  364.                 inc     edi
  365.                 mov     eax, 26
  366.                 mov     ebx, 9
  367.                 mcall            ; Kolibri - GET SYSTEM PARAMETERS - TIME COUNTER
  368.                                         ; Return: eax = time counter
  369.                 cmp     eax, [dwTestEndTime]
  370.                 retn
  371. endp
  372.  
  373.  
  374. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  375.  
  376.  
  377. proc            subSavePattern          ; CODE XREF: start:locActionPatternp
  378. ;               mov     esi, dwDrawWindowTime
  379. ;               mov     edi, dwDrawWindowTime2
  380. ;               mov     ecx, 18
  381. ;               cld
  382. ;               rep movsd
  383.                 mov     esi,results_table
  384.                 cld
  385.             @@: lodsd
  386.                 mov     [esi],eax
  387.                 add     esi,TEST_REC_SIZE-4
  388.                 cmp     dword[esi+TEST_REC_SIZE-4],0
  389.                 jne     @b
  390.                 mov     esi,aComment1
  391.                 mov     edi,aComment2
  392.                 mov     ecx,44/4
  393.                 rep     movsd
  394.                 retn
  395. endp
  396.  
  397.  
  398. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  399.  
  400.  
  401. proc            subDrawMainWindow       ; CODE XREF: start:locRedrawEventp
  402.                 mov     eax, 12
  403.                 mov     ebx, 1
  404.                 mcall            ; Kolibri - BEGIN WINDOW REDRAW
  405.                 mov     eax,48
  406.                 mov     ebx,4
  407.                 mcall
  408.                 mov     ebx, 100*65536+72*5+14;640145h
  409.                 mov     ecx, 80*65536+TESTS_NUM*LINE_HEIGHT+15+20+35
  410.                 add     cx, ax
  411.                 mov     edx, 33000000h
  412.                 mov     edi, aCaption
  413.                 xor     eax, eax
  414.                 mcall
  415.                 mov     eax, 8
  416.                 mov     ebx, 050036h+12
  417.                 mov     ecx, 5*65536+20
  418.                 mov     edx, 2
  419.                 mov     esi, 0x00007F7F;702050h
  420.  
  421. locDrawButtonsLoop:                     ; CODE XREF: subDrawMainWindow+3Bj
  422.                 mcall            ; Kolibri - DEFINE/DELETE BUTTON
  423.                                         ; ebx = [xstart]*65536+[xsize]
  424.                                         ; ecx = [ystart]*65536+[ysize]
  425.                                         ; edx = 0xXYnnnnnn, esi = color
  426.                 add     ebx, 72*65536
  427.                 inc     edx
  428.                 cmp     edx, 7
  429.                 jb      locDrawButtonsLoop
  430.  
  431.                 mov     ecx,31
  432.                 mov     edx,0x00007F7F
  433.                 mov     esi,(72*5)/2
  434.                 call    drawSeparator
  435.  
  436.                 mov     eax, 4
  437.                 mov     ebx, 27*65536+12
  438.                 mov     ecx, 0x80DDEEFF
  439.                 mov     edx, aButtonsText ; "Test    Comment+  Pattern+   Open     "...
  440.                 mcall            ; Kolibri - DRAW STRING
  441.                                         ; ebx = [xstart]*65536+[ystart]
  442.                                         ; ecx = 0xX0RRGGBB, edx -> string
  443.                 call    subDrawBars
  444.  
  445.                 mov     ecx,TESTS_NUM*LINE_HEIGHT+15+21
  446.                 mov     edx,0x00007F7F
  447.                 mov     esi,(72*5)/2
  448.                 call    drawSeparator
  449.  
  450.                 mov     eax, 12
  451.                 mov     ebx, 2
  452.                 mcall            ; Kolibri - END WINDOW REDRAW
  453.                 retn
  454. endp
  455.  
  456. proc            drawSeparator
  457.                 mov     eax,1
  458.                 mov     ebx,3
  459.             @@: mcall
  460.                 add     ebx,2
  461.                 dec     esi
  462.                 jnz     @b
  463.                 retn
  464. endp
  465.  
  466. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  467.  
  468.  
  469. proc            testDrawWindow
  470.                 xor     eax, eax
  471.                 mov     ebx, 640145h
  472.                 mov     ecx, 4F0190h
  473.                 mov     edx, 3000000h
  474.                 mcall
  475.                 retn
  476. endp
  477.  
  478. proc            testDrawBar
  479.                 mov     eax, 13
  480.                 mov     ebx, 0A0064h
  481.                 mov     ecx, 1E00FAh
  482.                 mov     edx, 6A73D0h
  483.                 mcall
  484.                 retn
  485. endp
  486.  
  487. proc            testDrawPicture
  488.                 mov     eax, 7
  489.                 mov     ebx, 0
  490.                 mov     ecx, 90*65536+123
  491.                 mov     edx, 15*65536+33
  492.                 mcall
  493.                 retn
  494. endp
  495.  
  496. proc            testDrawVertLine
  497.                 mov     eax, 38
  498.                 mov     ebx, 300*65536+300 ;8C008Ch
  499.                 mov     ecx, 30*65536+380  ;1E017Ch
  500.                 mov     edx, 1090207Fh
  501.                 mcall
  502.                 retn
  503. endp
  504.  
  505. proc            testDrawHorzLine
  506.                 mov     eax, 38
  507.                 mov     ebx, 30*65536+300  ;20008Ch
  508.                 mov     ecx, 380*65536+380 ;17C017Ch
  509.                 mov     edx, 1090207Fh
  510.                 mcall
  511.                 retn
  512. endp
  513.  
  514. proc            testDrawFreeLine
  515.                 mov     eax, 38
  516.                 mov     ebx, 30*65536+300  ;20008Ch
  517.                 mov     ecx, 380*65536+30  ;17C001Eh
  518.                 mov     edx, 1090207Fh
  519.                 mcall
  520.                 retn
  521. endp
  522.  
  523. proc            testDrawText1
  524.                 mov     eax, 4
  525.                 mov     ebx, 0C012Ch
  526.                 mov     ecx, 0AA66h
  527.                 mov     edx, aTestText
  528.                 mov     esi, 34
  529.                 mcall
  530.                 retn
  531. endp
  532.  
  533. proc            testDrawText2
  534.                 mov     eax, 4
  535.                 mov     ebx, 1B013Bh
  536.                 mov     ecx, 10E7B850h
  537.                 mov     edx, aTestText
  538.                 mov     esi, 34
  539.                 mcall
  540.                 retn
  541. endp
  542.  
  543. proc            testDrawNumber
  544.                 mov     eax, 47
  545.                 mov     ebx, 80000h
  546.                 mov     ecx, 12345678
  547.                 mov     edx, 2A014Ah
  548.                 mov     esi, 0E0B27Bh
  549.                 mcall
  550.                 retn
  551. endp
  552.  
  553. proc            testDrawPixel
  554.                 mov     eax, 1
  555.                 mov     ebx, 100
  556.                 mov     ecx, 100
  557.                 mov     edx, 0FFFFFFh
  558.                 mcall
  559.                 retn
  560. endp
  561.  
  562.  
  563. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  564.  
  565.  
  566. proc            subDrawBars             ; CODE XREF: start:loc_AEp start+16Ep ...
  567.                 mov     edi,results_table
  568.                 mov     ebx,30+7
  569.   .next_result: cmp     dword[edi+TEST_REC_SIZE-4],0
  570.                 je      .exit
  571.  
  572.                 push    ebx
  573.                 mov     eax,13
  574.                 movzx   ecx,bx
  575.                 add     ecx,-2
  576.                 shl     ecx,16
  577.                 mov     cx,LINE_HEIGHT
  578.                 mov     ebx,0*65536+72*5+5
  579.                 xor     edx,edx
  580.                 mcall
  581.                 pop     ebx
  582.  
  583.                 and     ebx,0x0000FFFF
  584.                 or      ebx,5*65536
  585.                 mov     edx,[edi+TEST_REC_SIZE-4]
  586.                 mov     ecx,0x8000CCCC ; 0x00E7E05A
  587.                 mov     eax,4
  588.                 mcall
  589.  
  590.                 push    '=' 0x00FFFF00 0x00FFFF7F 0x00FFFF7F
  591.                 mov     eax,[edi+0]
  592.                 cmp     eax,[edi+4]
  593.                 je      @f
  594.                 jb      .lp1
  595.                 mov     dword[esp+0],0x007FFF7F
  596.                 mov     dword[esp+4],0x00FF7F7F
  597.                 mov     dword[esp+8],0x0000FF00
  598.                 mov     byte[esp+12],'>'
  599.           .lp1: ja      @f
  600.                 mov     dword[esp+0],0x00FF7F7F
  601.                 mov     dword[esp+4],0x007FFF7F
  602.                 mov     dword[esp+8],0x00FF0000
  603.                 mov     byte[esp+12],'<'
  604.             @@:
  605.                 pop     ecx
  606.                 call    int2str
  607.                 add     ebx,(72*5-6*8*2-6-10-5)*65536 ; 196
  608.                 mov     edx,APP_MEM_END
  609.                 mov     esi,8
  610.                 mov     eax,4
  611.                 mcall
  612.  
  613.                 pop     ecx
  614.                 mov     eax,[edi+4]
  615.                 call    int2str
  616.                 add     ebx,(6*8+6+10)*65536
  617.                 mov     eax,4
  618.                 mcall
  619.  
  620.                 pop     ecx
  621.                 add     ebx,(-6-5)*65536
  622.                 mov     edx,esp
  623.                 mov     esi,1
  624.                 mcall
  625.                 add     esp,4
  626.  
  627.                 add     edi,TEST_REC_SIZE
  628.                 add     bx,LINE_HEIGHT
  629.                 jmp     .next_result
  630.   .exit:
  631.  
  632.                 mov     eax, 13
  633.                 mov     ebx, 0*65536+72*5+5
  634.                 mov     ecx, (TESTS_NUM*LINE_HEIGHT+15+25)*65536+26
  635.                 xor     edx, edx
  636.                 mcall
  637.  
  638.                 mov     eax, 4
  639.                 mov     ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27)
  640.                 mov     ecx, 0x8000CCCC
  641.                 mov     edx, aLeft
  642.                 mcall            ; Kolibri - DRAW STRING
  643.  
  644.                 add     ebx, (6*10)*65536
  645.                 mov     ecx, 0x00FFFF00
  646.                 mov     edx, aComment1
  647.                 mov     esi, 42
  648.                 mcall            ; Kolibri - DRAW STRING
  649.  
  650.                 mov     eax, 4
  651.                 mov     ebx, 5*65536+(TESTS_NUM*LINE_HEIGHT+15+27+12)
  652.                 mov     ecx, 0x8000CCCC
  653.                 mov     edx, aRight
  654.                 mcall            ; Kolibri - DRAW STRING
  655.  
  656.                 add     ebx, (6*10)*65536
  657.                 mov     ecx, 0x00FFFF00
  658.                 mov     edx, aComment2
  659.                 mov     esi, 42
  660.                 mcall            ; Kolibri - DRAW STRING
  661.  
  662.                 retn
  663. endp
  664.  
  665. proc            int2str
  666.                 push    eax ecx edx edi
  667.                 mov     edi,APP_MEM_END+7
  668.                 mov     dword[APP_MEM_END+0],'    '
  669.                 mov     dword[APP_MEM_END+4],'    '
  670.                 mov     ecx,10
  671.             @@: xor     edx,edx
  672.                 div     ecx
  673.                 add     dl,'0'
  674.                 mov     [edi],dl
  675.                 dec     edi
  676.                 or      eax,eax
  677.                 jnz     @b
  678.                 pop     edi edx ecx eax
  679.                 retn
  680. endp
  681.  
  682. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  683.  
  684.  
  685. proc            subDrawResultComments      ; CODE XREF: subDrawBars+92p
  686.                                         ; subDrawBars+AFp ...
  687.                 xor     di, di
  688.                 mov     eax, 4
  689.  
  690. locDrawCommentsLoop:                    ; CODE XREF: subDrawResultComments+1Cj
  691.                 mcall            ; Kolibri - DRAW STRING
  692.                                         ; ebx = [xstart]*65536+[ystart]
  693.                                         ; ecx = 0xX0RRGGBB, edx -> string
  694.                 add     bx, 13;55
  695.                 bt      edi, 31
  696.                 jnb     loc_52F
  697.                 add     edx, esi
  698.  
  699. loc_52F:                                ; CODE XREF: subDrawResultComments+12j
  700.                 inc     di
  701.                 cmp     di, 7
  702.                 jb      locDrawCommentsLoop
  703.                 retn
  704. endp
  705.  
  706.  
  707. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  708.  
  709.  
  710. proc            subDrawResultNumbers      ; CODE XREF: subDrawBars+CDp
  711.                                         ; subDrawBars+DCp
  712.                 xor     edi, edi
  713.                 mov     eax, 47
  714.                 mov     esi, 0DDEEFFh
  715.  
  716. locDrawNumbersLoop:                     ; CODE XREF: subDrawResultNumbers+1Ej
  717.                 call    subGetDigitsCount
  718.                 mcall            ; Kolibri -
  719.                 add     dx, 13;55
  720.                 add     ecx, 4
  721.                 inc     edi
  722.                 cmp     edi, 7
  723.                 jb      locDrawNumbersLoop
  724.                 retn
  725. endp
  726.  
  727.  
  728. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  729.  
  730.  
  731. proc            subGetDigitsCount       ; CODE XREF: subDrawResultNumbers:locDrawNumbersLoopp
  732.                 xor     ebx, ebx
  733.                 mov     bh, 6
  734.                 cmp     dword[ecx], 99999
  735.                 ja      loc_589
  736.                 dec     bh
  737.                 cmp     dword[ecx], 9999
  738.                 ja      loc_589
  739.                 dec     bh
  740.                 cmp     dword[ecx], 999
  741.                 ja      loc_589
  742.                 dec     bh
  743.                 cmp     dword[ecx], 99
  744.                 ja      loc_589
  745.                 dec     bh
  746.                 cmp     dword[ecx], 9
  747.                 ja      loc_589
  748.                 dec     bh
  749.  
  750. loc_589:                                ; CODE XREF: subGetDigitsCount+Aj
  751.                                         ; subGetDigitsCount+14j ...
  752.                 bswap   ebx
  753.                 inc     bl
  754.                 retn
  755. endp
  756.  
  757. ; ───────────────────────────────────────────────────────────────────────────
  758.  
  759. subOpenSaveDlgProc:                     ; CODE XREF: seg000:0000059Dj
  760.                                         ; DATA XREF: subCreateOpenSaveDlg+Ao
  761.                 call    subDrawOpenSaveDlg
  762.  
  763. locOSDWaitForEvent:                     ; CODE XREF: seg000:000005ADj
  764.                                         ; seg000:000005C3j ...
  765.                 mov     eax, 10
  766.                 mcall            ; Kolibri -
  767.                 cmp     eax, 1
  768.                 jz      subOpenSaveDlgProc
  769.                 cmp     eax, 2
  770.                 jz      locOSDKeyEvent
  771.                 cmp     eax, 3
  772.                 jz      locOSDButtonEvent
  773.                 jmp     locOSDWaitForEvent
  774. ; ───────────────────────────────────────────────────────────────────────────
  775.  
  776. locOSDKeyEvent:                         ; CODE XREF: seg000:000005A2j
  777.                 mov     eax, 2
  778.                 mcall            ; Kolibri - GET KEY CODE
  779.                                         ; Return: ah = keycode
  780.                 cmp     ah, 0B3h
  781.                 jnz     locOSDNotRightKey
  782.                 mov     eax, [dwOSDCaretPos]
  783.                 cmp     eax, 41
  784.                 ja      locOSDWaitForEvent
  785.                 inc     eax
  786.                 mov     [dwOSDCaretPos], eax
  787.                 call    subDrawOpenSaveDlgControls
  788.                 jmp     locOSDWaitForEvent
  789. ; ───────────────────────────────────────────────────────────────────────────
  790.  
  791. locOSDNotRightKey:                      ; CODE XREF: seg000:000005B9j
  792.                 cmp     ah, 0B0h
  793.                 jnz     locOSDNotLeftKey
  794.                 mov     eax, [dwOSDCaretPos]
  795.                 test    eax, eax
  796.                 jz      locOSDWaitForEvent
  797.                 dec     eax
  798.                 mov     [dwOSDCaretPos], eax
  799.                 call    subDrawOpenSaveDlgControls
  800.                 jmp     locOSDWaitForEvent
  801. ; ───────────────────────────────────────────────────────────────────────────
  802.  
  803. locOSDNotLeftKey:                       ; CODE XREF: seg000:000005D5j
  804.                 cmp     ah, 0B6h
  805.                 jnz     locOSDNotDeleteKey
  806.                 call    subOSDDeleteChar
  807.                 call    subDrawOpenSaveDlgControls
  808.                 jmp     locOSDWaitForEvent
  809. ; ───────────────────────────────────────────────────────────────────────────
  810.  
  811. locOSDNotDeleteKey:                     ; CODE XREF: seg000:000005F0j
  812.                 cmp     ah, 8
  813.                 jnz     locOSDNotBackspaceKey
  814.                 mov     eax, [dwOSDCaretPos]
  815.                 test    eax, eax
  816.                 jz      locOSDWaitForEvent
  817.                 dec     eax
  818.                 mov     [dwOSDCaretPos], eax
  819.                 call    subOSDDeleteChar
  820.                 call    subDrawOpenSaveDlgControls
  821.                 jmp     locOSDWaitForEvent
  822. ; ───────────────────────────────────────────────────────────────────────────
  823.  
  824. locOSDNotBackspaceKey:                  ; CODE XREF: seg000:00000601j
  825.                 cmp     ah, 0Dh
  826.                 jnz     locOSDNotReturnKey
  827.  
  828. locOSDReturnKey:                        ; CODE XREF: seg000:000006E1j
  829.                 mov     al, ' '
  830.                 mov     edi, [dwBufferPtr]
  831.                 add     edi,43
  832.                 mov     ecx,43
  833.                 std
  834.                 repe scasb
  835.                 cld
  836.                 inc     edi
  837.                 mov     byte[edi+1], 0
  838.                 cmp     [dwBufferPtr], aPatternPath ; "/rd/1/pattern.mgb                             "...
  839.                 jnz     locCloseOSD
  840.                 cmp     [dwEditLabel], aOpenFile        ; "Open file"
  841.                 jnz     locSaveFile
  842.                 mov     [stFileInfoBlock], 0
  843.                 mov     [dwDataSize], TESTS_NUM*4+44
  844.                 bts     word[wFlags], 2
  845.                 mov     eax,70 ; 58
  846.                 mov     ebx,stFileInfoBlock
  847.                 mcall
  848.                 mov     esi,APP_MEM_END+100
  849.                 mov     edi,results_table+4
  850.                 cld
  851.             @@: cmp     dword[edi+TEST_REC_SIZE-8],0
  852.                 je      @f
  853.                 movsd
  854.                 add     edi,TEST_REC_SIZE-4
  855.                 jmp     @b
  856.             @@:
  857.                 mov     edi,aComment2
  858.                 mov     ecx,44
  859.                 rep     movsb
  860.                 jmp     locCloseOSD
  861. ; ───────────────────────────────────────────────────────────────────────────
  862.  
  863. locSaveFile:                            ; CODE XREF: seg000:00000654j
  864.                 mov     [stFileInfoBlock], 2 ; 1
  865.                 mov     [dwDataSize], TESTS_NUM*4+44
  866.                 bts     word[wFlags], 2
  867.                 mov     esi,results_table+4
  868.                 mov     edi,APP_MEM_END+100
  869.                 cld
  870.             @@: cmp     dword[esi+TEST_REC_SIZE-8],0
  871.                 je      @f
  872.                 movsd
  873.                 add     esi,TEST_REC_SIZE-4
  874.                 jmp     @b
  875.             @@: mov     esi,aComment2
  876.                 mov     ecx,44
  877.                 rep     movsb
  878.                 mov     eax,70 ; 58
  879.                 mov     ebx,stFileInfoBlock
  880.                 mcall
  881.                 jmp     locCloseOSD
  882. ; ───────────────────────────────────────────────────────────────────────────
  883.  
  884. locOSDNotReturnKey:                     ; CODE XREF: seg000:00000624j
  885.                 cmp     [dwOSDCaretPos], 42
  886.                 jnb     locOSDWaitForEvent
  887.                 mov     edi, [dwBufferPtr]
  888.                 add     edi, 42
  889.                 mov     esi, edi
  890.                 dec     esi
  891.                 mov     ecx, 42
  892.                 sub     ecx, [dwOSDCaretPos]
  893.                 std
  894.                 rep movsb
  895.                 shr     eax, 8
  896.                 mov     esi, [dwBufferPtr]
  897.                 add     esi, [dwOSDCaretPos]
  898.                 mov     [esi], al
  899.                 inc     [dwOSDCaretPos]
  900.                 call    subDrawOpenSaveDlgControls
  901.                 jmp     locOSDWaitForEvent
  902. ; ───────────────────────────────────────────────────────────────────────────
  903.  
  904. locOSDButtonEvent:                      ; CODE XREF: seg000:000005A7j
  905.                 mov     eax, 17
  906.                 mcall            ; Kolibri - GET PRESSED BUTTON
  907.                                         ; Return: ah = button ID
  908.                 cmp     ah, 1
  909.                 jnz     locNotCloseOSD
  910.                 jmp     locOSDReturnKey
  911. ; ───────────────────────────────────────────────────────────────────────────
  912.  
  913. locCloseOSD:                            ; CODE XREF: seg000:00000644j
  914.                                         ; seg000:0000066Cj ...
  915.                 bts     [wFlags], 1
  916.                 btr     [wFlags], 0
  917.                 mov     eax, -1
  918.                 mcall            ; Kolibri - FINISH EXECUTION
  919.  
  920. locNotCloseOSD:                         ; CODE XREF: seg000:000006DFj
  921.                 cmp     ah, 2
  922.                 jnz     locNotSetCaretOSD
  923.                 mov     eax, 37
  924.                 mov     ebx, 1
  925.                 mcall            ; Kolibri - GET MOUSE COORDINATES, WINDOW-RELATIVE
  926.                                         ; Return: eax = [x]*65536 + [y]
  927.                 shr     eax, 16
  928.                 sub     eax, 21
  929.                 xor     edx, edx
  930.                 mov     ebx, 6
  931.                 div     ebx
  932.                 mov     [dwOSDCaretPos], eax
  933.                 call    subDrawOpenSaveDlgControls
  934.                 jmp     locOSDWaitForEvent
  935. ; ───────────────────────────────────────────────────────────────────────────
  936.  
  937. locNotSetCaretOSD:                      ; CODE XREF: seg000:00000700j
  938.                 jmp     locOSDWaitForEvent
  939.  
  940. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  941.  
  942.  
  943. proc            subOSDDeleteChar        ; CODE XREF: seg000:000005F2p
  944.                                         ; seg000:00000612p
  945.                 mov     edi, [dwBufferPtr]
  946.                 add     edi, [dwOSDCaretPos]
  947.                 mov     esi, edi
  948.                 inc     esi
  949.                 mov     ecx, 43
  950.                 sub     ecx, [dwOSDCaretPos]
  951.                 cld
  952.                 rep movsb
  953.                 retn
  954. endp
  955.  
  956.  
  957. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  958.  
  959.  
  960. proc            subDrawOpenSaveDlg      ; CODE XREF: seg000:subOpenSaveDlgProcp
  961.                 mov     eax, 12
  962.                 mov     ebx, 1
  963.                 mcall            ; Kolibri - BEGIN WINDOW REDRAW
  964.                 xor     eax, eax
  965.                 mov     ebx, 64012Ch
  966.                 mov     ecx, 640050h
  967.                 mov     edx, 3780078h
  968.                 mcall            ; Kolibri - DEFINE/DRAW WINDOW
  969.                                         ; ebx = [xstart]*65536+[xsize]
  970.                                         ; ecx = [ystart]*65536+[ysize]
  971.                 mov     eax, 4
  972.                 mov     ebx, 80008h
  973.                 mov     ecx, 10DDEEFFh
  974.                 mov     edx, [dwEditLabel]
  975.                 mov     esi, [dwEditLabelLen]
  976.                 mcall            ; Kolibri - DRAW STRING
  977.                                         ; ebx = [xstart]*65536+[ystart]
  978.                                         ; ecx = 0xX0RRGGBB, edx -> string
  979.                 call    subDrawOpenSaveDlgControls
  980.                 mov     eax, 12
  981.                 mov     ebx, 2
  982.                 mcall            ; Kolibri - END WINDOW REDRAW
  983.                 retn
  984. endp
  985.  
  986.  
  987. ; ███████████████ S U B R O U T I N E ███████████████████████████████████████
  988.  
  989.  
  990. proc            subDrawOpenSaveDlgControls      ; CODE XREF: seg000:000005CBp
  991.                                         ; seg000:000005E6p ...
  992.                 pusha
  993.                 mov     eax, 8
  994.                 mov     ebx, 150102h
  995.                 mov     ecx, 28000Fh
  996.                 mov     edx, 40000002h
  997.                 mcall            ; Kolibri - DEFINE/DELETE BUTTON
  998.                                         ; ebx = [xstart]*65536+[xsize]
  999.                                         ; ecx = [ystart]*65536+[ysize]
  1000.                                         ; edx = 0xXYnnnnnn, esi = color
  1001.                 mov     eax, 13
  1002.                 mov     edx, 0E0E0E0h
  1003.                 mcall            ; Kolibri - DRAW RECTANGLE
  1004.                                         ; ebx = [xstart]*65536+[xsize], ecx = [ystart]*65536+[ysize]
  1005.                                         ; edx = 0xRRGGBB or 0x80RRGGBB for gradient
  1006.                 push    eax
  1007.                 mov     eax, 60000h
  1008.                 mul     [dwOSDCaretPos]
  1009.                 add     eax, 150006h
  1010.                 mov     ebx, eax
  1011.                 pop     eax
  1012.                 mov     edx, 6A73D0h
  1013.                 mcall            ; Kolibri -
  1014.                 mov     eax, 4
  1015.                 mov     ebx, 15002Ch
  1016.                 xor     ecx, ecx
  1017.                 mov     edx, [dwBufferPtr]
  1018.                 mov     esi, 43
  1019.                 mcall            ; Kolibri - DRAW STRING
  1020.                                         ; ebx = [xstart]*65536+[ystart]
  1021.                                         ; ecx = 0xX0RRGGBB, edx -> string
  1022.                 popa
  1023.                 retn
  1024. endp
  1025.  
  1026. ; ───────────────────────────────────────────────────────────────────────────
  1027.  
  1028. dwMainWndSlot   dd 0                    ; DATA XREF: start:loc_46w start+7Dr
  1029. dwBufferPtr     dd 0                    ; DATA XREF: start+13Cw start+18Bw ...
  1030. dwEditLabel     dd 0                    ; DATA XREF: start+146w start+195w ...
  1031. dwEditLabelLen  dd 0                    ; DATA XREF: start+150w start+19Fw ...
  1032. aComment        db 'Comment'            ; DATA XREF: start+146o
  1033. aOpenFile       db 'Open file'          ; DATA XREF: start+195o
  1034.                                         ; seg000:0000064Ao
  1035. aSaveAs         db 'Save as...'         ; DATA XREF: start+1D4o
  1036. dwOSDCaretPos   dd 0                    ; DATA XREF: seg000:000005BBr
  1037.                                         ; seg000:000005C6w ...
  1038. macro unused {
  1039. stFileInfoBlock dd 0                    ; DATA XREF: start+5Co
  1040.                                         ; seg000:00000658w ...
  1041.                 dd 0
  1042. dwDataSize      dd 1                    ; DATA XREF: seg000:0000065Ew
  1043.                                         ; seg000:00000678w
  1044.                 dd APP_MEM_END+100
  1045.                 dd APP_MEM_END
  1046. aPatternPath    db '/hd0/1/pattern.mgb                           ' ; DATA XREF: start+18Bo
  1047. }
  1048. align 4
  1049. stFileInfoBlock dd 0,0,0
  1050. dwDataSize      dd 1
  1051.                 dd APP_MEM_END+100
  1052. aPatternPath    db '/hd0/1/pattern.mgb                           ' ; DATA XREF: start+18Bo
  1053.  
  1054.                                         ; start+1CAo ...
  1055. wFlags          dd 0                    ; DATA XREF: start:loc_70w
  1056.                                         ; start:loc_87w ...
  1057. dwTestEndTime   dd 0                    ; DATA XREF: subInitTestTimer+14w
  1058.                                         ; subIfTimeElapsed+Dr
  1059. results_table dd \
  1060.   ?,?,testDrawWindow,aDrawingWindow,\
  1061.   ?,?,testDrawBar,aDrawingBar,\
  1062.   ?,?,testDrawPicture,aDrawingPicture,\
  1063.   ?,?,testDrawVertLine,aDrawingVLine,\
  1064.   ?,?,testDrawHorzLine,aDrawingHLine,\
  1065.   ?,?,testDrawFreeLine,aDrawingFLine,\
  1066.   ?,?,testDrawText1,aDrawingText1,\
  1067.   ?,?,testDrawText2,aDrawingText2,\
  1068.   ?,?,testDrawNumber,aDrawingNumber,\
  1069.   ?,?,testDrawPixel,aDrawingPixel,\
  1070.   0,0,0,0
  1071.  
  1072. LINE_HEIGHT   = 13
  1073. TEST_REC_SIZE = 16
  1074. TESTS_NUM     = ($ - results_table) / TEST_REC_SIZE - 1
  1075.  
  1076. macro cstr name,str {
  1077.   local ..end
  1078.   name db ..end-name-1,str
  1079.   ..end:
  1080. }
  1081.  
  1082. aDrawingWindow  db 'Window Of Type #3, 325x400 px',0
  1083. aDrawingBar     db 'Filled Rectangle, 100x250 px',0
  1084. aDrawingPicture db 'Picture, 55x123, px',0
  1085. aDrawingVLine   db 'Vertical Line, 350 px',0
  1086. aDrawingHLine   db 'Horizontal Line, 270 px',0
  1087. aDrawingFLine   db 'Free-angled Line, 350 px',0
  1088. aDrawingText1   db 'Fixed-width Text, 34 chars',0
  1089. aDrawingText2   db 'Proportional Text, 34 chars',0
  1090. aDrawingNumber  db 'Decimal Number, 8 digits',0
  1091. aDrawingPixel   db 'Single Pixel',0
  1092.  
  1093. aTestText       db 'This is a 34-charachters test text' ; DATA XREF: seg000:000002ADo
  1094.                                         ; seg000:000002DAo
  1095. aButtonsText    db 'Test      Comment+    Pattern+      Open        Save',0
  1096.                                         ; DATA XREF: subDrawMainWindow+5Do
  1097. aCaption        db 'Menuet Graphical Benchmark 0.3',0 ; DATA XREF: subDrawMainWindow+4Co
  1098.  
  1099. aLeft           db 'Left    :',0
  1100. aRight          db 'Right   :',0
  1101.  
  1102. aComment1       db 'current                                     ' ; DATA XREF: start+13Co
  1103.                                         ; subDrawBars+9Co
  1104. ;dwDrawWindowTime2 dd 0                  ; DATA XREF: subSubSavePattern+5o
  1105. ;                                        ; subDrawBars+18o ...
  1106. ;                dd 0
  1107. ;                dd 0
  1108. ;                dd 0
  1109. ;                dd 0
  1110. ;                dd 0
  1111. ;                dd 0
  1112. aComment2       db 'no pattern                                  '
  1113.                                         ; DATA XREF: subDrawBars+72o
  1114.                                         ; subDrawBars+B9o
  1115. APP_MEM_END:    rb   30 ;               ; DATA XREF: seg000:off_10o
  1116.                                         ; subGetThreadInfo+5o ...
  1117. dwMainPID       dd ?                    ; DATA XREF: start+Ar start:loc_3Br
  1118.