?login_element?

Subversion Repositories NedoOS

Rev

Rev 516 | Go to most recent revision | 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 (соответствует -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=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 ;общая разница
  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 (уже пересчитано для заданного 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,0xffe0
  239.         ;push de
  240.         ;ld bc,32
  241.         ;ldir
  242.         ;pop de
  243.         ex de,hl
  244.         OS_SETPAL
  245.         ret
  246. paleditorpal
  247. ;DDp palette: %grbG11RB(low),%grbG11RB(high), инверсные
  248. ;high B, high b, low B, low b
  249. paleditorpal_color=$+(8*2) ;видимый цвет
  250. paleditorpal_curcolor=$+(9*2) ;текущий цвет
  251. paleditorpal_oldcolors=$+(10*2) ;старые цвета
  252.         dw 0xffff,0xbdbd,0x6f6f,0x2d2d,0xdede,0x9c9c,0x4e4e,0x0c0c
  253.         dw 0xffff,0xdede,0xbdbd,0x9c9c,0x6f6f,0x4e4e,0x2d2d,0x0c0c ;8=видимый цвет, 9=текущий цвет, остальные старые
  254. paleditorpalend=$-1
  255. RSTPAL
  256.         STANDARDPAL
  257. RSTPALend=$-1
  258.  
  259. drawpal
  260.         call cls
  261.        
  262.         ld hl,paleditorpal
  263.         call copytemp_setpal
  264.  
  265.         call drawpalHS
  266.         call drawpalV
  267.  
  268.         call drawpalcolor ;видимый цвет
  269.         call drawpalcurcolor ;текущий цвет
  270. ;старые цвета
  271.         call setpgshapes
  272.  
  273.         ld bc,editpal_oldcolory*256 + editpal_oldcolorx8 ;b=y ;c=x/8
  274.         ld hl,paleditorpal_oldcolors
  275.         ld a,0xd2;%11010010 ;a=%33210210
  276. drawpaloldcolors0
  277.         push af
  278.         push bc
  279.         push hl
  280.         push bc
  281.         ld de,editpal_oldcolorhgt*256+editpal_oldcolorwid8 ;d=hgt ;e=wid8
  282.         call shapes_fillbox
  283.         pop bc
  284.         pop hl
  285.         ld e,(hl)
  286.         inc hl
  287.         ld d,(hl)
  288.         inc hl
  289.         push hl
  290.          ld a,c
  291.          add a,4*40 - 4
  292.          call calcscr_from_xchr_ya
  293.          set 5,h ;на 4 пикселя правее
  294.         call prhexcolor
  295.         pop hl
  296.         pop bc
  297.         ld a,b
  298.         add a,editpal_oldcolorystep
  299.         ld b,a
  300.         pop af
  301.         add a,9;%1001
  302.         cp 0xff&(0xff+9);(%11111111+%1001)
  303.         jr nz,drawpaloldcolors0
  304.        
  305. drawpal_cursors
  306.         call setpgshapes
  307.  
  308.         ld a,(curS) ;x
  309.         sub editpal_e0
  310.         ld l,a
  311.         ld h,0
  312.         add hl,hl
  313.         add hl,hl
  314.         ld a,(curH) ;y
  315.         call shapes_prarr_ring8c ;HS
  316.         ld hl,+(editpal_Vx8*8)+(editpal_Vwid8*4)
  317.         ld a,(curV) ;y
  318.         ld c,a
  319.         add a,a
  320.         add a,c
  321.         add a,a ;*6
  322.         add a,3
  323.         cpl
  324.         add a,200
  325.         jp shapes_prarr_ring8c
  326.        
  327. ;текущий цвет        
  328. drawpalcurcolor
  329.         call setpgshapes
  330.  
  331.         ld de,(paleditorpal_curcolor)
  332.         ld hl,0x2000+((editpal_curcolory+editpal_curcolorhgt)*40)+editpal_curcolorx8 + scrbase
  333.         call prhexcolor
  334.         ld bc,editpal_curcolory*256 + editpal_curcolorx8 ;b=y ;c=x/8
  335.         ld de,editpal_curcolorhgt*256+editpal_curcolorwid8 ;d=hgt ;e=wid8
  336.         ld a,0xc9;%11001001 ;a=%33210210
  337.         jp shapes_fillbox
  338.  
  339. calchexcolor
  340. ;keep c!!!
  341. ;hl=color (DDp palette)
  342. ;DDp palette: %grbG11RB(low),%grbG11RB(high), инверсные
  343. ;high B, high b, low B, low b
  344.         ld b,0xff
  345.         ld de,0xffff
  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=0xBB
  407. ;d=0xRR
  408. ;e=0xGG
  409.         ret
  410.        
  411. prhexcolor
  412. ;pgshapes!
  413. ;de=color (DDp palette)
  414. ;hl=screen        
  415.         ld ix,0x3f00 ;lx=background color
  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-0xe0
  437.         ld (drawpalHS_S),a
  438.         push hl
  439.         ld de,40-0x4000
  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=0xe0+0..31
  452.         ld h,(hl) ;h=is=0xc0+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 0x20
  476.        ld h,a
  477.         and 0x20
  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-0x4000
  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=0xe0+0..31
  499.        ld h,(hl) ;h=is=0xc0+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=0xc0+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=0xe0+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,(t444)
  649.          cp '4'
  650.          jr z,drawpal_HSVtocolor_no222
  651.          ld a,d
  652.          call col4to2
  653.          ld d,a
  654.          ld a,e
  655.          call col4to2
  656.          ld e,a
  657.          ld a,b
  658.          call col4to2
  659.          ld b,a
  660. drawpal_HSVtocolor_no222
  661.         ld a,d
  662.         rla
  663.         rla
  664.         rla
  665.         rla
  666.         ld l,a ;R
  667.         ld a,e
  668.         rla
  669.         rla
  670.         rla
  671.         rla
  672.         ld d,a ;G
  673.         ld a,b
  674.         rla
  675.         rla
  676.         rla
  677.         rla
  678.         ld e,a ;B
  679. ;e=B, d=G, l=R
  680.         call calcRGBtopal_pp
  681.         ld b,a
  682.         call calcRGBtopal_pp
  683.         ld c,a
  684. ;b,c=%grbG11RB
  685.         ld (paleditorpal_color),bc
  686.         jp setpgs_scr
  687.  
  688. col4to2
  689.          and 0x0c
  690.          ld c,a
  691.          rrca
  692.          rrca
  693.          add a,c
  694.          ret
  695.  
  696. calcRGBtopal_pp
  697. ;e=B, d=G, l=R
  698. ;DDp palette: %grbG11RB(low),%grbG11RB(high), инверсные
  699.         xor a
  700.         rl e  ;B
  701.         rra
  702.         rl l  ;R
  703.         rra
  704.         rrca
  705.         rrca
  706.         rl d  ;G
  707.         rra
  708.         rl e  ;b
  709.         rra
  710.         rl l  ;r
  711.         rra
  712.         rl d  ;g
  713.         rra
  714.         cpl
  715.         ret
  716.  
  717. drawpalcolor
  718.         ld hl,paleditorpal
  719.         call copytemp_setpal
  720.         call setpgs_scr
  721.  
  722.         call setpgshapes
  723.  
  724.         ld ix,0x3f00 ;lx=background color
  725.         ld hl,0x2000+((editpal_colory+editpal_curcolorhgt+8)*40)+editpal_colorx8 + scrbase + 1
  726.         ld de,t444
  727.         call shapes_prtext48ega;_white7oncolor
  728.  
  729.         ld de,(paleditorpal_color)
  730.         ld hl,0x2000+(editpal_colory+editpal_colorhgt)*40+editpal_colorx8 + scrbase
  731.         call prhexcolor
  732.  
  733.         ;ld hl,paleditorpalend
  734.         ;call setpalhl
  735.  
  736.         ld bc,editpal_colory*256 + editpal_colorx8 ;b=y ;c=x/8
  737.         ld de,editpal_colorhgt*256+editpal_colorwid8 ;d=hgt ;e=wid8
  738.         ld a,0xc0;%11000000 ;a=%33210210
  739.         jp shapes_fillbox
  740.  
  741. t444
  742.         db "444",0
  743.        
  744. editpal
  745. ;hl=редактируемый цвет
  746.         ld (editpal_quitsp),sp
  747.         push hl
  748.  
  749.         call initpal ;составление таблиц
  750.        
  751.         ld hl,paleditorpalend-2 ;paleditorpal_curcolor+...
  752.         ld de,paleditorpalend ;paleditorpal_oldcolors+...
  753.         ld bc,paleditorpalend+1-paleditorpal_oldcolors
  754.         lddr
  755.         pop hl
  756.         ld (paleditorpal_curcolor),hl
  757.         push hl
  758.         call calchexcolor
  759.         call calcRGBtoHSV ;назначает curH,curS,curV
  760.         pop hl
  761.         ld (paleditorpal_color),hl ;потом, чтобы точнее оставить цвет
  762.        
  763.         call drawpal
  764.        
  765.         ld a,ZONE_NO
  766.         ld (prarr_zone),a
  767.        
  768. editpalloop
  769.         call setpgs_scr
  770. ;1. всё выводим
  771. ;2. ждём событие
  772. ;3. всё стираем
  773. ;4. обрабатываем событие
  774.         call setpgshapes
  775.  
  776.         ;call ahl_coords
  777.         ;call invarrzone
  778.         call ahl_coords
  779.         call shapes_memorizearr
  780.         call ahl_coords
  781.         call shapes_prarr8c
  782.        
  783.         call waitsomething ;в это время стрелка видна
  784. ;что-то изменилось
  785.        
  786.         call ahl_oldcoords
  787.         call shapes_rearr
  788.         ;call ahl_oldcoords
  789.         ;call invarrzone ;инвертировать пункт под стрелкой
  790.        
  791.         ld a,(key)
  792.         cp key_redraw
  793.         call z,drawpal
  794.         ld a,(mousebuttons)
  795.         cpl
  796.         and 7
  797.         call nz,editpal_fire
  798.         jr editpalloop
  799.  
  800. editpal_fire
  801. ;editpal_rmb
  802.         ld hl,(arrx)
  803.         ld a,l
  804.         srl h
  805.         rra
  806.         srl h
  807.         rra
  808. ;editpal_HSx8=0
  809. ;editpal_HSwid8=16
  810. ;editpal_Vx8=20
  811. ;editpal_Vwid8=4
  812.         sub editpal_HSx8*2
  813.         ret c ;jr c,editpal_fire_or_rmbq
  814.         cp editpal_HSwid8*2
  815.         jr c,editpal_fire_or_rmbHS
  816.         sub +(editpal_Vx8*2)-(editpal_HSx8*2)
  817.         ret c ;jr c,editpal_fire_or_rmbq
  818.         cp editpal_Vwid8*2
  819.         jr c,editpal_fire_or_rmbV
  820.         sub +(editpal_colorx8*2)-(editpal_Vx8*2)
  821.         ret c ;jr c,editpal_fire_or_rmbq
  822.         cp editpal_colorwid8*2
  823.         jr c,editpal_fire_or_rmbsetcolor
  824.         sub +(editpal_curcolorx8*2)-(editpal_colorx8*2)
  825.         ret c ;jr c,editpal_fire_or_rmbq
  826.         cp editpal_curcolorwid8*2
  827.         jr c,editpal_fire_or_rmbsetcurcolor
  828. ;editpal_fire_or_rmbq
  829.  
  830.         ret
  831.  
  832. editpal_fire_or_rmbHS
  833. ;a=x/4=0..31
  834.         push af
  835.         call drawpal_cursors
  836.         pop af
  837.         add a,editpal_e0
  838.         ld (curS),a
  839.         ld a,(arry)
  840.         ld (curH),a
  841.         call drawpal_HSVtocolor
  842. editpal_fire_redrawpals
  843.         call drawpalV
  844.         call drawpalcolor
  845.         jp drawpal_cursors
  846.        
  847. editpal_fire_or_rmbV
  848.         call drawpal_cursors
  849.         ld a,(arry) ;0..199
  850.         cpl
  851.         add a,200
  852.         jr z,$+3
  853.         dec a ;0..198
  854.         ld c,-1
  855.         sub 6
  856.         inc c
  857.         jr nc,$-3 ;c=a/6
  858.         ld a,32
  859.         cp c
  860.         jr c,$+3 ;c>32
  861.         ld a,c ;c<=32
  862.         ld (curV),a ;0..32
  863.         ;call drawpalHS
  864.         ;call drawpalV
  865.         call drawpal_HSVtocolor
  866.         call drawpalcolor
  867.         jp drawpal_cursors
  868.        
  869. editpal_fire_or_rmbsetcolor
  870. ;установить цвет и выйти
  871.         ld a,(arry) ;0..199
  872.         sub editpal_colory
  873.         cp editpal_colorhgt
  874.          jr nc,switch444 ;ret nc
  875.         ld hl,(paleditorpal_color)
  876.         ld (paleditorpal_curcolor),hl ;чтобы видеть на следующем входе
  877.         ;jp editpal_quit ;hl=цвет-результат
  878. editpal_quit
  879.         ld hl,(paleditorpal_curcolor) ;как было
  880. ;hl=цвет-результат
  881. editpal_quitsp=$+1
  882.         ld sp,0
  883.         ret
  884.  
  885. switch444
  886.         ld hl,t444
  887.         ld a,(hl)
  888.         xor 2^4
  889.         ld (hl),a
  890.         inc hl
  891.         ld (hl),a
  892.         inc hl
  893.         ld (hl),a
  894.         call drawpal_HSVtocolor
  895.         jp drawpalcolor
  896.  
  897. editpal_fire_or_rmbsetcurcolor
  898.         ld a,(arry)
  899.         sub editpal_curcolory
  900.         cp editpal_curcolorhgt
  901.         jr c,editpal_quit ;hl=цвет-результат
  902.         sub editpal_oldcolory-editpal_curcolory
  903.         ld hl,paleditorpal_oldcolors
  904.         ld b,6
  905. editpal_fire_or_rmbsetoldcolor0
  906.         cp editpal_oldcolorhgt
  907.         jr c,editpal_fire_or_rmbsetoldcolorok
  908.         sub editpal_oldcolorystep
  909.         inc hl
  910.         inc hl
  911.         djnz editpal_fire_or_rmbsetoldcolor0
  912.         ret
  913.  
  914. editpal_fire_or_rmbsetoldcolorok
  915.         push hl
  916.         call drawpal_cursors
  917.         pop hl
  918.         ld a,(hl)
  919.         inc hl
  920.         ld h,(hl)
  921.         ld l,a
  922.         ld (paleditorpal_color),hl
  923.         push hl
  924.         call calchexcolor
  925.         call calcRGBtoHSV ;назначает curH,curS,curV
  926.         pop hl
  927.         ld (paleditorpal_color),hl ;потом, чтобы точнее оставить цвет
  928.         jp editpal_fire_redrawpals ;там drawpal_cursors
  929.  
  930. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Инициализация ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
  931.  
  932. initpal
  933.         call setpgpal
  934.         call setpgtemp
  935.        
  936.         ld hl,tsin
  937. initpalmuls0        
  938.         push hl
  939.         ld a,(hl)
  940.         ld c,a
  941.         rla
  942.         sbc a,a
  943.         ld b,a ;bc=-127..+127
  944.         ld e,l
  945.         ld d,editpal_c0
  946.         ld hl,0
  947. initpalmul0
  948.         ld a,h
  949.         ld (de),a
  950.         add hl,bc
  951.         add hl,bc
  952.         inc d
  953.         bit 5,d
  954.         jr z,initpalmul0
  955.         pop hl
  956.         inc l
  957.         jr nz,initpalmuls0 ;важны 0..200
  958.  
  959. ;mktabfixsaturation
  960. ;  int scoeff = (1 - ((v-.5)*2)*((v-.5)*2) )*256;
  961. ;h=is=0xe0+0..31
  962. ;l=iv=0..32
  963. ;(hl) = is*scoeff/256 + 0xc0
  964.  
  965.         ld h,l ;hl=0
  966. initpalfixsat_volumes0
  967.         push hl
  968. ;scoeff = (1 - ((v-.5)*2)*((v-.5)*2) )*256*8;
  969.         ld e,l
  970.         ld d,editpal_e0
  971.         ;ld h,tscoeff/256
  972.         ld bc,tscoeff
  973.         add hl,bc
  974.         ld c,(hl) ;0..255
  975.         ld b,0
  976.         ld hl,editpal_c0*256
  977. initpalfixsat0
  978.         ld a,h
  979.         ld (de),a
  980.         add hl,bc ;максимум умножили на 31
  981.         inc d
  982.          ld a,d
  983.          cp editpal_e0+32
  984.         jr nz,initpalfixsat0
  985.         pop hl
  986.         inc l
  987.         jr nz,initpalfixsat_volumes0
  988.        
  989. ;mktabclippal
  990. ;(hl) = %0000B00A [L]
  991. ;(hl+256) = %0000D00C [L]
  992.  
  993. ;  if (ir<minC) ir=minC; if (ir>=maxC) ir=maxC-1;
  994. ;  if (ig<minC) ig=minC; if (ig>=maxC) ig=maxC-1;
  995. ;  if (ib<minC) ib=minC; if (ib>=maxC) ib=maxC-1;
  996.  
  997. ;  ir = (ir-minC)*kC;
  998. ;  ig = (ig-minC)*kC;
  999. ;  ib = (ib-minC)*kC;
  1000.  
  1001.         ld hl,tchunkpixelnumber
  1002.         ld de,tabclippal
  1003. mktabclippals0
  1004.  
  1005. mktabclippal0
  1006.         ld a,e
  1007.         cp -minC
  1008.         jr c,$+3
  1009.         xor a
  1010.         add a,a
  1011.         jr c,calcHSVtoRGB_maxR
  1012.         add a,a
  1013.         jr c,calcHSVtoRGB_maxR
  1014.         add a,a
  1015.         jr nc,calcHSVtoRGB_nomaxR
  1016. calcHSVtoRGB_maxR
  1017.         sbc a,a
  1018. calcHSVtoRGB_nomaxR
  1019.          push hl
  1020.         ld bc,0
  1021.         cp (hl)
  1022.         inc hl
  1023.         jr c,$+3;4
  1024.         inc c ;set 0,c
  1025.         cp (hl)
  1026.         inc hl
  1027.         jr c,$+4
  1028.         set 3,c
  1029.         cp (hl)
  1030.         inc hl
  1031.         jr c,$+3;4
  1032.         inc b ;set 0,b
  1033.         cp (hl)
  1034.         jr c,$+4
  1035.         set 3,b
  1036.          pop hl
  1037.         ld a,c
  1038.         ld (de),a
  1039.         inc d
  1040.         ld a,b
  1041.         ld (de),a
  1042.         dec d
  1043.         inc e
  1044.         jr nz,mktabclippal0
  1045.         ld bc,4
  1046.         add hl,bc
  1047.         inc d
  1048.         inc d
  1049.         ld a,d
  1050.         cp tabclippal/256+8
  1051.         jr nz,mktabclippals0
  1052.        
  1053.         jp setpgs_scr
  1054.        
  1055. tchunkpixelnumber
  1056.         db 0x01, 0xc1, 0x61, 0xa1
  1057.         db 0x91, 0x41, 0x11, 0xd1
  1058.         db 0xe1, 0x71, 0xb1, 0x31
  1059.         db 0x51, 0x21, 0x81, 0xf1
  1060.  
  1061. tscoeff
  1062. ;iv = 0..32
  1063. ;scoeff = (1 - ((v-.5)*2)*((v-.5)*2) )*256*8
  1064. ;        dup 256
  1065. ;_=($&0xff-16)*2
  1066. ;        db 0xff&((1024-(_*_))/32)
  1067. ;        edup
  1068. _=0
  1069.         dup 8
  1070.         db _
  1071. _=_+18
  1072.         edup
  1073.         dup 8
  1074.         db _
  1075. _=_+10
  1076.         edup
  1077.         db 0xff
  1078.         dup 8
  1079. _=_-10
  1080.         db _
  1081.         edup
  1082.         dup 8
  1083. _=_-18
  1084.         db _
  1085.         edup
  1086.