diff options
Diffstat (limited to 'src/memclear.s')
| -rw-r--r-- | src/memclear.s | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/memclear.s b/src/memclear.s new file mode 100644 index 0000000..1bd7e89 --- /dev/null +++ b/src/memclear.s @@ -0,0 +1,33 @@ + ; void memclear(const char *addr, unsigned int len) + + ; really does have to be an int for the length. + + ; this is basically bzero(), but optimized for size, not speed. + ; bzero() is around 2.3x as fast as this, but it's 3.3x as + ; much code. + + .importzp ptr1, tmp1 + .import popptr1 + .export _memclear + +_memclear: + stx tmp1 ; hi byte of length + tax ; lo stays in X + bne @len_ok + lda tmp1 + beq @ret ; if len == 0, don't do anything (just return) +@len_ok: + jsr popptr1 ; addr arg in ptr1. leaves X alone, sets Y=0 + tya ; A=0 +@loop: + sta (ptr1),y + iny + bne @y_ok + inc ptr1+1 +@y_ok: + dex + bne @loop + dec tmp1 + bpl @loop +@ret: + rts |
