1000 *=$600 1010 ; 1020 SAVMSC = $58 1030 FR0 = $D4 1040 FRE = $DA 1050 FR2 = $E0 1060 FR1 = $E6 1070 CIX = $F2 1080 INBUFF = $F3 1090 ; 1100 ; X=USR(1536,ADR(A$),N,L) 1110 ; 1120 ; A$ - ENTRIES TO BE SORTED 1130 ; N - NUMBER OF ENTRIES 1140 ; L - LENGTH OF ENTRIES 1150 ; X - ADDRESS OF POINTER TABLE 1160 ; 1170 PLA 1180 PLA 1190 STA INBUFF+1 1200 PLA 1210 STA INBUFF 1220 PLA 1230 PLA 1240 STA CIX 1250 PLA 1260 PLA 1270 STA FR0+4 1280 STA FR0+3 1290 DEC FR0+3 1300 LDX SAVMSC+1 1310 DEX 1320 STX FR0+1 1330 DEX 1340 STX FR1+1 1350 DEX 1360 STX FR2+1 1370 LDY #0 1380 STY FR0 1390 STY FR1 1400 STY FR2 1410 STY FR0+2 1420 PASS0 TYA 1430 STA (FR0),Y 1440 INY 1450 BNE PASS0 1460 ; 1470 PASS1 CLC 1480 PASS2 ROR FR0+2 1490 LDY #0 1500 TYA 1510 SET1 PHA 1520 BIT FR0+2 1530 BPL NADD 1540 ; 1550 CLC 1560 ADC (FR2),Y 1570 NADD TAX 1580 PLA 1590 STA (FR2),Y 1600 TXA 1610 INY 1620 BNE SET1 1630 ; 1640 LDX #0 1650 ORDR TXA 1660 TAY 1670 LDA (FR0),Y 1680 PHA 1690 STA FR0+5 1700 LDA #0 1710 STA FRE+1 1720 LDY #$07 1730 SHFT ASL A 1740 ROL FRE+1 1750 ASL FR0+5 1760 BCC NEXB 1770 ; 1780 CLC 1790 ADC FR0+4 1800 BCC NEXB 1810 ; 1820 INC FRE+1 1830 NEXB DEY 1840 BPL SHFT 1850 ; 1860 CLC 1870 ADC INBUFF 1880 STA FRE 1890 LDA FRE+1 1900 ADC INBUFF+1 1910 STA FRE+1 1920 LDY FR0+3 1930 LDA (FRE),Y 1940 TAY 1950 LDA (FR2),Y 1960 PHA 1970 CLC 1980 ADC #1 1990 STA (FR2),Y 2000 PLA 2010 TAY 2020 PLA 2030 STA (FR1),Y 2040 INX 2050 CPX CIX 2060 BCC ORDR 2070 ; 2080 BIT FR0+2 2090 BPL PASS2 2100 ; 2110 LDA FR0+1 2120 LDX FR1+1 2130 STX FR0+1 2140 STA FR1+1 2150 DEC FR0+3 2160 BPL PASS1 2170 RTS 2180 ; 2190 .END
Back to previous page