4. I understand, it's good to get experience. I hope that after a certain point you'll use libraries, though; I've gone the route of rolling my own everything in other languages, and it gets tedious. Plus Benryves gets angry at you.
5. That's what I figured.
6. Yes. Any 8-bit to 8-bit register load is a single byte, whereas loading an immediate (a number) to an 8-bit register is 2 bytes. Loading an immediate to a 16-bit register is 3 byte, 1 for the opcode and 2 for the value. There is no 16-bit to 16-bit register load other than ex de,hl (which is 1 byte) and push r16a \ pop r16b, which is of course two bytes and quite a few cycles. As far as writing good code, it's good to start to get a sense for how opcode size figures into your program. Another good one that's key is that jr blah is 2 bytes, jr condition,blah is 2 bytes, jp blah and jp condition, blah are both 3 bytes, and bcall() and call are both 3 bytes.
5. That's what I figured.
6. Yes. Any 8-bit to 8-bit register load is a single byte, whereas loading an immediate (a number) to an 8-bit register is 2 bytes. Loading an immediate to a 16-bit register is 3 byte, 1 for the opcode and 2 for the value. There is no 16-bit to 16-bit register load other than ex de,hl (which is 1 byte) and push r16a \ pop r16b, which is of course two bytes and quite a few cycles. As far as writing good code, it's good to start to get a sense for how opcode size figures into your program. Another good one that's key is that jr blah is 2 bytes, jr condition,blah is 2 bytes, jp blah and jp condition, blah are both 3 bytes, and bcall() and call are both 3 bytes.