blob: 1bd7e89526ef7a07659f15ad14bba5af464d3351 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
|