Subversion Repositories NedoOS

Rev

Rev 49 | Rev 273 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1.  
  2. editpal_HSx8=0
  3. editpal_HSwid8=16
  4. editpal_Vx8=20
  5. editpal_Vwid8=4
  6.  
  7. editpal_colorx8=26
  8. editpal_colorwid8=4
  9. editpal_colory=0
  10. editpal_colorhgt=32
  11.  
  12. editpal_curcolorx8=32
  13. editpal_curcolorwid8=4
  14. editpal_curcolory=0
  15. editpal_curcolorhgt=32
  16.  
  17. editpal_oldcolorx8=editpal_curcolorx8
  18. editpal_oldcolorwid8=editpal_curcolorwid8
  19. editpal_oldcolory=56
  20. editpal_oldcolorhgt=16
  21. editpal_oldcolorystep=24
  22.  
  23. minC=64
  24. maxC=96
  25. ;#define kC 8
  26.  
  27. calcRGBtoHSV
  28. ;  si = r/2-b/2;
  29. ;  c = r/2+b/2-g;
  30. ;  float rad = sqrt(si*si + c*c);
  31. ;  //TODO if (rad==0) ...
  32.  
  33. ;  //float a=atan2(si,c);
  34. ;  float a = asin(si/rad);
  35. ;  if (c<0) a = PI - a;
  36. ;  Memo1->Lines->Add("a="+FloatToStr(a));
  37. ;  h=a/(2*PI);
  38. ;  if (h<0) {h=h+1;}
  39.  
  40. ;  v = g/2 + r/4 + b/4;
  41.  
  42. ;  float scoeff = (1 - fabs((v-.5)*2) );
  43. ;  s = rad/scoeff/1.7;
  44.  
  45. ;d=r
  46. ;e=g
  47. ;b=b
  48.         call setpgpal
  49.         call setpgtemp
  50.        
  51.         srl d
  52.         srl b
  53.         srl e
  54.        
  55.         push bc
  56.         push de
  57.        
  58.         ld a,d ;r/2
  59.         sub b ;b/2
  60.         ld h,a ;h=si = +-0..127
  61.         ld l,0 ;isi=32768*si = +-0..32767
  62.         ld a,d ;r/2
  63.         add a,b ;b/2
  64.         rra;srl a
  65.         sub e ;a = (r/2+b/2-g)/2 = c/2
  66.         ld e,a ;c/2 = +-0..127 (ёююЄтхЄёЄтєхЄ -1..+1)
  67.          push af ;cy=S=чэръ c
  68.         ld d,tsqr/256
  69.         ld a,(de)
  70.         ld b,a ;c*c
  71.         ld e,h
  72.         sra e ;si/2 = +-0..63 (ёююЄтхЄёЄтєхЄ -.5..+.5)
  73.         ld a,(de) ;s*s
  74.         add a,b ;+c*c
  75.         ld e,a
  76.         inc d ;tsqrt/256
  77. ;рЁуєьхэЄ 0..255 (ёююЄтхЄёЄтєхЄ 0..2)
  78. ;Ёхчєы№ЄрЄ 0..127 (ёююЄтхЄёЄтєхЄ 0..1) ш т√°х
  79.         ld a,(de) ;rad = sqrt(si*si + c*c)
  80.         ld e,a
  81.         ld d,0
  82. ;hl=isi=32768*si = +-0..32767
  83. ;de=irad=128*rad = 0..127
  84.         call divhldesigned ;hl / de Ёхчєы№ЄрЄ т hl
  85. ;hl=256*(si/rad) = +-0..255
  86.         ;ld bc,256
  87.         ;add hl,bc
  88.         inc h ;hl = 0..511
  89.         sra h
  90.         rr l ;hl = 0..255 (хёыш ьхэ№°х шыш сюы№°х, Єю яюфуюэ хь)
  91.         ld a,h
  92.         or a
  93.         jp p,$+3+2
  94.         xor a
  95.         ld l,a ;хёыш ьхэ№°х
  96.         jr z,$+2+2
  97.         ld l,255 ;хёыш сюы№°х
  98.         ;ld bc,tarcsin ;0..128 ёююЄтхЄёЄтє■Є -1..0; 128..255 ёююЄтхЄёЄтє■Є 0..+1
  99.         ;add hl,bc
  100.         ld h,tarcsin/256
  101.          pop af ;cy=S=чэръ c
  102.         ld a,(hl) ;-50..50 ёююЄтхЄёЄтє■Є -pi/2..+pi/2
  103.         jr nc,calcRGBtoHSV_nonegcos
  104.         cpl
  105.         add a,100+1
  106. calcRGBtoHSV_nonegcos
  107. ;a=-50..150 ёююЄтхЄёЄтє■Є -pi/2..+3*pi/2
  108.         cp -50
  109.         jr c,calcRGBtoHSV_nonegarcsin
  110.         add a,200
  111. calcRGBtoHSV_nonegarcsin
  112. ;a=H=0..199 ёююЄтхЄёЄтє■Є 0..+2*pi
  113.         ld (curH),a
  114.        
  115.         pop de ;d=r/2, e=g/2
  116.         pop af ;b/2
  117.         ld b,3
  118.         srl a
  119.         srl d
  120.         srl e
  121.         djnz $-6
  122.         ;ld b,a
  123. ;dea = r,g,b = 0..15
  124.         ;ld a,b
  125.         ld (calcRGBtoHSV_findB),a
  126.         ld a,d
  127.         ld (calcRGBtoHSV_findR),a
  128.         ld a,e
  129.         ld (calcRGBtoHSV_findG),a
  130. ;яюфсшЁрхь s,v, яш°хь шї т curS, curV
  131.         ld hx,255 ;min
  132. ;l=iv=0..32 ;h=is=#e0+0..31
  133.         ld h,editpal_e0 ;S
  134. calcRGBtoHSV_findS0
  135.         ld l,32 ;V
  136. calcRGBtoHSV_findV0
  137.         ld a,(curH) ;a=h
  138. ;h=s
  139. ;l=v
  140.         push hl
  141.         call calcHSVtoRGB
  142. ;d'e'b' = r,g,b [h,s,v] = 0..15
  143.         exx
  144.         ld a,d
  145. calcRGBtoHSV_findR=$+1        
  146.         sub 0
  147.         jr nc,$+4
  148.         neg
  149.         ld c,a ;ЁрчэшЎр R
  150.         ld a,e
  151. calcRGBtoHSV_findG=$+1
  152.         sub 0
  153.         jr nc,$+4
  154.         neg
  155.         add a,c
  156.         ld c,a ;ЁрчэшЎр R+ЁрчэшЎр G
  157.         ld a,b
  158. calcRGBtoHSV_findB=$+1
  159.         sub 0
  160.         jr nc,$+4
  161.         neg
  162.         add a,c ;юс∙р  ЁрчэшЎр
  163.         exx
  164.         pop hl
  165.         cp hx ;min
  166.         jr nc,calcRGBtoHSV_findnomin
  167.         ld hx,a
  168.         ld a,l
  169.         ld (curV),a
  170.         ld a,h
  171.         ld (curS),a
  172. calcRGBtoHSV_findnomin
  173. ;l=iv=0..32 ;h=is=#e0+0..31
  174.         dec l
  175.         jp p,calcRGBtoHSV_findV0
  176.         inc h
  177.          ld a,h
  178.          cp editpal_e0+32
  179.         jr nz,calcRGBtoHSV_findS0
  180.        
  181.         jp setpgs_scr
  182.  
  183.         macro calcHSVtogfx_1
  184. ;  int isi = 4*s*tsin[ih]/kC;
  185. ;  int ic = 2*s*tsin[(64-ih)&0xff]/kC;
  186. ;  ir = iv + isi + ic + minC;
  187. ;  ig = iv +     - ic + minC;
  188. ;  ib = iv - isi + ic + minC;
  189. ;h=is=#c0+0..31 (єцх яхЁхёўшЄрэю фы  чрфрээюую iv)
  190. ;a=ih=0..199
  191. ;b=iv=0..32
  192. ;d=tabclippal/256 + (y&3)*2
  193.         ld l,a
  194.         ld e,(hl) ;isi = +-0..32 ;sin
  195.         sla e
  196.         add a,50 ;ўхЄтхЁЄ№ яхЁшюфр
  197.         ld l,a
  198.         ld c,(hl) ;ic = +-0..32 ;cos
  199.         endm
  200.        
  201.         macro calcHSVtogfx_2
  202.         ld a,b ;iv
  203.         sub c ;ic
  204.         ld d,a ;iv - ic
  205.  
  206.         ld a,b ;iv
  207.         add a,e ;isi = +-0..32
  208.         add a,c ;ic
  209.         ld l,a ;iv + isi + ic
  210.         ld b,(hl) ;h=tabclippal[y]/256
  211.         inc h
  212.         ld c,(hl)                            ;bc=%0000B00A %0000D00C [r]
  213.         sub e ;isi = +-0..32
  214.         sub e ;isi = +-0..32
  215.         ld l,a ;iv - isi + ic
  216.         ld e,(hl)
  217.         dec h
  218.         ld a,(hl) ;h=tabclippal[y]/256       ;ae=%0000B00A %0000D00C [b]
  219.  
  220.         ld l,d ;iv - ic
  221.         rlca
  222.         or (hl) ;h=tabclippal[y]/256       ;a=%0000B00A [g]
  223.         rlca
  224.         or b
  225.         ex af,af'
  226.        inc h
  227.        ld a,e ;h=tabclippal[y]/256 + 1   ;a=%0000D00C [g]
  228.        rlca
  229.        or (hl)
  230.        rlca
  231.        or c ;a'a = тючтЁр∙рхь 2 срщЄр (4 яшъёхы  яю уюЁшчюэЄрыш)
  232.         endm
  233.        
  234. ;т ярышЄЁх ЁхфръЄюЁр ярышЄЁ√ яхЁт√х 8 ЎтхЄют: BGR
  235.  
  236. copytemp_setpal
  237.         call setpgtemp
  238.         ld de,#ffe0
  239.         push de
  240.         ld bc,32
  241.         ldir
  242.         pop de
  243.         OS_SETPAL
  244.         ret
  245. paleditorpal
  246. ;DDp palette: %grbG11RB(low),%grbG11RB(high), шэтхЁёэ√х
  247. ;high B, high b, low B, low b
  248. paleditorpal_color=$+(8*2) ;тшфшь√щ ЎтхЄ
  249. paleditorpal_curcolor=$+(9*2) ;Єхъє∙шщ ЎтхЄ
  250. paleditorpal_oldcolors=$+(10*2) ;ёЄрЁ√х ЎтхЄр
  251.         dw #f3f3,#b1b1,#6363,#2121,#d2d2,#9090,#4242,#0000
  252.         dw #f3f3,#d2d2,#b1b1,#9090,#6363,#4242,#2121,#0000 ;8=тшфшь√щ ЎтхЄ, 9=Єхъє∙шщ ЎтхЄ, юёЄры№э√х ёЄрЁ√х
  253. paleditorpalend=$-1
  254. RSTPAL
  255.         ;dw #f3f3,#f2f2,#f1f1,#f0f0,#e3e3,#e2e2,#e1e1,#e0e0
  256.         ;dw #f3f3,#d2d2,#b1b1,#9090,#6363,#4242,#2121,#0000
  257.         STANDARDPAL
  258. RSTPALend=$-1
  259.  
  260. drawpal
  261.         call cls
  262.        
  263.         ld hl,paleditorpal
  264.         call copytemp_setpal
  265.  
  266.         call drawpalHS
  267.         call drawpalV
  268.  
  269.         call drawpalcolor ;тшфшь√щ ЎтхЄ
  270.         call drawpalcurcolor ;Єхъє∙шщ ЎтхЄ
  271. ;ёЄрЁ√х ЎтхЄр
  272.         call setpgshapes
  273.  
  274.         ld bc,editpal_oldcolory*256 + editpal_oldcolorx8 ;b=y ;c=x/8
  275.         ld hl,paleditorpal_oldcolors
  276.         ld a,%11010010 ;a=%33210210
  277. drawpaloldcolors0
  278.         push af
  279.         push bc
  280.         push hl
  281.         push bc
  282.         ld de,editpal_oldcolorhgt*256+editpal_oldcolorwid8 ;d=hgt ;e=wid8
  283.         call shapes_fillbox
  284.         pop bc
  285.         pop hl
  286.         ld e,(hl)
  287.         inc hl
  288.         ld d,(hl)
  289.         inc hl
  290.         push hl
  291.          ld a,c
  292.          add a,4*40 - 4
  293.          call calcscr_from_xchr_ya
  294.          set 5,h ;эр 4 яшъёхы  яЁртхх
  295.         call prhexcolor
  296.         pop hl
  297.         pop bc
  298.         ld a,b
  299.         add a,editpal_oldcolorystep
  300.         ld b,a
  301.         pop af
  302.         add a,%1001
  303.         cp #ff&(%11111111+%1001)
  304.         jr nz,drawpaloldcolors0
  305.        
  306. drawpal_cursors
  307.         call setpgshapes
  308.  
  309.         ld a,(curS) ;x
  310.         sub editpal_e0
  311.         ld l,a
  312.         ld h,0
  313.         add hl,hl
  314.         add hl,hl
  315.         ld a,(curH) ;y
  316.         call shapes_prarr_ring8c ;HS
  317.         ld hl,+(editpal_Vx8*8)+(editpal_Vwid8*4)
  318.         ld a,(curV) ;y
  319.         ld c,a
  320.         add a,a
  321.         add a,c
  322.         add a,a ;*6
  323.         add a,3
  324.         cpl
  325.         add a,200
  326.         jp shapes_prarr_ring8c
  327.        
  328. ;Єхъє∙шщ ЎтхЄ        
  329. drawpalcurcolor
  330.         call setpgshapes
  331.  
  332.         ld de,(paleditorpal_curcolor)
  333.         ld hl,#2000+(editpal_curcolory+editpal_curcolorhgt)*40+editpal_curcolorx8 + scrbase
  334.         call prhexcolor
  335.         ld bc,editpal_curcolory*256 + editpal_curcolorx8 ;b=y ;c=x/8
  336.         ld de,editpal_curcolorhgt*256+editpal_curcolorwid8 ;d=hgt ;e=wid8
  337.         ld a,%11001001 ;a=%33210210
  338.         jp shapes_fillbox
  339.  
  340. calchexcolor
  341. ;hl=color (DDp palette)
  342. ;DDp palette: %grbG11RB(low),%grbG11RB(high), шэтхЁёэ√х
  343. ;high B, high b, low B, low b
  344.         ld b,#ff
  345.         ld de,#ffff
  346.         ld a,h
  347.         rra
  348.         rl b ;B high
  349.         rra
  350.         rl d ;R high
  351.         rra
  352.         rra
  353.         rra
  354.         rl e ;G high
  355.         rra
  356.         rl b ;b high
  357.         rra
  358.         rl d ;r high
  359.         rra
  360.         rl e ;g high
  361.         ld a,l
  362.         rra
  363.         rl b ;B low
  364.         rra
  365.         rl d ;R low
  366.         rra
  367.         rra
  368.         rra
  369.         rl e ;G low
  370.         rra
  371.         rl b ;b low
  372.         rra
  373.         rl d ;r low
  374.         rra
  375.         rl e ;g low
  376. ;b=B
  377. ;d=R
  378. ;e=G
  379.         ld a,d ;R
  380.         cpl ;%0000rrrr
  381.         ld d,a
  382.         rlca
  383.         rlca
  384.         rlca
  385.         rlca
  386.         or d
  387.         ld d,a
  388.         ld a,e ;G
  389.         cpl ;%0000gggg
  390.         ld e,a
  391.         rlca
  392.         rlca
  393.         rlca
  394.         rlca
  395.         or e
  396.         ld e,a
  397.         ld a,b ;B
  398.         cpl ;%0000bbbb
  399.         ld b,a
  400.         rlca
  401.         rlca
  402.         rlca
  403.         rlca
  404.         or b
  405.         ld b,a
  406. ;b=#BB
  407. ;d=#RR
  408. ;e=#GG
  409.         ret
  410.        
  411. prhexcolor
  412. ;pgshapes!
  413. ;de=color (DDp palette)
  414. ;hl=screen        
  415.         ld lx,0
  416. ;DDp palette: %grbG11RB(low),%grbG11RB(high), шэтхЁёэ√х
  417. ;high B, high b, low B, low b
  418.         push hl
  419.         ex de,hl
  420.         call calchexcolor
  421.         pop hl
  422.         ld a,d ;R
  423.         call shapes_prhexbyte
  424.         ld a,e ;G
  425.         call shapes_prhexbyte
  426.         ld a,b ;B
  427.         jp shapes_prhexbyte
  428.        
  429.        
  430. drawpalHS
  431.         ld hl,editpal_HSx8 + scrbase
  432.         ld c,32 ;S
  433. drawpalcolumns0
  434.         xor a
  435.         sub c
  436.          add a,editpal_e0-#e0
  437.         ld (drawpalHS_S),a
  438.         push hl
  439.         ld de,40-#4000
  440.         ld b,200 ;H
  441. drawpalcolumn0
  442.         call setpgpal
  443.         call setpgtemp
  444.        
  445.         ld a,200
  446.         sub b ;a=ih=0..199
  447.         exx
  448. ;drawpalHS_V=$+1
  449. ;curV=$+1
  450. drawpalHS_S=$+2
  451.         ld hl,16 ;l=iv=0..32 ;h=is=#e0+0..31
  452.         ld h,(hl) ;h=is=#c0+0..31 (єцх яхЁхёўшЄрэю фы  чрфрээюую iv)
  453.         ld b,l ;b=iv=0..32
  454.         calcHSVtogfx_1
  455.         ;a=ih (эхьэюую шёърц╕ээюх), ёююЄтхЄёЄтєхЄ y
  456.         and 3
  457.         add a,a
  458.         add a,tabclippal/256
  459.         ld h,a ;d=tabclippal/256 + (y&3)*2
  460.         calcHSVtogfx_2
  461.  
  462.         push af
  463.         call setpgs_scr
  464.         pop af
  465.        
  466.         exx
  467.         ld (hl),a
  468.         set 6,h
  469.         ex af,af'
  470.        ld (hl),a
  471.        add hl,de
  472.        djnz drawpalcolumn0
  473.        pop hl
  474.        ld a,h
  475.        xor #20
  476.        ld h,a
  477.         and #20
  478.        jr nz,$+3
  479.        inc l
  480.        dec c
  481.        jr nz,drawpalcolumns0
  482.        ret
  483.        
  484. drawpalV
  485.        ld hl,editpal_Vx8+40 + scrbase
  486.        ld de,40-#4000
  487.        ld c,200/6-1 ;V
  488. drawpalVcolumn0
  489.        ld b,6
  490. drawpalVcolumn00
  491.        call setpgpal
  492.        call setpgtemp
  493.        
  494.        ld a,c
  495.        exx
  496.        ld l,a ;l=iv=0..32
  497. curS=$+1
  498.        ld h,editpal_e0+16 ;h=is=#e0+0..31
  499.        ld h,(hl) ;h=is=#c0+0..31 (єцх яхЁхёўшЄрэю фы  чрфрээюую iv)
  500.        ld b,l ;b=iv=0..32
  501. curH=$+1
  502.        ld a,0
  503.        calcHSVtogfx_1
  504.        exx
  505.        ld a,c
  506.        add a,a
  507.        add a,b
  508.        exx ;a=y
  509.        and 3
  510.        add a,a
  511.        add a,tabclippal/256
  512.        ld h,a ;d=tabclippal/256 + (y&3)*2
  513.        calcHSVtogfx_2
  514.  
  515.        push af
  516.        call setpgs_scr
  517.        pop af
  518.        
  519.        exx
  520.        dup editpal_Vwid8-1
  521.        ld (hl),a
  522.        inc hl
  523.        edup
  524.        ld (hl),a
  525.        set 5,h
  526.        dup editpal_Vwid8-1
  527.        ld (hl),a
  528.        dec hl
  529.        edup
  530.        ld (hl),a
  531.        set 6,h
  532.        ex af,af'
  533.         dup editpal_Vwid8-1
  534.         ld (hl),a
  535.         inc hl
  536.         edup
  537.         ld (hl),a
  538.         res 5,h
  539.         dup editpal_Vwid8-1
  540.         ld (hl),a
  541.         dec hl
  542.         edup
  543.         ld (hl),a
  544.         add hl,de
  545.         djnz drawpalVcolumn00
  546.         dec c
  547.         jp p,drawpalVcolumn0
  548.         ret
  549.        
  550. drawpal_countpixels
  551.         push bc
  552.         push de
  553.         calcHSVtogfx_2
  554. ;d'=r, e'=g
  555. ;b'=b
  556. ;a'a=фтр ЎтхЄр = %00bgrbgr
  557.         exx
  558.         rra
  559.         jr nc,$+3
  560.         inc d ;r
  561.         rra
  562.         jr nc,$+3
  563.         inc e ;g
  564.         rra
  565.         jr nc,$+3
  566.         inc b ;b
  567.         rra
  568.         jr nc,$+3
  569.         inc d ;r
  570.         rra
  571.         jr nc,$+3
  572.         inc e ;g
  573.         rra
  574.         jr nc,$+3
  575.         inc b ;b
  576.         ex af,af'
  577.        rra
  578.        jr nc,$+3
  579.        inc d ;r
  580.        rra
  581.        jr nc,$+3
  582.        inc e ;g
  583.        rra
  584.        jr nc,$+3
  585.        inc b ;b
  586.        rra
  587.        jr nc,$+3
  588.        inc d ;r
  589.        rra
  590.        jr nc,$+3
  591.        inc e ;g
  592.        rra
  593.        jr nc,$+3
  594.        inc b ;b
  595.        exx
  596.        pop de
  597.        pop bc
  598.        ret
  599.        
  600. calcHSVtoRGB
  601. ;a=h
  602. ;h=s
  603. ;l=v
  604.        exx
  605.        ld b,0 ;b=b
  606.        ld d,b
  607.        ld e,b ;d=r, e=g
  608.        exx
  609.        ld h,(hl) ;h=is=#c0+0..31 (єцх яхЁхёўшЄрэю фы  чрфрээюую iv)
  610.        ld b,l ;b=iv=0..32
  611.        calcHSVtogfx_1
  612.        ld h,tabclippal/256 ;d=tabclippal/256 + (y&3)*2
  613.        call drawpal_countpixels
  614.        ld h,tabclippal/256+2 ;d=tabclippal/256 + (y&3)*2
  615.        call drawpal_countpixels
  616.        ld h,tabclippal/256+4 ;d=tabclippal/256 + (y&3)*2
  617.        call drawpal_countpixels
  618.        ld h,tabclippal/256+6 ;d=tabclippal/256 + (y&3)*2
  619.        call drawpal_countpixels
  620.        exx
  621.        bit 4,b
  622.        jr z,$+3
  623.        dec b
  624.        bit 4,d
  625.        jr z,$+3
  626.        dec d
  627.        bit 4,e
  628.        jr z,$+3
  629.        dec e
  630.        exx
  631. ;d'=r, e'=g
  632. ;b'=b
  633. ;0..15
  634.         ret
  635.        
  636. drawpal_HSVtocolor
  637.         call setpgpal
  638.         call setpgtemp
  639.        
  640.         ld hl,(curS-1) ;h=is=#e0+0..31
  641. curV=$+1
  642.         ld l,0 ;l=iv=0..32
  643.         ld a,(curH)
  644. ;a=h ;h=s ;l=v
  645.         call calcHSVtoRGB
  646.         exx
  647. ;d=r, e=g, b=b = 0..15
  648.         ld a,d
  649.         rla
  650.         rla
  651.         rla
  652.         rla
  653.         ld l,a ;R
  654.         ld a,e
  655.         rla
  656.         rla
  657.         rla
  658.         rla
  659.         ld d,a ;G
  660.         ld a,b
  661.         rla
  662.         rla
  663.         rla
  664.         rla
  665.         ld e,a ;B
  666. ;e=B, d=G, l=R
  667.         call calcRGBtopal_pp
  668.         ld b,a
  669.         call calcRGBtopal_pp
  670.         ld c,a
  671. ;b,c=%grbG11RB
  672.         ld (paleditorpal_color),bc
  673.         jp setpgs_scr
  674.  
  675. calcRGBtopal_pp
  676. ;e=B, d=G, l=R
  677. ;DDp palette: %grbG11RB(low),%grbG11RB(high), шэтхЁёэ√х
  678.         xor a
  679.         rl e  ;B
  680.         rra
  681.         rl l  ;R
  682.         rra
  683.         rrca
  684.         rrca
  685.         rl d  ;G
  686.         rra
  687.         rl e  ;b
  688.         rra
  689.         rl l  ;r
  690.         rra
  691.         rl d  ;g
  692.         rra
  693.         cpl
  694.         ret
  695.  
  696. drawpalcolor
  697.         ld hl,paleditorpal
  698.         call copytemp_setpal
  699.         call setpgs_scr
  700.  
  701.         call setpgshapes
  702.  
  703.         ld de,(paleditorpal_color)
  704.         ld hl,#2000+(editpal_colory+editpal_colorhgt)*40+editpal_colorx8 + scrbase
  705.         call prhexcolor
  706.  
  707.         ;ld hl,paleditorpalend
  708.         ;call setpalhl
  709.  
  710.         ld bc,editpal_colory*256 + editpal_colorx8 ;b=y ;c=x/8
  711.         ld de,editpal_colorhgt*256+editpal_colorwid8 ;d=hgt ;e=wid8
  712.         ld a,%11000000 ;a=%33210210
  713.         jp shapes_fillbox
  714.        
  715.        
  716. editpal
  717. ;hl=ЁхфръЄшЁєхь√щ ЎтхЄ
  718.         ld (editpal_quitsp),sp
  719.         push hl
  720.  
  721.         call initpal ;ёюёЄртыхэшх ЄрсышЎ
  722.        
  723.         ld hl,paleditorpalend-2 ;paleditorpal_curcolor+...
  724.         ld de,paleditorpalend ;paleditorpal_oldcolors+...
  725.         ld bc,paleditorpalend+1-paleditorpal_oldcolors
  726.         lddr
  727.         pop hl
  728.         ld (paleditorpal_curcolor),hl
  729.         push hl
  730.         call calchexcolor
  731.         call calcRGBtoHSV ;эрчэрўрхЄ curH,curS,curV
  732.         pop hl
  733.         ld (paleditorpal_color),hl ;яюЄюь, ўЄюс√ Єюўэхх юёЄртшЄ№ ЎтхЄ
  734.        
  735.         call drawpal
  736.        
  737.         ld a,ZONE_NO
  738.         ld (prarr_zone),a
  739.        
  740. editpalloop
  741. ;1. тё╕ т√тюфшь
  742. ;2. цф╕ь ёюс√Єшх
  743. ;3. тё╕ ёЄшЁрхь
  744. ;4. юсЁрсрЄ√трхь ёюс√Єшх
  745.         call setpgshapes
  746.  
  747.         ;call ahl_coords
  748.         ;call invarrzone
  749.         call ahl_coords
  750.         call shapes_memorizearr
  751.         call ahl_coords
  752.         call shapes_prarr8c
  753.        
  754.         call waitsomething ;т ¤Єю тЁхь  ёЄЁхыър тшфэр
  755. ;ўЄю-Єю шчьхэшыюё№
  756.        
  757.         call ahl_oldcoords
  758.         call shapes_rearr
  759.         ;call ahl_oldcoords
  760.         ;call invarrzone ;шэтхЁЄшЁютрЄ№ яєэъЄ яюф ёЄЁхыъющ
  761.        
  762.         ld a,(key)
  763.         cp key_redraw
  764.         call z,drawpal
  765.         ld a,(mousebuttons)
  766.         cpl
  767.         and 7
  768.         call nz,editpal_fire
  769.         jr editpalloop
  770.  
  771. editpal_fire
  772. ;editpal_rmb
  773.         ld hl,(arrx)
  774.         ld a,l
  775.         srl h
  776.         rra
  777.         srl h
  778.         rra
  779. ;editpal_HSx8=0
  780. ;editpal_HSwid8=16
  781. ;editpal_Vx8=20
  782. ;editpal_Vwid8=4
  783.         sub editpal_HSx8*2
  784.         ret c ;jr c,editpal_fire_or_rmbq
  785.         cp editpal_HSwid8*2
  786.         jr c,editpal_fire_or_rmbHS
  787.         sub +(editpal_Vx8*2)-(editpal_HSx8*2)
  788.         ret c ;jr c,editpal_fire_or_rmbq
  789.         cp editpal_Vwid8*2
  790.         jr c,editpal_fire_or_rmbV
  791.         sub +(editpal_colorx8*2)-(editpal_Vx8*2)
  792.         ret c ;jr c,editpal_fire_or_rmbq
  793.         cp editpal_colorwid8*2
  794.         jr c,editpal_fire_or_rmbsetcolor
  795.         sub +(editpal_curcolorx8*2)-(editpal_colorx8*2)
  796.         ret c ;jr c,editpal_fire_or_rmbq
  797.         cp editpal_curcolorwid8*2
  798.         jr c,editpal_fire_or_rmbsetcurcolor
  799. ;editpal_fire_or_rmbq
  800.  
  801.         ret
  802.  
  803. editpal_fire_or_rmbHS
  804. ;a=x/4=0..31
  805.         push af
  806.         call drawpal_cursors
  807.         pop af
  808.         add a,editpal_e0
  809.         ld (curS),a
  810.         ld a,(arry)
  811.         ld (curH),a
  812.         call drawpal_HSVtocolor
  813. editpal_fire_redrawpals
  814.         call drawpalV
  815.         call drawpalcolor
  816.         jp drawpal_cursors
  817.        
  818. editpal_fire_or_rmbV
  819.         call drawpal_cursors
  820.         ld a,(arry) ;0..199
  821.         cpl
  822.         add a,200
  823.         jr z,$+3
  824.         dec a ;0..198
  825.         ld c,-1
  826.         sub 6
  827.         inc c
  828.         jr nc,$-3 ;c=a/6
  829.         ld a,32
  830.         cp c
  831.         jr c,$+3 ;c>32
  832.         ld a,c ;c<=32
  833.         ld (curV),a ;0..32
  834.         ;call drawpalHS
  835.         ;call drawpalV
  836.         call drawpal_HSVtocolor
  837.         call drawpalcolor
  838.         jp drawpal_cursors
  839.        
  840. editpal_fire_or_rmbsetcolor
  841. ;єёЄрэютшЄ№ ЎтхЄ ш т√щЄш
  842.         ld a,(arry) ;0..199
  843.         sub editpal_colory
  844.         cp editpal_colorhgt
  845.         ret nc
  846.         ld hl,(paleditorpal_color)
  847.         ld (paleditorpal_curcolor),hl ;ўЄюс√ тшфхЄ№ эр ёыхфє■∙хь тїюфх
  848.         ;jp editpal_quit ;hl=ЎтхЄ-Ёхчєы№ЄрЄ
  849. editpal_quit
  850.         ld hl,(paleditorpal_curcolor) ;ъръ с√ыю
  851. ;hl=ЎтхЄ-Ёхчєы№ЄрЄ
  852. editpal_quitsp=$+1
  853.         ld sp,0
  854.         ret
  855.  
  856. editpal_fire_or_rmbsetcurcolor
  857.         ld a,(arry)
  858.         sub editpal_curcolory
  859.         cp editpal_curcolorhgt
  860.         jr c,editpal_quit ;hl=ЎтхЄ-Ёхчєы№ЄрЄ
  861.         sub editpal_oldcolory-editpal_curcolory
  862.         ld hl,paleditorpal_oldcolors
  863.         ld b,6
  864. editpal_fire_or_rmbsetoldcolor0
  865.         cp editpal_oldcolorhgt
  866.         jr c,editpal_fire_or_rmbsetoldcolorok
  867.         sub editpal_oldcolorystep
  868.         inc hl
  869.         inc hl
  870.         djnz editpal_fire_or_rmbsetoldcolor0
  871.         ret
  872.  
  873. editpal_fire_or_rmbsetoldcolorok
  874.         push hl
  875.         call drawpal_cursors
  876.         pop hl
  877.         ld a,(hl)
  878.         inc hl
  879.         ld h,(hl)
  880.         ld l,a
  881.         ld (paleditorpal_color),hl
  882.         push hl
  883.         call calchexcolor
  884.         call calcRGBtoHSV ;эрчэрўрхЄ curH,curS,curV
  885.         pop hl
  886.         ld (paleditorpal_color),hl ;яюЄюь, ўЄюс√ Єюўэхх юёЄртшЄ№ ЎтхЄ
  887.         jp editpal_fire_redrawpals ;Єрь drawpal_cursors
  888.  
  889. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ╚эшЎшрышчрЎш  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
  890.  
  891. initpal
  892.         call setpgpal
  893.         call setpgtemp
  894.        
  895.         ld hl,tsin
  896. initpalmuls0        
  897.         push hl
  898.         ld a,(hl)
  899.         ld c,a
  900.         rla
  901.         sbc a,a
  902.         ld b,a ;bc=-127..+127
  903.         ld e,l
  904.         ld d,editpal_c0
  905.         ld hl,0
  906. initpalmul0
  907.         ld a,h
  908.         ld (de),a
  909.         add hl,bc
  910.         add hl,bc
  911.         inc d
  912.         bit 5,d
  913.         jr z,initpalmul0
  914.         pop hl
  915.         inc l
  916.         jr nz,initpalmuls0 ;трцэ√ 0..200
  917.  
  918. ;mktabfixsaturation
  919. ;  int scoeff = (1 - ((v-.5)*2)*((v-.5)*2) )*256;
  920. ;h=is=#e0+0..31
  921. ;l=iv=0..32
  922. ;(hl) = is*scoeff/256 + #c0
  923.  
  924.         ld h,l ;hl=0
  925. initpalfixsat_volumes0
  926.         push hl
  927. ;scoeff = (1 - ((v-.5)*2)*((v-.5)*2) )*256*8;
  928.         ld e,l
  929.         ld d,editpal_e0
  930.         ;ld h,tscoeff/256
  931.         ld bc,tscoeff
  932.         add hl,bc
  933.         ld c,(hl) ;0..255
  934.         ld b,0
  935.         ld hl,editpal_c0*256
  936. initpalfixsat0
  937.         ld a,h
  938.         ld (de),a
  939.         add hl,bc ;ьръёшьєь єьэюцшыш эр 31
  940.         inc d
  941.          ld a,d
  942.          cp editpal_e0+32
  943.         jr nz,initpalfixsat0
  944.         pop hl
  945.         inc l
  946.         jr nz,initpalfixsat_volumes0
  947.        
  948. ;mktabclippal
  949. ;(hl) = %0000B00A [L]
  950. ;(hl+256) = %0000D00C [L]
  951.  
  952. ;  if (ir<minC) ir=minC; if (ir>=maxC) ir=maxC-1;
  953. ;  if (ig<minC) ig=minC; if (ig>=maxC) ig=maxC-1;
  954. ;  if (ib<minC) ib=minC; if (ib>=maxC) ib=maxC-1;
  955.  
  956. ;  ir = (ir-minC)*kC;
  957. ;  ig = (ig-minC)*kC;
  958. ;  ib = (ib-minC)*kC;
  959.  
  960.         ld hl,tchunkpixelnumber
  961.         ld de,tabclippal
  962. mktabclippals0
  963.  
  964. mktabclippal0
  965.         ld a,e
  966.         cp -minC
  967.         jr c,$+3
  968.         xor a
  969.         add a,a
  970.         jr c,calcHSVtoRGB_maxR
  971.         add a,a
  972.         jr c,calcHSVtoRGB_maxR
  973.         add a,a
  974.         jr nc,calcHSVtoRGB_nomaxR
  975. calcHSVtoRGB_maxR
  976.         sbc a,a
  977. calcHSVtoRGB_nomaxR
  978.          push hl
  979.         ld bc,0
  980.         cp (hl)
  981.         inc hl
  982.         jr c,$+3;4
  983.         inc c ;set 0,c
  984.         cp (hl)
  985.         inc hl
  986.         jr c,$+4
  987.         set 3,c
  988.         cp (hl)
  989.         inc hl
  990.         jr c,$+3;4
  991.         inc b ;set 0,b
  992.         cp (hl)
  993.         jr c,$+4
  994.         set 3,b
  995.          pop hl
  996.         ld a,c
  997.         ld (de),a
  998.         inc d
  999.         ld a,b
  1000.         ld (de),a
  1001.         dec d
  1002.         inc e
  1003.         jr nz,mktabclippal0
  1004.         ld bc,4
  1005.         add hl,bc
  1006.         inc d
  1007.         inc d
  1008.         ld a,d
  1009.         cp tabclippal/256+8
  1010.         jr nz,mktabclippals0
  1011.        
  1012.         jp setpgs_scr
  1013.        
  1014. tchunkpixelnumber
  1015.         db 0x01, 0xc1, 0x61, 0xa1
  1016.         db 0x91, 0x41, 0x11, 0xd1
  1017.         db 0xe1, 0x71, 0xb1, 0x31
  1018.         db 0x51, 0x21, 0x81, 0xf1
  1019.  
  1020. tscoeff
  1021. ;iv = 0..32
  1022. ;scoeff = (1 - ((v-.5)*2)*((v-.5)*2) )*256*8
  1023. ;        dup 256
  1024. ;_=($&#ff-16)*2
  1025. ;        db #ff&((1024-(_*_))/32)
  1026. ;        edup
  1027. _=0
  1028.         dup 8
  1029.         db _
  1030. _=_+18
  1031.         edup
  1032.         dup 8
  1033.         db _
  1034. _=_+10
  1035.         edup
  1036.         db #ff
  1037.         dup 8
  1038. _=_-10
  1039.         db _
  1040.         edup
  1041.         dup 8
  1042. _=_-18
  1043.         db _
  1044.         edup
  1045.