_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

KEYSORT.SRC

FILE INFORMATION

FILENAME(S): KEYSORT.SRC

FILE TYPE(S): SEQ

FILE SIZE: 2K

FIRST SEEN: 2025-11-30 21:21:35

APPEARS ON: 1 disk(s)

FILE HASH

237e57f0070e23b3e5535fb526c5bafb53089ba490dfbcf79601e923212eef82

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
ARNOLD KEYSORT.SRC SEQ DuncanTwain 12 7 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 3B 20 4B 45 59 53 4F 52  54 20 2D 20 52 45 4C 4F  |; KEYSORT - RELO|
00000010: 43 41 54 41 42 4C 45 20  42 55 42 42 4C 45 20 53  |CATABLE BUBBLE S|
00000020: 4F 52 54 20 55 53 49 4E  47 20 4B 45 59 20 41 52  |ORT USING KEY AR|
00000030: 52 41 59 0D 3B 20 50 4F  49 4E 54 49 4E 47 20 54  |RAY.; POINTING T|
00000040: 4F 20 49 4E 54 45 47 45  52 20 41 52 52 41 59 0D  |O INTEGER ARRAY.|
00000050: 3B 0D 3B 20 20 52 49 43  48 41 52 44 20 4C 2E 20  |;.;  RICHARD L. |
00000060: 52 59 4C 41 4E 44 45 52  20 20 20 20 31 2F 31 32  |RYLANDER    1/12|
00000070: 2F 38 35 0D 3B 0D 4F 52  49 47 49 4E 3D 24 43 46  |/85.;.ORIGIN=$CF|
00000080: 35 39 20 20 3B 20 35 33  30 38 31 2E 20 28 46 4F  |59  ; 53081. (FO|
00000090: 4C 4C 4F 57 49 4E 47 20  44 4F 53 20 35 2E 31 29  |LLOWING DOS 5.1)|
000000A0: 0D 3B 0D 4B 42 20 20 20  20 20 3D 20 24 46 42 20  |.;.KB     = $FB |
000000B0: 20 3B 20 32 35 31 2E 20  50 4F 49 4E 54 45 52 20  | ; 251. POINTER |
000000C0: 54 4F 20 4B 45 59 20 41  52 52 41 59 0D 5A 42 20  |TO KEY ARRAY.ZB |
000000D0: 20 20 20 20 3D 20 24 46  44 20 20 3B 20 32 35 33  |    = $FD  ; 253|
000000E0: 2E 20 50 4F 49 4E 54 45  52 20 54 4F 20 44 41 54  |. POINTER TO DAT|
000000F0: 41 20 41 52 52 41 59 0D  4D 41 58 20 20 20 20 3D  |A ARRAY.MAX    =|
00000100: 20 24 38 43 20 20 3B 20  31 34 30 2E 20 50 4F 4B  | $8C  ; 140. POK|
00000110: 45 20 57 49 54 48 20 4D  41 58 20 41 52 52 41 59  |E WITH MAX ARRAY|
00000120: 20 49 4E 44 45 58 0D 54  4F 50 20 20 20 20 3D 20  | INDEX.TOP    = |
00000130: 24 41 43 0D 54 4F 50 44  49 53 20 3D 20 24 41 44  |$AC.TOPDIS = $AD|
00000140: 0D 46 4C 41 47 20 20 20  3D 20 24 41 45 0D 4E 58  |.FLAG   = $AE.NX|
00000150: 54 46 4C 47 20 3D 20 24  36 31 0D 43 52 52 4E 54  |TFLG = $61.CRRNT|
00000160: 20 20 3D 20 24 36 32 0D  52 45 50 45 41 54 20 3D  |  = $62.REPEAT =|
00000170: 20 24 36 34 0D 3B 0D 20  20 20 20 20 20 2A 3D 4F  | $64.;.      *=O|
00000180: 52 49 47 49 4E 0D 3B 0D  49 4E 49 54 20 20 20 4C  |RIGIN.;.INIT   L|
00000190: 44 59 20 23 24 46 46 20  20 20 20 20 3B 20 49 4E  |DY #$FF     ; IN|
000001A0: 49 54 49 41 4C 49 5A 45  20 4B 45 59 20 41 52 52  |ITIALIZE KEY ARR|
000001B0: 41 59 0D 49 4E 4C 4F 4F  50 20 49 4E 59 0D 20 20  |AY.INLOOP INY.  |
000001C0: 20 20 20 20 20 54 59 41  0D 20 20 20 20 20 20 20  |     TYA.       |
000001D0: 53 54 41 20 28 4B 42 29  2C 59 0D 20 20 20 20 20  |STA (KB),Y.     |
000001E0: 20 20 43 4D 50 20 4D 41  58 0D 20 20 20 20 20 20  |  CMP MAX.      |
000001F0: 20 42 4E 45 20 49 4E 4C  4F 4F 50 0D 3B 0D 53 4F  | BNE INLOOP.;.SO|
00000200: 52 54 20 20 20 53 54 41  20 54 4F 50 44 49 53 20  |RT   STA TOPDIS |
00000210: 20 20 3B 20 27 41 27 20  48 4F 4C 44 53 20 27 4D  |  ; 'A' HOLDS 'M|
00000220: 41 58 27 0D 4C 4F 4F 50  31 20 20 4C 44 41 20 54  |AX'.LOOP1  LDA T|
00000230: 4F 50 44 49 53 0D 20 20  20 20 20 20 20 53 54 41  |OPDIS.       STA|
00000240: 20 54 4F 50 0D 20 20 20  20 20 20 20 4C 44 58 20  | TOP.       LDX |
00000250: 23 30 0D 20 20 20 20 20  20 20 53 54 58 20 4E 58  |#0.       STX NX|
00000260: 54 46 4C 47 0D 20 20 20  20 20 20 20 53 54 58 20  |TFLG.       STX |
00000270: 46 4C 41 47 0D 4C 4F 4F  50 32 20 20 53 54 58 20  |FLAG.LOOP2  STX |
00000280: 52 45 50 45 41 54 0D 3B  0D 3B 20 47 45 54 20 42  |REPEAT.;.; GET B|
00000290: 4F 54 48 20 42 59 54 45  53 20 4F 46 20 49 4E 54  |OTH BYTES OF INT|
000002A0: 45 47 45 52 20 50 4F 49  4E 54 45 44 20 54 4F 20  |EGER POINTED TO |
000002B0: 42 59 0D 3B 20 27 4B 45  59 27 20 45 4C 45 4D 45  |BY.; 'KEY' ELEME|
000002C0: 4E 54 2E 20 20 52 45 54  55 52 4E 20 57 49 54 48  |NT.  RETURN WITH|
000002D0: 20 4D 53 42 20 4F 4E 20  53 54 41 43 4B 0D 3B 20  | MSB ON STACK.; |
000002E0: 41 4E 44 20 4C 53 42 20  49 4E 20 54 48 45 20 41  |AND LSB IN THE A|
000002F0: 43 43 55 4D 55 4C 41 54  4F 52 0D 3B 0D 47 45 54  |CCUMULATOR.;.GET|
00000300: 49 4E 54 20 54 58 41 0D  20 20 20 20 20 20 20 54  |INT TXA.       T|
00000310: 41 59 0D 20 20 20 20 20  20 20 4C 44 41 20 28 4B  |AY.       LDA (K|
00000320: 42 29 2C 59 0D 20 20 20  20 20 20 20 41 53 4C 20  |B),Y.       ASL |
00000330: 41 0D 20 20 20 20 20 20  20 42 43 43 20 4C 4F 41  |A.       BCC LOA|
00000340: 44 0D 20 20 20 20 20 20  20 44 45 43 20 4E 58 54  |D.       DEC NXT|
00000350: 46 4C 47 0D 20 20 20 20  20 20 20 49 4E 43 20 5A  |FLG.       INC Z|
00000360: 42 2B 31 0D 4C 4F 41 44  20 20 20 54 41 59 0D 20  |B+1.LOAD   TAY. |
00000370: 20 20 20 20 20 20 4C 44  41 20 28 5A 42 29 2C 59  |      LDA (ZB),Y|
00000380: 0D 20 20 20 20 20 20 20  50 48 41 0D 20 20 20 20  |.       PHA.    |
00000390: 20 20 20 49 4E 59 0D 20  20 20 20 20 20 20 4C 44  |   INY.       LD|
000003A0: 41 20 28 5A 42 29 2C 59  0D 20 20 20 20 20 20 20  |A (ZB),Y.       |
000003B0: 42 49 54 20 4E 58 54 46  4C 47 0D 20 20 20 20 20  |BIT NXTFLG.     |
000003C0: 20 20 42 50 4C 20 4E 4F  44 45 43 0D 20 20 20 20  |  BPL NODEC.    |
000003D0: 20 20 20 49 4E 43 20 4E  58 54 46 4C 47 0D 20 20  |   INC NXTFLG.  |
000003E0: 20 20 20 20 20 44 45 43  20 5A 42 2B 31 0D 4E 4F  |     DEC ZB+1.NO|
000003F0: 44 45 43 20 20 43 50 58  20 52 45 50 45 41 54 0D  |DEC  CPX REPEAT.|
00000400: 20 20 20 20 20 20 20 42  4E 45 20 4F 52 44 45 52  |       BNE ORDER|
00000410: 0D 20 20 20 20 20 20 20  53 54 41 20 43 52 52 4E  |.       STA CRRN|
00000420: 54 0D 20 20 20 20 20 20  20 50 4C 41 0D 20 20 20  |T.       PLA.   |
00000430: 20 20 20 20 53 54 41 20  43 52 52 4E 54 2B 31 0D  |    STA CRRNT+1.|
00000440: 20 20 20 20 20 20 20 49  4E 58 0D 20 20 20 20 20  |       INX.     |
00000450: 20 20 42 4E 45 20 47 45  54 49 4E 54 0D 3B 0D 3B  |  BNE GETINT.;.;|
00000460: 20 43 4F 4D 50 41 52 45  20 49 4E 54 45 47 45 52  | COMPARE INTEGER|
00000470: 53 20 4F 42 54 41 49 4E  45 44 20 54 48 52 4F 55  |S OBTAINED THROU|
00000480: 47 48 20 4B 45 59 20 41  52 52 41 59 0D 3B 20 49  |GH KEY ARRAY.; I|
00000490: 46 20 27 43 55 52 52 45  4E 54 27 20 3E 20 27 4E  |F 'CURRENT' > 'N|
000004A0: 45 58 54 27 20 54 48 45  4E 20 53 57 41 50 20 4B  |EXT' THEN SWAP K|
000004B0: 45 59 0D 3B 20 45 4C 45  4D 45 4E 54 53 2C 20 45  |EY.; ELEMENTS, E|
000004C0: 4C 53 45 20 43 4F 4E 54  49 4E 55 45 0D 3B 0D 4F  |LSE CONTINUE.;.O|
000004D0: 52 44 45 52 20 20 43 4D  50 20 43 52 52 4E 54 0D  |RDER  CMP CRRNT.|
000004E0: 20 20 20 20 20 20 20 50  4C 41 0D 20 20 20 20 20  |       PLA.     |
000004F0: 20 20 53 42 43 20 43 52  52 4E 54 2B 31 0D 20 20  |  SBC CRRNT+1.  |
00000500: 20 20 20 20 20 42 56 43  20 54 45 53 54 0D 20 20  |     BVC TEST.  |
00000510: 20 20 20 20 20 45 4F 52  20 23 24 38 30 0D 54 45  |     EOR #$80.TE|
00000520: 53 54 20 20 20 42 50 4C  20 4E 4F 53 57 41 50 0D  |ST   BPL NOSWAP.|
00000530: 53 57 41 50 20 20 20 54  58 41 0D 20 20 20 20 20  |SWAP   TXA.     |
00000540: 20 20 54 41 59 0D 20 20  20 20 20 20 20 53 54 58  |  TAY.       STX|
00000550: 20 54 4F 50 44 49 53 0D  20 20 20 20 20 20 20 4C  | TOPDIS.       L|
00000560: 44 41 20 28 4B 42 29 2C  59 0D 20 20 20 20 20 20  |DA (KB),Y.      |
00000570: 20 50 48 41 0D 20 20 20  20 20 20 20 44 45 59 0D  | PHA.       DEY.|
00000580: 20 20 20 20 20 20 20 4C  44 41 20 28 4B 42 29 2C  |       LDA (KB),|
00000590: 59 0D 20 20 20 20 20 20  20 49 4E 59 0D 20 20 20  |Y.       INY.   |
000005A0: 20 20 20 20 53 54 41 20  28 4B 42 29 2C 59 0D 20  |    STA (KB),Y. |
000005B0: 20 20 20 20 20 20 50 4C  41 0D 20 20 20 20 20 20  |      PLA.      |
000005C0: 20 44 45 59 0D 20 20 20  20 20 20 20 53 54 41 20  | DEY.       STA |
000005D0: 28 4B 42 29 2C 59 0D 20  20 20 20 20 20 20 49 4E  |(KB),Y.       IN|
000005E0: 43 20 46 4C 41 47 0D 4E  4F 53 57 41 50 20 43 50  |C FLAG.NOSWAP CP|
000005F0: 58 20 54 4F 50 0D 20 20  20 20 20 20 20 42 4E 45  |X TOP.       BNE|
00000600: 20 4C 4F 4F 50 32 0D 20  20 20 20 20 20 20 4C 44  | LOOP2.       LD|
00000610: 41 20 46 4C 41 47 0D 20  20 20 20 20 20 20 42 4E  |A FLAG.       BN|
00000620: 45 20 4C 4F 4F 50 31 0D  3B 0D 3B 20 55 4E 50 41  |E LOOP1.;.; UNPA|
00000630: 43 4B 20 54 48 45 20 42  59 54 45 20 45 4C 45 4D  |CK THE BYTE ELEM|
00000640: 45 4E 54 53 20 4F 46 20  54 48 45 20 27 4B 45 59  |ENTS OF THE 'KEY|
00000650: 27 20 41 52 52 41 59 0D  3B 20 49 4E 54 4F 20 42  |' ARRAY.; INTO B|
00000660: 41 53 49 43 27 53 20 4E  4F 52 4D 41 4C 20 32 2D  |ASIC'S NORMAL 2-|
00000670: 42 59 54 45 20 49 4E 54  45 47 45 52 20 46 4F 52  |BYTE INTEGER FOR|
00000680: 4D 41 54 0D 3B 0D 55 4E  50 41 43 4B 20 4C 44 58  |MAT.;.UNPACK LDX|
00000690: 20 4D 41 58 0D 20 20 20  20 20 20 20 49 4E 58 0D  | MAX.       INX.|
000006A0: 50 4B 4C 4F 4F 50 20 44  45 58 0D 20 20 20 20 20  |PKLOOP DEX.     |
000006B0: 20 20 54 58 41 0D 20 20  20 20 20 20 20 54 41 59  |  TXA.       TAY|
000006C0: 0D 20 20 20 20 20 20 20  4C 44 41 20 28 4B 42 29  |.       LDA (KB)|
000006D0: 2C 59 0D 20 20 20 20 20  20 20 50 48 41 0D 20 20  |,Y.       PHA.  |
000006E0: 20 20 20 20 20 54 58 41  0D 20 20 20 20 20 20 20  |     TXA.       |
000006F0: 41 53 4C 20 41 20 20 20  20 20 3B 20 4D 4F 56 45  |ASL A     ; MOVE|
00000700: 20 54 4F 20 32 2A 49 2B  31 0D 20 20 20 20 20 20  | TO 2*I+1.      |
00000710: 20 4F 52 41 20 23 31 0D  20 20 20 20 20 20 20 42  | ORA #1.       B|
00000720: 43 43 20 53 54 4F 52 45  0D 20 20 20 20 20 20 20  |CC STORE.       |
00000730: 49 4E 43 20 4E 58 54 46  4C 47 0D 20 20 20 20 20  |INC NXTFLG.     |
00000740: 20 20 49 4E 43 20 4B 42  2B 31 0D 53 54 4F 52 45  |  INC KB+1.STORE|
00000750: 20 20 54 41 59 0D 20 20  20 20 20 20 20 50 4C 41  |  TAY.       PLA|
00000760: 0D 20 20 20 20 20 20 20  53 54 41 20 28 4B 42 29  |.       STA (KB)|
00000770: 2C 59 0D 20 20 20 20 20  20 20 4C 44 41 20 23 30  |,Y.       LDA #0|
00000780: 0D 20 20 20 20 20 20 20  44 45 59 0D 20 20 20 20  |.       DEY.    |
00000790: 20 20 20 53 54 41 20 28  4B 42 29 2C 59 0D 20 20  |   STA (KB),Y.  |
000007A0: 20 20 20 20 20 4C 44 41  20 4E 58 54 46 4C 47 0D  |     LDA NXTFLG.|
000007B0: 20 20 20 20 20 20 20 42  45 51 20 4F 4B 0D 20 20  |       BEQ OK.  |
000007C0: 20 20 20 20 20 44 45 43  20 4E 58 54 46 4C 47 0D  |     DEC NXTFLG.|
000007D0: 20 20 20 20 20 20 20 44  45 43 20 4B 42 2B 31 0D  |       DEC KB+1.|
000007E0: 4F 4B 20 20 20 20 20 54  58 41 0D 20 20 20 20 20  |OK     TXA.     |
000007F0: 20 20 42 4E 45 20 50 4B  4C 4F 4F 50 0D 44 4F 4E  |  BNE PKLOOP.DON|
00000800: 45 20 20 20 52 54 53 0D  2E 45 4E 44 0D           |E   RTS..END.   |
; KEYSORT - RELOCATABLE BUBBLE SORT USIN
G KEY ARRAY.; POINTING TO INTEGER ARRAY.
;.;  RICHARD L. RYLANDER    1/12/85.;.OR
IGIN=$CF59  ; 53081. (FOLLOWING DOS 5.1)
.;.KB     = $FB  ; 251. POINTER TO KEY A
RRAY.ZB     = $FD  ; 253. POINTER TO DAT
A ARRAY.MAX    = $8C  ; 140. POKE WITH M
AX ARRAY INDEX.TOP    = $AC.TOPDIS = $AD
.FLAG   = $AE.NXTFLG = $61.CRRNT  = $62.
REPEAT = $64.;.      *=ORIGIN.;.INIT   L
DY #$FF     ; INITIALIZE KEY ARRAY.INLOO
P INY.       TYA.       STA (KB),Y.     
  CMP MAX.       BNE INLOOP.;.SORT   STA
 TOPDIS   ; 'A' HOLDS 'MAX'.LOOP1  LDA T
