1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-21 20:29:24 +00:00

removed redundant code; memset == FillRam, bzero == ClearRam with proper return values

git-svn-id: svn://svn.cc65.org/cc65/trunk@2376 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
izydorst 2003-08-19 22:56:55 +00:00
parent 0ce4187e0e
commit 78908d8421
5 changed files with 34 additions and 50 deletions

View File

@ -1116,17 +1116,17 @@ compatible with standard CRC routines.
<sect2>FillRam and ClearRam <sect2>FillRam and ClearRam
<p> <p>
<tt/void FillRam (char *dest, char value, unsigned length)/ <tt/void *FillRam (char *dest, char value, unsigned length)/
<p> <p>
<tt/void ClearRam (char *dest, unsigned length)/ <tt/void *ClearRam (char *dest, unsigned length)/
<p> <p>
Both functions are filling given memory range. <tt/ClearRam/ fills with <tt/NULLs/, while Both functions are filling given memory range. <tt/ClearRam/ fills with <tt/0s/, while
<tt/FillRam/ uses given <tt/value/. Be warned that these functions destroy <tt/r0, r1 and <tt/FillRam/ uses given <tt/value/. Be warned that these functions destroy <tt/r0, r1 and
r2L/ registers. <tt/FillRam/ is an alias for <tt/memset/. r2L/ registers. These are aliases for <tt/memset/ and <tt/bzero/, respectively.
<sect2>MoveData <sect2>MoveData
<p> <p>
<tt/void MoveData (char *dest, char *src, unsigned length)/ <tt/void *MoveData (char *dest, char *src, unsigned length)/
<p> <p>
This functions copies one memory region to another. There are checks for overlap and the This functions copies one memory region to another. There are checks for overlap and the
non-destructive method is chosen. Be warned that this function destroys contents of non-destructive method is chosen. Be warned that this function destroys contents of

View File

@ -19,10 +19,10 @@ void __fastcall__ CopyFString(char len, char *dest, const char *source);
char __fastcall__ CmpFString(char len, char *dest, const char *source); char __fastcall__ CmpFString(char len, char *dest, const char *source);
unsigned __fastcall__ CRC(const char *buffer, unsigned len); unsigned __fastcall__ CRC(const char *buffer, unsigned len);
void __fastcall__ ClearRam(char *dest, unsigned len); void* __fastcall__ ClearRam(char *dest, unsigned len);
void __fastcall__ FillRam(char *dest, char what, unsigned len); void* __fastcall__ FillRam(char *dest, char what, unsigned len);
void __fastcall__ MoveData(char *dest, const char *source, unsigned len); void* __fastcall__ MoveData(char *dest, const char *source, unsigned len);
void __fastcall__ InitRam(char *myInitTab); void __fastcall__ InitRam(char *myInitTab);

View File

@ -3,43 +3,12 @@
; void* _bzero (void* ptr, size_t n); ; void* _bzero (void* ptr, size_t n);
; void bzero (void* ptr, size_t n); ; void bzero (void* ptr, size_t n);
; ;
; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001 ; Maciej 'YTM/Elysium' Witkowiak, 20.08.2003
; ;
; NOTE: bzero will return it's first argument as memset does. It is no problem
; to declare the return value as void, since it may be ignored. _bzero
; (note the leading underscore) is declared with the proper return type,
; because the compiler will replace memset by _bzero if the fill value
; is zero, and the optimizer looks at the return type to see if the value
; in a/x is of any use.
.export _memset, _bzero, __bzero .export _memset, _bzero, __bzero
.import popa, popax .import _ClearRam, _FillRam
.include "../inc/jumptab.inc" _bzero = _ClearRam
.include "../inc/geossym.inc" __bzero = _ClearRam
_memset = _FillRam
_bzero:
__bzero:
sta r0L
stx r0H
lda #0
sta r2L ; fill with zeros
beq common
_memset:
sta r0L
stx r0H
jsr popax
sta r2L
common: jsr popax
sta r1L
pha
stx r1H
txa
pha
jsr FillRam
pla ; restore ptr and return it
tax
pla
rts

View File

@ -1,10 +1,10 @@
; ;
; Maciej 'YTM/Alliance' Witkowiak ; Maciej 'YTM/Elysium' Witkowiak
; ;
; 30.10.99 ; 30.10.99, 20.08.2003
; void ClearRam (char *dest, int length); ; void * ClearRam (char *dest, int length);
.import DoublePop .import DoublePop
.export _ClearRam .export _ClearRam
@ -14,4 +14,12 @@
_ClearRam: _ClearRam:
jsr DoublePop jsr DoublePop
jmp ClearRam pha
txa
pha
jsr ClearRam
pla
tax
pla
rts

View File

@ -4,7 +4,7 @@
; ;
; 30.10.99, 15.07.2001 ; 30.10.99, 15.07.2001
; void FillRam (char *dest, char what, int length); ; void * FillRam (char *dest, char what, int length);
.import popa, popax .import popa, popax
.export _FillRam .export _FillRam
@ -20,4 +20,11 @@ _FillRam:
jsr popax jsr popax
sta r1L sta r1L
stx r1H stx r1H
jmp FillRam pha
txa
pha
jsr FillRam
pla
tax
pla
rts