; ; Ullrich von Bassewitz, 1998-12-09, 2004-11-30 ; ; void __fastcall__ _swap (void* p, void* q, size_t size); ; .export __swap .import popax .importzp ptr1, ptr2, ptr3 __swap: eor #$FF sta ptr3 txa eor #$FF sta ptr3+1 ; Save -(size+1) into ptr3 jsr popax ; Get q sta ptr2 stx ptr2+1 jsr popax ; Get p sta ptr1 stx ptr1+1 ; Prepare for swap ldy #$00 ; Swap loop @L1: inc ptr3 ; Bump counter low byte beq @L3 ; Branch on overflow @L2: lda (ptr1),y tax lda (ptr2),y sta (ptr1),y txa sta (ptr2),y iny bne @L1 inc ptr1+1 inc ptr2+1 bne @L1 ; Branch always (hopefully) ; Bump the high counter byte @L3: inc ptr3+1 bne @L2 ; Done rts