avr: added RingBufferY_PeekByte

This commit is contained in:
Martin Preuss
2025-02-09 21:05:48 +01:00
parent a36639ed8c
commit 601559ca6e
2 changed files with 64 additions and 2 deletions

View File

@@ -92,6 +92,43 @@ l_end:
; ---------------------------------------------------------------------------
; @macro m_ringbuffer_y_peekbyte
;
; @param Y base address (for "LDD Y+nn" and "STD Y+nn")
; @param %0 offset to Y to access maxBytes variable (for "LDD Y+nn" and "STD Y+nn")
; @param %1 offset to Y to access usedBytes
; @param %2 offset to Y to access readPos variable
; @param %3 offset to Y to access writePos variable
; @param %4 offset to Y to access buffer
; @return CFLAG set if okay, cleared on error (i.e. buffer full)
; @return R16 byte read
; @clobbers R17, R18, X
.macro m_ringbuffer_y_peekbyte
ldd r18, Y+@0 ; maxBytes
ldd r17, Y+@1 ; usedBytes
tst r17
clc
breq l_end
dec r17
std Y+@1, r17 ; usedBytes
ldd r17, Y+@2 ; readPos
mov xl, yl
mov xh, yh
adiw xh:xl, @4
add xl, r17
adc xh, r17
sub xh, r17
ld r16, X
std Y+@2, r17 ; readPos
sec
l_end:
.endmacro
; @end
; ---------------------------------------------------------------------------
; @macro m_ringbuffer_y_reset
;

View File

@@ -52,9 +52,9 @@ RingBufferY_WriteByte:
; ---------------------------------------------------------------------------
; @macro m_ringbuffer_y_readbyte
; @routine RingBufferY_ReadByte
;
; @param Y base address of ringbuffer struct
; @param Y base address of ringbuffer struct
; @return CFLAG set if okay, cleared on error (i.e. buffer empty)
; @return R16 byte read
; @clobbers R17, R18, X
@@ -71,6 +71,31 @@ RingBufferY_ReadByte:
; ---------------------------------------------------------------------------
; @routine RingBufferY_PeekByte
;
; @param Y base address (for "LDD Y+nn" and "STD Y+nn")
; @param %0 offset to Y to access maxBytes variable (for "LDD Y+nn" and "STD Y+nn")
; @param %1 offset to Y to access usedBytes
; @param %2 offset to Y to access readPos variable
; @param %3 offset to Y to access writePos variable
; @param %4 offset to Y to access buffer
; @return CFLAG set if okay, cleared on error (i.e. buffer empty)
; @return R16 byte read
; @clobbers R17, R18, X
RingBufferY_PeekByte:
m_ringbuffer_y_peekbyte \
RINGBUFFERY_OFFS_MAXSIZE, \
RINGBUFFERY_OFFS_USED, \
RINGBUFFERY_OFFS_READPOS, \
RINGBUFFERY_OFFS_WRITEPOS, \
RINGBUFFERY_OFFS_DATA
ret
; @end
; ---------------------------------------------------------------------------
; @macro m_ringbuffer_y_reset
;