mc8051fun/bcd_addbyte.c
2024-06-13 22:07:19 +02:00

44 lines
536 B
C

#include "bcd.h"
#pragma disable_warning 59 // Disable "must return a value" warning
void bcd_addbyte(__idata uint8_t *v1, uint8_t len, uint8_t ab) __reentrant
{
(void)v1; (void)len; (void)ab;
__asm
mov a,_bp
add a,#0xfd
mov sp,a
mov r0,dpl
pop ar7
pop ACC
mov r6,a
add a,#0xb0 ; carry will be set if a>=5
jc 001$
mov b,#0x00
ajmp 004$
001$:
mov b,#0x99
004$:
mov a,@r0
add a,r6
da a
mov @r0,a
sjmp 002$
000$:
inc r0
mov a,@r0
addc a,#0x00
da a
mov @r0,a
002$:
djnz r7,000$
mov sp,_bp
__endasm;
}