*ASM CYPRESS DISC PACK LOADER 08231 ABS 08231 ORG /1750 * CYPL0110 DKINT EQU /D DISK INTERRUPT LOCATION. CYPL0120 CCINT EQU /C COLUMN INTERRUPT LOCATION. CYPL0130 OPINT EQU /10 OP-COMPLETE INT LOCATION. CYPL0140 * CYPL0147 DKBUF BSS 322 DISK BUFFER. CYPL0148 * CYPL0150 SUPVS EQU * CYPL0160 SLA 16 CYPL0164 STO L CDBUF&81 COLUMN 81 STOPPER. CYPL0165 LDX L1 320 SET DISK WORD COUNT. CYPL0166 STX L1 DKBUF CYPL0167 BSI L CARD READ A CONTROL CARD. CYPL0170 DC &1 CYPL0180 DC CDBUF CYPL0190 DC RDERR CYPL0200 LDX 1 -10 TEST CARD TYPE. CYPL0210 SUP2 LD L CDBUF&1 CYPL0220 EOR L1 FAN&10 CYPL0230 BSC I1 FAN&11,&- CYPL0240 MDX 1 2 CYPL0250 MDX SUP2 CYPL0260 WAIT 15 BAD CONTROL CARD. CYPL0270 MDX SUPVS CYPL0280 * CYPL0290 FAN DC /4400 L, HOLLERITH. CYPL0300 DC LOAD CYPL0310 DC /8100 E. CYPL0320 DC EXEC CYPL0330 DC /8200 D. CYPL0340 DC DSET CYPL0350 DC /8400 C. CYPL0360 DC CSET CYPL0370 DC /8080 F. CYPL0380 DC FINI CYPL0390 * CYPL0400 LOAD EQU * LOAD PROGRAM TO DISK. CYPL0410 SLA 16 SET SWITCH. CYPL0420 STO GOSW CYPL0430 BSI L PARAM EXTRACT CARD PARAMETERS. CYPL0440 LOAD2 SLA 16 CYPL0450 STO CDCNT CYPL0460 RDCD BSI L CARD READ PROGRAM CARD. CYPL0470 DC &1 CYPL0480 DC CDBUF CYPL0490 DC RDERR CYPL0500 LD L CDBUF&4 COLUMN 4. CYPL0510 SRA 12 CLEAR WORD COUNT. CYPL0520 EOR D10 DATA CARD... CYPL0530 BSC L CNVT,&- BRANCH IF YES. CYPL0540 EOR D10 RESTORE. CYPL0550 EOR D15 EOP CARD... CYPL0560 BSC L CNVT,&- BRANCH IF YES. CYPL0570 LD L CDBUF&8 GET COLUMN 8. CYPL0580 EOR X0030 MAINLINE HEADER CARD... CYPL0590 BSC L HEXCD,Z BRANCH IF NOT. CYPL0600 MDX L CDCNT,1 MAINLINE HEADER, IGNORE. CYPL0610 MDX RDCD CYPL0620 * CYPL0630 EXEC EQU * EXECUTE THE PROGRAM. CYPL0640 STX 0 GOSW SET GO-NOGO SWITCH. CYPL0650 MDX LOAD2 GO LOAD IT. CYPL0660 * CYPL0670 CNVT LDX L1 CDBUF SET CARD BUFFER POINTER. CYPL0680 LDX 2 -54 DO 54 WORDS. CYPL0690 LDX 3 4 SET SHIFT AMOUNT. CYPL0700 WDLP LD 1 2 SECOND COLUMN TO Q. CYPL0710 SRT 16 CYPL0720 LD 1 1 FIRST COLUMN. CYPL0730 SRA 4 CLOSE THE GAP. CYPL0740 SLT 3 0 REPOSITION BY 4,8,12. CYPL0750 STO L2 WDBUF&54 STORE FULL WORD. CYPL0760 MDX 3 4 INCREMENT SHIFT AMOUNT. CYPL0770 MDX 1 1 INCREMENT INPUT POINTER. CYPL0780 STX 3 T1 TEST END OF TRIAD. CYPL0790 LD D16 CYPL0800 S T1 CYPL0810 BSC L WDLP2,Z CYPL0820 LDX 3 4 RESET SHIFT AMOUNT. CYPL0830 MDX 1 1 INCREMENT AN EXTRA TIME. CYPL0835 WDLP2 MDX 2 1 CYPL0840 MDX WDLP CYPL0850 MDX L CDCNT,1 INCREMENT CARD COUNT. CYPL0860 LD L WDBUF&2 CARD TYPE. CYPL0870 SRA 8 CYPL0880 EOR D15 EOP CARD... CYPL0890 BSC L EOP,&- CYPL0900 LD L WDBUF&2 GET WORD COUNT. CYPL0910 AND D127 CYPL0920 STO WDCNT&1 CYPL0930 WDCNT LDX L3 *-* WORD COUNT. CYPL0940 LD L WDBUF CARD ORIGIN. CYPL0950 S WUN CYPL0960 STO LDSTO&1 CYPL0970 LDLP LD L3 WDBUF&8 LOAD BACKWARDS. CYPL0980 LDSTO STO L3 *-* CYPL0990 MDX 3 -1 CYPL1000 MDX LDLP CYPL1010 LD L WDBUF&1 CHECKSUM. CYPL1020 BSC L SAVNT,&- IGNORE IF ZERO. CYPL1030 LDX 2 54 COMPUTE CHECKSUM. CYPL1040 LD CDCNT CYPL1050 CKSM2 A L2 WDBUF-1 CYPL1060 BSC C CYPL1070 A WUN END-AROUND CARRY. CYPL1080 MDX 2 -1 CYPL1090 MDX CKSM2 CYPL1100 S WUN CYPL1110 BSC L SAVNT,&- BRANCH IF CHECKSUM OK. CYPL1120 WAIT 7 CYPL1130 MDX SAVNT ACCEPT CARD ANYWAY. CYPL1140 * CYPL1150 WUN DC 1 CYPL1160 D10 DC 10 CYPL1170 D15 DC 15 CYPL1180 X0030 DC /0030 CYPL1190 D16 DC 16 CYPL1200 D127 DC 127 CYPL1210 GOSW DC 0 CYPL1220 WORDS DC 0 CYPL1230 CDCNT DC 0 CYPL1240 ILCD DC CD71 CARD INTERRUPT LOCATION. CYPL1244 ILDK DC INT DISK INTERRUPT LOCATION. CYPL1245 T1 DC 0 CYPL1250 TT DC 0 CYPL1260 DC 0 CYPL1270 DC 0 CYPL1280 * CYPL1290 SAVNT EQU * SAVE INTERRUPT CELLS. CYPL1300 LD L DKINT CYPL1304 EOR ILDK CYPL1305 BSC L SAVN2,&- CYPL1306 LD L DKINT CYPL1310 STO TT CYPL1320 SAVN2 LD L CCINT CYPL1324 EOR ILCD CYPL1325 BSC L SAVN3,&- CYPL1326 LD L CCINT CYPL1330 STO TT&1 CYPL1340 SAVN3 LD L OPINT CYPL1344 EOR ILCD CYPL1345 BSC L RDCD,&- CYPL1346 LD L OPINT CYPL1350 STO TT&2 CYPL1360 MDX RDCD GO READ NEXT CARD. CYPL1370 * CYPL1380 EOP LD L WDBUF&3 XEQ ADDRESS. CYPL1390 BSC L LOAD2,&- CONTINUE LOADING IF ZERO. CYPL1400 LD TT RESTORE LOADS INTO CYPL1440 STO L DKINT INTERRUPT CELLS. CYPL1450 LD TT&1 CYPL1460 STO L CCINT CYPL1470 LD TT&2 CYPL1480 STO L OPINT CYPL1490 LD GOSW TEST IF EXECUTION WANTED. CYPL1494 BSC I WDBUF&3,Z YES. CYPL1495 * CYPL1496 LD L PAR3 GET TOTAL WORDS FOR DISK. CYPL1500 S L PAR2 CYPL1510 A WUN CYPL1520 STO WORDS CYPL1530 LD L PAR1 GET SECTOR ADDRESS. CYPL1540 STO L DKBUF&1 CYPL1550 LDX I1 PAR2 INITIAL CORE ADDRESS. CYPL1560 PKLP1 LDX L3 320 CYPL1570 LDX L2 DKBUF&2 POINT TO DISK BUFFER. CYPL1580 PKLP2 LD 1 0 FILL DISK BUFFER. CYPL1590 STO 2 0 CYPL1600 MDX 1 1 CYPL1610 MDX 2 1 CYPL1620 MDX L WORDS,-1 CYPL1630 MDX *&1 GO TEST IF BUFFER FULL. CYPL1640 MDX PKLP3 ALL WORDS MOVED. CYPL1650 MDX 3 -1 CYPL1660 MDX PKLP2 CONTINUE FILLING BUFFER. CYPL1670 BSI WRDSK WRITE OUT THE BUFFER. CYPL1680 MDX L DKBUF&1,1 INCREMENT SECTOR ADDRESS. CYPL1690 MDX PKLP1 GO FILL NEXT SECTOR. CYPL1700 PKLP3 BSI WRDSK WRITE FINAL SECTOR. CYPL1710 BSC L SUPVS CYPL1720 * CYPL1730 WRDSK DC 0 DISK WRITE SUBROUTINE. CYPL1740 BSI L DISC CYPL1750 DC /2000 CYPL1760 DC DKBUF CYPL1770 DC DKERR CYPL1780 BSI L DISC CYPL1790 DC 0 CYPL1800 DC 0 CYPL1810 MDX *-5 CYPL1820 BSC I WRDSK CYPL1830 DKERR DC 0 CYPL1840 WAIT 3 DISK ERROR. CYPL1850 MDX *-2 CYPL1860 * CYPL1870 HEXCD EQU * LOAD A HEX CARD. CYPL1880 LDX L1 CDBUF&1 CYPL1890 BSI HXBIN CYPL1900 STO L WDBUF&3 CARD ORIGIN OR EOP ADDRESS CYPL1910 LD L CDBUF&6 TEST IF EOP CARD. CYPL1920 BSC L EOP,&- CYPL1930 HEXL2 MDX 1 5 CYPL1940 LD 1 0 CYPL1950 BSC L SAVNT,&- TAKE IF END OF CARD. CYPL1960 BSI HXBIN CYPL1970 STO I WDBUF&3 CYPL1980 MDX L WDBUF&3,1 INCREMENT LOAD ADDRESS. CYPL1990 MDX HEXL2 GET NEXT FIELD. CYPL2000 * CYPL2010 CSET EQU * SET CORE TO BIT PATTERN. CYPL2020 BSI PARAM CYPL2030 LD PAR3 CYPL2040 S PAR2 CYPL2050 A WUN CYPL2060 STO CSET2&1 CYPL2070 CSET2 LDX L1 *-* CYPL2080 LDX I2 PAR2 BEGINNING LOCATION. CYPL2090 LD PAR1 BIT PATTERN. CYPL2100 CSET3 STO 2 0 CYPL2110 MDX 2 1 CYPL2120 MDX 1 -1 CYPL2130 MDX CSET3 CYPL2140 BSC L SUPVS CYPL2150 * CYPL2160 DSET EQU * SET SECTORS TO BIT PATTERN CYPL2170 BSI PARAM CYPL2180 LDX L1 -320 CYPL2190 LD PAR1 BIT PATTERN. CYPL2200 DSET3 STO L1 DKBUF&322 FILL BUFFER ONCE. CYPL2210 MDX 1 1 CYPL2220 MDX DSET3 CYPL2230 LD PAR2 BEGINNING SECTOR. CYPL2240 STO L DKBUF&1 CYPL2250 DSET4 BSI WRDSK CYPL2260 LD L DKBUF&1 TEST IF LAST SECTOR. CYPL2270 EOR PAR3 CYPL2280 BSC L SUPVS,&- CYPL2290 MDX L DKBUF&1,1 INCREMENT SECTOR. CYPL2300 MDX DSET4 CYPL2310 * CYPL2320 FINI EQU * CYPL2330 WAIT /A CYPL2340 LDX L1 CDBUF&6 CHECK FOR PARAMETER. CYPL2347 LD 1 0 CYPL2348 BSC L SUPVS,&- CYPL2349 BSI HXBIN CYPL2350 STO *&1 GO PER PARAMETER. CYPL2351 BSC L *-* CYPL2352 * CYPL2360 RDERR DC 0 CYPL2370 BSC I RDERR,&- CONTINUE IF LAST CARD. CYPL2375 WAIT 1 CYPL2380 MDX L RDERR,-5 POINT TO ENTRY. CYPL2385 BSC I RDERR CYPL2390 * CYPL2400 PARAM DC 0 CONVERT PARAMETERS TO BIN. CYPL2410 LDX L1 CDBUF&6 CYPL2420 BSI HXBIN CYPL2430 STO PAR1 CYPL2440 MDX 1 5 CYPL2450 BSI HXBIN CYPL2460 STO PAR2 CYPL2470 MDX 1 5 CYPL2480 BSI HXBIN CYPL2490 STO PAR3 CYPL2500 BSC I PARAM CYPL2510 PAR1 DC 0 CYPL2520 PAR2 DC 0 CYPL2530 PAR3 DC 0 CYPL2540 * CYPL2550 * HOLLERITH TO BINARY CONVERTER FOR HEX FIELDS. HXBN0010 * AT ENTRY, INDEX REGISTER 1 POINTS TO FIELD. HXBN0020 * AT EXIT, THE ACCUMULATOR CONTAINS BINARY RESULT. HXBN0030 * HXBN0040 HXBIN DC 0 HXBN0050 STX 1 HB15&1 HXBN0059 STX 2 HB16&1 HXBN0060 STX 3 HB17&1 HXBN0070 SLA 16 CLEAR HXBN0080 STO HB21 BINARY ACCUMULATOR. HXBN0090 SRT 16 CLEAR Q-REG. HXBN0100 LDX 3 16 4X TALLY. HXBN0110 HB08 MDX 1 1 INCREMENT COLUMN POINTER. HXBN0120 LD 1 -1 HXBN0130 LDX 2 9 SCAN 9 ROWS. HXBN0140 SRA 3 HXBN0150 SRA 1 HXBN0160 BSC L HB10,E HXBN0170 MDX 2 -1 HXBN0190 MDX *-5 HXBN0200 HB10 LD 1 -1 HXBN0205 BSC &Z TEST FOR 12-PUNCH. HXBN0210 MDX 2 9 YES. HXBN0220 STX 2 HB23 HXBN0230 LD HB23 GET HEX DIGIT. HXBN0240 SRT 4 BIAS FOR INDEXED SHIFT. HXBN0250 SLT 3 0 HXBN0260 OR HB21 HXBN0270 STO HB21 HXBN0280 MDX 3 -4 DONE 4 COLUMNS... HXBN0290 MDX HB08 NO. HXBN0300 HB15 LDX L1 *-* HXBN0309 HB16 LDX L2 *-* HXBN0310 HB17 LDX L3 *-* HXBN0320 BSC I HXBIN HXBN0330 HB21 DC 0 HXBN0340 HB23 DC 0 HXBN0350 * HXBN0360 * CRPF0010 * BSI CARD CRPF0020 * DC &1,0,-1.....READ,FEED,PUNCH CRPF0030 * DC %LOCATION OF COUNT AND CARD IMAGE< CRPF0040 * DC %LOCATION OF ERROR-HANDLING SUBR.< CRPF0050 * %NORMAL RETURN OR RETURN FROM ERROR SUBR.< CRPF0060 * NOTE...FOR FEED OPERATION, PARAMETER 2 IS OMITTED.CRPF0070 * CRPF0080 CARD DC 0 CRPF0090 STX L1 CD55&1 SAVE XR1. CRPF0100 LDX L1 CD71 CRPF0110 STX L1 CCINT CRPF0120 STX L1 OPINT CRPF0130 XIO CD65 LOOP UNTIL 1442 IS READY. CRPF0140 BOSC E CRPF0150 MDX *-3 CRPF0160 LDX I1 CARD SET CALLING SEQ POINTER. CRPF0170 LD 1 0 GET PARAMETER 1. CRPF0180 BSC L CD41,&- TAKE IF FEED OPERATION. CRPF0190 SLA 1 SAVE SIGN BIT. CRPF0200 LD 1 1 CRPF0210 STO CD67 LOCATION OF I/O AREA. CRPF0220 LD I1 1 CRPF0230 STO CD62 COLUMN COUNT. CRPF0240 BSC L CD31,C TAKE IF PUNCH OPERATION. CRPF0250 * CRPF0260 CD21 EQU * OPERATION IS READ. CRPF0270 XIO CD63 GIVE READ START. CRPF0280 CD23 WAIT WAIT FOR COLUMN INTERRUPT. CRPF0290 MDX L CD67,1 INCREMENT COLUMN POINTER. CRPF0300 XIO CD67 CRPF0305 MDX L CD62,-1 DECREMENT COLUMN COUNTER. CRPF0310 MDX CD23 CRPF0320 MDX L CD62,&1 SET TO SKIP NEXT TIME. CRPF0330 LD CD63 SET TRASH LOC IN IOCC. CRPF0340 STO CD67 CRPF0350 MDX CD23 CRPF0370 * CRPF0380 CD31 EQU * OPERATION IS PUNCH. CRPF0400 XIO CD62 GIVE PUNCH START. CRPF0410 CD33 WAIT WAIT FOR COLUMN INTERRUPT. CRPF0420 MDX L CD67,1 INCREMENT COLUMN POINTER. CRPF0430 LD I CD67 GET COLUMN WORD. CRPF0440 AND HFFF0 CRPF0450 STO CD65 PUNCH WORD. CRPF0460 MDX L CD62,-1 LAST COLUMN... CRPF0470 MDX CD35 NO. CRPF0480 OR H8 YES, SET STOPPER BIT. CRPF0500 STO CD65 CRPF0501 CD35 XIO CD66 PUNCH A COLUMN. CRPF0510 MDX CD33 GO BACK FOR NEXT COLUMN. CRPF0520 * CRPF0540 CD41 EQU * OPERATION IS FEED. CRPF0550 XIO CD61 CRPF0560 MDX 1 -1 BACK UP POINTER. CRPF0570 WAIT CRPF0580 * CRPF0590 CD51 MDX 1 3 NORMAL EXIT. CRPF0600 STX 1 CD56&1 CRPF0610 CD55 LDX L1 *-* RESTORE XR1. CRPF0620 CD56 BSC L *-* RETURN. CRPF0630 * CRPF0640 BSS E 0 CRPF0649 CD61 DC *-* TRASH CELL FOR EXTRA COLS. CRPF0650 DC /1402 FEED. CRPF0660 CD62 DC *-* COLUMN COUNT. CRPF0670 DC /1401 PUNCH START. CRPF0680 CD63 DC CD61-1 LOC OF TRASH CELL - 1. CRPF0690 DC /1404 READ START. CRPF0700 CD65 DC *-* PUNCH WORD. CRPF0710 DC /1703 SENSE. CRPF0720 CD66 DC CD65 CRPF0730 DC /1100 PUNCH. CRPF0740 CD67 DC *-* COLUMN POINTER. CRPF0750 DC /1200 READ. CRPF0760 CD68 DC 0 CRPF0770 HFFF0 DC /FFF0 CRPF0780 H8 DC 8 CRPF0790 * CRPF0800 CD71 DC 0 INTERRUPT ROUTINE. CRPF0810 XIO CD65 SENSE. CRPF0820 STO CD68 CRPF0830 BOSC I CD71,&Z TAKE IF READ COLUMN REQST. CRPF0840 SLA 2 CRPF0850 BOSC I CD71,C TAKE IF PUNCH COLUMN REQST.CRPF0860 BOSC L CD75,&Z TAKE IF ERROR. CRPF0870 SLA 2 CRPF0880 BOSC L CD77,&Z TAKE IF OP COMPLETE. CRPF0890 CD75 LD 1 2 GET ERROR RETURN LOCATION. CRPF0900 STO CD56&1 CRPF0910 MDX 1 3 SET A RETURN TO AFTER THE CRPF0920 STX I1 CD56&1 CALLING SEQUENCE. CRPF0930 MDX L CD56&1,1 INCREMENT RETURN LOCATION. CRPF0940 LD CD68 GET DSW. CRPF0950 BOSC L CD55 CRPF0960 CD77 BSC L *&1,C TAKE IF LAST CARD. CRPF0970 MDX CD51 OTHERWISE EXIT. CRPF0980 SLA 12 CLEAR A. CRPF0990 STO CD68 CRPF1000 MDX CD75 GO TO ERROR RETURN. CRPF1010 * CRPF1500 DISC DC 0 DISC0010 DDZRO NOP DISC0030 LD LSKNT HOMING INTERRUPT LOCATION. DISC0050 STO L DKINT DISC0060 XIO MVIN DISC0070 WAIT DISC0080 SKHOM XIO MVOUT DISC0090 WAIT DISC0100 SLA 5 DISC0110 BSC L *&1,C HOME YET... DISC0120 MDX SKHOM NO. DISC0130 BSI L DISK0 READ SECTOR 0. DISC0135 DC /1000 D-SC0140 DC BADCY DISC0150 DC CATAS DISC0160 BSI L DISK0 CHECK READ. DISC0170 DC 0 DISC0180 DC BADCY DISC0190 MDX *-5 NOT DONE, WAIT. DISC0200 LD BADCY&2 DISC0210 STO DT DISC0220 LD BADCY&3 DISC0230 STO DT&1 DISC0240 LD BADCY&4 DISC0250 STO DT&2 DISC0260 LD SWTCX DISC0270 STO DDZRO DISC0280 MDX DDGO DISC0290 SWTCX MDX X DDGO-DDZRO-1 DISC0300 BSS E 0 DISC0320 MVOUT DC 1 ONE TRACK AT A TIME. DISC0330 DC /2404 DISC0340 MVIN DC 3 DISC0350 DC /2400 DISC0360 SENS DC 0 DISC0370 DC /2701 DISC0380 BADCY DC 4 DISC0390 DC 0 DISC0400 BSS 4 DISC0410 SKINT DC 0 DISC0420 XIO SENS DISC0430 BOSC I SKINT DISC0450 CATAS DC 0 BSI FROM ERROR RETURN. DISC0460 MDX *-1 SECTOR 0 BAD. DISC0470 LSKNT DC SKINT DISC0480 DDGO EQU * DISC0490 LD DISC DISC0500 STO DISK0 DISC0510 MDX DISK0&1 DISC0520 * DISK0 03 DK000000 * DK000030 * DK000050 DISK0 DC 0 CALL&1. DK000060 STX 1 DK18&1 SAVE XR1. DK000065 LDX L1 INT DK000066 STX L1 DKINT DK000067 LDX I1 DISK0 POINT TO CALLING SEQ. DK000070 0003 0 7015 MDX DK10 DK000080 0004 0 0000 INT1 DC 0 INTERRUPT ENTRANCE %&4< DK000090 0005 01 4C0000AC BSC L DK38 DK000100 0007 0 2000 AREA DC /2000 DK000110 0008 0002 TEMP BSS 2 SAVED A & Q REGISTERS DK000120 000A 0 0000 CYLIN DC /0000 CURRENT CYLINDER %&10< DK000130 000B 0002 BSS 2 DK000140 000D 0 0000 FILE DC 0 FILE PROTECT ADDR %&13< DK000150 000E 0002 BSS 2 DK000160 0010 0 0658 DT DC /0658 DEFECTIVE CYLINDER DK000170 0011 0 0000 DC 0 DK000180 0012 0 0000 DC 0 DK000190 0013 0006 BSS 6 DK000200 * DK000210 * DISK0 CALL PROCESSING DK000220 * DK000230 0019 0 280F DK10 STS DK16 SAVE STATUS DK000240 001A 0 D8ED STD TEMP DK000250 001B 0 6A11 STX 2 DK19&1 DK000260 001C 01 6600014A LDX L2 BUSY DK000270 001E 0 7101 MDX 1 1 DK000280 001F 0 C1FF LD 1 -1 X1# ADDRESS OF CALL&1 DK000290 0020 0 180C SRA 12 IS FUNCTION TEST DK000300 0021 01 4C200030 BSC L DK24,Z NO DK000310 0023 0 C200 LD 2 BUSY-BUSY YES, IS ROUTINE BUSY DK000320 0024 0 4818 BSC &- DK000330 0025 0 7101 DK12 MDX 1 &1 NO, EXIT TO CALL&4 DK000340 0026 0 7101 MDX 1 &1 YES, EXIT TO CALL &3 DK000350 0027 0 C8E0 LDD TEMP RESTORE STATUS DK000360 0028 0 6906 DK14 STX 1 DK20&1 DK000370 0029 0 2000 DK16 LDS 0 DK000380 002A 00 65000000 DK18 LDX L1 0 DK000390 002C 00 66000000 DK19 LDX L2 0 DK000400 DK20 BSC L 0 EXIT. DK000410 * DK000415 0030 0 C200 DK24 LD 2 BUSY-BUSY IS ROUTINE BUSY DK000420 0031 01 4C180035 BSC L DK25,&- NO * DK000430 0033 0 3000 WAIT YES, WAIT * DK000440 0034 0 70FB MDX DK24 * DK000450 0035 0 C1FF DK25 LD 1 -1 DK000460 0036 0 180C SRA 12 IS FUNCTION LEGAL DK000470 0037 0 9219 S 2 D0005-BUSY DK000480 0038 0 D079 STO SEEK DK000490 0039 01 4C3000A5 BSC L DK36,Z- NO, ERROR DK000500 003B 0 8221 A 2 H7004-BUSY DK000510 003C 0 D052 STO DK32 DK000520 003D 0 C100 LD 1 0 SAVE DATA ADDR DK000530 003E 0 D20C STO 2 IREAD-BUSY DK000540 003F 0 D20E STO 2 IWRTE-BUSY DK000550 0040 0 8205 A 2 D0001-BUSY DK000560 0041 0 D00E STO DK30&1 SAVE ID WORD ADDR DK000570 0042 0 C06F LD SEEK IS FUNCTION SEEK DK000580 0043 01 4C18004C BSC L DK29,&- YES, DO NOT CHECK COUNT DK000590 0045 00 C5800000 LD I1 0 SAVE WORD COUNT DK000600 0047 01 4C0800A5 BSC L DK36,& # ERROR IF ZERO OR NEG DK000610 0049 0 921B S 2 D0320-BUSY DK000620 004A 01 4C3000A5 BSC L DK36,Z- # ERROR IF OVER &320 DK000630 004C 0 C1FF DK29 LD 1 -1 DK000640 004D 0 100C SLA 12 RELATIVE TO SCRATCH DK000650 004E 0 D017 STO REL NON-ZERO # RELATIVE DK000660 004F 00 C4000000 DK30 LD L 0 SAVE TRACK & SECTOR ID DK000670 0051 0 188C SRT 12 DK000680 0052 01 4C2000A5 BSC L DK36,Z DRIVE CODE # 0 DK000690 0054 0 108C SLT 12 DK000700 0055 0 D217 STO 2 SAV1-BUSY SAVE ORIGINAL SECTOR ID DK000710 0056 01 74000066 MDX L REL,0 ZERO # NOT RELATIVE DK000720 0058 0 80B4 A FILE FILE # FIRST SECTOR IN W.S. DK000730 0059 0 D212 STO 2 SETID-BUSY DK000740 005A 0 690B STX 1 SXR1&1 ** DEFECTIVE CYLINDERS DK000750 005B 0 61FD LDX 1 -3 DK000760 005C 01 C5000013 FLK LD L1 DT&3 DK000770 005E 0 9212 S 2 SETID-BUSY DK000780 005F 01 4C300065 BSC L SXR1,-Z NO MORE DEFECT. CYLINDER DK000790 0061 01 7408015C MDX L SETID,&8 TO ACCOMODATE BAD CYLINDER DK000800 0063 0 7101 MDX 1 1 DK000810 0064 0 70F7 MDX FLK DK000820 0065 00 65000000 SXR1 LDX L1 0 DK000830 0066 REL EQU SXR1&1 DK000840 0066 RBC EQU SXR1&1 DK000850 0067 0 C212 LD 2 SETID-BUSY DK000860 0068 0 E220 AND 2 HFFF8-BUSY JUST CYL. NUMBER DK000870 0069 0 D213 STO 2 TRACK-BUSY SET UP SBRTA DK000880 006A 0 921E S 2 H0658-BUSY DK000890 006B 01 4C1000A5 BSC L DK36,- # ERROR IF OVER &202 DK000900 006D 0 C212 LD 2 SETID-BUSY STORE SECTOR ID IN IOCCS DK000910 006E 0 E21C AND 2 H0007-BUSY JUST SECTOR NUMBER DK000920 006F 0 8097 A AREA DK000930 0070 0 821F A 2 H0500-BUSY DK000940 0071 0 D20F STO 2 IWRTE&1-BUSY # /0500 &AREA &SECTOR DK000950 0072 0 8207 A 2 H0100-BUSY DK000960 0073 0 D20D STO 2 IREAD&1-BUSY # /0600 &AREA &SECTOR DK000970 0074 0 8207 A 2 H0100-BUSY DK000980 0075 0 E220 AND 2 HFFF8-BUSY SECTOR NUM. NOT NEEDED DK000990 0076 0 D211 STO 2 SENSE-BUSY # /0700 &AREA DK001000 0077 0 921D S 2 H0300-BUSY DK001010 0078 0 D20B STO 2 CNTRL&1-BUSY # /0400 &AREA DK001020 0079 0 C101 LD 1 1 SAVE ERROR EXIT DK001030 007A 01 D4000143 STO L SBC12&1 DK001040 007C 0 0A10 DK31 XIO 2 SENSE-1-BUSY IS DEVICE READY DK001050 007D 0 1003 SLA 3 DK001060 007E 01 4C0200A1 BSC L DK34,C NO, CHECK BUSY DK001070 0083 0 C21A LD 2 D0010-BUSY SET RETRY COUNT DK001100 0084 0 D204 STO 2 COUNT-BUSY DK001110 0085 0 D200 STO 2 BUSY-BUSY SET ROUTINE BUSY DK001120 0086 0 D222 STO 2 FIRST-BUSY SET FIRST TIME IND. DK001130 0087 0 C212 LD 2 SETID-BUSY DK001140 0088 01 D4800050 STO I DK30&1 USABLE SECTOR ID DK001150 008A 00 C5800000 LD I1 0 DK001160 008C 0 8205 A 2 D0001-BUSY USABLE WORD COUNT DK001170 008D 00 D5800000 STO I1 0 DK001180 008F 0 7000 DK32 MDX DK32&1 INITIATE FUNCTION DK001190 0090 0 7034 MDX DK40 # GET DK001200 0091 0 7039 MDX DK50 # PUT W/O RBC DK001210 0092 0 705B MDX DK60 # PUT W/ RBC DK001220 0093 0 705C MDX DK70 # WRTI DK001230 0094 0 C1FF LD 1 -1 # SEEK DK001240 0095 0 E218 AND 2 H00F0-BUSY DK001250 0096 01 4C1800C3 BSC L DK33,&- ZERO # REQUESTED DK001260 0098 0 C205 LD 2 D0001-BUSY #ONE CYLINDER INWARD DK001270 0099 0 D20A STO 2 CNTRL-BUSY DK001280 009A 01 7408000A MDX L CYLIN,&8 SET ARM POSITION DK001290 009C 0 C202 LD 2 ADDR4&1-BUSY SET INTERR FOR DK44 DK001300 009D 0 D014 STO DK39&1 DK001310 009E 0 0A0A XIO 2 CNTRL-BUSY SEEK 1 CYLIN DK001320 009F 01 4C000025 DK32A BSC L DK12 DK001330 00A1 01 4C28007C DK34 BSC L DK31,Z& IF DEVICE BUSY, WAIT DK001340 00A3 0 C214 LD 2 H5000-BUSY NOT READY DK001350 00A4 0 7001 MDX DK36A DK001360 00A5 0 C215 DK36 LD 2 H5001-BUSY ERROR EXIT DK001370 DK36A WAIT OPERATOR ACTION REQUIRED. DK001380 BSC L DK10&3 GO RETRY ROUTINE. DK001390 00AC 0 6A1B DK38 STX 2 DK48&1 DK001420 00AD 01 6600014A LDX L2 BUSY DK001430 00AF 0 D211 STO 2 SENSE-BUSY DK001440 00B0 0 0A10 XIO 2 SENSE-1-BUSY RESET INTERRUPT DK001450 00B1 00 4C000000 DK39 BSC L 0 DK001460 00B2 SEEK EQU DK39&1 SEEK IND. IF # 0 DK001470 * DK001480 00B3 0 0000 TERM DC 0 DK001490 00B4 01 C4800158 LD I IWRTE DK001500 00B6 0 9205 S 2 D0001-BUSY RESTORE WORD COUNT DK001510 00B7 01 D4800158 STO I IWRTE DK001520 00B9 0 C217 LD 2 SAV1-BUSY RESTORE SECTOR ID DK001530 00BA 01 D4800050 STO I DK30&1 DK001540 00BC 0 1810 SRA 16 DK001550 00BD 0 D200 STO 2 BUSY-BUSY TERMINATE FUNCTION DK001560 00C1 01 4C8000B3 BSC I TERM DK001590 00C3 0 C210 DK33 LD 2 ADDRB-BUSY # REQUESTED CYLINDER DK001600 00C4 0 D20C STO 2 IREAD-BUSY DK001610 * GET FUNCTION DK001620 00C5 0 402F DK40 BSI SBRTA SEEK & READ REQ SECTOR DK001630 00C6 0 40EC DK44 BSI TERM DK001640 00C7 00 66000000 DK48 LDX L2 0 DK001650 00C9 01 4C800004 BSC I INT1 EXIT DK001660 * PUT FUNCTION W/O RBC DK001670 00CB 0 D09A DK50 STO RBC ZERO MEANS READ BACK CHECK DK001680 00CC 01 C400000D LD L FILE IS SECTOR FILE PROTECTED DK001690 00CE 0 9212 S 2 SETID-BUSY DK001700 00CF 01 4C0800D3 BSC L DK51,& DK001710 00D1 0 40E1 BSI TERM RESTORE WD CNT ETC. DK001720 00D2 0 70D2 MDX DK36 ERROR EXIT DK001730 00D3 0 C210 DK51 LD 2 ADDRB-BUSY NO, SET FOR TEMP AREA DK001740 00D4 0 D20C STO 2 IREAD-BUSY DK001750 00D5 0 401F BSI SBRTA SEEK REQUESTED TRACK DK001760 00D6 0 C201 DK52 LD 2 ADDR4-BUSY SET INTERR TO GO TO DK54 DK001770 00D7 0 D0DA STO DK39&1 DK001780 00D8 0 0A0E XIO 2 IWRTE-BUSY WRITE DISK DATA DK001790 00D9 0 70ED MDX DK48 DK001800 00DA 01 4C0800E8 DK54 BSC L DK59,& YES, CHECK RETRY COUNT DK001810 00DC 01 74000066 MDX L RBC,0 DK001820 00DE 0 70E7 MDX DK44 DK001830 00DF 0 C20F LD 2 IWRTE&1-BUSY DO READ BACK CHECK DK001840 00E0 0 8208 A 2 H0180-BUSY SETUP FOR READ BACK CHEC DK001850 00E1 0 D20D STO 2 IREAD&1-BUSY DK001860 00E2 0 C20E LD 2 IWRTE-BUSY DK001870 00E3 0 D20C STO 2 IREAD-BUSY DK001880 00E4 0 C203 LD 2 ADDR4&2-BUSY SET INTERR FOR DK58 DK001890 00E5 0 7016 MDX SBA11 DK001900 00E6 01 4C3000C6 DK58 BSC L DK44,Z- NO, TERMINATE FUNCTION DK001910 00E8 01 74FF014E DK59 MDX L COUNT,-1 DONE 10 RETRIES YET DK001920 00EA 0 70EB MDX DK52 NO DK001930 00EB 0 C206 LD 2 D0002-BUSY DK001940 00EC 0 4051 BSI SBRTC YES, CHECK USER OPTION DK001950 00ED 0 70E8 MDX DK52 RETRY REQUESTED DK001960 * PUT W/ RBC DK001970 00EE 0 1010 DK60 SLA 16 SET FOR RBC DK001980 00EF 0 70DB MDX DK50 DK001990 * WRTI FUNCTION DK002000 00F0 0 C202 DK70 LD 2 ADDR4&1-BUSY SET INTERR TO GO TO DK44 DK002010 00F1 0 71FF MDX 1 -1 SET EXIT FOR CALL &3 DK002020 00F2 0 D0BF STO DK39&1 DK002030 00F3 0 0A0E XIO 2 IWRTE-BUSY DK002040 00F4 0 70AA DK71 MDX DK32A DK002050 * DK002060 * SBRT A - SEEK TO REQUESTED TRACK DK002070 * DK002080 00F5 0 0000 SBRTA DC 0 DK002090 00F6 01 C400000A LD L CYLIN IS CURRENT CYLIN CORRECT DK002100 00F8 0 9213 S 2 TRACK-BUSY DK002110 00F9 01 4C200118 BSC L SBA16,Z NO, SEEK TO REQUESTED DK002120 00FB 0 C223 SBA10 LD 2 ADDRA-BUSY DK002130 00FC 0 D0B5 SBA11 STO DK39&1 YES, SET INTER FOR SBA13 DK002140 00FD 0 C222 SBA12 LD 2 FIRST-BUSY DK002150 00FE 01 4C200136 BSC L SBA30,Z DK002160 0100 0 0A0C XIO 2 IREAD-BUSY READ DISK DATA DK002170 0101 0 70C5 MDX DK48 DK002180 0102 01 4C080130 SBA13 BSC L SBA20,& YES DK002190 0104 0 C20C LD 2 IREAD-BUSY IS THIS CORRECT CYLIN DK002200 0105 0 8205 A 2 D0001-BUSY DK002210 0106 0 D001 STO SBA14&1 DK002220 0107 00 C4000000 SBA14 LD L 0 DK002230 0109 0 E216 AND 2 H0FFF-BUSY AND OUT FILE BIT DK002240 010A 0 9212 S 2 SETID-BUSY DK002250 010B 01 4C200112 BSC L SBA15,Z NO, SEEK TO REQUESTED DK002260 010D 0 C213 LD 2 TRACK-BUSY DK002270 010E 01 D400000A STO L CYLIN YES, SETUP AS CURRENT DK002280 0110 01 4C8000F5 BSC I SBRTA EXIT DK002290 0112 01 74FF014E SBA15 MDX L COUNT,-1 DONE 10 RETRIES YET DK002300 0114 0 7003 MDX SBA16 DK002310 0115 0 C05B SBAX1 LD D0003 SEEK ERROR DK002320 0116 0 4027 BSI SBRTC YES, CHECK USER OPTION DK002330 0117 0 70EF MDX SBA14 RETRY REQUESTED DK002340 0118 0 1883 SBA16 SRT 3 NO, WHICH DIRECTION DK002350 0119 01 4C1800FB BSC L SBA10,&- TRY AND READ SECTOR AGAIN DK002360 011B 0 D20A STO 2 CNTRL-BUSY DK002370 011C 01 4C100123 BSC L SBA17,- SEEK TOWARD HOME DK002380 011E 0 1010 SLA 16 SEEK TOWARD CENTER DK002390 011F 0 920A S 2 CNTRL-BUSY DK002400 0120 0 D20A STO 2 CNTRL-BUSY DK002410 0121 0 1010 SLA 16 DK002420 0122 0 7001 MDX SBA17&1 DK002430 0123 0 C205 SBA17 LD 2 D0001-BUSY DK002440 0124 0 1881 SRT 1 DK002450 0125 0 C20B LD 2 CNTRL&1-BUSY SETUP DIRECT BIT IN DK002460 0126 0 1803 SRA 3 SEEK IOCC DK002470 0127 0 1083 SLT 3 DK002480 0128 0 D20B STO 2 CNTRL&1-BUSY DK002490 0129 0 C224 LD 2 ADDRA&1-BUSY SET INTER TO GO TO SBA10 DK002500 012A 0 D087 STO DK39&1 DK002510 012B 0 C222 LD 2 FIRST-BUSY DK002520 012C 01 4C20013A BSC L SBA34,Z DK002530 012E 0 0A0A XIO 2 CNTRL-BUSY SEEK N TRACKS DK002540 012F 0 7097 MDX DK48 DK002550 0130 01 74FF014E SBA20 MDX L COUNT,-1 DONE 10 RETRIES YET DK002560 0132 0 70CA MDX SBA12 NO DK002570 0133 0 C205 LD 2 D0001-BUSY READ ERROR DK002580 0134 0 4009 BSI SBRTC YES, CHECK USER OPTION DK002590 0135 0 70C7 MDX SBA12 RETRY REQUESTED DK002600 0136 0 1810 SBA30 SRA 16 DK002610 0137 0 D222 STO 2 FIRST-BUSY DK002620 0138 0 0A0C XIO 2 IREAD-BUSY DK002630 0139 0 70BA MDX DK71 DK002640 013A 0 1810 SBA34 SRA 16 DK002650 013B 0 D222 STO 2 FIRST-BUSY DK002660 013C 0 0A0A XIO 2 CNTRL-BUSY DK002670 013D 0 70B6 MDX DK71 DK002680 * DK002690 * SBRTC - CHECK USER ERROR OPTION DK002700 * DK002710 013E 0 0000 SBRTC DC 0 DK002720 013F 0 1890 SRT 16 SAVE ERROR CODE DK002730 0140 0 C212 LD 2 SETID-BUSY DK002740 0141 0 18D0 RTE 16 PUT SECT ID IN Q REG DK002750 0142 00 44000000 SBC12 BSI L 0 EXIT TO USER ROUTINE DK002760 0144 01 4C1800C6 BSC L DK44,&- A REG #0, TERMINATE DK002770 0146 01 740A014E MDX L COUNT,&10 DK002780 0148 01 4C80013E BSC I SBRTC A REG NOT #0, RETRY DK002790 * DK002800 * DK002810 * DK002820 014A 0 0000 BUSY DC 0 ROUTINE BUSY IND DK002830 014B 1 00DA ADDR4 DC DK54 DK002840 014C 1 00C6 DC DK44 DK002850 014D 1 00E6 DC DK58 DK002860 014E 0 000A COUNT DC &10 RETRY COUNTER DK002870 014F 0 0001 D0001 DC &1 DK002880 0150 0 0002 D0002 DC &2 DK002890 0151 0 0100 H0100 DC /0100 DK002900 0152 0 0180 H0180 DC /0180 DK002910 0154 0000 BSS E 0 DK002920 0154 0 0000 CNTRL DC 0 IOCC TO SEEK TRACKS E DK002930 0155 0 0400 DC /0400 O DK002940 0156 0 0000 IREAD DC 0 IOCC TO INITIALIZE READ E DK002950 0157 0 0600 DC /0600 O DK002960 0158 0 0000 IWRTE DC 0 IOCC TO INITIALIZE WRITE E DK002970 0159 0 0500 DC /0500 O DK002980 015A 1 016F ADDRB DC CHEK DK002990 015B 0 0700 SENSE DC /0700 IOCC TO SENSE DEVICE O DK003000 015C 0 0000 SETID DC 0 TRACK/SECTOR ID WORD DK003010 015D 0 0000 TRACK DC 0 REQUESTED TRACK DK003020 015E 0 5000 H5000 DC /5000 DK003030 015F 0 5001 H5001 DC /5001 DK003040 0160 0 0FFF H0FFF DC /0FFF DK003050 0161 0 0000 SAV1 DC 0 DK003060 0162 0 00F0 H00F0 DC /00F0 DK003070 * DK003080 0163 0 0005 D0005 DC &5 DK003090 0164 0 000A D0010 DC &10 DK003100 0165 0 0140 D0320 DC &320 DK003110 0166 0 0007 H0007 DC /0007 DK003120 0167 0 0300 H0300 DC /0300 DK003130 0168 0 0658 H0658 DC /0658 DK003140 0169 0 0500 H0500 DC /0500 DK003150 016A 0 FFF8 HFFF8 DC /FFF8 DK003160 016B 0 7004 H7004 DC /7004 DK003170 016C 0 0000 FIRST DC 0 DK003180 016D 1 0102 ADDRA DC SBA13 DK003190 016E 1 00FB DC SBA10 DK003200 016F 0 0001 CHEK DC 1 TEMP AREA - WORD COUNT DK003210 0170 0 0000 DC 0 - DATA WORD DK003220 0171 0 0003 D0003 DC &3 DK003230 0172 * END DK003240 * ILS2 02 IL200000 * IL200030 * STANDARD INTERR LEVEL ROUTINE %1 DEV< IL200040 * IL200050 ADDR DC INT1 DISK0&4 IL200060 0001 0 0000 INT DC 0 IL200070 0002 0 D80D STD TEMPX SAVE STATUS IL200080 0003 0 2804 STS INT12 IL200090 0004 0 6906 STX 1 XR1&1 IL200100 LD AREAX OBTAIN IOCC FOR DSW SENSE IL200110 0006 01 44800000 BSI I ADDR GO TO ISS ROUTINE IL200120 0008 0 2000 INT12 LDS 0 IL200130 LDD TEMPX RESTORE STATUS IL200140 000A 00 65000000 XR1 LDX L1 0 IL200150 000C 01 4CC00001 BOSC I INT EXIT & TURN OFF INT LEVEL IL200160 AREAX DC /2701 # 2310 DISK ** IL200170 TEMPX BSS E 2 C %A & Q REGISTERS< IL200180 * CYPL4040 ORG /1F20 CYPL4050 CDBUF DC 80 CARD BUFFER. CYPL4060 BSS 81 CYPL4070 WDBUF BSS 60 CYPL4090 * CYPL4100 ORG /1FFE CYPL6000 BSC L SUPVS RETURN LINK TO PROGRAM. CYPL6010 END SUPVS CYPL9990