Re: A86: Efficiency Problem


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

Re: A86: Efficiency Problem




In a message dated 12/10/98 6:16:19 PM Pacific Standard Time, yarin@acc.umu.se
(JIMMY MARDELL!!!!) writes:

> At 20:27 1998-12-10 -0500, you wrote:
>  >
>  >The following is a fragment(?) of code from a game I'm working on called 
> Nerd
>  >Quest I. It's the a part that displays the current weapon on the status
>  >screen. It seems to me that this code is incredibly ineffiecient, and
there'
> s
>  >gotta be a faster way of doing this. 
>  
>  Hehe... your source code is probably _the_ classic example of beginners
>  mistakes :-)
Well, hey. I *AM* beginner. :) If anyone out there wants to use this as an
example for some turotial, go ahead. Mistakes are for learning from! I
remember rewriting my first real BASIC game and it was WAY smaller than the
origional... It's just plain easier after you know all the complicated
commands (or opcodes)!

Once again, the few lines marked below, I don't understand what they do. My
policy is that, save for really complex routines that I don't want to tackle
yet (i.e. dividing routine :), I want to understand what I'm doing...
especially if it's only a couple lines that I don't understand. (First it's
three lines, then six, than 27, than 8,316, and next thing you know, your
ENTIRE assembly program is a cut and paste! Ack!) OK, back on topic. 

>  
>  
>  Instead of all the checks, you use a lookuptable:
>  
>   ld a,(Weapon) ;Weapon EQU $F602

-----I don't understand from here
>   add a,a
>   ld hl,lookuptable
>   ld d,0
>   ld e,a
>   add hl,de
-----To here!

If I can recall right, this is slightly different than Dux's routine. I'd look
it up except I can't get at it w/o a mouse! (If you want to know more about
that, go ahead and send me a <A HREF="mailto:ZeromusMog@aol.com">personal note
</A>.)

>   call _ldhlind  ; $4010 (or LD_HL_MHL) 
>   ; And we're done! 14+2*16 = 46 bytes
>   call_puts
>   jp somewhere
>  
>  lookuptable:
>   .dw W1,W2,W3,W4,W5,W6,W7,W8,W9,W10
>   .dw W11,W12,W13,W14,W15,W16
>  
>  
>  ...or the smaller, slightly slower, version...
>  
>   ld hl,DataSection
>   ld a,(Weapon)
>   or a
>   jr z,Done
>   ld b,a
>   xor a
>  SkipStrings:
>   ld c,$FF ; Make sure the loop doesn't terminate because of the counter
>   cpir     ; Search string for nullterminating zero (that is - end of
string)
>   inc hl   ; HL -> next string
>   djnz SkipStrings
>  Done: 
>   ; Done! 18 bytes
>   call _puts
>   jp somewhere
>  
>  --
>  Real name:     Jimmy Mårdell         
>  Email:         mailto:yarin@acc.umu.se
>  Homepage:      http://www.acc.umu.se/~yarin/
>  
>  Icarus Productions homepage: http://icarus.ganymed.org/


Follow-Ups: