Re: A86: Please help
[Prev][Next][Index][Thread]
Re: A86: Please help
Russ Hanson wrote:
> i am having some trouble. I have a 16x8 map
> Level1:
> .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> .db 0,1,2,2,0,3,0,1,0,0,0,0,0,0,3,0
> .db 0,2,0,0,0,3,0,3,0,0,0,1,0,0,2,0
> .db 0,2,0,0,0,3,0,2,0,0,1,0,2,0,0,0
> .db 0,0,0,0,0,3,0,0,2,3,2,0,0,0,0,0
> .db 0,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0
> .db 0,1,2,2,0,3,0,0,0,0,0,2,0,0,2,0
> .db 0,0,0,0,0,0,0,0,0,0,0,0,2,0,1,0
> and need to be able to check what is on the map be it 0,1...16.
> depending on x,y coordinates (x is stored into the e register and y
> into
> the d register) i would like the number the x,y coordinates coorispond
that isn't hard at all.. this should work:you want basically the
y*16+x item in the map right?
so this is basically what we want to do:
hl points to pic
b=0
c = d
c = c*16
c = c+e
hl=hl+bc
right? so in asm this is:
;IN: D = Y coord E = X coord OUT: A=Value at (e,d) CHANGED: BC
CoolFunc:
ld hl,Level1 ;hl points to begining of map
ld b,0
ld a,d
sla a ; a = a * 2
sla a ; a = a * 4
sla a ; a = a * 8
sla a ; a = a *16
add a,e ; add your x offset
ld c,a ;store that answer into c
add hl,bc ; add to our pointer
ld a,(hl) ; get the value
ret
--
Trent Lillehaugen
Computer Engineering Major
California Polytechnic University, San Luis Obispo
<tllilleh@polymail.calpoly.edu>
Follow-Ups:
References: