← Back to team overview

gnusim8085-devel team mailing list archive

[Bug 584093] Re: 78+88 in BCD addition missed carry

 

Hi Anjhan,

Here is the what the 8080 manual says about DAA:

...following a two step process:

1. If the least significant four bits of the accumulator is represents a number greater than 9 or if the Auxiliary Carry bit is equal to one, the accumulator is increased by 6. Otherwise no increment occurs.
/*
What the code should do:

if (low > 9 || sys.flag.ac) { sys.reg.a += 6;....
*/

2. If the most significant four bits of the accumulator now[please NOTE
the now, after adding 6 to the lower bits] represents a number greater
than 9, or if the normal carry bit is equal to one, the most significant
four bits are incremented by six. Otherwise no incrementing occurs.

/*
What the code should do:

get the most significant four bits and check the condition specified:
high = sys.reg.a >> 4;
   if (high > 9 || sys.flag.c)

increment the four bits by six:
sys.reg.a += (6 << 4);
*/

If a carry out the least significant occurs during Step(1), the
Auxiliary Carry it is set; otherwise it is reset. Likewise, if a carry
out of the most significant four bits occur during Step(2), the normal
Carry bit is set; otherwise it is unaffected[NOTE].

/* 
What the code should do:

In the first condition when we added 6 to the lower bits,
if((low + 6) > 15)  sys.flag.ac = 1; else sys.flag.ac = 0;

6 is added because we are not updating the low variable after adding 6
to register a.

Similarly for normal Carry bit.

In the second step:
if((high + 6) > 15) sys.flag.c = 1;

notice that the flag is not unset if condition fails, as stated in the manual.
*/

Please let me know if I missed some logic, or am I using the wrong
manual :)

Thanks,
Debjit

-- 
78+88 in BCD addition missed carry
https://bugs.launchpad.net/bugs/584093
You received this bug notification because you are a member of
GNUSim8085 developers, which is subscribed to gnusim8085.

Status in gnusim8085: Fix Committed

Bug description:
With the following program, the carry flag is missed:

mvi a,078h
adi 088h
daa
hlt

please check

regards, Felix Fung





Follow ups

References