MichaelM wrote:
Many thanks for the suggestion.
Glad that works out! As for my remark about terminology, there's evidently some confusion. I'll try again.
Code:
ldx # SrcAddress
ldy # DestAddress
lda # CountMinusOne
mov inc, inc, autorepeat ; <-----
;done -- all bytes moved now
The instruction marked with the arrow is a block move instruction. BTW, I invented my own assembler syntax for the options expressed in the operand byte.
The marked instruction is non-interruptable. It also takes a long time to execute, which raises a concern about interrupt latency.
Code:
ldx # SrcAddress
ldy # DestAddress
lda # CountMinusOne
Mv_Lp: mov inc, inc, single ; <-----
bne Mv_Lp
;done -- all bytes moved now
In this case the instruction marked with the arrow is
not a block move instruction; it moves just one byte. (It has properties making it attractive for use in a block-move loop, but it doesn't do a block move.) Once again the marked instruction is non-interruptable, but in this case it executes quickly, thereby avoiding interrupt latency concerns.
All I'm saying is, the designations "interruptable" and "noninterruptable" are not the best, and I believe better terminology can be found -- maybe "REP" or "autorepeat" or something like that. It's possible I'm being swayed by personal preference. However, I believe a newcomer to your design will more quickly understand the mov instruction if its options are carefully and descriptively named.
-- Jeff
[Edit: booboo in second example]
_________________
In 1988 my 65C02 got six new registers and 44 new full-speed instructions!
https://laughtonelectronics.com/Arcana/ ... mmary.html