kolibrios/programs/media/palitra/trunk/palitra.asm
Kirill Lipatov (Leency) d3061ed9bc palitra 0.5 from Akylist
git-svn-id: svn://kolibrios.org@3091 a494cfbc-eb01-0410-851d-a64ba20cac60
2012-12-08 12:51:24 +00:00

974 lines
52 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;#___________________________________________________________________________________________________
;****************************************************************************************************|
; Program Palitra (c) Sergei Steshin (Akyltist) |
;----------------------------------------------------------------------------------------------------|
;; Charset:DOS-866 Font:Courier New Size:9pt |
;.....................................................................................................
;; compiler: FASM 1.69.31 |
;; version: 0.3.0 |
;; last update: 08/11/2012 |
;; e-mail: dr.steshin@gmail.com |
;.....................................................................................................
;; History: |
;; 0.1.0 - <20>¥à¢ ï ¢¥àá¨ï ¯à®£à ¬¬ë. |
;; 0.2.0 - ˆá¯à ¢«¥­® ¯®¯ ¤ ­¨¥ ¢ á¥âªã, ¡¥à¥âáï ¡«¨¦ ©è¨© ¯® ¤¨ £®­ «¨ ¯¨ªá¥«ì. |
;; - „®¡ ¢«¥­ë ¯®«§ã­ª¨, ¤«ï ॣ㫨஢ ­¨ï rgb á®áâ ¢«ïîé¨å æ¢¥â  ¨ ¢ë¢®¤ íâ¨å á®áâ ¢«ïîé¨å. |
;; - “¡à ­ ¢ë¢®¤ æ¢¥â  ¢ ¡¨­ à­®¬ ¢¨¤¥ (¯®ª  §  ­¥ ­ ¤®¡­®áâìî ¨ ­¥  ªâã «ì­®áâìî). |
;; - Œ¥«ª ï ª®á¬¥â¨ª . |
;; 0.3.0 - „®¡ ¢«¥­® ¯¥à¥ª«î祭¨¥ ¢¨¤®¢ 梥⮢ëå á奬 (ª­®¯ª  NEXT) |
;; - “«ãçè¥­ë ¯®«§ã­ª¨, ¯à®¨§¢®¤¨âáï ®¡à ¡®âª  ­ ¦ â¨ï à冷¬ á ¯®«§ã­ª®¬. |
;; - —¨á«® á¥â®ª ¢ 梥⮢®© á奬¥ 㬥­ì襭® á 6 ¤® 4 (ªà â­®áâì 256, ¨­ ç¥ ¤ã¡«¨à®¢ ­¨¥ 梥â ).|
;; - Œ¥«ª ï ª®á¬¥â¨ª . |
;; 0.4.0 - „®¡ ¢«¥­® ¯¥à¥ª«î祭¨¥ ¬¥¦¤ã ¤¢ã¬ï 梥⠬¨ |
;; - „®¡ ¢«¥­ ¯®«§ã­®ª ॣ㫨஢ ­¨ï ¯à®§à ç­®á⨠(¡¥§ ¢¨§ã «¨§ æ¨¨). |
;; - „®¡ ¢«¥­® ¢ëà ¢­¨¢ ­¨¥ §­ ç¥­¨© rgba ¯® 業âàã, ¢ § ¢¨á¨¬®á⨠®â ¤«¨­­ë. |
;; - Š®á¬¥â¨ç¥áª¨¥ ¯à ¢ª¨. |
;; - <20>¥¡®«ìè ï ®¯â¨¬¨§ æ¨ï. |
;; 0.5.0 - „®¡ ¢«¥­  ª­®¯ª  ᬥ­ë ä®­  à ¡®ç¥£® á⮫  (®â Leency). |
;; - „®¡ ¢«¥­® ¨§¬¥­¥­¨¥ ä®­  à ¡®ç¥£® á⮫  £à ¤¨¥­â­®© § «¨¢ª®©. |
;; - Š®á¬¥â¨ç¥áª¨¥ ¯à ¢ª¨. |
;; - <20>¥¡®«ìè ï ¤¥®¯â¨¬¨§ æ¨ï. |
;.....................................................................................................
;; All rights reserved. |
;; |
;; Redistribution and use in source and binary forms, with or without modification, are permitted |
;; provided that the following conditions are met: |
;; * Redistributions of source code must retain the above copyright notice, this list of |
;; conditions and the following disclaimer. |
;; * Redistributions in binary form must reproduce the above copyright notice, this list of |
;; conditions and the following disclaimer in the documentation and/or other materials |
;; provided with the distribution. |
;; * Neither the name of the <organization> nor the names of its contributors may be used to |
;; endorse or promote products derived from this software without specific prior written |
;; permission. |
;; |
;; THIS SOFTWARE IS PROVIDED BY Sergei Steshin ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, |
;; INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
;; PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY DIRECT, |
;; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
;....................................................................................................|
;#___________________________________________________________________________________________________
;****************************************************************************************************|
; ‡€ƒŽ‹Ž‚ŽŠ ˆ<CB86>Ž<C5BD>Ÿ…ŒŽƒŽ ”€‰‹€ <20><>ˆŽ†…<E280A0>ˆŸ „‹Ÿ ŠŽˆ<E280B9><CB86>ˆ Ž‘ |
;----------------------------------------------------------------------------------------------------/
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x100000
dd 0x1000
dd 0x0
dd 0x0
include '..\..\..\macros.inc'
WIN_W equ 295 ; è¨à¨­  ®ª­ 
WIN_H equ 195 ; ¢ëá®â  ®ª­ 
WIN_X equ 250 ; ª®®à¤¨­ â  å ®ª­ 
WIN_Y equ 190 ; ª®®à¤¨­ â  ã ®ª­ 
START:
;#___________________________________________________________________________________________________
;****************************************************************************************************|
; Ž<C5BD>Ž<C5BD>Ž‰ –ˆŠ‹ <20><>Žƒ<C5BD>€ŒŒ - Ž<><C5BD><EFBFBD>ŽŠ€ Ž<E28098>ˆ‰ |
;----------------------------------------------------------------------------------------------------/
red:
call draw_main ; ¢ë§ë¢ ¥¬ ¯¥à¥à¨á®¢ªã ®ª­  ¯à¨«®¦¥­¨ï
still:
mcall 10 ; äã­ªæ¨ï 10 - ¦¤ âì ᮡëâ¨ï
cmp eax,1 ; ¯¥à¥à¨á®¢ âì ®ª­® ?
je red ; ¥á«¨ ¤  - ­  ¬¥âªã red
cmp eax,2 ; ­ ¦ â  ª« ¢¨è  ?
je key ; ¥á«¨ ¤  - ­  key
cmp eax,3 ; ­ ¦ â  ª­®¯ª  ?
je button ; ¥á«¨ ¤  - ­  button
jmp still ; ¥á«¨ ¤à㣮¥ ᮡë⨥ - ¢ ­ ç «® 横« 
;end_still
key: ; ­ ¦ â  ª« ¢¨è  ­  ª« ¢¨ âãà¥
mcall 2 ; äã­ªæ¨ï 2 - áç¨â âì ª®¤ ᨬ¢®«  (¢ ah) (âãâ ¢ ¯à¨­æ¨¯¥ ­¥ ­ã¦­ )
jmp still ; ¢¥à­ãâìáï ª ­ ç «ã 横« 
;end_key
button:
mcall 17 ; 17 - ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
cmp ah, 1 ; ¥á«¨ ­ ¦ â  ª­®¯ª  á ­®¬¥à®¬ 1,
jz bexit ; ¢ë室¨¬
;®¡à ¡®âª  ª­®¯ª¨ Next
cmp ah, 12 ; ¥á«¨ ­ ¦ â  ª­®¯ª  NEXT
jne next_bg ; ¢ë室¨¬
inc [pnext] ; 㢥«¨ç¨¢ ¥¬ ¯à¨ ­ ¦ â¨¨ ­®¬¥à ¯ «¨âàë
mov [renmode],0 ; ¢ª«îç ¥¬ æ¢¥â®¢ë¥ á奬ë
mov eax,[pnext] ; § ­®á¨¬ §­ ç¥­¨¥ ¢ ¥ å
cmp al,6 ; áà ¢­¨¢ ¥¬ á § ï¢«¥­­ë¬ ª®«¨ç¥á⢮¬ ¯ «¨âà
jne next_redraw ; ¥á«¨ ­¥ ¡®«ìè¥ ¬ ªá¨¬ã¬  â® ­  ¢ë§®¢ ®âà¨á®¢ª¨
xor eax,eax ; ¨­ ç¥ § ­ã«ï¥¬ ¯ «¨âàã ­  default
mov [pnext],eax ; ¨ § ¯®¬¨­ ¥¬ çâ® á¡à®á¨«¨ ¯ «¨âàã ­  default
next_redraw:
call draw_palitra ; <20>ˆ“…Œ <20>ˆ<CB86>
jmp still ; “室¨¬ ­  ®¦¨¤ ­¨¥ ¤à㣮£® ᮡëâ¨ï
next_bg:
cmp ah, 14 ; Š­®¯ª  BACKGROUND
jne circle_bg ; ¥á«¨ ­¥ ­ ¦ â  â® ¢ë室¨¬
call set_background ; ¨­ ç¥ ãáâ ­ ¢«¨¢ ¥¬ ä®­
jmp still ; ¨ ­  ®¦¨¤ ­¨¥ ᮡëâ¨ï
circle_bg:
cmp ah, 15 ; Š­®¯ª  Šà㣮¢ ï ¯ «¨âà 
jne next_end ; ¥á«¨ ­¥ ­ ¦ â  â® ¢ë室¨¬
;mov [renmode],2 ; ¢ª«îç ¥¬ ®âà¨á®¢ªã ªà㣮¢®© ¯ «¨âàë
call draw_palitra ; <20>ˆ“…Œ <20>ˆ<CB86>
jmp still ; ¨ ­  ®¦¨¤ ­¨¥ ᮡëâ¨ï
next_end:
cmp ah,13 ; COLOR SWAP
jne color_swap_end
push [color2]
push [color]
pop [color2]
pop [color]
call draw_result
jmp still ; ˆ ã室¨¬ ­  ®¦¨¤ ­¨¥ ¤à㣮£® ᮡëâ¨ï
color_swap_end:
cmp ah, 7 ; <20>஢¥à塞 ­ ¦ â  ª­®¯ª  á ID=7
jne color_button ; …᫨ ­¥ ­ ¦ â , â® ¨¤ñ¬ ¤ «ìè¥
call mouse_get ; ˆ­ ç¥ ¢ª«îç ¥¬ ®¡à ¡®â稪 ¬ëè¨, ç⮡ë áç¨â âì §­ ç¥­¨¥ æ¢¥â  á ¯ «¨âàë
jmp still ; ˆ ã室¨¬ ­  ®¦¨¤ ­¨¥ ¤à㣮£® ᮡëâ¨ï
color_button: ; <20>—𠪮®à¤¨­ â ¤«ï ¯®«§ã­ª®¢ RGBA
push eax ; § ¯®¬¨­ ¥¬ ¥ å
call mouse_local ; ¯®«ãç ¥¬ «®ª «ì­ë¥ ª®®à¤¨­ âë
mov ebx,137 ; ­¨¦­ïï £à ­¨æ  ¯®«§ã­ª  ¯® “
mov ecx,[mouse_y] ; § ­¨á¨¬ ¢ ¥áå §­ ç¥­¨¥ ªãàá®à  ¯® “
sub ebx,ecx ; ­ å®¤¨¬ à §­®áâì (â.¥. ªã¤  ᬥ頥âáï ¯®«§ã­®ª)
mov ecx,3 ; § ­®á¨¬ ¢ ¥áå æ¨äàã 3 (256/3=85, £¤¥ 85-¢ëá®â  ¯®«§ã­ª®¢)
imul ecx,ebx ; ­ å®¤¨¬ ¨á⨭­ë© ¯ à ¬¥âà æ¢¥â  á ãçñ⮬ ¬ áèâ ¡  ¯®«§ã­ª ---+
pop eax ; ¢®ááâ ­ ¢«¨¢ ¥¬ ¥ å :
;red_button: ; Šà á­ë© ’४¡ à :
cmp ah, 8 ; ID=8 :
jne green_button ; ¥á«¨ ­¥â, â® ¯à®¢¥à塞 §¥«ñ­ë© â४¡ à :
mov [cred],cl ; ¨­ ç¥ ¯à¨á¢ ¨¢ ¥¬ §­ ç¥­¨¥, ªà á­®¬ã 梥âã ᯥªâà  <------+
call set_spectr ; ãáâ ­ ¢«¨¢ ¥¬ ᯥªâà
jmp still ; “室¨¬ ­  ®¦¨¤ ­¨¥ ¤à㣮£® ᮡëâ¨ï
green_button:
cmp ah, 9
jne blue_button
mov [cgreen],cl
call set_spectr
jmp still ; “室¨¬ ­  ®¦¨¤ ­¨¥ ¤à㣮£® ᮡëâ¨ï
blue_button:
cmp ah, 10
jne alpha_button
mov [cblue],cl
call set_spectr
jmp still ; “室¨¬ ­  ®¦¨¤ ­¨¥ ¤à㣮£® ᮡëâ¨ï
alpha_button:
cmp ah, 11
jne still
mov [calpha],cl
call set_spectr
jmp still ; “室¨¬ ­  ®¦¨¤ ­¨¥ ¤à㣮£® ᮡëâ¨ï
bexit:
mcall -1 ; ¨­ ç¥ ª®­¥æ ¯à®£à ¬¬ë
;end_button
;#___________________________________________________________________________________________________
;****************************************************************************************************|
; ƒ<E282AC>‰ ŒŽ„“‹œ Ž<C5BD>ˆŽŠˆ ŽŠ<C5BD>ˆ <20>…Œ…<C592>Ž <20><>ˆŽ†…<E280A0>ˆŸ |
;----------------------------------------------------------------------------------------------------/
draw_main:
mov eax,12 ; äã­ªæ¨ï 12: ®§­ ç ¥â, çâ® ¡ã¤¥â à¨á®¢ âìáï ®ª­®
mov ebx,1 ; 1,­ ç «® à¨á®¢ ­¨ï
int 0x40 ; <20>à¥à뢠­¨¥
mov eax,48 ; ”ã­ªæ¨ï 48 - á⨫¨ ®â®¡à ¦¥­¨ï ®ª®­
mov ebx,3 ; <20>®¤äã­ªæ¨ï 3 - ¯®«ãç¨âì áâ ­¤ àâ­ë¥ æ¢¥â  ®ª®­.
mov ecx,sc ; “ª § â¥«ì ­  ¡ãä¥à à §¬¥à®¬ edx ¡ ©â, ¯®¤ áâàãªâãàã
mov edx,sizeof.system_colors ; <20> §¬¥à â ¡«¨æë 梥⮢ (¤®«¦¥­ ¡ëâì 40 ¡ ©â)
int 0x40 ; <20>à¥à뢠­¨¥
mov eax,48 ; ”ã­ªæ¨ï 48 - á⨫¨ ®â®¡à ¦¥­¨ï ®ª®­.
mov ebx,4 ; <20>®¤äã­ªæ¨ï 4 - ¢®§¢à é ¥â eax = ¢ëá®â  ᪨­ .
int 0x40 ; <20>à¥à뢠­¨¥
mov ecx,eax ; ‡ ¯®¬¨­ ¥¬ ¢ëá®âã ᪨­ 
xor eax,eax ; Žç¨é ¥¬ eax (mov eax,0) (”ã­ªæ¨ï 0)
mov ebx,WIN_X shl 16+WIN_W ; [ª®®à¤¨­ â  ¯® ®á¨ x]*65536 + [à §¬¥à ¯® ®á¨ x]
add ecx,WIN_Y shl 16+WIN_H ; ‚ëá®â  ᪨­  + [ª®®à¤¨­ â  ¯® y]*65536 + [à §¬¥à ¯® y] (168 ¤«ï ¢¥àᨨ 0.2)
mov edx,[sc.work] ; ‚¨¤¨¬® áâ¨«ì ®ª­  ¯® ¤¥ä®«âã
or edx,0x34000000 ; ˆ«¨ ®ª­® ᮠ᪨­®¬ 䨪á¨à®¢ ­­ëå à §¬¥à®¢
mov edi,title ; ‡ £®«®¢®ª ®ª­ 
int 0x40 ; <20>à¥à뢠­¨¥
call draw_palitra ; <20>ˆ“…Œ <20>ˆ<CB86>
call draw_result ; <20>ˆ“…Œ <20>…‡“œ
mov eax,8 ; ”ã­ªæ¨ï 8 - ®¯à¥¤¥«¨âì/㤠«¨âì ª­®¯ªã
mov ebx,110 shl 16+147 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® å [ª-â  x]*65536 + [à §¬¥à]
mov ecx,9 shl 16+147 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
mov edx,0x60000007 ; <20> ç «ì­®¥ ID ª­®¯®ª - 0xXYnnnnnn
int 0x40
mov ebx,13 shl 16+12 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® å [ª-â  x]*65536 + [à §¬¥à]
mov edx,0x60000008 ; ID = 8
mov ecx,51 shl 16+85 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40 ; <20>¨á㥬 ­¥¢¨¤¨¬ãî ª­®¯ªã ¯®¤ á« ©¤¥à®¬ red
add ebx,23 shl 16 ; „®¡ ¢«ï¥¬
inc edx ; ID = 9
int 0x40 ; <20>¨á㥬 ­¥¢¨¤¨¬ãî ª­®¯ªã ¯®¤ á« ©¤¥à®¬ green
add ebx,23 shl 16 ; „®¡ ¢«ï¥¬
inc edx ; ID = 10
int 0x40 ; <20>¨á㥬 ­¥¢¨¤¨¬ãî ª­®¯ªã ¯®¤ á« ©¤¥à®¬ blue
add ebx,23 shl 16 ; „®¡ ¢«ï¥¬
inc edx ; ID = 11
int 0x40 ; <20>¨á㥬 ­¥¢¨¤¨¬ãî ª­®¯ªã ¯®¤ á« ©¤¥à®¬ alpha
mov eax,8 ; ”ã­ªæ¨ï 8 - ®¯à¥¤¥«¨âì/㤠«¨âì ª­®¯ªã (Œ…<C592>€ –‚…’€)
mov ebx,11 shl 16+20 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® å [ª-â  x]*65536 + [à §¬¥à]
mov ecx,12 shl 16+20 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
mov edx,0x6000000D ; ID = 13
int 0x40
call draw_bottom_panel
call draw_left_panel
mov eax,12 ; äã­ªæ¨ï 12: ®§­ ç ¥â, çâ® ¡ã¤¥â à¨á®¢ âìáï ®ª­®
mov ebx,2 ; 2 - ª®­¥æ à¨á®¢ ­¨ï
int 0x40 ; <20>à¥à뢠­¨¥
ret
;#___________________________________________________________________________________________________
;****************************************************************************************************|
; <20>ŽŠ <E2809A>ŽŒŽƒ€œ<E280B9><20><>Ž…„“<E2809E> ˆ ”“<E2809D>Šˆ<20><>ˆŽ†…<E280A0>ˆŸ |
;----------------------------------------------------------------------------------------------------/
;------------------------------------------------------------------------------------------------+
draw_left_panel: ; Žâà¨á®¢ª  ¡®ª®¢®© ¯ ­¥«¨
;.................................................................................................
mov eax,8 ; button_next_colorsheme
mov ebx,266 shl 16+16 ; [x] + [size]
mov ecx,9 shl 16+16 ; [y] + [size]
mov edx,0x6000000C ; ID = 12
mov esi,[sc.work_button] ; RGB
int 0x40 ; call
mov eax,13 ; draw rect
mov ebx,266 shl 16+16 ; [x] + [size]
mov ecx,9 shl 16+16 ; [y] + [size]
mov edx,0x666666 ; RGB
push esi ; backup esi
mov esi,8 ; counter=8
draw_lpanel: ; loop label
int 0x40 ; call draw black rect
add ecx,19 shl 16 ; move rect
dec esi ; decrement counter
cmp esi,0 ; if counter!=zero
jne draw_lpanel ; then goto label
mov esi,8 ; else counter=8
mov ebx,267 shl 16+14 ; [x] + [size]
mov ecx,10 shl 16+14 ; [y] + [size]
mov edx,0xF3F3F3 ; RGB
draw_lpanel2: ; 2 loop label
int 0x40 ; call draw white rect
add ecx,19 shl 16 ; move rect
dec esi ; decrement counter
cmp esi,0 ; if counter!=0
jne draw_lpanel2 ; then goto label2
pop esi ; restore esi
; draw_left_arrow for button_next_colorsheme
mov eax,4 ; Write string
mov ebx,272 shl 16+13 ; [x] + [y]
mov ecx,0x0 ; RGB
mov edx,larrow ; string pointer
mov esi,1 ; count symbol
int 0x40 ; call
mov eax,38 ; draw line
mov ebx,270 shl 16+272 ; [start x] + [end x]
mov ecx,16 shl 16+16 ; [start y] + [end y]
mov edx,0x0 ; RGB
int 0x40 ; call
ret ; return
;.................................................................................................
;------------------------------------------------------------------------------------------------+
draw_bottom_panel: ; Žâà¨á®¢ª  ­¨¦­¥© ¯ ­¥«¨
;.................................................................................................
mov eax,8 ; draw button
mov ebx,92 shl 16+100 ; [x] + [size]
mov ecx,169 shl 16+16 ; [y] + [size]
mov edx,14 ; ID = 14
mov esi,[sc.work_button] ; RGB
int 0x40 ; call
mov eax,4 ; Write string
mov ebx,113 shl 16+174 ; [x] + [y]
mov ecx,[sc.work_button_text] ; RGB
mov edx,bground ; string pointer
mov esi,10 ; count symbol
int 0x40 ; call
mov eax,38 ; draw line
mov ebx,4 shl 16+282 ; [start x] + [end x]
mov ecx,163 shl 16+163 ; [start y] + [end y]
mov edx,0x00666666 ; RGB
int 0x40 ; call
ret ; return
;.................................................................................................
mouse_global:
;.................................................................................................
; <20>®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨
;.................................................................................................
mov eax,37 ; ”ã­ªæ¨ï 37 - à ¡®â  á ¬ëèìî
mov ebx,0 ; ­ ¬ ­ã¦­ë £«®¡ «ì­ë¥ ª®®à¤¨­ âë
int 0x40 ; eax = x*65536 + y, (x,y)=ª®®à¤¨­ âë ªãàá®à  ¬ëè¨
mov ecx,eax ;
shr ecx,16 ; ecx = x+1
movzx edx,ax ; edx = y+1
dec ecx ; ecx = x
dec edx ; edx = y
mov [mouse_x],ecx ; mouse_x = x
mov [mouse_y],edx ; mouse_y = y
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_mouse_global
mouse_local:
;.................................................................................................
; <20>®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® ®ª­ 
;.................................................................................................
mov eax,37 ; ”ã­ªæ¨ï 37 - à ¡®â  á ¬ëèìî
mov ebx,1 ; ­ ¬ ­ã¦­ë £«®¡ «ì­ë¥ ª®®à¤¨­ âë
int 0x40 ; eax = x*65536 + y, (x,y)=ª®®à¤¨­ âë ªãàá®à  ¬ëè¨
mov ecx,eax ;
shr ecx,16 ; ecx = x+1
movzx edx,ax ; edx = y+1
dec ecx ; ecx = x
dec edx ; edx = y
mov [mouse_x],ecx ; mouse_x = x
mov [mouse_y],edx ; mouse_y = y
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_mouse_local
set_background:
;.................................................................................................
; “áâ ­ ¢«¨¢ ¥â ä®­ à ¡®ç¥£® á⮫ 
;.................................................................................................
mov eax,15 ; ”ã­ªæ¨ï 15 - à ¡®â  á ä®­®¢®© £à ä¨ª®©
mov ebx,4 ; <20>®¤äã­ªæ¨ï 4 - ãáâ ­®¢¨âì ०¨¬ ®âà¨á®¢ª¨ ä®­ .
mov ecx,2 ; <20>¥¦¨¬ ®âà¨á®¢ª¨ - § ¬®áâ¨âì (1)
int 0x40 ; ‚ë§ë¢ ¥¬
mov eax,15 ; ”ã­ªæ¨ï 15 - à ¡®â  á ä®­®¢®© £à ä¨ª®©
mov ebx,1 ; <20>®¤äã­ªæ¨ï 1 - ãáâ ­®¢¨âì à §¬¥à ä®­®¢®£® ¨§®¡à ¦¥­¨ï.
mov ecx,2 ; ˜¨à¨­  ¨§®¡à ¦¥­¨ï
mov edx,2 ; ‚ëá®â  ¨§®¡à ¦¥­¨ï
int 0x40 ; ‚ë§ë¢ ¥¬
mov eax,[color]
mov [cm+0],al
mov [cm+9],al
shr eax,8
mov [cm+1],al
mov [cm+10],al
shr eax,8
mov [cm+2],al
mov [cm+11],al
mov eax,[color2]
mov [cm+3],al
mov [cm+6],al
shr eax,8
mov [cm+4],al
mov [cm+7],al
shr eax,8
mov [cm+5],al
mov [cm+8],al
mov eax,15 ; ”ã­ªæ¨ï 15 - à ¡®â  á ä®­®¢®© £à ä¨ª®©
mov ebx,5 ; <20>®¤äã­ªæ¨ï 5 - ¯®¬¥áâ¨âì ¡«®ª ¯¨ªá¥«¥© ­  ä®­.
mov ecx,cm ; “ª § â¥«ì ­  ¤ ­­ë¥ ¢ ä®à¬ â¥ BBGGRRBBGGRR
mov edx,0 ; C¬¥é¥­¨¥ ¢ ¤ ­­ëå ä®­®¢®£® ¨§®¡à ¦¥­¨ï
mov esi,3*4 ; <20> §¬¥à ¤ ­­ëå ¢ ¡ ©â å = 3 * ç¨á«® ¯¨ªá¥«¥©
int 0x40 ; ‚ë§ë¢ ¥¬
mov eax,15 ; ”ã­ªæ¨ï 15 - à ¡®â  á ä®­®¢®© £à ä¨ª®©
mov ebx,3 ; <20>®¤äã­ªæ¨ï 3 - ¯¥à¥à¨á®¢ âì ä®­.
int 0x40 ; ‚ë§ë¢ ¥¬
ret
;end_set_background
desktop_get:
;.................................................................................................
; Ž¯à¥¤¥«ï¥¬ è¨à¨­ã íªà ­ 
;.................................................................................................
mov eax,14 ; Ž¯à¥¤¥«ï¥¬ è¨à¨­ã íªà ­  (eax = [xsize]*65536 + [ysize])
int 0x40 ; xsize = à §¬¥à ¯® £®à¨§®­â «¨ - 1
mov ebx,eax ;
shr ebx,16 ; ebx = xsize-1
;movzx edx,ax ;; edx = ysize-1 («¨è­¨© ª®¤)
inc ebx ; ebx = xsize
;inc edx ;; edx = ysize («¨è­¨© ª®¤)
mov [desctop_w],ebx
ret
;end_desktop_get
mouse_get:
mov esi,2 ; ŠŽ‘’›‹œ: ä« £ ¤«ï ¨§¡¥¦ ­¨ï § æ¨ª«¨¢ ­¨ï
call mouse_global
call desktop_get
re_mouse_loop: ; ŠŽ‘’›‹œ: ¬¥âª  ¤«ï ¢®§¢à â  ¥á«¨ ¯®¯ «¨ ¢ á¥âªã
mov ebx,[desctop_w]
imul ebx,[mouse_y] ; ebx = y*xsize
add ebx,[mouse_x] ; ebx = y*xsize+x
;.................................................................................................
; <20>¥à¥¬ 梥â á ¯ «¨âàë ¢ ¯¥à¥¬¥­­ãî
;.................................................................................................
mov eax,35 ; ”ã­ªæ¨ï ¢§ïâ¨ï 梥â 
;mov ebx,ecx ;; ebx = y*xsize+x («¨è­¨© ª®¤)
int 0x40 ; <20>®«ãç ¥¬ 梥⠢ eax
cmp eax,[sc.work] ; ‘à ¢­¨¢ ¥¬ á ä®­®¬ ¯à¨«®¦¥­¨ï
je mouse_err ; …᫨ íâ® ®­ - â® ­¨ç¥£® ­¥ ¤¥« ¥¬
cmp eax,0x222222 ; ‘à ¢­¨¢ ¥¬ á 梥⮬ á¥âª¨
je mouse_err ; …᫨ íâ® ®­ - â® ­¨ç¥£® ­¥ ¤¥« ¥¬
jmp mouse_set ; ŠŽ‘’›‹œ: ¯à룠¥¬ çâ®¡ë ­¥ ¡à âì 梥â á¥âª¨
mouse_err: ; ŠŽ‘’›‹œ: ¥á«¨ ¯®¯ «¨ ¢ á¥âªã ¨«¨ ä®­
inc [mouse_y] ; ŠŽ‘’›‹œ: ᬥ頥¬ ¯® ¤¨ £®­ «¨ á­ ç «  ¯® å
inc [mouse_x] ; ŠŽ‘’›‹œ: ᬥ頥¬ ¯® ¤¨ £®­ «¨ ¯®â®¬ ¯® ã
dec esi ; ŠŽ‘’›‹œ: “¬¥­ìè ¥¬ ä« £
cmp esi,0 ; ŠŽ‘’›‹œ: ‘à ¢­¨¢ ¥¬ á ­ã«¥¬
jz mouse_exit ; ŠŽ‘’›‹œ: …᫨ ­®«ì ⮠ᤥ« «¨ ¢áñ çâ® ¬®£«¨
jmp re_mouse_loop ; ŠŽ‘’›‹œ: …᫨ ­¥ ­®«ì â® ¯®¯à®¡ã¥¬ ¢§ïâì á®á¥«­¨© ¯¨ªá¥«ì
mouse_set:
mov [color],eax ; ˆ­ ç¥ § ¯®¬¨­ ¥¬ ­®¢ë© 梥â
call draw_result ; ‚뢮¤¨¬ १ã«ìâ â
mouse_exit:
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_mouse_get----------------------------------------------------------------------------------------
draw_palitra:
mov eax,13 ; ”ã­ªæ¨ï 13 - ­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª
mov ebx,110 shl 16+148 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,9 shl 16+148 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
mov edx,[sc.work] ; 梥â
int 0x40
;cmp [renmode],2
;je cyrcle_draw
;cmp [renmode],1
;je picker_draw
cmp [renmode],0
je sheme_draw
ret
;.................................................................................................
; Žâà¨á®¢ª  ªà㣮¢®© ¤¨ £à ¬¬ë
;.................................................................................................
;cyrcle_draw:
;mov eax,7 ; 7 - ­®¬¥à ä㭪樨
;mov ebx,circle ; 㪠§ â¥«ì ­  ¨§®¡à ¦¥­¨¥ ¢ ä®à¬ â¥ BBGGRRBBGGRR...
;mov ecx,148 shl 16 + 148 ; [à §¬¥à ¯® ®á¨ x]*65536 + [à §¬¥à ¯® ®á¨ y]
;mov edx,110 shl 16 + 9 ; [ª®®à¤¨­ â  ¯® ®á¨ x]*65536 + [ª®®à¤¨­ â  ¯® ®á¨ y]
;int 0x40
;ret
;picker_draw:
;ret
;.................................................................................................
; Žâà¨á®¢ª  ä®­  ¯®¤ ª­®¯ª¨
;.................................................................................................
sheme_draw:
mov eax,13 ; ”ã­ªæ¨ï 13 - ­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª
mov edx,0x222222 ; 梥â
mov ecx,9 shl 16+73 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
mov esi,2 ; ‘ç¥â稪 «¨­¨© ¯®¤«®¦¥ª
re_draw:
mov ebx,110 shl 16+73 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov edi,2 ; ‘ç¥â稪 ª®«¨ç¥á⢠ ¯®¤«®¦¥ª
for_fon_loop:
int 0x40 ; <20>à¥à뢠­¨¥
add ebx,75 shl 16 ; ‘¬¥é ¥¬ ¯®«®¦¥­¨¥ «¨­¨¨ ¯® å
dec edi ; “¬¥­ìè ¥¬ áç¥â稪 ª­®¯®ª
cmp edi,0 ; ‘à ¢­¨¢ ¥¬ á ­ã«¥¬
jnz for_fon_loop ; …᫨ ­¥ ­®«ì â® ¢ ­ ç «® 横« 
dec esi ; “¬¥­ìè ¥¬ ¥£®
cmp esi,0 ; ‘à ¢­¨¢ ¥¬ á ­ã«¥¬
mov ecx,84 shl 16+73 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
jnz re_draw ; …᫨ ­¥ ­®«ì â® ¢ ­ ç «® 横« 
;.................................................................................................
; Žâà¨á®¢ª  ª­®¯®ª ¯® 横«ã
;.................................................................................................
mov eax,13 ; ”ã­ªæ¨ï 13 - ­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª
mov edx,0x0FFFFFFF ; 梥â
mov esi,4 ; ‘ç¥â稪 ª®«¨ç¥á⢠  ¡§ æ¥¢ (#4,8)
mov ebx,99 shl 16+8 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
for_abz:
;;push esi ; ‘®å࠭塞 §­ ç¥­¨¥ áç¥â稪  «¨­¨© ¢ á⥪
cmp esi,2
jne x2_line
mov ebx,99 shl 16+8
x2_line:
add ebx,3 shl 16 ; ‘¬¥é ¥¬ ¯®«®¦¥­¨¥ «¨­¨¨ ¯® x
mov edi,8 ; ‘ç¥â稪 ª®«¨ç¥á⢠ ª­®¯®ª ¢ áâப¥
for_stolbik:
push edi ; ‘®å࠭塞 §­ ç¥­¨¥ áç¥â稪  «¨­¨© ¢ á⥪
mov edi,8 ; ‘ç¥â稪 ª®«¨ç¥á⢠ ª­®¯®ª ¢ áâப¥
mov ecx, 1 shl 16+8 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
cmp esi,2
jg y2_line ; …᫨ ¡®«ìè¥ 4 â® ¨£­®à¨¬
mov ecx,76 shl 16+8
y2_line:
add ebx,9 shl 16 ; ‘¬¥é ¥¬ ¯®«®¦¥­¨¥ «¨­¨¨ ¯® x
for_loop:
add ecx,9 shl 16 ; ‘¬¥é ¥¬ ¯®«®¦¥­¨¥ «¨­¨¨ ¯® y
int 0x40 ; <20>à¥à뢠­¨¥
call sub_red
dec edi ; “¬¥­ìè ¥¬ áç¥â稪 ª­®¯®ª
cmp edi,0 ; ‘à ¢­¨¢ ¥¬ á ­ã«¥¬
jnz for_loop ; …᫨ ­¥ ­®«ì â® ¢ ­ ç «® 横« 
call sub_green
pop edi ; ˆ­ ç¥ ¢®ááâ ­ ¢«¨¢ ¥¬ áç¥â稪 «¨­¨©
dec edi ; “¬¥­ìè ¥¬ ¥£®
cmp edi,0 ; ‘à ¢­¨¢ ¥¬ á ­ã«¥¬
jnz for_stolbik ; …᫨ ­¥ ­®«ì â® ¢ ­ ç «® 横« 
call sub_blue
;;pop esi ; ˆ­ ç¥ ¢®ááâ ­ ¢«¨¢ ¥¬ áç¥â稪 «¨­¨©
dec esi ; “¬¥­ìè ¥¬ ¥£®
cmp esi,0 ; ‘à ¢­¨¢ ¥¬ á ­ã«¥¬
jnz for_abz ; …᫨ ­¥ ­®«ì â® ¢ ­ ç «® 横« 
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_draw_palitra-------------------------------------------------------------------------------------
sub_red:
;.................................................................................................
; <20> áçñâ ᬥ饭¨© ªà á­®£® æ¢¥â  ¢ £¥­¥à æ¨¨ æ¢¥â  ¯ «¨âàë
;.................................................................................................
push eax
mov eax,[pnext]
;sub_red_0 ; palitra
cmp al,0
jne sub_red_1
sub edx,0x40
jmp sub_red_e
sub_red_1: ; random
cmp al,1
jne sub_red_2
sub edx,0x20
jmp sub_red_e
sub_red_2: ; gree
cmp al,2
jne sub_red_3
sub edx,0x010101
jmp sub_red_e
sub_red_3: ; red
cmp al,3
jne sub_red_4
sub edx,0x0101
jmp sub_red_e
sub_red_4: ; green
cmp al,4
jne sub_red_5
sub edx,0x010001
jmp sub_red_e
sub_red_5: ; blue
cmp al,5
jne sub_red_e
sub edx,0x010100
jmp sub_red_e
sub_red_e:
pop eax
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_sub_red------------------------------------------------------------------------------------------
sub_green:
;.................................................................................................
; <20> áçñâ ᬥ饭¨© ªà á­®£® æ¢¥â  ¢ £¥­¥à æ¨¨ æ¢¥â  ¯ «¨âàë
;.................................................................................................
push eax
mov eax,[pnext]
;sub_green_0
cmp al,0
jne sub_green_1
sub edx,0x4000
jmp sub_green_e
sub_green_1:
cmp al,1
jne sub_green_e
sub edx,0x2000
;jmp sub_green_e
sub_green_e:
pop eax
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_sub_green----------------------------------------------------------------------------------------
sub_blue:
;.................................................................................................
; <20> áçñâ ᬥ饭¨© ªà á­®£® æ¢¥â  ¢ £¥­¥à æ¨¨ æ¢¥â  ¯ «¨âàë
;.................................................................................................
push eax
mov eax,[pnext]
;sub_blue_0
cmp al,0
jne sub_blue_1
sub edx,0x600000
jmp sub_blue_e
sub_blue_1:
cmp al,1
jne sub_blue_e
sub edx,0x400000
;jmp sub_blue_e
sub_blue_e:
pop eax
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_sub_blue-----------------------------------------------------------------------------------------
draw_result:
;.................................................................................................
; <20>®«ìè ï à ¬ª  ¢ë¢®¤  १ã«ìâ â 
;.................................................................................................
mov eax,13 ; ”ã­ªæ¨ï 13 - ­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª
mov edx,0x00666666 ; 梥â-®¡¢®¤ª¨
mov ebx,4 shl 16+98 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,9 shl 16+148 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40
mov edx,0x00F3F3F3 ; 梥â-ä®­ 
mov ebx,5 shl 16+96 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,10 shl 16+146 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40
;.................................................................................................
; Žâà¨á®¢ª  १ã«ìâ â  æ¢¥â  ¢ hex color2
;.................................................................................................
mov eax,13 ; ”ã­ªæ¨ï 13 - ­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª
; color 2 - draw fringle
mov edx,0x222222 ; 梥â-®¡¢®¤ª¨
mov ebx,16 shl 16+15 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,16 shl 16+15 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40 ; <20>à¥à뢠­¨¥ (®á à¨áã¥â ¯àאַ㣮«ì­¨ª)
; color 2 - draw color
mov edx,[color2] ; 梥â
mov ebx,17 shl 16+13 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,17 shl 16+13 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40 ; <20>à¥à뢠­¨¥ (®á à¨áã¥â ¯àאַ㣮«ì­¨ª)
; color 1 - draw fringle
mov edx,0x222222 ; 梥â-®¡¢®¤ª¨
mov ebx,11 shl 16+15 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,12 shl 16+15 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40 ; <20>à¥à뢠­¨¥ (®á à¨áã¥â ¯àאַ㣮«ì­¨ª)
; value - draw fringle
mov ebx,34 shl 16+62 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,16 shl 16+15 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40 ; <20>à¥à뢠­¨¥ (®á à¨áã¥â ¯àאַ㣮«ì­¨ª)
; color 2 - draw color
mov edx,[color] ; 梥â
mov ebx,12 shl 16+13 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,13 shl 16+13 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40 ; <20>à¥à뢠­¨¥ (®á à¨áã¥â ¯àאַ㣮«ì­¨ª)
; value - draw background
mov edx,0xFFFFFF ; 梥â-ä®­ 
mov ebx,35 shl 16+60 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,17 shl 16+13 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40 ; <20>à¥à뢠­¨¥ (®á à¨áã¥â ¯àאַ㣮«ì­¨ª)
mov eax,47 ; ”ã­ªæ¨ï 47 - ¢ë¢®¤ ç¨á«  ¢ ®ª­®
mov ecx,[color] ; ç¨á«® (¯à¨ bl=0) ¨«¨ 㪠§ â¥«ì (¯à¨ bl=1)
mov esi,0x0 ; 0xX0RRGGBB
mov ebx,256+8 shl 16 ; ¯ à ¬¥âàë ¯à¥®¡à §®¢ ­¨ï ç¨á«  ¢ ⥪áâ (HEX)
mov edx,45 shl 16+20 ; [ª®®à¤¨­ â  ¯® ®á¨ x]*65536 + [ª®®à¤¨­ â  ¯® ®á¨ y]
int 0x40 ; <20>à¥à뢠­¨¥ - ¢ë¢®¤¨¬ १ã«ìâ â ¢ ®ª­® (HEX)
mov eax,4 ; äã­ªæ¨ï 4: ­ ¯¨á âì ⥪áâ ¢ ®ª­¥
mov ebx,38*65536+20 ; [x ­ ç «ì­ë©] *65536 + [y ­ ç «ì­ë©]
mov ecx,0x0 ; 梥â ⥪áâ  RRGGBB
mov edx,hex ; à¨á㥬 '#'
mov esi,1 ; ¤«¨­  ⥪áâ  ¢ ¡ ©â å
int 0x40
;.................................................................................................
; Žâà¨á®¢ª  r g b §­ ç¥­¨©
;.................................................................................................
call get_spectr
movzx eax,[cred] ; ªà á­ë©
mov ebx,9*65536+142 ; [x ­ ç «ì­ë©] *65536 + [y ­ ç «ì­ë©]
call draw_value ; ¢ë¢®¤¨¬ १ã«ìâ â
movzx eax,[cgreen] ; §¥«¥­ë©
mov ebx,32*65536+142 ; [x ­ ç «ì­ë©] *65536 + [y ­ ç «ì­ë©]
call draw_value ; ¢ë¢®¤¨¬ १ã«ìâ â
movzx eax,[cblue] ; ᨭ¨©
mov ebx,55*65536+142 ; [x ­ ç «ì­ë©] *65536 + [y ­ ç «ì­ë©]
call draw_value ; ¢ë¢®¤¨¬ १ã«ìâ â
movzx eax,[calpha] ;  «ìä 
mov ebx,78*65536+142 ; [x ­ ç «ì­ë©] *65536 + [y ­ ç «ì­ë©]
call draw_value ; ¢ë¢®¤¨¬ १ã«ìâ â
;.................................................................................................
; ‚뢮¤¨¬ ¡ãª¢ë r g b a
;.................................................................................................
mov eax,4 ; 4 - ¢ë¢¥á⨠áâபã ⥪áâ  ¢ ®ª­®
mov ebx,16 shl 16+40 ; [ª®®à¤¨­ â  ¯® ®á¨ x]*65536 + [ª®®à¤¨­ â  ¯® ®á¨ y]
mov ecx,0x0 ; 0xX0RRGGBB (RR, GG, BB § ¤ îâ 梥â ⥪áâ )
mov edx,cname ; 㪠§ â¥«ì ­  ­ ç «® áâப¨
mov esi,1 ; ¢ë¢®¤¨âì esi ᨬ¢®«®¢
newline: ; 横«
int 0x40 ; <20>à¥à뢠­¨¥
add ebx,23 shl 16 ; „®¡ ¢«ï¥¬
add edx,1 ; „®¡ ¢«ï¥¬
cmp [edx],byte 'x' ; ‘à ¢­¥­¨¥ á ¡ ©â®¬ å
jne newline ; …᫨ ­¥ ­ã«ì ¨«¨ ­¥ à ¢­®
;.................................................................................................
; Žâà¨á®¢ª  á« ©¤¥à®¢
;.................................................................................................
mov eax,13 ; ”ã­ªæ¨ï 13 - ­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª
mov edx,0x222222 ; 梥â-®¡¢®¤ª¨
mov ebx,16 shl 16+4 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,51 shl 16+86 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40
add ebx,23 shl 16 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  y]*65536 + [à §¬¥à]
int 0x40
add ebx,23 shl 16 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  y]*65536 + [à §¬¥à]
int 0x40
add ebx,23 shl 16 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  y]*65536 + [à §¬¥à]
int 0x40
mov edx,0xFA0919 ; 梥â-®¡¢®¤ª¨
mov ebx,17 shl 16+2 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
mov ecx,52 shl 16+84 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® y [ª-â  y]*65536 + [à §¬¥à]
int 0x40
mov edx,0x08CE19 ; 梥â-®¡¢®¤ª¨
add ebx,23 shl 16 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  y]*65536 + [à §¬¥à]
int 0x40
mov edx,0x0909FF ; 梥â-®¡¢®¤ª¨
add ebx,23 shl 16 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  y]*65536 + [à §¬¥à]
int 0x40
mov edx,0xE4E4E4 ; 梥â-®¡¢®¤ª¨
add ebx,23 shl 16 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  y]*65536 + [à §¬¥à]
int 0x40
;.................................................................................................
; Žâà¨á®¢ª  ¯®«§ã­ª®¢
;.................................................................................................
mov edx,0x0 ; 梥â-¯®«§ã­ª®¢
mov ebx,17 shl 16+11 ; <20> ç «ì­ë¥ ª®®à¤¨­ âë ¯® x [ª-â  x]*65536 + [à §¬¥à]
movzx eax,[cred] ; ¡¥à¥¬ §­ ç¥­¨¥ 梥â 
call draw_slider
add ebx,23 shl 16
movzx eax,[cgreen] ; ¡¥à¥¬ §­ ç¥­¨¥ 梥â 
call draw_slider
add ebx,23 shl 16
movzx eax,[cblue] ; ¡¥à¥¬ §­ ç¥­¨¥ 梥â 
call draw_slider
add ebx,23 shl 16
movzx eax,[calpha] ; ¡¥à¥¬ §­ ç¥­¨¥ 梥â 
call draw_slider
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_draw_result
draw_slider:
xor ecx,ecx
mov cl,0x3 ; ¡ã¤¥¬ ¤¥«¨âì ¥£® ­  3 â ª ª ª ¯®«§ã­ª¨ ¤«¨­­®© 85 ¯¨ªá¥«¥©
div cl ; ¤¥«¨¬ - 楫®¥ ¢ al ®áâ â®ª ¢ ah
mov cl,136 ; ­¨¦­ïï â®çª  ¯®«§ã­ª 
sub cl,al ; cl=cl-al
shl ecx,16
add ecx,1 ; § ¤ ¥¬ ­ ç «ì­®¥ ¯®«®¦¥­¨¥
mov eax,13 ; ”ã­ªæ¨ï 13 - ­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª
int 0x40
push ebx ; á®å࠭塞 ¤«ï á«¥¤ãî饣® ¯®«§ã­ª  x+w
sub ebx,8 ; â ª ª ª è¨à¨­  «¨­¨¨ 11 â® ®â­¨¬ ¥¬ 8 çâ®¡ë ªã¡¨ª áâ « è¨à¨­®© 3
add ebx,8 shl 16 ; Š®®à¤¨­ âë ¯® x ¤«ï ª¢ ¤à â  ­  ¯®«§ã­ª¥ ᬥ頥¬ ­  8 ¢ ¯à ¢®
inc ecx ; ¡ë¤«®ª®¤¨¬ ¢ëá®âã ¯®«§ã­ª  ¤® 3-å (1+1=2)
inc ecx ; (2+1=3) ­ã ¢®â ã ­ á ¡ã¤¥â ªã¡¨ª 3å3 ­  8 ¢ ¯à ¢® ®â «¨­¨¨
int 0x40 ; à¨á㥬
pop ebx ; ¢®ááâ ­ ¢«¨¢ ¥¬ ­®à¬ «ì­ë¥ ª®®à¤¨­ âë
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_slider
draw_value:
;.................................................................................................
; ‚뢮¤ ç¨á«  ¨§ áâப¨ ¢ 㪠§ ­­®© ®¡« áâ¨
;.................................................................................................
push ebx ; á®å࠭塞 ¯à¨á« ­­ë¥ ª®®à¤¨­ âë
mov ebx,10 ; ãáâ ­ ¢«¨¢ ¥¬ ®á­®¢ ­¨¥ á¨á⥬ë áç¨á«¥­¨ï
mov edi,buff ; 㪠§ â¥«ì ­  áâப㠡ãä¥à 
call int2ascii ; ª®­¢¥àâ¨à㥬 ç¨á«® ¨ «®¦¨¬ ª ª áâப㠢 ¡ãä¥à + esi ¤«¨­ 
mov eax,4 ; äã­ªæ¨ï 4: ­ ¯¨á âì ⥪áâ ¢ ®ª­¥
pop ebx ; ¤®áâ ¥¬ ¨§ á⥪  ¯à¨á« ­­ë¥ ª®®à¤¨­ âë
cmp esi,2 ; <E28093><EFBFBD>ˆ<EFBFBD>Ž<E2809A>ˆ… ’…Š‘’€
jne draw_value_1
add ebx,4 shl 16
jmp draw_value_e
draw_value_1:
cmp esi,1
jne draw_value_e
add ebx,7 shl 16
draw_value_e:
mov ecx,0x0 ; 梥â ⥪áâ  RRGGBB
mov edx,buff ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
int 0x40
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_draw_value
hex_digit:
;.................................................................................................
; <20>८¡à §®¢ ­¨¥ ¢ ASCII (¢­¥ § ¢¨á¨¬®á⨠®â á¨á⥬ë áç¨á«¥­¨ï)
;.................................................................................................
cmp dl,10 ; ¢ dl ®¦¨¤ ¥âáï ç¨á«® ®â 0 ¤® 15
jb .less ; ¥á«¨ dl<10 â® ¯¥à¥å®¤¨¬
add dl,'A'-10 ; 10->A 11->B 12->C ...
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
.less:
or dl,'0' ; …᫨ á¨á⥬  áç¨á«¥­¨ï 10-ï ¨ ¬¥­¥¥
ret ; ‚®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_hex_digit
int2ascii:
;.................................................................................................
; <20>८¡à §®¢ ­¨¥ ç¨á«  ¢ áâபã
;.................................................................................................
; eax - 32-å §­ ç­®¥ ç¨á«®
; ebx - ®á­®¢ ­¨¥ á¨á⥬ë áç¨á«¥­¨ï
; edi - 㪠§ â¥«ì ­  áâப㠡ãä¥à 
; ‚®§¢à é ¥â § ¯®«­¥­­ë© ¡ãä¥à ¨ esi - ¤«¨­  áâப¨
;pushad
xor esi,esi ; § ­ã«ï¥¬ áç¥â稪 ᨬ¢®«®¢
convert_loop:
xor edx,edx ; § ­ã«ï¥¬ ॣ¨áâà ¯®¤ ®áâ â®ª
div ebx ; eax/ebx - ®áâ â®ª ¢ edx
call hex_digit ; ¯à¥®¡à §ã¥¬ ᨬ¢®«
push edx ; «®¦¨¬ ¢ á⥪
inc esi ; 㢥«¨ç¨¢ ¥¬ áç¥â稪
test eax,eax ; ¥á«¨ ¥é¥ ¬®¦­® ¤¥«¨âì
jnz convert_loop ; â® ¤¥«¨¥¬ ¥é¥
cld ; Ž<>Ÿ‡€œ<E280B9>Ž á¡à á뢠¥¬ ä« £ ­ ¯à ¢«¥­¨ï DF (§ ¯¨áì ¢¯¥àñ¤)
write_loop: ; ¨­ ç¥
pop eax ; ¤®áâ ¥¬ ¨§ á⥪  ¢ ¥ å
stosb ; § ¯¨á뢠¥¬ ¢ ¡ãä¥à ¯®  ¤à¥áã ES:(E)DI
dec esi ; 㬥­ìè ¥¬ áç¥â稪
test esi,esi ; ¥á«¨ ¥áâì çâ® ¤®áâ ¢ âì ¨§ á⥪ 
jnz write_loop ; â® ¤®áâ ñ¬
mov byte [edi],0 ; ¨­ ç¥ ¤®¯¨áë뢠¥¬ ­ã«¥¢®© ¡ ©â
;popad ; ¢®ááâ ­ ¢«¨¢ ¥¬ §­ ç¥­¨ï ॣ¨áâ஢
; ª®¤ ­¨¦¥ ­¥ ¨¬¥¥â ­¨ç¥£® ®¡é¥£® ª ä㭪樨, ¯à®áâ® ¢®§¢à é ¥â ¥é¥ ¤«¨­­ã ¯®«ã祭­®© áâப¨
mov edi,buff ; 㪠§ â¥«ì ­  ­ ç «® ⥪áâ 
call str_len
mov esi,eax
ret ; ¨ ¢®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_int2ascii
get_spectr:
;.................................................................................................
; ¢®§¢à é ¥â r,g,b á®á⮢«ïî騥 梥â 
;.................................................................................................
mov ecx,[color]
mov [cblue],cl
shr ecx,8
mov [cgreen],cl
shr ecx,8
mov [cred],cl
shr ecx,8
mov [calpha],cl
ret ; ¨ ¢®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_get_spectr
set_spectr:
;.................................................................................................
; ãáâ ­ ¢«¨¢ ¥â ¨§ r,g,b 梥â
;.................................................................................................
movzx eax,[calpha]
shl eax,8
mov al,[cred]
shl eax,8
mov al,[cgreen]
shl eax,8
mov al,[cblue]
mov [color],eax
call draw_result ; ‚뢮¤¨¬ १ã«ìâ â
ret ; ¨ ¢®§¢à é ¥¬ ã¯à ¢«¥­¨¥
;end_get_spectr
str_len:
;.................................................................................................
; ®¯à¥¤¥«ï¥â ¤«¨­ã áâப¨ (¢å®¤->EDI ZS offset ; ¢ë室->EAX ZS length)
;.................................................................................................
push ecx
push esi
push edi
cld
xor al, al
mov ecx, 0FFFFFFFFh
mov esi, edi
repne scasb
sub edi, esi
mov eax, edi
dec eax
pop edi
pop esi
pop ecx
ret
;end_str_len
;#___________________________________________________________________________________________________
;****************************************************************************************************|
; <20>ŽŠ <20><EFBFBD>…Œ…<C592><E280A6>ˆ ŠŽ<C5A0><E28099> |
;----------------------------------------------------------------------------------------------------/
struct map_colors
c1 db 0
c2 db 0
c3 db 0
c4 db 0
c5 db 0
c6 db 0
c7 db 0
c8 db 0
c9 db 0
c10 db 0
c11 db 0
c12 db 0
ends
cm db 12 dup(0)
color dd 00000000h ; åà ­¨â §­ ç¥­¨¥ ¢ë¡à ­­®£® 梥â 
color2 dd 00FFFFFFh ; åà ­¨â §­ ç¥­¨¥ ¢â®à®£® ¢ë¡à ­­®£® 梥â 
mouse_x dd 0 ; åà ­¨â £«®¡ «ì­ãî å ª®®à¤¨­ âã ¬ëè¨
mouse_y dd 0 ; åà ­¨â £«®¡ «ì­ãî ã ª®®à¤¨­ âã ¬ëè¨
mouse_f dd 0 ; åà ­¨â ¤ ­­ë¥ ® ⮬ ª ª ï ª­®¯ª  ¬ëè¨ ¡ë«  ­ ¦ â 
desctop_w dd 0 ; åà ­¨â è¨à¨­ã íªà ­ 
sc system_colors ; åà ­¨â áâàãªâãàã á¨á⥬­ëå 梥⮢ ᪨­ 
title db 'Palitra v0.5',0 ; åà ­¨â ¨¬ï ¯à®£à ¬¬ë
hex db '#',0 ; ¤«ï ¢ë¢®¤  à¥èñ⪨ ª ª ⥪áâ 
cname db 'RGBAx' ; åà ­¨â à §àï¤ë 梥⮢ (red,green,blue) x-¬¥âª  ª®­æ 
cred db 0 ; åà ­¨¬ ªà á­ë© ᯥªàâ
cgreen db 0 ; åà ­¨¬ §¥«¥­ë© ᯥªâà
cblue db 0 ; åà ­¨¬ ᨭ¨© ᯥªâà
calpha db 0 ; åà ­¨¬ ¯à®§à ç­®áâì
larrow db 0x1A,0
buff db '000',0
bground db 'BACKGROUND',0 ; ¨¬ï ª­®¯ª¨ - 14
pnext dd 0 ; áç¥â稪 ¯¥à¥ª«î祭¨ï ¯ «¨âàë
renmode dd 0 ; ०¨¬ ®âà¨á®¢ª¨ (1-梥⮢ ï á奬 ,2-¯¨¯¥âª ,3-ªà㣮¢ ï)
I_END: