; ; File generated by cc65 v 2.11.0 ; .fopt compiler,"cc65 v 2.11.0" .setcpu "6502" .smart on .autoimport on .case on .debuginfo on .importzp sp, sreg, regsave, regbank, tmp1, ptr1, ptr2 .macpack longbranch .dbg file, "qsort.c", 1290, 1067464759 .dbg file, "../../include/stdlib.h", 5287, 1122210074 .export _qsort .import __swap ; --------------------------------------------------------------- ; void __fastcall__ qsort (void*, unsigned int, unsigned int, function returning int*) ; --------------------------------------------------------------- .segment "CODE" .proc _qsort .segment "CODE" ; ; { ; .dbg line, "qsort.c", 59 jsr pushax ; ; if (nmemb > 1) { ; .dbg line, "qsort.c", 60 ldy #$05 lda (sp),y cmp #$00 bne L0048 dey lda (sp),y cmp #$02 L0048: jcc incsp8 ; ; QuickSort (base, 0, (nmemb-1) * size, size, compare); ; .dbg line, "qsort.c", 61 ldy #$0A jsr subysp ldy #$11 jsr ldaxysp ldy #$08 sta (sp),y iny txa sta (sp),y lda #$00 ldy #$06 sta (sp),y iny sta (sp),y ldy #$0F jsr ldaxysp sec sbc #$01 bcs L004E dex L004E: jsr pushax ldy #$0F jsr ldaxysp jsr tosumulax ldy #$04 sta (sp),y iny txa sta (sp),y ldy #$0D jsr ldaxysp ldy #$02 sta (sp),y iny txa sta (sp),y ldy #$0B jsr ldaxysp ldy #$00 sta (sp),y iny txa sta (sp),y jsr _QuickSort ; ; } ; .dbg line, "qsort.c", 63 jmp incsp8 .dbg line .endproc ; --------------------------------------------------------------- ; void __near__ QuickSort (void*, int, int, unsigned int, function returning int*) ; --------------------------------------------------------------- .segment "CODE" .proc _QuickSort: near .segment "CODE" ; ; unsigned char* B = Base; ; .dbg line, "qsort.c", 22 jsr decsp4 ldy #$0F jsr pushwysp ; ; while (Hi > Lo) { ; .dbg line, "qsort.c", 25 L0004: ldy #$0D jsr pushwysp ldy #$0F jsr ldaxysp jsr tosicmp jmi L0005 jeq L0005 ; ; I = Lo + Size; ; .dbg line, "qsort.c", 26 ldy #$0C lda (sp),y clc ldy #$08 adc (sp),y pha ldy #$0D lda (sp),y ldy #$09 adc (sp),y tax pla ldy #$04 jsr staxysp ; ; J = Hi; ; .dbg line, "qsort.c", 27 ldy #$0B jsr ldaxysp ldy #$02 jsr staxysp ; ; while (I <= J) { ; .dbg line, "qsort.c", 28 L000B: ldy #$07 jsr pushwysp ldy #$05 jsr ldaxysp jsr tosicmp beq L000E jpl L000C ; ; while (I <= J && Compare (B + Lo, B + I) >= 0) { ; .dbg line, "qsort.c", 29 L000E: ldy #$07 jsr pushwysp ldy #$05 jsr ldaxysp jsr tosicmp beq L0051 bpl L000F L0051: ldy #$09 jsr pushwysp jsr decsp4 ldy #$06 lda (sp),y clc ldy #$12 adc (sp),y pha ldy #$07 lda (sp),y ldy #$13 adc (sp),y tax pla ldy #$02 sta (sp),y iny txa sta (sp),y ldy #$06 lda (sp),y clc ldy #$0A adc (sp),y pha ldy #$07 lda (sp),y ldy #$0B adc (sp),y tax pla ldy #$00 sta (sp),y iny txa sta (sp),y ldy #$05 jsr ldaxysp jsr callax jsr incsp2 txa bmi L000F ; ; I += Size; ; .dbg line, "qsort.c", 30 ldy #$08 lda (sp),y ldy #$04 clc adc (sp),y sta (sp),y ldy #$09 lda (sp),y ldy #$05 adc (sp),y sta (sp),y ; ; } ; .dbg line, "qsort.c", 31 jmp L000E ; ; while (I <= J && Compare (B + Lo, B + J) < 0) { ; .dbg line, "qsort.c", 32 L000F: ldy #$07 jsr pushwysp ldy #$05 jsr ldaxysp jsr tosicmp beq L0052 bpl L0018 L0052: ldy #$09 jsr pushwysp jsr decsp4 ldy #$06 lda (sp),y clc ldy #$12 adc (sp),y pha ldy #$07 lda (sp),y ldy #$13 adc (sp),y tax pla ldy #$02 sta (sp),y iny txa sta (sp),y ldy #$06 lda (sp),y clc ldy #$08 adc (sp),y pha dey lda (sp),y ldy #$09 adc (sp),y tax pla ldy #$00 sta (sp),y iny txa sta (sp),y ldy #$05 jsr ldaxysp jsr callax jsr incsp2 txa bpl L0018 ; ; J -= Size; ; .dbg line, "qsort.c", 33 ldy #$09 jsr ldaxysp ldy #$02 jsr subeqysp ; ; } ; .dbg line, "qsort.c", 34 jmp L000F ; ; if (I <= J) { ; .dbg line, "qsort.c", 35 L0018: ldy #$07 jsr pushwysp ldy #$05 jsr ldaxysp jsr tosicmp beq L0053 jpl L000B ; ; _swap (B + I, B + J, Size); ; .dbg line, "qsort.c", 36 L0053: jsr decsp4 ldy #$04 lda (sp),y clc ldy #$08 adc (sp),y pha ldy #$05 lda (sp),y ldy #$09 adc (sp),y tax pla ldy #$02 sta (sp),y iny txa sta (sp),y iny lda (sp),y clc ldy #$06 adc (sp),y pha dey lda (sp),y ldy #$07 adc (sp),y tax pla ldy #$00 sta (sp),y iny txa sta (sp),y ldy #$0D jsr ldaxysp jsr __swap ; ; I += Size; ; .dbg line, "qsort.c", 37 ldy #$08 lda (sp),y ldy #$04 clc adc (sp),y sta (sp),y ldy #$09 lda (sp),y ldy #$05 adc (sp),y sta (sp),y ; ; J -= Size; ; .dbg line, "qsort.c", 38 ldy #$09 jsr ldaxysp ldy #$02 jsr subeqysp ; ; } ; .dbg line, "qsort.c", 40 jmp L000B ; ; if (J != Lo) { ; .dbg line, "qsort.c", 41 L000C: ldy #$05 jsr pushwysp ldy #$0F jsr ldaxysp jsr tosicmp beq L002A ; ; _swap (B + J, B + Lo, Size); ; .dbg line, "qsort.c", 42 jsr decsp4 ldy #$04 lda (sp),y clc ldy #$06 adc (sp),y pha dey lda (sp),y ldy #$07 adc (sp),y tax pla ldy #$02 sta (sp),y iny txa sta (sp),y iny lda (sp),y clc ldy #$10 adc (sp),y pha ldy #$05 lda (sp),y ldy #$11 adc (sp),y tax pla ldy #$00 sta (sp),y iny txa sta (sp),y ldy #$0D jsr ldaxysp jsr __swap ; ; if (((unsigned) J) * 2 > (Hi + Lo)) { ; .dbg line, "qsort.c", 44 L002A: ldy #$03 jsr ldaxysp jsr shlax1 jsr pushax ldy #$0C lda (sp),y clc ldy #$0E adc (sp),y pha dey lda (sp),y ldy #$0F adc (sp),y tax pla jsr tosicmp bcc L0030 beq L0030 ; ; QuickSort (Base, J + Size, Hi, Size, Compare); ; .dbg line, "qsort.c", 45 ldy #$0A jsr subysp ldy #$19 jsr ldaxysp ldy #$08 sta (sp),y iny txa sta (sp),y ldy #$0C lda (sp),y clc ldy #$12 adc (sp),y pha ldy #$0D lda (sp),y ldy #$13 adc (sp),y tax pla ldy #$06 sta (sp),y iny txa sta (sp),y ldy #$15 jsr ldaxysp ldy #$04 sta (sp),y iny txa sta (sp),y ldy #$13 jsr ldaxysp ldy #$02 sta (sp),y iny txa sta (sp),y ldy #$11 jsr ldaxysp ldy #$00 sta (sp),y iny txa sta (sp),y jsr _QuickSort ; ; Hi = J - Size; ; .dbg line, "qsort.c", 46 ldy #$05 jsr pushwysp ldy #$0B jsr ldaxysp jsr tossubax ldy #$0A jsr staxysp ; ; } else { ; .dbg line, "qsort.c", 47 jmp L0004 ; ; QuickSort (Base, Lo, J - Size, Size, Compare); ; .dbg line, "qsort.c", 48 L0030: ldy #$0A jsr subysp ldy #$19 jsr ldaxysp ldy #$08 sta (sp),y iny txa sta (sp),y ldy #$17 jsr ldaxysp ldy #$06 sta (sp),y iny txa sta (sp),y ldy #$0F jsr pushwysp ldy #$15 jsr ldaxysp jsr tossubax ldy #$04 sta (sp),y iny txa sta (sp),y ldy #$13 jsr ldaxysp ldy #$02 sta (sp),y iny txa sta (sp),y ldy #$11 jsr ldaxysp ldy #$00 sta (sp),y iny txa sta (sp),y jsr _QuickSort ; ; Lo = J + Size; ; .dbg line, "qsort.c", 49 ldy #$02 lda (sp),y clc ldy #$08 adc (sp),y pha ldy #$03 lda (sp),y ldy #$09 adc (sp),y tax pla ldy #$0C jsr staxysp ; ; } ; .dbg line, "qsort.c", 51 jmp L0004 ; ; } ; .dbg line, "qsort.c", 52 L0005: ldy #$10 jmp addysp .dbg line .endproc