?login_element?

Subversion Repositories NedoOS

Rev

Rev 941 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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