Data and address registers are essentially the same thing; both store numbers, but some instructions will only work on data registers and some only on address registers. In general you should use data registers to store data and address registers to store addresses, but you can crossover if necessary. If you're doing pointer arithmetic you could use both types.

move.l d1, -(A7) moves the contents of D1 to the memory location pointed to by A7-4 (or possibly A7-1; I'd have to RTFM to be sure, but A7-4 makes more sense than A7-1)
move #9,D1 sets D1 to 9
jsr calls a function - I don't know what that does
move.l (A7)+,d1 moves the contents of memory location pointed to by A7 to D1, and increases A7 by 4 (or 1).

So A7 is probably being used as a stack for safe storage of whatever is in D1, and the references to -(A7) and (A7)+ are equivalent to push and pop instructions in other processors. It's a long time since I looked at 68000 programming (Amiga days...sigh...) but I have a vague idea that A7 is generally used as the processor stack pointer. If that's the case then jsr probably modifies A7 too; it'll push the return address onto the stack.