# Z80 extend 8-bit to 16-bit

Sometimes you may need to turn an 8-bit value into a 16-bit one. Thankfully this is pretty trivial. For unsigned extension (i.e. upper byte is always 0) just take the naive approach:

` `**ld** l, a ; Store low byte
**ld** h, 0 ; High byte always 0

Sign extension is trickier but still simple. Low byte is copied as-is.
Then we push the sign bit into the carry bit, and exploit the
`sbc`

instruction to get a 0 or -1 out of it (what we're
doing is A - A - carry, which is the same as getting -carry). Then we
can store that in the upper byte.

` `**ld** l, a ; Store low byte
**add** a, a ; Push sign into carry
**sbc** a ; Turn it into 0 or -1
**ld** h, a ; Store high byte