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

  1. #include "ti82.h"
  2. #include "keys.inc"
  3.  
  4. ;-------------------------------------------------------------------------------
  5. ;Variables in text-memory:
  6. ;-------------------------------------------------------------------------------
  7. LEVELY =  TEXT_MEM     ;position in level
  8. SCROLLY = TEXT_MEM+1    ;position in level-y
  9. LEVELPT = TEXT_MEM+2    ;pointer to level data
  10. BKPT =    TEXT_MEM+4    ;pointer to background
  11. PLAYERPT = TEXT_MEM+6   ;pointer to player
  12. JUMPFLAG = TEXT_MEM+8   ;0 = no jump; 1 = up; 2 = down
  13. PLAYERPT1 = TEXT_MEM+9  ;pointer to black-player image
  14. ANICOUNT = TEXT_MEM+11  ;animation counter
  15. SPEED = TEXT_MEM+12     ;speed of ball
  16. LIFE = TEXT_MEM+14      ;lifes of player
  17. SCORE = TEXT_MEM+15     ;contains player's score
  18. ORIGLVL = TEXT_MEM+17   ;pointer to start of level
  19. BALLX = TEXT_MEM+19     ;only needed for savegame
  20. BALLY = TEXT_MEM+20
  21. Data = TEXT_MEM+21      ;needed for ZCP
  22. StringPlace = TEXT_MEM+22
  23. ZeroByte = TEXT_MEM+27
  24. HiScoreTemp = TEXT_MEM+28
  25. Count = TEXT_MEM+30
  26. TempByte = TEXT_MEM+31
  27. MASK = TEXT_MEM+32
  28. ANISCROLLC = TEXT_MEM+33
  29. KEYPRESS = TEXT_MEM+34
  30. ;-------------------------------------------------------------------------------
  31. BITMAPMEM = APD_BUF ;this points to the graph mem
  32.  
  33. .org START_ADDR
  34. .DB "PlainJump v1.0",0
  35.  
  36. ;-------------------------------------------------------------------------------
  37. ;Program start!
  38. ;-------------------------------------------------------------------------------
  39. SaveCheck:
  40.       LD A,$8C           ;Needed for
  41.      OUT (2),A          ;FIND_PIXEL
  42.  res 1,(iy+13)        ;Same with TextShadow
  43. ;res 6,(iy+9)           ;VERY IMPORTANT since I am using the STATVARS. Thanks SCaBBY!
  44.  
  45.        call ClearGraphMem
  46.        call ClearAPDBUF
  47.           ld      HL, LevelSaved
  48.      ld      A, (HL)
  49.      and     A
  50.      jp      nz, LoadGame
  51.  
  52. Title:
  53.  call ClearGraphMem
  54.  call ClearAPDBUF
  55.  ld   de,$88b8
  56.  ld   bc,400
  57.  ld   hl,TitlePicture
  58.  ldir
  59.  call fastCopy
  60.  ld   hl,Instr
  61.  ld   de, 50*256+12
  62.  call DMX
  63.  ld   de, 36*256+4
  64.  call DMX
  65.  ld   de,57*256+1
  66.  call DMX
  67.  
  68.  
  69.  ld de,43*256+10
  70.  call DMX
  71.  
  72.  ld de,43*256+43
  73.  call DMX
  74.  
  75.  ld hl,43*256+65
  76.  ld (CURSOR_X),HL
  77.  ld hl,HiScore
  78.  call LD_HL_MHL
  79.  call HL_DECIMAL_MENU
  80.  
  81.  
  82. WaitForKey:
  83.  call GET_KEY
  84.  or a
  85.  jr   z, WaitForKey
  86.  cp   G_MODE
  87.  jp   z,ExitGame
  88.  cp   G_ALPHA
  89.  jp   z,LevelEditor
  90.  cp   G_2nd
  91.  jr   z,userlevel
  92.  
  93.  jr RegularGame
  94.  
  95. ;------------------------------------>>>>>>Replace w/SavedGame Stuff!
  96. LoadGame:
  97.  ROM_CALL(CLEARLCD)
  98.  ld   hl, LevelSaved
  99.  ld   a, (hl)
  100.  cp   0
  101.  jr   z, RegularGame
  102.  ;Copy saved game(20 bytes) to TEXT_MEM
  103.  ld   bc, 21
  104.  inc  hl
  105.  ld   de, LEVELY
  106.  ldir
  107.  CALL DrawScreen
  108.  ld   a, (BALLX)
  109.  ld   b, a
  110.  ld   a, (BALLY)
  111.  ld   c, a
  112.  ld   a, 0
  113.  ld   (SCROLLY), a
  114.  CALL ScanBk
  115.  JP GameLoop
  116.  
  117. userlevel:
  118.  ld   hl, Level
  119.  ld   (LEVELPT), hl
  120.  ld   (ORIGLVL), hl
  121.  call BuiltInLevels
  122.  jp lost2
  123.  
  124. RegularGame:
  125.  ;Do some initialisation
  126.  ld   hl, Level1
  127.  ld   (LEVELPT), hl
  128.  ld   (ORIGLVL), hl
  129.  call BuiltInLevels
  130.  jr StartAfterLife
  131.  
  132. BuiltInLevels:
  133.  ld   hl, BackgroundTemp
  134.  ld   (BKPT), hl
  135.  ld   hl, WhiteBall
  136.  ld   (PLAYERPT), hl
  137.  ld   hl, BlackBall1
  138.  ld   (PLAYERPT1), hl
  139.  ROM_CALL(CLEARLCD)
  140.  xor  a
  141.  ld   (SCROLLY), a
  142.  ld   (LEVELY), a
  143.  ld   (JUMPFLAG), a
  144.  ld   (ANICOUNT), a
  145.  ld   (SPEED), a
  146.  ld   hl, 0
  147.  ld   (SCORE), hl
  148.  ld   a, 6
  149.  ld   (LIFE), a
  150.  ret
  151.  ;Draw screen first time:
  152. StartAfterLife:
  153.  ld   b, 40
  154.  ld   c, 46
  155. StartGameLoop:
  156.     ld      HL, $0003
  157.     ld      ($800C), HL
  158.     ld      HL, LifeStatus
  159.     ROM_CALL(D_ZT_STR)
  160.     ld      A, (LIFE)
  161.     ld      H, 0
  162.     ld      L, A
  163.     ROM_CALL(D_HL_DECI)
  164. WaitInfo:
  165.   ei
  166.     halt
  167.     call    GET_KEY
  168.     cp G_ENTER
  169.     jr      nz, WaitInfo
  170.  push bc
  171.  call ClearGraphMem
  172.  call ClearAPDBUF
  173.  call DrawScreen
  174.  pop bc
  175.  ;ld   hl, (LEVELPT)
  176.  ;inc  hl
  177.  ;ld   (LEVELPT), hl
  178.  call ScanBk
  179.  
  180. ;-------------------------------------------------------------------------------
  181. ;The game loop:
  182. ;-------------------------------------------------------------------------------
  183. GameLoop:
  184.  call DrawBk  ;erase ball
  185.  ld a,c
  186.  cp 46
  187.  jr nz,TestKeys
  188.     push    BC
  189.     ld      A, B
  190.     add     A, 8
  191.     ld      B, A
  192.     ld      C, 63-60
  193.     call    FIND_PIXEL
  194.     ld      DE, BITMAPMEM
  195.     add     HL, DE
  196.     and     (HL)
  197.     pop     BC
  198.     jp      z, LostLife
  199. TestKeys:
  200.  push bc
  201.  ld a,$FE
  202.  out (1),a
  203.  in a,(1)
  204.  ld b,a
  205.  ld a,$BF
  206.  out (1),a
  207.  in a,(1)
  208.  or $0F
  209.  and b
  210.  pop bc
  211.  cp $FF
  212.  jp z,Redraw
  213. TestLeftKey:
  214.  ld d,a
  215.  ld a,(SPEED)
  216.  ld e,a
  217.  bit 1,d
  218.  jr nz,TestRightKey
  219.  ld a,b
  220.  cp 2
  221.  jr c,TestRightKey
  222.  dec b
  223.  ld a,e
  224.  cp 3
  225.  jr nz,TestRightKey
  226.  dec b
  227. TestRightKey:
  228.  bit 2,d
  229.  jr nz,TestUpKey
  230.  ld a,b
  231.  cp 80
  232.  jr nc,TestUpKey
  233.  inc b
  234.  ld a,e
  235.  cp 3
  236.  jr nz,TestUpKey
  237.  inc b
  238. TestUpKey:
  239.  bit 3,d
  240.  jr nz,TestDownKey
  241.  ld a,e
  242.  cp 3
  243.  jr nc,TestDownKey
  244.  inc e
  245. TestDownKey:
  246.  bit 0,d
  247.  jr nz,Test2ndKey
  248.  ld a,e
  249.  or a
  250.  jr z,Test2ndKey
  251.  dec e
  252. Test2ndKey:
  253.  ld a,e
  254.  ld (SPEED),a
  255.  bit 5,d
  256.  jr nz,TestExitKey
  257.  ld a,(JUMPFLAG)
  258.  or a
  259.  jr nz,TestExitKey
  260.  inc a
  261.  ld (JUMPFLAG),a
  262. TestExitKey:
  263.  bit 6,d
  264.  jp z,ExitGame
  265. TestPauseKey:
  266.  bit 7,d
  267.  jp z,Pause
  268. TestF1Key:
  269.  bit 4,d
  270.  jp z,LSaveGame
  271.  
  272. Redraw:
  273.  ld a,(JUMPFLAG)
  274.  or a
  275.  jr z,ReallyRedraw
  276.  dec a
  277.  jr nz,FlyDown
  278.  ld a,c
  279.  cp 20
  280.  jr z,SetFlyDown
  281.  dec c
  282.  jr ReallyRedraw
  283. SetFlyDown:
  284.  ld a,2
  285.  ld (JUMPFLAG),a
  286. FlyDown:
  287.  ld a,c
  288.  cp 46
  289.  jr nz,FlyDown1
  290.  xor a
  291.  ld (JUMPFLAG),a
  292.  jr ReallyRedraw
  293. FlyDown1:
  294.  inc c
  295. ReallyRedraw:
  296.  ld a,(SPEED)
  297.  or a
  298.  jr z,RedrawBall
  299.  push bc
  300.  ld b,a
  301. DoScrolling:
  302.  call DoScroll
  303.  djnz DoScrolling
  304.  pop bc
  305.  
  306. RedrawBall:
  307.  call ScanBk
  308.  ld de,WhiteBall
  309.  call WhiteSprite
  310.  ld de,(PLAYERPT1)
  311.  call BlackSprite
  312.  
  313.  ld a,(ANISCROLLC)
  314.  ld hl,SPEED
  315.  add a,(hl)
  316.  ld (ANISCROLLC),a
  317.  cp 6
  318.  jr c,GoOnMainLoop
  319.  
  320.  xor a
  321.  ld (ANISCROLLC),a
  322.  ld hl,ANICOUNT
  323.  inc (hl)
  324.  ld a,(hl)
  325.  cp 3
  326.  jr nz,NextFrame
  327.  ld (hl),0
  328.  ld hl,BlackBall1
  329.  ld (PLAYERPT1),hl
  330.  jr GoOnMainLoop
  331. NextFrame:
  332.  ld hl,(PLAYERPT1)
  333.  ld de,32
  334.  add hl,de
  335.  ld (PLAYERPT1),hl
  336.  
  337. GoOnMainLoop:
  338.  
  339.  ;copy GRAPH-MEM to LCD-MEM
  340.  push bc
  341.  ld de,GRAPH_MEM
  342.  ld hl,APD_BUF
  343.  ld bc,768
  344.  ldir
  345.  ei
  346.  halt
  347.  halt
  348.  call fastCopy
  349.  pop bc
  350.   jp GameLoop
  351.  
  352. ;---------------------------------------------------------
  353. ; WhiteSprite: draws each white element of a 24*24 sprite
  354. ;---------------------------------------------------------
  355. WhiteSprite:
  356.  push bc
  357.  push de
  358.  ld a,32    
  359.  ld (TempByte),a
  360.  ld     A, 63
  361.  sub    C
  362.  ld     C, A
  363.  call FIND_PIXEL
  364.  ld de,APD_BUF
  365.  add hl,de
  366.  pop de
  367.  ld c,a
  368.  ld b,128
  369. WSLoop:
  370.  ld a,(de)
  371.  and b
  372.  jr nz,WSLoop1
  373.  ld a,c
  374.  cpl
  375.  and (hl)
  376.  ld (hl),a
  377. WSLoop1:
  378.  rrc c
  379.  jr nc,WSLoop2
  380.  inc hl
  381. WSLoop2:
  382.  rrc b
  383.  jr nc,WSLoop
  384. WSNextLine:
  385.  inc de
  386.  ld a,(TempByte)
  387.  dec a
  388.  ld (TempByte),a
  389.  jr z,WSEndBMP
  390.  bit 0,a
  391.  jr nz,WSLoop
  392.  push de
  393.  ld de,10
  394.  add hl,de
  395.  pop de
  396.  jr WSLoop
  397. WSEndBMP:
  398.  pop bc
  399.  ret
  400.  
  401. ;---------------------------------------------------------
  402. ; BlackSprite: draws each black element of a 24*24 sprite
  403. ;---------------------------------------------------------
  404. BlackSprite:
  405.  push bc
  406.  push de    
  407.  ld a,32
  408.  ld (TempByte),a
  409.  ld     A, 63
  410.  sub    C
  411.  ld     C, A
  412.  call FIND_PIXEL
  413.  ld de,APD_BUF
  414.  add hl,de
  415.  pop de
  416.  ld c,a
  417.  ld b,128
  418. BSLoop:
  419.  ld a,(de)
  420.  and b
  421.  jr z,BSLoop1
  422.  ld a,(hl)
  423.  or c
  424.  ld (hl),a
  425. BSLoop1:
  426.  rrc c
  427.  jr nc,BSLoop2
  428.  inc hl
  429. BSLoop2:
  430.  rrc b
  431.  jr nc,BSLoop
  432. BSNextLine:
  433.  inc de
  434.  ld a,(TempByte)
  435.  dec a
  436.  ld (TempByte),a
  437.  jr z,BSEndBMP
  438.  bit 0,a
  439.  jr nz,BSLoop
  440.  push de
  441.  ld de,10
  442.  add hl,de
  443.  pop de
  444.  jr BSLoop
  445. BSEndBMP:
  446.  pop bc
  447.  ret
  448.  
  449. ;------------
  450. ; Drawscreen
  451. ;------------
  452. DrawScreen:
  453.  push bc
  454.  ld ix,(LEVELPT)
  455.  ld e,(ix)
  456.  ld b,31
  457. DrawScrLoop:
  458.  ld a,b
  459.  add a,32
  460.  ld d,a
  461.  call DrawLine
  462.  djnz DrawScrLoop
  463.  ld e,(IX+1)
  464.  ld b,21
  465. DrawScrLoop1:
  466.  ld a,b
  467.  add a,11
  468.  ld d,A
  469.  call DrawLine
  470.  djnz DrawScrLoop1
  471.  ld e,(ix+2)
  472.  ld b,11
  473. DrawScrLoop2:
  474.  ld d,b
  475.  call DrawLine
  476.  djnz DrawScrLoop2
  477.  pop bc
  478.  ret
  479.  
  480.  
  481. ;-------------------------------------------------------------------------------
  482. ;DrawLine: this draws a line at y-pos D, accoriding to bits in E
  483. ;-------------------------------------------------------------------------------
  484. DrawLine:
  485.  push   BC
  486.  push   IX
  487.  ld     IX, StartLine
  488.  ld     B,  0
  489.  ld     C,  D
  490.  sla    C
  491.  add    IX, BC
  492.  add    IX, BC
  493. ;IX now contains pointer to StartLine1
  494.  
  495.  ld     L, $80
  496. DrawLine_Loop1:
  497.  ld     A, 47
  498.  sub    (IX)
  499.  ld     B, A
  500.  ld     A, 47
  501.  sub    (IX+1)
  502.  ld     C, A
  503.  bit    4, L
  504.  jr     z, NotMiddle
  505.  ld     C, 47
  506. NotMiddle:
  507.  inc    IX
  508.  
  509.  ld     A, E
  510.  and    L
  511.  jr     z, WhiteLine_1
  512.  call   BlackLine
  513.  jr     DrawLine_Loop1_2
  514. WhiteLine_1:
  515.  call   WhiteLine
  516. DrawLine_Loop1_2:
  517.  rrc    L
  518.  ld     A, L
  519.  cp     $08
  520.  jr     nz, DrawLine_Loop1
  521.  
  522.  dec    IX
  523.  ld     B, 47 ;63
  524.  jr     SkipMiddle
  525. DrawLine_Loop2:
  526.  ld     A, (IX+1)
  527.  add    A, 47 ; 63
  528.  ld     B, A
  529. SkipMiddle:
  530.  ld     A, (IX)
  531.  add    A, 47 ;63
  532.  ld     C, A
  533.  dec    IX
  534.  
  535.  ld     A, E
  536.  and    L
  537.  jr     z, WhiteLine_2
  538.  call   BlackLine
  539.  jr     DrawLine_Loop2_2
  540. WhiteLine_2:
  541.  call   WhiteLine
  542. DrawLine_Loop2_2:
  543.  rrc    L
  544.  jr     nc, DrawLine_Loop2
  545.  pop    IX
  546.  pop    BC
  547.  ret
  548.  
  549. ;---------------------------------------------------------------
  550. ; WhiteLine: draws a horizontal, white line from (B,D) to (C,D)
  551. ;---------------------------------------------------------------
  552. WhiteLine:
  553.  push hl
  554.  push de
  555.  ld a,c
  556.  sub b
  557.  push af
  558.  ld     A, 63
  559.  sub    D
  560.  ld     C, A
  561.  call FIND_PIXEL
  562.  ld de,BITMAPMEM
  563.  add hl,de
  564.  ld b,a
  565.  pop af
  566.  ld c,a
  567. WLoop:
  568.  ld a,b
  569.  cpl
  570.  and (hl)
  571.  ld (hl),a
  572.  dec c
  573.  jr z,EndWhite
  574.  rrc b
  575.  jr nc,WLoop
  576.  inc hl
  577.  jr WLoop
  578.  
  579. EndWhite:
  580.  ;fastCopy
  581.  pop  de
  582.  pop  hl
  583.  ret
  584.  
  585. ;-------------------------------------------------------------------------------
  586. ;BlackLine: draws a horizontal, black line from (B,D) to (C,D)
  587. ;-------------------------------------------------------------------------------
  588. BlackLine:
  589.  push hl
  590.  push de
  591.  ld a,c
  592.  sub b
  593.  push af
  594.  ld     A, 63
  595.  sub    D
  596.  ld     C, A
  597.  call FIND_PIXEL
  598.  ld de,BITMAPMEM
  599.  add hl,de
  600.  ld b,a
  601.  pop af
  602.  ld c,a
  603. BLoop:
  604.  ld a,(hl)
  605.  or b
  606.  ld (hl),a
  607.  dec c
  608.  jr z,EndBlack
  609.  rrc B
  610.  jr nc,BLoop
  611.  inc hl
  612.  jr BLoop
  613. EndBlack:
  614.  ;fastCopy
  615.  pop de
  616.  pop hl
  617.  ret
  618.  
  619. ExitGame:
  620.  ld  hl, LevelSaved
  621.  ld a,0
  622.  ld (hl),a
  623.  
  624.  call   ClearGraphMem
  625.  ;set 6,(iy+9)        ;Restore the StatVars, to avoid screen garbage
  626.  set 1,(iy+13)        ;Same with TextShadow
  627.  ret
  628.  
  629. ;-------------------------------------------------------------------------------
  630. ;ScanBk: stores background from(B,C)-(B+24,C+24) in BKPT
  631. ;-------------------------------------------------------------------------------
  632. ScanBk:
  633.  push bc
  634.  ld   a, 63
  635.  sub  c
  636.  ld   c, a
  637.  call FIND_PIXEL
  638.  ld de,BITMAPMEM
  639.  add hl,de
  640.  ld de,BackgroundTemp
  641.  ld b,23
  642. ScanLoop:
  643.  push bc
  644.  ld   bc, 4                            
  645.  ldir             ;move 4 bytes from hl to de
  646.  pop  bc
  647.  push de          ;next line in vid-ram
  648.  ld   de, 8                        
  649.  add  hl, de
  650.  pop  de
  651.  djnz ScanLoop
  652.  pop  bc
  653.  ret
  654.  
  655. ;-------------------------------------------------------------------------------
  656. ;DrawBk: draws background from(B,C)-(B+24,C+24) in BKPT
  657. ;-------------------------------------------------------------------------------
  658. DrawBk:
  659.  push bc
  660.  ld   a, 63
  661.  sub  c
  662.  ld   c, a
  663.  call FIND_PIXEL
  664.  ld de,BITMAPMEM
  665.  add hl,de
  666.  ld de,BackgroundTemp
  667.  ex de,hl
  668.  ld   b, 23       ;23 lines to draw
  669. PutLoop:
  670.  push bc
  671.  ld   bc, 4                        
  672.  ldir              ;move 4 bytes from hl to de
  673.  pop  bc
  674.  push hl          ;next line in vid-ram
  675.  ld   hl, 8    
  676.  add  hl, de
  677.  ex   de, hl
  678.  pop  hl
  679.  djnz PutLoop
  680.  pop  bc
  681.  ret
  682.  
  683.  
  684.  
  685. ;-------------------------------------------------------------------------------
  686. ;Built-in Level editor:
  687. ;-------------------------------------------------------------------------------
  688. LevelEditor:
  689.  ROM_CALL(CLEARLCD)
  690.  call ClearGraphMem
  691.  ld  hl, Level
  692.  ld  (LEVELPT), hl
  693.  xor a
  694.  ld  (LEVELY), a
  695.  set 7,(iy+$14)
  696.  ld  e, 10
  697.  ld  d, 1
  698.  ld  hl, Arrow
  699.  call DMX
  700.  ld  d, 8
  701.  call DMX
  702.  ld  d, 15
  703.  call DMX
  704.  ld  d,22
  705.  call DMX
  706.  ld d,29
  707.  call DMX
  708.  res 7,(iy+$14)
  709.  call EDrwScreen
  710.  ld  a, $C0
  711.  ld  (MASK), a
  712.  ld  b, 0
  713.  ld  c, 60
  714. KeyLoop:
  715.  call PointChg
  716. WaitKey:
  717.  call GET_KEY
  718.  or a
  719.  jr   z, WaitKey
  720.  push af
  721.  call PointChg
  722.  pop  af
  723.  cp   $01
  724.  jr   z, MoveUp            ;Flip the keys...
  725.  cp   $02
  726.  jr   z, MoveLeft
  727.  cp   $03
  728.  jr   z, MoveRight
  729.  cp   $04
  730.  jr   z, MoveDown        ;Had to flip the keys...
  731.  cp   $36
  732.  jp   z,ChangeStone
  733.  cp   $37
  734.  jp   z,ExitEditor
  735.  cp   $0F
  736.  jp   z,ClearLevel
  737.  jr   KeyLoop
  738. MoveDown:
  739.  ld   a, (LEVELY)
  740.  or   a
  741.  jr   z, KeyLoop
  742.  dec  a
  743.  ld   (LEVELY), a
  744.  inc  c
  745.  inc  c
  746.  ld   a, c
  747.  cp   62
  748.  jr   nz, KeyLoop
  749.  ld   hl, (LEVELPT)
  750.  dec  hl
  751.  ld   (LEVELPT), hl
  752.  ld   c, 60
  753.  call EDrwScreen
  754.  jr   KeyLoop
  755. MoveLeft:
  756.  ld   a, b
  757.  or   a
  758.  jr   z, KeyLoop
  759.  dec  b
  760.  dec  b
  761.  ld   a, (MASK)
  762.  add  a, a
  763.  add  a, a
  764.  ld   (MASK), a
  765.  jr   KeyLoop
  766. MoveRight:
  767.  ld   a, b
  768.  cp   6
  769.  jr   z, KeyLoop
  770.  inc  b
  771.  inc  b
  772.  ld   a, (MASK)
  773.  srl  a
  774.  srl  a
  775.  ld   (MASK), a
  776.  jr   KeyLoop
  777. MoveUp:
  778.  ld   a, (LEVELY)
  779.  cp   253
  780.  jp   z,KeyLoop
  781.  inc  a
  782.  ld   (LEVELY), a
  783.  dec  c
  784.  dec  c
  785.  ld   a, c
  786.  or   a
  787.  jp  nz,KeyLoop
  788.  ld   hl, (LEVELPT)
  789.  inc  hl
  790.  ld   (LEVELPT), hl
  791.  ld   c, 2
  792.  call EDrwScreen
  793.  jp  KeyLoop
  794. ChangeStone:
  795.  ld   hl, (LEVELPT)
  796.  ld   a, 60
  797.  sub  c
  798.  ld   e, a
  799.  srl  e
  800.  ld   d, 0
  801.  add  hl, de
  802.  ld   a, (MASK)
  803.  xor  (hl)
  804.  ld   (hl), a
  805.  call EDrwScreen
  806.  jp   KeyLoop
  807.  
  808.  
  809. ClearLevel:
  810.  ld   hl, (LEVELPT)
  811.  ld   b, 255
  812.  ld   a,-1
  813. ClearLL:
  814.  ld   (hl), a
  815.  inc  hl
  816.  djnz ClearLL
  817.  call EDrwScreen
  818.  jp KeyLoop
  819.  
  820. ExitEditor:
  821.  ld   hl, (LEVELPT)
  822.  ld   de, (LEVELPT)
  823.  ld   bc, 254
  824.  add  hl, bc
  825.  ex   de, hl
  826.  ldi
  827.  ldi
  828.  call ClearGraphMem
  829.  jp   Title
  830.  
  831. ;-----------------------------------------------------------------------------
  832. ;EDrwScreen: draws screen
  833. ;-----------------------------------------------------------------------------
  834. EDrwScreen:
  835.  push bc
  836.  call ClearGraph
  837.  ld  hl, (LEVELPT)
  838.  ld  b, 30
  839. DrawLoop:
  840.  ld   a, b
  841.  add  a, a
  842.  ld   c, a
  843.  push bc
  844.  bit 6, (hl)
  845.  ld  b, 0
  846.  call nz,DrawBox
  847.  bit 4, (hl)
  848.  ld  b, 2
  849.  call nz,DrawBox
  850.  bit 2, (hl)
  851.  ld  b, 4
  852.  call nz,DrawBox
  853.  bit 0, (hl)
  854.  ld  b, 6
  855.  call nz,DrawBox
  856.  pop bc
  857.  inc  hl
  858.  djnz DrawLoop
  859.  call fastCopy
  860.  pop bc
  861.  ret
  862.  
  863. ;-----------------------------------------------------------------------------
  864. ;DrawBox
  865. ;-----------------------------------------------------------------------------
  866. DrawBox:
  867.  push bc
  868.  call PointOn
  869.  inc b
  870.  call PointOn
  871.  inc c
  872.  call PointOn
  873.  dec b
  874.  call PointOn
  875.  pop bc
  876.  ret
  877.  
  878. ;-----------------------------------------------------------------------------
  879. ;PointOn: draws point at b=x, c=y
  880. ;-----------------------------------------------------------------------------
  881. PointOn:
  882.  push hl
  883.  push bc
  884.  call FIND_PIXEL  ;HL=byte offset in video buffer, A=2^(bit to change)
  885.  ld de, GRAPH_MEM
  886.  add hl, de
  887.  or (hl)
  888.  ld (hl),a
  889.  pop bc
  890.  pop hl
  891.  ret
  892.  
  893. ;-----------------------------------------------------------------------------
  894. ;PointChg: changes point at b=x, c=y
  895. ;-----------------------------------------------------------------------------
  896. PointChg:
  897.  push bc
  898.  push hl
  899.  call FIND_PIXEL
  900.  ld   de,GRAPH_MEM
  901.  add  hl,de
  902.  xor  (hl)
  903.  ld   (hl),a
  904.  call fastCopy
  905.  pop  hl
  906.  pop  bc
  907.  ret
  908.  
  909.  
  910. ClearGraphMem:     
  911.     ld hl,GRAPH_MEM
  912.         ld (hl),0
  913.         ld de,GRAPH_MEM+1
  914.         ld bc,767
  915.         ldir
  916.         ret
  917. ;-------------------------------------------------------------------------------
  918. ;Some important variables:
  919. ;-------------------------------------------------------------------------------
  920. Arrow:     .db "USE ARROWS TO MOVE,",0
  921. Second:    .db "2ND        TO Change Block",0
  922. Clear:     .db "CLEAR TO Erase Level",0
  923. Down:      .db "DOWN  TO Scroll Down",0
  924. Exit:      .db "MODE   TO Save & Exit",0
  925.  
  926. Instr:     .db "Press Any Key to Play!",0
  927. ByStr2:       .db "By: Andreas Ess/Sam Heald",0
  928. PortStr:   .db "2ND-User Lvl     ALPHA-Editor",0
  929.  
  930. HiScrTxt:  .db "HiScore: ",0
  931. HiScrName: .db "AND",0
  932. HiScore:   .dw 10                       ;This is standard hi-score
  933. HiScr:     .db "NEW HIGH SCORE!",0
  934. EnterInit: .db "ENTER YOUR INITIALS:",0
  935.  
  936.  
  937.  
  938. StartLine:
  939.  .db 16,12,8,4      ;#0
  940.  .db 16,12,8,4
  941.  .db 17,12,8,4
  942.  .db 17,13,8,4
  943.  .db 18,13,9,4    ;#4
  944.  .db 18,13,9,4
  945.  .db 19,14,9,4
  946.  .db 19,14,9,5
  947.  .db 20,14,10,5    ;#8
  948.  .db 20,15,10,5
  949.  .db 21,15,10,5
  950.  .db 21,15,10,5
  951.  .db 22,16,11,5    ;#12
  952.  .db 22,16,11,5
  953.  .db 23,16,11,6
  954.  .db 23,17,11,6
  955.  .db 24,17,12,6    ;#16
  956.  .db 24,17,12,6
  957.  .db 25,18,12,6
  958.  .db 25,18,12,6
  959.  .db 26,18,13,6    ;#20
  960.  .db 26,19,13,7
  961.  .db 27,19,13,7
  962.  .db 27,19,13,7
  963.  .db 28,20,14,7    ;#24
  964.  .db 28,20,14,7
  965.  .db 29,20,14,7
  966.  .db 29,21,14,7
  967.  .db 30,21,15,8    ;#28
  968.  .db 30,21,15,8
  969.  .db 31,22,15,8
  970.  .db 31,22,15,8
  971.  .db 32,22,16,8    ;#32
  972.  .db 32,23,16,6
  973.  .db 33,23,16,7
  974.  .db 33,23,16,9
  975.  .db 34,24,17,9    ;#36
  976.  .db 34,24,17,9
  977.  .db 35,24,17,9
  978.  .db 35,25,17,9
  979.  .db 36,25,18,9   ;#40
  980.  .db 36,25,18,9
  981.  .db 37,26,18,10
  982.  .db 37,26,18,10
  983.  .db 38,26,19,10   ;#44
  984.  .db 38,27,19,10
  985.  .db 39,27,19,10
  986.  .db 39,27,19,10
  987.  .db 40,28,20,10    ;#48
  988.  .db 40,28,20,11
  989.  .db 41,28,20,11
  990.  .db 41,29,20,11
  991.  .db 42,29,21,11    ;#52
  992.  .db 42,29,21,11
  993.  .db 43,30,21,11
  994.  .db 43,30,21,11
  995.  .db 44,30,22,12    ;#56
  996.  .db 44,31,22,12
  997.  .db 45,31,22,12
  998.  .db 45,31,22,12
  999.  .db 46,32,23,12    ;#60
  1000.  .db 46,32,23,12
  1001.  .db 47,32,23,12
  1002.  .db 47,32,23,12
  1003.  
  1004. ;-------------------------------------------------------------------------------
  1005. ;Bitmapdata:
  1006. ;-------------------------------------------------------------------------------
  1007. BackgroundTemp = TEXT_MEM2
  1008.  
  1009. WhiteBall:
  1010.  .db $FF,$FF,$FF,$FF,$F8,$3F,$E0,$0F,$C0,$07,$C0,$07,$80,$03,$80,$03
  1011.  .db $80,$03,$80,$03,$80,$03,$C0,$07,$C0,$07,$E0,$0F,$F8,$3F,$FF,$FF,
  1012.  
  1013. BlackBall1:
  1014.  .db $00,$00,$07,$C0,$18,$30,$20,$08,$40,$04,$40,$04,$80,$02,$80,$02
  1015.  .db $80,$02,$C0,$06,$A0,$0A,$54,$54,$6A,$AC,$35,$58,$1A,$B0,$07,$C0
  1016.  
  1017.  .db $00,$00,$07,$C0,$18,$30,$20,$08,$40,$04,$40,$04,$8A,$A2,$D5,$56
  1018.  .db $AA,$AA,$D5,$56,$8A,$A2,$40,$04,$40,$04,$20,$08,$18,$30,$07,$C0
  1019.  
  1020.  .db $00,$00,$07,$C0,$1A,$B0,$35,$58,$6A,$AC,$54,$54,$A0,$0A,$C0,$06
  1021.  .db $80,$02,$80,$02,$80,$02,$40,$04,$40,$04,$20,$08,$18,$30,$07,$C0
  1022.  
  1023. Level1:
  1024.  .db $FF,$3C,$FF,$3C,$0C,$0C,$0F,$03,$03,$03,$C0,$C0,$C0,$FF,$FF,$00 ;16
  1025.  .db $FF,$FF,$00,$3C,$3C,$00,$03,$0C,$30,$C0,$FF,$3C,$C3,$C3,$03,$FF ;32
  1026.  .db $33,$33,$03,$30,$03,$30,$03,$C0,$FF,$03,$03,$C0,$0C,$C3,$CF,$CF ;48
  1027.  .db $C0,$C0,$FF,$00,$0C,$00,$30,$00,$03,$00,$C0,$F3,$F3,$F3,$F0,$C0 ;72
  1028.  .db $C0,$F0,$30,$3C,$0C,$0F,$03,$03,$03,$F0,$F0,$00,$FF,$3C,$FF,$C0 ;80
  1029.  .db $00,$30,$FF,$FC,$F0,$C0,$03,$C0,$03,$FF,$FF,$F3,$FF,$CF,$FF,$C3 ;96
  1030.  .db $3C,$00,$C3,$00,$03,$00,$00,$FF,$FF,$03,$0C,$30,$C0,$30,$C0,$03 ;112
  1031.  .db $FF,$00,$00,$3C,$00,$03,$00,$00,$FF,$00,$00,$FF,$FF,$F3,$CF,$F3 ;128
  1032.  .db $00,$00,$C0,$00,$00,$00,$FF,$0C,$0C,$0F,$03,$03,$0F,$0C,$0F,$30 ;144
  1033.  .db $F0,$C0,$C0,$00,$FF,$00,$00,$03,$03,$03,$03,$03,$C0,$C0,$00,$00 ;160
  1034.  .db $FF,$F3,$FC,$F3,$CF,$3F,$3F,$00,$00,$FF,$00,$00,$FF,$00,$00,$FF ;176
  1035.  .db $C3,$3C,$C3,$F3,$FC,$FF,$00,$00,$00,$03,$FF,$C0,$F0,$03,$3C,$0C ;192
  1036.  .db $0F,$03,$03,$00,$00,$C0,$FF,$FF,$F3,$CF,$CF,$F3,$FF,$03,$0C,$03 ;208
  1037.  .db $00,$FF,$3C,$FF,$00,$FF,$33,$CC,$CC,$33,$3C,$00,$FF,$00,$00,$00 ;224
  1038.  .db $FF,$FF,$03,$C0,$30,$0C,$30,$0C,$FF,$00,$FF,$F3,$CF,$3F,$00,$FF ;240
  1039.  .db $FF,$00,$FF,$00,$3C,$00,$3C,$00,$3C,$00,$30,$00,$30,$00,$00,$00,$FF ;256
  1040.  
  1041. ;-------------------------------------------------------------------------------
  1042. ;This is the edit-able level:
  1043. ;-------------------------------------------------------------------------------
  1044. Level:
  1045.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1046.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1047.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1048.  
  1049.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1050.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1051.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1052.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1053.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1054.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1055.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1056.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1057.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1058.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1059.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1060.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  1061.  .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00,$FF,$00
  1062.  
  1063. ;---------------------------------------------------------------------------------
  1064. ;Title Picture
  1065. ;---------------------------------------------------------------------------------
  1066. TitlePicture:
  1067.     .db     16,0,8,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,8,0,48,16,8,4,0,0,0,0
  1068.     .db     0,0,1,131,248,0,0,2,0,0,0,0,0,0,0,127,252,16,16,3,0,0,0,0,198,2,0,62,6,48,96
  1069.     .db     35,224,0,2,3,239,128,0,24,131,60,224,15,48,0,0,7,109,224,128,26,113,255,192,6,28,0,8,14,120,112
  1070.     .db     72,52,249,195,192,6,159,144,0,28,56,24,121,180,252,1,193,6,220,0,16,56,48,184,61,241,252,0,228,119,48
  1071.     .db     0,48,112,17,176,63,241,252,60,120,255,240,112,96,232,139,112,55,113,252,126,120,223,225,252,224,118,56,102,119,112
  1072.     .db     249,126,113,143,243,15,192,57,246,111,99,114,3,126,97,143,158,3,192,31,179,253,226,49,143,60,225,143,30,0,224
  1073.     .db     31,51,249,224,17,254,1,227,143,31,0,112,63,51,240,192,16,248,135,247,7,31,32,48,63,51,248,64,18,192,127
  1074.     .db     255,7,31,112,56,103,51,248,64,16,96,63,255,39,31,60,24,195,49,248,64,9,96,31,222,115,31,63,29,131,24
  1075.     .db     249,80,137,96,31,142,115,31,63,31,3,88,48,77,1,184,15,158,115,95,63,31,143,76,1,71,64,190,71,156,3
  1076.     .db     30,63,31,254,44,2,71,164,219,163,28,49,94,191,63,252,108,134,199,184,216,177,28,9,92,62,56,240,222,124,135
  1077.     .db     180,220,216,184,113,156,190,58,0,63,57,142,205,204,209,62,120,153,188,54,3,243,195,204,124,60,230,65,120,250,121
  1078.     .db     19,31,193,254,252,55,248,111,58,120,253,250,0,255,131,252,124,7,192,127,196,124,127,187,7,253,131,28,24,3,0
  1079.     .db     121,255,236,118,25,175,224,196,12,24,2,0,48,127,207,224,28,31,0,64,4,8,6,0,0,31,199,192,63,252,0
  1080.     .db     0,2,8,4,0,0,3,128,0,63,240,0,32,0,0,4,0,0,1,128,0,97,192,0,0,0,136,0,0,0,0
  1081.     .db     192,1,0,128,0,0,0,0,8,0,0,0,64,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1082.  
  1083. LSaveGame:
  1084.  ld  a, b
  1085.  ld  (BALLX), a
  1086.  ld  a, c
  1087.  ld  (BALLY), a
  1088.  ld  hl, LevelSaved
  1089.  ld  a, 1
  1090.  ld  (hl), a
  1091.  inc hl
  1092.  ld  de, LEVELY
  1093.  ex  de, hl
  1094.  ld  bc, 21
  1095.  ldir
  1096.  ret
  1097.  
  1098. Pause:
  1099.  call GET_KEY
  1100.  cp   G_ENTER
  1101.  jr   nz, Pause
  1102.  JP GameLoop
  1103.  
  1104. LostLife:
  1105.     xor     A
  1106.     ld      (SPEED), A
  1107. NoFade:
  1108.     ld      A, (LIFE)
  1109.     dec     A
  1110.     jr      z, GameOver
  1111. lost2:
  1112.     ROM_CALL(CLEARLCD)
  1113.     ld      (LIFE), A
  1114.     xor     A
  1115.     ld      HL, SCROLLY
  1116.     ld      (HL), A
  1117.     ld      HL, (LEVELPT)
  1118. FindStone:
  1119.     dec     HL
  1120.     ld      (LEVELPT), HL
  1121.     ld      A, (LEVELY)
  1122.     dec     A
  1123.     ld      (LEVELY), A
  1124.     jp      z, StartAfterLife
  1125.     ld      C, $80
  1126.     ld      B, 1
  1127. FindStone1:
  1128.     ld      A, (HL)
  1129.     and     C
  1130.     jr      nz, FoundDone
  1131.     srl     C
  1132.     jr      z, FindStone
  1133.     ld      A, B
  1134.     add     A, 12
  1135.     ld      B, A
  1136.     jr      FindStone1
  1137. FoundDone:
  1138.     ld      C, 46
  1139.     jp      StartGameLoop
  1140.  
  1141. GameOver:
  1142.  ROM_CALL(CLEARLCD)
  1143.  ld  hl, LevelSaved
  1144.  ld a,0
  1145.  ld (hl),a
  1146.  CALL HiScoreHand
  1147.  JP Title
  1148.  
  1149.  
  1150. LevelSaved: .db 0  ;standard: no level saved
  1151. SavedLevel: .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1152.  
  1153. HiScoreHand:
  1154.  ROM_CALL(CLEARLCD)
  1155.  ld hl, HiScore
  1156.  call LD_HL_MHL
  1157.  ld de,(SCORE)
  1158.  ld (HiScoreTemp),de
  1159.  call CP_HL_DE
  1160.  ret nc
  1161.  ld hl,HiScore
  1162.  ex de,hl
  1163.  ld hl,HiScoreTemp
  1164.  ld c,2
  1165.  ldi
  1166.  ldi
  1167.  ld hl,$0100
  1168.  ld (CURSOR_ROW),hl
  1169.  ld hl,HiScr
  1170.  ROM_CALL(D_ZT_STR)
  1171.  ld de,$0A0F
  1172.  call DMX
  1173.  ld hl, $0603
  1174.  ld (CURSOR_ROW),hl
  1175.  ld hl,HiScrName
  1176.  ld c,3
  1177.  push hl
  1178.  ld d,$41
  1179.  ld a,(CURSOR_COL)
  1180.  ld e,a
  1181.  ld b,0
  1182.  jr InvLet
  1183. WaitKey2:
  1184.  push bc
  1185.  push de
  1186.  push hl
  1187.  call GET_KEY
  1188.  pop hl
  1189.  pop de
  1190.  pop bc
  1191.  cp G_UP
  1192.  jr z,LetUp
  1193.  cp G_DOWN
  1194.  jr z,LetDown
  1195.  cp G_2nd
  1196.  jr nz,WaitKey2
  1197.  ld (hl),d
  1198.  inc hl
  1199.  ld a,d
  1200.  ROM_CALL(TX_CHARPUT)
  1201.  inc e
  1202.  inc b
  1203.  ld a,c
  1204.  cp b
  1205.  jr nz,InvLet
  1206.  ld (hl),0
  1207.  pop hl
  1208.  ret
  1209. LetUp:
  1210.  inc d
  1211.  ld a,d
  1212.  cp $5B
  1213.  jr nz,InvLet
  1214.  ld d,$41
  1215.  jr InvLet
  1216. LetDown:
  1217.  dec d
  1218.  ld a,d
  1219.  cp $40
  1220.  jr nz,InvLet
  1221.  ld d,$5A
  1222. InvLet:
  1223.  set 3,(iy+$05)
  1224.  ld a,d
  1225.  ROM_CALL(TX_CHARPUT)
  1226.  ld a,e
  1227.  ld (CURSOR_COL),a
  1228.  res 3,(iy+$05)
  1229.  jr WaitKey2
  1230.  
  1231. ;-----------------------------------------------------------------------------
  1232. ;HL_DECIMAL_MENU(Magnus Hagander):Writes the in HL stored word in menu font
  1233. ;-----------------------------------------------------------------------------
  1234. HL_DECIMAL_MENU:
  1235.  push bc
  1236.  push de
  1237.  ld   de, StringPlace+4
  1238.  ld   b,  5
  1239. ConvLoop:
  1240.  call UNPACK_HL
  1241.  add  a,'0'
  1242.  ld   (de), a
  1243.  dec  de
  1244.  djnz ConvLoop
  1245.  ld   hl, StringPlace
  1246.  ROM_CALL(D_ZM_STR)
  1247.  pop de
  1248.  pop bc
  1249.  ret
  1250.  
  1251. ;-------------------------------------------------------------------------------
  1252. ;DoScroll: handles scrolling
  1253. ;-------------------------------------------------------------------------------
  1254. DoScroll:
  1255.  ld   a, (SCROLLY)   ;increment SCROLLY
  1256.  inc  a
  1257.  ld   d, a
  1258.  ld   (SCROLLY), a   ;save it
  1259.  cp   32             ;SCROLLY = 32 ?
  1260.  jr   nz, LoadHLScr
  1261.  ld   a, 0           ;yes, set it to 0,
  1262.  ld   d, 0
  1263.  ld   (SCROLLY), a
  1264.  set 7,(iy+$14)    ;Write text to GRAPH_MEM
  1265.  ld     hl,$0000
  1266.  ld     (CURSOR_X), hl
  1267.  ld     HL, (SCORE)
  1268.  call   HL_DECIMAL_MENU      ;display HL menu style
  1269.  res 7,(iy+$14)     ;Stop Writing text to GRAPH_MEM
  1270.  push bc            ;Save bc
  1271.  ld   de, BITMAPMEM ;Copy to APD_BUF
  1272.  ld   hl, GRAPH_MEM ;Copy from GRAPH_MEM
  1273.  ld   bc,72         ;Copy first 6 lines of GM
  1274.  ldir               ;Do it
  1275.  pop  bc            ;Restore BC
  1276.  
  1277.  ld a,(LEVELY)
  1278.  inc a
  1279.  cp 251
  1280.  jr nz,NoBonus
  1281. Bonus:
  1282.  ld hl,LIFE
  1283.  inc (hl)
  1284. NoBonus:
  1285.  cp 253
  1286.  jr nz,GoOnScroll
  1287.  xor a
  1288.  ld   (LEVELY), a
  1289.  ld   hl, (ORIGLVL)
  1290.  ld   (LEVELPT), hl
  1291. GoOnScroll:
  1292.  ld (LEVELY),a
  1293.  ld hl,(SCORE)
  1294.  ld d,0
  1295.  ld a,(SPEED)
  1296.  ld e,a
  1297.  add hl,de
  1298.  ld (SCORE),hl
  1299.  ld hl,(LEVELPT)
  1300.  inc hl
  1301.  ld (LEVELPT),hl
  1302.  
  1303. LoadHLScr:
  1304.  ld   hl, (LEVELPT)  ;get Levelinformation from LEVELPT
  1305.  inc  hl
  1306.  inc  hl
  1307.  ld   e, (hl)
  1308.  CALL DrawLine
  1309.  ld   a, (SCROLLY)
  1310.  add  a, 32
  1311.  ld   d, a
  1312.  ld   hl, (LEVELPT)
  1313.  inc hl
  1314.  ld   e, (hl)
  1315.  CALL DrawLine
  1316.  ret
  1317.  
  1318.  
  1319.  
  1320.  
  1321. ClearAPDBUF:
  1322.       push bc     
  1323.     ld hl,APD_BUF
  1324.         ld (hl),0
  1325.         ld de,APD_BUF+1
  1326.         ld bc,767
  1327.         ldir
  1328.       pop bc
  1329.         ret
  1330. LifeStatus: .db "Lives Left:",0
  1331.  
  1332. DMX:
  1333.  ld (CURSOR_X),de
  1334. DMX2:
  1335.  ROM_CALL(D_ZM_STR)
  1336.  ret
  1337.  
  1338. fastCopy:
  1339.     di            ; 4
  1340.     ld    a,$80        ; 7
  1341.     out    ($10),a        ; 11
  1342.     ld    hl,GRAPH_MEM-12-(-(12*64)+1)    ; 10
  1343.     ld    a,$20        ; 7
  1344.     ld    c,a        ; 4    ; 43
  1345. fastCopyAgain:
  1346.     ld    b,64        ; 7
  1347.     inc    c        ; 4
  1348.     ld    de,-(12*64)+1    ; 10
  1349.     out    ($10),a        ; 11
  1350.     add    hl,de        ; 11
  1351.     ld    de,11        ; 10
  1352. fastCopyLoop:
  1353.     add    hl,de        ; 11
  1354.     inc    hl        ; 6
  1355.     ret    c        ; 5    ; do nothing instruction (was nop (4 clocks))
  1356.     ld    a,(hl)        ; 7
  1357.     out    ($11),a        ; 11
  1358.     djnz    fastCopyLoop    ; 13/8    ; 3392
  1359.     ld    a,c        ; 4
  1360.     cp    $2B+1        ; 7
  1361.     jr    nz,fastCopyAgain; 12/7    ; 52    ; 41773 (used to be 41136)
  1362.     ret    ; 11    ; 18
  1363.  
  1364. ClearGraph:
  1365.  push bc
  1366.  ld b, 64
  1367.  ld hl, GRAPH_MEM
  1368.  ld de, 12
  1369. Loop:
  1370.  ld (hl), 0
  1371.  add hl, de
  1372.  djnz Loop
  1373.  pop bc
  1374.  ret
  1375.  
  1376.  
  1377. .end
  1378.  
  1379.  
  1380.