Re: A89: HELP!!!
[Prev][Next][Index][Thread]
Re: A89: HELP!!!
I tried both suggestions, still doesn't work - and furthermore, they caused
an unrecoverable error when run from tios [loderun()], although it still
runs from DoorsOS. I'm hoping it's just some odd fluke, and I'm going to
try re-writing the routine to see if it makes a difference. Thanks
anyways - anyone else who has any clue why it won't work, I'm open to
suggestions =)
-Scott
>Date: Wed, 06 Jan 1999 21:09:37 -0600
>From: Mark Zavislak <felix@megsinet.net>
>Subject: 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-------------