A89: HELP!!!


[Prev][Next][Index][Thread]

A89: HELP!!!




I've started working on Lode Runner for the 89/92plus, but I'm stuck on this
one routine.  It's supposed to read a byte from LevelData, draw the
appropriate sprite, and loop back to draw the next sprite.  The problem is
that it's drawing the first sprite correctly, then drawing all Bricks (#1)
afterwards (It's doing something like 21111111111... when it SHOULD do
210210210210210...)!  There's one line which I think may be causing the
problem, but I'm not really sure where it is -- and I've been working at
this for a few days.  Can someone try to find why the routine won't work?
Thanks!


--------------------START OF PROGRAM------------
 include "..\doors\tios.h"
 include "..\doors\graphlib.h"
 include "..\doors\userlib.h"
 xdef _ti89
 xdef  _main
      xdef  _comment

_main:

DrawLevel:
 jsr graphlib::clr_scr          ;Clear Screen
 move.l #LevelData,a5           ;Point a5 to Level Data
 move.w #0,d0                   ;PutSprite starting X (0)
 move.w #0,d1                   ;PutSprite starting Y (0)
 move.b #%11111111,d3           ;PutSprite Constant Mask (%11111111)
 move.b #19,d4                  ;Number of times to loop (20-1)
DrawLevel_Row:                  ;Begin Row
 move.b (a5),d6                 ;Move byte from location in a5 to d6
 cmp #0,d6                      ;If 0, Draw Space
 beq DrawLevel_Space            ;
 cmp #1,d6                      ;If 1, Draw Brick
 beq DrawLevel_Brick            ;
 cmp #2,d6                      ;If 2, Draw Player
 beq DrawLevel_Player           ;
 move.l #Space,a0               ;If Other (??) Draw Space
DrawLevel_Continue:             ;Return Here
 jsr graphlib::put_sprite_mask  ;Draw Sprite
 add.b #10,d0                   ;Increase X coord with 10
 add.b #10,d1                   ;Increase Y coord with 10
 add.l #1,a5     *              ;Point a5 to next byte (PROBLEM LINE???)
 dbra d4,DrawLevel_Row          ;Decrease d4, loop until -1
 jsr userlib::idle_loop         ;Wait for Keypress
 rts                            ;Exit

DrawLevel_Space:
 move.l #Space,a0
 jmp DrawLevel_Continue

DrawLevel_Brick:
 move.l #Brick,a0
 jmp DrawLevel_Continue

DrawLevel_Player:
 move.l #Player,a0
 jmp DrawLevel_Continue

Space:
 dc.w 8,1
 dc.b %00000000
 dc.b %00000000
 dc.b %00000000
 dc.b %00000000
 dc.b %00000000
 dc.b %00000000
 dc.b %00000000
 dc.b %00000000

Brick:
 dc.w 8,1
 dc.b %11111111
 dc.b %01010101
 dc.b %11111111
 dc.b %10101010
 dc.b %11111111
 dc.b %01010101
 dc.b %11111111
 dc.b %10101010

Player:
 dc.w 8,1
 dc.b %00111100
 dc.b %01011010
 dc.b %00111100
 dc.b %00011000
 dc.b %01111110
 dc.b %00011000
 dc.b %00100100
 dc.b %01100110

LevelData:
;----------------------------------------------------------------+
;Col: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20|
;----------------------------------------------------------------+ Row:
 dc.b  2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1| ;01
 dc.b  1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1| ;02
 dc.b  1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1| ;03
 dc.b  1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1| ;04
 dc.b  1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1| ;05
 dc.b  1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1| ;06
 dc.b  1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1| ;07
 dc.b  1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1| ;08
 dc.b  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1| ;09
 dc.b  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1| ;10
;----------------------------------------------------------------+

_comment:
 dc.b "Lode Runner v0.x",0

 end
---------------------END OF PROGRAM-------------



Follow-Ups: