?login_element?

Subversion Repositories NedoOS

Rev

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

  1. ;PROC prspr(BYTE x, BYTE y, PBYTE data);
  2. ;wid8xhgt sprite (wid8, hgt, (antimask, antipixels, ...))
  3. ;клипирования нет!
  4. prspr
  5. ;bc=yx
  6. ;hl'=gfx data
  7.         COORDSBC_TOSCRDE
  8.         if 1==0
  9.         ld a,b
  10.         rra
  11.         rra
  12.         rra
  13.         xor b
  14.         and 0xf8
  15.         xor b
  16.         and 0x1f
  17.         add a,scrbuf/256
  18.         ld d,a
  19.         ld a,c
  20.         rlca
  21.         rlca
  22.         rlca
  23.         xor b
  24.         and 0xc7
  25.         xor b
  26.         rlca
  27.         rlca
  28.         ld e,a
  29.         endif
  30. ;de=screen addr
  31.         ld a,c
  32.         and 7
  33.         ;a=shift right 0..7
  34.         exx
  35.         ld c,(hl) ;wid8
  36.         inc hl
  37.         ld b,(hl) ;hgt
  38.         inc hl
  39.         dec c
  40.         jp z,prspr8.
  41.         dec c
  42.         jp z,prspr16. ;умеет инвалидацию
  43.         dec c
  44.         jp z,prspr24.
  45.         dec c
  46.         jp z,prspr32.
  47.         ret
  48.  
  49. ;8xhgt sprite (antimask, antipixels)
  50. ;hgt=16:
  51. ;x=0:  5411 =12.1/byteshift
  52. ;x=1:  5043
  53. ;x=2:  4675
  54. ;x=3:  4307
  55. ;x=4:  3939
  56. ;x=5:  3571
  57. ;x=6:  3203 =50.0/byteshift
  58. ;x=7:  2835 =44.3/byte (no shift) (159 before loop)
  59. prspr8.
  60.         ;a=shift right 0..7
  61.         add a,a
  62.         add a,a
  63.         ld (prspr8jr.),a
  64.          exx
  65.          ld a,e
  66.          and 0x1f
  67.          cp 0x1f
  68.          ret nc
  69.          exx
  70. ;b = counter
  71. ;hl = data (2 accesses)
  72. ;hl' = pixels
  73. ;de' = screen (4 accesses)
  74. ;ac' = mask
  75. prspr8line.
  76.         ld a,(hl) ;mask1
  77.         inc hl
  78.         exx
  79.         ld c,a ;mask1
  80.         exx
  81.         ld a,(hl) ;pixels1
  82.         inc hl
  83.         exx
  84.         ld l,a ;pixels1
  85.  
  86.         xor a
  87.         ld h,a
  88. prspr8jr.=$+1 ;shift mask
  89.         jr $ ;+0 = shift left 7 (right 1), +28 = shift left 0 (right 8)
  90.         add hl,hl
  91.         sla c
  92.         rla
  93.         add hl,hl
  94.         sla c
  95.         rla
  96.         add hl,hl
  97.         sla c
  98.         rla
  99.         add hl,hl
  100.         sla c
  101.         rla
  102.         add hl,hl
  103.         sla c
  104.         rla
  105.         add hl,hl
  106.         sla c
  107.         rla
  108.         add hl,hl
  109.         sla c
  110.         rla
  111.  
  112.         ex de,hl
  113.         or (hl) ;scr0
  114.         ex de,hl
  115.         xor h ;pixels0
  116.         ld (de),a ;scr0
  117.         inc e
  118.         ld a,(de) ;scr1
  119.         or c ;mask1
  120.         xor l ;pixels1
  121.         ld (de),a ;scr1
  122.         dec e
  123.         inc d
  124.         ld a,d
  125.         and 7
  126.         jr z,prspr8down.
  127.         exx
  128.         djnz prspr8line.
  129.         ret
  130. prspr8down.
  131.         ld a,e
  132.         sub -32
  133.         ld e,a
  134.         sbc a,a
  135.         and -8
  136.         add a,d
  137.         ld d,a
  138.         exx
  139.         djnz prspr8line.
  140.         ret
  141.  
  142. ;16xhgt sprite (antimask, antipixels)
  143. ;hgt=16:
  144. ;x=0:  7932 =11.8/byteshift
  145. ;x=1:  7452
  146. ;x=2:  6972
  147. ;x=3:  6492
  148. ;x=4:  6012
  149. ;x=5:  5532
  150. ;x=6:  5052 =52.6/byteshift
  151. ;x=7:  4572 =47.6/byte (no shift)
  152. prspr16.
  153.         ;a=shift right 0..7
  154.         add a,a
  155.         ld (prspr16jr1.),a
  156.         ld (prspr16jr2.),a
  157.          ;exx
  158.          ;ld a,e
  159.          ;and 0x1f
  160.          ;cp 0x1e
  161.          ;ret nc
  162.          ;exx
  163. ;b = counter
  164. ;ade = pixels
  165. ;hl = data (4 accesses)
  166. ;de' = screen (6 accesses)
  167. ;chl' = mask, masked
  168. prspr16line.
  169.         ld a,(hl) ;mask1
  170.         inc hl
  171.         exx
  172.         ld h,a ;mask1
  173.         exx
  174.         ld d,(hl) ;pixels1
  175.         inc hl
  176.         ld a,(hl) ;mask2
  177.         inc hl
  178.         exx
  179.         ld l,a ;mask2
  180.  
  181.         xor a
  182. prspr16jr1.=$+1 ;shift mask
  183.         jr $ ;+0 = shift left 7 (right 1), +14 = shift left 0 (right 8)
  184.         add hl,hl
  185.         rla
  186.         add hl,hl
  187.         rla
  188.         add hl,hl
  189.         rla
  190.         add hl,hl
  191.         rla
  192.         add hl,hl
  193.         rla
  194.         add hl,hl
  195.         rla
  196.         add hl,hl
  197.         rla
  198.  
  199.         ex de,hl
  200.         or (hl) ;scr0
  201.         ex de,hl
  202.         ld c,a ;masked0
  203.         inc e
  204.         inc e
  205.         ld a,(de) ;scr2
  206.         or l ;mask2
  207.         ex af,af' ;keep masked2
  208.         exx
  209.         ld e,(hl) ;pixels2
  210.         inc hl
  211.  
  212.         ex de,hl
  213.         xor a
  214. prspr16jr2.=$+1 ;shift pixels
  215.         jr $ ;+0 = shift left 7 (right 1), +14 = shift left 0 (right 8)
  216.         add hl,hl
  217.         rla
  218.         add hl,hl
  219.         rla
  220.         add hl,hl
  221.         rla
  222.         add hl,hl
  223.         rla
  224.         add hl,hl
  225.         rla
  226.         add hl,hl
  227.         rla
  228.         add hl,hl
  229.         rla
  230.         ex de,hl
  231.  
  232.         ex af,af' ;masked2, keep pixels0
  233.         xor e ;pixels2
  234.         exx
  235.         ld (de),a ;scr2
  236.         dec e
  237.         ld a,(de) ;scr1
  238.         or h ;mask1
  239.         exx
  240.         xor d ;pixels1
  241.         exx
  242.         ld (de),a ;scr1
  243.         dec e
  244.         ex af,af' ;pixels0
  245.         xor c ;masked0
  246.         ld (de),a ;scr0
  247.         inc d
  248.         ld a,d
  249.         and 7
  250.         jr z,prspr16down.
  251.         exx
  252.         djnz prspr16line.
  253.         ret
  254. prspr16down.
  255.         ld a,e
  256.         sub -32
  257.         ld e,a
  258.         sbc a,a
  259.         and -8
  260.         add a,d
  261.         ld d,a
  262.         exx
  263.         djnz prspr16line.
  264.         ret
  265.        
  266. ;PROC prspr24(BYTE x, BYTE y, PBYTE data);
  267. ;24xhgt sprite (antimask, antipixels)
  268. ;hgt=16:
  269. ;x=0: 10951 =12.2/byteshift
  270. ;x=1: 10210
  271. ;x=2:  9474
  272. ;x=3:  8738
  273. ;x=4:  8002
  274. ;x=5:  7266
  275. ;x=6:  6530 =51.0/byteshift
  276. ;x=7:  5794 =45.3/byte (no shift)
  277. prspr24.
  278.         ;a=shift right 0..7
  279.         add a,a
  280.         add a,a
  281.         ld (prspr24jr1.),a
  282.         ld (prspr24jr2.),a
  283.         exx
  284.          ld a,e
  285.          and 0x1f
  286.          cp 0x1d
  287.          ret nc
  288.         exx
  289. ;b = counter
  290. ;hl = data (6 accesses)
  291. ;acde = pixels
  292. ;de' = screen (8 accesses)
  293. ;bchl' = mask, masked
  294. prspr24line.
  295.         ld a,(hl) ;mask1
  296.         inc hl
  297.         exx
  298.         ld c,a ;mask1
  299.         exx
  300.         ld c,(hl) ;pixels1
  301.         inc hl
  302.         ld a,(hl) ;mask2
  303.         inc hl
  304.         exx
  305.         ld h,a ;mask2
  306.         exx
  307.         ld d,(hl) ;pixels2
  308.         inc hl
  309.         ld a,(hl) ;mask3
  310.         inc hl
  311.         exx
  312.         ld l,a ;mask3
  313.  
  314.         xor a
  315. prspr24jr1.=$+1 ;shift mask
  316.         jr $ ;+0 = shift left 7 (right 1), +28 = shift left 0 (right 8)
  317.         add hl,hl
  318.         rl c
  319.         rla
  320.         add hl,hl
  321.         rl c
  322.         rla
  323.         add hl,hl
  324.         rl c
  325.         rla
  326.         add hl,hl
  327.         rl c
  328.         rla
  329.         add hl,hl
  330.         rl c
  331.         rla
  332.         add hl,hl
  333.         rl c
  334.         rla
  335.         add hl,hl
  336.         rl c
  337.         rla
  338.  
  339.         ex de,hl
  340.         or (hl) ;scr0
  341.         ex de,hl
  342.         ld b,a ;masked0
  343.         inc e
  344.         inc e
  345.         inc e
  346.         ld a,(de) ;scr3
  347.         or l ;mask3
  348.         ex af,af' ;keep masked3
  349.         exx
  350.         ld e,(hl) ;pixels3
  351.         inc hl
  352.  
  353.         ex de,hl
  354.         xor a
  355. prspr24jr2.=$+1 ;shift pixels
  356.         jr $ ;+0 = shift left 7 (right 1), +28 = shift left 0 (right 8)
  357.         add hl,hl
  358.         rl c
  359.         rla
  360.         add hl,hl
  361.         rl c
  362.         rla
  363.         add hl,hl
  364.         rl c
  365.         rla
  366.         add hl,hl
  367.         rl c
  368.         rla
  369.         add hl,hl
  370.         rl c
  371.         rla
  372.         add hl,hl
  373.         rl c
  374.         rla
  375.         add hl,hl
  376.         rl c
  377.         rla
  378.         ex de,hl
  379.  
  380.         ex af,af' ;masked3, keep pixels0
  381.         xor e ;pixels3
  382.         exx
  383.         ld (de),a ;scr3
  384.         dec e
  385.         ld a,(de) ;scr2
  386.         or h ;mask2
  387.         exx
  388.         xor d ;pixels2
  389.         exx
  390.         ld (de),a ;scr2
  391.         dec e
  392.         ld a,(de) ;scr1
  393.         or c ;mask1
  394.         exx
  395.         xor c ;pixels1
  396.         exx
  397.         ld (de),a ;scr1
  398.         dec e
  399.         ex af,af' ;pixels0
  400.         xor b ;masked0
  401.         ld (de),a ;scr0
  402.  
  403.         inc d
  404.         ld a,d
  405.         and 7
  406.         jr z,prspr24down.
  407.         exx
  408.         djnz prspr24line.
  409.         ret
  410. prspr24down.
  411.         ld a,e
  412.         sub -32
  413.         ld e,a
  414.         sbc a,a
  415.         and -8
  416.         add a,d
  417.         ld d,a
  418.         exx
  419.         dec b
  420.         jp nz,prspr24line.
  421.         ret
  422.  
  423. ;PROC prspr32(BYTE x, BYTE y, PBYTE data);
  424. ;32xhgt sprite (antimask, antipixels)
  425. ;hgt=16:
  426. ;x=0: 14101 =12.6/byteshift
  427. ;x=1: 13109
  428. ;x=2: 12117
  429. ;x=3: 11125
  430. ;x=4: 10133
  431. ;x=5:  9141
  432. ;x=6:  8149 =50.9/byteshift
  433. ;x=7:  7157 =44.7/byte (no shift)
  434. prspr32.
  435.         ;a=shift right 0..7
  436.         ld c,a
  437.         add a,a
  438.         add a,c
  439.         add a,a
  440.         ld (prspr32jr1.),a
  441.         ld (prspr32jr2.),a
  442.         exx
  443.          ld a,e
  444.          and 0x1f
  445.          cp 0x1c
  446.          ret nc
  447.         exx
  448.         ld hx,b
  449. ;hx = counter
  450. ;hl = data (6 accesses)
  451. ;abcde = pixels
  452. ;de' = screen (8 accesses)
  453. ;abchl'/lbcha' = mask, masked
  454. prspr32line.
  455.         ld a,(hl) ;mask1
  456.         inc hl
  457.         exx
  458.         ld b,a ;mask1
  459.         exx
  460.         ld b,(hl) ;pixels1
  461.         inc hl
  462.         ld a,(hl) ;mask2
  463.         inc hl
  464.         exx
  465.         ld c,a ;mask2
  466.         exx
  467.         ld c,(hl) ;pixels2
  468.         inc hl
  469.         ld a,(hl) ;mask3
  470.         inc hl
  471.         exx
  472.         ld h,a ;mask3
  473.         exx
  474.         ld d,(hl) ;pixels3
  475.         inc hl
  476.         ld a,(hl) ;mask4
  477.         inc hl
  478.         exx
  479.         ld l,a ;mask4
  480.  
  481.         xor a
  482. prspr32jr1.=$+1 ;shift pixels
  483.         jr $ ;+0 = shift left 7 (right 1), +7*6 = shift left 0 (right 8)
  484. ;max 217 (43.4/byte)
  485.         add hl,hl
  486.         rl c
  487.         rl b
  488.         rla
  489.         add hl,hl
  490.         rl c
  491.         rl b
  492.         rla
  493.         add hl,hl
  494.         rl c
  495.         rl b
  496.         rla
  497.         add hl,hl
  498.         rl c
  499.         rl b
  500.         rla
  501.         add hl,hl
  502.         rl c
  503.         rl b
  504.         rla
  505.         add hl,hl
  506.         rl c
  507.         rl b
  508.         rla
  509.         add hl,hl
  510.         rl c
  511.         rl b
  512.         rla
  513.  
  514.         ex de,hl
  515.         or (hl) ;scr0
  516.         ex de,hl
  517.         ex af,af' ;masked0
  518.         ld a,e
  519.         add a,4
  520.         ld e,a
  521.         ld a,(de) ;scr4
  522.         or l ;mask3
  523.         ex af,af' ;masked0, keep masked4
  524.         ld l,a ;masked0
  525.         exx
  526.         ld e,(hl) ;pixels4
  527.         inc hl
  528.  
  529.         ex de,hl
  530.         xor a
  531. prspr32jr2.=$+1 ;shift pixels
  532.         jr $ ;+0 = shift left 7 (right 1), +7*6 = shift left 0 (right 8)
  533. ;max 217 (43.4/byte)
  534.         add hl,hl
  535.         rl c
  536.         rl b
  537.         rla
  538.         add hl,hl
  539.         rl c
  540.         rl b
  541.         rla
  542.         add hl,hl
  543.         rl c
  544.         rl b
  545.         rla
  546.         add hl,hl
  547.         rl c
  548.         rl b
  549.         rla
  550.         add hl,hl
  551.         rl c
  552.         rl b
  553.         rla
  554.         add hl,hl
  555.         rl c
  556.         rl b
  557.         rla
  558.         add hl,hl
  559.         rl c
  560.         rl b
  561.         rla
  562.         ex de,hl
  563.  
  564.         ex af,af' ;masked4, keep pixels0
  565.         xor e ;pixels4
  566.         exx
  567.         ld (de),a ;scr3
  568.         dec e
  569.         ld a,(de) ;scr3
  570.         or h ;mask2
  571.         exx
  572.         xor d ;pixels3
  573.         exx
  574.         ld (de),a ;scr3
  575.         dec e
  576.         ld a,(de) ;scr2
  577.         or c ;mask2
  578.         exx
  579.         xor c ;pixels2
  580.         exx
  581.         ld (de),a ;scr2
  582.         dec e
  583.         ld a,(de) ;scr1
  584.         or b ;mask1
  585.         exx
  586.         xor b ;pixels1
  587.         exx
  588.         ld (de),a ;scr1
  589.         dec e
  590.         ex af,af' ;pixels0
  591.         xor l ;masked0
  592.         ld (de),a ;scr0
  593.  
  594.         inc d
  595.         ld a,d
  596.         and 7
  597.         jr z,prspr32down.
  598.         exx
  599.         dec hx
  600.         jp nz,prspr32line.
  601.         ret
  602. prspr32down.
  603.         ld a,e
  604.         sub -32
  605.         ld e,a
  606.         sbc a,a
  607.         and -8
  608.         add a,d
  609.         ld d,a
  610.         exx
  611.         dec hx
  612.         jp nz,prspr32line.
  613.         ret
  614.