INTRODUCTION V .BYTE 3 ; assign initial value of 3 to byte V H .WORD 290 ; assign initial value of 290 to word H Anyway, given that H and V have been reserved and have had some value(s) placed in them, here are the solutions to the problems: Problem 1. LDA V ; get the contents of V STA 84 ; and store them in ROWCRS LDA H ; then get the first byte of H STA 85 ; and store in first byte of COLORS LDA H + 1 ; what's this? the second byte of H! STA 86 ; into the second byte of COLORS Problem 2. LDA 84 ; almost, we don't need to comment this... STA V ; it's just problem 1 in reverse! LDA 85 ; first byte of COLORS again STA H ; into the least significant byte of H LDA 86 ; and also the second byte STA H + 1 ; the high order byte of H Do you wonder why we didn't try to move both bytes of H at one time, as we did in BASIC A +, above? Simple: the 6502 microprocessor has no way to move two bytes in a single instruction! Honest! (And this is probably its biggest failing as a CPU.) Of course, if you have a macro assembler, you could write a macro to perform these operations. Here is an example using one macro assembler available for the Atari, though all macro assemblers will operate in at least a similar fashion. First, we define a pair of macros: .MACRO MOVEWORD LDA %1 STA %2 LDA %1+1 STA %2+1 .ENDM .MACRO MOVEBYTE LDA %1 STA %2 .ENDM Both these macros simply move their first "argument" into their second "argument" (and we won't define here just what "arguments" are and how they work--examine a macro assembler manual for more information). The first macro moves two adjacent bytes (i.e., a "word"), and the second moves a single byte. And now we can write our problem code in a much simpler fashion: