; Assume mem 8-Bit, Index 16-Bit
; Vram = 16-Bit value to add with the finished caculation. area of the data
; XYpos= 24-Bit value. 8-Bits for X and 8-Bits for Y, 8-Bits for flag
;  X   = 0 through 31
;  y   = 0 through 31 ( viewable -> 28?? lines )
;  flag= 0 = no space between lines, 1 = a space between lines EX:
;  flag 0 = Hello,   flag 1 = Hello
;           World 
;			      World	

;###########################
; Goto Xy routine for Tmaps#
;###########################
GotoXY .macro (Vram,XYpos) ; Both are 16-bit values
 php

 rep #$20
 pha

 lda XYpos		; load X position
 and #!$00ff		; calculate Y position last
 pha			; push X position for adding
 lda XYpos+1		; load the Y position
 and #!$00ff		; 8-bit value
 asl			; multiply by $20 -> 32 ( 1 line )
 asl : asl   
 asl : asl
 pha
 lda XYpos+2		; load flag
 and #!$00ff		; if flag = 0, then we move only 1 line
 beq High32
 pla			; else, retrieve the value
 asl			; shift again to move to next line
 pha			; push it again just to be pulled safely

High32:
 pla			; retrieve the Y caculation
 clc
 adc $01,s		; add the X position
 clc
 adc Vram		; Add Vram pointer
 sta $2116		; set Vram address for Tile Maps
 sta Vram		; save it if needed. NOTE:
			; I usually save the old value before calling this routine.
 pla			; pull calculated X position
 pla			; pull all previously pushed values..
 plp
.endm
;/* End Of SUB */