?login_element?

Subversion Repositories NedoOS

Rev

Rev 657 | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;вывод битмэпа на экран
  2.  
  3.         MACRO SHOWBITMAPLINELAYER02_25 ;вывод пикселей ab..ef..
  4.         ld b,lx
  5. _=$
  6.         exx
  7.         ld c,(iy)
  8.         ld a,(bc)
  9.         ld l,(iy+4)
  10.         or (hl)
  11.         ld (de),a
  12.         set 5,d
  13.         ld c,(iy+16)
  14.         ld a,(bc)
  15.         ld l,(iy+20)
  16.         or (hl)
  17.         ld (de),a
  18.         res 5,d
  19.         inc de
  20.         exx
  21.         add iy,de ;32
  22.         djnz _
  23.         ENDM
  24.  
  25.         MACRO SHOWBITMAPLINELAYER02_50 ;вывод пикселей ab..ef..
  26.         ld b,lx
  27. _=$
  28.         exx
  29.         ld c,(iy)
  30.         ld a,(bc)
  31.         ld l,(iy+2)
  32.         or (hl)
  33.         ld (de),a
  34.         set 5,d
  35.         ld c,(iy+8)
  36.         ld a,(bc)
  37.         ld l,(iy+10)
  38.         or (hl)
  39.         ld (de),a
  40.         res 5,d
  41.         inc de
  42.         exx
  43.         add iy,de ;16
  44.         djnz _
  45.         ENDM
  46.  
  47.         MACRO SHOWBITMAPLINELAYER02_100 ;вывод пикселей ab..ef..
  48. ;180t/4pix (было 202)
  49.         ld b,lx
  50. _=$
  51.         exx
  52.         ld c,(iy)
  53.         ld a,(bc) ;0L000LLL
  54.         ld l,(iy+1)
  55.         or (hl) ;(hl)=R0RRR000
  56.         ld (de),a
  57.         set 5,d
  58.         ld c,(iy+4)
  59.         ld a,(bc) ;0L000LLL
  60.         ld l,(iy+5)
  61.         or (hl) ;(hl)=R0RRR000
  62.         ld (de),a
  63.         res 5,d
  64.         inc de
  65.         exx
  66.         add iy,de ;8
  67.         djnz _
  68.         ENDM
  69.  
  70.         MACRO SHOWBITMAPLINELAYER02_200 ;вывод пикселей ab..ef..
  71. ;106t/ (через стек можно 86)
  72.         ld hx,lx
  73. _=$
  74.         ld e,(hl)
  75.         inc hl
  76.         inc hl
  77.         ld a,(de)
  78.         ld (bc),a
  79.         set 5,b
  80.         ld e,(hl)
  81.         inc hl
  82.         inc hl
  83.         ld a,(de)
  84.         ld (bc),a
  85.         res 5,b
  86.         inc bc
  87.         dec hx
  88.         jp nz,_
  89.         ENDM
  90.  
  91.         MACRO SHOWBITMAPLINELAYER02_400 ;вывод пикселей ab..ef..
  92.         ld hx,lx
  93. _=$
  94.         ld e,(hl)
  95.         inc hl
  96.         ld a,(de)
  97.         ld (bc),a
  98.         set 5,b
  99.         ld e,(hl)
  100.         inc hl
  101.         ld a,(de)
  102.         ld (bc),a
  103.         res 5,b
  104.         inc bc
  105.         dec hx
  106.         jp nz,_
  107.         ENDM
  108.  
  109. prbitmapbox
  110. ;hl=x в bitmap
  111. ;de=y в bitmap
  112. ;c=x/8 на экране
  113. ;b=y на экране
  114. ;hy=hgt
  115. ;lx=wid(chr)
  116.         push bc ;xy на экране
  117.         push hl ;x в bitmap
  118.         call calcscr_from_xchr_y
  119.         pop bc ;x в bitmap
  120.         ld a,h
  121.         add a,+((scrbase16k-scrbase)/256)&0xff ;or scrbase16k/256 ;0xc0
  122.         ld h,a
  123.         push hl ;scr (0xc000+)
  124.         call calcbitmap_from_xy ;out: a=pg, hl=addr
  125.         pop de ;scr (0xc000+)
  126.         ld bc,(curbitmapscale) ;1=25%, 2=50%, 3=100%, 4=200%, 5=400%
  127.         dec c
  128.         jp z,showbitmapbox_25_lines
  129.         dec c
  130.         jp z,showbitmapbox_50_lines
  131.         dec c
  132.         jp z,showbitmapbox_100_lines
  133.         dec c
  134.         jr z,showbitmapbox_200_lines
  135.         ;dec c
  136.         ;jp z,showbitmapbox_400_lines
  137.         ;pop bc
  138.         ;ret ;никогда
  139. showbitmapbox_400_lines
  140.         ld c,hy
  141.         inc c
  142.         srl c
  143.         inc c
  144.         srl c
  145.         ld hy,c ;/4 с округлением вверх
  146.         push iy
  147. showbitmapbox_400_lines0
  148.         ld ly,4
  149. showbitmapbox_400_lines1
  150.         push de ;scr (0xc000+)
  151.         push af ;pg
  152.         call setpg32k
  153.         push hl ;bitmap addr
  154.          push de ;scr (0xc000+)
  155.          push hl ;bitmap addr
  156.         ;ld a,(setpgs_scr_low)
  157.         ld a,(user_scr0_low)
  158.         SETPG4000
  159.         ld b,d
  160.         ld c,e
  161.         ld d,tpixelrecode/256
  162.         SHOWBITMAPLINELAYER02_400 ;lx=wid(chr)
  163.          pop hl ;bitmap addr
  164.         ;ld a,(setpgs_scr_high)
  165.         ld a,(user_scr0_high)
  166.         SETPG4000
  167.          pop bc ;scr (0xc000+)
  168.         SHOWBITMAPLINELAYER02_400 ;lx=wid(chr)
  169.         pop hl ;bitmap addr
  170.         pop af ;pg
  171.         pop de ;scr (0xc000+)
  172.         call showbitmapbox_scrlinedown
  173.         dec ly
  174.         jp nz,showbitmapbox_400_lines1
  175.         call showbitmapbox_linedown
  176.         dec hy
  177.         jp nz,showbitmapbox_400_lines0
  178.         pop iy
  179.         ld a,hy
  180.         add a,a
  181.         jr addaa_hya_popbc_showbitmaprightbox
  182.         ;add a,a
  183.         ;ld hy,a ;hy=hgt на экране
  184.         ;pop bc ;xy на экране
  185. ;c=x/8 на экране
  186. ;b=y на экране
  187. ;hy=hgt
  188. ;lx=wid(chr)
  189.         ;jp showbitmaprightbox ;делает setpgs_scr
  190.  
  191. showbitmapbox_200_lines
  192.         ld c,hy
  193.         inc c
  194.         srl c
  195.         ld hy,c ;/2 с округлением вверх
  196.         push iy
  197. showbitmapbox_200_lines0
  198.         ld ly,2
  199. showbitmapbox_200_lines1
  200.         push de ;scr (0xc000+)
  201.         push af ;pg
  202.         call setpg32k
  203.         push hl ;bitmap addr
  204.          push de ;scr (0xc000+)
  205.          push hl ;bitmap addr
  206.         ;ld a,(setpgs_scr_low)
  207.         ld a,(user_scr0_low)
  208.         SETPG4000
  209.         ld b,d
  210.         ld c,e
  211.         ld d,tpixelrecode/256
  212.         SHOWBITMAPLINELAYER02_200 ;lx=wid(chr)
  213.          pop hl ;bitmap addr
  214.         ;ld a,(setpgs_scr_high)
  215.         ld a,(user_scr0_high)
  216.         SETPG4000
  217.          pop bc ;scr (0xc000+)
  218.         inc hl
  219.         SHOWBITMAPLINELAYER02_200 ;lx=wid(chr)
  220.         pop hl ;bitmap addr
  221.         pop af ;pg
  222.         pop de ;scr (0xc000+)
  223.         call showbitmapbox_scrlinedown
  224.         dec ly
  225.         jp nz,showbitmapbox_200_lines1
  226.         call showbitmapbox_linedown
  227.         dec hy
  228.         jp nz,showbitmapbox_200_lines0
  229.         pop iy
  230.         ld a,hy
  231. addaa_hya_popbc_showbitmaprightbox
  232.         add a,a
  233.         ld hy,a ;hy=hgt на экране
  234.         pop bc ;xy на экране
  235. ;c=x/8 на экране
  236. ;b=y на экране
  237. ;hy=hgt
  238. ;lx=wid(chr)
  239.         jp showbitmaprightbox ;делает setpgs_scr
  240.  
  241. showbitmapbox_25_lines
  242.         push iy
  243.          exx
  244.          ld de,32
  245.          ld b,hy
  246.          ld l,b
  247. showbitmapbox_25_lines0
  248.         exx
  249.         push de ;scr (0xc000+)
  250.         push af ;pg
  251.         call setpg32k
  252.         push hl ;bitmap addr
  253.          push de ;scr (0xc000+)
  254.           push hl ;bitmap addr
  255.           pop iy
  256.          ld bc,8
  257.          add hl,bc
  258.          push hl ;bitmap addr+2
  259.         ld b,tpixelrecodeLEFT/256
  260.         ld h,tpixelrecodeRIGHT/256
  261.         exx
  262.         ;ld a,(setpgs_scr_low)
  263.         ld a,(user_scr0_low)
  264.         SETPG4000
  265.         SHOWBITMAPLINELAYER02_25 ;lx=wid(chr)
  266.          pop iy ;bitmap addr+2
  267.         exx
  268.          pop de ;scr (0xc000+)
  269.         exx
  270.         ;ld a,(setpgs_scr_high)
  271.         ld a,(user_scr0_high)
  272.         SETPG4000
  273.         SHOWBITMAPLINELAYER02_25 ;lx=wid(chr)
  274.         exx
  275.         pop hl ;bitmap addr
  276.         pop af ;pg
  277.         pop de ;scr (0xc000+)
  278.         call showbitmapbox_scrlinedown
  279.         call showbitmapbox_linedown2
  280.         call showbitmapbox_linedown2
  281.         exx
  282.         dec l
  283.         jp nz,showbitmapbox_25_lines0
  284.         jp popiy_popbc_showbitmaprightbox
  285.         ;pop iy ;hy=hgt на экране
  286.         ;pop bc ;xy на экране
  287. ;c=x/8 на экране
  288. ;b=y на экране
  289. ;hy=hgt
  290. ;lx=wid(chr)
  291.         ;jp showbitmaprightbox ;делает setpgs_scr
  292.  
  293. showbitmapbox_50_lines
  294.         push iy
  295.          exx
  296.          ld de,16
  297.          ld b,hy
  298.          ld l,b
  299. showbitmapbox_50_lines0
  300.         exx
  301.         push de ;scr (0xc000+)
  302.         push af ;pg
  303.         call setpg32k
  304.         push hl ;bitmap addr
  305.          push de ;scr (0xc000+)
  306.           push hl ;bitmap addr
  307.           pop iy
  308.          ld bc,4
  309.          add hl,bc
  310.          push hl ;bitmap addr+2
  311.         ld b,tpixelrecodeLEFT/256
  312.         ld h,tpixelrecodeRIGHT/256
  313.         exx
  314.         ;ld a,(setpgs_scr_low)
  315.         ld a,(user_scr0_low)
  316.         SETPG4000
  317.         SHOWBITMAPLINELAYER02_50 ;lx=wid(chr)
  318.          pop iy ;bitmap addr+2
  319.         exx
  320.          pop de ;scr (0xc000+)
  321.         exx
  322.         ;ld a,(setpgs_scr_high)
  323.         ld a,(user_scr0_high)
  324.         SETPG4000
  325.         SHOWBITMAPLINELAYER02_50 ;lx=wid(chr)
  326.         exx
  327.         pop hl ;bitmap addr
  328.         pop af ;pg
  329.         pop de ;scr (0xc000+)
  330.         call showbitmapbox_scrlinedown
  331.         call showbitmapbox_linedown2
  332.         exx
  333.         dec l
  334.         jp nz,showbitmapbox_50_lines0
  335.         jp popiy_popbc_showbitmaprightbox
  336.         ;pop iy ;hy=hgt на экране
  337.         ;pop bc ;xy на экране
  338. ;c=x/8 на экране
  339. ;b=y на экране
  340. ;hy=hgt
  341. ;lx=wid(chr)
  342.         ;jp showbitmaprightbox ;делает setpgs_scr
  343.  
  344. showbitmapbox_100_lines
  345. ;hy=hgt
  346. ;lx=wid(chr)
  347. ;hl=gfxaddr
  348. ;a=pg
  349.         push iy
  350.          exx
  351.          ld de,8
  352.          ld b,hy
  353.          ld l,b
  354. showbitmapbox_100_lines0
  355.          exx
  356.         push de ;scr (0xc000+)
  357.         push af ;pg
  358.         call setpg32k
  359.         push hl ;bitmap addr
  360.          push de ;scr (0xc000+)
  361.           push hl ;bitmap addr
  362.           pop iy
  363.          inc hl
  364.          inc hl
  365.          push hl ;bitmap addr+2
  366.         ld b,tpixelrecodeLEFT/256
  367.         ld h,tpixelrecodeRIGHT/256
  368.         exx
  369.         ;ld a,(setpgs_scr_low)
  370.         ld a,(user_scr0_low)
  371.         SETPG4000
  372.         SHOWBITMAPLINELAYER02_100 ;lx=wid(chr)
  373.          pop iy ;bitmap addr+2
  374.         exx
  375.          pop de ;scr (0xc000+)
  376.         exx
  377.         ;ld a,(setpgs_scr_high)
  378.         ld a,(user_scr0_high)
  379.         SETPG4000
  380.         SHOWBITMAPLINELAYER02_100 ;lx=wid(chr)
  381.         exx
  382.         pop hl ;bitmap addr
  383.         pop af ;pg
  384.         pop de ;scr (0xc000+)
  385.         call showbitmapbox_scrlinedown
  386.         call showbitmapbox_linedown
  387.          exx
  388.         dec l
  389.         jp nz,showbitmapbox_100_lines0
  390. popiy_popbc_showbitmaprightbox
  391.         pop iy ;hy=hgt на экране
  392.         pop bc ;xy на экране
  393. ;c=x/8 на экране
  394. ;b=y на экране
  395. ;hy=hgt
  396. ;lx=wid(chr)
  397.         ;jp showbitmaprightbox ;делает setpgs_scr
  398.  
  399. showbitmaprightbox
  400. ;c=x/8 на экране
  401. ;b=y на экране
  402. ;hy=hgt
  403. ;lx=wid(chr)
  404.         push bc ;xy
  405.         call setpgs_scr
  406.  
  407.         ld hl,(curbitmapwid_edit)
  408.         ld de,(curbitmapxscroll)
  409.         or a
  410.         sbc hl,de
  411.         call scalebitmapcoords
  412.         pop bc ;xy
  413.        
  414.         ld de,workzonewid8*8
  415.         or a
  416.         sbc hl,de ;вычли ширину рабочей зоны
  417.         ret nc ;вне экрана
  418.         ;hl=минус максимальная ширина бокса по этой x-координате (!=0)
  419.        
  420.         push hl
  421.         add hl,de
  422.         ld de,workzonex8*8
  423.         add hl,de ;hl=x на экране правой границы битмэпа
  424.         ex de,hl ;de=x на экране правой границы битмэпа
  425.         pop hl ;hl=минус максимальная ширина бокса по этой x-координате
  426.         ;xor a
  427.         ;sub l
  428.         ;ld l,a
  429.         ;sbc a,h
  430.         ;sub l
  431.         ;ld h,a
  432.         call neghl ;hl=максимальная ширина бокса по этой x-координате (!=0)
  433.         push de ;x
  434.         ld de,7 ;максимум столько пикселей добавляется для округления
  435.         or a
  436.         sbc hl,de
  437.         add hl,de
  438.         jr c,$+3
  439.         ex de,hl ;взяли наименьшее из 7 и максимальной ширины бокса по этой x-координате
  440.         ;hl=wid (последний пиксель = x+wid-1)
  441.         pop de ;x
  442.        
  443.         ld a,c ;x/8
  444.         add a,lx ;wid(chr)
  445.         dec a
  446.         ld c,a ;x/8 самого правого отрисованного байта
  447.         push de
  448.         ld a,e
  449.         srl d
  450.         rra
  451.         srl d
  452.         rra
  453.         srl d
  454.         rra
  455.         pop de
  456.         cp c
  457.         ret nz ;не рисуем на правой границе
  458.        
  459.         call setpgshapes
  460.        
  461.         ld c,b;30 ;c=y
  462.         ;ld de,50 ;de=x
  463.         ld b,hy;10 ;b=hgt (последний пиксель = y+hgt-1)
  464.         ;ld lx,backcolor ;lx=color
  465.         call getgreycolor
  466.         ld lx,a
  467.         jp shapes_prpixelbox
  468.  
  469. showbitmapbox_scrlinedown
  470.         ex de,hl
  471.         ld bc,40
  472.         add hl,bc
  473.         ex de,hl ;scr (0xc000+)
  474.         ret
  475.  
  476. showbitmapbox_linedown2
  477.         call showbitmapbox_linedown
  478. showbitmapbox_linedown
  479.         ld bc,(curbitmapwid_view)
  480.         add hl,bc
  481.         bit 6,h
  482.         res 6,h
  483.         ret z
  484.         inc a ;pg
  485.         ret
  486.