***************************************************** * LOS Sort Utility: Module 025 (5 sectors) * (c) J A Templeman 1987 ***************************************************** * * JSBR IZ 1670 FETCH & LINK Sort Overlay * P1=002002 * P2=0/0225 -> Module Number * P3=mask B17:don't report, B7-B1:Sort Work File Identifier * P4= -> Follow-on Program Name * * Instructions bracketed thus: (xxx) follow a Skip instruction. * They are not executed when the Skip is taken. * ***************************************************** * Page 00 Column 16- *Step Octal Instruction Comment ***************************************************** 1600- 000000 NOOP Entry Point 1601- 037627 JSBR IZ 1627 Resolve Block 1602- 201700 P1=1700- 1603- 037627 JSBR IZ 1627 Resolve Block 1604- 202000 P1=2000- 1605- 216155 LDA IZ 0155 =P3 of Fetch 1606- 063752 ANDA Z 1752 Bottom Byte (leaves Sort Work File Id) 1607- 072323 IORA Z 0323 000400 1610- 251612 STA 1612 1611- 037700 JSBR IZ 1700 Extract FCB Word 1 1612- xxxxxx P1=? 1613- 063752 ANDA Z 1752 Bottom Byte (leaves Disc No) 1614- 072341 IORA Z 0341 002000 (4 sectors) 1615- 255701 STA I 1701 2011- 1616- 255702 STA I 1702 2015- 1617- 002004 INCB -> FCB Word 2 1620- 216001 LDA IZ B -> Shared Buffer Control Block 1621- 255703 STA I 1703 2007- 1622- 122205 ADB Z 0205 -> FCB Word 7 1623- 216001 LDA IZ B =Base Sector No 1624- 255700 STA I 1700 2020- 1625- 002004 INCB -> FCB Word 8 1626- 216001 LDA IZ B -> File Status Block 1627- 216000 LDA IZ A =Number of records in Sort Work File 1630- 251707 STA 1707 1631- 216067 LDA IZ 0067 3400- =Reporting Task Number 1632- 226155 LDB IZ 0155 =P3 of Fetch 1633- 006200 BPOS 1634- 007002 (CLA) (don't report) 1635- 255705 STA I 1705 2040- Save Reporting Task Number 1636- 042155 INSZ Z 0155 1637- 226155 LDB IZ 0155 =P4 of Fetch -> Follow-on Program Name 1640- 261644 STB 1644 1641- 007100 A=0 1642- 031732 (JSBR) 1732 Flash "Sorting" 1643- 037741 JSBR IZ 1741 Move & Pad Follow-on Program Name 1644- xxxxxx P1=? 1645- 202036 P2=2036- 1646- 000004 P3=4 characters 1647- 007002 CLA 1650- 037412 JSBR IZ 1412 Skip if I/O Station 1651- 255706 (STA) I 1706 3744- (Force reload Printer program) 1652- 007003 CLA/COMPA =-1 (Base Slot Number) 1653- 221707 LDB 1707 =Number of Records 1654- 025704 JUMP I 1704 2100- into Sort. 1655- 1656- 1657- 1660- 1661- 1662- 1663- 1664- 1665- 1666- 1667- 1670- 1671- 1672- 1673- 1674- 1675- 1676- 1677- ***************************************************** * Page 00 Column 17- *Step Octal Instruction Comment ***************************************************** ***************************************************** * OFFSET ADDRESS BLOCK: *Step Octal Value Comment ***************************************************** 1700- 202020 2020- -> save Base Sector Number 1701- 202011 2011- 1702- 202015 2015- 1703- 202007 2007- -> -> Shared Buffer Control Block 1704- 202100 2100- -> Sort 1705- 202040 2040- -> save Reporting Task Number 1706- 203744 3744- -> Pgm name last loaded into Printer partition 1707- 000000 Workspace ***************************************************** * LITERAL: "TASK n SORTING m ITEMS" *Step Octal ASCII ***************************************************** 1710- CR BEL 1711- SO T 1712- A S 1713- K SP 1714- # # 1715- # # 1716- # # 1717- SP S 1720- O R 1721- T I 1722- N G 1723- SP # 1724- # # 1725- # # 1726- # I 1727- T E 1730- M S 1731- SO NUL ***************************************************** * PROCEDURE: FLASH "Sorting" message to calling station *Step Octal Instruction Comment ***************************************************** 1732- xxxxxx Return Address 1733- 212040 LDA Z 0040 =Task Number 1734- 037612 JSBR IZ 1612 Octal -> ASCII 1735- 201714 P1=1714- 1736- 037765 JSBR IZ 1765 Record Count -> ASCII 1737- 000106 P1=0,0,1,6 1740- 201707 P2=1707- 1741- 301723 P3=1723½- 1742- 215705 LDA I 1705 2040- =Reporting Task Number 1743- 037654 JSBR IZ 1654 FLASH Single Station "Sorting" 1744- 201710 P1=1710- 1745- 037625 JSBR IZ 1625 SUSPEND 1746- 025732 JUMP I 1732 Return. 1747- 1750- 1751- 1752- 1753- 1754- 1755- 1756- 1757- 1760- 1761- 1762- 1763- 1764- 1765- 1766- 1767- 1770- 1771- 1772- 1773- 1774- 1775- 1776- 1777- ***************************************************** * Page 01 Column 00- HARDWARE PAGE BOUNDARY *Step Octal Instruction Comment ***************************************************** ***************************************************** * OFFSET ADDRESS BLOCK: *Step Octal Value Comment ***************************************************** 2000- 200000 0000- -> LOW Partition Buffer 2001- 201000 1000- -> HIGH Partition Buffer 2002- 202031 2031- -> Update counter, High Buffer 2003- 202032 2032- -> Update counter, Low Buffer 2004- 202000 2000- -> Top of Buffer 2005- 202060 2060- -> Median Record workspace 2006- 000000 2007- 000000 -> Shared Buffer Control Block (FCB Word 2) ***************************************************** * PARAMETER BLOCK: Transfer LOW Partition Buffer to/from Disc *Step Octal Value Comment ***************************************************** 2010- 000000 2011- xxxxxx R/W flag, 4 sectors, Disc Number 2012- 200000 0000- -> Buffer 2013- xxxxxx Start Sector Number ***************************************************** * PARAMETER BLOCK: Transfer HIGH Partition Buffer to/from Disc *Step Octal Value Comment ***************************************************** 2014- 000000 2015- xxxxxx R/W flag, 4 sectors, Disc Number 2016- 201000 1000- -> Buffer 2017- xxxxxx Start Sector Number ***************************************************** * WORKSPACE: *Step Octal Comment ***************************************************** 2020- xxxxxx BASE SECTOR, SORT File 2021- xxxxxx TOP Slot Number 2022- xxxxxx BASE Slot Number 2023- xxxxxx HIGH RUNNER Slot Number 2024- xxxxxx LOW RUNNER Slot Number 2025- xxxxxx -> HIGH Record 2026- xxxxxx -> LOW Record 2027- 377777 HIGH BLOCK Number 2030- 377777 LOW BLOCK Number 2031- 000000 High Update Counter 2032- 000000 Low Update Counter 2033- xxxxxx -> High Update Counter 2034- xxxxxx -> Low Update Counter 2035- xxxxxx -> CURRENT Record (Bubble Sort) 2036- xxxxxx Follow-on Program Name (1st word) 2037- xxxxxx Follow-on Program Name (2nd word) 2040- xxxxxx Task Number to report to 2041- 2042- 2043- 2044- 2045- 2046- 2047- 2050- 2051- 2052- 2053- 2054- 2055- 2056- 2057- 2060- xxxxxx ) 2061- xxxxxx ) 2062- xxxxxx ) 2063- xxxxxx ) Buffer for 2064- xxxxxx ) MEDIAN Record (8 words) 2065- xxxxxx ) 2066- xxxxxx ) 2067- xxxxxx ) 2070- 2071- 2072- 2073- 2074- 2075- 2076- 2077- ***************************************************** * Page 01 Column 01- *Step Octal Instruction Comment ***************************************************** ** Next Lower Partition-- 2100- 002010 DECB 2101- 260021 STB 0021 Top Slot Number (N.B. 1st slot is Slot 0) ** Next UpperPartition-- 2102- 250022 STA 0022 Base Slot Number 2103- 003004 INCA 2104- 250024 STA 0024 Low Runner Slot Number 2105- 030400 JSBR 0400 SKIP if PARTITION SPLIT 2106- 020114 (JUMP) 0114 Partition has been sorted 2107- 210022 LDA 0022 Base Slot (old) 2110- 254026 STA I 0026 into Low record 2111- 044034 INSZ I 0034 Low updated 2112- 210024 LDA 0024 =Boundary Slot (next Base Slot) 2113- 020102 JUMP 0102 process Upper Partition 2114- 210022 LDA 0022 Base Slot Number 2115- 007200 APOS 2116- 020123 (JUMP) 0123 All partitions now sorted 2117- 030315 JSBR 0315 GET HIGH (Old Base Slot) 2120- 214025 LDA I 0025 =earlier Base Slot 2121- 220022 LDB 0022 Current Base Slot =next Top Slot+1 2122- 020100 JUMP 0100 ** SORT DONE-- 2123- 030152 JSBR 0152 Write LOW Buffer 2124- 030165 JSBR 0165 Write HIGH Buffer 2125- 007002 CLA 2126- 254007 STA I 0007 (Shared Buffer Control Block) 2127- 210040 LDA 0040 =Reporting Task Number 2130- 007500 AN0 2131- 020134 (JUMP) 0134 don't report 2132- 037654 JSBR IZ 1654 FLASH Single Station "Sort Done" 2133- 202371 P1=2371- 2134- 020146 JUMP 0146 2135- 2136- 2137- 2140- 2141- 2142- 2143- 2144- 2145- 2146- 037670 JSBR IZ 1670 FETCH & LINK 2147- 002006 P1=002006 Printer Program Library 2150- 202036 P2=2036- -> Program Name 2151- 023402 JUMP Z 1402 to Control Program (program not found). ***************************************************** * PROCEDURE: REWRITE LOW BUFFER (if updated) *Step Octal Instruction Comment ***************************************************** 2152- xxxxxx Return Address 2153- 210032 LDA 0032 Low Update Counter 2154- 007502 AN0/CLA 2155- 024152 (JUMP) I 0152 Return (no updates outstanding). 2156- 250032 STA 0032 Clear Low Update Counter 2157- 210011 LDA 0011 2160- 005006 CLSA/COMPSA 2161- 250011 STA 0011 (Write) 2162- 037615 JSBR IZ 1615 TRANSFER (WRITE Low Buffer) 2163- 202010 P1=2010- 2164- 024152 JUMP I 0152 Return. ***************************************************** * PROCEDURE: REWRITE HIGH BUFFER (if updated) *Step Octal Instruction Comment ***************************************************** 2165- xxxxxx Return Address 2166- 210031 LDA 0031 High Update Counter 2167- 007502 AN0/CLA 2170- 024165 (JUMP) I 0165 Return (no updates outstanding). 2171- 250031 STA 0031 Clear High Update Counter 2172- 210015 LDA 0015 2173- 005006 CLSA/COMPSA 2174- 250015 STA 0015 (Write) 2175- 037615 JSBR IZ 1615 TRANSFER (WRITE High Buffer) 2176- 202014 P1=2014- 2177- 024165 JUMP I 0165 Return. ***************************************************** * Page 01 Column 02- *Step Octal Instruction Comment ***************************************************** ***************************************************** * PROCEDURE: FETCH LOW BLOCK *Step Octal Instruction Comment ***************************************************** 2200- xxxxxx Return Address 2201- 250030 STA 0030 Low Block Number required 2202- 030152 JSBR 0152 Write Low Buffer 2203- 210030 LDA 0030 Low Block Number 2204- 001702 LSA2 *4 (sectors per block) 2205- 110020 ADA 0020 Base Sector, Sort Work File 2206- 250013 STA 0013 Start Sector, Transfer Low 2207- 210011 LDA 0011 2210- 005004 CLSA 2211- 250011 STA 0011 (Read) 2212- 037615 JSBR IZ 1615 TRANSFER (Read Low Buffer) 2213- 202010 P1=2010- 2214- 024200 JUMP I 0200 Return. ***************************************************** * PROCEDURE: GET LOW RECORD *Step Octal Instruction Comment ***************************************************** 2215- xxxxxx Return Address 2216- 210024 LDA 0024 Low Runner Slot Number 2217- 001506 RSA6 /64 (records per block) 2220- 230027 CMPA 0027 Block Number currently in HIGH Buffer 2221- 020236 (JUMP) 0236 record is already in HIGH Buffer 2222- 230030 CMPA 0030 Block Number currently in LOW Buffer 2223- 004020 (SKIP) record is already in LOW Buffer 2224- 030200 (JSBR) 0200 FETCH Low Block 2225- 210003 LDA 0003 2032- 2226- 250034 STA 0034 reset -> Low Update Counter 2227- 220000 LDB 0000 0000- -> Low Buffer 2230- 210024 LDA 0024 Low Runner Slot Number 2231- 062277 ANDA Z 0277 000077 2232- 001703 LSA3 *8 (record length) 2233- 112001 ADA Z B 2234- 250026 STA 0026 -> Low Record 2235- 024215 JUMP I 0215 Return. * Merge LOW Buffer into HIGH Buffer-- 2236- 210002 LDA 0002 2031- 2237- 250034 STA 0034 (Low updates will occur in High Buffer) 2240- 220001 LDB 0001 1000- -> High Buffer 2241- 020230 JUMP 0230 merge. ***************************************************** * PROCEDURE: INCREMENT LOW RECORD *Step Octal Instruction Comment ***************************************************** 2242- xxxxxx Return Address 2243- 220026 LDB 0026 -> Low Record 2244- 122210 ADB Z 0210 CF8 (Record Length) 2245- 240001 CMPB 0001 1000- 2246- 030252 (JSBR) 0252 End of Buffer - advance Low Block 2247- 260026 STB 0026 -> Low Record 2250- 040024 INSZ 0024 Low Runner Slot Number 2251- 024242 JUMP I 0242 Return. ***************************************************** * PROCEDURE: Advance Low Block *Step Octal Instruction Comment ***************************************************** 2252- xxxxxx Return Address 2253- 210030 LDA 0030 Low Block Number 2254- 003004 INCA 2255- 230027 CMPA 0027 High Block Number 2256- 020262 (JUMP) 0262 Buffers now have adjacent blocks 2257- 030200 JSBR 0200 FETCH next Low Block 2260- 220000 LDB 0000 0000- Start of Low Buffer 2261- 024252 JUMP I 0252 Return. ** Merge LOW Buffer into HIGH Buffer-- 2262- 210002 LDA 0002 2031- 2263- 250034 STA 0034 (Low updates will occur in High Buffer) 2264- 024252 JUMP I 0252 Return. ***************************************************** * PROCEDURE: Reduce High Block *Step Octal Instruction Comment ***************************************************** 2265- xxxxxx Return Address 2266- 210027 LDA 0027 High Block Number 2267- 003010 DECA 2270- 230030 CMPA 0030 Low Block Number 2271- 020275 (JUMP) 0275 Buffers now have adjacent blocks 2272- 030300 JSBR 0300 FETCH previous High Block 2273- 220004 LDB 0004 2000- -> Top of High Buffer 2274- 024265 JUMP I 0265 Return. ** Merge HIGH Buffer into LOW Buffer-- 2275- 210003 LDA 0003 2032- 2276- 250033 STA 0033 (High updates will occur in Low Buffer) 2277- 024265 JUMP I 0265 Return. ***************************************************** * Page 01 Column 03- *Step Octal Instruction Comment ***************************************************** ***************************************************** * PROCEDURE: FETCH HIGH BLOCK *Step Octal Instruction Comment ***************************************************** 2300- xxxxxx Return Address 2301- 250027 STA 0027 High Block Number required 2302- 030165 JSBR 0165 Write High Buffer 2303- 210027 LDA 0027 High Block Number 2304- 001702 LSA2 *4 (sectors per block) 2305- 110020 ADA 0020 Base Sector, Sort Work File 2306- 250017 STA 0017 Start Sector, Transfer High 2307- 210015 LDA 0015 2310- 005004 CLSA 2311- 250015 STA 0015 (Read) 2312- 037615 JSBR IZ 1615 TRANSFER (Read High Buffer) 2313- 202014 P1=2014- 2314- 024300 JUMP I 0300 Return. ***************************************************** * PROCEDURE: GET HIGH RECORD *Step Octal Instruction Comment ***************************************************** 2315- xxxxxx Return Address 2316- 250023 STA 0023 High Runner Slot Number 2317- 001506 RSA6 /64 (records per block) 2320- 230030 CMPA 0030 Block Number currently in Low Buffer 2321- 020335 (JUMP) 0335 Record is already in Low Buffer 2322- 230027 CMPA 0027 Block Number currently in High Buffer 2323- 004020 (SKIP) Record is already in High Buffer 2324- 030300 (JSBR) 0300 FETCH High Block 2325- 210002 LDA 0002 2031- 2326- 250033 STA 0033 reset -> High Update Counter 2327- 210023 LDA 0023 High Runner Slot Number 2330- 062277 ANDA Z 0277 000077 2331- 001703 LSA3 *8 (record length) 2332- 110001 ADA 0001 1000- -> High Buffer 2333- 250025 STA 0025 -> High Record 2334- 024315 JUMP I 0315 Return. ** Move LOW Buffer to HIGH Buffer-- 2335- 250027 STA 0027 High Block Number required 2336- 030165 JSBR 0165 Write High Buffer 2337- 037707 JSBR IZ 1707 MOVE Low Buffer -> High Buffer 2340- 200000 P1=0000- 2341- 201000 P2=1000- 2342- 001000 P3=512 words 2343- 210032 LDA 0032 Low Update Counter 2344- 250031 STA 0031 into High Update Counter 2345- 210002 LDA 0002 2031- 2346- 250033 STA 0033 reset -> High Update Counter 2347- 210013 LDA 0013 Start Sector, Low Transfer 2350- 250017 STA 0017 into Start Sector, High Transfer 2351- 007002 CLA 2352- 250032 STA 0032 Clear Low Update Counter 2353- 007003 CLA/COMPA 2354- 250030 STA 0030 Cancel Low Buffer contents 2355- 020327 JUMP 0327 merge. ***************************************************** * PROCEDURE: DECREMENT HIGH RECORD *Step Octal Instruction Comment ***************************************************** 2356- xxxxxx Return Address 2357- 220025 LDB 0025 -> High Record 2360- 240001 CMPB 0001 1000- 2361- 030265 (JSBR) 0265 Reduce High Block Number 2362- 142210 SFB Z 0210 CF8 (record length) 2363- 260025 STB 0025 -> High Record 2364- 050023 DESZ 0023 High Runner Slot Number 2365- 000000 (NOOP) 2366- 024356 JUMP I 0356 Return. 2367- 2370- ***************************************************** * LITERAL: "SORT DONE" *Step Octal ASCII ***************************************************** 2371- 006407 CR BEL 2372- 007123 SO S 2373- 067562 O R 2374- 072040 T SP 2375- 062157 D O 2376- 067145 N E 2377- 007400 SI NUL ***************************************************** * Page 01 Column 04- *Step Octal Instruction Comment ***************************************************** ***************************************************** * PROCEDURE: SKIP IF PARTITION SPLIT *Step Octal Instruction Comment ***************************************************** 2400- xxxxxx Return Address 2401- 037625 JSBR IZ 1625 SUSPEND 2402- 210021 LDA 0021 Top Slot Number 2403- 130024 SFA 0024 Low Runner Slot Number 2404- 132223 SFA Z 0223 CF19 2405- 007600 ANEG 2406- 020435 (JUMP) 0435 20 or more items, so split partition. 2407- 112222 ADA Z 0222 CF18 2410- 007200 APOS 2411- 024400 (JUMP) I 0400 0 or 1 item, so partition is sorted. ** Memory Resident Bubble Sort-- 2412- 210021 LDA 0021 Top Slot 2413- 030315 JSBR 0315 GET HIGH 2414- 030215 JSBR 0215 GET LOW 2415- 044033 INSZ I 0033 High Update Counter (assume updates will occur) 2416- 044034 INSZ I 0034 Low Update Counter (assume updates will occur) 2417- 210025 LDA 0025 -> HIGH ** Next Element-- 2420- 132210 SFA Z 0210 CF8 2421- 250035 STA 0035 -> Current (decrement Current) 2422- 030555 JSBR 0555 SWAP if CURRENT > HIGH 2423- 210035 LDA 0035 -> CURRENT 2424- 230026 CMPA 0026 -> LOW 2425- 004020 (SKIP) 2426- 020420 (JUMP) 0420 onto next element. ** Next Pass-- 2427- 210025 LDA 0025 -> HIGH 2430- 132210 SFA Z 0210 CF8 2431- 250025 STA 0025 -> HIGH 2432- 230026 CMPA 0026 -> LOW 2433- 024400 (JUMP) I 0400 Return - partition is sorted. 2434- 020420 JUMP 0420 onto next element. ** Split Partition-- 2435- 210021 LDA 0021 Top Slot 2436- 030315 JSBR 0315 GET HIGH 2437- 030215 JSBR 0215 GET LOW 2440- 030700 JSBR 0700 Select Median (& move to LOW) 2441- 020446 JUMP 0446 ** Next HIGH-- 2442- 030356 JSBR 0356 DECREMENT HIGH 2443- 210023 LDA 0023 High Runner Slot Number 2444- 230024 CMPA 0024 Low Runner Slot Number 2445- 020457 (JUMP) 0457 Split completed. 2446- 030600 JSBR 0600 Skip if HIGH < MEDIAN (& move HIGH to LOW) 2447- 020442 (JUMP) 0442 No swap. ** Next LOW-- 2450- 030242 JSBR 0242 INCREMENT LOW 2451- 210024 LDA 0024 Low Runner Slot Number 2452- 230023 CMPA 0023 High Runner Slot Number 2453- 020457 (JUMP) 0457 Split completed. 2454- 030615 JSBR 0615 Skip if LOW > MEDIAN (& move LOW to HIGH) 2455- 020450 (JUMP) 0450 No swap. 2456- 020442 JUMP 0442 ** Split completed-- 2457- 210005 LDA 0005 -> MEDIAN 2460- 220025 LDB 0025 -> HIGH 2461- 030500 JSBR 0500 Move Data (MEDIAN to HIGH) 2462- 044033 INSZ I 0033 High Update Counter 2463- 040400 INSZ 0400 (skips) 2464- 024400 JUMP I 0400 Return. 2465- 2466- 2467- 2470- 2471- 2472- 2473- 2474- 2475- 2476- 2477- ***************************************************** * Page 01 Column 05- *Step Octal Instruction Comment ***************************************************** ***************************************************** * PROCEDURE: MOVE DATA *Step Octal Instruction Comment ***************************************************** 2500- xxxxxx Return Address 2501- 252176 STA Z 0176 (transient workspace) 2502- 212207 LDA Z 0207 CF7 2503- 252177 STA Z 0177 Counter ** Next Word-- 2504- 042176 INSZ Z 0176 2505- 002004 INCB 2506- 216176 LDA IZ 0176 2507- 256001 STA IZ B 2510- 052177 DESZ Z 0177 2511- 020504 (JUMP) 0504 onto next word. 2512- 024500 JUMP I 0500 Return. ***************************************************** * PROCEDURE: SWAP DATA *Step Octal Instruction Comment ***************************************************** 2513- xxxxxx Return Address 2514- 252176 STA Z 0176 (transient workspace) 2515- 212207 LDA Z 0207 CF7 2516- 252177 STA Z 0177 Counter 2517- 262175 STB Z 0175 ** Next Word Pair-- 2520- 042175 INSZ Z 0175 2521- 042176 INSZ Z 0176 2522- 216176 LDA IZ 0176 2523- 226175 LDB IZ 0175 2524- 256175 STA IZ 0175 2525- 266176 STB IZ 0176 2526- 052177 DESZ Z 0177 2527- 020520 (JUMP) 0520 onto next word pair. 2530- 024513 JUMP I 0513 Return. ***************************************************** * PROCEDURE: COMPARE (& Skip if not equal) *Step Octal Instruction Comment ***************************************************** 2531- xxxxxx Return Address 2532- 252176 STA Z 0176 (transient workspace) 2533- 212207 LDA Z 0207 CF7 2534- 252177 STA Z 0177 Counter ** Next Word Pair-- 2535- 042176 INSZ Z 0176 2536- 002004 INCB 2537- 216176 LDA IZ 0176 =Word n 2540- 236001 CMPA IZ B =Test Word n 2541- 020552 (JUMP) 0552 2542- 040531 INSZ 0531 Not Equal (Skips) 2543- 106001 XORA IZ B 2544- 007600 ANEG B17's equal? 2545- 024531 (JUMP) I 0531 Yes, return (GT-Flag is OK). 2546- 216176 LDA IZ 0176 2457- 007204 APOS/CLGT (compare B17 to set GT-Flag) 2550- 001001 (SETGT) 2551- 024531 JUMP I 0531 Return. 2552- 052177 DESZ Z 0177 2553- 020535 (JUMP) 0535 onto next word pair. 2554- 024531 JUMP I 0531 Return (equal). ***************************************************** * PROCEDURE: SWAP if CURRENT > HIGH *Step Octal Instruction Comment ***************************************************** 2555- xxxxxx Return Address 2556- 210035 LDA 0035 -> CURRENT 2557- 220025 LDB 0025 -> HIGH 2560- 030531 JSBR 0531 COMPARE 2561- 024555 (JUMP) I 0555 Return (equal). 2562- 006410 SKGT 2563- 024555 (JUMP) I 0555 Return (less than) 2564- 210035 LDA 0035 -> CURRENT 2565- 220025 LDB 0025 -> HIGH 2566- 030513 JSBR 0513 SWAP 2567- 024555 JUMP I 0555 Return. 2570- 2571- 2572- 2573- 2574- 2575- 2576- 2577- ***************************************************** * Page 01 Column 06- *Step Octal Instruction Comment ***************************************************** ***************************************************** * PROCEDURE: SKIP if HIGH < MEDIAN (& move HIGH to LOW) *Step Octal Instruction Comment ***************************************************** 2600- xxxxxx Return Address 2601- 210025 LDA 0025 -> HIGH 2602- 220005 LDB 0005 -> MEDIAN 2603- 030531 JSBR 0531 COMPARE 2604- 024600 (JUMP) I 0600 Return (equal). 2605- 006010 SKNGT 2606- 024600 (JUMP) I 0600 Return (greater than). 2607- 210025 LDA 0025 -> HIGH 2610- 220026 LDB 0026 -> LOW 2611- 030500 JSBR 0500 MOVE DATA (HIGH to LOW) 2612- 044034 INSZ I 0034 Low Update Counter 2613- 040600 INSZ 0600 (Skips) 2614- 024600 JUMP I 0600 Return. ***************************************************** * PROCEDURE: SKIP if LOW > MEDIAN (& move LOW to HIGH) *Step Octal Instruction Comment ***************************************************** 2615- xxxxxx Return Address 2616- 210026 LDA 0026 -> LOW 2617- 220005 LDB 0005 -> MEDIAN 2620- 030531 JSBR 0531 COMPARE 2621- 024615 (JUMP) I 0615 Return (equal). 2622- 006410 SKGT 2623- 024615 (JUMP) I 0615 Return (less than). 2624- 210026 LDA 0026 -> LOW 2625- 220025 LDB 0025 -> HIGH 2626- 030500 JSBR 0500 MOVE DATA (LOW to HIGH) 2627- 044033 INSZ I 0033 High Update Counter 2630- 040615 INSZ 0615 (Skips). 2631- 024615 JUMP I 0615 Return. 2632- 2633- 2634- 2635- 2636- 2637- 2640- 2641- 2642- 2643- 2644- 2645- 2646- 2647- 2650- 2651- 2652- 2653- 2654- 2655- 2656- 2657- 2660- 2661- 2662- 2663- 2664- 2665- 2666- 2667- 2670- 2671- 2672- 2673- 2674- 2675- 2676- 2677- ***************************************************** * Page 01 Column 07- *Step Octal Instruction Comment ***************************************************** ***************************************************** * PROCEDURE: SELECT MEDIAN (& move to LOW) *Step Octal Instruction Comment ***************************************************** 2700- xxxxxx Return Address 2701- 220026 LDB 0026 -> LOW 2702- 122306 ADB Z 0306 CF80 (+ 10 records) 2703- 260035 STB 0035 -> CURRENT (may be in either block) 2704- 210026 LDA 0026 -> LOW 2705- 030531 JSBR 0531 COMPARE (LOW - CURRENT) 2706- 020774 (JUMP) 0774 LOW = CURRENT, use LOW. 2707- 210026 LDA 0026 -> LOW 2710- 220025 LDB 0025 -> HIGH 2711- 006410 SKGT 2712- 020727 (JUMP) 0727 LOW < CURRENT. 2713- 030531 JSBR 0531 COMPARE (LOW - HIGH) 2714- 020774 (JUMP) 0774 CURRENT < LOW = HIGH, use LOW. 2715- 006410 SKGT 2716- 020774 (JUMP) 0774 CURRENT < LOW < HIGH, use LOW. 2717- 210035 LDA 0035 -> CURRENT 2720- 220025 LDB 0025 -> HIGH 2721- 030531 JSBR 0531 COMPARE (CURRENT - HIGH) 2722- 020741 (JUMP) 0741 CURRENT = HIGH < LOW, use HIGH. 2723- 006410 SKGT 2724- 020741 (JUMP) 0741 CURRENT < HIGH < LOW, use HIGH. 2725- 210035 LDA 0035 -> CURRENT 2726- 020770 JUMP 0770 HIGH < CURRENT < LOW, use CURRENT. 2727- 030531 JSBR 0531 COMPARE (LOW - HIGH) 2730- 020774 (JUMP) 0774 LOW = HIGH < CURRENT, use LOW. 2731- 006010 SKNGT 2732- 020774 (JUMP) 0774 HIGH < LOW < CURRENT, use LOW. 2733- 210035 LDA 0035 -> CURRENT 2734- 220025 LDB 0025 -> HIGH 2735- 030531 JSBR 0531 COMPARE (CURRENT - HIGH) 2736- 020741 (JUMP) 0741 LOW < CURRENT = HIGH, use HIGH. 2737- 006410 SKGT 2740- 020725 (JUMP) 0725 LOW < CURRENT < HIGH, use CURRENT. 2741- 210025 LDA 0025 -> HIGH 2742- 020770 JUMP 0770 LOW < HIGH < CURRENT, use HIGH. 2743- 2744- 2745- 2746- 2747- 2750- 2751- 2752- 2753- 2754- 2755- 2756- 2757- 2760- 2761- 2762- 2763- 2764- 2765- 2766- 2767- 2770- 044034 INSZ I 0034 Low Update Counter 2771- 044033 INSZ I 0033 High Update Counter ** Swap with LOW-- 2772- 220026 LDB 0026 -> LOW 2773- 030513 JSBR 0513 SWAP DATA ** Move LOW to MEDIAN-- 2774- 210026 LDA 0026 -> LOW 2775- 220005 LDB 0005 -> MEDIAN 2776- 030500 JSBR 0500 MOVE DATA 2777- 024700 JUMP I 0700 Return. ***************************************************** END of Sort Utility (Module 025) *****************************************************