28 lines
529 B
ArmAsm
28 lines
529 B
ArmAsm
;;; -*- Mode: asm; indent-tabs-mode: t; tab-width: 8 -*-
|
|
|
|
;;Move length bytes from A_start address to lenght bytes starting at B_start.
|
|
.proc memcpy
|
|
.include "mem.inc"
|
|
LDY #$00
|
|
loop:
|
|
LDA (B_start), Y
|
|
STA (A_start), Y
|
|
INY
|
|
BEQ y_overflow
|
|
change_length:
|
|
DEC length
|
|
BNE loop
|
|
|
|
DEC length +1
|
|
BPL loop
|
|
JMP loop_end
|
|
y_overflow:
|
|
;; Y is now 0
|
|
INC B_start + 1
|
|
INC A_start + 1
|
|
|
|
jmp change_length
|
|
loop_end:
|
|
|
|
RTS
|
|
.endproc
|