thanks, that's a big help. I dont really need subroutines for this project, simple jumps and branches will do.

I think the main problem now is the index register. Basically i'm having the value enemyrow to be an array with 54 numbers in it (default being 1,0,0,0 etc until 54 numbers fill the array) 54 because there are 54 columns. The values will range from 0-19 (there are 20 rows) so in the first array position, a value of 3 would indicate that there is an 'enemy' in row 3 in column 1.

I think it's a syntax thing, but here is a small snippet of my index reference code.

     ldaa y
	inca ; adds 1 to the current row, making it point to the next row
	staa y
	ldx #enemyrow; loads enemyrow back into x to write for the next line
	staa enemyrow,x; writes the new enemyrow position
What i'm trying to do here is to load the value y into the accumulator (in this case it's 1)

Then it increments and stores it back into y, making y = 2.

What i think might be wrong is ldx #enemyrow. I'm assuming that loads it into the index register, and then staa enemyrow,x is storing the value in accumulator a (which is 2) into the first array posiion, in pseudocode it would be enemyrow[0].

Is this correct?
The second part is this statement
a .equ 2
y .equ 2
      ldx #screen
      ldaa a
      staa y,x
That's with #screen loaded into the index register. i'm wanting it to write the value of a into y + current screen value. Normally the comman is staa 1,x but can i sub my value y into where 1 usually is?