OPDIS.       STA TOP.       LDX #0.     
  STX NXTFLG.       STX FLAG.LOOP2  STX 
REPEAT.;.; GET BOTH BYTES OF INTEGER POI
NTED TO BY.; 'KEY' ELEMENT.  RETURN WITH
 MSB ON STACK.; AND LSB IN THE ACCUMULAT
OR.;.GETINT TXA.       TAY.       LDA (K
B),Y.       ASL A.       BCC LOAD.      
 DEC NXTFLG.       INC ZB+1.LOAD   TAY. 
      LDA (ZB),Y.       PHA.       INY. 
      LDA (ZB),Y.       BIT NXTFLG.     
  BPL NODEC.       INC NXTFLG.       DEC
 ZB+1.NODEC  CPX REPEAT.       BNE ORDER
.       STA CRRNT.       PLA.       STA 
CRRNT+1.       INX.       BNE GETINT.;.;
 COMPARE INTEGERS OBTAINED THROUGH KEY A
RRAY.; IF 'CURRENT' > 'NEXT' THEN SWAP K
EY.; ELEMENTS, ELSE CONTINUE.;.ORDER  CM
P CRRNT.       PLA.       SBC CRRNT+1.  
     BVC TEST.       EOR #$80.TEST   BPL
 NOSWAP.SWAP   TXA.       TAY.       STX
 TOPDIS.       LDA (KB),Y.       PHA.   
    DEY.       LDA (KB),Y.       INY.   
    STA (KB),Y.       PLA.       DEY.   
    STA (KB),Y.       INC FLAG.NOSWAP CP
X TOP.       BNE LOOP2.       LDA FLAG. 
      BNE LOOP1.;.; UNPACK THE BYTE ELEM
ENTS OF THE 'KEY' ARRAY.; INTO BASIC'S N
ORMAL 2-BYTE INTEGER FORMAT.;.UNPACK LDX
 MAX.       INX.PKLOOP DEX.       TXA.  
     TAY.       LDA (KB),Y.       PHA.  
     TXA.       ASL A     ; MOVE TO 2*I+
1.       ORA #1.       BCC STORE.       
INC NXTFLG.       INC KB+1.STORE  TAY.  
     PLA.       STA (KB),Y.       LDA #0
.       DEY.       STA (KB),Y.       LDA
 NXTFLG.       BEQ OK.       DEC NXTFLG.
       DEC KB+1.OK     TXA.       BNE PK
LOOP.DONE   RTS..END.
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL