]> git.sur5r.net Git - cc65/blob - libsrc/common/memset.s
This commit was generated by cvs2svn to compensate for changes in r2,
[cc65] / libsrc / common / memset.s
1 ;
2 ; void* memset (void* ptr, int c, size_t n);
3 ;
4 ; Ullrich von Bassewitz, 29.05.1998
5 ;
6
7         .export         _memset
8         .import         popax
9         .importzp       ptr1, ptr2, tmp1, tmp2, tmp3
10
11 _memset:
12         sta     tmp1            ; Save n
13         stx     tmp2
14         jsr     popax           ; Get c
15         sta     tmp3            ; Save c
16         jsr     popax           ; Get ptr
17         sta     ptr1
18         stx     ptr1+1          ; Save work copy
19         sta     ptr2
20         stx     ptr2+1          ; Save a copy for the function result
21         lda     tmp3
22
23         ldy     #0
24         ldx     tmp2            ; Get high byte of n
25         beq     L2              ; Jump if zero
26
27 ; Set 256 byte blocks
28
29 L1:     sta     (ptr1),y        ; Set one byte
30         iny
31         sta     (ptr1),y        ; Unroll this a bit to make it faster
32         iny
33         bne     L1
34         inc     ptr1+1
35         dex                     ; Next 256 byte block
36         bne     L1              ; Repeat if any
37
38 ; Set the remaining bytes if any
39                                                
40 L2:     ldx     tmp1            ; Get the low byte of n
41         beq     L9              ; Low byte is zero
42
43 L3:     sta     (ptr1),y        ; Set one byte
44         iny
45         dex                     ; Done?
46         bne     L3
47
48 L9:     lda     ptr2            ; Load function result
49         ldx     ptr2+1
50         rts
51
52