?login_element?

Subversion Repositories NedoOS

Rev

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

  1.         ;export _sprites_start
  2.         ;export _sprites_stop
  3.  
  4. ;win0: background layer; screen procedure
  5. ;win1: screen layers 0,2
  6. ;win2: screen layers 1,3
  7. ;win3: code,stack,interrupt
  8.  
  9.  
  10.  
  11. ;ъюяшЁютрэшх тшфшьюую ¤ъЁрэр т Єхэхтющ
  12.  
  13. copy_visible_to_shadow
  14.         ;ld a,(_screenActive)
  15.         ;ld bc,MEM_SLOT2
  16.         ;ld (_memSlot2),a
  17.         ;out (c),a
  18.         call getuser_scr_low
  19.         SETPG8000
  20.  
  21.         ;ld b,high MEM_SLOT1
  22.         ;xor 2
  23.         ;ld (_memSlot1),a
  24.         ;out (c),a
  25.         call getuser_scr_low_cur
  26.         call copy_visible_to_shadow_setldirpage ;SETPG4000
  27.  
  28.         ;ld hl,16384
  29.         ;ld de,32768
  30.         ;ld b,h
  31.         ;ld c,l
  32.         ;call _fast_ldir
  33.  
  34.         ;ld a,(_screenActive)
  35.         ;ld bc,MEM_SLOT2
  36.         ;sub 4
  37.         ;ld (_memSlot2),a
  38.         ;out (c),a
  39.         call getuser_scr_high
  40.         SETPG8000
  41.  
  42.         ;ld b,high MEM_SLOT1
  43.         ;xor 2
  44.         ;ld (_memSlot1),a
  45.         ;out (c),a
  46.         call getuser_scr_high_cur
  47. copy_visible_to_shadow_setldirpage
  48.         SETPG4000
  49.  
  50.         ld hl,16384
  51.         ld de,32768
  52.         ld b,h
  53.         ld c,l
  54.         jp _fast_ldir
  55.  
  56.  
  57.  
  58. ;ъюяшЁютрэшх ¤ъЁрэр т сєЇхЁ Їюэр фы  ёяЁрщЄют
  59. ;¤ЄюЄ сєЇхЁ шёяюы№чєхЄё  фы  ёЄшЁрэш  ёяЁрщЄют
  60. ;ш шьххЄ ёяхЎшры№э√щ ЇюЁьрЄ Єшяр H=x L=y
  61. ;сєЇхЁ чрэшьрхЄ ўхЄ√Ёх ёЄЁрэшЎ√ фы  єёъюЁхэш  ёЄшЁрэш 
  62.  
  63. convert_screen
  64.         push bc
  65.         ld a,e ;screen page (physical)
  66.         SETPG4000;call setpg4000;setSlot1
  67.         ld a,d
  68.         call setpg8000;setSlot2
  69.  
  70.         ld c,200
  71.         ex de,hl
  72.         ld hl,#8000
  73. .l1
  74.         push hl
  75.         ld b,40
  76. .l2
  77.         ld a,(de)
  78.         ld (hl),a
  79.         inc de
  80.         inc h
  81.         djnz .l2
  82.         pop hl
  83.         inc l
  84.         dec c
  85.         jr nz,.l1
  86.  
  87.         pop bc
  88.         ret
  89.  
  90.  
  91.  
  92. ;чряєёъ ёяЁрщЄют
  93. ;юўш∙рхЄ ёяшёюъ ёяЁрщЄют
  94. ;ъюяшЁєхЄ тшфшь√щ ¤ъЁрэ т Єхэхтющ
  95. ;ъюяшЁєхЄ Єхэхтющ ¤ъЁрэ т сєЇхЁ ёяЁрщЄют
  96. ;ЁрчЁх°рхЄ т√тюф ёяЁрщЄют
  97.  
  98.  
  99.  
  100. _sprites_start
  101.         ;xor a
  102.         ;ld (spritesActive),a
  103.         call _sprites_stop
  104.  
  105.         ld hl,_sprqueue
  106.         ld de,_sprqueue+1
  107.         ld bc,511
  108.         ld (hl),255
  109.         ldir
  110.  
  111.         call copy_visible_to_shadow
  112.  
  113.         ;ld e,SCR_PAGE1
  114.          call getuser_scr_low
  115.          ld e,a
  116.         ld d,SPBUF_PAGE0
  117.         ld hl,#4000
  118.         call convert_screen
  119.         ;ld e,SCR_PAGE5
  120.          call getuser_scr_high
  121.          ld e,a
  122.         ld d,SPBUF_PAGE1
  123.         ld hl,#4000
  124.         call convert_screen
  125.         ;ld e,SCR_PAGE1
  126.          call getuser_scr_low_cur
  127.          ld e,a
  128.         ld d,SPBUF_PAGE2
  129.         ld hl,#6000
  130.         call convert_screen
  131.         ;ld e,SCR_PAGE5
  132.          call getuser_scr_high_cur
  133.          ld e,a
  134.         ld d,SPBUF_PAGE3
  135.         ld hl,#6000
  136.         call convert_screen
  137.  
  138.         MRestoreMemMap12
  139.  
  140.         ld a,1
  141.         ld (spritesActive),a
  142.  
  143.  
  144.         ret
  145.  
  146.  
  147.  
  148. ;юёЄрэютър ёяЁрщЄют
  149.  
  150. _sprites_stop
  151.         xor a
  152.         ld (spritesActive),a
  153.         ret
  154.  
  155.  
  156.  
  157.         align 256
  158. taby
  159.         dup 200-16
  160.         db high ((low $)*40)+#40
  161.         edup
  162.         dup 256-(low $)
  163.         db high ((200-16)*40)+#40
  164.         edup
  165.  
  166.         dup 200-16
  167.         db low ((low $)*40)
  168.         edup
  169.         dup 256-(low $)
  170.         db low ((200-16)*40)
  171.         edup
  172. ;tabx
  173.         dup 160-8
  174.         db (low $)/4
  175.         edup
  176.         dup 256-(low $)
  177.         db (160-8)/4
  178.         edup
  179. ;tprsprx
  180.         dup 64
  181.         db low prsprx0
  182.         db low prsprx1
  183.         db low prsprx2
  184.         db low prsprx3
  185.         edup
  186. tresprx
  187.         dup 64
  188.         db low resprx0
  189.         db low resprx1
  190.         db low resprx2
  191.         db low resprx3
  192.         edup
  193.  
  194.        ;ds .(-$)
  195. toutd
  196. ;TODO яхЁхёўшЄрЄ№ т Ёхры№э√х ёЄЁрэшЎ√
  197.         db SPBUF_PAGE1;2
  198.         db SPBUF_PAGE2;1
  199.         db SPBUF_PAGE3;0
  200.         db SPBUF_PAGE0;3
  201.         db SPBUF_PAGE1;2
  202.         db SPBUF_PAGE2;1
  203.         db SPBUF_PAGE3;0
  204.  
  205. resprx0
  206.         ;display /h,$
  207.          ld h,a ;H=x
  208.          ex af,af' ;'
  209.          ld l,a ;L=y
  210.         ld a,b
  211.         push bc
  212.          push hl
  213.        add a,64
  214.        ld b,a
  215.         push bc
  216.          push hl
  217.        sub 32
  218.         ld b,a
  219.         push bc
  220.          push hl
  221.        add a,64
  222.        ld b,a
  223.         push bc
  224.          push hl
  225.         ;ld bc,MEM_SLOT0 ;background window port
  226.         ld hl,toutd+6 ;фы  outd ;ьюцэю dec l
  227.         jp (ix)
  228.  
  229. resprx1
  230.         ;display /h,$
  231.          ld h,a
  232.          ex af,af' ;'
  233.          ld l,a ;L=y
  234.        ld a,b
  235.        add a,64
  236.        ld b,a
  237.         push bc
  238.          push hl
  239.        sub 32
  240.        ld b,a
  241.         push bc
  242.          push hl
  243.        add a,64
  244.        ld b,a
  245.         push bc
  246.          push hl
  247.        sub 96
  248.         ld b,a
  249.         inc bc
  250.         push bc
  251.          inc h
  252.          push hl
  253.         ;ld bc,MEM_SLOT0 ;background window port
  254.         ld hl,toutd+3 ;фы  outd ;ьюцэю b
  255.         jp (ix)
  256.  
  257. resprx2
  258.         ;display /h,$
  259.          ld h,a
  260.          ex af,af' ;'
  261.          ld l,a ;L=y
  262.        ld a,b
  263.        add a,32
  264.        ld b,a
  265.         push bc
  266.          push hl
  267.        add a,64
  268.        ld b,a
  269.         push bc
  270.          push hl
  271.        sub 96
  272.         ld b,a
  273.         inc bc
  274.         push bc
  275.          inc h
  276.          push hl
  277.        ld a,b
  278.        add a,64
  279.        ld b,a
  280.         push bc
  281.          push hl
  282.         ;ld bc,MEM_SLOT0 ;background window port
  283.         ld hl,toutd+4 ;фы  outd ;ьюцэю c
  284.         jp (ix)
  285.  
  286. resprx3
  287.         ;display /h,$
  288.          ld h,a
  289.         ld l,b
  290.         ld a,b
  291.         add a,96
  292.         ld b,a
  293.         push bc
  294.         ld b,l
  295.          ex af,af' ;'
  296.          ld l,a ;L=y
  297.          push hl
  298.         inc bc
  299.         push bc
  300.          inc h
  301.          push hl
  302.         ld a,b
  303.        add a,64
  304.        ld b,a
  305.         push bc
  306.          push hl
  307.         sub 32
  308.         ld b,a
  309.         push bc
  310.          push hl
  311.         ;ld bc,MEM_SLOT0 ;#37f7 ;background window port
  312.         ld hl,toutd+5 ;фы  outd ;ьюцэю h
  313.         jp (ix)
  314.  
  315. prsprx0
  316.         ;display /h,$
  317.         ld b,a
  318.         push bc
  319.        add a,64
  320.        ld b,a
  321.         push bc
  322.        sub 32
  323.         ld b,a
  324.         push bc
  325.        add a,64
  326.        ld b,a
  327.         push bc
  328.         exx
  329.         jp (ix)
  330.  
  331. prsprx1
  332.         ;display /h,$
  333.         ld h,a
  334.         add a,64
  335.         ld b,a
  336.         push bc
  337.         sub 32
  338.         ld b,a
  339.         push bc
  340.        add a,64
  341.        ld b,a
  342.         push bc
  343.         ld b,h
  344.         inc bc
  345.         push bc
  346.         exx
  347.         jp (ix)
  348.  
  349. prsprx2
  350.         ;display /h,$
  351.         ld h,a
  352.         add a,32
  353.         ld b,a
  354.         push bc
  355.        add a,64
  356.        ld b,a
  357.         push bc
  358.         ld b,h
  359.         inc bc
  360.         push bc
  361.        ld a,b
  362.        add a,64
  363.        ld b,a
  364.         push bc
  365.         exx
  366.         jp (ix)
  367.  
  368. prsprx3
  369.         ;display /h,$
  370.         ld h,a
  371.         add a,96
  372.         ld b,a
  373.         push bc
  374.         ld b,h
  375.         inc bc
  376.         push bc
  377.        ld a,b
  378.        add a,64
  379.        ld b,a
  380.         push bc
  381.         sub 32
  382.         ld b,a
  383.         push bc
  384.         exx
  385.         jp (ix)
  386.  
  387. respr
  388.        ;ret      
  389.         ld hl,_sprqueue
  390.                 ld a,(_screenActive)
  391.                 and 2
  392.                 jr nz,$+3
  393.                 inc h
  394.         exx
  395.         ld ix,squareremover
  396.         ld iy,respr0
  397.         ld bc,40
  398.         exx
  399.   jr respr0go
  400. respr0
  401.   inc e
  402.   ret z ;end of queue
  403.         exd
  404. respr0go
  405.   ld d,(hl) ;high id
  406.   inc d
  407.   ret z ;end of queue
  408.         inc l
  409.         inc l
  410.         ld d,high taby
  411.         ld e,(hl) ;y
  412.         inc l
  413.          ld a,e
  414.          ex af,af' ;'
  415.         ld a,(de) ;addrh(y)
  416.         ld b,a
  417.         inc d
  418.         ld a,(de) ;addrl(y)
  419.         inc d ;'tabx
  420.         ld e,(hl) ;x
  421.         exd
  422.         add a,(hl) ;x/4
  423.         ld c,a
  424.         adc a,b
  425.         sub c
  426.         ld b,a
  427.          ld a,(hl) ;x/4
  428.           or 0xc0
  429.         ld h,high tresprx ;(4 тхЄъш)
  430.         ld l,(hl)
  431.         ld h,high resprx0 ;todo inc h
  432.         jp (hl)
  433.  
  434.  
  435.  
  436. prspr
  437.        ;ret
  438.         ld iy,prspr0
  439.         ld bc,40
  440.         exx
  441.         ld de,_sprqueue
  442.                 ld a,(_screenActive)
  443.                 and 2
  444.                 jr nz,$+3
  445.                 inc d
  446.   jr prspr0go
  447. prspr0
  448.         exx
  449.   inc e
  450.   ret z ;end of queue
  451. prspr0go
  452.         exd
  453.         ld d,(hl) ;high id
  454.   inc d
  455.   ret z ;end of queue
  456.          inc l
  457.          ld e,(hl)
  458.          inc l
  459.       ld a,SPTBL_PAGE
  460.       ;ld bc,MEM_SLOT0 ;#37f7 ;sprites window port
  461.       ;out (c),a
  462.       call setpgc000
  463.       ld a,d
  464.       or 0xc0
  465.       ld d,a
  466.         ld a,(de) ;addrl(id)
  467.         ld lx,a
  468.         inc d
  469.         ld a,(de) ;addrh(id)
  470.       or 0xc0
  471.         ld hx,a ;ix=spraddr
  472.         inc d
  473.       ld a,(de) ;pg(id)
  474.         ;ifdef ATM
  475.         ;xor 128
  476.         ;endif
  477.       ;out (c),a
  478.       cpl
  479.       call setpgc000
  480.         ld d,high taby
  481.         ld e,(hl) ;y
  482.         inc hl
  483.         ld a,(de) ;addrh(y)
  484.         ld b,a
  485.         inc d
  486.         ld a,(de) ;addrl(y)
  487.         inc d ;'tx
  488.         ld e,(hl) ;x
  489.         exd
  490.         add a,(hl) ;x/4
  491.         ld c,a
  492.         adc a,b
  493.         sub c
  494.         inc h ;'tprsprx (4 тхЄъш)
  495.         ld l,(hl)
  496.         ld h,high prsprx0
  497.         jp (hl)
  498.  
  499.  
  500.  
  501. squareremover
  502.        dup 4
  503.         ;outd ;background page
  504.                 ld a,(hl)
  505.                 ;out (c),a
  506.                 call setpgc000
  507.                 dec l
  508.         exx
  509.         pop de ;buf
  510.         pop hl ;screen
  511.  
  512.        dup 7
  513.  
  514.         ld a,(de)
  515.         ld (hl),a
  516.         inc hl
  517.         inc d
  518.         ld a,(de)
  519.         ld (hl),a
  520.         inc e
  521.         add hl,bc
  522.         ld a,(de)
  523.         ld (hl),a
  524.         dec hl
  525.         dec d
  526.         ld a,(de)
  527.         ld (hl),a
  528.         inc e
  529.         add hl,bc
  530.  
  531.        edup ;7*2 lines
  532.         ld a,(de)
  533.         ld (hl),a
  534.         inc hl
  535.         inc d
  536.         ld a,(de)
  537.         ld (hl),a
  538.         inc e
  539.         add hl,bc
  540.         ld a,(de)
  541.         ld (hl),a
  542.         dec hl
  543.         dec d
  544.         ld a,(de)
  545.         ld (hl),a
  546.  
  547.         exx
  548.        edup ;4 layers
  549.         jp (iy) ;respr0