Re: LZ: Problem with code


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

Re: LZ: Problem with code



It seems to me that you have forgotten the indirection operator on some
of your HEALTH's.


ld hl,HEALTH
ROM_CALL(D_HL_DECI)


will always display the address of HEALTH, not the contents.
You should have code that looks like this.


ld hl,(HEALTH)
ROM_CALL(D_HL_DECI)


You've put the indirection operators in some places, but not all.
I've marked all the places this might be a problem.


On 14 Jul 96 at 18:21, Carl Wang wrote:


> Hi! Here's a program I'm having a lot of trouble with.  If you can help,
> please do, I'm eager to get this program out not long before school
> starts.  Thanks a lot!!  
> 
>   _  _  /--
>  / \/ \/  -camels@juno.com
> -======   -formerly cwang@pacx.com
>  || ||
> 
> 
> 
> ;Here's my program.  It doesn't seem to work.  The comments refer to what
> ;I'm _TRYING_ to do or what it supposed to do.
> 
> #include "TI-85.H"
> .org 0
> .db "Health dec",0
> 
> HEALTH = $80DF                  ;Location of HEALTH value
> 
> BEGIN:
>         LD A,4
>         OUT (5),A
>         ROM_CALL(CLEARLCD)
>         LD A,00                 ;set the value of HEALTH to 00
>         LD (HEALTH),A
> 
> KEY1:
>         CALL GET_KEY            ;If you press enter, it goes to the main
>         CP $9                   ;program section, press exit to exit
>         JUMP_Z(LOSE)
>         CP $37
>         RET Z
>         JR KEY1
> 
> LOSE:
>         LD BC,$0101             ;This is supposed to show the value of
>         LD ($800C),BC           ;HEALTH but it doesn't want to.
>         LD HL,HEALTH            ;It says 32991 every time.
                      ^^^^^^  - here
>         ROM_CALL(D_HL_DECI)
>         LD A,HEALTH             ;I'm trying to find the value of HEALTH and
                    ^^^^^^^ - here
>         CP 00                   ;go to the place where the apropriate
> actions
>         JUMP_NZ(LOSE0)          ;are performed.  There are 5 levels for HEALH
>         LD A,HEALTH             ;(there should be 5 levels).  They should
                    ^^^^^^  - here
> be
>         CP 01                   ;00-no damage, 01-damaged once,
> 02-damaged 
>         JUMP_Z(LOSE1)           ;twice, etc.  05 should mean dead.  Here
> the
>         LD A,HEALTH             ;values being compared are supposed to be
                    ^^^^^^ - here
> the
>         CP 02                   ;current value for HEALTH.  They will be
> inc
>         JUMP_Z(LOSE2)           ;later in the program.  What's wrong now is 
>         LD A,HEALTH             ;that it will never get to LOSE1 or LOSE2,
                    ^^^^^^ - here
>         CP 03                   ;always goes to LOSE0
>         JUMP_Z(LOSE3)
>         LD A,HEALTH
                    ^^^^^^ - here
>         CP 04
>         JUMP_Z(DEAD)		;this label is in the real program,
> but it's 				;kinda long so I didn't want to
> put it in here
> 
> LOSE0:
>         LD A,1                  ;This is where HEALTH should be incremented
>         LD (HEALTH),A
                 ^^^^^^^ - This is correct! :)
>         LD B,96
> 
> LOSE0A:                         ;INC HORIZONTAL
>         INC B                   ;This part draws the damage indication.
>         LD A,B                  ;It draws a line from (97,8) to (97,12)
>         CP 101                  ;first then 97 becomes 98 and the same
> thing
>         JUMP_Z(START)           ;happens.  This part works.
>         LD C,7
> 
> LOSE0B:                          ;INC VERT
>         CALL_(DRAWPIXEL)         ;Here's where the actual drawing occurs.
>         INC C			;DRAWPIXEL is Mangus's routine.
>         LD A,C
>         CP 12
>         JUMP_Z(LOSE0A)
>         JUMP_(LOSE0B)
> 
> LOSE1:                          ;It won't get here!!!
>         LD A,2
>         LD (HEALTH),A
                 ^^^^^^^ - This is correct also!
>         LD B,100
> 
> LOSE1A:                 ;INC HORIZONTAL
>         INC B
>         LD A,B
>         CP 105
>         JUMP_Z(START)
>         LD C,8
> LOSE1B:                 ;INC VERT
>         CALL_(DRAWPIXEL)
>         INC C
>         LD A,C
>         CP 12
>         JUMP_Z(LOSE1A)
>         JUMP_(LOSE1B)
> 
> 
> ;...[snip] all this section is the same as LOSE0 with different b and
> HEALTH
> ;values.  It goes from LOSE2 to LOSE3.  There's also a bunch of other
> things I ;didn't feel like including here for the sake of size.
> 
> .end
> 
> 
> 


References: