?login_element?

Subversion Repositories NedoOS

Rev

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

  1.         ;export _draw_tile
  2.         ;export _draw_image
  3.         export _select_image
  4.         export _draw_tile_key
  5.         export _color_key
  6.  
  7.  
  8.  
  9.         macro MDrawTile
  10.  
  11.         ld bc,-16384+40
  12.         dup 8
  13.         ld a,(de)       ;#4xxx
  14.         ld (hl),a
  15.         inc e
  16.         set 5,h
  17.         ld a,(de)       ;#6xxx
  18.         ld (hl),a
  19.         inc e
  20.         set 7,h
  21.         res 6,h
  22.         ld a,(de)       ;#axxx
  23.         ld (hl),a
  24.         inc e
  25.         res 5,h
  26.         ld a,(de)       ;#8xxx
  27.         ld (hl),a
  28.         inc e
  29.         add hl,bc
  30.         edup
  31.         org $-2
  32.  
  33.         endm
  34.  
  35.  
  36.  
  37.         macro MDrawTileGetAddrs
  38.  
  39.         ld hl,(tileOffset)
  40.         add hl,de
  41.         ex de,hl
  42.        
  43.         ld h,high scrTable
  44.         ld l,b
  45.         ld a,c
  46.         add a,(hl)
  47.         set 5,l
  48.         ld h,(hl)
  49.         ld l,a
  50.  
  51.         ifdef EVO
  52.        
  53.         ld a,d
  54.         srl a
  55.         add a,low ~GFX_PAGE
  56.         ld bc,MEM_SLOT0
  57.         cpl
  58.         out (c),a
  59.        
  60.         else
  61.        
  62.         ld a,d
  63.         srl a
  64.         add a,low (GFX_PAGE^127)
  65.         ld bc,MEM_SLOT0
  66.         xor 127
  67.         out (c),a
  68.        
  69.         endif
  70.  
  71.         ld a,e
  72.         rrca
  73.         rrca
  74.         rrca
  75.         ld e,a
  76.         and 31
  77.         bit 0,d
  78.         jr z,$+4
  79.         or #20
  80.         ld d,a
  81.         ld a,e
  82.         and #e0
  83.         ld e,a
  84.  
  85.         endm
  86.  
  87.  
  88.  
  89.         macro MCopyTileColumnFromBuf
  90.         ld bc,40
  91.         dup 8
  92.         ld a,(de)
  93.         ld (hl),a
  94.         inc e
  95.         add hl,bc
  96.         edup
  97.         endm
  98.  
  99.  
  100.  
  101.         macro MCopyTileColumnToBuf
  102.         ld bc,40
  103.         dup 8
  104.         ld a,(hl)
  105.         ld (de),a
  106.         inc e
  107.         add hl,bc
  108.         edup
  109.         endm
  110.  
  111.  
  112.  
  113. ;ъюяшЁютрэшх Єрщыр шч Єхэхтюую ¤ъЁрэр т сєЇхЁ ёяЁрщЄют
  114. ;d=x,e=y
  115.  
  116. updateOneTileToBuffer
  117.         exa
  118.         push de
  119.  
  120.         ld a,d                          ;яюыєўшЄ№ шч de рфЁхё т ¤ъЁрэх
  121.         ld h,high scrTable
  122.         ld l,e
  123.         add a,(hl)
  124.         set 5,l
  125.         ld h,(hl)
  126.         ld l,a
  127.  
  128.         sla e
  129.         sla e
  130.         sla e
  131.  
  132.         ld bc,MEM_SLOT0
  133.         ld a,SPBUF_PAGE0
  134.         out (c),a
  135.  
  136.         MCopyTileColumnToBuf    ;ёЄюысхЎ 0
  137.         org $-2
  138.         ld a,e
  139.         sub 7
  140.         ld e,a
  141.         ld bc,-7*40+16384
  142.         add hl,bc
  143.  
  144.         ld bc,MEM_SLOT0
  145.         ld a,SPBUF_PAGE1
  146.         out (c),a
  147.  
  148.         MCopyTileColumnToBuf    ;ёЄюысхЎ 1
  149.         org $-2
  150.         ld a,e
  151.         sub 7
  152.         ld e,a
  153.         ld bc,-(7*40+8192)
  154.         add hl,bc
  155.  
  156.         ld bc,MEM_SLOT0
  157.         ld a,SPBUF_PAGE2
  158.         out (c),a
  159.  
  160.         MCopyTileColumnToBuf    ;ёЄюысхЎ 2
  161.         org $-2
  162.         ld a,e
  163.         sub 7
  164.         ld e,a
  165.         ld bc,-7*40+16384
  166.         add hl,bc
  167.  
  168.         ld bc,MEM_SLOT0
  169.         ld a,SPBUF_PAGE3
  170.         out (c),a
  171.  
  172.         MCopyTileColumnToBuf    ;ёЄюысхЎ 3
  173.         org $-2
  174.  
  175.         pop de
  176.         exa
  177.         ret
  178.  
  179.  
  180.  
  181. ;ъюяшЁютрэшх Єрщыр шч сєЇхЁр ёяЁрщЄр эр Єхэхтющ ¤ъЁрэ
  182. ;d=x,e=y
  183.  
  184. updateOneTileFromBuffer
  185.         exa
  186.         push de
  187.  
  188.         ld a,d                          ;яюыєўшЄ№ шч de рфЁхё т ¤ъЁрэх
  189.         ld h,high scrTable
  190.         ld l,e
  191.         add a,(hl)
  192.         set 5,l
  193.         ld h,(hl)
  194.         ld l,a
  195.  
  196.         sla e
  197.         sla e
  198.         sla e
  199.  
  200.         ld bc,MEM_SLOT0
  201.         ld a,SPBUF_PAGE0
  202.         out (c),a
  203.  
  204.         MCopyTileColumnFromBuf  ;ёЄюысхЎ 0
  205.         org $-2
  206.         ld a,e
  207.         sub 7
  208.         ld e,a
  209.         ld bc,-7*40+16384
  210.         add hl,bc
  211.  
  212.         ld bc,MEM_SLOT0
  213.         ld a,SPBUF_PAGE1
  214.         out (c),a
  215.  
  216.         MCopyTileColumnFromBuf  ;ёЄюысхЎ 1
  217.         org $-2
  218.         ld a,e
  219.         sub 7
  220.         ld e,a
  221.         ld bc,-(7*40+8192)
  222.         add hl,bc
  223.  
  224.         ld bc,MEM_SLOT0
  225.         ld a,SPBUF_PAGE2
  226.         out (c),a
  227.  
  228.         MCopyTileColumnFromBuf  ;ёЄюысхЎ 2
  229.         org $-2
  230.         ld a,e
  231.         sub 7
  232.         ld e,a
  233.         ld bc,-7*40+16384
  234.         add hl,bc
  235.  
  236.         ld bc,MEM_SLOT0
  237.         ld a,SPBUF_PAGE3
  238.         out (c),a
  239.  
  240.         MCopyTileColumnFromBuf  ;ёЄюысхЎ 3
  241.         org $-2
  242.  
  243.         pop de
  244.         exa
  245.         ret
  246.  
  247.  
  248.  
  249. updateTilesToBuffer
  250.         ld a,(tileUpdate)
  251.         or a
  252.         ret z
  253.  
  254.         ld hl,tileUpdateMap
  255.         ld e,0  ;y
  256. .clearUpdMap0
  257.         ld d,0  ;x
  258. .clearUpdMap1
  259.         ld a,(hl)
  260.         or a
  261.         jp nz,.rowChange
  262.         ld a,d
  263.         add a,8
  264.         ld d,a
  265.         jp .noRowChange
  266. .rowChange
  267.         push hl
  268.         dup 8
  269.         rra
  270.         call c,updateOneTileToBuffer
  271.         inc d
  272.         edup
  273.         pop hl
  274.         ld a,d
  275. .noRowChange
  276.         inc l
  277.         cp 40
  278.         jp nz,.clearUpdMap1
  279.         inc l
  280.         inc l
  281.         inc l
  282.         inc e
  283.         ld a,e
  284.         cp 25
  285.         jp nz,.clearUpdMap0
  286.  
  287.         ret
  288.  
  289.  
  290.  
  291. updateTilesFromBuffer
  292.         ld a,(tileUpdate)
  293.         or a
  294.         ret z
  295.         xor a
  296.         ld (tileUpdate),a
  297.  
  298.         ld hl,tileUpdateMap
  299.         ld e,0  ;y
  300. .clearUpdMap0
  301.         ld d,0  ;x
  302. .clearUpdMap1
  303.         ld a,(hl)
  304.         or a
  305.         jp nz,.rowChange
  306.         ld a,d
  307.         add a,8
  308.         ld d,a
  309.         jp .noRowChange
  310. .rowChange
  311.         push hl
  312.         dup 8
  313.         rra
  314.         call c,updateOneTileFromBuffer
  315.         inc d
  316.         edup
  317.         pop hl
  318.         ld (hl),0
  319.         ld a,d
  320. .noRowChange
  321.         inc l
  322.         cp 40
  323.         jp nz,.clearUpdMap1
  324.         inc l
  325.         inc l
  326.         inc l
  327.         inc e
  328.         ld a,e
  329.         cp 25
  330.         jp nz,.clearUpdMap0
  331.  
  332.         ret
  333.  
  334.  
  335.  
  336. ;т√сюЁ шчюсЁрцхэш  фы  юЄЁшёютъш Єрщыют
  337.  
  338. _select_image
  339.  
  340.  
  341.         ld h,0
  342.         add hl,hl
  343.         add hl,hl
  344.         ld bc,IMG_LIST
  345.         add hl,bc
  346.  
  347.         ld bc,MEM_SLOT0
  348.         ld a,PAL_PAGE
  349.         out (c),a
  350.  
  351.         ld e,(hl)       ;tile
  352.         inc l
  353.         ld d,(hl)
  354.         ld (tileOffset),de
  355.  
  356.         ld a,CC_PAGE0
  357.         out (c),a
  358.  
  359.        
  360.        
  361.        
  362.         ret
  363.  
  364.  
  365.  
  366. ;єёЄрэютър Їырур юсэютыхэш  Єрщыр
  367. ;c=X, b=y, эх ьхэ хЄ bc ш de
  368.  
  369. setTileUpdateMapF
  370.         ld (tileUpdate),a       ;A тёхуфр эх 0 эр тїюфх
  371. setTileUpdateMap
  372.         ld h,high tileUpdateXTable
  373.         ld l,c
  374.         ld a,(hl)
  375.         set 6,l
  376.         exa
  377.         ld a,b
  378.         add a,a
  379.         add a,a
  380.         add a,a
  381.         add a,(hl)
  382.         ld l,a
  383.         ld h,high tileUpdateMap
  384.         exa
  385.         or (hl)
  386.         ld (hl),a
  387.         ret
  388.  
  389.  
  390.  
  391. ;c=X, b=Y, de=tile
  392. ;ъююЁфшэрЄ√ т Єрщырї
  393.  
  394. _draw_tile
  395.         ;---------------
  396.         ld a,(_memSlot2)
  397.         push af
  398.         ;---------------
  399.         ld a,(spritesActive)
  400.         or a
  401.         call nz,setTileUpdateMapF
  402.         MDrawTileGetAddrs
  403.         MSetShadowScreen
  404.         MDrawTile
  405.         MRestoreMemMap012
  406.         ;-----------------
  407.         pop af
  408.     ld (_memSlot2),a
  409.         ld bc,MEM_SLOT2
  410.     out (c),a
  411.         ;-----------------
  412.         ret
  413.  
  414.  
  415.  
  416. ;єёЄрэютър яЁючЁрўэюую ЎтхЄр фы  draw_tile_key
  417.  
  418. _color_key
  419.         ld b,high colorMaskTable
  420.         ld a,(bc)
  421.         ld (_draw_tile_key.keyAB0),a
  422.         ld (_draw_tile_key.keyAB1),a
  423.         ld (_draw_tile_key.keyAB2),a
  424.         ld (_draw_tile_key.keyAB3),a
  425.         set 4,c
  426.         ld a,(bc)
  427.         ld (_draw_tile_key.keyA0),a
  428.         ld (_draw_tile_key.keyA1),a
  429.         ld (_draw_tile_key.keyA2),a
  430.         ld (_draw_tile_key.keyA3),a
  431.         set 5,c
  432.         ld a,(bc)
  433.         ld (_draw_tile_key.keyB0),a
  434.         ld (_draw_tile_key.keyB1),a
  435.         ld (_draw_tile_key.keyB2),a
  436.         ld (_draw_tile_key.keyB3),a
  437.         ret
  438.  
  439.  
  440.  
  441. ;юЄЁшёютър Єрщыр ё яЁючЁрўэ√ьш яшъёхы ьш
  442. ;c=X, b=Y, de=tile
  443. ;ъююЁфшэрЄ√ т Єрщырї
  444.  
  445. _draw_tile_key
  446.         ;---------------
  447.         ld a,(_memSlot2)
  448.         push af
  449.         ;---------------
  450.         ld a,(spritesActive)
  451.         or a
  452.         call nz,setTileUpdateMapF
  453.         MDrawTileGetAddrs
  454.         MSetShadowScreen
  455.  
  456.         ld a,8
  457. .loop
  458.         exa
  459. .column0
  460.         ld a,(de)
  461. .keyAB0=$+1
  462.         cp 0
  463.         jr z,.column0done
  464.         and %01000111
  465. .keyA0=$+1
  466.         cp 0
  467.         jr z,.skipA0
  468.         ld c,a
  469.         ld a,(hl)
  470.         and %10111000
  471.         or c
  472.         ld (hl),a
  473. .skipA0
  474.         ld a,(de)
  475.         and %10111000
  476. .keyB0=$+1
  477.         cp 0
  478.         jr z,.column0done
  479.         ld c,a
  480.         ld a,(hl)
  481.         and %01000111
  482.         or c
  483.         ld (hl),a
  484. .column0done
  485.         inc e
  486.         set 5,h
  487.  
  488. .column1
  489.         ld a,(de)
  490. .keyAB1=$+1
  491.         cp 0
  492.         jr z,.column1done
  493.         and %01000111
  494. .keyA1=$+1
  495.         cp 0
  496.         jr z,.skipA1
  497.         ld c,a
  498.         ld a,(hl)
  499.         and %10111000
  500.         or c
  501.         ld (hl),a
  502. .skipA1
  503.         ld a,(de)
  504.         and %10111000
  505. .keyB1=$+1
  506.         cp 0
  507.         jr z,.column1done
  508.         ld c,a
  509.         ld a,(hl)
  510.         and %01000111
  511.         or c
  512.         ld (hl),a
  513. .column1done
  514.         inc e
  515.         res 6,h
  516.         set 7,h
  517.  
  518. .column2
  519.         ld a,(de)
  520. .keyAB2=$+1
  521.         cp 0
  522.         jr z,.column2done
  523.         and %01000111
  524. .keyA2=$+1
  525.         cp 0
  526.         jr z,.skipA2
  527.         ld c,a
  528.         ld a,(hl)
  529.         and %10111000
  530.         or c
  531.         ld (hl),a
  532. .skipA2
  533.         ld a,(de)
  534.         and %10111000
  535. .keyB2=$+1
  536.         cp 0
  537.         jr z,.column2done
  538.         ld c,a
  539.         ld a,(hl)
  540.         and %01000111
  541.         or c
  542.         ld (hl),a
  543. .column2done
  544.         inc e
  545.         res 5,h
  546.  
  547. .column3
  548.         ld a,(de)
  549. .keyAB3=$+1
  550.         cp 0
  551.         jr z,.column3done
  552.         and %01000111
  553. .keyA3=$+1
  554.         cp 0
  555.         jr z,.skipA3
  556.         ld c,a
  557.         ld a,(hl)
  558.         and %10111000
  559.         or c
  560.         ld (hl),a
  561. .skipA3
  562.         ld a,(de)
  563.         and %10111000
  564. .keyB3=$+1
  565.         cp 0
  566.         jr z,.column3done
  567.         ld c,a
  568.         ld a,(hl)
  569.         and %01000111
  570.         or c
  571.         ld (hl),a
  572. .column3done
  573.         inc e
  574.         ld bc,-16384+40
  575.         add hl,bc
  576.         exa
  577.         dec a
  578.         jp nz,.loop
  579.  
  580.         MRestoreMemMap012
  581.        
  582.         ;-----------------
  583.         pop af
  584.     ld (_memSlot2),a
  585.         ld bc,MEM_SLOT2
  586.     out (c),a
  587.         ;-----------------
  588.         ret
  589.  
  590.  
  591.  
  592. ;юЄЁшёютър шчюсЁрцхэш  Ўхышъюь
  593. ;¤Єр яЁюЎхфєЁр с√ёЄЁхх ўхь т√тюф юЄфхы№э√ї Єрщыют
  594. ;a=id, c=X, b=Y
  595.  
  596. ;яЁш cy=1:
  597. ;d=begx, e=width
  598.  
  599. _draw_image
  600.         ;---------------
  601.         ;ld a,(_memSlot2)
  602.         ;push af
  603.         ;-------------------------
  604.         push bc
  605.         push af
  606.  
  607.         ld h,0
  608.         ld l,a
  609.         add hl,hl
  610.         add hl,hl
  611.         ld bc,IMG_LIST
  612.         add hl,bc
  613.  
  614.         ld bc,MEM_SLOT0
  615.         ld a,PAL_PAGE
  616.         out (c),a
  617.  
  618.          pop af
  619.          jr nc,_draw_image_noextra
  620.          ld c,e ;width
  621.          ld a,d ;begx
  622.          add a,(hl)     ;tileLSB
  623.          ld e,a
  624.          inc l
  625.          adc a,(hl)     ;tileHSB
  626.          sub e
  627.          ld d,a
  628.          inc l
  629.          ld a,(hl)      ;width
  630.          inc l
  631.          ld b,(hl)      ;height
  632.          ld l,a
  633.          jp _draw_image_noextraq
  634.  
  635. _draw_image_noextra
  636.         ld e,(hl)       ;tile
  637.         inc l
  638.         ld d,(hl)
  639.         inc l
  640.         ld c,(hl)       ;width
  641.         inc l
  642.         ld b,(hl)       ;height
  643.  
  644.  
  645.         ld l,c
  646. _draw_image_noextraq
  647.         ld h,0
  648.         ld (.wdt),hl
  649.  
  650.  
  651.         pop hl
  652.  
  653.         ld a,l
  654.         cp 40
  655.         jp nc,.done
  656.         ld a,h
  657.         cp 25
  658.         jp nc,.done
  659.  
  660.         ld a,c
  661.         add a,l
  662.         cp 40
  663.         jr c,.noHClip
  664.         ld a,40
  665.         sub l
  666.         ld c,a
  667. .noHClip
  668.         ld a,c
  669.         or a
  670.         jp z,.done
  671.  
  672.         ld a,b
  673.         add a,h
  674.         cp 25
  675.         jr c,.noVClip
  676.         ld a,25
  677.         sub h
  678.         ld b,a
  679. .noVClip
  680.         ld a,b
  681.         or a
  682.         jp z,.done
  683.  
  684.         push bc
  685.  
  686.         call setShadowScreen
  687.  
  688.         pop bc
  689.         push bc ;ЁрчьхЁ
  690.         push hl ;ъююЁфшэрЄ√
  691.  
  692.         ld a,l
  693.         ld l,h
  694.         ld h,high scrTable
  695.         add a,(hl)
  696.         set 5,l
  697.         ld h,(hl)
  698.         ld l,a
  699.  
  700. .loopv
  701.         push bc
  702.         push hl
  703.         push de
  704.         ld a,c
  705.         exa
  706.  
  707.         ifdef EVO
  708.        
  709.         ld a,d
  710.         srl a
  711.         add a,low ~GFX_PAGE
  712.         cpl
  713.         ld (.page),a
  714.         ld bc,MEM_SLOT0
  715.         out (c),a
  716.         else
  717.        
  718.         ld a,d
  719.         srl a
  720.         add a,low (GFX_PAGE^127)
  721.         xor 127
  722.         ld (.page),a
  723.         ld bc,MEM_SLOT0
  724.         out (c),a
  725.        
  726.         endif
  727.  
  728.         ld a,e
  729.         rrca
  730.         rrca
  731.         rrca
  732.         ld e,a
  733.         and 31
  734.         bit 0,d
  735.         jr z,$+4
  736.         or #20
  737.         ld d,a
  738.         ld a,e
  739.         and #e0
  740.         ld e,a
  741.  
  742.         exa
  743. .looph
  744.         exa
  745.         MDrawTile
  746.  
  747.         inc e
  748.         jp nz,.noPageChange
  749.         inc d
  750.         bit 6,d
  751.         jp z,.noPageChange
  752.         res 6,d
  753. .page=$+1
  754.         ld a,0
  755.         dec a
  756.         ld bc,MEM_SLOT0
  757.         out (c),a
  758.         ld (.page),a
  759.  
  760. .noPageChange
  761.         ld bc,-(16384+7*40-1)
  762.         add hl,bc
  763.         exa
  764.         dec a
  765.         jp nz,.looph
  766.  
  767.         pop de
  768. .wdt=$+1
  769.         ld hl,0
  770.         add hl,de
  771.         ex de,hl
  772.         pop hl
  773.         ld bc,8*40
  774.         add hl,bc
  775.         pop bc
  776.         dec b
  777.         jp nz,.loopv
  778.  
  779.         ld bc,MEM_SLOT1
  780.         ld a,CC_PAGE1
  781.         ld (_memSlot1),a
  782.         out (c),a
  783.  
  784.         ld b,high MEM_SLOT2
  785.         ld a,CC_PAGE2
  786.         ld (_memSlot2),a
  787.         out (c),a
  788.        
  789.         pop bc  ;ъююЁфшэрЄ√ эрўрыр шчюсЁрцхэш  B=y C=x
  790.         pop hl  ;ЁрчьхЁ√ т√тюфшьющ ўрёЄш
  791.  
  792.         ;хёыш ёяЁрщЄ√ ЁрчЁх°хэ√, яюьхўрхь т√тхфхээ√х Єрщы√ т ърЁЄх шчьхэшт°шїё  Єрщыют
  793.  
  794.         ld a,(spritesActive)
  795.         or a
  796.         jr z,.done
  797.         ld (tileUpdate),a
  798.  
  799. .setUpd1
  800.         push bc
  801.         push hl
  802. .setUpd2
  803.         push hl
  804.         call setTileUpdateMap
  805.         pop hl
  806.         inc c
  807.         dec l
  808.         jp nz,.setUpd2
  809.         pop hl
  810.         pop bc
  811.         inc b
  812.         dec h
  813.         jp nz,.setUpd1
  814.  
  815. .done
  816.         ld bc,MEM_SLOT0
  817.         ld a,CC_PAGE0
  818.         out (c),a
  819.        
  820.         ;----------------
  821.         ;pop af
  822.     ;ld (_memSlot2),a
  823.         ;ld bc,MEM_SLOT2
  824.     ;out (c),a
  825.         ;----------------
  826.         ret
  827.