ASM1130 CROSS ASSEMBLER V1.22 -- V2M12 -- Sun Nov 1 19:25:08 2020 Source File: \t4sdfio.asm LIBF SDFIO FORTRAN DISK FILE RD/WRT 2 | *************************************************** T4A00020 3 | *STATUS-VERSION 2, MODIFICATION 7 * T4A00030 4 | * * T4A00040 5 | *FUNCTION/OPERATION- * T4A00050 6 | * * SERVICES THE DISK I/O STATEMENTS * T4A00060 7 | * * SUPPORTED BOTH STANDARD AND EXTENDED PREC * T4A00070 8 | * * ROUTINE REWRITTEN IN MOD 7 T4A00080 9 | * * T4A00090 10 | *ENTRY POINTS- * T4A00100 11 | * LIBF SDFIO CALL TO INITIALIZE * T4A00110 12 | * DC PRECISION * T4A00120 13 | * * T4A00130 14 | * LIBF SDRED CALL TO READ * T4A00140 15 | * DC ADDR1 ADDR OF FILE NO. * T4A00150 16 | * DC ADDR2 ADDR OF RCD NO. * T4A00160 17 | * * T4A00170 18 | * LIBF SDWRT CALL TO WRITE * T4A00180 19 | * DC ADDR1 ADDR OF FILE NO. * T4A00190 20 | * DC ADDR2 ADDR OF RCD NO. * T4A00200 21 | * * T4A00210 22 | * LIBF SDI CALL FOR NON-SUBSC INTGER* T4A00220 23 | * DC ADDR ADDRESS OF VARIABLE * T4A00230 24 | * * T4A00240 25 | * LIBF SDF CALL FOR NON-SUBSC REAL * T4A00250 26 | * DC ADDR ADDR OF VARIABLE * T4A00260 27 | * * T4A00270 28 | * LIBF SDIX CALL FOR SUBSC INTEGER * T4A00280 29 | * DC ADDR ADDR OF BASE VARIABLE * T4A00290 30 | * XR1 CONTAINS SUBSCRIPT * T4A00300 31 | * * T4A00310 32 | * LIBF SDFX CALL FOR SUBSC REAL * T4A00320 33 | * DC ADDR ADDR OF BASE VARIABLE * T4A00330 34 | * XR1 CONTAINS SUBSCRIPT * T4A00340 35 | * * T4A00350 36 | * LIBF SDAI CALL FOR INTEGER ARRAY * T4A00360 37 | * DC ADDR ADDR FIRST ELT OF ARRAY * T4A00370 38 | * DC COUNT COUNT OF ELT IN ARRAY * T4A00380 39 | * * T4A00390 40 | * LIBF SDAF CALL FOR REAL ARRAY * T4A00400 41 | * DC ADDR ADDR FIRST ELT OF ARRAY * T4A00410 42 | * DC COUNT COUNT OF ELT IN ARRAY * T4A00420 43 | * * T4A00430 44 | * LIBF SDCOM CALL FOR I/O COMPLETE * T4A00440 45 | * * T4A00450 46 | *INPUT-N/A * T4A00460 47 | * * T4A00470 48 | *OUTPUT-N/A * T4A00480 49 | * * T4A00490 50 | *EXTERNAL REFERENCES * T4A00500 51 | * SUBROUTINES * T4A00510 52 | * * DZ000 * T4A00520 53 | * * PAUSE T4A00530 54 | * COMMA/DCOM- * T4A00540 55 | * * $EXIT * T4A00550 56 | * * $PRET * T4A00560 57 | * * $FPAD * T4A00570 58 | * * $WRD1 * T4A00580 59 | * * $DBSY * T4A00590 60 | * * T4A00600 61 | *EXITS- * T4A00610 62 | * NORMAL- * T4A00620 63 | * *RETURN TO LAST CALL PARAMETER + 1 * T4A00630 64 | * ERROR- * T4A00640 65 | * *CALL EXIT IF FILE NOT FOUND * T4A00650 66 | * * T4A00660 67 | *TABLES- * T4A00670 68 | * DEFINE FILE ENTRY TABLE ENTRIES (7 WORDS * T4A00680 69 | * PER FILE) IMMEDIATELY FOLLOWS CORE IMAGE * T4A00690 70 | * HEADER. IT IS CREATED BY THE COMPILER OR * T4A00700 71 | * ASSEMBLER AS PART OF THE MAINLINE PROGRAM.* T4A00710 72 | * IT IS MODIFIED BY THE CORE LOAD BUILDER. * T4A00720 73 | * IT IS USED TO CONNECT LOGICAL FILE NUMBER * T4A00730 74 | * REFERENCES TO FILE LOCATIONS ON DISK. * T4A00740 75 | * * T4A00750 76 | *WORK AREAS- * T4A00760 77 | * 29TH WORD OF CORE IMAGE HEADER IS CHECKSUM* T4A00770 78 | * OF CORE IMAGE HEADER AND FILE ENTRY TABLE.* T4A00780 79 | * * T4A00790 80 | * ATTRIBUTES-N/A * T4A00800 81 | * * T4A00810 82 | * NOTES-N/A * T4A00820 83 | * * T4A00830 84 | *************************************************** T4A00840 85 | * EJCT BLK REMOVED T4A00850 86 | LIBR T4A00860 87 | ENT SDFIO INITIALIZATION T4A00870 88 | ENT SDAF REAL ARRAY T4A00880 89 | ENT SDAI INTEGER ARRAY T4A00890 90 | ENT SDCOM READ/WRITE COMPLETE T4A00900 91 | ENT SDF UNSUBSCRIPTED REAL T4A00910 92 | ENT SDFX SUBSCRIPTED REAL T4A00920 93 | ENT SDI UNSUBSCRIPTED INTEGER T4A00930 94 | ENT SDIX SUBSCRIPTED INTEGER T4A00940 95 | ENT SDRED READ T4A00950 96 | ENT SDWRT WRITE T4A00960 97 | * T4A00970 0028 98 | $PRET EQU /0028 TRAP FOR PREOPERATIVE I/O T4A00980 99 | * ERRORS T4A00990 0038 100 | $EXIT EQU /0038 ENTRY PT FOR EXIT/CALL T4A01000 101 | * EXIT STMNT T4A01010 007B 102 | $WRD1 EQU /007B ADDR OF CORE IMAGE HEADER T4A01020 0095 103 | $FPAD EQU /0095 ADDR OF FILES TABLE T4A01030 00EE 104 | $DBSY EQU /00EE NON-ZERO IF DISKZ IS BUSY T4A01040 00F2 105 | DZ000 EQU /00F2 DISK I/O ROUTINE T4A01050 106 | * T4A01060 107 | * CALCULATE, CHECK CHECK-SUM OF T4A01070 108 | * CI HEADER AND DEFINE FILE TABLES. T4A01080 109 | * T4A01090 0000 0000 110 | SI000 DC *-* LINK T4A01100 0001 6A16 111 | STX 2 SI040+1 SAVE XR2 T4A01110 0002 6680 007B 112 | LDX I2 $WRD1 SET CI HEADER POINTER T4A01120 0004 C203 113 | LD 2 3 FILE COUNT T4A01130 0005 A01C 114 | M SI091 MULTIPLY BY 7 T4A01140 0006 1090 115 | SLT 16 T4A01150 0007 8204 116 | A 2 4 ADD CI HEADER LENGTH T4A01160 0008 D01A 117 | STO SI092 SAVE IN COUNTER T4A01170 0009 8200 118 | SI010 A 2 0 ADD WORD T4A01180 000A 4802 119 | BSC C SKIP IF NO CARRY T4A01190 000B 8015 120 | A SI900+1 ADD 1 T4A01200 000C 7201 121 | MDX 2 1 INCREMENT TO NEXT WORD T4A01210 000D 74FF 0023R 122 | MDX L SI092,-1 SKIP IF THROUGH T4A01220 000F 70F9 123 | MDX SI010 CONTINUE CHECK-SUMMING T4A01230 124 | * T4A01240 0010 7400 00B9R 125 | MDX L SI933,0 SKIP IF INITIAL CALL T4A01250 0012 7008 126 | MDX SI050 BRANCH IF CHECK T4A01260 127 | * T4A01270 128 | * INITIALIZE CHECK-SUM T4A01280 129 | * T4A01290 0013 6680 007B 130 | LDX I2 $WRD1 T4A01300 0015 F00E 131 | EOR SI093 COMPLIMENT CHECK-SUM T4A01310 0016 D21C 132 | STO 2 28 STORE IN HEADER T4A01320 133 | * T4A01330 0017 6600 0000 134 | SI040 LDX L2 *-* RESTORE XR2 T4A01340 0019 4C80 0000R 135 | BSC I SI000 RETURN T4A01350 136 | * T4A01360 137 | * CHECK CHECK-SUM T4A01370 138 | * T4A01380 001B 8005 139 | SI050 A SI900+1 ADD 1 TO CHECK SUM T4A01390 001C 4C18 0017R 140 | BSC L SI040,+- RETURN IF SUM IS ZERO T4A01400 141 | * T4A01410 001E C006 142 | LD SI094 INDICATE ERROR F10A T4A01420 001F 7071 143 | MDX SI121 GO DISPLAY ERROR T4A01430 144 | * T4A01440 145 | * T4A01450 0020 146 | BSS E 0 T4A01460 0020 0000 147 | SI900 DC 0 DOUBLE WORD (E) T4A01470 0021 0001 148 | DC 1 *ONE (O) T4A01480 0022 0007 149 | SI091 DC 7 USEFUL CONSTANT T4A01490 0023 0000 150 | SI092 DC *-* COUNTER FOR CHECK-SUM T4A01500 0024 FFFF 151 | SI093 DC /FFFF USEFUL CONSTANT T4A01510 0025 F10A 152 | SI094 DC /F10A BAD CHECK-SUM ERROR CODE T4A01520 0026 F103 153 | SI095 DC /F103 NOT INITIALIZED ERROR CODE T4A01530 0027 0000 154 | SI910 DC *-* NUMBER OF FILES T4A01540 0028 7FFF 155 | SI911 DC /7FFF MASK TO CLEAR SIGN BIT T4A01550 0029 0095 156 | SI926 DC $FPAD ADDR OF LOGICAL DRIVE ADDR T4A01560 002A 00BAR 157 | SI937 DC SI934 BASE ADDR OF PREC TABLE T4A01570 158 | * T4A01580 002B 2000 159 | SDF LDS 0 REAL VARIABLE T4A01590 002C 6680 0000 160 | LDX I2 *-* ENTRY POINT T4A01600 002E 7007 161 | MDX SI060 GO TO GET COUNT T4A01610 162 | * T4A01620 002F 2000 163 | SDAF LDS 0 REAL ARRAY T4A01630 0030 6680 0000 164 | LDX I2 *-* ENTRY POINT T4A01640 0032 7008 165 | MDX SI064 GO TO INTEGER ARRAY T4A01650 166 | * T4A01660 0033 2002 167 | SDI LDS 2 INTEGER VARIABLE T4A01670 0034 6680 0000 168 | LDX I2 *-* ENTRY POINT T4A01680 0036 C8E9 169 | SI060 LDD SI900 PUT ONE IN EXTENSION T4A01690 0037 7012 170 | MDX SI072 GO TO COMMON ROUTINE T4A01700 171 | * T4A01710 0038 2002 172 | SDAI LDS 2 INTEGER ARRAY T4A01720 0039 6680 0000 173 | LDX I2 *-* ENTRY POINT T4A01730 003B C201 174 | SI064 LD 2 1 GET COUNT OF ELEMENTS IN T4A01740 003C 18D0 175 | RTE 16 *ARRAY INTO EXTENSION T4A01750 003CR 176 | SI902 EQU *-1 INSTRUCTION CONSTANT T4A01760 003D C200 177 | LD 2 0 LOAD ADDR OF 1ST ELT T4A01770 003E 7201 178 | MDX 2 1 UP XR2 FOR EXIT ADDR T4A01780 003F 2878 179 | STS SI932 SAVE STATUS (REAL/INTEGER) T4A01790 0040 700B 180 | MDX SI074 GO TO COMMON ROUTINE T4A01800 181 | * T4A01810 0041 2000 182 | SDFX LDS 0 REAL SUBSCRIPTED VARIABLE T4A01820 0042 6680 0000 183 | LDX I2 *-* ENTRY POINT T4A01830 0044 7003 184 | MDX SI070 GO TO INTEGER SUBSCRIPTED T4A01840 185 | * T4A01850 0045 2002 186 | SDIX LDS 2 INTEGER SUBSCRIPTED VAR T4A01860 0046 6680 0000 187 | LDX I2 *-* ENTRY POINT T4A01870 0048 696D 188 | SI070 STX 1 SI930 GET DISPLACEMENT FROM BASE T4A01880 0049 C86C 189 | LDD SI930 ADDR (CONTENTS OF XR1) T4A01890 004A 286D 190 | SI072 STS SI932 SAVE REAL/INTEGER INDR T4A01900 004B 8200 191 | A 2 0 ADD BASE ADDR TO GET T4A01910 004C D875 192 | SI074 STD SI961 ADDR OF ELEMENT T4A01920 004D C06A 193 | LD SI932 CALCULATE ADDR T4A01930 004E 80DB 194 | A SI937 *OF PRECISION T4A01940 004F D001 195 | STO *+1 *CONSTANT T4A01950 0050 C400 0000 196 | LD L *-* GET PRECISION T4A01960 0052 D400 0130R 197 | STO L SI325+1 SAVE PRECISION T4A01970 0054 806D 198 | A SI961 INCREMENT USER VARIABLE T4A01980 0055 90CB 199 | S SI900+1 *ADDR BY T4A01990 0056 D06B 200 | STO SI961 *PRECISION - 1 T4A02000 0057 7201 201 | MDX 2 1 UP XR2 FOR RETURN T4A02010 0058 4C00 00DFR 202 | BSC L SI200 GET SET UP FOR RETURN T4A02020 203 | * T4A02030 005A 2003 204 | SDRED LDS 3 SET INDR TO READ T4A02040 005B 6680 0000 205 | LDX I2 *-* ENTRY POINT T4A02050 005D C0DE 206 | LD SI902 GET RTE 16 INSTRUCTION T4A02060 005E 7004 207 | MDX SI080 GO TO COMMON ROUTINE T4A02070 208 | * T4A02080 005F 2001 209 | SDWRT LDS 1 SET DISK WRITE INDICATOR T4A02090 0060 6680 0000 210 | LDX I2 *-* SET PT AT PARAMATERS T4A02100 0062 C051 211 | LD SI920 GET NOP INSTRUCTION T4A02110 0063 D400 0122R 212 | SI080 STO L SI310 MODIFY INSTRUCTION T4A02120 0065 D400 0146R 213 | STO L SI352 MODIFY INSTRUCTION T4A02130 0067 2851 214 | STS SI933 SAVE INDR T4A02140 0068 6A10 215 | STX 2 SI100+1 SAVE XR2 T4A02150 0069 697B 216 | STX 1 SI220+1 SAVE XR1 T4A02160 217 | * T4A02170 006A 1010 218 | SLA 16 CLEAR SWITCH FOR T4A02180 006B D072 219 | STO SI099 *RCD TOO SMALL T4A02190 006C C051 220 | LD SDFIO HAS SDFIO BEEN INITIALIZED T4A02200 006D 4C18 0078R 221 | BSC L SI100,+- BRANCH IF YES T4A02210 222 | * T4A02220 006F C050 223 | LD SDFIO+2 IS SDFIO REFERENCED BY A T4A02230 0070 4C18 0076R 224 | BSC L SI090,+- LIBF, BR IF NOT T4A02240 225 | * T4A02250 0072 C480 00C0R 226 | LD I SDFIO+2 WAS IT EVER INITIALIZED T4A02260 0074 4C20 00BER 227 | BSC L SDFIO,Z IF YES, INITIALIZE AGAIN T4A02270 228 | * T4A02280 0076 C0AF 229 | SI090 LD SI095 LOAD ERROR CODE F103 T4A02290 0077 7032 230 | MDX SI150 GO TO ERROR ROUTINE T4A02300 231 | * T4A02310 0078 6600 0000 232 | SI100 LDX L2 *-* RESTORE XR2 T4A02320 007A 6100 233 | LDX 1 0 SET COUNT T4A02330 007B 6947 234 | STX 1 SI962 TO ZERO T4A02340 235 | * T4A02350 007C 4083 236 | BSI SI000 CHECK CHECK-SUM T4A02360 237 | * T4A02370 007D 6580 007B 238 | LDX I1 $WRD1 SET HEADER POINTER T4A02380 007F C103 239 | LD 1 3 LOAD FILE COUNT T4A02390 0080 D0A6 240 | STO SI910 SAVE CNT T4A02400 0081 4C08 0090R 241 | BSC L SI120,+ ERROR IF CNT NOT POS T4A02410 0083 C104 242 | LD 1 4 GET CORE-IMAGE HDR LENGTH T4A02420 0084 D001 243 | STO *+1 T4A02430 0085 7500 0000 244 | MDX L1 *-* INCREMENT PAST HEADER T4A02440 245 | * T4A02450 0087 C680 0000 246 | SI110 LD I2 0 GET FILE NO. FROM LIBF T4A02460 0089 F100 247 | EOR 1 0 IS IT FILE AT PT T4A02470 0089R 248 | SI096 EQU *-1 FILE NOT DEFINED ERR F100 T4A02480 008A 4C18 0092R 249 | BSC L SI130,+- BRANCH IF YES T4A02490 008C 7107 250 | MDX 1 7 MOVE PT TO NEXT TBL ENTRY T4A02500 008D 74FF 0027R 251 | MDX L SI910,-1 DECREMENT FILE COUNT T4A02510 008F 70F7 252 | MDX SI110 CONTINUE CHECK T4A02520 0090 C0F8 253 | SI120 LD SI096 LOAD ERROR CODE F100 T4A02530 0091 7018 254 | SI121 MDX SI150 GO TO ERROR ROUTINE T4A02540 255 | * T4A02550 0092 7202 256 | SI130 MDX 2 2 SET XR2 FOR RETURN T4A02560 0093 6A53 257 | STX 2 SI220+3 TO MAINLINE PROGRAM T4A02570 0094 C104 258 | LD 1 4 GET SECTOR START ADDR T4A02580 0095 4C10 00A0R 259 | BSC L SI140,- IS FILE IN WORKING STORAGE T4A02590 0097 E090 260 | AND SI911 YES, CLEAR SIGN BIT T4A02600 0098 D022 261 | STO SI923 SAVE ADDR T4A02610 0099 180C 262 | SRA 12 GET PROPER FILE PROTECT T4A02620 009A 808E 263 | A SI926 ADDR BY ADDING IDX (FROM T4A02630 009B D001 264 | STO *+1 SRA INSTR) TO ADDR OF 1ST T4A02640 009C C400 0000 265 | LD L *-* ITEM IN $FPAD T4A02650 009E E01E 266 | AND SI925 GET ADDR OF RCD BY ADDING T4A02660 009F 801B 267 | A SI923 FILE PROTECT ADDR TO T4A02670 00A0 D400 0175R 268 | SI140 STO L SI952 SECTOR START ADDR T4A02680 00A2 C680 FFFF 269 | LD I2 -1 GET RECORD NO. FROM LIBF T4A02690 00A4 4C08 00A9R 270 | BSC L SI149,+ BRANCH IF NO. INVALID T4A02700 00A6 9101 271 | S 1 1 SUBTRACT NO. RCDS IN FILE T4A02710 00A7 4C08 00E8R 272 | BSC L SI225,+ BRANCH IF VALID T4A02720 00A9 C009 273 | SI149 LD SI097 LOAD ERROR CODE F101 T4A02730 00AA D010 274 | SI150 STO SI923 STORE TEMPORARY T4A02740 00AB 1706*4885 275 | LIBF PAUSE GO DISPLAY T4A02750 00AC 00BBR 276 | DC SI923 *ERROR CODE T4A02760 00AD 6038 277 | LDX $EXIT TERMINATE EXECUTION T4A02770 00AE C003 278 | SI155 LD SI098 SET UP ERROR /F107 T4A02780 00AF 70FA 279 | MDX SI150 GO DISPLAY T4A02790 00B0 C02B 280 | SI156 LD SI928 LD /F105 T4A02800 00B1 70F8 281 | MDX SI150 BR TO DISP ERROR T4A02810 282 | * T4A02820 00B2 F107 283 | SI098 DC /F107 ERROR CODE T4A02830 00B3 F101 284 | SI097 DC /F101 INVALID RCD NO. ERROR CODE T4A02840 00B4 1000 285 | SI920 NOP INSTRUCTION CONSTANT T4A02850 00B6 286 | BSS E 0 T4A02860 00B6 0000 287 | SI930 DC *-* USED FOR SAVING ADDR (E) T4A02870 00B7 0001 288 | DC 1 *OF ELEMENT IN ARRAY (O) T4A02880 00B8 0000 289 | SI932 DC *-* REAL/INTEGER INDICATOR T4A02890 00B9 0000 290 | SI933 DC *-* READ/WRITE INDICATOR T4A02900 00BA 0000 291 | SI934 DC *-* REAL PRECISION T4A02910 00BB 0000 292 | SI923 DC *-* SECTOR START ADDR T4A02920 00BC 0000 293 | DC *-* INTEGER PREC (SI934+2) T4A02930 00BD 0FFF 294 | SI925 DC /0FFF MASK FOR BUFFER ADDR T4A02940 295 | * T4A02950 00BE 10A0 296 | SDFIO SLT 32 INITIAL CALL TO FIO T4A02960 00BF 6680 0000 297 | LDX I2 *-* ENTRY POINT T4A02970 00C2R 298 | SI961 EQU SDFIO+4 ADDRESS OF ITEM FOR I/O(E) T4A02980 00C3R 299 | SI962 EQU SDFIO+5 NO. OF ITEMS FOR I/O (O) T4A02990 00CER 300 | SI963 EQU SDFIO+16 READ NEEDED INDICATOR T4A03000 00C1 D0FC 301 | STO SDFIO INDICATE SDFIO INITIALIZED T4A03010 00C2 7201 302 | MDX 2 1 MOVE XR2 TO PT AT CALLS T4A03020 00C3 C2FF 303 | LD 2 -1 LOAD PRECISION WORD T4A03030 00C4 100B 304 | SLA 11 PUT IN PRECISION (STANDARD T4A03040 00C5 188C 305 | SRT 12 OR EXTENDED) FOR T4A03050 00C6 D0F3 306 | STO SI934 REAL NUMBERS AND T4A03060 00C7 D0F4 307 | STO SI934+2 INTEGERS T4A03070 00C8 1081 308 | SLT 1 ONE WORD INTEGERS CALLED T4A03080 00C9 4804 309 | BSC E SKIP IF YES T4A03090 00CA 7002 310 | MDX *+2 KEEP SAME PRECISION IF NOT T4A03100 00CB C0EB 311 | LD SI930+1 SET PRECISION FOR INTEGERS T4A03110 00CC D0EF 312 | STO SI934+2 *TO ONE WORD T4A03120 00CD C00F 313 | LD SI929 SET UP RESTART T4A03130 00CE D2FE 314 | STO 2 -2 PROCEDURE T4A03140 00CF C0E9 315 | LD SI933 HAS RD/WRT INDR BEEN SET T4A03150 00D0 4C20 0078R 316 | BSC L SI100,Z RETURN TO SDRED IF RE-INIT T4A03160 317 | * T4A03170 00D2 4400 0000R 318 | BSI L SI000 CALCULATE CHECK-SUM T4A03180 319 | * T4A03190 00D4 4E00 0000 320 | BSC L2 0 RETURN TO MAINLINE T4A03200 321 | * T4A03210 00D6 690E 322 | SDCOM STX 1 SI220+1 WRITE COMPLETE T4A03220 00D7 6680 0000 323 | LDX I2 *-* ENTRY POINT T4A03230 00D9 6A0D 324 | STX 2 SI220+3 SET XR2 FOR RETURN T4A03240 00DA 7079 325 | MDX SI355 CHECK IF DISK WRITE NEEDED T4A03250 326 | * T4A03260 00DB 0640 327 | SI927 DC 1600 SECTOR COUNT OF DISK T4A03270 00DC F105 328 | SI928 DC /F105 ERROR CODE FOR PREC T4A03280 329 | * *EXCEEDS RECORD T4A03290 00DD 7001 330 | SI929 DC /7001 T4A03300 00DE 0000 331 | SI099 DC *-* SW FOR RCD TOO SMALL T4A03310 00DF 6905 332 | SI200 STX 1 SI220+1 SAVE XR1 FOR RETURN T4A03320 00E0 6A06 333 | STX 2 SI220+3 SAVE XR2 FOR RETURN T4A03330 00E1 C0E1 334 | SI210 LD SI962 TEST ARRAY COUNT T4A03340 00E2 4C20 011BR 335 | BSC L SI300,Z CONTINUE IF NON-ZERO T4A03350 00E4 6500 0000 336 | SI220 LDX L1 *-* RETURN TO MAINLINE IF ZERO T4A03360 00E6 4C00 0000 337 | BSC L *-* (ALL ELTS PROCESSED) T4A03370 338 | * T4A03380 00E8 8101 339 | SI225 A 1 1 RESTORE RECORD NO. T4A03390 00E9 8400 016AR 340 | A L SI945 INCREASE NO. BY ONE T4A03400 00EB D580 0003 341 | STO I1 3 STORE IN ASSOCIATED VAR T4A03410 00ED 907C 342 | S SI945 RESTORE RECORD NO. T4A03420 00EE 907B 343 | S SI945 SUBTRACT 1 MORE T4A03430 00EF 1890 344 | SRT 16 DIVIDE RECORD NUMBER-1 BY T4A03440 00F0 A905 345 | D 1 5 *RECORDS PER SECTOR T4A03450 00F1 8400 0175R 346 | A L SI952 INCREMENT SECTOR ADDR IN T4A03460 00F3 D400 0175R 347 | STO L SI952 *I/O BUFFER BY QUOTIENT T4A03470 00F5 18D0 348 | RTE 16 MULTIPLY REMAINDER BY T4A03480 00F6 A102 349 | M 1 2 *NUMBER OF WORDS PER RCD T4A03490 00F7 18D0 350 | RTE 16 MOVE INTO ACCUMULATOR T4A03500 00F8 8102 351 | A 1 2 ADD WORDS/RECORD T4A03510 00F9 D074 352 | STO SI942 DISP FROM END OF BUFFER T4A03520 00FA 6949 353 | STX 1 SI350+1 SAVE FILE TABLE POINTER T4A03530 00FB C073 354 | LD SI922 LOAD END OF BUFFER ADDR T4A03540 00FC 9071 355 | S SI942 SUBTRACT DISPLACEMENT T4A03550 00FD D070 356 | SI240 STO SI942 TO GET BUFFER BASE POINTER T4A03560 00FE C102 357 | LD 1 2 LOAD RECORD LENGTH T4A03570 00FF D025 358 | STO SI315+1 SAVE T4A03580 0100 1010 359 | DIO SLA 16 CLEAR T4A03590 0101 D0CC 360 | STO SI963 *READ NEEDED INDICATOR T4A03600 361 | * T4A03610 0102 C072 362 | LD SI952 IS THIS THE SAME SECTOR T4A03620 0103 906F 363 | S SI948 *USED ON PREVIOUS RD/WRT T4A03630 0104 4C18 0113R 364 | BSC L SI252,+- BRANCH IF YES T4A03640 365 | * T4A03650 0106 1810 366 | SRA 16 SET PARAMETER FOR READ T4A03660 0107 D064 367 | SI250 STO SI940 SAVE READ/WRITE PARAMETER T4A03670 0108 C06C 368 | LD SI952 LD SCTR ADDR T4A03680 0109 E0B3 369 | AND SI925 REMOVE DR CODE T4A03690 010A 90D0 370 | S SI927 COMPARE WITH FULL DISK T4A03700 010B 4C10 00AER 371 | BSC L SI155,- ERROR F107 IF NOT LESS T4A03710 010D C85E 372 | LDD SI940 LOAD DISK I/O PARAMETERS T4A03720 010E 4400 00F2 373 | BSI L DZ000 GO TO DISK READ/WRITE T4A03730 0110 7400 00EE 374 | MDX L $DBSY,0 SKIP IF DISK READY T4A03740 0112 70FD 375 | MDX *-3 LOOP IF DISK BUSY T4A03750 0113 C061 376 | SI252 LD SI952 SAVE CURRENT SECTOR FOR T4A03760 0114 D05E 377 | STO SI948 *NEXT SECTOR COMPARE T4A03770 378 | * T4A03780 0115 C0B8 379 | SI255 LD SI963 TEST READ NEEDED INDICATOR T4A03790 0116 4C18 00E1R 380 | BSC L SI210,+- BRANCH IF OFF T4A03800 0118 7401 0175R 381 | MDX L SI952,1 INCREMENT SECTOR ADDR T4A03810 0119R 382 | SI964 EQU *-1 ADDR OF SCTR ADDR OF BFR T4A03820 011A 703F 383 | MDX SI360 GO CHECK RECORD NO. T4A03830 384 | * T4A03840 011B C056 385 | SI300 LD SI944 GET MDX 2 0 CONSTANT T4A03850 011C 9013 386 | S SI325+1 SUBTRACT PRECISION T4A03860 011D D009 387 | STO SI320 STORE AS MDX 1 -PRECISION T4A03870 388 | * T4A03880 011E C0A3 389 | LD SI961 GET HIGH ADDR USER'S ITEM T4A03890 011F 18D0 390 | RTE 16 *IN EXT T4A03900 0120 C04D 391 | LD SI942 GET I/O BUFFER BASE POINTR T4A03910 0121 8003 392 | A SI315+1 ADD RCD LENGTH LEFT T4A03920 0122 18D0 393 | SI310 RTE 16 RTE 16 / NOP IF RD/WRT T4A03930 0123 D84C 394 | STD SI946 SAVE AS 'TO' AND 'FROM' T4A03940 395 | * T4A03950 0124 6500 0000 396 | SI315 LDX L1 *-* LOAD XR1 RCD LENGTH LEFT T4A03960 0126 7101 397 | MDX 1 1 INCREMENT BY 1 T4A03970 398 | * T4A03980 0127 7100 399 | SI320 MDX 1 *-* -1,-2, OR -3 (-PRECISION) T4A03990 400 | * *SKIP IF WON'T FIT IN RCD T4A04000 0128 7006 401 | MDX SI325 BR RECORD NOT FULL T4A04010 0129 C0B4 402 | LD SI099 TEST FOR RCD LESS T4A04020 012A 4820 403 | BSC Z *PRECISION T4A04030 012B 7084 404 | MDX SI156 BR TO DISP ERROR T4A04040 012C C03D 405 | LD SI945 MAKE SW SI099 T4A04050 012D D0B0 406 | STO SI099 *NON-ZERO T4A04060 012E 7014 407 | MDX SI350 BR RECORD FULL T4A04070 408 | * T4A04080 012F 6600 0000 409 | SI325 LDX L2 *-* LOAD XR2 WITH PRECISION T4A04090 410 | * T4A04100 0131 C480 0171R 411 | SI330 LD I SI947 GET 'FROM' WORD T4A04110 412 | * T4A04120 0133 D480 0170R 413 | STO I SI946 STORE IN 'TO' WORD T4A04130 414 | * T4A04140 0135 1010 415 | SLA 16 CLEAR SWITCH FOR T4A04150 0136 D0A7 416 | STO SI099 *RCD TOO SMALL T4A04160 0137 C838 417 | LDD SI946 DECREMENT 'FROM' AND T4A04170 0138 9831 418 | SD SI945 *'TO' ADDRESSES T4A04180 0139 D836 419 | STD SI946 *BY 1 T4A04190 420 | * T4A04200 013A 72FF 421 | MDX 2 -1 DECR ELEMENT PREC COUNT T4A04210 013B 70F5 422 | MDX SI330 BR, LOOP FOR WORDS/ELEMENT T4A04220 423 | * T4A04230 013C 74FF 00C3R 424 | MDX L0 SI962,-1 DECR VARIABLE COUNT BY 1 T4A04240 013E 70E8 425 | MDX SI320 BR, LOOP FOR VARIABLES T4A04250 426 | * T4A04260 013F 71FF 427 | MDX 1 -1 ADJUST RECORD LENGTH LEFT T4A04270 0140 1000 428 | NOP MAY SKIP T4A04280 429 | * T4A04290 0141 69E3 430 | STX 1 SI315+1 SAVE NEW RCD LENGTH LEFT T4A04300 0142 70A1 431 | MDX SI220 RETURN FROM THIS LIBF T4A04310 432 | * T4A04320 0143 6500 0000 433 | SI350 LDX L1 *-* RESTORE XR1 FILE TABLE PTR T4A04330 0145 C82A 434 | LDD SI946 GET NEXT USER ADDRESS T4A04340 0146 18D0 435 | SI352 RTE 16 RTE 16 / NOP IF RD/WRT T4A04350 0147 18D0 436 | RTE 16 EXCHANGE ACC & EXT T4A04360 0148 D400 00C2R 437 | STO L SI961 SAVE NEXT USER ADDRESS T4A04370 014A C102 438 | LD 1 2 SET NO. WORDS REMAINING T4A04380 014B D0D9 439 | STO SI315+1 *TO WORDS/RECORD T4A04390 014C C021 440 | LD SI942 DECREMENT I/O BUFFER T4A04400 014D 9102 441 | S 1 2 *BASE ADDR OF RECORD T4A04410 014E D01F 442 | STO SI942 *BY WORDS/RECORD T4A04420 014F 90C9 443 | S SI964 BR IF ROOM IN BUFFER T4A04430 0150 4C10 015AR 444 | BSC L SI360,- *FOR ANOTHER RECORD T4A04440 0152 6C00 00CER 445 | STX L0 SI963 SET READ NEEDED INDR ON T4A04450 446 | * T4A04460 0154 6680 00B9R 447 | SI355 LDX I2 SI933 LOAD XR2 WITH RD/WRT INDR T4A04470 0156 72FE 448 | MDX 2 -2 SKIP IF WRITE T4A04480 0157 70BD 449 | MDX SI255 DISK OP NOT NEEDED FOR RD T4A04490 0158 C011 450 | LD SI945 LOAD WRITE PARAMETER T4A04500 0159 70AD 451 | MDX SI250 GO WRITE UPDATED BUFFER T4A04510 452 | * T4A04520 015A C580 0003 453 | SI360 LD I1 3 LOAD NO. OF RCD IN FILE T4A04530 015C 9101 454 | S 1 1 SUBTRACT MAX NO. OF RECDS T4A04540 015D 4C30 00A9R 455 | BSC L SI149,-Z ERROR IF ATTEMPT TO USE T4A04550 456 | * MORE RCDS THAN SPECIFIED T4A04560 015F 8101 457 | A 1 1 RESTORE REC NO. T4A04570 0160 8009 458 | A SI945 ADD ONE T4A04580 0161 D580 0003 459 | STO I1 3 STORE ASSOCIATED VARIABLE T4A04590 460 | * T4A04600 0163 C400 00CER 461 | LD L SI963 IS READ NEEDED INDR ON T4A04610 0165 4C18 011BR 462 | BSC L SI300,+- BR TO DO NEXT RCD IF OFF T4A04620 463 | * T4A04630 0167 C007 464 | LD SI922 SET BASE ADDR TO FIRST T4A04640 0168 9102 465 | S 1 2 *RECORD IN BUFFER T4A04650 0169 7093 466 | MDX SI240 BR TO READ NEXT SECTOR T4A04660 467 | * T4A04670 016A 468 | BSS E 0 T4A04680 016A 0001 469 | SI945 DC 1 ONE (E) T4A04690 016B 0001 470 | DC 1 ONE (O) T4A04700 016C 0000 471 | SI940 DC *-* READ/WRITE CODE FOR I/O(E) T4A04710 016D 0174R 472 | DC SI952-1 BUFFER ADDR WORD (O) T4A04720 016E 0000 473 | SI942 DC *-* BUFFER BASE ADDR OF RCD T4A04730 016F 02B5R 474 | SI922 DC SI952+320 LAST WORD OF I/O BUFFER T4A04740 0170 0000 475 | SI946 DC *-* 'TO' ADDRESS (E) T4A04750 0171 0000 476 | SI947 DC *-* 'FROM' ADDRESS (O) T4A04760 0172 7200 477 | SI944 MDX 2 0 CONSTANT, BORROW DURING T4A04770 478 | * *SUBTRACT CHANGES XR2 TO T4A04780 479 | * *XR1 T4A04790 480 | * T4A04800 0173 0000 481 | SI948 DC *-* PREVIOUS SECTOR USED T4A04810 0174 0140 482 | DC 320 BUFFER WD COUNT FOR I/O(E) T4A04820 0175 0000 483 | SI952 DC *-* DISK ADDR FOR I/O (O) T4A04830 0176 484 | BSS 320 BUFFER FOR I/O T4A04840 02B6 485 | END T4A04850 There were no errors in this assembly === CROSS REFERENCES ========================================================== Name Val Defd Referenced $DBSY 00EE 104 374 $EXIT 0038 100 277 $FPAD 0095 103 156 $PRET 0028 98 $WRD1 007B 102 112 130 238 DIO 0100R 359 DZ000 00F2 105 373 SDAF 002FR 163 SDAI 0038R 172 SDCOM 00D6R 322 SDF 002BR 159 SDFIO 00BER 296 220 223 226 227 298 299 300 301 SDFX 0041R 182 SDI 0033R 167 SDIX 0045R 186 SDRED 005AR 204 SDWRT 005FR 209 SI000 0000R 110 135 236 318 SI010 0009R 118 123 SI040 0017R 134 111 140 SI050 001BR 139 126 SI060 0036R 169 161 SI064 003BR 174 165 SI070 0048R 188 184 SI072 004AR 190 170 SI074 004CR 192 180 SI080 0063R 212 207 SI090 0076R 229 224 SI091 0022R 149 114 SI092 0023R 150 117 122 SI093 0024R 151 131 SI094 0025R 152 142 SI095 0026R 153 229 SI096 0089R 248 253 SI097 00B3R 284 273 SI098 00B2R 283 278 SI099 00DER 331 219 402 406 416 SI100 0078R 232 215 221 316 SI110 0087R 246 252 SI120 0090R 253 241 SI121 0091R 254 143 SI130 0092R 256 249 SI140 00A0R 268 259 SI149 00A9R 273 270 455 SI150 00AAR 274 230 254 279 281 SI155 00AER 278 371 SI156 00B0R 280 404 SI200 00DFR 332 202 SI210 00E1R 334 380 SI220 00E4R 336 216 257 322 324 332 333 431 SI225 00E8R 339 272 SI240 00FDR 356 466 SI250 0107R 367 451 SI252 0113R 376 364 SI255 0115R 379 449 SI300 011BR 385 335 462 SI310 0122R 393 212 SI315 0124R 396 358 392 430 439 SI320 0127R 399 387 425 SI325 012FR 409 197 386 401 SI330 0131R 411 422 SI350 0143R 433 353 407 SI352 0146R 435 213 SI355 0154R 447 325 SI360 015AR 453 383 444 SI900 0020R 147 120 139 169 199 SI902 003CR 176 206 SI910 0027R 154 240 251 SI911 0028R 155 260 SI920 00B4R 285 211 SI922 016FR 474 354 464 SI923 00BBR 292 261 267 274 276 SI925 00BDR 294 266 369 SI926 0029R 156 263 SI927 00DBR 327 370 SI928 00DCR 328 280 SI929 00DDR 330 313 SI930 00B6R 287 188 189 311 SI932 00B8R 289 179 190 193 SI933 00B9R 290 125 214 315 447 SI934 00BAR 291 157 306 307 312 SI937 002AR 157 194 SI940 016CR 471 367 372 SI942 016ER 473 352 355 356 391 440 442 SI944 0172R 477 385 SI945 016AR 469 340 342 343 405 418 450 458 SI946 0170R 475 394 413 417 419 434 SI947 0171R 476 411 SI948 0173R 481 363 377 SI952 0175R 483 268 346 347 362 368 376 381 472 474 SI961 00C2R 298 192 198 200 389 437 SI962 00C3R 299 234 334 424 SI963 00CER 300 360 379 445 461 SI964 0119R 382 443