home *** CD-ROM | disk | FTP | other *** search
/ ticalc.org / ticalc_org_rev_b.iso / archives / 82 / asm / source / ash / chase82.asm < prev    next >
Encoding:
Assembly Source File  |  2001-07-01  |  14.1 KB  |  930 lines

  1. ;------------------------------
  2. ;|The Chase 0.9
  3. ;|By: Ahmed El-Helw
  4. ;|ahmedre@worldnet.att.net
  5. ;|Completed on: Feb 23, 1998
  6. ;|Last Edited: Feb 25, 1998
  7. ;|http://asm8x.home.ml.org
  8. ;-------------------------------
  9.  
  10. #INCLUDE "ti82.h"
  11. #INCLUDE "keys.inc"
  12.  
  13. .org START_ADDR
  14. .DB "The Chase 0.9!!", 0      
  15.  
  16. Init:
  17.     ROM_CALL(CLEARLCD)
  18.     ld hl,0
  19.     ld (CURSOR_POS),hl
  20.     ld hl,TitleText
  21.     ROM_CALL(D_ZT_STR)
  22.     
  23. Loop:
  24.     call GET_KEY
  25.     cp G_1
  26.     jp z,Chaser
  27.     cp G_2
  28.     jp z,Chased
  29.     cp G_CLEAR
  30.     ret z
  31.     jr nz,Loop    
  32.  
  33. Chased:
  34.     ROM_CALL(CLEARLCD)
  35.     ld a,175
  36.     ld (Timer),a
  37.     ld (TimerX),a
  38.     ld a,8
  39.     ld (BallX),a
  40.     ld (BallY),a
  41.     ld a,50
  42.     ld (BoxY),a
  43.     ld (BoxX),a
  44.     call DispBall
  45.     call DispBox
  46.  
  47. ChasedLoop:
  48.     jp DecTimer
  49.  
  50. ChasedLLoop:
  51.     ld     a,0ffh        ;Reset keyport
  52.     out     (1),a            ;Clear Port
  53.     ld     a,0feh        ;Load desired port
  54.     out   (1),a            ;Clear Keys
  55.     in     a,(1)            ;Input Key
  56.     cp    251            ;If key is right
  57.     jp     z,M_Right        ;Goto Right
  58.     cp     253            ;If key is left
  59.     jp     z,M_Left        ;Goto Left
  60.     cp    247            ;Is it key Up
  61.     jp    z,M_Up        ;Move Up
  62.     cp    254            ;Is it Down
  63.     jp    z,M_Down        ;Move Down    
  64.     ld     a,0ffh        ;Reset keyport
  65.     out     (1),a            ;Clear Port
  66.     ld     a,0bfh        ;Load desired port
  67.     out   (1),a            ;Clear Keys
  68.     in     a,(1)            ;Input Key
  69.     cp    127            ;Is it delete
  70.     call    z,GamePause        ;Pause
  71.     cp    191            ;Is it Quit?
  72.     ret   z            ;Return from Program if so
  73.     jr    nz,NoKey        ;NoKey Otherwise
  74.  
  75. GamePause:
  76.     call GET_KEY
  77.     cp $00
  78.     ret nz
  79.     jr GamePause
  80.  
  81. NoKey:
  82.     jp BoxMove
  83.  
  84. M_Right:
  85.     ld a,(BallX)
  86.     cp 88
  87.     jp z,NoKey
  88.     call DispBall
  89.     ld a,(BallX)
  90.     add a,4
  91.     ld (BallX),a
  92.     call DispBall
  93.     ld (Ticks),a
  94.     jp NoKey
  95.  
  96. M_Left:
  97.     ld a,(BallX)
  98.     or a
  99.     jp m,NoKey
  100.     jp z,NoKey
  101.     call DispBall
  102.     ld a,(BallX)
  103.     sub 4
  104.     ld (BallX),a
  105.     call DispBall
  106.     ld a,1
  107.     ld (Ticks),a
  108.     jp NoKey
  109.  
  110. M_Up:
  111.     ld a,(BallY)
  112.     or a
  113.     jp m,NoKey
  114.     jp z,NoKey
  115.     call DispBall
  116.     ld a,(BallY)
  117.     sub 4
  118.     ld (BallY),a
  119.     call DispBall
  120.     ld a,1
  121.     ld (Ticks),a
  122.     jp NoKey
  123.  
  124. M_Down:
  125.     ld a,(BallY)
  126.     cp 56
  127.     jp z,NoKey
  128.     call DispBall
  129.     ld a,(BallY)
  130.     add a,4
  131.     ld (BallY),a
  132.     call DispBall
  133.     ld a,1
  134.     ld (Ticks),a
  135.     jp NoKey
  136.  
  137. BoxMove:
  138.     ld a,4
  139.     call Random
  140.     cp 1
  141.     jp z,MoveXCoord
  142.     cp 2
  143.     jp z,MoveXCoord
  144.     jp nz,MoveYCoord
  145.  
  146. MoveXCoord:
  147.     ld a,(BallX)    
  148.     ld b,a
  149.     ld a,(BoxX)
  150.     sub b
  151.     or a
  152.     jp m,IncXCoord
  153.     jp z,FinishBoxMove
  154.     jp DecXCoord
  155.  
  156. IncXCoord:
  157.     ld a,4
  158.     call Random
  159.     cp 1
  160.     jp z,IncX1
  161.     cp 2
  162.     jp z,IncX1
  163.     jp nz,IncX2
  164.  
  165. DecXCoord:
  166.     ld a,4
  167.     call Random
  168.     cp 1
  169.     jp z,DecX1
  170.     cp 2
  171.     jp z,DecX1
  172.     jp nz,DecX2
  173.  
  174. DecX1:
  175.     call DispBox
  176.     ld a,(BoxX)
  177.     dec a
  178.     ld (BoxX),a
  179.     call DispBox
  180.     jp FinishBoxMove
  181.  
  182. DecX2:
  183.     call DispBox
  184.     ld a,(BoxX)
  185.     dec a
  186.     dec a
  187.     ld (BoxX),a
  188.     call DispBox
  189.     jp FinishBoxMove
  190.  
  191. IncX1:
  192.     call DispBox
  193.     ld a,(BoxX)
  194.     inc a
  195.     ld (BoxX),a
  196.     call DispBox
  197.     jp FinishBoxMove
  198.  
  199. IncX2:
  200.     call DispBox
  201.     ld a,(BoxX)
  202.     inc a
  203.     inc a
  204.     ld (BoxX),a
  205.     call DispBox
  206.     jp FinishBoxMove
  207.  
  208.  
  209. MoveYCoord:
  210.     ld a,(BallY)    
  211.     ld b,a
  212.     ld a,(BoxY)
  213.     sub b
  214.     or a
  215.     jp m,IncYCoord
  216.     jp z,FinishBoxMove
  217.     jp DecYCoord
  218.  
  219. IncYCoord:
  220.     ld a,4
  221.     call Random
  222.     cp 1
  223.     jp z,IncY1
  224.     cp 2
  225.     jp z,IncY1
  226.     jp nz,IncY2
  227.  
  228. DecYCoord:
  229.     ld a,4
  230.     call Random
  231.     cp 1
  232.     jp z,DecY1
  233.     cp 2
  234.     jp z,DecY1
  235.     jp nz,DecY2
  236.  
  237. DecY1:
  238.     call DispBox
  239.     ld a,(BoxY)
  240.     dec a
  241.     ld (BoxY),a
  242.     call DispBox
  243.     jp FinishBoxMove
  244.  
  245. DecY2:
  246.     call DispBox
  247.     ld a,(BoxY)
  248.     dec a
  249.     dec a
  250.     ld (BoxY),a
  251.     call DispBox
  252.     jp FinishBoxMove
  253.  
  254. IncY1:
  255.     call DispBox
  256.     ld a,(BoxY)
  257.     inc a
  258.     ld (BoxY),a
  259.     call DispBox
  260.     jp FinishBoxMove
  261.  
  262. IncY2:
  263.     call DispBox
  264.     ld a,(BoxY)
  265.     inc a
  266.     inc a
  267.     ld (BoxY),a
  268.     call DispBox
  269.     jp FinishBoxMove
  270.  
  271. FinishBoxMove:
  272.     ld a,90
  273.     ld (Ticks),a
  274.     ld a,(BallX)
  275.     ld b,a
  276.     ld a,(BoxX)
  277.     sub b
  278.     jp z,CheckBoxY
  279.     jp nz,ChasedLoop
  280.  
  281. CheckBoxY:
  282.     ld a,(BallY)
  283.     ld b,a
  284.     ld a,(BoxY)
  285.     sub b
  286.     jp nz,ChasedLoop
  287.     jp YouChasedLose
  288.  
  289. DecTimer:
  290.     ld a,(Timer)
  291.     dec a
  292.     ld (Timer),a
  293.     or a
  294.     jp z,DecTimerX
  295.     jp nz,ChasedLLoop
  296.  
  297. DecTimerX:
  298.     ld a,(TimerX)
  299.     dec a
  300.     ld (TimerX),a
  301.     or a
  302.     jp z,GameWinner
  303.     ld a,175
  304.     ld (Timer),a
  305.     jp nz,ChasedLoop
  306.  
  307. YouChasedLose:
  308.     jp GameOverText
  309.  
  310.  
  311.  
  312. ;------------------------
  313. ;|Begin the Chaser Part
  314. ;------------------------
  315.  
  316. Chaser:
  317.     ROM_CALL(CLEARLCD)
  318.     ld a,250
  319.     ld (Timer),a
  320.     ld a,250
  321.     ld (TimerX),a
  322.     ld a,8
  323.     ld (BallX),a
  324.     ld (BallY),a
  325.     ld a,50
  326.     ld (BoxY),a
  327.     ld (BoxX),a
  328.     ld a,50
  329.     ld (Ticks),a
  330.     call DispBall
  331.     call DispBox
  332.  
  333. ChaserLoop:
  334.     jp DecTimerY
  335.  
  336. ChaserLLoop:
  337.     ld     a,0ffh        ;Reset keyport
  338.     out     (1),a            ;Clear Port
  339.     ld     a,0feh        ;Load desired port
  340.     out   (1),a            ;Clear Keys
  341.     in     a,(1)            ;Input Key
  342.     cp    251            ;If key is right
  343.     jp     z,M_BoxRight    ;Goto Right
  344.     cp     253            ;If key is left
  345.     jp     z,M_BoxLeft        ;Goto Left
  346.     cp    247            ;Is it key Up
  347.     jp    z,M_BoxUp        ;Move Up
  348.     cp    254            ;Is it Down
  349.     jp    z,M_BoxDown        ;Move Down    
  350.     ld     a,0ffh        ;Reset keyport
  351.     out     (1),a            ;Clear Port
  352.     ld     a,0bfh        ;Load desired port
  353.     out   (1),a            ;Clear Keys
  354.     in     a,(1)            ;Input Key
  355.     cp    127            ;Is it delete
  356.     call    z,GamePause        ;Pause
  357.     cp    191            ;Is it Quit?
  358.     ret   z            ;Return from Program if so
  359.     jr    nz,NoChaserKey    ;NoKey Otherwise
  360.  
  361. NoChaserKey:
  362.     ld a,(Ticks)
  363.     dec a
  364.     ld (Ticks),a
  365.     or a
  366.     jp z,BallMove
  367.     jp nz,ChaserLoop
  368.     jp ChaserLoop
  369.  
  370. M_BoxRight:
  371.     ld a,(BoxX)
  372.     cp 88
  373.     jp z,NoChaserKey
  374.     cp 89
  375.     jp z,NoChaserKey
  376.     cp 90
  377.     jp z,NoChaserKey
  378.     cp 91
  379.     jp z,NoChaserKey
  380.     cp 92
  381.     jp z,NoChaserKey
  382.     call DispBox
  383.     ld a,(BoxX)
  384.     add a,4
  385.     ld (BoxX),a
  386.     call DispBox
  387.     ld a,1
  388.     ld (Ticks),a
  389.     jp NoChaserKey
  390.  
  391. M_BoxLeft:
  392.     ld a,(BoxX)
  393.     or a
  394.     jp z,NoChaserKey
  395.     cp 1
  396.     jp z,NoChaserKey
  397.     cp 2
  398.     jp z,NoChaserKey
  399.     cp 3
  400.     jp z,NoChaserKey
  401.     cp 4
  402.     jp z,NoChaserKey
  403.     call DispBox
  404.     ld a,(BoxX)
  405.     sub 4
  406.     ld (BoxX),a
  407.     call DispBox
  408.     ld a,1
  409.     ld (Ticks),a
  410.     jp NoChaserKey
  411.  
  412. M_BoxUp:
  413.     ld a,(BoxY)
  414.     or a
  415.     jp z,NoChaserKey
  416.     cp 1
  417.     jp z,NoChaserKey
  418.     cp 2
  419.     jp z,NoChaserKey
  420.     cp 3
  421.     jp z,NoChaserKey
  422.     cp 4
  423.     jp z,NoChaserKey
  424.     cp 5
  425.     jp z,NoChaserKey
  426.     call DispBox
  427.     ld a,(BoxY)
  428.     sub 4
  429.     ld (BoxY),a
  430.     call DispBox
  431.     ld a,1
  432.     ld (Ticks),a
  433.     jp NoChaserKey
  434.  
  435. M_BoxDown:
  436.     ld a,(BoxY)
  437.     cp 56
  438.     jp z,NoChaserKey
  439.     cp 55
  440.     jp z,NoChaserKey
  441.     cp 54
  442.     jp z,NoChaserKey
  443.     cp 53
  444.     jp z,NoChaserKey
  445.     cp 52
  446.     jp z,NoChaserKey
  447.     call DispBox
  448.     ld a,(BoxY)
  449.     add a,4
  450.     ld (BoxY),a
  451.     call DispBox
  452.     ld a,1
  453.     ld (Ticks),a
  454.     jp NoChaserKey
  455.  
  456. BallMove:
  457.     ld a,(BallX)
  458.     ld b,a
  459.     ld a,(BoxX)
  460.     sub b
  461.     or a
  462.     jp m,ReverseX
  463.     ld (TempVar),a
  464.     
  465. CheckBallY:
  466.     ld a,(BallY)
  467.     ld b,a
  468.     ld a,(BoxY)
  469.     sub b
  470.     or a
  471.     jp m,ReverseY
  472.     ld (TempVar1),a
  473.     jr CompareDist
  474.  
  475. ReverseX:
  476.     ld a,(BoxX)
  477.     ld b,a
  478.     ld a,(BallX)
  479.     sub b
  480.     ld (TempVar),a
  481.     jr CheckBallY
  482.  
  483. ReverseY:
  484.     ld a,(BoxY)
  485.     ld b,a
  486.     ld a,(BallY)
  487.     sub b
  488.     ld (TempVar1),a
  489.     
  490.  
  491. CompareDist:
  492.     ld a,(TempVar)
  493.     ld b,a
  494.     ld a,(TempVar1)
  495.     sub b
  496.     or a
  497.     jp m,MoveBallY
  498.  
  499. MoveBallX:
  500.     ld a,(BallX)
  501.     or a
  502.     jp z,IncreaseBallX
  503.     cp 1
  504.     jp z,IncreaseBallX
  505.     cp 2
  506.     jp z,IncreaseBallX
  507.     cp 3
  508.     jp z,IncreaseBallX
  509.     cp 88
  510.     jp z,DecreaseBallX
  511.     cp 89
  512.     jp z,DecreaseBallX
  513.     cp 90
  514.     jp z,DecreaseBallX
  515.     cp 91
  516.     jp z,DecreaseBallX
  517.     cp 92
  518.     jp z,DecreaseBallX
  519.     cp 93
  520.     jp z,DecreaseBallX
  521.     ld a,(BallX)
  522.     ld b,a
  523.     ld a,(BoxX)
  524.     sub b
  525.     or a
  526.     jp m,IncreaseBallX
  527.  
  528. DecreaseBallX:    
  529.     call DispBall
  530.     ld a,5
  531.     call Random
  532.     inc a
  533.     ld b,a
  534.  
  535. DecLoopX:
  536.     ld a,(BallX)
  537.     dec a
  538.     ld (BallX),a
  539.     djnz DecLoopX
  540.     call DispBall
  541.     jp DoneWithBall
  542.  
  543. IncreaseBallX:
  544.     call DispBall
  545.     ld a,5
  546.     call Random
  547.     inc a
  548.     ld b,a
  549.  
  550. IncLoopX:
  551.     ld a,(BallX)
  552.     inc a
  553.     ld (BallX),a
  554.     djnz IncLoopX
  555.     call DispBall
  556.     jp DoneWithBall
  557.  
  558. MoveBallY:
  559.     ld a,(BallY)
  560.     cp 4
  561.     jp z,IncreaseBallY
  562.     cp 3
  563.     jp z,IncreaseBallY
  564.     cp 2
  565.     jp z,IncreaseBallY
  566.     cp 1
  567.     jp z,IncreaseBallY
  568.     or a
  569.     jp z,IncreaseBallY
  570.     cp 4
  571.     jp z,IncreaseBallY
  572.     cp 5
  573.     jp z,IncreaseBallY
  574.     cp 51
  575.     jp z,DecreaseBallY
  576.     cp 52
  577.     jp z,DecreaseBallY
  578.     cp 53
  579.     jp z,DecreaseBallY
  580.     cp 54
  581.     jp z,DecreaseBallY
  582.     cp 55
  583.     jp z,DecreaseBallY
  584.     cp 56
  585.     jp z,DecreaseBallY
  586.  
  587.     ld a,(BallY)
  588.     ld b,a
  589.     ld a,(BoxY)
  590.     sub b
  591.     or a
  592.     jp m,IncreaseBallY
  593.  
  594. DecreaseBallY:
  595.     call DispBall    
  596.     ld a,5
  597.     call Random
  598.     inc a
  599.     ld b,a
  600.  
  601. DecLoopY:
  602.     ld a,(BallY)
  603.     dec a
  604.     ld (BallY),a
  605.     djnz DecLoopY
  606.     call DispBall
  607.     jp DoneWithBall
  608.  
  609.  
  610. IncreaseBallY:
  611.     call DispBall
  612.     ld a,5
  613.     call Random
  614.     inc a
  615.     ld b,a
  616.  
  617. IncLoopY:
  618.     ld a,(BallY)
  619.     inc a
  620.     ld (BallY),a
  621.     djnz IncLoopY
  622.     call DispBall
  623.     jp DoneWithBall
  624.  
  625. DoneWithBall:
  626. CheckWinner:
  627.     ld a,(BallX)            
  628.     add a,12            
  629.     ld b,a            
  630.     ld a,(BoxX)        
  631.     cp b                
  632.     jp c,ContinueCheck        
  633.       jp ChaserLoop                 
  634.        
  635. ContinueCheck:
  636.     ld a,(BoxX)            
  637.     add a,12            
  638.     ld b,a            
  639.     ld a,(BallX)            
  640.     cp b                
  641.     jp c,CheckYHit        
  642.     jp ChaserLoop
  643.  
  644. CheckYHit:
  645.     ld a,(BallY)            
  646.     add a,12            
  647.     ld b,a            
  648.     ld a,(BoxY)        
  649.     cp b                
  650.     jp c,ContinueCheckY    
  651.       jp ChaserLoop              
  652.        
  653. ContinueCheckY:
  654.     ld a,(BoxY)        
  655.     add a,12            
  656.     ld b,a            
  657.     ld a,(BallY)            
  658.     cp b                
  659.     jp c,GameWinner            
  660.     jp ChaserLoop
  661.  
  662. GameWinner:
  663.     jp GameWinnerText
  664.         
  665. DecTimerY:
  666.     ld a,(Timer)
  667.     dec a
  668.     ld (Timer),a
  669.     or a
  670.     jp z,DecTimerY1
  671.     jp ChaserLLoop
  672.  
  673. DecTimerY1:
  674.     ld a,(TimerX)
  675.     dec a
  676.     ld (TimerX),a
  677.     or a
  678.     jp z,ChaserLost
  679.     ld a,175
  680.     ld (Timer),a
  681.     jp ChaserLLoop    
  682.  
  683. ChaserLost:
  684.     jp GameOverText
  685.  
  686.  
  687. ;---------------------------
  688. ;|General Routines for Game
  689. ;---------------------------
  690.  
  691. DispBox:
  692.     ld a,(BoxY)
  693.     ld e,a
  694.     ld a,(BoxX)
  695.     ld bc,Box
  696.     call PutSprite
  697.     ret
  698.  
  699. DispBall:
  700.     ld a,(BallY)
  701.     ld e,a
  702.     ld a,(BallX)
  703.     ld bc,Ball
  704.     call PutSprite
  705.     ret
  706.  
  707. SetText:
  708.     ld (CURSOR_Y),a
  709.     ld a,4
  710.     ld (CURSOR_X),a
  711.     ret
  712.  
  713. GameWinnerText:
  714.     ROM_CALL(CLEARLCD)
  715.     ld b,5
  716.     ld hl,GameWinnerT
  717.     call WriteNextRow
  718.     call WaitKey
  719.     call WaitKey    
  720.     ret
  721.  
  722. GameOverText:
  723.     ROM_CALL(CLEARLCD)
  724.     ld b,4
  725.     ld hl,GameOver
  726.     call WriteNextRow
  727.     call WaitKey
  728.     call WaitKey    
  729.     ret
  730.  
  731. WaitKey:
  732.     call GET_KEY
  733.     cp $00
  734.     jr z,WaitKey
  735.     ret
  736.  
  737. WriteNextRow:
  738.  push hl
  739.  call LD_HL_MHL
  740.  ld (CURSOR_X),hl
  741.  pop hl
  742.  inc hl
  743.  inc hl
  744.  ROM_CALL(D_ZM_STR)
  745.  djnz WriteNextRow
  746.  ret
  747.  
  748. Random:            
  749.    ld b,a
  750.    ld a,r
  751.    add a,a
  752.    ld hl,0
  753.    ld d,0
  754.    ld e,a
  755. RMul:
  756.    add hl,de
  757.    djnz RMul
  758.    ld a,h
  759.    ret
  760.  
  761. ;┌────────────────┬────────────────┬─────────────────────┬───────┬────────────┐
  762. ;│█████ Z80 ██████│    Sprite83    │█████████████████████│ movax │████████████│
  763. ;└────────────────┴────────────────┴─────────────────────┴───────┴────────────┘
  764.  
  765. ; Sprite xor routine v1.0
  766. ; Coded by Hannes Edfeldt in 1997
  767.  
  768. ; This routine uses xor to draw the sprite, therefore you can erase the sprite
  769. ; by just drawing it again at the same x and y coordinates. See xordemo.z80
  770. ; for an example of how to use this routine.
  771.  
  772. ; Feel free to use this routine in your own productions as long as you give me
  773. ; some credit.
  774.  
  775. ; This file should of course be viewed in a DOS texteditor ;)
  776.  
  777. ; Hannes Edfeldt -+- movax@algonet.se -+- http://www.algonet.se/~movax
  778.  
  779.  
  780. ;▄████████████▀ SPRXOR ▀███████████████████████████████████████████████████████
  781. ;┌────────────────────────────────────────────────────────────────────────────┐
  782. ;│ Xor 8x8 sprite ■ a=x, e=y, bc=sprite address                               │
  783. ;└────────────────────────────────────────────────────────────────────────────┘
  784. PutSprite:
  785.  
  786.         push    bc              ; Save sprite address
  787.  
  788. ;████   Calculate the address in graphbuf   ████
  789.  
  790.         ld      hl,0            ; Do y*12
  791.         ld      d,0
  792.         add     hl,de
  793.         add     hl,de
  794.         add     hl,de
  795.         add     hl,hl
  796.         add     hl,hl
  797.  
  798.         ld      d,0             ; Do x/8
  799.         ld      e,a
  800.         srl     e
  801.         srl     e
  802.         srl     e
  803.         add     hl,de
  804.  
  805.         ld      de,$88B8
  806.         add     hl,de           ; Add address to graphbuf
  807.  
  808.         ld      b,00000111b     ; Get the remainder of x/8
  809.         and     b
  810.         cp      0               ; Is this sprite aligned to 8*n,y?
  811.         jp      z,ALIGN
  812.  
  813.  
  814. ;████   Non aligned sprite blit starts here   ████
  815.  
  816.         pop     ix              ; ix->sprite
  817.         ld      d,a             ; d=how many bits to shift each line
  818.  
  819.         ld      e,8             ; Line loop
  820. LILOP:  ld      b,(ix+0)        ; Get sprite data
  821.  
  822.         ld      c,0             ; Shift loop
  823.         push    de
  824. SHLOP:  srl     b
  825.         rr      c
  826.         dec     d
  827.         jp      nz,SHLOP
  828.         pop     de
  829.  
  830.         ld      a,b             ; Write line to graphbuf
  831.         xor     (hl)
  832.         ld      (hl),a
  833.         inc     hl
  834.         ld      a,c
  835.         xor     (hl)
  836.         ld      (hl),a
  837.  
  838.         ld      bc,11           ; Calculate next line address
  839.         add     hl,bc
  840.         inc     ix              ; Inc spritepointer
  841.  
  842.         dec     e
  843.         jp      nz,LILOP        ; Next line
  844.  
  845.         jp      DONE1
  846.  
  847.  
  848. ;████   Aligned sprite blit starts here   ████
  849.  
  850. ALIGN:                          ; Blit an aligned sprite to graphbuf
  851.         pop     de              ; de->sprite
  852.         ld      b,8
  853. ALOP1:  ld      a,(de)
  854.         xor     (hl)
  855.         ld      (hl),a
  856.         inc     de
  857.         push    bc
  858.         ld      bc,12
  859.         add     hl,bc
  860.         pop     bc
  861.         djnz    ALOP1
  862.  
  863. DONE1:
  864.       ROM_CALL(DISP_GRAPH)
  865.         ret
  866. ;▄████████████▄ SPRXOR ▄███████████████████████████████████████████████████████
  867.  
  868.  
  869. ;┌────────────────┬────────────────┬─────────────────────┬───────┬────────────┐
  870. ;│█████ Z80 ██████│    Sprite83    │█████████████████████│ movax │████████████│
  871. ;└────────────────┴────────────────┴─────────────────────┴───────┴────────────┘
  872.  
  873.  
  874. ;-----------------
  875. ;|Variables
  876. ;-----------------
  877.  
  878. BallX:    .db 0
  879. BallY:    .db 0
  880. BoxX:        .db 0
  881. BoxY:        .db 0
  882. Ticks:    .db 0
  883. TempVar:    .db 0
  884. TempVar1:    .db 0
  885.  
  886. Timer:    .db 0
  887. TimerX:    .db 0
  888.  
  889. ;------------------
  890. ;|Text
  891. ;------------------
  892. TitleText:    .db    " The Chase  0.9 ",
  893.         .db    "Ahmed  El-Helw  ",
  894.         .db    "asm8x.home.ml.or",
  895.         .db    " 1-  The Chaser ",
  896.         .db    " 2-  The Chased ",0
  897.  
  898. GameWinnerT:
  899. .db 0,0,"You Won!!!!",0
  900. GameOver:
  901. .db 0,10,"The Chase 0.9, by AE",0
  902. .db 0,17,"Thanks to Quran Kareem",0
  903. .db 0,24,"who created the idea.",0
  904. .db 0,50,"Press a key...",0
  905.  
  906. ;------------------
  907. ;|Sprites
  908. ;------------------
  909. Ball:
  910.  .db    %00000000
  911.  .db    %00011000
  912.  .db    %00100100
  913.  .db    %00100100
  914.  .db    %00011000
  915.  .db    %00000000
  916.  .db    %00000000
  917.  
  918. Box: 
  919.  .db  %00000000
  920.  .db    %00000000
  921.  .db    %00111100
  922.  .db    %00111100
  923.  .db    %00111100
  924.  .db    %00111100
  925.  .db    %00000000
  926.  .db    %00000000
  927.  
  928.  
  929. .end
  930. END