Re: A89: HELP!!!


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

Re: 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

I would use lea LevelData(pc),a5  (I don't exactly know what yours does)

-Normally you would use move.l Leveldata, d0 to put a byte into a data
register, using a relative address to tell the processor where to locate
it.  In this case you want to load the absolute address, which is
accomplished by adding the relative address to LevelData to the program
counter.  I think this will solve the problem

> 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

move.b (a5)+,d6    ->  I would use this to automatically increase a5

> 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???)

--> Instead of using this, look up above right after Draw Level

> 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-------------




References: