?login_element?

Subversion Repositories NedoOS

Rev

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

  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 (бRRвў_вбвўг_в -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 (бRRвў_вбвўг_в -.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 (бRRвў_вбвўг_в 0..2)
  78. ;а_г<мв в 0..127 (бRRвў_вбвўг_в 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 (_б<Ё ┐_-ми_ Ё<Ё ЎR<ми_, вR ЇR¤_R-п_┐)
  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 ;_б<Ё ЎR<ми_
  98.         ;ld bc,tarcsin ;0..128 бRRвў_вбвўгов -1..0; 128..255 бRRвў_вбвўгов 0..+1
  99.         ;add hl,bc
  100.         ld h,tarcsin/256
  101.          pop af ;cy=S=- Є c
  102.         ld a,(hl) ;-50..50 бRRвў_вбвўгов -pi/2..+pi/2
  103.         jr nc,calcRGBtoHSV_nonegcos
  104.         cpl
  105.         add a,100+1
  106. calcRGBtoHSV_nonegcos
  107. ;a=-50..150 бRRвў_вбвўгов -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 бRRвў_вбвўгов 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. ;ЇR¤ЎЁа _┐ s,v, ЇЁи_┐ Ёе ў curS, curV
  131.         ld hx,255 ;min
  132. ;l=iv=0..32 ;h=is=0xe0+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 ;RЎй п а -Ёж 
  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=0xe0+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=0xc0+0..31 (г│_ Ї_а_бзЁв -R ¤<п  ¤ --R_R 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 ;з_вў_авм Ї_аЁR¤ 
  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 = ўRўа й _┐ 2 Ў cв  (4 ЇЁЄб_<п ЇR _RаЁR-в <Ё)
  232.         endm
  233.        
  234. ;ў Ї <Ёва_ а_¤ ЄвRа  Ї <Ёвал Ї_аўл_ 8 жў_вRў: BGR
  235.  
  236. paleditorpal
  237. ;DDp palette: %grbG11RB(low),%grbG11RB(high), Ё-ў_аб-л_
  238. ;high B, high b, low B, low b
  239. paleditorpal_color=$+(8*2) ;ўЁ¤Ё┐лc жў_в
  240. paleditorpal_curcolor=$+(9*2) ;в_ЄгйЁc жў_в
  241. paleditorpal_oldcolors=$+(10*2) ;бв ал_ жў_в 
  242.         dw 0xffff,0xbdbd,0x6f6f,0x2d2d,0xdede,0x9c9c,0x4e4e,0x0c0c
  243.         dw 0xffff,0xdede,0xbdbd,0x9c9c,0x6f6f,0x4e4e,0x2d2d,0x0c0c ;8=ўЁ¤Ё┐лc жў_в, 9=в_ЄгйЁc жў_в, Rбв <м-л_ бв ал_
  244. paleditorpalend=$-1
  245. RSTPAL
  246.         STANDARDPAL
  247. RSTPALend=$-1
  248.  
  249. drawpal
  250.         call cls
  251.        
  252.         ld de,paleditorpal
  253.         call setpal_de
  254.  
  255.         call drawpalHS
  256.         call drawpalV
  257.  
  258.         call drawpalcolor ;ўЁ¤Ё┐лc жў_в
  259.         call drawpalcurcolor ;в_ЄгйЁc жў_в
  260. ;бв ал_ жў_в 
  261.         call setpgshapes
  262.  
  263.         ld bc,editpal_oldcolory*256 + editpal_oldcolorx8 ;b=y ;c=x/8
  264.         ld hl,paleditorpal_oldcolors
  265.         ld a,0xd2;%11010010 ;a=%33210210
  266. drawpaloldcolors0
  267.         push af
  268.         push bc
  269.         push hl
  270.         push bc
  271.         ld de,editpal_oldcolorhgt*256+editpal_oldcolorwid8 ;d=hgt ;e=wid8
  272.         call shapes_fillbox
  273.         pop bc
  274.         pop hl
  275.         ld e,(hl)
  276.         inc hl
  277.         ld d,(hl)
  278.         inc hl
  279.         push hl
  280.          ld a,c
  281.          add a,4*40 - 4
  282.          call calcscr_from_xchr_ya
  283.          set 5,h ;-  4 ЇЁЄб_<п Їа ў__
  284.         call prhexcolor
  285.         pop hl
  286.         pop bc
  287.         ld a,b
  288.         add a,editpal_oldcolorystep
  289.         ld b,a
  290.         pop af
  291.         add a,9;%1001
  292.         cp 0xff&(0xff+9);(%11111111+%1001)
  293.         jr nz,drawpaloldcolors0
  294.        
  295. drawpal_cursors
  296.         call setpgshapes
  297.  
  298.         ld a,(curS) ;x
  299.         sub editpal_e0
  300.         ld l,a
  301.         ld h,0
  302.         add hl,hl
  303.         add hl,hl
  304.         ld a,(curH) ;y
  305.         call shapes_prarr_ring8c ;HS
  306.         ld hl,+(editpal_Vx8*8)+(editpal_Vwid8*4)
  307.         ld a,(curV) ;y
  308.         ld c,a
  309.         add a,a
  310.         add a,c
  311.         add a,a ;*6
  312.         add a,3
  313.         cpl
  314.         add a,200
  315.         jp shapes_prarr_ring8c
  316.        
  317. ;в_ЄгйЁc жў_в        
  318. drawpalcurcolor
  319.         call setpgshapes
  320.  
  321.         ld de,(paleditorpal_curcolor)
  322.         ld hl,0x2000+((editpal_curcolory+editpal_curcolorhgt)*40)+editpal_curcolorx8 + scrbase
  323.         call prhexcolor
  324.         ld bc,editpal_curcolory*256 + editpal_curcolorx8 ;b=y ;c=x/8
  325.         ld de,editpal_curcolorhgt*256+editpal_curcolorwid8 ;d=hgt ;e=wid8
  326.         ld a,0xc9;%11001001 ;a=%33210210
  327.         jp shapes_fillbox
  328.  
  329. calchexcolor
  330. ;keep c!!!
  331. ;hl=color (DDp palette)
  332. ;DDp palette: %grbG11RB(low),%grbG11RB(high), Ё-ў_аб-л_
  333. ;high B, high b, low B, low b
  334.         ld b,0xff
  335.         ld de,0xffff
  336.         ld a,h
  337.         rra
  338.         rl b ;B high
  339.         rra
  340.         rl d ;R high
  341.         rra
  342.         rra
  343.         rra
  344.         rl e ;G high
  345.         rra
  346.         rl b ;b high
  347.         rra
  348.         rl d ;r high
  349.         rra
  350.         rl e ;g high
  351.         ld a,l
  352.         rra
  353.         rl b ;B low
  354.         rra
  355.         rl d ;R low
  356.         rra
  357.         rra
  358.         rra
  359.         rl e ;G low
  360.         rra
  361.         rl b ;b low
  362.         rra
  363.         rl d ;r low
  364.         rra
  365.         rl e ;g low
  366. ;b=B
  367. ;d=R
  368. ;e=G
  369.         ld a,d ;R
  370.         cpl ;%0000rrrr
  371.         ld d,a
  372.         rlca
  373.         rlca
  374.         rlca
  375.         rlca
  376.         or d
  377.         ld d,a
  378.         ld a,e ;G
  379.         cpl ;%0000gggg
  380.         ld e,a
  381.         rlca
  382.         rlca
  383.         rlca
  384.         rlca
  385.         or e
  386.         ld e,a
  387.         ld a,b ;B
  388.         cpl ;%0000bbbb
  389.         ld b,a
  390.         rlca
  391.         rlca
  392.         rlca
  393.         rlca
  394.         or b
  395.         ld b,a
  396. ;b=0xBB
  397. ;d=0xRR
  398. ;e=0xGG
  399.         ret
  400.        
  401. prhexcolor
  402. ;pgshapes!
  403. ;de=color (DDp palette)
  404. ;hl=screen        
  405.         ld ix,0x3f00 ;lx=background color
  406. ;DDp palette: %grbG11RB(low),%grbG11RB(high), Ё-ў_аб-л_
  407. ;high B, high b, low B, low b
  408.         push hl
  409.         ex de,hl
  410.         call calchexcolor
  411.         pop hl
  412.         ld a,d ;R
  413.         call shapes_prhexbyte
  414.         ld a,e ;G
  415.         call shapes_prhexbyte
  416.         ld a,b ;B
  417.         jp shapes_prhexbyte
  418.        
  419.        
  420. drawpalHS
  421.         ld hl,editpal_HSx8 + scrbase
  422.         ld c,32 ;S
  423. drawpalcolumns0
  424.         xor a
  425.         sub c
  426.          add a,editpal_e0-0xe0
  427.         ld (drawpalHS_S),a
  428.         push hl
  429.         ld de,40-0x4000
  430.         ld b,200 ;H
  431. drawpalcolumn0
  432.         call setpgpal
  433.         call setpgtemp
  434.        
  435.         ld a,200
  436.         sub b ;a=ih=0..199
  437.         exx
  438. ;drawpalHS_V=$+1
  439. ;curV=$+1
  440. drawpalHS_S=$+2
  441.         ld hl,16 ;l=iv=0..32 ;h=is=0xe0+0..31
  442.         ld h,(hl) ;h=is=0xc0+0..31 (г│_ Ї_а_бзЁв -R ¤<п  ¤ --R_R iv)
  443.         ld b,l ;b=iv=0..32
  444.         calcHSVtogfx_1
  445.         ;a=ih (-_┐-R_R ЁбЄ │с--R_), бRRвў_вбвўг_в y
  446.         and 3
  447.         add a,a
  448.         add a,tabclippal/256
  449.         ld h,a ;d=tabclippal/256 + (y&3)*2
  450.         calcHSVtogfx_2
  451.  
  452.         push af
  453.         call setpgs_scr
  454.         pop af
  455.        
  456.         exx
  457.         ld (hl),a
  458.         set 6,h
  459.         ex af,af'
  460.        ld (hl),a
  461.        add hl,de
  462.        djnz drawpalcolumn0
  463.        pop hl
  464.        ld a,h
  465.        xor 0x20
  466.        ld h,a
  467.         and 0x20
  468.        jr nz,$+3
  469.        inc l
  470.        dec c
  471.        jr nz,drawpalcolumns0
  472.        ret
  473.        
  474. drawpalV
  475.        ld hl,editpal_Vx8+40 + scrbase
  476.        ld de,40-0x4000
  477.        ld c,200/6-1 ;V
  478. drawpalVcolumn0
  479.        ld b,6
  480. drawpalVcolumn00
  481.        call setpgpal
  482.        call setpgtemp
  483.        
  484.        ld a,c
  485.        exx
  486.        ld l,a ;l=iv=0..32
  487. curS=$+1
  488.        ld h,editpal_e0+16 ;h=is=0xe0+0..31
  489.        ld h,(hl) ;h=is=0xc0+0..31 (г│_ Ї_а_бзЁв -R ¤<п  ¤ --R_R iv)
  490.        ld b,l ;b=iv=0..32
  491. curH=$+1
  492.        ld a,0
  493.        calcHSVtogfx_1
  494.        exx
  495.        ld a,c
  496.        add a,a
  497.        add a,b
  498.        exx ;a=y
  499.        and 3
  500.        add a,a
  501.        add a,tabclippal/256
  502.        ld h,a ;d=tabclippal/256 + (y&3)*2
  503.        calcHSVtogfx_2
  504.  
  505.        push af
  506.        call setpgs_scr
  507.        pop af
  508.        
  509.        exx
  510.        dup editpal_Vwid8-1
  511.        ld (hl),a
  512.        inc hl
  513.        edup
  514.        ld (hl),a
  515.        set 5,h
  516.        dup editpal_Vwid8-1
  517.        ld (hl),a
  518.        dec hl
  519.        edup
  520.        ld (hl),a
  521.        set 6,h
  522.        ex af,af'
  523.         dup editpal_Vwid8-1
  524.         ld (hl),a
  525.         inc hl
  526.         edup
  527.         ld (hl),a
  528.         res 5,h
  529.         dup editpal_Vwid8-1
  530.         ld (hl),a
  531.         dec hl
  532.         edup
  533.         ld (hl),a
  534.         add hl,de
  535.         djnz drawpalVcolumn00
  536.         dec c
  537.         jp p,drawpalVcolumn0
  538.         ret
  539.        
  540. drawpal_countpixels
  541.         push bc
  542.         push de
  543.         calcHSVtogfx_2
  544. ;d'=r, e'=g
  545. ;b'=b
  546. ;a'a=¤ў  жў_в  = %00bgrbgr
  547.         exx
  548.         rra
  549.         jr nc,$+3
  550.         inc d ;r
  551.         rra
  552.         jr nc,$+3
  553.         inc e ;g
  554.         rra
  555.         jr nc,$+3
  556.         inc b ;b
  557.         rra
  558.         jr nc,$+3
  559.         inc d ;r
  560.         rra
  561.         jr nc,$+3
  562.         inc e ;g
  563.         rra
  564.         jr nc,$+3
  565.         inc b ;b
  566.         ex af,af'
  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.        rra
  577.        jr nc,$+3
  578.        inc d ;r
  579.        rra
  580.        jr nc,$+3
  581.        inc e ;g
  582.        rra
  583.        jr nc,$+3
  584.        inc b ;b
  585.        exx
  586.        pop de
  587.        pop bc
  588.        ret
  589.        
  590. calcHSVtoRGB
  591. ;a=h
  592. ;h=s
  593. ;l=v
  594.        exx
  595.        ld b,0 ;b=b
  596.        ld d,b
  597.        ld e,b ;d=r, e=g
  598.        exx
  599.        ld h,(hl) ;h=is=0xc0+0..31 (г│_ Ї_а_бзЁв -R ¤<п  ¤ --R_R iv)
  600.        ld b,l ;b=iv=0..32
  601.        calcHSVtogfx_1
  602.        ld h,tabclippal/256 ;d=tabclippal/256 + (y&3)*2
  603.        call drawpal_countpixels
  604.        ld h,tabclippal/256+2 ;d=tabclippal/256 + (y&3)*2
  605.        call drawpal_countpixels
  606.        ld h,tabclippal/256+4 ;d=tabclippal/256 + (y&3)*2
  607.        call drawpal_countpixels
  608.        ld h,tabclippal/256+6 ;d=tabclippal/256 + (y&3)*2
  609.        call drawpal_countpixels
  610.        exx
  611.        bit 4,b
  612.        jr z,$+3
  613.        dec b
  614.        bit 4,d
  615.        jr z,$+3
  616.        dec d
  617.        bit 4,e
  618.        jr z,$+3
  619.        dec e
  620.        exx
  621. ;d'=r, e'=g
  622. ;b'=b
  623. ;0..15
  624.         ret
  625.        
  626. drawpal_HSVtocolor
  627.         call setpgpal
  628.         call setpgtemp
  629.        
  630.         ld hl,(curS-1) ;h=is=0xe0+0..31
  631. curV=$+1
  632.         ld l,0 ;l=iv=0..32
  633.         ld a,(curH)
  634. ;a=h ;h=s ;l=v
  635.         call calcHSVtoRGB
  636.         exx
  637. ;d=r, e=g, b=b = 0..15
  638.          ld a,(t444)
  639.          cp '4'
  640.          jr z,drawpal_HSVtocolor_no222
  641.          ld a,d
  642.          call col4to2
  643.          ld d,a
  644.          ld a,e
  645.          call col4to2
  646.          ld e,a
  647.          ld a,b
  648.          call col4to2
  649.          ld b,a
  650. drawpal_HSVtocolor_no222
  651.         ld a,d
  652.         rla
  653.         rla
  654.         rla
  655.         rla
  656.         ld l,a ;R
  657.         ld a,e
  658.         rla
  659.         rla
  660.         rla
  661.         rla
  662.         ld d,a ;G
  663.         ld a,b
  664.         rla
  665.         rla
  666.         rla
  667.         rla
  668.         ld e,a ;B
  669. ;e=B, d=G, l=R
  670.         call calcRGBtopal_pp
  671.         ld b,a
  672.         call calcRGBtopal_pp
  673.         ld c,a
  674. ;b,c=%grbG11RB
  675.         ld (paleditorpal_color),bc
  676.         jp setpgs_scr
  677.  
  678. col4to2
  679.          and 0x0c
  680.          ld c,a
  681.          rrca
  682.          rrca
  683.          add a,c
  684.          ret
  685.  
  686. calcRGBtopal_pp
  687. ;e=B, d=G, l=R
  688. ;DDp palette: %grbG11RB(low),%grbG11RB(high), Ё-ў_аб-л_
  689.         xor a
  690.         rl e  ;B
  691.         rra
  692.         rl l  ;R
  693.         rra
  694.         rrca
  695.         rrca
  696.         rl d  ;G
  697.         rra
  698.         rl e  ;b
  699.         rra
  700.         rl l  ;r
  701.         rra
  702.         rl d  ;g
  703.         rra
  704.         cpl
  705.         ret
  706.  
  707. drawpalcolor
  708.         ld de,paleditorpal
  709.         call setpal_de
  710.         call setpgs_scr
  711.  
  712.         call setpgshapes
  713.  
  714.         ld ix,0x3f00 ;lx=background color
  715.         ld hl,0x2000+((editpal_colory+editpal_curcolorhgt+8)*40)+editpal_colorx8 + scrbase + 1
  716.         ld de,t444
  717.         call shapes_prtext48ega;_white7oncolor
  718.  
  719.         ld de,(paleditorpal_color)
  720.         ld hl,0x2000+(editpal_colory+editpal_colorhgt)*40+editpal_colorx8 + scrbase
  721.         call prhexcolor
  722.  
  723.         ;ld de,paleditorpalend
  724.         ;call setpal_de
  725.  
  726.         ld bc,editpal_colory*256 + editpal_colorx8 ;b=y ;c=x/8
  727.         ld de,editpal_colorhgt*256+editpal_colorwid8 ;d=hgt ;e=wid8
  728.         ld a,0xc0;%11000000 ;a=%33210210
  729.         jp shapes_fillbox
  730.  
  731. t444
  732.         db "444",0
  733.        
  734. editpal
  735. ;hl=а_¤ ЄвЁаг_┐лc жў_в
  736.         ld (editpal_quitsp),sp
  737.         push hl
  738.  
  739.         call initpal ;бRбв ў<_-Ё_ в Ў<Ёж
  740.        
  741.         ld hl,paleditorpalend-2 ;paleditorpal_curcolor+...
  742.         ld de,paleditorpalend ;paleditorpal_oldcolors+...
  743.         ld bc,paleditorpalend+1-paleditorpal_oldcolors
  744.         lddr
  745.         pop hl
  746.         ld (paleditorpal_curcolor),hl
  747.         push hl
  748.         call calchexcolor
  749.         call calcRGBtoHSV ;- - з _в curH,curS,curV
  750.         pop hl
  751.         ld (paleditorpal_color),hl ;ЇRвR┐, звRЎл вRз-__ Rбв ўЁвм жў_в
  752.        
  753.         call drawpal
  754.        
  755.         ld a,ZONE_NO
  756.         ld (prarr_zone),a
  757.        
  758. editpalloop
  759.         call setpgs_scr
  760. ;1. ўбс ўлўR¤Ё┐
  761. ;2. │¤с┐ бRЎлвЁ_
  762. ;3. ўбс бвЁа _┐
  763. ;4. RЎа Ў влў _┐ бRЎлвЁ_
  764.         call setpgshapes
  765.  
  766.         ;call ahl_coords
  767.         ;call invarrzone
  768.         call ahl_coords
  769.         call shapes_memorizearr
  770.         call ahl_coords
  771.         call shapes_prarr8c
  772.        
  773.         call waitsomething ;ў нвR ўа_┐п бва_<Є  ўЁ¤- 
  774. ;звR-вR Ё┐_-Ё<Rбм
  775.        
  776.         call ahl_oldcoords
  777.         call shapes_rearr
  778.         ;call ahl_oldcoords
  779.         ;call invarrzone ;Ё-ў_авЁаRў вм Їг-Єв ЇR¤ бва_<ЄRc
  780.        
  781.         ld a,(key)
  782.         cp key_redraw
  783.         call z,drawpal
  784.         ld a,(mousebuttons)
  785.         cpl
  786.         and 7
  787.         call nz,editpal_fire
  788.         jr editpalloop
  789.  
  790. editpal_fire
  791. ;editpal_rmb
  792.         ld hl,(arrx)
  793.         ld a,l
  794.         srl h
  795.         rra
  796.         srl h
  797.         rra
  798. ;editpal_HSx8=0
  799. ;editpal_HSwid8=16
  800. ;editpal_Vx8=20
  801. ;editpal_Vwid8=4
  802.         sub editpal_HSx8*2
  803.         ret c ;jr c,editpal_fire_or_rmbq
  804.         cp editpal_HSwid8*2
  805.         jr c,editpal_fire_or_rmbHS
  806.         sub +(editpal_Vx8*2)-(editpal_HSx8*2)
  807.         ret c ;jr c,editpal_fire_or_rmbq
  808.         cp editpal_Vwid8*2
  809.         jr c,editpal_fire_or_rmbV
  810.         sub +(editpal_colorx8*2)-(editpal_Vx8*2)
  811.         ret c ;jr c,editpal_fire_or_rmbq
  812.         cp editpal_colorwid8*2
  813.         jr c,editpal_fire_or_rmbsetcolor
  814.         sub +(editpal_curcolorx8*2)-(editpal_colorx8*2)
  815.         ret c ;jr c,editpal_fire_or_rmbq
  816.         cp editpal_curcolorwid8*2
  817.         jr c,editpal_fire_or_rmbsetcurcolor
  818. ;editpal_fire_or_rmbq
  819.  
  820.         ret
  821.  
  822. editpal_fire_or_rmbHS
  823. ;a=x/4=0..31
  824.         push af
  825.         call drawpal_cursors
  826.         pop af
  827.         add a,editpal_e0
  828.         ld (curS),a
  829.         ld a,(arry)
  830.         ld (curH),a
  831.         call drawpal_HSVtocolor
  832. editpal_fire_redrawpals
  833.         call drawpalV
  834.         call drawpalcolor
  835.         jp drawpal_cursors
  836.        
  837. editpal_fire_or_rmbV
  838.         call drawpal_cursors
  839.         ld a,(arry) ;0..199
  840.         cpl
  841.         add a,200
  842.         jr z,$+3
  843.         dec a ;0..198
  844.         ld c,-1
  845.         sub 6
  846.         inc c
  847.         jr nc,$-3 ;c=a/6
  848.         ld a,32
  849.         cp c
  850.         jr c,$+3 ;c>32
  851.         ld a,c ;c<=32
  852.         ld (curV),a ;0..32
  853.         ;call drawpalHS
  854.         ;call drawpalV
  855.         call drawpal_HSVtocolor
  856.         call drawpalcolor
  857.         jp drawpal_cursors
  858.        
  859. editpal_fire_or_rmbsetcolor
  860. ;гбв -RўЁвм жў_в Ё ўлcвЁ
  861.         ld a,(arry) ;0..199
  862.         sub editpal_colory
  863.         cp editpal_colorhgt
  864.          jr nc,switch444 ;ret nc
  865.         ld hl,(paleditorpal_color)
  866.         ld (paleditorpal_curcolor),hl ;звRЎл ўЁ¤_вм -  б<_¤гой_┐ ўеR¤_
  867.         ;jp editpal_quit ;hl=жў_в-а_г<мв в
  868. editpal_quit
  869.         ld hl,(paleditorpal_curcolor) ;Є Є Ўл<R
  870. ;hl=жў_в-а_г<мв в
  871. editpal_quitsp=$+1
  872.         ld sp,0
  873.         ret
  874.  
  875. switch444
  876.         ld hl,t444
  877.         ld a,(hl)
  878.         xor 2^4
  879.         ld (hl),a
  880.         inc hl
  881.         ld (hl),a
  882.         inc hl
  883.         ld (hl),a
  884.         call drawpal_HSVtocolor
  885.         jp drawpalcolor
  886.  
  887. editpal_fire_or_rmbsetcurcolor
  888.         ld a,(arry)
  889.         sub editpal_curcolory
  890.         cp editpal_curcolorhgt
  891.         jr c,editpal_quit ;hl=жў_в-а_г<мв в
  892.         sub editpal_oldcolory-editpal_curcolory
  893.         ld hl,paleditorpal_oldcolors
  894.         ld b,6
  895. editpal_fire_or_rmbsetoldcolor0
  896.         cp editpal_oldcolorhgt
  897.         jr c,editpal_fire_or_rmbsetoldcolorok
  898.         sub editpal_oldcolorystep
  899.         inc hl
  900.         inc hl
  901.         djnz editpal_fire_or_rmbsetoldcolor0
  902.         ret
  903.  
  904. editpal_fire_or_rmbsetoldcolorok
  905.         push hl
  906.         call drawpal_cursors
  907.         pop hl
  908.         ld a,(hl)
  909.         inc hl
  910.         ld h,(hl)
  911.         ld l,a
  912.         ld (paleditorpal_color),hl
  913.         push hl
  914.         call calchexcolor
  915.         call calcRGBtoHSV ;- - з _в curH,curS,curV
  916.         pop hl
  917.         ld (paleditorpal_color),hl ;ЇRвR┐, звRЎл вRз-__ Rбв ўЁвм жў_в
  918.         jp editpal_fire_redrawpals ;в ┐ drawpal_cursors
  919.  
  920. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; _-ЁжЁ <Ё жЁп ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
  921.  
  922. initpal
  923.         call setpgpal
  924.         call setpgtemp
  925.        
  926.         ld hl,tsin
  927. initpalmuls0        
  928.         push hl
  929.         ld a,(hl)
  930.         ld c,a
  931.         rla
  932.         sbc a,a
  933.         ld b,a ;bc=-127..+127
  934.         ld e,l
  935.         ld d,editpal_c0
  936.         ld hl,0
  937. initpalmul0
  938.         ld a,h
  939.         ld (de),a
  940.         add hl,bc
  941.         add hl,bc
  942.         inc d
  943.         bit 5,d
  944.         jr z,initpalmul0
  945.         pop hl
  946.         inc l
  947.         jr nz,initpalmuls0 ;ў │-л 0..200
  948.  
  949. ;mktabfixsaturation
  950. ;  int scoeff = (1 - ((v-.5)*2)*((v-.5)*2) )*256;
  951. ;h=is=0xe0+0..31
  952. ;l=iv=0..32
  953. ;(hl) = is*scoeff/256 + 0xc0
  954.  
  955.         ld h,l ;hl=0
  956. initpalfixsat_volumes0
  957.         push hl
  958. ;scoeff = (1 - ((v-.5)*2)*((v-.5)*2) )*256*8;
  959.         ld e,l
  960.         ld d,editpal_e0
  961.         ;ld h,tscoeff/256
  962.         ld bc,tscoeff
  963.         add hl,bc
  964.         ld c,(hl) ;0..255
  965.         ld b,0
  966.         ld hl,editpal_c0*256
  967. initpalfixsat0
  968.         ld a,h
  969.         ld (de),a
  970.         add hl,bc ;┐ ЄбЁ┐г┐ г┐-R│Ё<Ё -  31
  971.         inc d
  972.          ld a,d
  973.          cp editpal_e0+32
  974.         jr nz,initpalfixsat0
  975.         pop hl
  976.         inc l
  977.         jr nz,initpalfixsat_volumes0
  978.        
  979. ;mktabclippal
  980. ;(hl) = %0000B00A [L]
  981. ;(hl+256) = %0000D00C [L]
  982.  
  983. ;  if (ir<minC) ir=minC; if (ir>=maxC) ir=maxC-1;
  984. ;  if (ig<minC) ig=minC; if (ig>=maxC) ig=maxC-1;
  985. ;  if (ib<minC) ib=minC; if (ib>=maxC) ib=maxC-1;
  986.  
  987. ;  ir = (ir-minC)*kC;
  988. ;  ig = (ig-minC)*kC;
  989. ;  ib = (ib-minC)*kC;
  990.  
  991.         ld hl,tchunkpixelnumber
  992.         ld de,tabclippal
  993. mktabclippals0
  994.  
  995. mktabclippal0
  996.         ld a,e
  997.         cp -minC
  998.         jr c,$+3
  999.         xor a
  1000.         add a,a
  1001.         jr c,calcHSVtoRGB_maxR
  1002.         add a,a
  1003.         jr c,calcHSVtoRGB_maxR
  1004.         add a,a
  1005.         jr nc,calcHSVtoRGB_nomaxR
  1006. calcHSVtoRGB_maxR
  1007.         sbc a,a
  1008. calcHSVtoRGB_nomaxR
  1009.          push hl
  1010.         ld bc,0
  1011.         cp (hl)
  1012.         inc hl
  1013.         jr c,$+3;4
  1014.         inc c ;set 0,c
  1015.         cp (hl)
  1016.         inc hl
  1017.         jr c,$+4
  1018.         set 3,c
  1019.         cp (hl)
  1020.         inc hl
  1021.         jr c,$+3;4
  1022.         inc b ;set 0,b
  1023.         cp (hl)
  1024.         jr c,$+4
  1025.         set 3,b
  1026.          pop hl
  1027.         ld a,c
  1028.         ld (de),a
  1029.         inc d
  1030.         ld a,b
  1031.         ld (de),a
  1032.         dec d
  1033.         inc e
  1034.         jr nz,mktabclippal0
  1035.         ld bc,4
  1036.         add hl,bc
  1037.         inc d
  1038.         inc d
  1039.         ld a,d
  1040.         cp tabclippal/256+8
  1041.         jr nz,mktabclippals0
  1042.        
  1043.         jp setpgs_scr
  1044.        
  1045. tchunkpixelnumber
  1046.         db 0x01, 0xc1, 0x61, 0xa1
  1047.         db 0x91, 0x41, 0x11, 0xd1
  1048.         db 0xe1, 0x71, 0xb1, 0x31
  1049.         db 0x51, 0x21, 0x81, 0xf1
  1050.  
  1051. tscoeff
  1052. ;iv = 0..32
  1053. ;scoeff = (1 - ((v-.5)*2)*((v-.5)*2) )*256*8
  1054. ;        dup 256
  1055. ;_=($&0xff-16)*2
  1056. ;        db 0xff&((1024-(_*_))/32)
  1057. ;        edup
  1058. _=0
  1059.         dup 8
  1060.         db _
  1061. _=_+18
  1062.         edup
  1063.         dup 8
  1064.         db _
  1065. _=_+10
  1066.         edup
  1067.         db 0xff
  1068.         dup 8
  1069. _=_-10
  1070.         db _
  1071.         edup
  1072.         dup 8
  1073. _=_-18
  1074.         db _
  1075.         edup
  1076.