; m16_a/m16_b
; returns:
; m16_a: m16_a + m16_b
+ ; m16_flags
m16_add:
+ xor a, a
+ ld [m16_flags], a
+
ld a, [m16_b]
ld b, a
ld a, [m16_a]
; high + carry stored
adc a, b
ld [m16_a+1], a
+ ret nc ; no carry? good to exit
+
+ ; when carry is set -> set flag
+ ld a, M16_CARRY
+ ld [m16_flags], a
ret
; m16_a/m16_b
; returns:
; m16_a: m16_a - m16_b
+ ; m16_flags
m16_sub:
+ xor a, a
+ ld [m16_flags], a
+
ld a, [m16_b]
ld b, a
ld a, [m16_a]
; high + carry stored
sbc a, b
ld [m16_a+1], a
+ ret nc
+
+ ; when carry is set -> set flag
+ ld a, M16_CARRY
+ ld [m16_flags], a
+
ret