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

KEYSORT.SRC

FILE INFORMATION

FILENAME(S): KEYSORT.SRC

FILE TYPE(S): SEQ

FILE SIZE: 2K

FIRST SEEN: 2025-10-20 00:37:13

APPEARS ON: 5 disk(s)

FILE HASH

2a365847112ce8ebf6463e9b594c869b1487bbc084409bdc3aa90b9236d413ab

FOUND ON DISKS (5 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
SONDERHEFT 4 KEYSORT.SRC SEQ C64er, Treasure Chest - Holger 7 2 DOWNLOAD FILE
SONDERHEFT 4 KEYSORT.SRC SEQ Treasure Chest - Klaus Der Suhler 7 2 DOWNLOAD FILE
SONDERHEFT 4 KEYSORT.SRC SEQ Treasure Chest - ralf 7 2 DOWNLOAD FILE
SONDERH 4 85 II KEYSORT.SRC SEQ DuncanTwain 30 3 DOWNLOAD FILE
SONDERH 4 85 II KEYSORT.SRC SEQ DuncanTwain 30 3 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 3D 20 27  |F 'CURRENT' >= '|
000004A0: 4E 45 58 54 27 20 54 48  45 4E 20 53 57 41 50 20  |NEXT' THEN SWAP |
000004B0: 4B 45 59 0D 3B 20 45 4C  45 4D 45 4E 54 53 2C 20  |KEY.; ELEMENTS, |
000004C0: 45 4C 53 45 20 43 4F 4E  54 49 4E 55 45 0D 3B 0D  |ELSE CONTINUE.;.|
000004D0: 4F 52 44 45 52 20 20 43  4D 50 20 43 52 52 4E 54  |ORDER  CMP CRRNT|
000004E0: 0D 20 20 20 20 20 20 20  50 4C 41 0D 20 20 20 20  |.       PLA.    |
000004F0: 20 20 20 53 42 43 20 43  52 52 4E 54 2B 31 0D 20  |   SBC CRRNT+1. |
00000500: 20 20 20 20 20 20 42 56  43 20 54 45 53 54 0D 20  |      BVC TEST. |
00000510: 20 20 20 20 20 20 45 4F  52 20 23 24 38 30 0D 54  |      EOR #$80.T|
00000520: 45 53 54 20 20 20 42 50  4C 20 4E 4F 53 57 41 50  |EST   BPL NOSWAP|
00000530: 0D 53 57 41 50 20 20 20  54 58 41 0D 20 20 20 20  |.SWAP   TXA.    |
00000540: 20 20 20 54 41 59 0D 20  20 20 20 20 20 20 53 54  |   TAY.       ST|
00000550: 58 20 54 4F 50 44 49 53  0D 20 20 20 20 20 20 20  |X TOPDIS.       |
00000560: 4C 44 41 20 28 4B 42 29  2C 59 0D 20 20 20 20 20  |LDA (KB),Y.     |
00000570: 20 20 50 48 41 0D 20 20  20 20 20 20 20 44 45 59  |  PHA.       DEY|
00000580: 0D 20 20 20 20 20 20 20  4C 44 41 20 28 4B 42 29  |.       LDA (KB)|
00000590: 2C 59 0D 20 20 20 20 20  20 20 49 4E 59 0D 20 20  |,Y.       INY.  |
000005A0: 20 20 20 20 20 53 54 41  20 28 4B 42 29 2C 59 0D  |     STA (KB),Y.|
000005B0: 20 20 20 20 20 20 20 50  4C 41 0D 20 20 20 20 20  |       PLA.     |
000005C0: 20 20 44 45 59 0D 20 20  20 20 20 20 20 53 54 41  |  DEY.       STA|
000005D0: 20 28 4B 42 29 2C 59 0D  20 20 20 20 20 20 20 49  | (KB),Y.       I|
000005E0: 4E 43 20 46 4C 41 47 0D  4E 4F 53 57 41 50 20 43  |NC FLAG.NOSWAP C|
000005F0: 50 58 20 54 4F 50 0D 20  20 20 20 20 20 20 42 4E  |PX TOP.       BN|
00000600: 45 20 4C 4F 4F 50 32 0D  20 20 20 20 20 20 20 4C  |E LOOP2.       L|
00000610: 44 41 20 46 4C 41 47 0D  20 20 20 20 20 20 20 42  |DA FLAG.       B|
00000620: 4E 45 20 4C 4F 4F 50 31  0D 3B 0D 3B 20 55 4E 50  |NE LOOP1.;.; UNP|
00000630: 41 43 4B 20 54 48 45 20  42 59 54 45 20 45 4C 45  |ACK THE BYTE ELE|
00000640: 4D 45 4E 54 53 20 4F 46  20 54 48 45 20 27 4B 45  |MENTS OF THE 'KE|
00000650: 59 27 20 41 52 52 41 59  0D 3B 20 49 4E 54 4F 20  |Y' ARRAY.; INTO |
00000660: 42 41 53 49 43 27 53 20  4E 4F 52 4D 41 4C 20 32  |BASIC'S NORMAL 2|
00000670: 2D 42 59 54 45 20 49 4E  54 45 47 45 52 20 46 4F  |-BYTE INTEGER FO|
00000680: 52 4D 41 54 0D 3B 0D 55  4E 50 41 43 4B 20 4C 44  |RMAT.;.UNPACK LD|
00000690: 58 20 4D 41 58 0D 20 20  20 20 20 20 20 49 4E 58  |X MAX.       INX|
000006A0: 0D 50 4B 4C 4F 4F 50 20  44 45 58 0D 20 20 20 20  |.PKLOOP DEX.    |
000006B0: 20 20 20 54 58 41 0D 20  20 20 20 20 20 20 54 41  |   TXA.       TA|
000006C0: 59 0D 20 20 20 20 20 20  20 4C 44 41 20 28 4B 42  |Y.       LDA (KB|
000006D0: 29 2C 59 0D 20 20 20 20  20 20 20 50 48 41 0D 20  |),Y.       PHA. |
000006E0: 20 20 20 20 20 20 54 58  41 0D 20 20 20 20 20 20  |      TXA.      |
000006F0: 20 41 53 4C 20 41 20 20  20 20 20 3B 20 4D 4F 56  | ASL A     ; MOV|
00000700: 45 20 54 4F 20 32 2A 49  2B 31 0D 20 20 20 20 20  |E TO 2*I+1.     |
00000710: 20 20 4F 52 41 20 23 31  0D 20 20 20 20 20 20 20  |  ORA #1.       |
00000720: 42 43 43 20 53 54 4F 52  45 0D 20 20 20 20 20 20  |BCC STORE.      |
00000730: 20 49 4E 43 20 4E 58 54  46 4C 47 0D 20 20 20 20  | INC NXTFLG.    |
00000740: 20 20 20 49 4E 43 20 4B  42 2B 31 0D 53 54 4F 52  |   INC KB+1.STOR|
00000750: 45 20 20 54 41 59 0D 20  20 20 20 20 20 20 50 4C  |E  TAY.       PL|
00000760: 41 0D 20 20 20 20 20 20  20 53 54 41 20 28 4B 42  |A.       STA (KB|
00000770: 29 2C 59 0D 20 20 20 20  20 20 20 4C 44 41 20 23  |),Y.       LDA #|
00000780: 30 0D 20 20 20 20 20 20  20 44 45 59 0D 20 20 20  |0.       DEY.   |
00000790: 20 20 20 20 53 54 41 20  28 4B 42 29 2C 59 0D 20  |    STA (KB),Y. |
000007A0: 20 20 20 20 20 20 4C 44  41 20 4E 58 54 46 4C 47  |      LDA NXTFLG|
000007B0: 0D 20 20 20 20 20 20 20  42 45 51 20 4F 4B 0D 20  |.       BEQ OK. |
000007C0: 20 20 20 20 20 20 44 45  43 20 4E 58 54 46 4C 47  |      DEC NXTFLG|
000007D0: 0D 20 20 20 20 20 20 20  44 45 43 20 4B 42 2B 31  |.       DEC KB+1|
000007E0: 0D 4F 4B 20 20 20 20 20  54 58 41 0D 20 20 20 20  |.OK     TXA.    |
000007F0: 20 20 20 42 4E 45 20 50  4B 4C 4F 4F 50 0D 44 4F  |   BNE PKLOOP.DO|
00000800: 4E 45 20 20 20 52 54 53  0D 2E 45 4E 44 0D        |NE   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 
KEY.; ELEMENTS, ELSE CONTINUE.;.ORDER  C
MP CRRNT.       PLA.       SBC CRRNT+1. 
      BVC TEST.       EOR #$80.TEST   BP
L NOSWAP.SWAP   TXA.       TAY.       ST
X TOPDIS.       LDA (KB),Y.       PHA.  
     DEY.       LDA (KB),Y.       INY.  
     STA (KB),Y.       PLA.       DEY.  
     STA (KB),Y.       INC FLAG.NOSWAP C
PX TOP.       BNE LOOP2.       LDA FLAG.
       BNE LOOP1.;.; UNPACK THE BYTE ELE
MENTS OF THE 'KEY' ARRAY.; INTO BASIC'S 
NORMAL 2-BYTE INTEGER FORMAT.;.UNPACK LD
X 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.       LD
A NXTFLG.       BEQ OK.       DEC NXTFLG
.       DEC KB+1.OK     TXA.       BNE P
KLOOP.DONE   RTS..END.
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL