home *** CD-ROM | disk | FTP | other *** search
/ 64'er / 64ER_CD.iso / s85xx / s8504b.d64 / keysort.src < prev    next >
Text File  |  1995-03-30  |  2KB  |  121 lines

  1. ; KEYSORT - RELOCATABLE BUBBLE SORT USING KEY ARRAY
  2. ; POINTING TO INTEGER ARRAY
  3. ;
  4. ;  RICHARD L. RYLANDER    1/12/85
  5. ;
  6. ORIGIN=$CF59  ; 53081. (FOLLOWING DOS 5.1)
  7. ;
  8. KB     = $FB  ; 251. POINTER TO KEY ARRAY
  9. ZB     = $FD  ; 253. POINTER TO DATA ARRAY
  10. MAX    = $8C  ; 140. POKE WITH MAX ARRAY INDEX
  11. TOP    = $AC
  12. TOPDIS = $AD
  13. FLAG   = $AE
  14. NXTFLG = $61
  15. CRRNT  = $62
  16. REPEAT = $64
  17. ;
  18.       *=ORIGIN
  19. ;
  20. INIT   LDY #$FF     ; INITIALIZE KEY ARRAY
  21. INLOOP INY
  22.        TYA
  23.        STA (KB),Y
  24.        CMP MAX
  25.        BNE INLOOP
  26. ;
  27. SORT   STA TOPDIS   ; 'A' HOLDS 'MAX'
  28. LOOP1  LDA TOPDIS
  29.        STA TOP
  30.        LDX #0
  31.        STX NXTFLG
  32.        STX FLAG
  33. LOOP2  STX REPEAT
  34. ;
  35. ; GET BOTH BYTES OF INTEGER POINTED TO BY
  36. ; 'KEY' ELEMENT.  RETURN WITH MSB ON STACK
  37. ; AND LSB IN THE ACCUMULATOR
  38. ;
  39. GETINT TXA
  40.        TAY
  41.        LDA (KB),Y
  42.        ASL A
  43.        BCC LOAD
  44.        DEC NXTFLG
  45.        INC ZB+1
  46. LOAD   TAY
  47.        LDA (ZB),Y
  48.        PHA
  49.        INY
  50.        LDA (ZB),Y
  51.        BIT NXTFLG
  52.        BPL NODEC
  53.        INC NXTFLG
  54.        DEC ZB+1
  55. NODEC  CPX REPEAT
  56.        BNE ORDER
  57.        STA CRRNT
  58.        PLA
  59.        STA CRRNT+1
  60.        INX
  61.        BNE GETINT
  62. ;
  63. ; COMPARE INTEGERS OBTAINED THROUGH KEY ARRAY
  64. ; IF 'CURRENT' >= 'NEXT' THEN SWAP KEY
  65. ; ELEMENTS, ELSE CONTINUE
  66. ;
  67. ORDER  CMP CRRNT
  68.        PLA
  69.        SBC CRRNT+1
  70.        BVC TEST
  71.        EOR #$80
  72. TEST   BPL NOSWAP
  73. SWAP   TXA
  74.        TAY
  75.        STX TOPDIS
  76.        LDA (KB),Y
  77.        PHA
  78.        DEY
  79.        LDA (KB),Y
  80.        INY
  81.        STA (KB),Y
  82.        PLA
  83.        DEY
  84.        STA (KB),Y
  85.        INC FLAG
  86. NOSWAP CPX TOP
  87.        BNE LOOP2
  88.        LDA FLAG
  89.        BNE LOOP1
  90. ;
  91. ; UNPACK THE BYTE ELEMENTS OF THE 'KEY' ARRAY
  92. ; INTO BASIC'S NORMAL 2-BYTE INTEGER FORMAT
  93. ;
  94. UNPACK LDX MAX
  95.        INX
  96. PKLOOP DEX
  97.        TXA
  98.        TAY
  99.        LDA (KB),Y
  100.        PHA
  101.        TXA
  102.        ASL A     ; MOVE TO 2*I+1
  103.        ORA #1
  104.        BCC STORE
  105.        INC NXTFLG
  106.        INC KB+1
  107. STORE  TAY
  108.        PLA
  109.        STA (KB),Y
  110.        LDA #0
  111.        DEY
  112.        STA (KB),Y
  113.        LDA NXTFLG
  114.        BEQ OK
  115.        DEC NXTFLG
  116.        DEC KB+1
  117. OK     TXA
  118.        BNE PKLOOP
  119. DONE   RTS
  120. .END
  121.