This macro will solve your issues:
.macro PString Arg
.byte :++ - :+
: .byte Arg
When called with more than one argument the arguments have to be quoted in curly brackets. Due enabled string-escapes C like strings can be handled as well.
000800 1 03 41 42 43 PString "ABC&...
Prohibiting interrupts around a decimal mode operation is a pattern to protect the interrupt service routine, not the decimal code sequences.
As was already emphasized by others, an interrupt automatically pushes the status register upon the stack. This includes the decimal bit. When the interrupt routine finishes, the RTI instruction pulls back that value ...
There's absolutely no reason for an interrupt service routine to save and restore the decimal flag - On interrupt, the flag is being saved to the stack automatically, and restored on RTI, so any "normal" code is seeing no change whatsoever, regardless of what the ISR does (except if it would manipulate the value on the stack, which is probably a ...
Protecting 6502 decimal mode code from interrupts
Decimal mode does not need to be protected from interrupts.
Decimal mode is not cancelled/changed by interrupt routines(*1).
Decimal mode is recorded in a status register flag (SED/CLD)
When entering an interrupt, the status register is pushed on the stack
When leaving an interrupt it is pulled back