?login_element?

Subversion Repositories NedoOS

Rev

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

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