COMPILATION LISTING OF SEGMENT tape_ioi_io Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-04-18_1118.70_Tue_mdt Options: optimize list 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* *********************************************************** */ 8 9 10 11 /****^ HISTORY COMMENTS: 12* 1) change(86-02-13,GWMay), approve(86-02-13,MCR7337), audit(86-03-11,Farley), 13* install(86-03-17,MR12.0-1030): 14* old history comments: 15* Written May to July 1982 by Chris Jones. 16* Various bugfixes by Chris Jones, December 1982 to November 1983. 17* Modified 1985-03-14, BIM: set code right on blank tape. 18* Modified 04/25/85 by Chris Jones to properly ignore extra statuses. 19* Modified 05/02/85 by Chris Jones to set code (NOT result) to 20* error_table_$blank_tape. 21* 2) change(86-02-13,GWMay), approve(86-02-13,MCR7337), audit(86-03-11,Farley), 22* install(86-03-17,MR12.0-1030): 23* removed a section of code from the end of "missing_statuses" which checked 24* for the initiate bit to be on and set the status index up by 1. This code 25* would not always work with the FIPS tape drives. 26* 3) change(87-07-06,Hartogs), approve(87-07-06,MCR7726), 27* audit(87-08-27,GWMay), install(87-08-27,MR12.1-1094): 28* A) If first record is written, set tai.at_bot to "0"b 29* B) Set tai.density_command for use by error_retry. 30* C) Added an unspec (tai.order_data(*)) = ""b to compensate for a 31* bug in ioi_. 32* END HISTORY COMMENTS */ 33 34 35 /* This is where all the tape tape_ioi_ I/O is done. There are entries to read, write, perform 36* random order commands, and check on any of the preceding. */ 37 38 /* format: style4,delnl,insnl,indattr,ifthen,declareind10,dclind10 */ 39 tape_ioi_io: 40 proc; 41 42 /**** NOTE 43* This program uses the "code" output argument ambiguously. 44* For some entrypoints, such as check_write, code will be set 45* nonzero even though the other output arguments are valid. 46* In particular, check_write will return code = error_table_$device_end 47* AND TAPE_IO_EOT when the EOT reflector is detected on write. */ 48 49 /* Parameters */ 50 51 dcl p_buffer_data_ptr ptr parameter; /* (I/O) pointer to the data to be or just processed */ 52 dcl p_code fixed bin (35) parameter; /* (O) system status code */ 53 dcl p_icount fixed bin parameter; /* (I) count of orders to be done */ 54 dcl p_ocount fixed bin parameter; /* (O) count of orders actually done */ 55 dcl p_data_len fixed bin (21) parameter; /* (I/O) data count in characters */ 56 dcl p_order_data_ptr ptr parameter; /* (I) data area for order commands */ 57 dcl p_order char (4) parameter; /* (I) the order to be performed */ 58 dcl p_result_idx fixed bin parameter; /* (O) encoding of relative success of operation */ 59 dcl p_tioi_id bit (36) aligned parameter;/* (I) tape_ioi_ activation ID */ 60 dcl p_write_buffers (*) ptr parameter; /* (I) list of buffers to write */ 61 62 /* Automatic variables */ 63 64 dcl auto_special_status bit (36) aligned; 65 dcl buffer_idx fixed bin; 66 dcl buffer_ptr ptr; 67 dcl code fixed bin (35); 68 dcl device_command bit (6); 69 dcl idcw_idx fixed bin; 70 dcl lost_statuses fixed bin; 71 dcl next_buffer_offset fixed bin (18) unsigned unaligned; 72 dcl recovery_strategy fixed bin (3) unsigned; 73 dcl semi_queued_offset fixed bin (18) unsigned unaligned; 74 dcl status_class char (2); 75 dcl status_present bit (1) aligned; 76 77 /* Static storage */ 78 79 dcl order_mnemonics (0:21) char (4) static options (constant) 80 init ("rdy", "bsf", "bsr", "fsf", "fsr", "eof", "ers", "dse", "rew", "run", "lod", "rqs", 81 "rss", "rqd", "rsd", "den", "per", "pro", "rsv", "rel", "rcr", "wcr"); 82 83 dcl order_commands (0:21) bit (6) static options (constant) 84 init ("00"b3, "47"b3, "46"b3, "45"b3, "44"b3, "55"b3, "54"b3, "73"b3, "70"b3, "72"b3, 85 "75"b3, "00"b3, "40"b3, "50"b3, "51"b3, "77"b3, "63"b3, "62"b3, "66"b3, "67"b3, "26"b3, 86 "16"b3); 87 88 dcl densities (5) fixed bin static options (constant) init (200, 556, 800, 1600, 6250); 89 dcl density_commands (5) bit (6) static options (constant) init ("64"b3, "61"b3, "60"b3, "65"b3, "41"b3); 90 91 dcl BITS_PER_BYTE fixed bin static options (constant) init (9); 92 dcl BITS_PER_CHAR fixed bin static options (constant) init (6); 93 dcl BITS_PER_WORD fixed bin static options (constant) init (36); 94 dcl BYTES_PER_DCW_TALLY fixed bin static options (constant) init (16384); 95 dcl BYTES_PER_WORD fixed bin static options (constant) init (4); 96 dcl CHARS_PER_WORD fixed bin static options (constant) init (6); 97 dcl ORDERS_PER_IDCW_TALLY fixed bin static options (constant) init (64); 98 dcl WORDS_PER_DCW_TALLY fixed bin static options (constant) init (4096); 99 100 dcl TIMEOUT_IO fixed bin (71) static options (constant) init (30000000); 101 dcl TIMEOUT_ORDER fixed bin (71) static options (constant) init (10000000); 102 dcl TWENTY_SECONDS fixed bin (71) static options (constant) init (20000000); 103 dcl MAX_RETRY_COUNT fixed bin static options (constant) init (10); 104 105 /* Externals */ 106 107 dcl ioi_$connect entry (fixed bin, fixed bin (18), fixed bin (35)); 108 dcl ioi_$get_detailed_status 109 entry (fixed bin, bit (1) aligned, bit (216), fixed bin (35)); 110 dcl ioi_$get_special_status 111 entry (fixed bin, bit (1) aligned, bit (36) aligned, fixed bin (35)); 112 dcl ioi_$timeout entry (fixed bin, fixed bin (71), fixed bin (35)); 113 dcl ipc_$drain_chn entry (fixed bin (71), fixed bin (35)); 114 dcl tape_ioi_buffer_man$internal_set_buffer_ready 115 entry (ptr, ptr); 116 dcl tape_ioi_error_retry entry (ptr, ptr, ptr, fixed bin (35)); 117 dcl tape_ioi_error_retry$backspace 118 entry (ptr, ptr, ptr, fixed bin, fixed bin (35)); 119 dcl tape_ioi_error_retry$eof 120 entry (ptr, fixed bin (35)); 121 dcl tape_ioi_hardware_status$hardware_status 122 entry (bit (36) aligned, ptr, fixed bin (35)); 123 dcl tape_ioi_utils$get_buffer_ptr 124 entry (ptr, ptr) returns (ptr); 125 dcl tape_ioi_utils$get_status 126 entry (ptr) returns (ptr); 127 dcl tape_ioi_utils$get_status_class 128 entry (ptr) returns (char (2)); 129 dcl tape_ioi_utils$get_workspace_ptr 130 entry (bit (36) aligned, ptr); 131 dcl tape_ioi_utils$io_in_progress 132 entry (ptr) returns (bit (1) aligned); 133 134 dcl error_table_$action_not_performed 135 fixed bin (35) ext static; 136 dcl error_table_$bad_arg fixed bin (35) ext static; 137 dcl error_table_$bad_density 138 fixed bin (35) ext static; 139 dcl error_table_$blank_tape 140 fixed bin (35) ext static; 141 dcl error_table_$buffer_invalid_state 142 fixed bin (35) ext static; 143 dcl error_table_$device_active 144 fixed bin (35) ext static; 145 dcl error_table_$device_attention 146 fixed bin (35) ext static; 147 dcl error_table_$device_code_alert 148 fixed bin (35) ext static; 149 dcl error_table_$device_end 150 fixed bin (35) ext static; 151 dcl error_table_$device_not_active 152 fixed bin (35) ext static; 153 dcl error_table_$device_parity 154 fixed bin (35) ext static; 155 dcl error_table_$invalid_state 156 fixed bin (35) ext static; 157 dcl error_table_$invalid_tape_record_length 158 fixed bin (35) ext static; 159 dcl error_table_$lost_device_position 160 fixed bin (35) ext static; 161 dcl error_table_$no_operation 162 fixed bin (35) ext static; 163 dcl error_table_$unexpected_device_status 164 fixed bin (35) ext static; 165 166 /* Builtins */ 167 168 dcl (addr, addrel, bin, bit, clock, divide, hbound, lbound, min, mod, null, ptr, rel, size, string, substr, unspec) 169 builtin; 170 171 /* Vanilla operations. They simply call the queue_* and check_* entries. */ 172 order: 173 entry (p_tioi_id, p_order, p_icount, p_order_data_ptr, p_ocount, p_result_idx, p_code); 174 175 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; /* in case setup doesn't return */ 176 call setup; 177 call queue_order_proc (p_order, p_icount, p_order_data_ptr, code); 178 if code = 0 then 179 call check_order_proc (p_ocount, p_result_idx, code); 180 else p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 181 p_code = code; 182 return; 183 184 read: 185 entry (p_tioi_id, p_buffer_data_ptr, p_data_len, p_result_idx, p_code); 186 187 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; /* in case setup doesn't return */ 188 call setup; 189 semi_queued_offset = 0; 190 do buffer_ptr = ptr (wksp, tai.free_list_offset) repeat ptr (wksp, next_buffer_offset) 191 while (rel (buffer_ptr) ^= ""b & code = 0); 192 next_buffer_offset = buffer_ptr -> tbi.next_state_offset; 193 if ^buffer_ptr -> tbi.reserved then do; 194 call queue_read_proc (buffer_ptr, code); 195 if code = 0 then 196 tai.total_reads = tai.total_reads + 1; 197 end; 198 end; 199 call run ("0"b, code); /* kick if necessary */ 200 if code = 0 then 201 call check_read_proc (p_buffer_data_ptr, p_data_len, p_result_idx, code); 202 else p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 203 p_code = code; 204 return; 205 206 write: 207 entry (p_tioi_id, p_write_buffers, p_data_len, p_buffer_data_ptr, p_result_idx, p_code); 208 209 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; /* in case setup doesn't return */ 210 p_buffer_data_ptr = null (); 211 call setup; 212 semi_queued_offset = 0; 213 214 /* Queue any suspended buffers. */ 215 216 do buffer_ptr = ptr (wksp, susp_list_offset) repeat ptr (wksp, next_buffer_offset) 217 while (rel (buffer_ptr) ^= ""b & code = 0); 218 next_buffer_offset = buffer_ptr -> tbi.next_state_offset; 219 call queue_write_proc (buffer_ptr, buffer_ptr -> tbi.buffer_len, code); 220 end; 221 if code ^= 0 then do; 222 QUEUE_WRITE_ERROR: 223 call run ("1"b, (0)); 224 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 225 call quit (code); 226 end; 227 228 /* Now queue any buffers the caller passed us. */ 229 230 do buffer_idx = lbound (p_write_buffers, 1) to hbound (p_write_buffers, 1) while (code = 0); 231 if p_write_buffers (buffer_idx) ^= null () then do; 232 buffer_ptr = tape_ioi_utils$get_buffer_ptr (wksp, p_write_buffers (buffer_idx)); 233 if buffer_ptr = null () then 234 code = error_table_$bad_arg; 235 else do; 236 buffer_ptr -> tbi.modes = tai.modes; 237 call queue_write_proc (buffer_ptr, p_data_len, code); 238 if code = 0 then 239 tai.total_writes = tai.total_writes + 1; 240 end; 241 end; 242 end; 243 if code ^= 0 then 244 goto QUEUE_WRITE_ERROR; 245 call run ("1"b, (0)); 246 247 /* Now return a pointer to a ready buffer */ 248 249 if tai.free_list_offset ^= 0 then do; 250 p_result_idx = TAPE_IO_SUCCESS; 251 p_buffer_data_ptr = ptr (wksp, ptr (wksp, tai.free_list_offset) -> tbi.data_offset); 252 end; 253 else call check_write_proc (p_buffer_data_ptr, p_result_idx, p_code); 254 return; 255 256 /* The basic queueing and checking entries */ 257 258 queue_order: 259 entry (p_tioi_id, p_order, p_icount, p_order_data_ptr, p_code); 260 261 call setup; 262 call queue_order_proc (p_order, p_icount, p_order_data_ptr, p_code); 263 return; 264 265 check_order: 266 entry (p_tioi_id, p_ocount, p_result_idx, p_code); 267 268 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; /* in case setup doesn't return */ 269 call setup; 270 call check_order_proc (p_ocount, p_result_idx, p_code); 271 return; 272 273 queue_read: 274 entry (p_tioi_id, p_buffer_data_ptr, p_code); 275 276 call setup; 277 semi_queued_offset = 0; 278 buffer_ptr = tape_ioi_utils$get_buffer_ptr (wksp, p_buffer_data_ptr); 279 if buffer_ptr ^= null () then do; 280 call queue_read_proc (buffer_ptr, p_code); 281 if p_code = 0 then 282 tai.total_reads = tai.total_reads + 1; 283 end; 284 else p_code = error_table_$bad_arg; 285 call run ("0"b, (0)); 286 return; 287 288 check_read: 289 entry (p_tioi_id, p_buffer_data_ptr, p_data_len, p_result_idx, p_code); 290 291 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; /* in case setup doesn't return */ 292 call setup; 293 call check_read_proc (p_buffer_data_ptr, p_data_len, p_result_idx, p_code); 294 return; 295 296 queue_write: 297 entry (p_tioi_id, p_buffer_data_ptr, p_data_len, p_code); 298 299 call setup; 300 semi_queued_offset = 0; 301 buffer_ptr = tape_ioi_utils$get_buffer_ptr (wksp, p_buffer_data_ptr); 302 if buffer_ptr ^= null () then do; 303 call queue_write_proc (buffer_ptr, p_data_len, p_code); 304 if p_code = 0 then 305 tai.total_writes = tai.total_writes + 1; 306 end; 307 else p_code = error_table_$bad_arg; 308 call run ("1"b, (0)); 309 return; 310 311 check_write: 312 entry (p_tioi_id, p_buffer_data_ptr, p_result_idx, p_code); 313 314 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; /* in case setup doesn't return */ 315 call setup; 316 call check_write_proc (p_buffer_data_ptr, p_result_idx, p_code); 317 return; 318 319 /* Entry to stop all tape motion. */ 320 321 stop_tape: 322 entry (p_tioi_id, p_ocount, p_result_idx, p_code); 323 324 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; /* in case setup doesn't return */ 325 call setup; 326 327 /* First see if nothing is going on. It's not an error to call us in this case. */ 328 329 if ^tape_ioi_utils$io_in_progress (wksp) then do; 330 p_ocount = 0; 331 p_result_idx = TAPE_IO_SUCCESS; 332 return; 333 end; 334 335 /* Something's happening. We have to handle orders (both in order_idcw and in order_data), and queued I/O. */ 336 337 addr (tai.order_idcw) -> idcw.control = "00"b; 338 do idcw_idx = lbound (tai.order_data, 1) to hbound (tai.order_data, 1); 339 idcwp = addr (tai.order_data (idcw_idx)); 340 if idcw.code = "111"b then /* don't hammer non-IDCWs */ 341 idcw.control = "00"b; 342 end; 343 344 /* Now handle all queued buffers */ 345 346 do buffer_ptr = ptr (wksp, queue_list_offset) repeat ptr (wksp, buffer_ptr -> tbi.next_state_offset) 347 while (rel (buffer_ptr) ^= ""b); 348 addr (buffer_ptr -> tbi.idcw_word) -> idcw.control = "00"b; 349 end; 350 351 /* We've set it up so that we'll stop when the next IDCW is fetched, or the operation finishes. 352* Now, just hang on 'til the tape stops. */ 353 354 if ^tai.order_queued then 355 tai.order_count_done = 0; 356 357 do while ("1"b); 358 call get_status (tai.modes.wait, STOP_TAPE_MAKE_CALLER_WAIT); 359 idcwp = ptr (wksp, bin (substr (istat.lpw, 1, 18)) - 1); 360 statp = addr (istat.iom_stat); 361 if tai.order_queued then 362 tai.order_count_done = tai.order_count_done + bin (idcw.count) - bin (status.rcount); 363 else tai.order_count_done = tai.order_count_done + 1; 364 if ^istat.run then do; 365 p_ocount = tai.order_count_done; 366 p_result_idx = TAPE_IO_SUCCESS; 367 do buffer_ptr = ptr (wksp, queue_list_offset) repeat ptr (wksp, next_buffer_offset) 368 while (rel (buffer_ptr) ^= ""b); 369 next_buffer_offset = buffer_ptr -> tbi.next_state_offset; 370 call tape_ioi_buffer_man$internal_set_buffer_ready (wksp, buffer_ptr); 371 end; 372 do buffer_ptr = ptr (wksp, susp_list_offset) repeat ptr (wksp, next_buffer_offset) 373 while (rel (buffer_ptr) ^= ""b); 374 next_buffer_offset = buffer_ptr -> tbi.next_state_offset; 375 call tape_ioi_buffer_man$internal_set_buffer_ready (wksp, buffer_ptr); 376 end; 377 tai.order_queued, tai.read_queued, tai.write_queued = "0"b; 378 return; 379 end; 380 end; 381 382 STOP_TAPE_MAKE_CALLER_WAIT: 383 p_ocount = 0; 384 p_result_idx = TAPE_IO_BLOCK; 385 return; 386 387 queue_order_proc: 388 proc (order, count, data_ptr, code); 389 390 dcl code fixed bin (35) parameter; 391 dcl count fixed bin parameter; 392 dcl data_ptr ptr parameter; 393 dcl order char (4) parameter; 394 395 dcl order_idx fixed bin; 396 397 if tape_ioi_utils$io_in_progress (wksp) then do; 398 code = error_table_$device_active; 399 return; 400 end; 401 idcwp = addr (tai.order_idcw); 402 idcw.control = "00"b; /* in case retries of an EOF had happened */ 403 unspec (tai.order_data (*)) = ""b; 404 405 do order_idx = hbound (order_mnemonics, 1) to lbound (order_mnemonics, 1) by -1 406 while (order_mnemonics (order_idx) ^= order); 407 end; 408 goto QUEUE_ORDER (order_idx); 409 410 QUEUE_ORDER (-1): /* unknown order */ 411 code = error_table_$no_operation; 412 return; 413 414 /* The following orders take a tally */ 415 416 QUEUE_ORDER (2): /* backspace record */ 417 QUEUE_ORDER (4): /* forwardspace record */ 418 if count >= ORDERS_PER_IDCW_TALLY then 419 idcw.count = "00"b3; /* do as many as we can */ 420 else idcw.count = bit (bin (count, 6), 6); 421 goto QUEUE_ORDER_JOIN_1; 422 423 /* The density order is handled specially. Its command data is the density to set. */ 424 425 QUEUE_ORDER (15): /* density */ 426 begin; 427 428 dcl density fixed bin; 429 dcl density_idx fixed bin; 430 431 dcl requested_density fixed bin based (data_ptr); 432 433 density = requested_density; 434 do density_idx = lbound (densities, 1) to hbound (densities, 1) while (density ^= densities (density_idx)); 435 end; 436 if density_idx > hbound (densities, 1) then do; 437 code = error_table_$bad_density; 438 return; 439 end; 440 idcw.count = "01"b3; 441 device_command = density_commands (density_idx); 442 tai.density_command = device_command; 443 goto QUEUE_ORDER_JOIN_2; 444 end; 445 446 /* The following orders need to access the command data in some way. The command data is copied 447* to the order_data buffer. */ 448 449 QUEUE_ORDER (21): /* write control registers */ 450 begin; 451 452 dcl error_counters (4) bit (36) aligned based; 453 454 addr (tai.order_data) -> error_counters = data_ptr -> error_counters; 455 idcw.count = "01"b3; 456 goto QUEUE_ORDER_JOIN_1; 457 end; 458 459 /* The following orders are repeatable, but not by the controller. So, we build a list of IDCWs in the order data 460* buffer. If more than 8 repetitions are requested, we'll notice that we're not done when the order completes, 461* and fire up some more until we have done enough. */ 462 463 QUEUE_ORDER (1): /* backspace file */ 464 QUEUE_ORDER (3): /* forward space file */ 465 QUEUE_ORDER (5): /* write EOF */ 466 QUEUE_ORDER (6): /* erase */ 467 begin; 468 469 dcl idcw_idx fixed bin; 470 471 idcwp = addr (tai.order_data); /* use a different spot for the IDCWs */ 472 idcw.command = order_commands (order_idx); 473 idcw.device = addr (tai.order_idcw) -> idcw.device; 474 idcw.ext = ""b; 475 idcw.code = "111"b; 476 idcw.ext_ctl = ""b; 477 idcw.control = "10"b; /* continue, no marker */ 478 idcw.chan_cmd = "02"b3; 479 idcw.count = "01"b3; 480 481 /* Now propogate the IDCW thru the order_data buffer. Then set the last IDCW to show a terminate status. */ 482 483 do idcw_idx = 2 to min (count, hbound (tai.order_data, 1)); 484 string (tai.order_data (idcw_idx)) = string (idcw); 485 end; 486 addr (tai.order_data (idcw_idx - 1)) -> idcw.control = "00"b; 487 goto QUEUE_ORDER_JOIN_3; 488 end; 489 490 /* The request device status order is handled specially. First, a call to ioi_$get_detailed_status is 491* made. If we get valid status from that, we use it. If not, we actually connect the channel to 492* get the status. */ 493 494 QUEUE_ORDER (13): /* request device status */ 495 begin; 496 497 dcl based_detailed_status bit (216) based (data_ptr); 498 499 call ioi_$get_detailed_status (tai.ioi_index, status_present, based_detailed_status, code); 500 501 end; 502 503 if code ^= 0 then 504 return; 505 if status_present then do; 506 tai.flags.order_done = "1"b; 507 tai.order_count_done = 1; 508 goto QUEUE_ORDER_JOIN_4; 509 end; 510 else goto QUEUE_ORDER_REQUEST_DEVICE_STATUS; 511 512 /* The following orders do not take a tally, are not repeatable, and access no command data (at least 'til check time) */ 513 514 QUEUE_ORDER (0): /* ready pseudo-order */ 515 tai.saved_special_status = ""b; 516 QUEUE_ORDER (7): /* data security erase */ 517 QUEUE_ORDER (8): /* rewind */ 518 QUEUE_ORDER (9): /* rewind/unload */ 519 QUEUE_ORDER (10): /* tape load */ 520 QUEUE_ORDER (11): /* request status */ 521 QUEUE_ORDER (12): /* reset status */ 522 QUEUE_ORDER_REQUEST_DEVICE_STATUS: /* request device status */ 523 QUEUE_ORDER (14): /* reset device status */ 524 QUEUE_ORDER (16): /* set file permit */ 525 QUEUE_ORDER (17): /* set file protect */ 526 QUEUE_ORDER (18): /* reserve device */ 527 QUEUE_ORDER (19): /* release device */ 528 QUEUE_ORDER (20): /* read control registers */ 529 idcw.count = "01"b3; /* done only once */ 530 QUEUE_ORDER_JOIN_1: 531 device_command = order_commands (order_idx); 532 QUEUE_ORDER_JOIN_2: /* density orders enter here */ 533 idcw.command = device_command; 534 if order_idx = 7 then 535 idcw.chan_cmd = "03"b3; /* data security erase */ 536 else idcw.chan_cmd = "02"b3; /* vanilla non-data transfer command */ 537 QUEUE_ORDER_JOIN_3: /* all of the order connects come here */ 538 if (order_idx >= 1 & order_idx <= 4) | /* bsf, bsr, fsf, fsr */ 539 order_idx = 7 then /* dse */ 540 call set_timeout (tai.max_timeout); 541 else call set_timeout (TIMEOUT_ORDER); 542 call connect (bin (rel (idcwp)), code); 543 QUEUE_ORDER_JOIN_4: /* orders that need no connects enter here */ 544 if code = 0 then do; 545 tai.flags.order_queued = "1"b; 546 tai.order_count_requested = count; 547 tai.order_count_done = 0; 548 tai.order_idx = order_idx; 549 tai.order_data_ptr = data_ptr; 550 tai.total_orders = tai.total_orders + 1; 551 if order_mnemonics (order_idx) = "rew" then /* Reset at_bot after rewind order */ 552 tai.at_bot = "1"b; 553 end; 554 555 end queue_order_proc; 556 557 check_order_proc: 558 proc (count, result, code); 559 560 dcl count fixed bin parameter; 561 dcl result fixed bin parameter; 562 dcl code fixed bin (35) parameter; 563 564 dcl based_special_status bit (36) aligned based (tai.order_data_ptr); 565 566 if ^tai.order_queued then do; /* there's nothing to check */ 567 count = 0; 568 result = TAPE_IO_USER_PROGRAM_ERROR; 569 code = error_table_$invalid_state; 570 return; 571 end; 572 573 if tai.order_done then do; /* queue_order finished for us */ 574 tai.order_done = "0"b; 575 count = tai.order_count_done; 576 result = TAPE_IO_SUCCESS; 577 goto CHECK_ORDER_GOOD_RETURN; 578 end; 579 580 /* See if we're awaiting special status. This will only happen if we got an "SI" status after a "rdy" order */ 581 582 NEED_SPECIAL_STATUS: 583 if tai.flags.special_status_expected then do; /* we must be doing a rdy */ 584 call get_special_status (auto_special_status); 585 /* might not return */ 586 tai.saved_special_status = auto_special_status; 587 588 tai.flags.special_status_expected = "0"b; 589 call connect (bin (rel (addr (tai.order_idcw))), code); 590 if code ^= 0 then do; 591 result = TAPE_IO_USER_PROGRAM_ERROR; 592 count = 0; 593 return; 594 end; 595 end; 596 597 /* Not waiting for special status, must be normal status */ 598 599 count = 0; 600 call get_status (tai.modes.wait, CHECK_ORDER_MAKE_CALLER_WAIT); 601 /* might not return */ 602 goto CHECK_ORDER (tai.order_idx); /* case by case */ 603 604 CHECK_ORDER (0): /* rdy */ 605 if status_class = "UE" then do; 606 code = error_table_$unexpected_device_status; 607 goto CHECK_ORDER_PROGRAM_ERROR; 608 end; 609 else if status_class = "SI" then do; 610 tai.special_status_expected = "1"b; 611 goto NEED_SPECIAL_STATUS; 612 end; 613 else do; 614 based_special_status = tai.saved_special_status; 615 count = 1; 616 result = TAPE_IO_SUCCESS; 617 goto CHECK_ORDER_GOOD_RETURN; 618 end; 619 620 CHECK_ORDER (1): /* backspace file */ 621 do while ("1"b); /* exitted by a goto somewhere in the loop */ 622 if status_class = "AB" then do; /* at BOT */ 623 result = TAPE_IO_BOT; 624 tai.at_bot = "1"b; 625 count = repeatable_order_count (); 626 goto CHECK_ORDER_DONE; 627 end; 628 else if (status_class = "EF") | (status_class = "OK") then 629 call finish_repeatable_order; 630 else do; 631 CHECK_ORDER_NOT_PERFORMED: 632 code = error_table_$action_not_performed; 633 goto CHECK_ORDER_IO_ERROR; 634 end; 635 end; 636 637 CHECK_ORDER (2): /* backspace record */ 638 idcwp = addr (tai.order_idcw); /* point at the IDCW */ 639 io_status_word_ptr = addr (istat.iom_stat); 640 do while ("1"b); 641 if status_class = "AB" then do; 642 result = TAPE_IO_BOT; 643 tai.at_bot = "1"b; 644 count = repeatable_order_count (); 645 goto CHECK_ORDER_GOOD_RETURN; 646 end; 647 else if status_class = "EF" then do; 648 result = TAPE_IO_EOF; 649 count = repeatable_order_count (); 650 goto CHECK_ORDER_GOOD_RETURN; 651 end; 652 else if status_class = "OK" then 653 call finish_repeatable_order; /* might not return */ 654 else do; 655 count = repeatable_order_count (); 656 goto CHECK_ORDER_NOT_PERFORMED; 657 end; 658 end; 659 660 CHECK_ORDER (3): /* forward space file */ 661 do while ("1"b); /* exit via a goto in the loop */ 662 if status_class = "ET" then do; /* at EOT */ 663 result = TAPE_IO_EOT; 664 count = repeatable_order_count (); 665 goto CHECK_ORDER_GOOD_RETURN; 666 end; 667 else if (status_class = "EF") | (status_class = "OK") then 668 call finish_repeatable_order; /* might not return */ 669 else goto CHECK_ORDER_NOT_PERFORMED; 670 end; 671 672 CHECK_ORDER (4): /* forward space record */ 673 idcwp = addr (tai.order_idcw); /* point at the IDCW */ 674 io_status_word_ptr = addr (istat.iom_stat); 675 do while ("1"b); 676 if status_class = "EF" then do; /* EOF */ 677 result = TAPE_IO_EOF; 678 count = repeatable_order_count (); 679 goto CHECK_ORDER_GOOD_RETURN; 680 end; 681 else if status_class = "ET" then do; 682 result = TAPE_IO_EOT; 683 count = repeatable_order_count (); 684 goto CHECK_ORDER_GOOD_RETURN; 685 end; 686 else if status_class = "OK" then 687 call finish_repeatable_order; /* might not return */ 688 else do; 689 count = repeatable_order_count (); 690 goto CHECK_ORDER_NOT_PERFORMED; 691 end; 692 end; 693 694 CHECK_ORDER (5): /* write EOF */ 695 do while ("1"b); /* exitted by goto */ 696 if status_class = "ET" then do; 697 if tai.retry_in_progress & (istat.offset < bin (rel (addr (tai.order_data)))) then 698 /* backspace and erase finished, but not EOF, so reconnect */ 699 call finish_repeatable_order (); 700 701 result = TAPE_IO_EOT; 702 count = repeatable_order_count (); 703 goto CHECK_ORDER_GOOD_RETURN; 704 end; 705 else if (status_class = "EF") | (status_class = "OK") then 706 call finish_repeatable_order (); 707 else if (status_class = "DA") | (status_class = "DE") then do; 708 tai.order_count_done = repeatable_order_count () - 1; 709 /* the last one was in error, so don't count it */ 710 tai.order_errors = tai.order_errors + 1; 711 if tai.retry_count < MAX_RETRY_COUNT then do; 712 tai.retry_count = tai.retry_count + 1; 713 call refill_order_list (); 714 call tape_ioi_error_retry$eof (wksp, code); 715 if code ^= 0 then 716 goto CHECK_ORDER_PROGRAM_ERROR; 717 call get_status (tai.modes.wait, CHECK_ORDER_MAKE_CALLER_WAIT); 718 end; 719 else do; 720 if status_class = "DE" then 721 result = TAPE_IO_RECOVERABLE_IO_ERROR_AND_EOT; 722 else result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 723 code = error_table_$device_parity; 724 goto CHECK_ORDER_DONE; 725 end; 726 end; 727 else goto CHECK_ORDER_NOT_PERFORMED; 728 end; 729 730 CHECK_ORDER (6): /* erase */ 731 if status_class = "OK" then 732 call finish_repeatable_order (); 733 else if status_class = "ET" then do; 734 count = repeatable_order_count (); 735 result = TAPE_IO_EOT; 736 goto CHECK_ORDER_GOOD_RETURN; 737 end; 738 else goto CHECK_ORDER_NOT_PERFORMED; 739 740 /* These orders return data to the caller */ 741 742 CHECK_ORDER (11): /* request status */ 743 call tape_ioi_hardware_status$hardware_status (unspec (tai.tioi_id), tai.order_data_ptr, code); 744 if code = 0 then do; 745 count = 1; 746 result = TAPE_IO_SUCCESS; 747 goto CHECK_ORDER_GOOD_RETURN; 748 end; 749 else goto CHECK_ORDER_PROGRAM_ERROR; 750 751 CHECK_ORDER (13): /* request device status */ 752 count = 1; 753 result = TAPE_IO_SUCCESS; 754 755 begin; 756 757 dcl based_detailed_status bit (216) based; 758 759 tai.order_data_ptr -> based_detailed_status = addr (tai.order_data) -> based_detailed_status; 760 761 end; 762 763 goto CHECK_ORDER_GOOD_RETURN; 764 765 CHECK_ORDER (20): /* read control registers */ 766 count = 1; 767 if ^((status_class = "AB") | (status_class = "OK")) then 768 goto CHECK_ORDER_NOT_PERFORMED; 769 770 begin; 771 772 dcl error_counters (4) bit (36) aligned based; 773 774 tai.order_data_ptr -> error_counters = addr (tai.order_data) -> error_counters; 775 result = TAPE_IO_SUCCESS; 776 goto CHECK_ORDER_GOOD_RETURN; 777 end; 778 779 /* The following orders do not need to return any information, and can only be done once. */ 780 781 CHECK_ORDER (7): /* data security erase */ 782 CHECK_ORDER (8): /* rewind */ 783 CHECK_ORDER (9): /* rewind/unload */ 784 CHECK_ORDER (10): /* tape load */ 785 CHECK_ORDER (12): /* reset status */ 786 CHECK_ORDER (14): /* reset device status */ 787 CHECK_ORDER (15): /* set density */ 788 CHECK_ORDER (16): /* set file permit */ 789 CHECK_ORDER (17): /* set file protect */ 790 CHECK_ORDER (18): /* reserve device */ 791 CHECK_ORDER (19): /* release device */ 792 CHECK_ORDER (21): /* write control registers */ 793 if (status_class = "AB") | (status_class = "OK") then do; 794 count = 1; 795 result = TAPE_IO_SUCCESS; 796 if status_class = "AB" then 797 tai.at_bot = "1"b; 798 goto CHECK_ORDER_GOOD_RETURN; 799 end; 800 else goto CHECK_ORDER_NOT_PERFORMED; 801 802 CHECK_ORDER_IO_ERROR: /* the order is done, but I/O errors occurred */ 803 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 804 tai.order_errors = tai.order_errors + 1; 805 if status_class = "DN" then 806 code = error_table_$bad_density; 807 else code = error_table_$action_not_performed; 808 goto CHECK_ORDER_DONE; 809 810 CHECK_ORDER_PROGRAM_ERROR: 811 result = TAPE_IO_USER_PROGRAM_ERROR; 812 goto CHECK_ORDER_DONE; 813 814 CHECK_ORDER_GOOD_RETURN: /* the order is done, no errors */ 815 code = 0; 816 CHECK_ORDER_DONE: /* the order is completed, with or without an error */ 817 tai.order_queued = "0"b; 818 tai.retry_in_progress = "0"b; 819 return; 820 821 /* Routine which is called when special status is expected (for example, when the tape is rewinding). This routine 822* will go blocked exactly once waiting for the special status. If no special status is returned after going blocked 823* (i.e. the two minute timer went off), it hands back a special status of "0"b. It is up to its caller to decide 824* what to do next. */ 825 826 get_special_status: 827 proc (status); 828 829 dcl status bit (36) aligned; 830 831 call ioi_$get_special_status (tai.ioi_index, status_present, status, code); 832 if status_present then 833 return; 834 835 if tai.modes.wait then do; /* we can block */ 836 call block; 837 call ioi_$get_special_status (tai.ioi_index, status_present, status, code); 838 end; 839 else goto CHECK_ORDER_MAKE_CALLER_WAIT; /* no time to wait... */ 840 841 end get_special_status; 842 843 CHECK_ORDER_MAKE_CALLER_WAIT: 844 result = TAPE_IO_BLOCK; /* make our caller wait */ 845 count = 0; 846 code = 0; 847 return; /* get out of the loop */ 848 849 /* This function returns the number of times the order has been executed. */ 850 851 repeatable_order_count: 852 proc () returns (fixed bin); 853 854 if (tai.order_idx = 2) | (tai.order_idx = 4) then 855 /* forward or backward space records */ 856 if idcw.count = "00"b3 then 857 return (ORDERS_PER_IDCW_TALLY - bin (io_status_word.rcount) + tai.order_count_done); 858 else return (bin (idcw.count) - bin (io_status_word.rcount) + tai.order_count_done); 859 860 else return (istat.offset - bin (rel (addr (tai.order_data))) + tai.order_count_done + 1); 861 862 end repeatable_order_count; 863 864 /* This routine is called by a repeatable order handler when it is possible that the order is done. 865* If so, it does not return to its caller, but just finishes up and signals success. If there is 866* still work to be done, it restarts the I/O. It either blocks, if that is allowed, or signals that 867* it's up to the user to block. */ 868 869 finish_repeatable_order: 870 proc; 871 872 tai.order_count_done = repeatable_order_count (); 873 if tai.order_count_done >= tai.order_count_requested then do; 874 count = tai.order_count_done; 875 result = TAPE_IO_SUCCESS; 876 goto CHECK_ORDER_GOOD_RETURN; 877 end; 878 else do; 879 call refill_order_list; 880 call reconnect; 881 call get_status (tai.modes.wait, CHECK_ORDER_MAKE_CALLER_WAIT); 882 end; 883 884 end finish_repeatable_order; 885 886 /* This subroutine sets up the order list to continue from a repeatable order. */ 887 888 refill_order_list: 889 proc; 890 891 if (tai.order_idx = 2) | (tai.order_idx = 4) then 892 /* forward or backward space records */ 893 if tai.order_count_requested - tai.order_count_done >= ORDERS_PER_IDCW_TALLY then 894 idcw.count = "00"b3; 895 else idcw.count = bit (bin (tai.order_count_requested - tai.order_count_done, 6), 6); 896 else /* If there are at least hbound (tai.order_data, 1) orders left to do, leave the list alone. 897* If there are less, set the stop bits in the IDCW. */ 898 if (tai.order_count_requested - tai.order_count_done) < hbound (tai.order_data, 1) then 899 addr (tai.order_data (tai.order_count_requested - tai.order_count_done)) -> idcw.control = "00"b; 900 901 end refill_order_list; 902 903 reconnect: 904 proc; 905 906 if (tai.order_idx = 2) | (tai.order_idx = 4) then 907 call connect (bin (rel (addr (tai.order_idcw))), code); 908 else call connect (bin (rel (addr (tai.order_data))), code); 909 if code ^= 0 then do; 910 goto CHECK_ORDER_PROGRAM_ERROR; 911 end; 912 913 end reconnect; 914 915 end check_order_proc; 916 917 /* This procedure sets up one buffer for reading */ 918 919 queue_read_proc: 920 proc (buffer_ptr, code); 921 922 dcl buffer_ptr ptr parameter; 923 dcl code fixed bin (35) parameter; 924 925 if tai.order_queued | tai.write_queued then do; 926 code = error_table_$invalid_state; 927 return; 928 end; 929 if buffer_ptr -> tbi.state ^= READY_STATE then do; 930 code = error_table_$buffer_invalid_state; 931 return; 932 end; 933 934 buffer_ptr -> tbi.modes = tai.modes; 935 buffer_ptr -> tbi.state = QUEUED_STATE; 936 idcwp = addr (buffer_ptr -> tbi.idcw_word); 937 idcw.command = buffer_ptr -> tbi.modes.data_code; /* type of read command depends on data type */ 938 idcw.control = "00"b; /* terminate */ 939 if buffer_ptr -> tbi.modes.recovery then 940 idcw.chan_cmd = "30"b3; /* use normal values, auto-retry */ 941 else idcw.chan_cmd = buffer_ptr -> tbi.modes.cif_code; 942 idcw.count = "00"b3; 943 buffer_ptr -> tbi.data_len = buffer_ptr -> tbi.buffer_len; 944 call fill_dcw_list (buffer_ptr); 945 call remove_from_list (tai.free_list_offset, buffer_ptr); 946 call add_to_list (semi_queued_offset, bin (rel (buffer_ptr))); 947 948 end queue_read_proc; 949 950 check_read_proc: 951 proc (buffer_data_ptr, data_len, result, code); 952 953 dcl buffer_data_ptr ptr parameter; 954 dcl data_len fixed bin (21) parameter; 955 dcl result fixed bin parameter; 956 dcl code fixed bin (35) parameter; 957 958 dcl done bit (1) aligned; 959 dcl xcode fixed bin (35); 960 961 if ^tai.read_queued then do; 962 buffer_data_ptr = null (); 963 data_len = 0; 964 result = TAPE_IO_USER_PROGRAM_ERROR; 965 code = error_table_$device_not_active; 966 return; 967 end; 968 969 buffer_ptr = ptr (wksp, tai.queue_list_offset); 970 code = 0; 971 972 done = "0"b; 973 do while (^done); 974 lost_statuses = -1; /* so loop will loop */ 975 do while (lost_statuses < 0); 976 call get_status (buffer_ptr -> tbi.modes.wait, CHECK_READ_MAKE_CALLER_WAIT); 977 lost_statuses = missing_statuses (buffer_ptr, isp); 978 if lost_statuses < 0 then 979 tai.extra_statuses = tai.extra_statuses + 1; 980 end; 981 done = "1"b; /* until proven otherwise... */ 982 if lost_statuses ^= 0 then do; 983 tai.times_status_lost = tai.times_status_lost + 1; 984 if buffer_ptr -> tbi.modes.req_len then do; 985 addr (buffer_ptr -> tbi.idcw_word) -> idcw.control = "00"b; 986 /* since we missed one, take no chances */ 987 tai.retry_in_progress = "1"b; 988 do while (istat.run); 989 CHECK_READ_STOP_TAPE: 990 call get_status ("0"b, CHECK_READ_STOP_TAPE); 991 end; 992 lost_statuses = missing_statuses (buffer_ptr, isp); 993 tai.order_count_requested = lost_statuses; 994 /* in case we're at EOF and have to try again */ 995 CHECK_READ_BACKSPACE: 996 call tape_ioi_error_retry$backspace (wksp, buffer_ptr, isp, lost_statuses, code); 997 if code = 0 then 998 done = "0"b; 999 else do; 1000 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1001 code = error_table_$lost_device_position; 1002 end; 1003 end; 1004 else do; /* we lost it, but we don't care: it was good status */ 1005 istat.st = "1"b; 1006 tai.status_entry_idx = mod (tai.status_entry_idx - 1, tai.status_entry_count); 1007 isp = ptr (wksp, 1008 tai.status_queue_offset 1009 + mod (tai.status_entry_idx - 1, tai.status_entry_count) * size (istat)); 1010 istat.level = IO_MARKER_INTERRUPT_LEVEL; 1011 /* we know it must have been */ 1012 istat.run = "1"b; 1013 istat.er = "0"b; 1014 status_class = "OK"; /* since it didn't stop, there must have been no error */ 1015 result = TAPE_IO_SUCCESS; 1016 end; 1017 end; 1018 else if status_class = "OK" then 1019 result = TAPE_IO_SUCCESS; 1020 else if status_class = "UE" then do; 1021 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1022 code = error_table_$device_parity; 1023 end; 1024 else if status_class = "AB" then do; 1025 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1026 code = error_table_$unexpected_device_status; 1027 end; 1028 else if status_class = "SI" then do; 1029 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1030 code = error_table_$device_attention; /* probably */ 1031 end; 1032 else if status_class = "DN" then do; 1033 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1034 code = error_table_$bad_density; 1035 end; 1036 else if status_class = "EF" then do; 1037 if tai.retry_in_progress then do; 1038 tai.order_count_requested = tai.order_count_requested - 1; 1039 lost_statuses = tai.order_count_requested; 1040 goto CHECK_READ_BACKSPACE; /* try again */ 1041 end; 1042 else result = TAPE_IO_EOF; 1043 end; 1044 else if status_class = "ET" then do; 1045 result = TAPE_IO_EOT; 1046 code = error_table_$device_end; 1047 end; 1048 else if status_class = "BT" then do; 1049 result = TAPE_IO_EOT; 1050 code = error_table_$blank_tape; 1051 end; 1052 else if status_class = "BL" then do; 1053 if ^tai.suspect_short_record then do; /* first time we've had this problem on this buffer */ 1054 tai.suspect_short_record = "1"b; 1055 /**** fell for the short record in the long DCW list trick (3rd time this month) */ 1056 semi_queued_offset = bin (rel (buffer_ptr)); 1057 tai.queue_list_offset = 0; 1058 call run ("0"b, code); 1059 if code ^= 0 then 1060 goto CHECK_READ_LIST_PROBLEM; 1061 else done = "0"b; 1062 end; 1063 else do; 1064 CHECK_READ_LIST_PROBLEM: 1065 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1066 code = error_table_$unexpected_device_status; 1067 end; 1068 end; 1069 else if (status_class = "DA") | (status_class = "DE") | (status_class = "IP") then do; 1070 /* retryable error */ 1071 if buffer_ptr -> tbi.recovery then do; 1072 tai.retry_in_progress = "1"b; 1073 call tape_ioi_error_retry (wksp, buffer_ptr, isp, code); 1074 if code = 0 then 1075 done = "0"b; /* keep on trying */ 1076 else do; 1077 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1078 if code ^= error_table_$bad_density then 1079 code = error_table_$device_parity; 1080 end; 1081 end; 1082 else do; /* user want to handle it without our help */ 1083 result = TAPE_IO_RECOVERABLE_IO_ERROR; 1084 code = error_table_$device_parity; 1085 end; 1086 end; 1087 else if status_class = "CA" then do; /* code alert */ 1088 code = error_table_$device_code_alert; 1089 if buffer_ptr -> tbi.modes.data_code = "05"b3 | buffer_ptr -> tbi.modes.data_code = "04"b3 1090 | buffer_ptr -> tbi.modes.data_code = "03"b3 then 1091 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1092 else result = TAPE_IO_CODE_ALERT; 1093 end; 1094 end; 1095 1096 call remove_from_list (tai.queue_list_offset, buffer_ptr); 1097 if result = TAPE_IO_SUCCESS then do; 1098 recovery_strategy = bin (substr (addr (buffer_ptr -> tbi.idcw_word) -> idcw.chan_cmd, 4, 3)); 1099 if recovery_strategy ^= 0 then 1100 tai.recovery_succeeded (recovery_strategy) = tai.recovery_succeeded (recovery_strategy) + 1; 1101 tai.at_bot = "0"b; 1102 call keep_it_going (isp, xcode); 1103 if xcode ^= 0 then 1104 code = xcode; 1105 end; 1106 else do; 1107 begin; 1108 1109 dcl buffer_ptr ptr; 1110 1111 semi_queued_offset = tai.queue_list_offset; 1112 tai.queue_list_offset = 0; 1113 do buffer_ptr = ptr (wksp, semi_queued_offset) 1114 repeat ptr (wksp, buffer_ptr -> tbi.next_state_offset) while (rel (buffer_ptr) ^= ""b); 1115 buffer_ptr -> tbi.state = READY_STATE; 1116 tai.total_reads = tai.total_reads - 1; 1117 end; 1118 end; 1119 call add_to_list (tai.free_list_offset, semi_queued_offset); 1120 if result ^= TAPE_IO_EOF & result ^= TAPE_IO_EOT then 1121 tai.read_errors = tai.read_errors + 1; 1122 end; 1123 1124 buffer_ptr -> tbi.state = READY_STATE; 1125 call add_to_list (tai.free_list_offset, bin (rel (buffer_ptr))); 1126 1127 if buffer_ptr -> tbi.modes.req_len then 1128 data_len = get_io_byte_count (buffer_ptr, isp); 1129 buffer_data_ptr = ptr (wksp, buffer_ptr -> tbi.data_offset); 1130 tai.read_queued = (tai.queue_list_offset ^= 0); 1131 tai.suspect_short_record = "0"b; 1132 tai.retry_in_progress = "0"b; 1133 return; 1134 1135 CHECK_READ_MAKE_CALLER_WAIT: 1136 buffer_data_ptr = null (); 1137 data_len = 0; 1138 result = TAPE_IO_BLOCK; 1139 code = 0; 1140 return; 1141 1142 end check_read_proc; 1143 1144 queue_write_proc: 1145 proc (buffer_ptr, data_len, code); 1146 1147 dcl buffer_ptr ptr parameter; 1148 dcl data_len fixed bin (21) parameter; 1149 dcl code fixed bin (35) parameter; 1150 dcl 1 char_position_overlay 1151 based (addr (idcw.count)) unaligned, 1152 2 tcp fixed bin (3) unsigned, /* terminate character position */ 1153 2 icp fixed bin (3) unsigned; /* initial character position */ 1154 1155 if tai.order_queued | tai.read_queued then do; 1156 code = error_table_$invalid_state; 1157 return; 1158 end; 1159 1160 if (buffer_ptr -> tbi.state ^= READY_STATE) & (buffer_ptr -> tbi.state ^= SUSPENDED_STATE) then do; 1161 code = error_table_$buffer_invalid_state; 1162 return; 1163 end; 1164 1165 buffer_ptr -> tbi.modes = tai.modes; 1166 idcwp = addr (buffer_ptr -> tbi.idcw_word); 1167 idcw.command = (buffer_ptr -> tbi.modes.data_code) | "10"b3; 1168 /* make a write command out of the mode */ 1169 idcw.control = "00"b; /* terminate */ 1170 idcw.chan_cmd = "00"b3; 1171 1172 /* Length processing is somewhat hairy. The whole thing is described in MTB-383, pp. 16-17. */ 1173 1174 if buffer_ptr -> tbi.modes.length then do; /* special length mode, anything goes */ 1175 idcw.count = "00"b3; /* reset both TCP and ICP initially */ 1176 if ascii_mode (buffer_ptr) then do; /* controller is in ASCII mode */ 1177 /* the ICP is 0, we set only the TCP */ 1178 if buffer_ptr -> tbi.modes.data_code = "25"b3 then 1179 char_position_overlay.tcp = mod (data_len, CHARS_PER_WORD); 1180 else char_position_overlay.tcp = mod (data_len, BYTES_PER_WORD); 1181 buffer_ptr -> tbi.data_len = data_len; 1182 end; 1183 else do; /* no special ICP/TCP hackery */ 1184 if mod (data_len, BYTES_PER_WORD) ^= 0 then 1185 buffer_ptr -> tbi.data_len = data_len + 1; 1186 else buffer_ptr -> tbi.data_len = data_len; 1187 end; 1188 end; 1189 else do; 1190 if mod (data_len, BYTES_PER_WORD) ^= 0 then do; 1191 code = error_table_$invalid_tape_record_length; 1192 return; 1193 end; 1194 else do; 1195 buffer_ptr -> tbi.data_len = data_len; 1196 idcw.count = "00"b3; 1197 end; 1198 end; 1199 1200 if buffer_ptr -> tbi.state = READY_STATE then 1201 call remove_from_list (tai.free_list_offset, buffer_ptr); 1202 else call remove_from_list (tai.susp_list_offset, buffer_ptr); 1203 call fill_dcw_list (buffer_ptr); 1204 buffer_ptr -> tbi.state = QUEUED_STATE; 1205 call add_to_list (semi_queued_offset, bin (rel (buffer_ptr))); 1206 1207 end queue_write_proc; 1208 1209 check_write_proc: 1210 proc (buffer_data_ptr, result, code); 1211 1212 dcl buffer_data_ptr ptr parameter; 1213 dcl result fixed bin parameter; 1214 dcl code fixed bin (35) parameter; 1215 1216 dcl done bit (1) aligned; 1217 dcl xcode fixed bin (35); 1218 1219 if ^tai.write_queued then do; 1220 buffer_data_ptr = null (); 1221 result = TAPE_IO_USER_PROGRAM_ERROR; 1222 code = error_table_$device_not_active; 1223 return; 1224 end; 1225 1226 buffer_ptr = ptr (wksp, tai.queue_list_offset); 1227 code = 0; 1228 1229 done = "0"b; 1230 do while (^done); 1231 lost_statuses = -1; /* so loop will loop */ 1232 do while (lost_statuses < 0); 1233 call get_status (buffer_ptr -> tbi.modes.wait, CHECK_WRITE_MAKE_CALLER_WAIT); 1234 lost_statuses = missing_statuses (buffer_ptr, isp); 1235 if lost_statuses < 0 then 1236 tai.extra_statuses = tai.extra_statuses + 1; 1237 end; 1238 done = "1"b; /* until proven otherwise... */ 1239 if lost_statuses ^= 0 then do; 1240 tai.times_status_lost = tai.times_status_lost + 1; 1241 istat.st = "1"b; /* save this one for later */ 1242 tai.status_entry_idx = mod (tai.status_entry_idx - 1, tai.status_entry_count); 1243 isp = ptr (wksp, 1244 tai.status_queue_offset + mod (tai.status_entry_idx - 1, tai.status_entry_count) * size (istat)); 1245 istat.level = IO_MARKER_INTERRUPT_LEVEL;/* we know it must have been */ 1246 istat.run = "1"b; 1247 istat.er = "0"b; 1248 status_class = "OK"; /* since it didn't stop, there must have been no error */ 1249 end; 1250 1251 if status_class = "OK" then 1252 result = TAPE_IO_SUCCESS; 1253 else if (status_class = "AB") | (status_class = "EF") then do; 1254 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1255 code = error_table_$unexpected_device_status; 1256 end; 1257 else if status_class = "SI" then do; 1258 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1259 code = error_table_$device_attention; 1260 end; 1261 else if status_class = "UE" then do; 1262 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1263 code = error_table_$device_parity; 1264 end; 1265 else if status_class = "ET" then do; 1266 if tai.retry_in_progress 1267 & istat.offset < bin (rel (addr (tai.order_data (hbound (tai.order_data, 1))))) then do; 1268 /**** We were retrying, and the backspace and erase were done, but the write wasn't. Reconnect it. */ 1269 semi_queued_offset = tai.queue_list_offset; 1270 tai.queue_list_offset = 0; 1271 call run ("1"b, code); 1272 if code ^= 0 then 1273 result = TAPE_IO_USER_PROGRAM_ERROR; 1274 else done = "0"b; 1275 end; 1276 else do; 1277 result = TAPE_IO_EOT; 1278 code = error_table_$device_end; 1279 end; 1280 end; 1281 else if status_class = "BT" then do; 1282 result = TAPE_IO_EOT; 1283 code = error_table_$blank_tape; 1284 end; 1285 else if (status_class = "DA") | (status_class = "DE") 1286 | ((status_class = "IP") & (buffer_ptr -> tbi.modes.data_code ^= "03"b3)) then do; 1287 /* retryable error */ 1288 tai.write_errors = tai.write_errors + 1; 1289 if buffer_ptr -> tbi.recovery then do; 1290 if tai.retry_count < MAX_RETRY_COUNT then do; 1291 tai.retry_in_progress = "1"b; 1292 tai.retry_count = tai.retry_count + 1; 1293 call tape_ioi_error_retry (wksp, buffer_ptr, isp, code); 1294 if code = 0 then 1295 done = "0"b; /* keep on trying */ 1296 else do; 1297 CHECK_WRITE_CANT_RECOVER: 1298 if status_class = "DE" then 1299 result = TAPE_IO_RECOVERABLE_IO_ERROR_AND_EOT; 1300 else result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1301 if code ^= error_table_$bad_density then 1302 code = error_table_$device_parity; 1303 end; 1304 end; 1305 else do; /* user wants no help */ 1306 if status_class = "DE" then 1307 result = TAPE_IO_RECOVERABLE_IO_ERROR_AND_EOT; 1308 else result = TAPE_IO_RECOVERABLE_IO_ERROR; 1309 code = error_table_$device_parity; 1310 end; 1311 end; 1312 else goto CHECK_WRITE_CANT_RECOVER; 1313 end; 1314 else if (status_class = "CA") | (status_class = "IP") then do; 1315 /* code alert */ 1316 code = error_table_$device_code_alert; 1317 if buffer_ptr -> tbi.modes.data_code = "03"b3 | buffer_ptr -> tbi.modes.data_code = "25"b3 then 1318 result = TAPE_IO_CODE_ALERT; 1319 else result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 1320 end; 1321 end; 1322 1323 call remove_from_list (tai.queue_list_offset, buffer_ptr); 1324 if result = TAPE_IO_SUCCESS then do; 1325 tai.at_bot = "0"b; 1326 call keep_it_going (isp, xcode); 1327 if xcode ^= 0 then 1328 code = xcode; 1329 end; 1330 else do; /* suspend all pending writes */ 1331 begin; 1332 1333 dcl buffer_ptr ptr; 1334 1335 semi_queued_offset = tai.queue_list_offset; 1336 tai.queue_list_offset = 0; 1337 do buffer_ptr = ptr (wksp, semi_queued_offset) 1338 repeat ptr (wksp, buffer_ptr -> tbi.next_state_offset) while (rel (buffer_ptr) ^= ""b); 1339 buffer_ptr -> tbi.state = SUSPENDED_STATE; 1340 end; 1341 end; 1342 call add_to_list (tai.susp_list_offset, semi_queued_offset); 1343 if result ^= TAPE_IO_EOT then 1344 tai.write_errors = tai.write_errors + 1; 1345 end; 1346 1347 buffer_ptr -> tbi.state = READY_STATE; 1348 call add_to_list (tai.free_list_offset, bin (rel (buffer_ptr))); 1349 1350 buffer_data_ptr = ptr (wksp, buffer_ptr -> tbi.data_offset); 1351 tai.write_queued = (tai.queue_list_offset ^= 0); 1352 tai.retry_in_progress = "0"b; 1353 tai.retry_count = 0; 1354 return; 1355 1356 CHECK_WRITE_MAKE_CALLER_WAIT: 1357 buffer_data_ptr = null (); 1358 result = TAPE_IO_BLOCK; 1359 code = 0; 1360 return; 1361 1362 end check_write_proc; 1363 1364 /* This function figures out the number of bytes which were transferred for a given I/O operation. Note that 1365* these are 9-bit bytes. If the I/O operation transferred 6-bit characters, our calculation may be a 1366* little off. This is known as "too bad". */ 1367 1368 get_io_byte_count: 1369 proc (buffer_ptr, status_ptr) returns (fixed bin (21)); 1370 1371 dcl buffer_ptr ptr parameter; 1372 dcl status_ptr ptr parameter; 1373 1374 /* First, we have to fudge a little bit on certain statuses. The justification for this is in 1375* the EPS for the MTS0610 Magnetic Tape Subsystem, Spec #58033915. The fudging is derived from 1376* the table on page 38. */ 1377 1378 statp = addr (status_ptr -> istat.iom_stat); 1379 if (^writing ()) & (^ascii_mode (buffer_ptr)) & (^status.eo) & (status_tcp () = 1) then do; 1380 status.char_pos = "0"b3; 1381 status.eo = "1"b; 1382 end; 1383 1384 /* Next, adjust the LPW residue. On a marker interrupt, by the time io_manager gets around to picking up the LPW, 1385* it has been advanced. We use the DCW address residue in the status to decide where the LPW was pointing. */ 1386 1387 if status.marker then 1388 substr (status_ptr -> istat.lpw, 1, 18) = 1389 bit ( 1390 bin (bin (rel (addr (buffer_ptr -> tbi.dcw_words)), 18) 1391 + divide (bin (status.address) - (buffer_ptr -> tbi.data_offset), WORDS_PER_DCW_TALLY, 12) + 1, 18), 1392 18); 1393 1394 /* If the initiate bit is set in the status, no data was transferred (no tape movement occurred). */ 1395 1396 if status.initiate then 1397 return (0); 1398 1399 /* The calculations have to be done differently depending on whether the operation was a read or a write, 1400* and on whether the channel was in ASCII mode or binary mode. */ 1401 1402 if writing () then do; /* either all was written, or none, we claim... */ 1403 if status_ptr -> istat.er then 1404 return (0); /* can't trust what's on the tape */ 1405 else return (buffer_ptr -> tbi.data_len); 1406 end; 1407 else do; /* reading, we'll trust the counts */ 1408 if ascii_mode (buffer_ptr) then do; 1409 buffer_ptr -> tbi.data_len = 1410 word_count () * BYTES_PER_WORD - mod (BYTES_PER_WORD - status_tcp (), BYTES_PER_WORD); 1411 buffer_ptr -> tbi.bit_len = (buffer_ptr -> tbi.data_len) * BITS_PER_BYTE; 1412 end; 1413 else do; 1414 buffer_ptr -> tbi.bit_len = 1415 BITS_PER_WORD * (word_count () - 1 - bin (status.eo)) 1416 + BITS_PER_CHAR * (BITS_PER_CHAR - mod (BITS_PER_CHAR - status_tcp (), BITS_PER_CHAR)); 1417 if (status.major = "0000"b) & ((status.sub & "001010"b) = "000000"b) then 1418 buffer_ptr -> tbi.bit_len = buffer_ptr -> tbi.bit_len - bin (substr (status.sub, 1, 3)); 1419 buffer_ptr -> tbi.data_len = divide (buffer_ptr -> tbi.bit_len, BITS_PER_BYTE, 21); 1420 end; 1421 return (buffer_ptr -> tbi.data_len); 1422 end; 1423 1424 writing: 1425 proc () returns (bit (1) aligned); 1426 1427 return ((addr (buffer_ptr -> tbi.idcw_word) -> idcw.command & "10"b3) ^= "00"b3); 1428 1429 end writing; 1430 1431 status_tcp: 1432 proc () returns (fixed bin (3)); 1433 1434 return (bin (status.char_pos, 3)); 1435 1436 end status_tcp; 1437 1438 word_count: 1439 proc () returns (fixed bin (19)); 1440 1441 dcl dcw_idx fixed bin (9) unsigned; 1442 dcl dcw_ptr ptr; 1443 dcl wc fixed bin (19); 1444 1445 wc = 0; /* no words yet */ 1446 dcw_idx = 1; /* start with first DCW */ 1447 do dcw_ptr = addr (buffer_ptr -> tbi.dcw_words) repeat addrel (dcw_ptr, 1) 1448 while ((dcw_idx <= buffer_ptr -> tbi.ndcws) 1449 & (dcw_ptr ^= ptr (wksp, bin (substr (status_ptr -> istat.lpw, 1, 18))))); 1450 if dcw_ptr -> dcw.tally then 1451 wc = wc + bin (dcw_ptr -> dcw.tally); 1452 else wc = wc + WORDS_PER_DCW_TALLY; /* handle large tallies */ 1453 dcw_idx = dcw_idx + 1; 1454 end; 1455 return (wc - bin (status.tally)); 1456 1457 end word_count; 1458 1459 end get_io_byte_count; 1460 1461 /* This procedure is called after several queue_(read write)s. It moves the list of semi-queued buffers 1462* to the end of the list of queued buffers. If the queued list was empty, a connect is issued. The reason 1463* we have a concept of semi-queued buffers is so that higher level routines can queue a list and issue 1464* one connect on it. */ 1465 1466 run: 1467 proc (write_flag, code); 1468 1469 dcl write_flag bit (1) aligned parameter; 1470 dcl code fixed bin (35) parameter; 1471 1472 dcl bufp ptr; 1473 1474 if tai.queue_list_offset = 0 then do; /* no I/O currently happening */ 1475 call set_timeout (TIMEOUT_IO); 1476 call connect (bin (rel (addr (ptr (wksp, semi_queued_offset) -> tbi.idcw_word))), code); 1477 if code = 0 then do; 1478 if write_flag then 1479 tai.write_queued = "1"b; 1480 else do; 1481 tai.read_queued = "1"b; 1482 end; 1483 tai.queue_list_offset = semi_queued_offset; 1484 end; 1485 else do; /* couldn't connect */ 1486 do bufp = ptr (wksp, semi_queued_offset) repeat ptr (wksp, bufp -> tbi.next_state_offset) 1487 while (rel (bufp) ^= ""b); 1488 if write_flag then 1489 bufp -> tbi.state = SUSPENDED_STATE; 1490 else bufp -> tbi.state = READY_STATE; 1491 end; 1492 if write_flag then 1493 call add_to_list (tai.susp_list_offset, semi_queued_offset); 1494 else call add_to_list (tai.free_list_offset, semi_queued_offset); 1495 end; 1496 end; 1497 else call add_to_list (tai.queue_list_offset, semi_queued_offset); 1498 1499 end run; 1500 1501 /* This function is called to keep the tape spinning at top speed. It reconnects the I/O 1502* if the current status shows a termination interrupt and the queued list shows that there is more 1503* I/O to be done (some race condition must have caused the IOM to miss the marker request). 1504* This routine should only be called if it is OK to continue--if error retries are to be done 1505* they should be done before this routine is called. The buffer which just finished must have been 1506* removed from the queued list. */ 1507 1508 keep_it_going: 1509 proc (status_ptr, code); 1510 1511 dcl status_ptr ptr parameter; 1512 dcl code fixed bin (35) parameter; 1513 1514 if (status_ptr -> istat.level = IO_TERMINATE_INTERRUPT_LEVEL) & (tai.queue_list_offset ^= 0) then do; 1515 tai.times_tape_stopped = tai.times_tape_stopped + 1; 1516 semi_queued_offset = tai.queue_list_offset; 1517 tai.queue_list_offset = 0; 1518 call run ((ptr (wksp, semi_queued_offset) -> tbi.idcw_word & "10"b3) ^= "0"b3, code); 1519 end; 1520 else code = 0; 1521 1522 end keep_it_going; 1523 1524 /* Procedure to set the timeout value */ 1525 1526 set_timeout: 1527 proc (time); 1528 1529 dcl time fixed bin (71) parameter; 1530 1531 dcl code fixed bin (35); 1532 1533 if time ^= tai.cur_timeout then do; 1534 call ioi_$timeout (tai.ioi_index, time, code); 1535 if code = 0 then 1536 tai.cur_timeout = time; 1537 end; 1538 1539 end set_timeout; 1540 1541 /* Procedure to do the IOI connect. It will try to recover from an I/O in progress error. */ 1542 1543 connect: 1544 procedure (offset, code); 1545 1546 dcl offset fixed bin (18) parameter; 1547 dcl code fixed bin (35); 1548 1549 dcl connect_attempt_count fixed bin; 1550 dcl give_up_time fixed bin (71); 1551 1552 dcl TEN_SECONDS fixed bin (71) static options (constant) init (10000000); 1553 1554 give_up_time = clock () + TEN_SECONDS; 1555 do while ("1"b); 1556 do connect_attempt_count = 1 to 10; 1557 call ioi_$connect (tai.ioi_index, offset, code); 1558 if code ^= error_table_$device_active then 1559 return; 1560 end; 1561 if clock () > give_up_time then 1562 return; 1563 end; 1564 1565 end connect; 1566 1567 /* Function to return a pointer to the location the TDCW will occupy. This location 1568* depends on the amount of data in the buffer. */ 1569 1570 get_tdcw_ptr: 1571 proc (buffer_ptr) returns (ptr); 1572 1573 dcl buffer_ptr ptr parameter; 1574 1575 return ( 1576 addrel (addr (buffer_ptr -> tbi.dcw_words), 1577 divide ((buffer_ptr -> tbi.data_len) - 1, BYTES_PER_DCW_TALLY, 17) + 1)); 1578 1579 end get_tdcw_ptr; 1580 1581 /* This procedure returns a flag signifying whether the specified buffer is to be processed with the 1582* controller in ASCII mode. Currently, only tape9 and ASCII/EBCDIC modes will do so. */ 1583 1584 ascii_mode: 1585 proc (buffer_ptr) returns (bit (1) aligned); 1586 1587 dcl buffer_ptr ptr parameter; 1588 1589 return ((buffer_ptr -> tbi.modes.data_code = "03"b3) | (buffer_ptr -> tbi.modes.data_code = "25"b3)); 1590 1591 end ascii_mode; 1592 1593 /* Procedure to fill a DCW list for a given buffer. Enough DCWs are set to fully describe all the data in the buffer */ 1594 1595 fill_dcw_list: 1596 proc (buffer_ptr); 1597 1598 dcl buffer_ptr ptr parameter; 1599 1600 dcl dcw_addr_ptr ptr; 1601 dcl words_left fixed bin (19); 1602 1603 do dcwp = first_dcwp () repeat next_dcwp () while (full_dcw_tally_needed ()); 1604 dcw.address = rel (dcw_addr_ptr); 1605 dcw.char_pos = "0"b3; 1606 dcw.m64 = "0"b; 1607 dcw.type = "01"b; /* IOTP */ 1608 dcw.tally = "0"b; /* 0 => 4096 */ 1609 end; 1610 1611 /* Now fill in the last DCW */ 1612 1613 dcw.address = rel (dcw_addr_ptr); 1614 dcw.char_pos = "0"b3; 1615 dcw.m64 = "0"b; 1616 dcw.type = "00"b; /* IOTD */ 1617 dcw.tally = bit (bin (words_left, 12), 12); 1618 return; 1619 1620 /* various internal functions to make the do loop above work */ 1621 1622 first_dcwp: 1623 proc returns (ptr); 1624 1625 words_left = divide ((buffer_ptr -> tbi.data_len) - 1, BYTES_PER_WORD, 18) + 1; 1626 dcw_addr_ptr = ptr (wksp, buffer_ptr -> tbi.data_offset); 1627 return (addr (buffer_ptr -> tbi.dcw_words)); 1628 1629 end first_dcwp; 1630 1631 next_dcwp: 1632 proc returns (ptr); 1633 1634 words_left = words_left - WORDS_PER_DCW_TALLY; 1635 dcw_addr_ptr = addrel (dcw_addr_ptr, WORDS_PER_DCW_TALLY); 1636 return (addrel (dcwp, 1)); 1637 1638 end next_dcwp; 1639 1640 full_dcw_tally_needed: 1641 proc returns (bit (1) aligned); 1642 1643 return (words_left > WORDS_PER_DCW_TALLY); 1644 1645 end full_dcw_tally_needed; 1646 1647 end fill_dcw_list; 1648 1649 /* Procedure to add a list of buffers to the end of another list. This procedure will adjust 1650* the IDCW and TDCW of the previously last buffer in the list to point to the list it is adding. 1651* The buffers to be added must have their state set correctly (to that of the new list), and should 1652* not be on any other list. */ 1653 1654 add_to_list: 1655 proc (list_head, new_list); 1656 1657 dcl list_head fixed bin (18) unsigned unaligned parameter; 1658 dcl new_list fixed bin (18) unsigned unaligned parameter; 1659 1660 dcl cur_buf_ptr ptr; 1661 dcl prev_buf_ptr ptr; 1662 1663 prev_buf_ptr = null (); 1664 do cur_buf_ptr = ptr (wksp, list_head) repeat ptr (wksp, cur_buf_ptr -> tbi.next_state_offset) 1665 while (rel (cur_buf_ptr) ^= ""b); 1666 prev_buf_ptr = cur_buf_ptr; 1667 end; 1668 1669 if prev_buf_ptr = null () then 1670 list_head = new_list; /* the original list was empty */ 1671 else do; /* graft it on */ 1672 idcwp = addr (prev_buf_ptr -> tbi.idcw_word); 1673 tdcwp = get_tdcw_ptr (prev_buf_ptr); 1674 prev_buf_ptr -> tbi.next_state_offset = new_list; 1675 string (tdcw) = ""b; 1676 tdcw.address = bit (bin (rel (addr (ptr (wksp, new_list) -> tbi.idcw_word)), 18), 18); 1677 tdcw.type = "10"b; 1678 1679 /* This is a kludge. If we are adding to the queued list, and it's been more than 20 seconds since 1680* we've received a terminate interrupt, don't let the list continue (this allows us to do the multiplexing at the 1681* physical channel level). */ 1682 if (list_head = tai.queue_list_offset) & (clock () > tai.last_terminate_time + TWENTY_SECONDS) then 1683 idcw.control = "00"b; /* terminate */ 1684 else idcw.control = "11"b; /* continue, marker */ 1685 end; 1686 1687 end add_to_list; 1688 1689 /* Procedure to remove a buffer from a given list. The TDCW and IDCW of the surrounding buffers are 1690* adjusted as necessary (as are their list pointers). */ 1691 1692 remove_from_list: 1693 proc (list_head, buffer_ptr); 1694 1695 dcl list_head fixed bin (18) unsigned unaligned parameter; 1696 dcl buffer_ptr ptr parameter; 1697 1698 dcl cbufp ptr; 1699 dcl pbufp ptr; 1700 1701 pbufp = null (); 1702 do cbufp = ptr (wksp, list_head) repeat ptr (wksp, cbufp -> tbi.next_state_offset) 1703 while ((rel (cbufp) ^= ""b) & (cbufp ^= buffer_ptr)); 1704 pbufp = cbufp; 1705 end; 1706 if cbufp ^= buffer_ptr then 1707 return; /* this is less than deluxe */ 1708 if pbufp = null () then 1709 list_head = cbufp -> tbi.next_state_offset; /* don't have to fiddle with DCWs */ 1710 else do; 1711 pbufp -> tbi.next_state_offset = cbufp -> next_state_offset; 1712 if pbufp -> tbi.next_state_offset = 0 then /* new end of list */ 1713 addr (pbufp -> tbi.idcw_word) -> idcw.control = "00"b; 1714 get_tdcw_ptr (pbufp) -> tdcw = get_tdcw_ptr (cbufp) -> tdcw; 1715 end; 1716 cbufp -> tbi.next_state_offset = 0; 1717 1718 end remove_from_list; 1719 1720 /* This procedure gets the status from the last tape operation, and sets status_class */ 1721 1722 get_status: 1723 proc (wait_flag, wait_label); 1724 1725 dcl wait_flag bit (1) parameter; 1726 dcl wait_label label parameter; 1727 1728 if tai.modes.wait & (tai.status_entry_idx = 0) then 1729 /* drain the channel once in awhile */ 1730 call ipc_$drain_chn (tai.event_id, (0)); 1731 1732 isp = tape_ioi_utils$get_status (wksp); 1733 do while (isp = null ()); /* wait for the status if that is allowed */ 1734 if tai.modes.wait then 1735 call ipc_$drain_chn (tai.event_id, (0)); 1736 isp = tape_ioi_utils$get_status (wksp); /* prevent races */ 1737 if isp = null () then do; 1738 if wait_flag then do; 1739 call block; 1740 isp = tape_ioi_utils$get_status (wksp); 1741 end; 1742 else goto wait_label; 1743 end; 1744 end; 1745 if ^istat.run then 1746 tai.last_terminate_time = clock (); 1747 status_class = tape_ioi_utils$get_status_class (isp); 1748 1749 end get_status; 1750 1751 /* Function to determine if the given status and buffer correspond to each other. It returns the 1752* difference (in buffers) between this status and this buffer. Thus, a result of 0 means that 1753* the status describes the I/O operation which was performed on the buffer. A negative result 1754* means that the status is of an earlier I/O operation than the buffer (this should NEVER happen), 1755* and a +N result means that the status is for the Nth buffer along in the list. All of this is 1756* determined by examining the DCW residue in the status, unless the status is for a terminate 1757* interrupt, in which case the LPW residue is used. The buffer in question is assumed to be on the queued list. */ 1758 1759 missing_statuses: 1760 proc (buffer_ptr, status_ptr) returns (fixed bin); 1761 1762 dcl buffer_ptr ptr parameter; 1763 dcl status_ptr ptr parameter; 1764 1765 dcl bbuf_idx fixed bin; 1766 dcl buf_idx fixed bin; 1767 dcl bufp ptr; 1768 dcl residue fixed bin (18) unsigned; 1769 dcl sbuf_idx fixed bin; 1770 1771 statp = addr (status_ptr -> istat.iom_stat); 1772 lpwp = addr (status_ptr -> istat.lpw); 1773 if status.marker then /* marker interrupt? */ 1774 residue = bin (status.address); /* yes, use DCW residue */ 1775 else do; /* no, use LPW residue */ 1776 residue = istat.offset; 1777 if bin (rel (addr (tai.order_data (hbound (tai.order_data, 1))))) >= residue then 1778 return (0); /* must have been a retry, must be for first buffer */ 1779 end; 1780 1781 sbuf_idx, bbuf_idx = -1; /* init to neither found */ 1782 buf_idx = 0; 1783 do bufp = ptr (wksp, tai.queue_list_offset) repeat ptr (wksp, bufp -> tbi.next_state_offset) 1784 while ((rel (bufp) ^= ""b) & ((sbuf_idx = -1) | (bbuf_idx = -1))); 1785 1786 /**** The reason the test is done for one word before the IDCW is a case which occurs when error recovery 1787* is in progress. In this case, IOI's clever handling of the two TDCWs in a row problem causes it to 1788* return an offset which is one before the read IDCW (for this problem doesn't arise when write error 1789* recovery is done--then the erase IDCW prevents there from being two TDCWs in a row. */ 1790 1791 if (residue >= bin (rel (addr (bufp -> tbi.idcw_word))) - 1) 1792 & (residue <= (bufp -> tbi.data_offset) + divide (bufp -> tbi.buffer_len, BYTES_PER_WORD, 19)) then 1793 sbuf_idx = buf_idx; 1794 if bufp = buffer_ptr then 1795 bbuf_idx = buf_idx; 1796 buf_idx = buf_idx + 1; 1797 end; 1798 1799 return (sbuf_idx - bbuf_idx); 1800 1801 end missing_statuses; 1802 1803 /* all blocking is done here */ 1804 1805 block: 1806 proc; 1807 1 1 /* BEGIN INCLUDE FILE ... event_wait_channel.incl.pl1 */ 1 2 1 3 /* ipc_$block wait list with one channel 1 4* 1 5* Written 9-May-79 by M. N. Davidoff. 1 6**/ 1 7 1 8 declare 1 event_wait_channel aligned, 1 9 2 n_channels fixed bin initial (1), /* number of channels */ 1 10 2 pad bit (36), 1 11 2 channel_id (1) fixed bin (71); /* event channel to wait on */ 1 12 1 13 /* END INCLUDE FILE ... event_wait_channel.incl.pl1 */ 1808 2 1 /* BEGIN INCLUDE FILE event_wait_info.incl.pl1 */ 2 2 2 3 /* T. Casey, May 1978 */ 2 4 2 5 dcl event_wait_info_ptr ptr; 2 6 2 7 dcl 1 event_wait_info aligned based (event_wait_info_ptr), /* argument structure filled in on return from ipc_$block */ 2 8 2 channel_id fixed bin (71), /* event channel on which wakeup occurred */ 2 9 2 message fixed bin (71), /* 72 bits of information passed by sender of wakeup */ 2 10 2 sender bit (36), /* process id of sender */ 2 11 2 origin, 2 12 3 dev_signal bit (18) unaligned, /* "1"b if device signal */ 2 13 3 ring fixed bin (17) unaligned, /* ring from which sent */ 2 14 2 channel_index fixed bin; /* index of this channel in the event wait list */ 2 15 2 16 /* END INCLUDE FILE event_wait_info.incl.pl1 */ 1809 1810 1811 dcl 1 auto_event_wait_info aligned like event_wait_info; 1812 1813 dcl ipc_$block entry (ptr, ptr, fixed bin (35)); 1814 dcl timer_manager_$alarm_wakeup 1815 entry (fixed bin (71), bit (2), fixed bin (71)); 1816 dcl timer_manager_$reset_alarm_wakeup 1817 entry (fixed bin (71)); 1818 1819 dcl RELATIVE_SECONDS bit (2) static options (constant) init ("11"b); 1820 dcl TWO_MINUTES fixed bin (71) static options (constant) init (120); 1821 1822 event_wait_channel.channel_id = tai.event_id; 1823 if tai.special_status_expected then 1824 call timer_manager_$alarm_wakeup (TWO_MINUTES, RELATIVE_SECONDS, tai.event_id); 1825 call ipc_$block (addr (event_wait_channel), addr (auto_event_wait_info), (0)); 1826 if tai.special_status_expected then 1827 call timer_manager_$reset_alarm_wakeup (tai.event_id); 1828 /* remove the extra event */ 1829 1830 end block; 1831 1832 setup: 1833 proc; 1834 1835 call tape_ioi_utils$get_workspace_ptr (p_tioi_id, wksp); 1836 if wksp = null () then 1837 call quit (error_table_$bad_arg); 1838 code, p_code = 0; 1839 1840 end setup; 1841 1842 quit: 1843 proc (code); 1844 1845 dcl code fixed bin (35); 1846 1847 p_code = code; 1848 goto ERROR_RETURN; 1849 1850 end quit; 1851 1852 ERROR_RETURN: 1853 return; 1854 3 1 /* START OF: tape_ioi_workspace.incl.pl1 * * * * * * * * * * * * * * * * */ 3 2 3 3 3 4 3 5 /****^ HISTORY COMMENTS: 3 6* 1) change(87-07-06,Hartogs), approve(87-07-06,MCR7726), 3 7* audit(87-08-27,GWMay), install(87-08-27,MR12.1-1094): 3 8* A) Added variable at_bot to structure tai. 3 9* B) Added density_command to tai structure for use by error_retry. 3 10* END HISTORY COMMENTS */ 3 11 3 12 3 13 /* 3 14* * This include file describes the workspace maintained by tape_ioi_. 3 15* * No programs other than tape_ioi_ programs should need to use this include file. 3 16* * 3 17* * This workspace is the ioi_ workspace. 3 18**/ 3 19 /* Written 8/78 by R.J.C. Kissel. */ 3 20 /* Modified April-May 1982 by Chris Jones for installation. */ 3 21 /* Modified 2/4/83 by Chris Jones to add last_terminate_time */ 3 22 3 23 /* format: style4,delnl,insnl,indattr,ifthen,declareind10,dclind10 */ 3 24 3 25 dcl wksp ptr; 3 26 3 27 dcl 1 tai based (wksp) aligned, /* Activation info and order buffer. */ 3 28 2 ioi_index fixed bin, /* For communication with ioi. */ 3 29 2 tioi_id unal, /* 36 bit activation identifier. */ 3 30 3 segno bit (18), /* Segment number of the workspace. */ 3 31 3 actid fixed bin (18) unsigned, /* Per process, per activation number. */ 3 32 2 event_id fixed bin (71), /* All ipc done on this channel. */ 3 33 2 max_timeout fixed bin (71), /* maximum timeout value */ 3 34 2 cur_timeout fixed bin (71), /* current timeout value */ 3 35 2 last_terminate_time 3 36 fixed bin (71), /* when the last terminate interrupt was received */ 3 37 ( 3 38 2 workspace_max fixed bin (18) unsigned, /* max_len-1 to fit in 18 bits. */ 3 39 2 workspace_len fixed bin (18) unsigned, /* len-1 to fit in 18 bits. */ 3 40 2 buffer_list_offset fixed bin (18) unsigned, /* to list of all buffers */ 3 41 2 free_list_offset fixed bin (18) unsigned, /* to list of free buffers */ 3 42 2 queue_list_offset fixed bin (18) unsigned, /* to list of buffers which are queued */ 3 43 2 susp_list_offset fixed bin (18) unsigned, /* to list of suspended buffers */ 3 44 2 retry_count fixed bin (9) unsigned, /* number of times we've retried this operation */ 3 45 2 buffer_count fixed bin (9) unsigned, /* Number of I/O buffers allocated. */ 3 46 2 status_entry_count fixed bin (9) unsigned, /* Number of status queue entries. */ 3 47 2 status_entry_idx fixed bin (9) unsigned, /* index of next status entry to be used */ 3 48 2 status_queue_offset 3 49 fixed bin (18) unsigned, /* Status queue offset. */ 3 50 2 pad1 bit (12), 3 51 2 density_command bit (6), /* density of data on storage */ 3 52 2 workarea_len fixed bin (18) unsigned, /* len-1 to fit in 18 bits. */ 3 53 2 workarea_offset fixed bin (18) unsigned /* Workarea offset. */ 3 54 ) unal, 3 55 2 modes unal, /* tape_ioi_ modes settings. */ 3 56 3 data_code bit (6), /* Encoded representation of data mode. */ 3 57 3 cif_code bit (6), /* CIF field for channel instructions. */ 3 58 3 align bit (1), /* "0"b--left aligned, "1"b--right aligned. */ 3 59 3 length bit (1), /* "0"b--normal, "1"b--special. */ 3 60 3 recovery bit (1), /* "0"b--no error recovery, "1"b--error recovery. */ 3 61 3 wait bit (1), /* "0"b--simplex, "1"b--multiplex. */ 3 62 3 req_len bit (1), /* "0"b--don't need to know record length, "1"b--do need it */ 3 63 2 flags unal, /* Used internally by tape_ioi_. */ 3 64 3 order_queued bit (1), /* "0"b--no order queued, "1"b--order queued. */ 3 65 3 read_queued bit (1), /* "0"b--no read queued, "1"b--read queued. */ 3 66 3 write_queued bit (1), /* "0"b--no write queued, "1"b--write queued. */ 3 67 3 order_done bit (1), /* "1"b--the queue_order entry finished the order */ 3 68 3 workarea_last bit (1), /* "1"b--user workarea at end of workspace */ 3 69 3 special_status_expected 3 70 bit (1), /* set if we're waiting for a special interrupt */ 3 71 3 retry_in_progress 3 72 bit (1), 3 73 3 suspect_short_record bit (1), /* "1"b--got invalid DCW on list service last */ 3 74 3 at_bot bit (1), /* "1"b-- tape is positioned to BOT. */ 3 75 2 pad2 bit (1) unal, 3 76 2 order_idx fixed bin (9) unsigned unaligned, 3 77 /* encoding of last order queued */ 3 78 2 counts aligned, /* error and operation counts */ 3 79 3 total_reads fixed bin (35), 3 80 3 read_errors fixed bin (35), 3 81 3 total_writes fixed bin (35), 3 82 3 write_errors fixed bin (35), 3 83 3 total_orders fixed bin (35), 3 84 3 order_errors fixed bin (35), 3 85 3 times_status_lost 3 86 fixed bin (35), 3 87 3 extra_statuses fixed bin (35), 3 88 3 times_tape_stopped 3 89 fixed bin (35), 3 90 3 recovery_succeeded 3 91 (7) fixed bin (35), /* meters which kind of recovery worked */ 3 92 2 order_count_requested 3 93 fixed bin (18) unsigned unaligned, 3 94 2 order_count_done fixed bin (18) unsigned unaligned, 3 95 2 saved_special_status 3 96 bit (36), 3 97 2 order_data_ptr ptr, 3 98 2 order_idcw bit (36) aligned, 3 99 2 order_dcw bit (36) aligned, 3 100 2 order_data (1:8) bit (36) aligned; 3 101 /**** The buffers go here, followed by the status queue entries. There are min (1, tai.nbufs) status queue entries. */ 3 102 /**** It is considered a good idea to have the length of the previous structure b an even number of words long. This 3 103* is accomplished by the aligned pointer "order_data_ptr" being followed by an even number of words. */ 3 104 3 105 /* Tape buffer overlay. Each tape buffer consists of a variable length header followed by the data area. 3 106* Whenever a buffer pointer is returned to a caller of tape_ioi_, it points to the data area. */ 3 107 3 108 dcl 1 tbi based aligned, /* I/O buffer overlay. */ 3 109 ( 2 data_offset fixed bin (18) unsigned, /* to the data portion of the buffer */ 3 110 2 next_buf_offset fixed bin (18) unsigned, /* to the next buffer in list of all buffers */ 3 111 2 next_state_offset fixed bin (18) unsigned, /* to the next buffer in the same state */ 3 112 2 state fixed bin (9) unsigned, /* buffer state */ 3 113 2 ndcws fixed bin (9) unsigned /* number of DCWs necessary to fill buffer */ 3 114 ) unal, 3 115 2 modes unal like tai.modes, /* mode settings when buffer was queued */ 3 116 2 reserved bit (1) unal, /* "1"b=>won't be used for reads unless explicitly asked */ 3 117 2 buffer_len fixed bin (21), /* length of buffer in 9-bit bytes */ 3 118 2 data_len fixed bin (21), /* length of data in buffer in 9-bit bytes */ 3 119 2 bit_len fixed bin (24), /* length of data in buffer in bits */ 3 120 2 idcw_word bit (36), /* holds IDCW */ 3 121 2 dcw_words (1 refer (tbi.ndcws)) bit (36), 3 122 /* data DCWs */ 3 123 2 tdcw_word bit (36); /* transfer to the next buffer */ 3 124 /* This header is followed by the actual buffer area. */ 3 125 3 126 /* 3 127* * N__o_t_e_s 3 128* * 3 129* * Both structures are carefully packed into words, so care should be 3 130* * taken when modifying them. 3 131* * 3 132* * The workspace_max, workspace_len, and workarea_len must be at least one long. 3 133* * This allows us to store the value-1 and thus fit into 18 bits. 3 134* * 3 135* * None of the offsets (first_buf_off, statq_off, etc.) can be zero since the first 3 136* * word in the workspace contains the ioi_index. This allows a zero offset 3 137* * to be used as a null offset indication. 3 138* * 3 139* * The data_code, cif_code, and tbi.state are encoded as follows: 3 140* * 3 141* * data mode | buffer | 3 142* * setting | data_code cif_code | Meaning state | Meaning 3 143* * __________|__________ _________|_______________________ _______|________ 3 144* * bin | 05 20 | no retry, high 1 | ready 3 145* * bcd | 04 21 | no retry, low 2 | busy 3 146* * tap9 | 03 22 | no retry, high, deskew 3 | suspended 3 147* * asc | 27 23 | no retry, low, deskew 3 148* * ebc | 24 30 | retry, high 3 149* * a/e | 25 31 | retry, low 3 150* * 32 | retry, high, deskew 3 151* * 33 | retry, low, deskew 3 152* * 3 153* * 3 154* * Before data_code can be used for the command field in the IDCW the fourth 3 155* * bit (from the right) must be set to "0"b for read commands and to "1"b for write commands. 3 156* * 3 157* * The general layout of the workspace maintained by tape_ioi_ is as follows: 3 158* * 3 159* * _________________________ 3 160* * | | 3 161* * | General Information | 3 162* * | (see tai) | 3 163* * |_______________________| 3 164* * |______O____r__d__e__r_I_D_C_W________| 3 165* * |______O____r__d__e__r_D_C_W_________| 3 166* * | | 3 167* * | Order data buffer | 3 168* * | (8 words) | 3 169* * |_______________________| 3 170* * | | 3 171* * | Optional workarea | 3 172* * | (unlimited) | 3 173* * |_______________________| 3 174* * |________I__O___I_D_C_W_________| 3 175* * | | 3 176* * | IO DCW list | 3 177* * |_______________________| 3 178* * |________I__O___T_D_C_W_________| 3 179* * | | 3 180* * | IO buffer | 3 181* * | (user specified) | 3 182* * |_______________________| 3 183* * . 3 184* * . 3 185* * . 3 186* * _________________________ 3 187* * |________I__O___I_D_C_W_________| 3 188* * | | 3 189* * | IO DCW list | 3 190* * |_______________________| 3 191* * |__________z_e_r_o_s_________| 3 192* * | | 3 193* * | IO buffer | 3 194* * | (user specified) | 3 195* * |_______________________| 3 196* * | | 3 197* * | Status queue | 3 198* * | (at least one entry) | 3 199* * |_______________________| 3 200* * | | 3 201* * | Optional workarea | 3 202* * | (limited) | 3 203* * |_______________________| 3 204**/ 3 205 3 206 /* END OF: tape_ioi_workspace.incl.pl1 * * * * * * * * * * * * * * * * */ 1855 1856 4 1 4 2 /* Begin include file ...... iom_pcw.incl.pl1 */ 4 3 4 4 dcl pcwp ptr; /* pointer to PCW */ 4 5 4 6 dcl 1 pcw based (pcwp) aligned, /* Peripheral Control Word */ 4 7 (2 command bit (6), /* device command */ 4 8 2 device bit (6), /* device code */ 4 9 2 ext bit (6), /* address extension */ 4 10 2 code bit (3), /* should be "111"b for PCW */ 4 11 2 mask bit (1), /* channel mask bit */ 4 12 2 control bit (2), /* terminate/proceed and marker control bits */ 4 13 2 chan_cmd bit (6), /* type of I/O operation */ 4 14 2 count bit (6), /* record count or control character */ 4 15 2 mbz1 bit (3), 4 16 2 channel bit (6), /* channel number */ 4 17 2 mbz2 bit (27)) unal; 4 18 4 19 dcl idcwp ptr; /* pointer to IDCW */ 4 20 4 21 dcl 1 idcw based (idcwp) aligned, /* Instruction DCW */ 4 22 (2 command bit (6), /* device command */ 4 23 2 device bit (6), /* device code */ 4 24 2 ext bit (6), /* address extension */ 4 25 2 code bit (3), /* should be "111"b for PCW */ 4 26 2 ext_ctl bit (1), /* "1"b if address extension to be used */ 4 27 2 control bit (2), /* terminate/proceed and marker control bits */ 4 28 2 chan_cmd bit (6), /* type of I/O operation */ 4 29 2 count bit (6)) unal; /* record count or control character */ 4 30 4 31 /* End include file ...... iom_pcw.incl.pl1 */ 4 32 1857 5 1 5 2 /* Begin include file ...... iom_dcw.incl.pl1 */ 5 3 5 4 dcl dcwp ptr, /* pointer to DCW */ 5 5 tdcwp ptr; /* pointer to TDCW */ 5 6 5 7 dcl 1 dcw based (dcwp) aligned, /* Data Control Word */ 5 8 (2 address bit (18), /* address for data transfer */ 5 9 2 char_pos bit (3), /* character position */ 5 10 2 m64 bit (1), /* non-zero for mod 64 address */ 5 11 2 type bit (2), /* DCW type */ 5 12 2 tally bit (12)) unal; /* tally for data transfer */ 5 13 5 14 dcl 1 tdcw based (tdcwp) aligned, /* Transfer DCW */ 5 15 (2 address bit (18), /* address to transfer to */ 5 16 2 mbz1 bit (4), 5 17 2 type bit (2), /* should be "10"b for TDCW */ 5 18 2 mbz2 bit (9), 5 19 2 ec bit (1), /* non-zero to set LPW AE bit */ 5 20 2 res bit (1), /* non-zero to restrict further use of IDCW */ 5 21 2 rel bit (1)) unal; /* non-zero to set relative mode after transfer */ 5 22 5 23 /* End of include file ...... iom_dcw.incl.pl1 */ 5 24 1858 1859 6 1 6 2 /* Begin include file ...... iom_lpw.incl.pl1 */ 6 3 /* modified 3/4/75 by Noel I. Morris */ 6 4 6 5 dcl lpwp ptr, /* pointer to LPW */ 6 6 lpwep ptr; /* pointer to LPW extension */ 6 7 6 8 dcl 1 lpw based (lpwp) aligned, /* List Pointer Word */ 6 9 (2 dcw_addr bit (18), /* address of DCW list */ 6 10 2 res bit (1), /* "1"b to restrict use of IDCW */ 6 11 2 iom_rel bit (1), /* IOM controlled copy of REL bit */ 6 12 2 ae bit (1), /* "1"b to use addr extension for DCW list service */ 6 13 2 nc bit (1), /* "1"b to supress LPW tally update */ 6 14 2 tal bit (1), /* "1"b to enable tally runout fault */ 6 15 2 rel bit (1), /* "1"b to set relative mode */ 6 16 2 tally bit (12)) unal; /* LPW tally */ 6 17 6 18 dcl 1 lpw_ext based (lpwep) aligned, /* List Pointer Word Extension */ 6 19 (2 base bit (9), /* relative addressing base */ 6 20 2 bound bit (9), /* relative addressing bound */ 6 21 2 idcwp bit (18)) unal; /* address of last IDCW */ 6 22 6 23 /* End of include file ...... iom_lpw.incl.pl1 */ 6 24 1860 1861 7 1 7 2 /* Begin include file ...... iom_stat.incl.pl1 */ 7 3 /* Last modified on 10/31/74 by Noel I. Morris */ 7 4 7 5 dcl statp ptr; /* pointer to status */ 7 6 7 7 dcl 1 status based (statp) aligned, /* IOM status information */ 7 8 (2 t bit (1), /* set to "1"b by IOM */ 7 9 2 power bit (1), /* non-zero if peripheral absent or power off */ 7 10 2 major bit (4), /* major status */ 7 11 2 sub bit (6), /* substatus */ 7 12 2 eo bit (1), /* even/odd bit */ 7 13 2 marker bit (1), /* non-zero if marker status */ 7 14 2 soft bit (2), /* software status */ 7 15 2 initiate bit (1), /* initiate bit */ 7 16 2 abort bit (1), /* software abort bit */ 7 17 2 channel_stat bit (3), /* IOM channel status */ 7 18 2 central_stat bit (3), /* IOM central status */ 7 19 2 mbz bit (6), 7 20 2 rcount bit (6), /* record count residue */ 7 21 2 address bit (18), /* DCW address residue */ 7 22 2 char_pos bit (3), /* character position residue */ 7 23 2 r bit (1), /* non-zero if reading */ 7 24 2 type bit (2), /* type of last DCW */ 7 25 2 tally bit (12)) unal; /* DCW tally residue */ 7 26 7 27 dcl 1 faultword based (statp) aligned, /* system fault word */ 7 28 (2 mbz1 bit (9), 7 29 2 channel bit (9), /* channel number */ 7 30 2 serv_req bit (5), /* service request */ 7 31 2 mbz2 bit (3), 7 32 2 controller_fault bit (4), /* system controller fault code */ 7 33 2 io_fault bit (6)) unal; /* I/O fault code */ 7 34 7 35 dcl 1 special_status based (statp) aligned, /* special status from PSIA */ 7 36 (2 t bit (1), /* entry present bit */ 7 37 2 channel bit (8), /* channel number */ 7 38 2 pad1 bit (3), 7 39 2 device bit (6), /* device address */ 7 40 2 pad2 bit (1), 7 41 2 byte2 bit (8), /* device dependent information */ 7 42 2 pad3 bit (1), 7 43 2 byte3 bit (8)) unal; /* device dependent information */ 7 44 7 45 /* End of include file iom_stat.incl.pl1 */ 7 46 1862 1863 8 1 8 2 /* Begin include file ...... ioi_stat.incl.pl1 */ 8 3 /* Last modified 3/24/75 by Noel I. Morris */ 8 4 8 5 dcl isp ptr; /* pointer to status structure */ 8 6 8 7 dcl 1 istat based (isp) aligned, /* I/O Interfacer status structure */ 8 8 2 completion, /* completion flags */ 8 9 (3 st bit (1), /* "1"b if status returned */ 8 10 3 er bit (1), /* "1"b if status indicates error condition */ 8 11 3 run bit (1), /* "1"b if channel still running */ 8 12 3 time_out bit (1)) unal, /* "1"b if time-out occurred */ 8 13 2 level fixed bin (3), /* IOM interrupt level */ 8 14 2 offset fixed bin (18), /* DCW list offset */ 8 15 2 absaddr fixed bin (24), /* absolute address of workspace */ 8 16 2 iom_stat bit (72), /* IOM status */ 8 17 2 lpw bit (72); /* LPW residue */ 8 18 8 19 dcl imp ptr; /* pointer to message structure */ 8 20 8 21 dcl 1 imess based (imp) aligned, /* I/O Interfacer event message structure */ 8 22 (2 completion like istat.completion, /* completion flags */ 8 23 2 pad bit (11), 8 24 2 level bit (3), /* interrupt level */ 8 25 2 offset bit (18), /* DCW list offset */ 8 26 2 status bit (36)) unal; /* first 36 bits of status */ 8 27 8 28 /* End of include file ...... ioi_stat.incl.pl1 */ 8 29 1864 1865 9 1 /* Begin include file io_status_word.incl.pl1 */ 9 2 /* Made from iom_stat.incl.pl1 by C. Hornig */ 9 3 9 4 dcl io_status_word_ptr ptr; 9 5 dcl 1 io_status_word based (io_status_word_ptr) aligned, /* I/O status information */ 9 6 ( 9 7 2 t bit (1), /* set to "1"b by IOM */ 9 8 2 power bit (1), /* non-zero if peripheral absent or power off */ 9 9 2 major bit (4), /* major status */ 9 10 2 sub bit (6), /* substatus */ 9 11 2 eo bit (1), /* even/odd bit */ 9 12 2 marker bit (1), /* non-zero if marker status */ 9 13 2 soft bit (2), /* software status */ 9 14 2 initiate bit (1), /* initiate bit */ 9 15 2 abort bit (1), /* software abort bit */ 9 16 2 channel_stat bit (3), /* IOM channel status */ 9 17 2 central_stat bit (3), /* IOM central status */ 9 18 2 mbz bit (6), 9 19 2 rcount bit (6) 9 20 ) unaligned; /* record count residue */ 9 21 9 22 /* End include file io_status_word.incl.pl1 */ 1866 1867 10 1 /* START OF: interrupt_levels.incl.pl1 * * * * * * * * * * * * * * * * */ 10 2 10 3 /* Written 14 June 1982 by Chris Jones */ 10 4 10 5 /* format: style4,delnl,insnl,indattr,ifthen,declareind10,dclind10 */ 10 6 dcl IO_SYSTEM_FAULT_INTERRUPT_LEVEL 10 7 fixed bin internal static options (constant) init (1); 10 8 dcl IO_TERMINATE_INTERRUPT_LEVEL 10 9 fixed bin internal static options (constant) init (3); 10 10 dcl IO_MARKER_INTERRUPT_LEVEL 10 11 fixed bin internal static options (constant) init (5); 10 12 dcl IO_SPECIAL_INTERRUPT_LEVEL 10 13 fixed bin internal static options (constant) init (7); 10 14 10 15 /* END OF: interrupt_levels.incl.pl1 * * * * * * * * * * * * * * * * */ 1868 1869 11 1 /* START OF: tape_ioi_result_indexes.incl.pl1 * * * * * * * * * * * * * * * * */ 11 2 11 3 /* Result indexes for tape_ioi_. */ 11 4 /* Written 11 May 1982 by Chris Jones */ 11 5 11 6 /* format: style4,delnl,insnl,indattr,ifthen,declareind10,dclind10 */ 11 7 dcl TAPE_IO_BLOCK fixed bin static options (constant) init (-1); 11 8 dcl TAPE_IO_SUCCESS fixed bin static options (constant) init (0); 11 9 dcl TAPE_IO_USER_PROGRAM_ERROR 11 10 fixed bin static options (constant) init (1); 11 11 dcl TAPE_IO_UNRECOVERABLE_IO_ERROR 11 12 fixed bin static options (constant) init (2); 11 13 dcl TAPE_IO_RECOVERABLE_IO_ERROR 11 14 fixed bin static options (constant) init (3); 11 15 dcl TAPE_IO_EOF fixed bin static options (constant) init (4); 11 16 dcl TAPE_IO_EOT fixed bin static options (constant) init (5); 11 17 dcl TAPE_IO_BOT fixed bin static options (constant) init (6); 11 18 dcl TAPE_IO_RECOVERABLE_IO_ERROR_AND_EOT 11 19 fixed bin static options (constant) init (7); 11 20 dcl TAPE_IO_CODE_ALERT fixed bin static options (constant) init (8); 11 21 11 22 /* END OF: tape_ioi_result_indexes.incl.pl1 * * * * * * * * * * * * * * * * */ 1870 1871 12 1 /* Begin include file ..... tape_ioi_buffer_status.incl.pl1 */ 12 2 12 3 /* This structure defines the data returned by tape_ioi_$buffer_status */ 12 4 /* Modified April 1982 by Chris Jones */ 12 5 /* Modified 2 February 1983 by Chris Jones to add support for reserved buffers. */ 12 6 /* format: style4,delnl,insnl,indattr,ifthen,declareind10,dclind10 */ 12 7 dcl tbs_ptr ptr; 12 8 12 9 dcl 1 tbs aligned based (tbs_ptr), 12 10 2 version fixed bin, 12 11 2 state fixed bin, 12 12 2 buffer_len fixed bin (21), 12 13 2 data_len fixed bin (21), 12 14 2 bit_count fixed bin (24), 12 15 2 channel_inst bit (6), 12 16 2 data_mode char (4), 12 17 ( 12 18 2 align_mode bit (1), 12 19 2 length_mode bit (1), 12 20 2 recovery_mode bit (1), 12 21 2 reserved bit (1), 12 22 2 pad bit (32) 12 23 ) unal; 12 24 12 25 dcl TBS_VERSION_1 fixed bin internal static init (1) options (constant); 12 26 12 27 dcl TBS_VERSION fixed bin internal static init (1) options (constant); 12 28 12 29 dcl READY_STATE fixed bin internal static options (constant) init (1); 12 30 dcl QUEUED_STATE fixed bin internal static options (constant) init (2); 12 31 dcl SUSPENDED_STATE fixed bin internal static options (constant) init (3); 12 32 dcl READY_AND_RESERVED_STATE fixed bin internal static options (constant) init (4); 12 33 12 34 /* End include file ..... tape_ioi_buffer_status.incl.pl1 */ 1872 1873 13 1 /* Begin include file ...... io_special_status.incl.pl1 */ 13 2 /* Written February 1981 by Chris Jones (from iom_stat.incl.pl1) */ 13 3 13 4 13 5 /****^ HISTORY COMMENTS: 13 6* 1) change(88-01-06,Farley), approve(88-03-01,MCR7831), 13 7* audit(88-03-01,Parisek), install(88-03-08,MR12.2-1032): 13 8* Corrected channel size to 6 bits, was incorrectly set to 8. 13 9* END HISTORY COMMENTS */ 13 10 13 11 13 12 dcl io_special_status_ptr ptr; /* pointer to status */ 13 13 13 14 dcl 1 io_special_status based (io_special_status_ptr) aligned, 13 15 /* special status from PSIA */ 13 16 ( 13 17 2 t bit (1), /* entry present bit */ 13 18 2 pad bit (2), 13 19 2 channel bit (6), /* channel number */ 13 20 2 pad1 bit (3), 13 21 2 device bit (6), /* device address */ 13 22 2 pad2 bit (1), 13 23 2 byte2 bit (8), /* device dependent information */ 13 24 2 pad3 bit (1), 13 25 2 byte3 bit (8) 13 26 ) unal; /* device dependent information */ 13 27 13 28 /* End of include file io_special_status.incl.pl1 */ 1874 1875 1876 end tape_ioi_io; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 04/18/00 1118.7 tape_ioi_io.pl1 >udd>sm>ds>w>ml>tape_ioi_io.pl1 1808 1 06/29/79 1828.0 event_wait_channel.incl.pl1 >ldd>incl>event_wait_channel.incl.pl1 1809 2 06/29/79 1827.8 event_wait_info.incl.pl1 >ldd>incl>event_wait_info.incl.pl1 1855 3 08/27/87 1545.9 tape_ioi_workspace.incl.pl1 >ldd>incl>tape_ioi_workspace.incl.pl1 1857 4 05/06/74 1842.1 iom_pcw.incl.pl1 >ldd>incl>iom_pcw.incl.pl1 1858 5 11/12/74 1650.1 iom_dcw.incl.pl1 >ldd>incl>iom_dcw.incl.pl1 1860 6 06/03/75 0815.0 iom_lpw.incl.pl1 >ldd>incl>iom_lpw.incl.pl1 1862 7 01/10/75 1443.6 iom_stat.incl.pl1 >ldd>incl>iom_stat.incl.pl1 1864 8 08/17/79 2315.0 ioi_stat.incl.pl1 >ldd>incl>ioi_stat.incl.pl1 1866 9 03/27/82 0530.3 io_status_word.incl.pl1 >ldd>incl>io_status_word.incl.pl1 1868 10 12/01/82 1139.8 interrupt_levels.incl.pl1 >ldd>incl>interrupt_levels.incl.pl1 1870 11 12/01/82 1139.8 tape_ioi_result_indexes.incl.pl1 >ldd>incl>tape_ioi_result_indexes.incl.pl1 1872 12 09/16/83 1210.4 tape_ioi_buffer_status.incl.pl1 >ldd>incl>tape_ioi_buffer_status.incl.pl1 1874 13 03/10/88 2109.5 io_special_status.incl.pl1 >ldd>incl>io_special_status.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. BITS_PER_BYTE constant fixed bin(17,0) initial dcl 91 ref 1411 1419 BITS_PER_CHAR 010007 constant fixed bin(17,0) initial dcl 92 ref 1414 1414 1414 1414 BITS_PER_WORD constant fixed bin(17,0) initial dcl 93 ref 1414 BYTES_PER_DCW_TALLY constant fixed bin(17,0) initial dcl 94 ref 1575 BYTES_PER_WORD 010010 constant fixed bin(17,0) initial dcl 95 ref 1180 1184 1190 1409 1409 1409 1625 1791 CHARS_PER_WORD 010007 constant fixed bin(17,0) initial dcl 96 ref 1178 IO_MARKER_INTERRUPT_LEVEL constant fixed bin(17,0) initial dcl 10-10 ref 1010 1245 IO_TERMINATE_INTERRUPT_LEVEL constant fixed bin(17,0) initial dcl 10-8 ref 1514 MAX_RETRY_COUNT constant fixed bin(17,0) initial dcl 103 ref 711 1290 ORDERS_PER_IDCW_TALLY constant fixed bin(17,0) initial dcl 97 ref 416 854 891 QUEUED_STATE constant fixed bin(17,0) initial dcl 12-30 ref 935 1204 READY_STATE constant fixed bin(17,0) initial dcl 12-29 ref 929 1115 1124 1160 1200 1347 1490 RELATIVE_SECONDS 000132 constant bit(2) initial packed unaligned dcl 1819 set ref 1823* SUSPENDED_STATE constant fixed bin(17,0) initial dcl 12-31 ref 1160 1339 1488 TAPE_IO_BLOCK constant fixed bin(17,0) initial dcl 11-7 ref 384 843 1138 1358 TAPE_IO_BOT constant fixed bin(17,0) initial dcl 11-17 ref 623 642 TAPE_IO_CODE_ALERT constant fixed bin(17,0) initial dcl 11-20 ref 1092 1317 TAPE_IO_EOF constant fixed bin(17,0) initial dcl 11-15 ref 648 677 1042 1120 TAPE_IO_EOT constant fixed bin(17,0) initial dcl 11-16 ref 663 682 701 735 1045 1049 1120 1277 1282 1343 TAPE_IO_RECOVERABLE_IO_ERROR constant fixed bin(17,0) initial dcl 11-13 ref 1083 1308 TAPE_IO_RECOVERABLE_IO_ERROR_AND_EOT constant fixed bin(17,0) initial dcl 11-18 ref 720 1297 1306 TAPE_IO_SUCCESS constant fixed bin(17,0) initial dcl 11-8 ref 250 331 366 576 616 746 753 775 795 875 1015 1018 1097 1251 1324 TAPE_IO_UNRECOVERABLE_IO_ERROR constant fixed bin(17,0) initial dcl 11-11 ref 722 802 1000 1021 1025 1029 1033 1064 1077 1089 1254 1258 1262 1300 1319 TAPE_IO_USER_PROGRAM_ERROR constant fixed bin(17,0) initial dcl 11-9 ref 175 180 187 202 209 224 268 291 314 324 568 591 810 964 1221 1272 TEN_SECONDS 000060 constant fixed bin(71,0) initial dcl 1552 ref 1554 TIMEOUT_IO 000066 constant fixed bin(71,0) initial dcl 100 set ref 1475* TIMEOUT_ORDER 000064 constant fixed bin(71,0) initial dcl 101 set ref 541* TWENTY_SECONDS 000062 constant fixed bin(71,0) initial dcl 102 ref 1682 TWO_MINUTES 000056 constant fixed bin(71,0) initial dcl 1820 set ref 1823* WORDS_PER_DCW_TALLY 010006 constant fixed bin(17,0) initial dcl 98 ref 1387 1452 1634 1635 1643 addr builtin function dcl 168 ref 337 339 348 360 401 454 471 473 486 589 589 637 639 672 674 697 759 774 860 896 906 906 908 908 936 985 1098 1166 1178 1180 1266 1378 1387 1427 1447 1476 1476 1575 1627 1672 1676 1712 1771 1772 1777 1791 1825 1825 1825 1825 addrel builtin function dcl 168 ref 1454 1575 1635 1636 address based bit(18) level 2 in structure "tdcw" packed packed unaligned dcl 5-14 in procedure "tape_ioi_io" set ref 1676* address based bit(18) level 2 in structure "dcw" packed packed unaligned dcl 5-7 in procedure "tape_ioi_io" set ref 1604* 1613* address 1 based bit(18) level 2 in structure "status" packed packed unaligned dcl 7-7 in procedure "tape_ioi_io" ref 1387 1773 at_bot 20(25) based bit(1) level 3 packed packed unaligned dcl 3-27 set ref 551* 624* 643* 796* 1101* 1325* auto_event_wait_info 000516 automatic structure level 1 dcl 1811 set ref 1825 1825 auto_special_status 000100 automatic bit(36) dcl 64 set ref 584* 586 based_detailed_status based bit(216) packed unaligned dcl 497 in begin block on line 494 set ref 499* based_detailed_status based bit(216) packed unaligned dcl 757 in begin block on line 755 set ref 759* 759 based_special_status based bit(36) dcl 564 set ref 614* bbuf_idx 000476 automatic fixed bin(17,0) dcl 1765 set ref 1781* 1783 1794* 1799 bin builtin function dcl 168 ref 359 361 361 420 542 542 589 589 697 854 858 858 860 895 906 906 908 908 946 946 1056 1098 1125 1125 1205 1205 1266 1348 1348 1387 1387 1387 1414 1417 1434 1447 1450 1455 1476 1476 1617 1676 1773 1777 1791 bit builtin function dcl 168 ref 420 895 1387 1617 1676 bit_len 5 based fixed bin(24,0) level 2 dcl 3-108 set ref 1411* 1414* 1417* 1417 1419 buf_idx 000477 automatic fixed bin(17,0) dcl 1766 set ref 1782* 1791 1794 1796* 1796 buffer_data_ptr parameter pointer dcl 953 in procedure "check_read_proc" set ref 950 962* 1129* 1135* buffer_data_ptr parameter pointer dcl 1212 in procedure "check_write_proc" set ref 1209 1220* 1350* 1356* buffer_idx 000101 automatic fixed bin(17,0) dcl 65 set ref 230* 231 232* buffer_len 3 based fixed bin(21,0) level 2 dcl 3-108 set ref 219* 943 1791 buffer_ptr parameter pointer dcl 1147 in procedure "queue_write_proc" set ref 1144 1160 1160 1165 1166 1167 1174 1176* 1178 1181 1184 1186 1195 1200 1200* 1202* 1203* 1204 1205 1205 buffer_ptr 000246 automatic pointer dcl 1109 in begin block on line 1107 set ref 1113* 1113* 1115* 1117 buffer_ptr parameter pointer dcl 1587 in procedure "ascii_mode" ref 1584 1589 1589 buffer_ptr parameter pointer dcl 1762 in procedure "missing_statuses" ref 1759 1794 buffer_ptr parameter pointer dcl 1696 in procedure "remove_from_list" ref 1692 1702 1706 buffer_ptr 000102 automatic pointer dcl 66 in procedure "tape_ioi_io" set ref 190* 190* 192 193 194* 216* 216* 218 219* 219* 232* 233 236 237* 278* 279 280* 301* 302 303* 346* 346* 348* 349 367* 367* 369 370* 372* 372* 374 375* 969* 976 977* 984 985 992* 995* 1056 1071 1073* 1089 1089 1089 1096* 1098 1124 1125 1125 1127 1127* 1129 1226* 1233 1234* 1285 1289 1293* 1317 1317 1323* 1347 1348 1348 1350 buffer_ptr 000266 automatic pointer dcl 1333 in begin block on line 1331 set ref 1337* 1337* 1339* 1340 buffer_ptr parameter pointer dcl 922 in procedure "queue_read_proc" set ref 919 929 934 935 936 937 939 941 943 943 944* 945* 946 946 buffer_ptr parameter pointer dcl 1598 in procedure "fill_dcw_list" ref 1595 1625 1626 1627 buffer_ptr parameter pointer dcl 1573 in procedure "get_tdcw_ptr" ref 1570 1575 1575 buffer_ptr parameter pointer dcl 1371 in procedure "get_io_byte_count" set ref 1368 1379* 1387 1387 1405 1408* 1409 1411 1411 1414 1417 1417 1419 1419 1421 1427 1447 1447 bufp 000334 automatic pointer dcl 1472 in procedure "run" set ref 1486* 1486* 1488 1490* 1491 bufp 000500 automatic pointer dcl 1767 in procedure "missing_statuses" set ref 1783* 1783* 1791 1791 1791 1794* 1797 cbufp 000456 automatic pointer dcl 1698 set ref 1702* 1702 1702* 1704* 1705 1706 1708 1711 1714* 1716 chan_cmd 0(24) based bit(6) level 2 packed packed unaligned dcl 4-21 set ref 478* 534* 536* 939* 941* 1098 1170* channel_id 2 000512 automatic fixed bin(71,0) array level 2 dcl 1-8 set ref 1822* char_pos 0(18) based bit(3) level 2 in structure "dcw" packed packed unaligned dcl 5-7 in procedure "tape_ioi_io" set ref 1605* 1614* char_pos 1(18) based bit(3) level 2 in structure "status" packed packed unaligned dcl 7-7 in procedure "tape_ioi_io" set ref 1380* 1434 char_position_overlay based structure level 1 packed packed unaligned dcl 1150 cif_code 2(06) based bit(6) level 3 packed packed unaligned dcl 3-108 set ref 941 clock builtin function dcl 168 ref 1554 1561 1682 1745 code parameter fixed bin(35,0) dcl 1512 in procedure "keep_it_going" set ref 1508 1518* 1520* code parameter fixed bin(35,0) dcl 1547 in procedure "connect" set ref 1543 1557* 1558 code 0(18) based bit(3) level 2 in structure "idcw" packed packed unaligned dcl 4-21 in procedure "tape_ioi_io" set ref 340 475* code parameter fixed bin(35,0) dcl 1149 in procedure "queue_write_proc" set ref 1144 1156* 1161* 1191* code parameter fixed bin(35,0) dcl 562 in procedure "check_order_proc" set ref 557 569* 589* 590 606* 631* 714* 715 723* 742* 744 805* 807* 814* 831* 837* 846* 906* 908* 909 code 000352 automatic fixed bin(35,0) dcl 1531 in procedure "set_timeout" set ref 1534* 1535 code parameter fixed bin(35,0) dcl 1845 in procedure "quit" ref 1842 1847 code parameter fixed bin(35,0) dcl 923 in procedure "queue_read_proc" set ref 919 926* 930* code parameter fixed bin(35,0) dcl 956 in procedure "check_read_proc" set ref 950 965* 970* 995* 997 1001* 1022* 1026* 1030* 1034* 1046* 1050* 1058* 1059 1066* 1073* 1074 1078 1078* 1084* 1088* 1103* 1139* code 000104 automatic fixed bin(35,0) dcl 67 in procedure "tape_ioi_io" set ref 177* 178 178* 181 190 194* 195 199* 200 200* 203 216 219* 221 225* 230 233* 237* 238 243 1838* code parameter fixed bin(35,0) dcl 390 in procedure "queue_order_proc" set ref 387 398* 410* 437* 499* 503 542* 543 code parameter fixed bin(35,0) dcl 1470 in procedure "run" set ref 1466 1476* 1477 code parameter fixed bin(35,0) dcl 1214 in procedure "check_write_proc" set ref 1209 1222* 1227* 1255* 1259* 1263* 1271* 1272 1278* 1283* 1293* 1294 1301 1301* 1309* 1316* 1327* 1359* command based bit(6) level 2 packed packed unaligned dcl 4-21 set ref 472* 532* 937* 1167* 1427 completion based structure level 2 dcl 8-7 connect_attempt_count 000362 automatic fixed bin(17,0) dcl 1549 set ref 1556* control 0(22) based bit(2) level 2 packed packed unaligned dcl 4-21 set ref 337* 340* 348* 402* 477* 486* 896* 938* 985* 1169* 1682* 1684* 1712* count 0(30) based bit(6) level 2 in structure "idcw" packed packed unaligned dcl 4-21 in procedure "tape_ioi_io" set ref 361 416* 420* 440* 455* 479* 516* 854 858 891* 895* 942* 1175* 1178 1180 1196* count parameter fixed bin(17,0) dcl 391 in procedure "queue_order_proc" ref 387 416 420 483 546 count parameter fixed bin(17,0) dcl 560 in procedure "check_order_proc" set ref 557 567* 575* 592* 599* 615* 625* 644* 649* 655* 664* 678* 683* 689* 702* 734* 745* 751* 765* 794* 845* 874* counts 21 based structure level 2 dcl 3-27 cur_buf_ptr 000444 automatic pointer dcl 1660 set ref 1664* 1664* 1666* 1667 cur_timeout 6 based fixed bin(71,0) level 2 dcl 3-27 set ref 1533 1535* data_code 2 based bit(6) level 3 packed packed unaligned dcl 3-108 set ref 937 1089 1089 1089 1167 1178 1285 1317 1317 1589 1589 data_len parameter fixed bin(21,0) dcl 954 in procedure "check_read_proc" set ref 950 963* 1127* 1137* data_len parameter fixed bin(21,0) dcl 1148 in procedure "queue_write_proc" ref 1144 1178 1180 1181 1184 1184 1186 1190 1195 data_len 4 based fixed bin(21,0) level 2 in structure "tbi" dcl 3-108 in procedure "tape_ioi_io" set ref 943* 1181* 1184* 1186* 1195* 1405 1409* 1411 1419* 1421 1575 1625 data_offset based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3-108 ref 251 1129 1350 1387 1626 1791 data_ptr parameter pointer dcl 392 ref 387 433 454 499 549 dcw based structure level 1 dcl 5-7 dcw_addr_ptr 000410 automatic pointer dcl 1600 set ref 1604 1613 1626* 1635* 1635 dcw_idx 000320 automatic fixed bin(9,0) unsigned dcl 1441 set ref 1446* 1447 1453* 1453 dcw_ptr 000322 automatic pointer dcl 1442 set ref 1447* 1447* 1450 1450* 1454 dcw_words 7 based bit(36) array level 2 dcl 3-108 set ref 1387 1447 1575 1627 dcwp 000122 automatic pointer dcl 5-4 set ref 1603* 1604 1605 1606 1607 1608* 1613 1614 1615 1616 1617 1636 densities 000071 constant fixed bin(17,0) initial array dcl 88 ref 434 434 434 436 density 000157 automatic fixed bin(17,0) dcl 428 set ref 433* 434 density_command 16(30) based bit(6) level 2 packed packed unaligned dcl 3-27 set ref 442* density_commands 000070 constant bit(6) initial array packed unaligned dcl 89 ref 441 density_idx 000160 automatic fixed bin(17,0) dcl 429 set ref 434* 434* 436 441 device 0(06) based bit(6) level 2 packed packed unaligned dcl 4-21 set ref 473* 473 device_command 000105 automatic bit(6) packed unaligned dcl 68 set ref 441* 442 530* 532 divide builtin function dcl 168 ref 1387 1419 1575 1625 1791 done 000264 automatic bit(1) dcl 1216 in procedure "check_write_proc" set ref 1229* 1230 1238* 1274* 1294* done 000244 automatic bit(1) dcl 958 in procedure "check_read_proc" set ref 972* 973 981* 997* 1061* 1074* eo 0(12) based bit(1) level 2 packed packed unaligned dcl 7-7 set ref 1379 1381* 1414 er 0(01) based bit(1) level 3 packed packed unaligned dcl 8-7 set ref 1013* 1247* 1403 error_counters based bit(36) array dcl 772 in begin block on line 770 set ref 774* 774 error_counters based bit(36) array dcl 452 in begin block on line 449 set ref 454* 454 error_table_$action_not_performed 000046 external static fixed bin(35,0) dcl 134 ref 631 807 error_table_$bad_arg 000050 external static fixed bin(35,0) dcl 136 set ref 233 284 307 1836* error_table_$bad_density 000052 external static fixed bin(35,0) dcl 137 ref 437 805 1034 1078 1301 error_table_$blank_tape 000054 external static fixed bin(35,0) dcl 139 ref 1050 1283 error_table_$buffer_invalid_state 000056 external static fixed bin(35,0) dcl 141 ref 930 1161 error_table_$device_active 000060 external static fixed bin(35,0) dcl 143 ref 398 1558 error_table_$device_attention 000062 external static fixed bin(35,0) dcl 145 ref 1030 1259 error_table_$device_code_alert 000064 external static fixed bin(35,0) dcl 147 ref 1088 1316 error_table_$device_end 000066 external static fixed bin(35,0) dcl 149 ref 1046 1278 error_table_$device_not_active 000070 external static fixed bin(35,0) dcl 151 ref 965 1222 error_table_$device_parity 000072 external static fixed bin(35,0) dcl 153 ref 723 1022 1078 1084 1263 1301 1309 error_table_$invalid_state 000074 external static fixed bin(35,0) dcl 155 ref 569 926 1156 error_table_$invalid_tape_record_length 000076 external static fixed bin(35,0) dcl 157 ref 1191 error_table_$lost_device_position 000100 external static fixed bin(35,0) dcl 159 ref 1001 error_table_$no_operation 000102 external static fixed bin(35,0) dcl 161 ref 410 error_table_$unexpected_device_status 000104 external static fixed bin(35,0) dcl 163 ref 606 1026 1066 1255 event_id 2 based fixed bin(71,0) level 2 dcl 3-27 set ref 1728* 1734* 1822 1823* 1826* event_wait_channel 000512 automatic structure level 1 dcl 1-8 set ref 1825 1825 event_wait_info based structure level 1 dcl 2-7 ext 0(12) based bit(6) level 2 packed packed unaligned dcl 4-21 set ref 474* ext_ctl 0(21) based bit(1) level 2 packed packed unaligned dcl 4-21 set ref 476* extra_statuses 30 based fixed bin(35,0) level 3 dcl 3-27 set ref 978* 978 1235* 1235 flags 20(17) based structure level 2 packed packed unaligned dcl 3-27 free_list_offset 13(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3-27 set ref 190 249 251 945* 1119* 1125* 1200* 1348* 1494* give_up_time 000364 automatic fixed bin(71,0) dcl 1550 set ref 1554* 1561 hbound builtin function dcl 168 ref 230 338 405 434 436 483 896 1266 1777 idcw based structure level 1 dcl 4-21 set ref 484 idcw_idx 000161 automatic fixed bin(17,0) dcl 469 in begin block on line 463 set ref 483* 484* 486 idcw_idx 000106 automatic fixed bin(17,0) dcl 69 in procedure "tape_ioi_io" set ref 338* 339* idcw_word 6 based bit(36) level 2 dcl 3-108 set ref 348 936 985 1098 1166 1427 1476 1476 1518 1672 1676 1712 1791 idcwp 000120 automatic pointer dcl 4-19 set ref 339* 340 340 359* 361 401* 402 416 420 440 455 471* 472 473 474 475 476 477 478 479 484 516 532 534 536 542 542 637* 672* 854 858 891 895 936* 937 938 939 941 942 1166* 1167 1169 1170 1175 1178 1180 1196 1672* 1682 1684 initiate 0(16) based bit(1) level 2 packed packed unaligned dcl 7-7 ref 1396 io_status_word based structure level 1 dcl 9-5 io_status_word_ptr 000134 automatic pointer dcl 9-4 set ref 639* 674* 854 858 ioi_$connect 000010 constant entry external dcl 107 ref 1557 ioi_$get_detailed_status 000012 constant entry external dcl 108 ref 499 ioi_$get_special_status 000014 constant entry external dcl 110 ref 831 837 ioi_$timeout 000016 constant entry external dcl 112 ref 1534 ioi_index based fixed bin(17,0) level 2 dcl 3-27 set ref 499* 831* 837* 1534* 1557* iom_stat 4 based bit(72) level 2 dcl 8-7 set ref 360 639 674 1378 1771 ipc_$block 000106 constant entry external dcl 1813 ref 1825 ipc_$drain_chn 000020 constant entry external dcl 113 ref 1728 1734 isp 000132 automatic pointer dcl 8-5 set ref 359 360 364 639 674 697 860 977* 988 992* 995* 1005 1007* 1007 1010 1012 1013 1073* 1102* 1127* 1234* 1241 1243* 1243 1245 1246 1247 1266 1293* 1326* 1732* 1733 1736* 1737 1740* 1745 1747* 1776 istat based structure level 1 dcl 8-7 set ref 1007 1243 last_terminate_time 10 based fixed bin(71,0) level 2 dcl 3-27 set ref 1682 1745* lbound builtin function dcl 168 ref 230 338 405 434 length 2(13) based bit(1) level 3 packed packed unaligned dcl 3-108 set ref 1174 level 1 based fixed bin(3,0) level 2 dcl 8-7 set ref 1010* 1245* 1514 list_head parameter fixed bin(18,0) packed unsigned unaligned dcl 1695 in procedure "remove_from_list" set ref 1692 1702 1708* list_head parameter fixed bin(18,0) packed unsigned unaligned dcl 1657 in procedure "add_to_list" set ref 1654 1664 1669* 1682 lost_statuses 000107 automatic fixed bin(17,0) dcl 70 set ref 974* 975 977* 978 982 992* 993 995* 1039* 1231* 1232 1234* 1235 1239 lpw 6 based bit(72) level 2 dcl 8-7 set ref 359 1387* 1447 1772 lpwp 000126 automatic pointer dcl 6-5 set ref 1772* m64 0(21) based bit(1) level 2 packed packed unaligned dcl 5-7 set ref 1606* 1615* major 0(02) based bit(4) level 2 packed packed unaligned dcl 7-7 ref 1417 marker 0(13) based bit(1) level 2 packed packed unaligned dcl 7-7 ref 1387 1773 max_timeout 4 based fixed bin(71,0) level 2 dcl 3-27 set ref 537* min builtin function dcl 168 ref 483 mod builtin function dcl 168 ref 1006 1007 1178 1180 1184 1190 1242 1243 1409 1414 modes 20 based structure level 2 in structure "tai" packed packed unaligned dcl 3-27 in procedure "tape_ioi_io" set ref 236 934 1165 modes 2 based structure level 2 in structure "tbi" packed packed unaligned dcl 3-108 in procedure "tape_ioi_io" set ref 236* 934* 1165* n_channels 000512 automatic fixed bin(17,0) initial level 2 dcl 1-8 set ref 1-8* ndcws 1(27) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 3-108 ref 1447 new_list parameter fixed bin(18,0) packed unsigned unaligned dcl 1658 ref 1654 1669 1674 1676 next_buffer_offset 000110 automatic fixed bin(18,0) packed unsigned unaligned dcl 71 set ref 192* 198 218* 220 369* 371 374* 376 next_state_offset 1 based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3-108 set ref 192 218 349 369 374 1117 1340 1491 1667 1674* 1705 1708 1711* 1711 1712 1716* 1797 null builtin function dcl 168 ref 210 231 233 279 302 962 1135 1220 1356 1663 1669 1701 1708 1733 1737 1836 offset parameter fixed bin(18,0) dcl 1546 in procedure "connect" set ref 1543 1557* offset 2 based fixed bin(18,0) level 2 in structure "istat" dcl 8-7 in procedure "tape_ioi_io" ref 697 860 1266 1776 order parameter char(4) packed unaligned dcl 393 ref 387 405 order_commands 000076 constant bit(6) initial array packed unaligned dcl 83 ref 472 530 order_count_done 41(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3-27 set ref 354* 361* 361 363* 363 365 507* 547* 575 708* 854 858 860 872* 873 874 891 895 896 896 order_count_requested 41 based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3-27 set ref 546* 873 891 895 896 896 993* 1038* 1038 1039 order_data 50 based bit(36) array level 2 dcl 3-27 set ref 338 338 339 403* 454 471 483 484* 486 697 759 774 860 896 896 908 908 1266 1266 1777 1777 order_data_ptr 44 based pointer level 2 dcl 3-27 set ref 549* 614 742* 759 774 order_done 20(20) based bit(1) level 3 packed packed unaligned dcl 3-27 set ref 506* 573 574* order_errors 26 based fixed bin(35,0) level 3 dcl 3-27 set ref 710* 710 804* 804 order_idcw 46 based bit(36) level 2 dcl 3-27 set ref 337 401 473 589 589 637 672 906 906 order_idx 20(27) based fixed bin(9,0) level 2 in structure "tai" packed packed unsigned unaligned dcl 3-27 in procedure "tape_ioi_io" set ref 548* 602 854 854 891 891 906 906 order_idx 000156 automatic fixed bin(17,0) dcl 395 in procedure "queue_order_proc" set ref 405* 405* 408 472 530 534 537 537 537 548 551 order_mnemonics 000102 constant char(4) initial array packed unaligned dcl 79 ref 405 405 405 551 order_queued 20(17) based bit(1) level 3 packed packed unaligned dcl 3-27 set ref 354 361 377* 545* 566 816* 925 1155 p_buffer_data_ptr parameter pointer dcl 51 set ref 184 200* 206 210* 251* 253* 273 278* 288 293* 296 301* 311 316* p_code parameter fixed bin(35,0) dcl 52 set ref 172 181* 184 203* 206 253* 258 262* 265 270* 273 280* 281 284* 288 293* 296 303* 304 307* 311 316* 321 1838* 1847* p_data_len parameter fixed bin(21,0) dcl 55 set ref 184 200* 206 237* 288 293* 296 303* p_icount parameter fixed bin(17,0) dcl 53 set ref 172 177* 258 262* p_ocount parameter fixed bin(17,0) dcl 54 set ref 172 178* 265 270* 321 330* 365* 382* p_order parameter char(4) packed unaligned dcl 57 set ref 172 177* 258 262* p_order_data_ptr parameter pointer dcl 56 set ref 172 177* 258 262* p_result_idx parameter fixed bin(17,0) dcl 58 set ref 172 175* 178* 180* 184 187* 200* 202* 206 209* 224* 250* 253* 265 268* 270* 288 291* 293* 311 314* 316* 321 324* 331* 366* 384* p_tioi_id parameter bit(36) dcl 59 set ref 172 184 206 258 265 273 288 296 311 321 1835* p_write_buffers parameter pointer array dcl 60 set ref 206 230 230 231 232* pbufp 000460 automatic pointer dcl 1699 set ref 1701* 1704* 1708 1711 1712 1712 1714* prev_buf_ptr 000446 automatic pointer dcl 1661 set ref 1663* 1666* 1669 1672 1673* 1674 ptr builtin function dcl 168 ref 190 198 216 220 251 251 346 349 359 367 371 372 376 969 1007 1113 1117 1129 1226 1243 1337 1340 1350 1447 1476 1476 1486 1491 1518 1626 1664 1667 1676 1702 1705 1783 1797 queue_list_offset 14 based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3-27 set ref 346 367 969 1057* 1096* 1111 1112* 1130 1226 1269 1270* 1323* 1335 1336* 1351 1474 1483* 1497* 1514 1516 1517* 1682 1783 rcount 0(30) based bit(6) level 2 in structure "io_status_word" packed packed unaligned dcl 9-5 in procedure "tape_ioi_io" ref 854 858 rcount 0(30) based bit(6) level 2 in structure "status" packed packed unaligned dcl 7-7 in procedure "tape_ioi_io" ref 361 read_errors 22 based fixed bin(35,0) level 3 dcl 3-27 set ref 1120* 1120 read_queued 20(18) based bit(1) level 3 packed packed unaligned dcl 3-27 set ref 377* 961 1130* 1155 1481* recovery 2(14) based bit(1) level 3 packed packed unaligned dcl 3-108 set ref 939 1071 1289 recovery_strategy 000111 automatic fixed bin(3,0) unsigned dcl 72 set ref 1098* 1099 1099 1099 recovery_succeeded 32 based fixed bin(35,0) array level 3 dcl 3-27 set ref 1099* 1099 rel builtin function dcl 168 ref 190 216 346 367 372 542 542 589 589 697 860 906 906 908 908 946 946 1056 1113 1125 1125 1205 1205 1266 1337 1348 1348 1387 1476 1476 1486 1604 1613 1664 1676 1702 1777 1783 1791 req_len 2(16) based bit(1) level 3 packed packed unaligned dcl 3-108 set ref 984 1127 requested_density based fixed bin(17,0) dcl 431 ref 433 reserved 2(17) based bit(1) level 2 packed packed unaligned dcl 3-108 ref 193 residue 000502 automatic fixed bin(18,0) unsigned dcl 1768 set ref 1773* 1776* 1777 1791 1791 result parameter fixed bin(17,0) dcl 561 in procedure "check_order_proc" set ref 557 568* 576* 591* 616* 623* 642* 648* 663* 677* 682* 701* 720* 722* 735* 746* 753* 775* 795* 802* 810* 843* 875* result parameter fixed bin(17,0) dcl 955 in procedure "check_read_proc" set ref 950 964* 1000* 1015* 1018* 1021* 1025* 1029* 1033* 1042* 1045* 1049* 1064* 1077* 1083* 1089* 1092* 1097 1120 1120 1138* result parameter fixed bin(17,0) dcl 1213 in procedure "check_write_proc" set ref 1209 1221* 1251* 1254* 1258* 1262* 1272* 1277* 1282* 1297* 1300* 1306* 1308* 1317* 1319* 1324 1343 1358* retry_count 15 based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 3-27 set ref 711 712* 712 1290 1292* 1292 1353* retry_in_progress 20(23) based bit(1) level 3 packed packed unaligned dcl 3-27 set ref 697 818* 987* 1037 1072* 1132* 1266 1291* 1352* run 0(02) based bit(1) level 3 packed packed unaligned dcl 8-7 set ref 364 988 1012* 1246* 1745 saved_special_status 42 based bit(36) level 2 dcl 3-27 set ref 514* 586* 614 sbuf_idx 000503 automatic fixed bin(17,0) dcl 1769 set ref 1781* 1783 1791* 1799 semi_queued_offset 000112 automatic fixed bin(18,0) packed unsigned unaligned dcl 73 set ref 189* 212* 277* 300* 946* 1056* 1111* 1113 1119* 1205* 1269* 1335* 1337 1342* 1476 1476 1483 1486 1492* 1494* 1497* 1516* 1518 size builtin function dcl 168 ref 1007 1243 special_status_expected 20(22) based bit(1) level 3 packed packed unaligned dcl 3-27 set ref 582 588* 610* 1823 1826 st based bit(1) level 3 packed packed unaligned dcl 8-7 set ref 1005* 1241* state 1(18) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 3-108 set ref 929 935* 1115* 1124* 1160 1160 1200 1204* 1339* 1347* 1488* 1490* statp 000130 automatic pointer dcl 7-5 set ref 360* 361 1378* 1379 1380 1381 1387 1387 1396 1414 1417 1417 1417 1434 1455 1771* 1773 1773 status parameter bit(36) dcl 829 in procedure "get_special_status" set ref 826 831* 837* status based structure level 1 dcl 7-7 in procedure "tape_ioi_io" status_class 000113 automatic char(2) packed unaligned dcl 74 set ref 604 609 622 628 628 641 647 652 662 667 667 676 681 686 696 705 705 707 707 720 730 733 767 767 781 781 796 805 1014* 1018 1020 1024 1028 1032 1036 1044 1048 1052 1069 1069 1069 1087 1248* 1251 1253 1253 1257 1261 1265 1281 1285 1285 1285 1297 1306 1314 1314 1747* status_entry_count 15(18) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 3-27 ref 1006 1007 1242 1243 status_entry_idx 15(27) based fixed bin(9,0) level 2 packed packed unsigned unaligned dcl 3-27 set ref 1006* 1006 1007 1242* 1242 1243 1728 status_present 000114 automatic bit(1) dcl 75 set ref 499* 505 831* 832 837* status_ptr parameter pointer dcl 1511 in procedure "keep_it_going" ref 1508 1514 status_ptr parameter pointer dcl 1372 in procedure "get_io_byte_count" ref 1368 1378 1387 1403 1447 status_ptr parameter pointer dcl 1763 in procedure "missing_statuses" ref 1759 1771 1772 status_queue_offset 16 based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3-27 ref 1007 1243 string builtin function dcl 168 set ref 484* 484 1675* sub 0(06) based bit(6) level 2 packed packed unaligned dcl 7-7 ref 1417 1417 substr builtin function dcl 168 set ref 359 1098 1387* 1417 1447 susp_list_offset 14(18) based fixed bin(18,0) level 2 packed packed unsigned unaligned dcl 3-27 set ref 216 372 1202* 1342* 1492* suspect_short_record 20(24) based bit(1) level 3 packed packed unaligned dcl 3-27 set ref 1053 1054* 1131* tai based structure level 1 dcl 3-27 tally 0(24) based bit(12) level 2 in structure "dcw" packed packed unaligned dcl 5-7 in procedure "tape_ioi_io" set ref 1450 1450 1608* 1617* tally 1(24) based bit(12) level 2 in structure "status" packed packed unaligned dcl 7-7 in procedure "tape_ioi_io" ref 1455 tape_ioi_buffer_man$internal_set_buffer_ready 000022 constant entry external dcl 114 ref 370 375 tape_ioi_error_retry 000024 constant entry external dcl 116 ref 1073 1293 tape_ioi_error_retry$backspace 000026 constant entry external dcl 117 ref 995 tape_ioi_error_retry$eof 000030 constant entry external dcl 119 ref 714 tape_ioi_hardware_status$hardware_status 000032 constant entry external dcl 121 ref 742 tape_ioi_utils$get_buffer_ptr 000034 constant entry external dcl 123 ref 232 278 301 tape_ioi_utils$get_status 000036 constant entry external dcl 125 ref 1732 1736 1740 tape_ioi_utils$get_status_class 000040 constant entry external dcl 127 ref 1747 tape_ioi_utils$get_workspace_ptr 000042 constant entry external dcl 129 ref 1835 tape_ioi_utils$io_in_progress 000044 constant entry external dcl 131 ref 329 397 tbi based structure level 1 dcl 3-108 tcp based fixed bin(3,0) level 2 packed packed unsigned unaligned dcl 1150 set ref 1178* 1180* tdcw based structure level 1 dcl 5-14 set ref 1675* 1714* 1714 tdcwp 000124 automatic pointer dcl 5-4 set ref 1673* 1675 1676 1677 time parameter fixed bin(71,0) dcl 1529 set ref 1526 1533 1534* 1535 timer_manager_$alarm_wakeup 000110 constant entry external dcl 1814 ref 1823 timer_manager_$reset_alarm_wakeup 000112 constant entry external dcl 1816 ref 1826 times_status_lost 27 based fixed bin(35,0) level 3 dcl 3-27 set ref 983* 983 1240* 1240 times_tape_stopped 31 based fixed bin(35,0) level 3 dcl 3-27 set ref 1515* 1515 tioi_id 1 based structure level 2 packed packed unaligned dcl 3-27 ref 742 742 total_orders 25 based fixed bin(35,0) level 3 dcl 3-27 set ref 550* 550 total_reads 21 based fixed bin(35,0) level 3 dcl 3-27 set ref 195* 195 281* 281 1116* 1116 total_writes 23 based fixed bin(35,0) level 3 dcl 3-27 set ref 238* 238 304* 304 type 0(22) based bit(2) level 2 in structure "dcw" packed packed unaligned dcl 5-7 in procedure "tape_ioi_io" set ref 1607* 1616* type 0(22) based bit(2) level 2 in structure "tdcw" packed packed unaligned dcl 5-14 in procedure "tape_ioi_io" set ref 1677* unspec builtin function dcl 168 set ref 403* 742 742 wait 20(15) based bit(1) level 3 in structure "tai" packed packed unaligned dcl 3-27 in procedure "tape_ioi_io" set ref 358* 600* 717* 835 881* 1728 1734 wait 2(15) based bit(1) level 3 in structure "tbi" packed packed unaligned dcl 3-108 in procedure "tape_ioi_io" set ref 976* 1233* wait_flag parameter bit(1) packed unaligned dcl 1725 ref 1722 1738 wait_label parameter label variable dcl 1726 ref 1722 1738 wc 000324 automatic fixed bin(19,0) dcl 1443 set ref 1445* 1450* 1450 1452* 1452 1455 wksp 000116 automatic pointer dcl 3-25 set ref 190 190 195 195 198 216 216 220 232* 236 238 238 249 251 251 251 278* 281 281 301* 304 304 329* 337 338 338 339 346 346 349 354 354 358 359 361 361 361 363 363 365 367 367 370* 371 372 372 375* 376 377 377 377 397* 401 403 442 454 471 473 483 484 486 499 506 507 514 537 545 546 547 548 549 550 550 551 566 573 574 575 582 586 588 589 589 600 602 610 614 614 624 637 643 672 697 697 708 710 710 711 712 712 714* 717 742 742 742 759 759 774 774 796 804 804 816 818 831 835 837 854 854 854 858 860 860 872 873 873 874 881 891 891 891 891 895 895 896 896 896 896 896 896 906 906 906 906 908 908 925 925 934 945 961 969 969 978 978 983 983 987 993 995* 1006 1006 1006 1007 1007 1007 1007 1037 1038 1038 1039 1053 1054 1057 1072 1073* 1096 1099 1099 1101 1111 1112 1113 1116 1116 1117 1119 1120 1120 1125 1129 1130 1130 1131 1132 1155 1155 1165 1200 1202 1219 1226 1226 1235 1235 1240 1240 1242 1242 1242 1243 1243 1243 1243 1266 1266 1266 1269 1270 1288 1288 1290 1291 1292 1292 1293* 1323 1325 1335 1336 1337 1340 1342 1343 1343 1348 1350 1351 1351 1352 1353 1447 1474 1476 1476 1478 1481 1483 1486 1491 1492 1494 1497 1514 1515 1515 1516 1517 1518 1533 1534 1535 1557 1626 1664 1667 1676 1682 1682 1702 1705 1728 1728 1728 1732* 1734 1734 1736* 1740* 1745 1777 1777 1783 1783 1797 1822 1823 1823 1826 1826 1835* 1836 words_left 000412 automatic fixed bin(19,0) dcl 1601 set ref 1617 1625* 1634* 1634 1643 write_errors 24 based fixed bin(35,0) level 3 dcl 3-27 set ref 1288* 1288 1343* 1343 write_flag parameter bit(1) dcl 1469 ref 1466 1478 1488 1492 write_queued 20(19) based bit(1) level 3 packed packed unaligned dcl 3-27 set ref 377* 925 1219 1351* 1478* xcode 000265 automatic fixed bin(35,0) dcl 1217 in procedure "check_write_proc" set ref 1326* 1327 1327 xcode 000245 automatic fixed bin(35,0) dcl 959 in procedure "check_read_proc" set ref 1102* 1103 1103 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. IO_SPECIAL_INTERRUPT_LEVEL internal static fixed bin(17,0) initial dcl 10-12 IO_SYSTEM_FAULT_INTERRUPT_LEVEL internal static fixed bin(17,0) initial dcl 10-6 READY_AND_RESERVED_STATE internal static fixed bin(17,0) initial dcl 12-32 TBS_VERSION internal static fixed bin(17,0) initial dcl 12-27 TBS_VERSION_1 internal static fixed bin(17,0) initial dcl 12-25 event_wait_info_ptr automatic pointer dcl 2-5 faultword based structure level 1 dcl 7-27 imess based structure level 1 dcl 8-21 imp automatic pointer dcl 8-19 io_special_status based structure level 1 dcl 13-14 io_special_status_ptr automatic pointer dcl 13-12 lpw based structure level 1 dcl 6-8 lpw_ext based structure level 1 dcl 6-18 lpwep automatic pointer dcl 6-5 pcw based structure level 1 dcl 4-6 pcwp automatic pointer dcl 4-4 special_status based structure level 1 dcl 7-35 tbs based structure level 1 dcl 12-9 tbs_ptr automatic pointer dcl 12-7 NAMES DECLARED BY EXPLICIT CONTEXT. CHECK_ORDER 000027 constant label array(0:21) dcl 604 ref 602 CHECK_ORDER_DONE 003071 constant label dcl 816 ref 626 724 808 812 CHECK_ORDER_GOOD_RETURN 003067 constant label dcl 814 ref 577 617 645 650 665 679 684 703 736 747 763 776 798 876 CHECK_ORDER_IO_ERROR 003042 constant label dcl 802 ref 633 CHECK_ORDER_MAKE_CALLER_WAIT 003077 constant label dcl 843 ref 600 600 717 717 835 881 881 CHECK_ORDER_NOT_PERFORMED 002353 constant label dcl 631 ref 656 667 690 707 733 767 781 CHECK_ORDER_PROGRAM_ERROR 003063 constant label dcl 810 ref 607 715 744 910 CHECK_READ_BACKSPACE 003673 constant label dcl 995 ref 1040 CHECK_READ_LIST_PROBLEM 004156 constant label dcl 1064 ref 1059 CHECK_READ_MAKE_CALLER_WAIT 004504 constant label dcl 1135 ref 976 976 CHECK_READ_STOP_TAPE 003655 constant label dcl 989 ref 989 989 CHECK_WRITE_CANT_RECOVER 005345 constant label dcl 1297 ref 1289 CHECK_WRITE_MAKE_CALLER_WAIT 005600 constant label dcl 1356 ref 1233 1233 ERROR_RETURN 001546 constant label dcl 1852 set ref 1848 NEED_SPECIAL_STATUS 002212 constant label dcl 582 ref 611 QUEUE_ORDER 000000 constant label array(-1:21) dcl 410 ref 408 QUEUE_ORDER_JOIN_1 002044 constant label dcl 530 ref 421 456 QUEUE_ORDER_JOIN_2 002052 constant label dcl 532 ref 443 QUEUE_ORDER_JOIN_3 002067 constant label dcl 537 ref 487 QUEUE_ORDER_JOIN_4 002124 constant label dcl 543 ref 508 QUEUE_ORDER_REQUEST_DEVICE_STATUS 002041 constant label dcl 516 ref 505 QUEUE_WRITE_ERROR 000472 constant label dcl 222 ref 243 STOP_TAPE_MAKE_CALLER_WAIT 001542 constant label dcl 382 ref 358 358 add_to_list 006675 constant entry internal dcl 1654 ref 946 1119 1125 1205 1342 1348 1492 1494 1497 ascii_mode 006540 constant entry internal dcl 1584 ref 1176 1379 1408 block 007426 constant entry internal dcl 1805 ref 836 1739 check_order 000721 constant entry external dcl 265 check_order_proc 002162 constant entry internal dcl 557 ref 178 270 check_read 001046 constant entry external dcl 288 check_read_proc 003543 constant entry internal dcl 950 ref 200 293 check_write 001205 constant entry external dcl 311 check_write_proc 004756 constant entry internal dcl 1209 ref 253 316 connect 006457 constant entry internal dcl 1543 ref 542 589 906 908 1476 fill_dcw_list 006560 constant entry internal dcl 1595 ref 944 1203 finish_repeatable_order 003240 constant entry internal dcl 869 ref 628 652 667 686 697 705 730 first_dcwp 006631 constant entry internal dcl 1622 ref 1603 full_dcw_tally_needed 006666 constant entry internal dcl 1640 ref 1603 get_io_byte_count 005607 constant entry internal dcl 1368 ref 1127 get_special_status 003105 constant entry internal dcl 826 ref 584 get_status 007134 constant entry internal dcl 1722 ref 358 600 717 881 976 989 1233 get_tdcw_ptr 006523 constant entry internal dcl 1570 ref 1673 1714 1714 keep_it_going 006354 constant entry internal dcl 1508 ref 1102 1326 missing_statuses 007272 constant entry internal dcl 1759 ref 977 992 1234 next_dcwp 006653 constant entry internal dcl 1631 ref 1609 order 000203 constant entry external dcl 172 queue_order 000665 constant entry external dcl 258 queue_order_proc 001547 constant entry internal dcl 387 ref 177 262 queue_read 000757 constant entry external dcl 273 queue_read_proc 003426 constant entry internal dcl 919 ref 194 280 queue_write 001110 constant entry external dcl 296 queue_write_proc 004514 constant entry internal dcl 1144 ref 219 237 303 quit 007553 constant entry internal dcl 1842 ref 225 1836 read 000266 constant entry external dcl 184 reconnect 003353 constant entry internal dcl 903 ref 880 refill_order_list 003302 constant entry internal dcl 888 ref 713 879 remove_from_list 007035 constant entry internal dcl 1692 ref 945 1096 1200 1202 1323 repeatable_order_count 003157 constant entry internal dcl 851 ref 625 644 649 655 664 678 683 689 702 708 734 872 run 006205 constant entry internal dcl 1466 ref 199 222 245 285 308 1058 1271 1518 set_timeout 006426 constant entry internal dcl 1526 ref 537 541 1475 setup 007522 constant entry internal dcl 1832 ref 176 188 211 261 269 276 292 299 315 325 status_tcp 006112 constant entry internal dcl 1431 ref 1379 1409 1414 stop_tape 001241 constant entry external dcl 321 tape_ioi_io 000167 constant entry external dcl 39 word_count 006122 constant entry internal dcl 1438 ref 1409 1414 write 000407 constant entry external dcl 206 writing 006077 constant entry internal dcl 1424 ref 1379 1402 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 10552 10666 10012 10562 Length 11436 10012 114 534 537 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME tape_ioi_io 644 external procedure is an external procedure. queue_order_proc internal procedure shares stack frame of external procedure tape_ioi_io. begin block on line 425 begin block shares stack frame of external procedure tape_ioi_io. begin block on line 449 begin block shares stack frame of external procedure tape_ioi_io. begin block on line 463 begin block shares stack frame of external procedure tape_ioi_io. begin block on line 494 begin block shares stack frame of external procedure tape_ioi_io. check_order_proc internal procedure shares stack frame of external procedure tape_ioi_io. begin block on line 755 begin block shares stack frame of external procedure tape_ioi_io. begin block on line 770 begin block shares stack frame of external procedure tape_ioi_io. get_special_status internal procedure shares stack frame of external procedure tape_ioi_io. repeatable_order_count internal procedure shares stack frame of external procedure tape_ioi_io. finish_repeatable_order internal procedure shares stack frame of external procedure tape_ioi_io. refill_order_list internal procedure shares stack frame of external procedure tape_ioi_io. reconnect internal procedure shares stack frame of external procedure tape_ioi_io. queue_read_proc internal procedure shares stack frame of external procedure tape_ioi_io. check_read_proc internal procedure shares stack frame of external procedure tape_ioi_io. begin block on line 1107 begin block shares stack frame of external procedure tape_ioi_io. queue_write_proc internal procedure shares stack frame of external procedure tape_ioi_io. check_write_proc internal procedure shares stack frame of external procedure tape_ioi_io. begin block on line 1331 begin block shares stack frame of external procedure tape_ioi_io. get_io_byte_count internal procedure shares stack frame of external procedure tape_ioi_io. writing internal procedure shares stack frame of external procedure tape_ioi_io. status_tcp internal procedure shares stack frame of external procedure tape_ioi_io. word_count internal procedure shares stack frame of external procedure tape_ioi_io. run internal procedure shares stack frame of external procedure tape_ioi_io. keep_it_going internal procedure shares stack frame of external procedure tape_ioi_io. set_timeout internal procedure shares stack frame of external procedure tape_ioi_io. connect internal procedure shares stack frame of external procedure tape_ioi_io. get_tdcw_ptr internal procedure shares stack frame of external procedure tape_ioi_io. ascii_mode internal procedure shares stack frame of external procedure tape_ioi_io. fill_dcw_list internal procedure shares stack frame of external procedure tape_ioi_io. first_dcwp internal procedure shares stack frame of external procedure tape_ioi_io. next_dcwp internal procedure shares stack frame of external procedure tape_ioi_io. full_dcw_tally_needed internal procedure shares stack frame of external procedure tape_ioi_io. add_to_list internal procedure shares stack frame of external procedure tape_ioi_io. remove_from_list internal procedure shares stack frame of external procedure tape_ioi_io. get_status internal procedure shares stack frame of external procedure tape_ioi_io. missing_statuses internal procedure shares stack frame of external procedure tape_ioi_io. block internal procedure shares stack frame of external procedure tape_ioi_io. setup internal procedure shares stack frame of external procedure tape_ioi_io. quit internal procedure shares stack frame of external procedure tape_ioi_io. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME tape_ioi_io 000100 auto_special_status tape_ioi_io 000101 buffer_idx tape_ioi_io 000102 buffer_ptr tape_ioi_io 000104 code tape_ioi_io 000105 device_command tape_ioi_io 000106 idcw_idx tape_ioi_io 000107 lost_statuses tape_ioi_io 000110 next_buffer_offset tape_ioi_io 000111 recovery_strategy tape_ioi_io 000112 semi_queued_offset tape_ioi_io 000113 status_class tape_ioi_io 000114 status_present tape_ioi_io 000116 wksp tape_ioi_io 000120 idcwp tape_ioi_io 000122 dcwp tape_ioi_io 000124 tdcwp tape_ioi_io 000126 lpwp tape_ioi_io 000130 statp tape_ioi_io 000132 isp tape_ioi_io 000134 io_status_word_ptr tape_ioi_io 000156 order_idx queue_order_proc 000157 density begin block on line 425 000160 density_idx begin block on line 425 000161 idcw_idx begin block on line 463 000244 done check_read_proc 000245 xcode check_read_proc 000246 buffer_ptr begin block on line 1107 000264 done check_write_proc 000265 xcode check_write_proc 000266 buffer_ptr begin block on line 1331 000320 dcw_idx word_count 000322 dcw_ptr word_count 000324 wc word_count 000334 bufp run 000352 code set_timeout 000362 connect_attempt_count connect 000364 give_up_time connect 000410 dcw_addr_ptr fill_dcw_list 000412 words_left fill_dcw_list 000444 cur_buf_ptr add_to_list 000446 prev_buf_ptr add_to_list 000456 cbufp remove_from_list 000460 pbufp remove_from_list 000476 bbuf_idx missing_statuses 000477 buf_idx missing_statuses 000500 bufp missing_statuses 000502 residue missing_statuses 000503 sbuf_idx missing_statuses 000512 event_wait_channel block 000516 auto_event_wait_info block THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a r_e_as r_ne_as call_ext_out return_mac tra_ext_2 mpfx2 mdfx1 ext_entry ext_entry_desc divide_fx3 clock_mac THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. ioi_$connect ioi_$get_detailed_status ioi_$get_special_status ioi_$timeout ipc_$block ipc_$drain_chn tape_ioi_buffer_man$internal_set_buffer_ready tape_ioi_error_retry tape_ioi_error_retry$backspace tape_ioi_error_retry$eof tape_ioi_hardware_status$hardware_status tape_ioi_utils$get_buffer_ptr tape_ioi_utils$get_status tape_ioi_utils$get_status_class tape_ioi_utils$get_workspace_ptr tape_ioi_utils$io_in_progress timer_manager_$alarm_wakeup timer_manager_$reset_alarm_wakeup THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$bad_arg error_table_$bad_density error_table_$blank_tape error_table_$buffer_invalid_state error_table_$device_active error_table_$device_attention error_table_$device_code_alert error_table_$device_end error_table_$device_not_active error_table_$device_parity error_table_$invalid_state error_table_$invalid_tape_record_length error_table_$lost_device_position error_table_$no_operation error_table_$unexpected_device_status CONSTANTS 007560 aa 000004000000 007561 aa 000000000000 007562 aa 600000000041 007563 aa 000456000000 007564 aa 600000000041 007565 aa 001142000000 007566 aa 000004000000 007567 aa 000000000000 007570 aa 600000000041 007571 aa 000460000000 007572 aa 600000000041 007573 aa 001140000000 007574 aa 000004000000 007575 aa 000000000000 007576 aa 600000000041 007577 aa 000446000000 007600 aa 600000000041 007601 aa 000124000000 007602 aa 777777770000 007604 aa 000002000000 007605 aa 000000000000 007606 aa 600000000041 007607 aa 001130000000 007610 aa 000002000000 007611 aa 000000000000 007612 aa 600000000041 007613 aa 000122000000 007614 aa 000002000000 007615 aa 000000000000 007616 ta 000066000000 007617 aa 000000000000 007620 aa 000002000000 007621 aa 000000000000 007622 aa 600000000041 007623 aa 001035000000 007624 aa 777777077777 007626 aa 000002000000 007627 aa 000000000000 007630 aa 600000000041 007631 aa 001037000000 007632 aa 000002000000 007633 aa 000000000000 007634 aa 600000000041 007635 aa 001034000000 007636 aa 000004000000 007637 aa 000000000000 007640 aa 600000000041 007641 aa 000132000000 007642 aa 600000000041 007643 aa 000265000000 007644 aa 000004000000 007645 aa 000000000000 007646 aa 600000000041 007647 aa 000112000000 007650 aa 600000000041 007651 aa 000766000000 007652 aa 777777770077 007653 aa 000001400000 007654 aa 777777773777 007656 aa 000004000000 007657 aa 000000000000 007660 aa 600000000041 007661 aa 000132000000 007662 aa 600000000041 007663 aa 000245000000 007664 aa 777777775777 007665 aa 577777777777 007666 aa 000004000000 007667 aa 000000000000 007670 aa 600000000041 007671 aa 000750000000 007672 aa 600000000041 007673 aa 000734000000 007674 aa 000006000000 007675 aa 000000000000 007676 aa 600000000041 007677 aa 000102000000 007700 aa 600000000041 007701 aa 000132000000 007702 aa 600000000041 007703 aa 000107000000 007704 aa 000004000000 007705 aa 000000000000 007706 aa 600000000041 007707 aa 000112000000 007710 aa 600000000041 007711 aa 000715000000 007712 aa 000001200000 007714 aa 000002000000 007715 aa 000000000000 007716 aa 600000000041 007717 aa 000660000000 007720 aa 777777767777 007722 aa 000002000000 007723 aa 000000000000 007724 aa 600000000041 007725 aa 000614000000 007726 aa 777777757777 007730 aa 000002000000 007731 aa 000000000000 007732 aa 600000000041 007733 aa 000100000000 007734 aa 777777677777 007736 aa 000002000000 007737 aa 000000000000 007740 ta 000064000000 007741 aa 000000000000 007742 aa 777777737777 007743 aa 777700777777 007744 aa 777777777700 007745 aa 777777577777 007746 aa 777777377777 007747 aa 777776777777 007750 aa 777777747777 007752 aa 000004000000 007753 aa 000000000000 007754 aa 600000000041 007755 aa 000557000000 007756 aa 600000000041 007757 aa 000556000000 007760 aa 000002000000 007761 aa 000000000000 007762 aa 600000000041 007763 aa 000104000000 007764 aa 000004000000 007765 aa 000000000000 007766 aa 600000000041 007767 aa 000556000000 007770 aa 600000000041 007771 aa 000557000000 007772 aa 000004000000 007773 aa 000000000000 007774 aa 600000000041 007775 aa 000556000000 007776 aa 600000000041 007777 aa 000104000000 010000 aa 000004000000 010001 aa 000000000000 010002 aa 600000000041 010003 aa 000102000000 010004 aa 600000000041 010005 aa 000104000000 000056 aa 000000000000 000057 aa 000000000170 000060 aa 000000000000 000061 aa 000046113200 000062 aa 000000000000 000063 aa 000114226400 000064 aa 000000000000 000065 aa 000046113200 000066 aa 000000000000 000067 aa 000162341600 010006 aa 000000010000 000070 aa 646160654100 000071 aa 000000000310 000072 aa 000000001054 000073 aa 000000001440 000074 aa 000000003100 000075 aa 000000014152 000076 aa 004746454455 000077 aa 547370727500 000100 aa 405051776362 000101 aa 666726160000 000102 aa 162 144 171 040 rdy 000103 aa 142 163 146 040 bsf 000104 aa 142 163 162 040 bsr 000105 aa 146 163 146 040 fsf 000106 aa 146 163 162 040 fsr 000107 aa 145 157 146 040 eof 000110 aa 145 162 163 040 ers 000111 aa 144 163 145 040 dse 000112 aa 162 145 167 040 rew 000113 aa 162 165 156 040 run 000114 aa 154 157 144 040 lod 000115 aa 162 161 163 040 rqs 000116 aa 162 163 163 040 rss 000117 aa 162 161 144 040 rqd 000120 aa 162 163 144 040 rsd 000121 aa 144 145 156 040 den 000122 aa 160 145 162 040 per 000123 aa 160 162 157 040 pro 000124 aa 162 163 166 040 rsv 000125 aa 162 145 154 040 rel 000126 aa 162 143 162 040 rcr 000127 aa 167 143 162 040 wcr 000130 aa 474000000000 000131 aa 516000000001 000132 aa 600000000000 000133 aa 606000000022 000134 aa 404000000022 000135 aa 410000000107 000136 aa 404000000023 000137 aa 404000000003 000140 aa 162 145 167 000 rew 010011 aa 777777777777 000141 aa 514000000001 000142 aa 526000000002 010007 aa 000000000006 000143 aa 514000000044 000144 aa 526000000004 010010 aa 000000000004 000145 aa 404000000025 000146 aa 404000000021 000147 aa 404000000043 000150 aa 464000000000 000152 aa 077777000043 000153 aa 000001000000 000154 aa 464100000000 000155 aa 400000000000 000156 aa 400000000000 000157 aa 400000000000 000160 aa 162 145 164 165 retu 000161 aa 162 156 137 143 rn_c 000162 aa 157 156 166 145 onve 000163 aa 162 163 151 157 rsio 000164 aa 156 137 145 162 n_er 000165 aa 162 157 162 000 ror LABEL ARRAYS 000000 aa 001623 7100 04 tra 915,ic 001623 000001 aa 002036 7100 04 tra 1054,ic 002037 000002 aa 001723 7100 04 tra 979,ic 001725 000003 aa 001625 7100 04 tra 917,ic 001630 000004 aa 001721 7100 04 tra 977,ic 001725 000005 aa 001623 7100 04 tra 915,ic 001630 000006 aa 001717 7100 04 tra 975,ic 001725 000007 aa 001716 7100 04 tra 974,ic 001725 000010 aa 002031 7100 04 tra 1049,ic 002041 000011 aa 002030 7100 04 tra 1048,ic 002041 000012 aa 002027 7100 04 tra 1047,ic 002041 000013 aa 002026 7100 04 tra 1046,ic 002041 000014 aa 002025 7100 04 tra 1045,ic 002041 000015 aa 002024 7100 04 tra 1044,ic 002041 000016 aa 001765 7100 04 tra 1013,ic 002003 000017 aa 002022 7100 04 tra 1042,ic 002041 000020 aa 001626 7100 04 tra 918,ic 001646 000021 aa 002020 7100 04 tra 1040,ic 002041 000022 aa 002017 7100 04 tra 1039,ic 002041 000023 aa 002016 7100 04 tra 1038,ic 002041 000024 aa 002015 7100 04 tra 1037,ic 002041 000025 aa 002014 7100 04 tra 1036,ic 002041 000026 aa 001664 7100 04 tra 948,ic 001712 000027 aa 002247 7100 04 tra 1191,ic 002276 000030 aa 002274 7100 04 tra 1212,ic 002324 000031 aa 002330 7100 04 tra 1240,ic 002361 000032 aa 002410 7100 04 tra 1288,ic 002442 000033 aa 002433 7100 04 tra 1307,ic 002466 000034 aa 002507 7100 04 tra 1351,ic 002543 000035 aa 002655 7100 04 tra 1453,ic 002712 000036 aa 002763 7100 04 tra 1523,ic 003021 000037 aa 002762 7100 04 tra 1522,ic 003021 000040 aa 002761 7100 04 tra 1521,ic 003021 000041 aa 002760 7100 04 tra 1520,ic 003021 000042 aa 002673 7100 04 tra 1467,ic 002735 000043 aa 002756 7100 04 tra 1518,ic 003021 000044 aa 002720 7100 04 tra 1488,ic 002764 000045 aa 002754 7100 04 tra 1516,ic 003021 000046 aa 002753 7100 04 tra 1515,ic 003021 000047 aa 002752 7100 04 tra 1514,ic 003021 000050 aa 002751 7100 04 tra 1513,ic 003021 000051 aa 002750 7100 04 tra 1512,ic 003021 000052 aa 002747 7100 04 tra 1511,ic 003021 000053 aa 002724 7100 04 tra 1492,ic 002777 000054 aa 002745 7100 04 tra 1509,ic 003021 BEGIN PROCEDURE tape_ioi_io ENTRY TO tape_ioi_io STATEMENT 1 ON LINE 39 tape_ioi_io: proc; 000166 da 000442200000 000167 aa 001220 6270 00 eax7 656 000170 aa 7 00034 3521 20 epp2 pr7|28,* 000171 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000172 aa 000000000000 000173 aa 000000000000 STATEMENT 1 ON LINE 172 order: entry (p_tioi_id, p_order, p_icount, p_order_data_ptr, p_ocount, p_result_idx, p_code); 000174 aa 000023 7100 04 tra 19,ic 000217 ENTRY TO order STATEMENT 1 ON LINE 172 order: entry (p_tioi_id, p_order, p_icount, p_order_data_ptr, p_ocount, p_result_idx, p_code); 000175 at 000007000143 000176 tt 000144000146 000177 tt 000150000146 000200 tt 000146000147 000201 ta 000175000000 000202 da 000447300000 000203 aa 001220 6270 00 eax7 656 000204 aa 7 00034 3521 20 epp2 pr7|28,* 000205 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000206 aa 000016000000 000207 aa 000000000000 000210 aa 6 00032 3735 20 epp7 pr6|26,* 000211 aa 7 00012 3715 20 epp5 pr7|10,* 000212 aa 6 00142 6515 00 spri5 pr6|98 000213 aa 7 00014 3535 20 epp3 pr7|12,* 000214 aa 6 00144 2535 00 spri3 pr6|100 000215 aa 7 00016 3515 20 epp1 pr7|14,* 000216 aa 6 00140 2515 00 spri1 pr6|96 STATEMENT 1 ON LINE 175 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 000217 aa 000001 2360 07 ldq 1,dl 000220 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 176 call setup; 000221 aa 007301 6700 04 tsp4 3777,ic 007522 STATEMENT 1 ON LINE 177 call queue_order_proc (p_order, p_icount, p_order_data_ptr, code); 000222 aa 6 00032 3735 20 epp7 pr6|26,* 000223 aa 7 00004 3521 20 epp2 pr7|4,* p_order 000224 aa 6 00544 2521 00 spri2 pr6|356 000225 aa 7 00006 3521 20 epp2 pr7|6,* p_icount 000226 aa 6 00546 2521 00 spri2 pr6|358 000227 aa 7 00010 3521 20 epp2 pr7|8,* p_order_data_ptr 000230 aa 6 00550 2521 00 spri2 pr6|360 000231 aa 6 00104 3521 00 epp2 pr6|68 code 000232 aa 6 00552 2521 00 spri2 pr6|362 000233 aa 6 00542 3521 00 epp2 pr6|354 000234 aa 020000 4310 07 fld 8192,dl 000235 aa 2 00000 7571 00 staq pr2|0 000236 aa 001311 6700 04 tsp4 713,ic 001547 STATEMENT 1 ON LINE 178 if code = 0 then call check_order_proc (p_ocount, p_result_idx, code); 000237 aa 6 00104 2361 00 ldq pr6|68 code 000240 aa 000014 6010 04 tnz 12,ic 000254 000241 aa 6 00142 3521 20 epp2 pr6|98,* p_ocount 000242 aa 6 00544 2521 00 spri2 pr6|356 000243 aa 6 00144 3521 20 epp2 pr6|100,* p_result_idx 000244 aa 6 00546 2521 00 spri2 pr6|358 000245 aa 6 00104 3521 00 epp2 pr6|68 code 000246 aa 6 00550 2521 00 spri2 pr6|360 000247 aa 6 00542 3521 00 epp2 pr6|354 000250 aa 014000 4310 07 fld 6144,dl 000251 aa 2 00000 7571 00 staq pr2|0 000252 aa 001710 6700 04 tsp4 968,ic 002162 000253 aa 000003 7100 04 tra 3,ic 000256 STATEMENT 1 ON LINE 180 else p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 000254 aa 000001 2360 07 ldq 1,dl 000255 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 181 p_code = code; 000256 aa 6 00104 2361 00 ldq pr6|68 code 000257 aa 6 00140 7561 20 stq pr6|96,* p_code STATEMENT 1 ON LINE 182 return; 000260 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO read STATEMENT 1 ON LINE 184 read: entry (p_tioi_id, p_buffer_data_ptr, p_data_len, p_result_idx, p_code); 000261 at 000005000143 000262 tt 000150000145 000263 tt 000146000147 000264 ta 000261000000 000265 da 000454300000 000266 aa 001220 6270 00 eax7 656 000267 aa 7 00034 3521 20 epp2 pr7|28,* 000270 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000271 aa 000012000000 000272 aa 000000000000 000273 aa 6 00032 3735 20 epp7 pr6|26,* 000274 aa 7 00004 3715 20 epp5 pr7|4,* 000275 aa 6 00136 6515 00 spri5 pr6|94 000276 aa 7 00010 3535 20 epp3 pr7|8,* 000277 aa 6 00144 2535 00 spri3 pr6|100 000300 aa 7 00012 3515 20 epp1 pr7|10,* 000301 aa 6 00140 2515 00 spri1 pr6|96 STATEMENT 1 ON LINE 187 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 000302 aa 000001 2360 07 ldq 1,dl 000303 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 188 call setup; 000304 aa 007216 6700 04 tsp4 3726,ic 007522 STATEMENT 1 ON LINE 189 semi_queued_offset = 0; 000305 aa 000000 2350 07 lda 0,dl 000306 aa 6 00112 7551 00 sta pr6|74 semi_queued_offset STATEMENT 1 ON LINE 190 do buffer_ptr = ptr (wksp, tai.free_list_offset) repeat ptr (wksp, next_buffer_offset) while (rel (buffer_ptr) ^= ""b & code = 0); 000307 aa 6 00116 3735 20 epp7 pr6|78,* wksp 000310 aa 7 00013 2361 00 ldq pr7|11 tai.free_list_offset 000311 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 000312 aa 7 00000 3521 00 epp2 pr7|0 000313 aa 000000 3120 06 eawp2 0,ql 000314 aa 6 00102 2521 00 spri2 pr6|66 buffer_ptr 000315 aa 000000 0110 03 nop 0,du 000316 aa 6 00102 6351 20 eaa pr6|66,* buffer_ptr 000317 aa 000031 6000 04 tze 25,ic 000350 000320 aa 6 00104 2361 00 ldq pr6|68 code 000321 aa 000027 6010 04 tnz 23,ic 000350 STATEMENT 1 ON LINE 192 next_buffer_offset = buffer_ptr -> tbi.next_state_offset; 000322 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 000323 aa 7 00001 2351 00 lda pr7|1 tbi.next_state_offset 000324 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 000325 aa 6 00110 7551 00 sta pr6|72 next_buffer_offset STATEMENT 1 ON LINE 193 if ^buffer_ptr -> tbi.reserved then do; 000326 aa 7 00002 2351 00 lda pr7|2 tbi.reserved 000327 aa 000001 3150 03 cana 1,du 000330 aa 000012 6010 04 tnz 10,ic 000342 STATEMENT 1 ON LINE 194 call queue_read_proc (buffer_ptr, code); 000331 aa 007447 3520 04 epp2 3879,ic 010000 = 000004000000 000332 aa 003074 6700 04 tsp4 1596,ic 003426 STATEMENT 1 ON LINE 195 if code = 0 then tai.total_reads = tai.total_reads + 1; 000333 aa 6 00104 2361 00 ldq pr6|68 code 000334 aa 000006 6010 04 tnz 6,ic 000342 000335 aa 6 00116 3735 20 epp7 pr6|78,* wksp 000336 aa 7 00021 2351 00 lda pr7|17 tai.total_reads 000337 aa 000044 7330 00 lrs 36 000340 aa 000001 0330 07 adl 1,dl 000341 aa 7 00021 7561 00 stq pr7|17 tai.total_reads STATEMENT 1 ON LINE 197 end; STATEMENT 1 ON LINE 198 end; 000342 aa 6 00110 2351 00 lda pr6|72 next_buffer_offset 000343 aa 000066 7730 00 lrl 54 000344 aa 6 00116 3521 20 epp2 pr6|78,* wksp 000345 aa 000000 3120 06 eawp2 0,ql 000346 aa 6 00102 2521 00 spri2 pr6|66 buffer_ptr 000347 aa 777747 7100 04 tra -25,ic 000316 STATEMENT 1 ON LINE 199 call run ("0"b, code); 000350 aa 000000 2350 07 lda 0,dl 000351 aa 6 00556 7551 00 sta pr6|366 000352 aa 007420 3520 04 epp2 3856,ic 007772 = 000004000000 000353 aa 005632 6700 04 tsp4 2970,ic 006205 STATEMENT 1 ON LINE 200 if code = 0 then call check_read_proc (p_buffer_data_ptr, p_data_len, p_result_idx, code); 000354 aa 6 00104 2361 00 ldq pr6|68 code 000355 aa 000017 6010 04 tnz 15,ic 000374 000356 aa 6 00136 3521 20 epp2 pr6|94,* p_buffer_data_ptr 000357 aa 6 00544 2521 00 spri2 pr6|356 000360 aa 6 00032 3735 20 epp7 pr6|26,* 000361 aa 7 00006 3521 20 epp2 pr7|6,* p_data_len 000362 aa 6 00546 2521 00 spri2 pr6|358 000363 aa 6 00144 3521 20 epp2 pr6|100,* p_result_idx 000364 aa 6 00550 2521 00 spri2 pr6|360 000365 aa 6 00104 3521 00 epp2 pr6|68 code 000366 aa 6 00552 2521 00 spri2 pr6|362 000367 aa 6 00542 3521 00 epp2 pr6|354 000370 aa 020000 4310 07 fld 8192,dl 000371 aa 2 00000 7571 00 staq pr2|0 000372 aa 003151 6700 04 tsp4 1641,ic 003543 000373 aa 000003 7100 04 tra 3,ic 000376 STATEMENT 1 ON LINE 202 else p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 000374 aa 000001 2360 07 ldq 1,dl 000375 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 203 p_code = code; 000376 aa 6 00104 2361 00 ldq pr6|68 code 000377 aa 6 00140 7561 20 stq pr6|96,* p_code STATEMENT 1 ON LINE 204 return; 000400 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO write STATEMENT 1 ON LINE 206 write: entry (p_tioi_id, p_write_buffers, p_data_len, p_buffer_data_ptr, p_result_idx, p_code); 000401 at 000006000143 000402 tt 000154000145 000403 tt 000150000146 000404 ta 000147000000 000405 ta 000401000000 000406 da 000461300000 000407 aa 001220 6270 00 eax7 656 000410 aa 7 00034 3521 20 epp2 pr7|28,* 000411 aa 2 01046 2721 00 tsp2 pr2|550 ext_entry_desc 000412 aa 000014000000 000413 aa 000000000000 000414 aa 6 00032 3735 20 epp7 pr6|26,* 000415 aa 7 00010 3715 20 epp5 pr7|8,* 000416 aa 6 00136 6515 00 spri5 pr6|94 000417 aa 7 00012 3535 20 epp3 pr7|10,* 000420 aa 6 00144 2535 00 spri3 pr6|100 000421 aa 7 00014 3515 20 epp1 pr7|12,* 000422 aa 6 00140 2515 00 spri1 pr6|96 STATEMENT 1 ON LINE 209 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 000423 aa 000001 2360 07 ldq 1,dl 000424 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 210 p_buffer_data_ptr = null (); 000425 aa 777525 2370 04 ldaq -171,ic 000152 = 077777000043 000001000000 000426 aa 6 00136 7571 20 staq pr6|94,* p_buffer_data_ptr STATEMENT 1 ON LINE 211 call setup; 000427 aa 007073 6700 04 tsp4 3643,ic 007522 STATEMENT 1 ON LINE 212 semi_queued_offset = 0; 000430 aa 000000 2350 07 lda 0,dl 000431 aa 6 00112 5511 60 stba pr6|74,60 semi_queued_offset STATEMENT 1 ON LINE 216 do buffer_ptr = ptr (wksp, susp_list_offset) repeat ptr (wksp, next_buffer_offset) while (rel (buffer_ptr) ^= ""b & code = 0); 000432 aa 6 00116 3735 20 epp7 pr6|78,* wksp 000433 aa 7 00014 2361 00 ldq pr7|12 tai.susp_list_offset 000434 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 000435 aa 7 00000 3521 00 epp2 pr7|0 000436 aa 000000 3120 06 eawp2 0,ql 000437 aa 6 00102 2521 00 spri2 pr6|66 buffer_ptr 000440 aa 6 00102 6351 20 eaa pr6|66,* buffer_ptr 000441 aa 000027 6000 04 tze 23,ic 000470 000442 aa 6 00104 2361 00 ldq pr6|68 code 000443 aa 000025 6010 04 tnz 21,ic 000470 STATEMENT 1 ON LINE 218 next_buffer_offset = buffer_ptr -> tbi.next_state_offset; 000444 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 000445 aa 7 00001 2351 00 lda pr7|1 tbi.next_state_offset 000446 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 000447 aa 6 00110 7551 00 sta pr6|72 next_buffer_offset STATEMENT 1 ON LINE 219 call queue_write_proc (buffer_ptr, buffer_ptr -> tbi.buffer_len, code); 000450 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 000451 aa 6 00544 2521 00 spri2 pr6|356 000452 aa 7 00003 3521 00 epp2 pr7|3 tbi.buffer_len 000453 aa 6 00546 2521 00 spri2 pr6|358 000454 aa 6 00104 3521 00 epp2 pr6|68 code 000455 aa 6 00550 2521 00 spri2 pr6|360 000456 aa 6 00542 3521 00 epp2 pr6|354 000457 aa 014000 4310 07 fld 6144,dl 000460 aa 2 00000 7571 00 staq pr2|0 000461 aa 004033 6700 04 tsp4 2075,ic 004514 STATEMENT 1 ON LINE 220 end; 000462 aa 6 00110 2351 00 lda pr6|72 next_buffer_offset 000463 aa 000066 7730 00 lrl 54 000464 aa 6 00116 3521 20 epp2 pr6|78,* wksp 000465 aa 000000 3120 06 eawp2 0,ql 000466 aa 6 00102 2521 00 spri2 pr6|66 buffer_ptr 000467 aa 777751 7100 04 tra -23,ic 000440 STATEMENT 1 ON LINE 221 if code ^= 0 then do; 000470 aa 6 00104 2361 00 ldq pr6|68 code 000471 aa 000012 6000 04 tze 10,ic 000503 STATEMENT 1 ON LINE 222 QUEUE_WRITE_ERROR: call run ("1"b, (0)); 000472 aa 400000 2350 03 lda 131072,du 000473 aa 6 00556 7551 00 sta pr6|366 000474 aa 6 00557 4501 00 stz pr6|367 000475 aa 007267 3520 04 epp2 3767,ic 007764 = 000004000000 000476 aa 005507 6700 04 tsp4 2887,ic 006205 STATEMENT 1 ON LINE 224 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 000477 aa 000001 2360 07 ldq 1,dl 000500 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 225 call quit (code); 000501 aa 007257 3520 04 epp2 3759,ic 007760 = 000002000000 000502 aa 007051 6700 04 tsp4 3625,ic 007553 STATEMENT 1 ON LINE 226 end; STATEMENT 1 ON LINE 230 do buffer_idx = lbound (p_write_buffers, 1) to hbound (p_write_buffers, 1) while (code = 0); 000503 aa 6 00042 3735 20 epp7 pr6|34,* 000504 aa 7 00002 3715 20 epp5 pr7|2,* 000505 aa 5 00002 2361 00 ldq pr5|2 000506 aa 6 00146 7561 00 stq pr6|102 000507 aa 5 00001 2361 00 ldq pr5|1 000510 aa 6 00101 7561 00 stq pr6|65 buffer_idx 000511 aa 000000 0110 03 nop 0,du 000512 aa 6 00101 2361 00 ldq pr6|65 buffer_idx 000513 aa 6 00146 1161 00 cmpq pr6|102 000514 aa 000102 6054 04 tpnz 66,ic 000616 000515 aa 6 00104 2361 00 ldq pr6|68 code 000516 aa 000100 6010 04 tnz 64,ic 000616 STATEMENT 1 ON LINE 231 if p_write_buffers (buffer_idx) ^= null () then do; 000517 aa 6 00042 3735 20 epp7 pr6|34,* 000520 aa 7 00002 3715 20 epp5 pr7|2,* 000521 aa 5 00003 2361 00 ldq pr5|3 000522 aa 5 00001 4021 00 mpy pr5|1 000523 aa 6 00557 7561 00 stq pr6|367 000524 aa 5 00003 2361 00 ldq pr5|3 000525 aa 6 00101 4021 00 mpy pr6|65 buffer_idx 000526 aa 6 00557 1761 00 sbq pr6|367 000527 aa 6 00032 3535 20 epp3 pr6|26,* 000530 aa 6 00557 7561 00 stq pr6|367 000531 aa 3 00004 2371 66 ldaq pr3|4,*ql p_write_buffers 000532 aa 777420 6770 04 eraq -240,ic 000152 = 077777000043 000001000000 000533 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 000534 aa 000060 6000 04 tze 48,ic 000614 STATEMENT 1 ON LINE 232 buffer_ptr = tape_ioi_utils$get_buffer_ptr (wksp, p_write_buffers (buffer_idx)); 000535 aa 6 00116 3521 00 epp2 pr6|78 wksp 000536 aa 6 00544 2521 00 spri2 pr6|356 000537 aa 6 00557 7271 00 lxl7 pr6|367 000540 aa 3 00004 3521 77 epp2 pr3|4,*7 p_write_buffers 000541 aa 6 00546 2521 00 spri2 pr6|358 000542 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 000543 aa 6 00550 2521 00 spri2 pr6|360 000544 aa 6 00542 6211 00 eax1 pr6|354 000545 aa 014000 4310 07 fld 6144,dl 000546 aa 6 00044 3701 20 epp4 pr6|36,* 000547 la 4 00034 3521 20 epp2 pr4|28,* tape_ioi_utils$get_buffer_ptr 000550 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 233 if buffer_ptr = null () then code = error_table_$bad_arg; 000551 aa 6 00102 2371 00 ldaq pr6|66 buffer_ptr 000552 aa 777400 6770 04 eraq -256,ic 000152 = 077777000043 000001000000 000553 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 000554 aa 000005 6010 04 tnz 5,ic 000561 000555 aa 6 00044 3701 20 epp4 pr6|36,* 000556 la 4 00050 2361 20 ldq pr4|40,* error_table_$bad_arg 000557 aa 6 00104 7561 00 stq pr6|68 code 000560 aa 000034 7100 04 tra 28,ic 000614 STATEMENT 1 ON LINE 235 else do; STATEMENT 1 ON LINE 236 buffer_ptr -> tbi.modes = tai.modes; 000561 aa 6 00116 3735 20 epp7 pr6|78,* wksp 000562 aa 000021 7270 07 lxl7 17,dl 000563 aa 003 140 060 540 csl (pr,rl),(pr,rl),fill(0),bool(move) 000564 aa 7 00020 00 0017 descb pr7|16,x7 tai.modes 000565 aa 6 00557 00 0017 descb pr6|367,x7 000566 aa 6 00102 3715 20 epp5 pr6|66,* buffer_ptr 000567 aa 003 140 060 540 csl (pr,rl),(pr,rl),fill(0),bool(move) 000570 aa 6 00557 00 0017 descb pr6|367,x7 000571 aa 5 00002 00 0017 descb pr5|2,x7 tbi.modes STATEMENT 1 ON LINE 237 call queue_write_proc (buffer_ptr, p_data_len, code); 000572 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 000573 aa 6 00544 2521 00 spri2 pr6|356 000574 aa 6 00032 3535 20 epp3 pr6|26,* 000575 aa 3 00006 3521 20 epp2 pr3|6,* p_data_len 000576 aa 6 00546 2521 00 spri2 pr6|358 000577 aa 6 00104 3521 00 epp2 pr6|68 code 000600 aa 6 00550 2521 00 spri2 pr6|360 000601 aa 6 00542 3521 00 epp2 pr6|354 000602 aa 014000 4310 07 fld 6144,dl 000603 aa 2 00000 7571 00 staq pr2|0 000604 aa 003710 6700 04 tsp4 1992,ic 004514 STATEMENT 1 ON LINE 238 if code = 0 then tai.total_writes = tai.total_writes + 1; 000605 aa 6 00104 2361 00 ldq pr6|68 code 000606 aa 000006 6010 04 tnz 6,ic 000614 000607 aa 6 00116 3735 20 epp7 pr6|78,* wksp 000610 aa 7 00023 2351 00 lda pr7|19 tai.total_writes 000611 aa 000044 7330 00 lrs 36 000612 aa 000001 0330 07 adl 1,dl 000613 aa 7 00023 7561 00 stq pr7|19 tai.total_writes STATEMENT 1 ON LINE 240 end; STATEMENT 1 ON LINE 241 end; STATEMENT 1 ON LINE 242 end; 000614 aa 6 00101 0541 00 aos pr6|65 buffer_idx 000615 aa 777675 7100 04 tra -67,ic 000512 STATEMENT 1 ON LINE 243 if code ^= 0 then goto QUEUE_WRITE_ERROR; 000616 aa 6 00104 2361 00 ldq pr6|68 code 000617 aa 777653 6010 04 tnz -85,ic 000472 STATEMENT 1 ON LINE 245 call run ("1"b, (0)); 000620 aa 400000 2350 03 lda 131072,du 000621 aa 6 00557 7551 00 sta pr6|367 000622 aa 6 00556 4501 00 stz pr6|366 000623 aa 007127 3520 04 epp2 3671,ic 007752 = 000004000000 000624 aa 005361 6700 04 tsp4 2801,ic 006205 STATEMENT 1 ON LINE 249 if tai.free_list_offset ^= 0 then do; 000625 aa 6 00116 3735 20 epp7 pr6|78,* wksp 000626 aa 7 00013 2361 00 ldq pr7|11 tai.free_list_offset 000627 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 000630 aa 6 00556 7561 00 stq pr6|366 tai.free_list_offset 000631 aa 000014 6000 04 tze 12,ic 000645 STATEMENT 1 ON LINE 250 p_result_idx = TAPE_IO_SUCCESS; 000632 aa 000000 2360 07 ldq 0,dl 000633 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 251 p_buffer_data_ptr = ptr (wksp, ptr (wksp, tai.free_list_offset) -> tbi.data_offset); 000634 aa 6 00556 2361 00 ldq pr6|366 tai.free_list_offset 000635 aa 7 00000 3521 00 epp2 pr7|0 000636 aa 000000 3120 06 eawp2 0,ql 000637 aa 2 00000 2351 00 lda pr2|0 tbi.data_offset 000640 aa 000066 7730 00 lrl 54 000641 aa 7 00000 3521 00 epp2 pr7|0 000642 aa 000000 3120 06 eawp2 0,ql 000643 aa 6 00136 2521 20 spri2 pr6|94,* p_buffer_data_ptr STATEMENT 1 ON LINE 252 end; 000644 aa 000013 7100 04 tra 11,ic 000657 STATEMENT 1 ON LINE 253 else call check_write_proc (p_buffer_data_ptr, p_result_idx, p_code); 000645 aa 6 00136 3521 20 epp2 pr6|94,* p_buffer_data_ptr 000646 aa 6 00544 2521 00 spri2 pr6|356 000647 aa 6 00144 3521 20 epp2 pr6|100,* p_result_idx 000650 aa 6 00546 2521 00 spri2 pr6|358 000651 aa 6 00140 3521 20 epp2 pr6|96,* p_code 000652 aa 6 00550 2521 00 spri2 pr6|360 000653 aa 6 00542 3521 00 epp2 pr6|354 000654 aa 014000 4310 07 fld 6144,dl 000655 aa 2 00000 7571 00 staq pr2|0 000656 aa 004100 6700 04 tsp4 2112,ic 004756 STATEMENT 1 ON LINE 254 return; 000657 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO queue_order STATEMENT 1 ON LINE 258 queue_order: entry (p_tioi_id, p_order, p_icount, p_order_data_ptr, p_code); 000660 at 000005000143 000661 tt 000144000146 000662 tt 000150000147 000663 ta 000660000000 000664 da 000467300000 000665 aa 001220 6270 00 eax7 656 000666 aa 7 00034 3521 20 epp2 pr7|28,* 000667 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000670 aa 000012000000 000671 aa 000000000000 000672 aa 6 00032 3735 20 epp7 pr6|26,* 000673 aa 7 00012 3715 20 epp5 pr7|10,* 000674 aa 6 00140 6515 00 spri5 pr6|96 STATEMENT 1 ON LINE 261 call setup; 000675 aa 006625 6700 04 tsp4 3477,ic 007522 STATEMENT 1 ON LINE 262 call queue_order_proc (p_order, p_icount, p_order_data_ptr, p_code); 000676 aa 6 00032 3735 20 epp7 pr6|26,* 000677 aa 7 00004 3521 20 epp2 pr7|4,* p_order 000700 aa 6 00544 2521 00 spri2 pr6|356 000701 aa 7 00006 3521 20 epp2 pr7|6,* p_icount 000702 aa 6 00546 2521 00 spri2 pr6|358 000703 aa 7 00010 3521 20 epp2 pr7|8,* p_order_data_ptr 000704 aa 6 00550 2521 00 spri2 pr6|360 000705 aa 6 00140 3521 20 epp2 pr6|96,* p_code 000706 aa 6 00552 2521 00 spri2 pr6|362 000707 aa 6 00542 3521 00 epp2 pr6|354 000710 aa 020000 4310 07 fld 8192,dl 000711 aa 2 00000 7571 00 staq pr2|0 000712 aa 000635 6700 04 tsp4 413,ic 001547 STATEMENT 1 ON LINE 263 return; 000713 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO check_order STATEMENT 1 ON LINE 265 check_order: entry (p_tioi_id, p_ocount, p_result_idx, p_code); 000714 at 000004000143 000715 tt 000146000146 000716 ta 000147000000 000717 ta 000714000000 000720 da 000475300000 000721 aa 001220 6270 00 eax7 656 000722 aa 7 00034 3521 20 epp2 pr7|28,* 000723 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000724 aa 000010000000 000725 aa 000000000000 000726 aa 6 00032 3735 20 epp7 pr6|26,* 000727 aa 7 00004 3715 20 epp5 pr7|4,* 000730 aa 6 00142 6515 00 spri5 pr6|98 000731 aa 7 00006 3535 20 epp3 pr7|6,* 000732 aa 6 00144 2535 00 spri3 pr6|100 000733 aa 7 00010 3515 20 epp1 pr7|8,* 000734 aa 6 00140 2515 00 spri1 pr6|96 STATEMENT 1 ON LINE 268 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 000735 aa 000001 2360 07 ldq 1,dl 000736 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 269 call setup; 000737 aa 006563 6700 04 tsp4 3443,ic 007522 STATEMENT 1 ON LINE 270 call check_order_proc (p_ocount, p_result_idx, p_code); 000740 aa 6 00142 3521 20 epp2 pr6|98,* p_ocount 000741 aa 6 00544 2521 00 spri2 pr6|356 000742 aa 6 00144 3521 20 epp2 pr6|100,* p_result_idx 000743 aa 6 00546 2521 00 spri2 pr6|358 000744 aa 6 00140 3521 20 epp2 pr6|96,* p_code 000745 aa 6 00550 2521 00 spri2 pr6|360 000746 aa 6 00542 3521 00 epp2 pr6|354 000747 aa 014000 4310 07 fld 6144,dl 000750 aa 2 00000 7571 00 staq pr2|0 000751 aa 001211 6700 04 tsp4 649,ic 002162 STATEMENT 1 ON LINE 271 return; 000752 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO queue_read STATEMENT 1 ON LINE 273 queue_read: entry (p_tioi_id, p_buffer_data_ptr, p_code); 000753 at 000003000143 000754 tt 000150000147 000755 ta 000753000000 000756 da 000503300000 000757 aa 001220 6270 00 eax7 656 000760 aa 7 00034 3521 20 epp2 pr7|28,* 000761 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000762 aa 000006000000 000763 aa 000000000000 000764 aa 6 00032 3735 20 epp7 pr6|26,* 000765 aa 7 00004 3715 20 epp5 pr7|4,* 000766 aa 6 00136 6515 00 spri5 pr6|94 000767 aa 7 00006 3535 20 epp3 pr7|6,* 000770 aa 6 00140 2535 00 spri3 pr6|96 STATEMENT 1 ON LINE 276 call setup; 000771 aa 006531 6700 04 tsp4 3417,ic 007522 STATEMENT 1 ON LINE 277 semi_queued_offset = 0; 000772 aa 000000 2350 07 lda 0,dl 000773 aa 6 00112 5511 60 stba pr6|74,60 semi_queued_offset STATEMENT 1 ON LINE 278 buffer_ptr = tape_ioi_utils$get_buffer_ptr (wksp, p_buffer_data_ptr); 000774 aa 6 00116 3521 00 epp2 pr6|78 wksp 000775 aa 6 00544 2521 00 spri2 pr6|356 000776 aa 6 00136 3521 20 epp2 pr6|94,* p_buffer_data_ptr 000777 aa 6 00546 2521 00 spri2 pr6|358 001000 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 001001 aa 6 00550 2521 00 spri2 pr6|360 001002 aa 6 00542 6211 00 eax1 pr6|354 001003 aa 014000 4310 07 fld 6144,dl 001004 aa 6 00044 3701 20 epp4 pr6|36,* 001005 la 4 00034 3521 20 epp2 pr4|28,* tape_ioi_utils$get_buffer_ptr 001006 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 279 if buffer_ptr ^= null () then do; 001007 aa 6 00102 2371 00 ldaq pr6|66 buffer_ptr 001010 aa 777142 6770 04 eraq -414,ic 000152 = 077777000043 000001000000 001011 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 001012 aa 000021 6000 04 tze 17,ic 001033 STATEMENT 1 ON LINE 280 call queue_read_proc (buffer_ptr, p_code); 001013 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 001014 aa 6 00544 2521 00 spri2 pr6|356 001015 aa 6 00140 3521 20 epp2 pr6|96,* p_code 001016 aa 6 00546 2521 00 spri2 pr6|358 001017 aa 6 00542 3521 00 epp2 pr6|354 001020 aa 010000 4310 07 fld 4096,dl 001021 aa 2 00000 7571 00 staq pr2|0 001022 aa 002404 6700 04 tsp4 1284,ic 003426 STATEMENT 1 ON LINE 281 if p_code = 0 then tai.total_reads = tai.total_reads + 1; 001023 aa 6 00140 2361 20 ldq pr6|96,* p_code 001024 aa 000012 6010 04 tnz 10,ic 001036 001025 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001026 aa 7 00021 2351 00 lda pr7|17 tai.total_reads 001027 aa 000044 7330 00 lrs 36 001030 aa 000001 0330 07 adl 1,dl 001031 aa 7 00021 7561 00 stq pr7|17 tai.total_reads STATEMENT 1 ON LINE 283 end; 001032 aa 000004 7100 04 tra 4,ic 001036 STATEMENT 1 ON LINE 284 else p_code = error_table_$bad_arg; 001033 aa 6 00044 3701 20 epp4 pr6|36,* 001034 la 4 00050 2361 20 ldq pr4|40,* error_table_$bad_arg 001035 aa 6 00140 7561 20 stq pr6|96,* p_code STATEMENT 1 ON LINE 285 call run ("0"b, (0)); 001036 aa 000000 2350 07 lda 0,dl 001037 aa 6 00556 7551 00 sta pr6|366 001040 aa 6 00557 4501 00 stz pr6|367 001041 aa 006723 3520 04 epp2 3539,ic 007764 = 000004000000 001042 aa 005143 6700 04 tsp4 2659,ic 006205 STATEMENT 1 ON LINE 286 return; 001043 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO check_read STATEMENT 1 ON LINE 288 check_read: entry (p_tioi_id, p_buffer_data_ptr, p_data_len, p_result_idx, p_code); 001044 ta 000261000000 001045 da 000511300000 001046 aa 001220 6270 00 eax7 656 001047 aa 7 00034 3521 20 epp2 pr7|28,* 001050 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 001051 aa 000012000000 001052 aa 000000000000 001053 aa 6 00032 3735 20 epp7 pr6|26,* 001054 aa 7 00004 3715 20 epp5 pr7|4,* 001055 aa 6 00136 6515 00 spri5 pr6|94 001056 aa 7 00010 3535 20 epp3 pr7|8,* 001057 aa 6 00144 2535 00 spri3 pr6|100 001060 aa 7 00012 3515 20 epp1 pr7|10,* 001061 aa 6 00140 2515 00 spri1 pr6|96 STATEMENT 1 ON LINE 291 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 001062 aa 000001 2360 07 ldq 1,dl 001063 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 292 call setup; 001064 aa 006436 6700 04 tsp4 3358,ic 007522 STATEMENT 1 ON LINE 293 call check_read_proc (p_buffer_data_ptr, p_data_len, p_result_idx, p_code); 001065 aa 6 00136 3521 20 epp2 pr6|94,* p_buffer_data_ptr 001066 aa 6 00544 2521 00 spri2 pr6|356 001067 aa 6 00032 3735 20 epp7 pr6|26,* 001070 aa 7 00006 3521 20 epp2 pr7|6,* p_data_len 001071 aa 6 00546 2521 00 spri2 pr6|358 001072 aa 6 00144 3521 20 epp2 pr6|100,* p_result_idx 001073 aa 6 00550 2521 00 spri2 pr6|360 001074 aa 6 00140 3521 20 epp2 pr6|96,* p_code 001075 aa 6 00552 2521 00 spri2 pr6|362 001076 aa 6 00542 3521 00 epp2 pr6|354 001077 aa 020000 4310 07 fld 8192,dl 001100 aa 2 00000 7571 00 staq pr2|0 001101 aa 002442 6700 04 tsp4 1314,ic 003543 STATEMENT 1 ON LINE 294 return; 001102 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO queue_write STATEMENT 1 ON LINE 296 queue_write: entry (p_tioi_id, p_buffer_data_ptr, p_data_len, p_code); 001103 at 000004000143 001104 tt 000150000145 001105 ta 000147000000 001106 ta 001103000000 001107 da 000517300000 001110 aa 001220 6270 00 eax7 656 001111 aa 7 00034 3521 20 epp2 pr7|28,* 001112 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 001113 aa 000010000000 001114 aa 000000000000 001115 aa 6 00032 3735 20 epp7 pr6|26,* 001116 aa 7 00004 3715 20 epp5 pr7|4,* 001117 aa 6 00136 6515 00 spri5 pr6|94 001120 aa 7 00010 3535 20 epp3 pr7|8,* 001121 aa 6 00140 2535 00 spri3 pr6|96 STATEMENT 1 ON LINE 299 call setup; 001122 aa 006400 6700 04 tsp4 3328,ic 007522 STATEMENT 1 ON LINE 300 semi_queued_offset = 0; 001123 aa 000000 2350 07 lda 0,dl 001124 aa 6 00112 5511 60 stba pr6|74,60 semi_queued_offset STATEMENT 1 ON LINE 301 buffer_ptr = tape_ioi_utils$get_buffer_ptr (wksp, p_buffer_data_ptr); 001125 aa 6 00116 3521 00 epp2 pr6|78 wksp 001126 aa 6 00544 2521 00 spri2 pr6|356 001127 aa 6 00136 3521 20 epp2 pr6|94,* p_buffer_data_ptr 001130 aa 6 00546 2521 00 spri2 pr6|358 001131 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 001132 aa 6 00550 2521 00 spri2 pr6|360 001133 aa 6 00542 6211 00 eax1 pr6|354 001134 aa 014000 4310 07 fld 6144,dl 001135 aa 6 00044 3701 20 epp4 pr6|36,* 001136 la 4 00034 3521 20 epp2 pr4|28,* tape_ioi_utils$get_buffer_ptr 001137 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 302 if buffer_ptr ^= null () then do; 001140 aa 6 00102 2371 00 ldaq pr6|66 buffer_ptr 001141 aa 777011 6770 04 eraq -503,ic 000152 = 077777000043 000001000000 001142 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 001143 aa 000024 6000 04 tze 20,ic 001167 STATEMENT 1 ON LINE 303 call queue_write_proc (buffer_ptr, p_data_len, p_code); 001144 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 001145 aa 6 00544 2521 00 spri2 pr6|356 001146 aa 6 00032 3735 20 epp7 pr6|26,* 001147 aa 7 00006 3521 20 epp2 pr7|6,* p_data_len 001150 aa 6 00546 2521 00 spri2 pr6|358 001151 aa 6 00140 3521 20 epp2 pr6|96,* p_code 001152 aa 6 00550 2521 00 spri2 pr6|360 001153 aa 6 00542 3521 00 epp2 pr6|354 001154 aa 014000 4310 07 fld 6144,dl 001155 aa 2 00000 7571 00 staq pr2|0 001156 aa 003336 6700 04 tsp4 1758,ic 004514 STATEMENT 1 ON LINE 304 if p_code = 0 then tai.total_writes = tai.total_writes + 1; 001157 aa 6 00140 2361 20 ldq pr6|96,* p_code 001160 aa 000012 6010 04 tnz 10,ic 001172 001161 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001162 aa 7 00023 2351 00 lda pr7|19 tai.total_writes 001163 aa 000044 7330 00 lrs 36 001164 aa 000001 0330 07 adl 1,dl 001165 aa 7 00023 7561 00 stq pr7|19 tai.total_writes STATEMENT 1 ON LINE 306 end; 001166 aa 000004 7100 04 tra 4,ic 001172 STATEMENT 1 ON LINE 307 else p_code = error_table_$bad_arg; 001167 aa 6 00044 3701 20 epp4 pr6|36,* 001170 la 4 00050 2361 20 ldq pr4|40,* error_table_$bad_arg 001171 aa 6 00140 7561 20 stq pr6|96,* p_code STATEMENT 1 ON LINE 308 call run ("1"b, (0)); 001172 aa 400000 2350 03 lda 131072,du 001173 aa 6 00557 7551 00 sta pr6|367 001174 aa 6 00556 4501 00 stz pr6|366 001175 aa 006555 3520 04 epp2 3437,ic 007752 = 000004000000 001176 aa 005007 6700 04 tsp4 2567,ic 006205 STATEMENT 1 ON LINE 309 return; 001177 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO check_write STATEMENT 1 ON LINE 311 check_write: entry (p_tioi_id, p_buffer_data_ptr, p_result_idx, p_code); 001200 at 000004000143 001201 tt 000150000146 001202 ta 000147000000 001203 ta 001200000000 001204 da 000525300000 001205 aa 001220 6270 00 eax7 656 001206 aa 7 00034 3521 20 epp2 pr7|28,* 001207 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 001210 aa 000010000000 001211 aa 000000000000 001212 aa 6 00032 3735 20 epp7 pr6|26,* 001213 aa 7 00004 3715 20 epp5 pr7|4,* 001214 aa 6 00136 6515 00 spri5 pr6|94 001215 aa 7 00006 3535 20 epp3 pr7|6,* 001216 aa 6 00144 2535 00 spri3 pr6|100 001217 aa 7 00010 3515 20 epp1 pr7|8,* 001220 aa 6 00140 2515 00 spri1 pr6|96 STATEMENT 1 ON LINE 314 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 001221 aa 000001 2360 07 ldq 1,dl 001222 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 315 call setup; 001223 aa 006277 6700 04 tsp4 3263,ic 007522 STATEMENT 1 ON LINE 316 call check_write_proc (p_buffer_data_ptr, p_result_idx, p_code); 001224 aa 6 00136 3521 20 epp2 pr6|94,* p_buffer_data_ptr 001225 aa 6 00544 2521 00 spri2 pr6|356 001226 aa 6 00144 3521 20 epp2 pr6|100,* p_result_idx 001227 aa 6 00546 2521 00 spri2 pr6|358 001230 aa 6 00140 3521 20 epp2 pr6|96,* p_code 001231 aa 6 00550 2521 00 spri2 pr6|360 001232 aa 6 00542 3521 00 epp2 pr6|354 001233 aa 014000 4310 07 fld 6144,dl 001234 aa 2 00000 7571 00 staq pr2|0 001235 aa 003521 6700 04 tsp4 1873,ic 004756 STATEMENT 1 ON LINE 317 return; 001236 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO stop_tape STATEMENT 1 ON LINE 321 stop_tape: entry (p_tioi_id, p_ocount, p_result_idx, p_code); 001237 ta 000714000000 001240 da 000533300000 001241 aa 001220 6270 00 eax7 656 001242 aa 7 00034 3521 20 epp2 pr7|28,* 001243 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 001244 aa 000010000000 001245 aa 000000000000 001246 aa 6 00032 3735 20 epp7 pr6|26,* 001247 aa 7 00004 3715 20 epp5 pr7|4,* 001250 aa 6 00142 6515 00 spri5 pr6|98 001251 aa 7 00006 3535 20 epp3 pr7|6,* 001252 aa 6 00144 2535 00 spri3 pr6|100 001253 aa 7 00010 3515 20 epp1 pr7|8,* 001254 aa 6 00140 2515 00 spri1 pr6|96 STATEMENT 1 ON LINE 324 p_result_idx = TAPE_IO_USER_PROGRAM_ERROR; 001255 aa 000001 2360 07 ldq 1,dl 001256 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 325 call setup; 001257 aa 006243 6700 04 tsp4 3235,ic 007522 STATEMENT 1 ON LINE 329 if ^tape_ioi_utils$io_in_progress (wksp) then do; 001260 aa 6 00116 3521 00 epp2 pr6|78 wksp 001261 aa 6 00544 2521 00 spri2 pr6|356 001262 aa 6 00556 3521 00 epp2 pr6|366 001263 aa 6 00546 2521 00 spri2 pr6|358 001264 aa 6 00542 6211 00 eax1 pr6|354 001265 aa 010000 4310 07 fld 4096,dl 001266 aa 6 00044 3701 20 epp4 pr6|36,* 001267 la 4 00044 3521 20 epp2 pr4|36,* tape_ioi_utils$io_in_progress 001270 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out 001271 aa 6 00556 2351 00 lda pr6|366 001272 aa 400000 3150 03 cana 131072,du 001273 aa 000005 6010 04 tnz 5,ic 001300 STATEMENT 1 ON LINE 330 p_ocount = 0; 001274 aa 6 00142 4501 20 stz pr6|98,* p_ocount STATEMENT 1 ON LINE 331 p_result_idx = TAPE_IO_SUCCESS; 001275 aa 000000 2360 07 ldq 0,dl 001276 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 332 return; 001277 aa 0 00631 7101 00 tra pr0|409 return_mac STATEMENT 1 ON LINE 333 end; STATEMENT 1 ON LINE 337 addr (tai.order_idcw) -> idcw.control = "00"b; 001300 aa 006450 2350 04 lda 3368,ic 007750 = 777777747777 001301 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001302 aa 7 00046 3551 00 ansa pr7|38 idcw.control STATEMENT 1 ON LINE 338 do idcw_idx = lbound (tai.order_data, 1) to hbound (tai.order_data, 1); 001303 aa 000001 2360 07 ldq 1,dl 001304 aa 6 00106 7561 00 stq pr6|70 idcw_idx 001305 aa 000000 0110 03 nop 0,du 001306 aa 6 00106 2361 00 ldq pr6|70 idcw_idx 001307 aa 000010 1160 07 cmpq 8,dl 001310 aa 000015 6054 04 tpnz 13,ic 001325 STATEMENT 1 ON LINE 339 idcwp = addr (tai.order_data (idcw_idx)); 001311 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001312 aa 7 00047 3735 06 epp7 pr7|39,ql tai.order_data 001313 aa 6 00120 6535 00 spri7 pr6|80 idcwp STATEMENT 1 ON LINE 340 if idcw.code = "111"b then /* don't hammer non-IDCWs */ idcw.control = "00"b; 001314 aa 7 00000 2351 00 lda pr7|0 idcw.code 001315 aa 000022 7350 00 als 18 001316 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 001317 aa 700000 1150 03 cmpa 229376,du 001320 aa 000003 6010 04 tnz 3,ic 001323 001321 aa 006427 2350 04 lda 3351,ic 007750 = 777777747777 001322 aa 7 00000 3551 00 ansa pr7|0 idcw.control STATEMENT 1 ON LINE 342 end; 001323 aa 6 00106 0541 00 aos pr6|70 idcw_idx 001324 aa 777762 7100 04 tra -14,ic 001306 STATEMENT 1 ON LINE 346 do buffer_ptr = ptr (wksp, queue_list_offset) repeat ptr (wksp, buffer_ptr -> tbi.next_state_offset) while (rel (buffer_ptr) ^= ""b); 001325 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001326 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 001327 aa 000066 7730 00 lrl 54 001330 aa 7 00000 3521 00 epp2 pr7|0 001331 aa 000000 3120 06 eawp2 0,ql 001332 aa 6 00102 2521 00 spri2 pr6|66 buffer_ptr 001333 aa 000000 0110 03 nop 0,du 001334 aa 6 00102 6351 20 eaa pr6|66,* buffer_ptr 001335 aa 000012 6000 04 tze 10,ic 001347 STATEMENT 1 ON LINE 348 addr (buffer_ptr -> tbi.idcw_word) -> idcw.control = "00"b; 001336 aa 006412 2350 04 lda 3338,ic 007750 = 777777747777 001337 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 001340 aa 7 00006 3551 00 ansa pr7|6 idcw.control STATEMENT 1 ON LINE 349 end; 001341 aa 7 00001 2351 00 lda pr7|1 tbi.next_state_offset 001342 aa 000066 7730 00 lrl 54 001343 aa 6 00116 3521 20 epp2 pr6|78,* wksp 001344 aa 000000 3120 06 eawp2 0,ql 001345 aa 6 00102 2521 00 spri2 pr6|66 buffer_ptr 001346 aa 777766 7100 04 tra -10,ic 001334 STATEMENT 1 ON LINE 354 if ^tai.order_queued then tai.order_count_done = 0; 001347 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001350 aa 7 00020 2351 00 lda pr7|16 tai.order_queued 001351 aa 000001 3150 03 cana 1,du 001352 aa 000003 6010 04 tnz 3,ic 001355 001353 aa 000000 2350 03 lda 0,du 001354 aa 7 00041 5511 14 stba pr7|33,14 tai.order_count_done STATEMENT 1 ON LINE 357 do while ("1"b); 001355 aa 000000 0110 03 nop 0,du STATEMENT 1 ON LINE 358 call get_status (tai.modes.wait, STOP_TAPE_MAKE_CALLER_WAIT); 001356 aa 000164 3520 04 epp2 116,ic 001542 = 600142450120 001357 aa 6 00542 2521 00 spri2 pr6|354 001360 aa 6 00544 6521 00 spri6 pr6|356 001361 aa 000017 7270 07 lxl7 15,dl 001362 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001363 aa 7 00020 3521 00 epp2 pr7|16 tai.wait 001364 aa 2 00000 5035 17 abd pr2|0,7 001365 aa 6 00562 2521 00 spri2 pr6|370 001366 aa 6 00542 3521 00 epp2 pr6|354 001367 aa 6 00564 2521 00 spri2 pr6|372 001370 aa 6 00560 3521 00 epp2 pr6|368 001371 aa 010000 4310 07 fld 4096,dl 001372 aa 2 00000 7571 00 staq pr2|0 001373 aa 005541 6700 04 tsp4 2913,ic 007134 STATEMENT 1 ON LINE 359 idcwp = ptr (wksp, bin (substr (istat.lpw, 1, 18)) - 1); 001374 aa 6 00132 3735 20 epp7 pr6|90,* isp 001375 aa 7 00006 2351 00 lda pr7|6 istat.lpw 001376 aa 000066 7730 00 lrl 54 001377 aa 000000 5330 00 negl 0 001400 aa 000001 0330 07 adl 1,dl 001401 aa 000000 5330 00 negl 0 001402 aa 6 00116 3521 20 epp2 pr6|78,* wksp 001403 aa 000000 3120 06 eawp2 0,ql 001404 aa 6 00120 2521 00 spri2 pr6|80 idcwp STATEMENT 1 ON LINE 360 statp = addr (istat.iom_stat); 001405 aa 7 00004 3715 00 epp5 pr7|4 istat.iom_stat 001406 aa 6 00130 6515 00 spri5 pr6|88 statp STATEMENT 1 ON LINE 361 if tai.order_queued then tai.order_count_done = tai.order_count_done + bin (idcw.count) - bin (status.rcount); 001407 aa 6 00116 3535 20 epp3 pr6|78,* wksp 001410 aa 3 00020 2351 00 lda pr3|16 tai.order_queued 001411 aa 000001 3150 03 cana 1,du 001412 aa 000015 6000 04 tze 13,ic 001427 001413 aa 5 00000 2361 00 ldq pr5|0 status.rcount 001414 aa 0 00424 3771 00 anaq pr0|276 = 000000000000 000000000077 001415 aa 6 00570 7571 00 staq pr6|376 001416 aa 3 00041 2361 00 ldq pr3|33 tai.order_count_done 001417 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 001420 aa 6 00556 7561 00 stq pr6|366 tai.order_count_done 001421 aa 2 00000 2361 00 ldq pr2|0 idcw.count 001422 aa 0 00424 3771 00 anaq pr0|276 = 000000000000 000000000077 001423 aa 6 00556 0331 00 adl pr6|366 tai.order_count_done 001424 aa 6 00570 1771 00 sbaq pr6|376 001425 aa 3 00041 5521 14 stbq pr3|33,14 tai.order_count_done 001426 aa 000005 7100 04 tra 5,ic 001433 STATEMENT 1 ON LINE 363 else tai.order_count_done = tai.order_count_done + 1; 001427 aa 3 00041 2361 00 ldq pr3|33 tai.order_count_done 001430 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 001431 aa 000001 0760 07 adq 1,dl 001432 aa 3 00041 5521 14 stbq pr3|33,14 tai.order_count_done STATEMENT 1 ON LINE 364 if ^istat.run then do; 001433 aa 7 00000 2351 00 lda pr7|0 istat.run 001434 aa 100000 3150 03 cana 32768,du 001435 aa 777721 6010 04 tnz -47,ic 001356 STATEMENT 1 ON LINE 365 p_ocount = tai.order_count_done; 001436 aa 3 00041 2361 00 ldq pr3|33 tai.order_count_done 001437 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 001440 aa 6 00142 7561 20 stq pr6|98,* p_ocount STATEMENT 1 ON LINE 366 p_result_idx = TAPE_IO_SUCCESS; 001441 aa 000000 2360 07 ldq 0,dl 001442 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 367 do buffer_ptr = ptr (wksp, queue_list_offset) repeat ptr (wksp, next_buffer_offset) while (rel (buffer_ptr) ^= ""b); 001443 aa 3 00014 2351 00 lda pr3|12 tai.queue_list_offset 001444 aa 000066 7730 00 lrl 54 001445 aa 3 00000 3515 00 epp1 pr3|0 001446 aa 000000 3114 06 eawp1 0,ql 001447 aa 6 00102 2515 00 spri1 pr6|66 buffer_ptr 001450 aa 6 00102 6351 20 eaa pr6|66,* buffer_ptr 001451 aa 000024 6000 04 tze 20,ic 001475 STATEMENT 1 ON LINE 369 next_buffer_offset = buffer_ptr -> tbi.next_state_offset; 001452 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 001453 aa 7 00001 2351 00 lda pr7|1 tbi.next_state_offset 001454 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 001455 aa 6 00110 7551 00 sta pr6|72 next_buffer_offset STATEMENT 1 ON LINE 370 call tape_ioi_buffer_man$internal_set_buffer_ready (wksp, buffer_ptr); 001456 aa 6 00116 3521 00 epp2 pr6|78 wksp 001457 aa 6 00562 2521 00 spri2 pr6|370 001460 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 001461 aa 6 00564 2521 00 spri2 pr6|372 001462 aa 6 00560 6211 00 eax1 pr6|368 001463 aa 010000 4310 07 fld 4096,dl 001464 aa 6 00044 3701 20 epp4 pr6|36,* 001465 la 4 00022 3521 20 epp2 pr4|18,* tape_ioi_buffer_man$internal_set_buffer_ready 001466 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 371 end; 001467 aa 6 00110 2351 00 lda pr6|72 next_buffer_offset 001470 aa 000066 7730 00 lrl 54 001471 aa 6 00116 3521 20 epp2 pr6|78,* wksp 001472 aa 000000 3120 06 eawp2 0,ql 001473 aa 6 00102 2521 00 spri2 pr6|66 buffer_ptr 001474 aa 777754 7100 04 tra -20,ic 001450 STATEMENT 1 ON LINE 372 do buffer_ptr = ptr (wksp, susp_list_offset) repeat ptr (wksp, next_buffer_offset) while (rel (buffer_ptr) ^= ""b); 001475 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001476 aa 7 00014 2361 00 ldq pr7|12 tai.susp_list_offset 001477 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 001500 aa 7 00000 3521 00 epp2 pr7|0 001501 aa 000000 3120 06 eawp2 0,ql 001502 aa 6 00102 2521 00 spri2 pr6|66 buffer_ptr 001503 aa 000000 0110 03 nop 0,du 001504 aa 6 00102 6351 20 eaa pr6|66,* buffer_ptr 001505 aa 000024 6000 04 tze 20,ic 001531 STATEMENT 1 ON LINE 374 next_buffer_offset = buffer_ptr -> tbi.next_state_offset; 001506 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 001507 aa 7 00001 2351 00 lda pr7|1 tbi.next_state_offset 001510 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 001511 aa 6 00110 7551 00 sta pr6|72 next_buffer_offset STATEMENT 1 ON LINE 375 call tape_ioi_buffer_man$internal_set_buffer_ready (wksp, buffer_ptr); 001512 aa 6 00116 3521 00 epp2 pr6|78 wksp 001513 aa 6 00562 2521 00 spri2 pr6|370 001514 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 001515 aa 6 00564 2521 00 spri2 pr6|372 001516 aa 6 00560 6211 00 eax1 pr6|368 001517 aa 010000 4310 07 fld 4096,dl 001520 aa 6 00044 3701 20 epp4 pr6|36,* 001521 la 4 00022 3521 20 epp2 pr4|18,* tape_ioi_buffer_man$internal_set_buffer_ready 001522 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 376 end; 001523 aa 6 00110 2351 00 lda pr6|72 next_buffer_offset 001524 aa 000066 7730 00 lrl 54 001525 aa 6 00116 3521 20 epp2 pr6|78,* wksp 001526 aa 000000 3120 06 eawp2 0,ql 001527 aa 6 00102 2521 00 spri2 pr6|66 buffer_ptr 001530 aa 777754 7100 04 tra -20,ic 001504 STATEMENT 1 ON LINE 377 tai.order_queued, tai.read_queued, tai.write_queued = "0"b; 001531 aa 006216 2350 04 lda 3214,ic 007747 = 777776777777 001532 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001533 aa 7 00020 3551 00 ansa pr7|16 tai.order_queued 001534 aa 006212 2350 04 lda 3210,ic 007746 = 777777377777 001535 aa 7 00020 3551 00 ansa pr7|16 tai.read_queued 001536 aa 006207 2350 04 lda 3207,ic 007745 = 777777577777 001537 aa 7 00020 3551 00 ansa pr7|16 tai.write_queued STATEMENT 1 ON LINE 378 return; 001540 aa 0 00631 7101 00 tra pr0|409 return_mac STATEMENT 1 ON LINE 379 end; STATEMENT 1 ON LINE 380 end; 001541 aa 777615 7100 04 tra -115,ic 001356 STATEMENT 1 ON LINE 382 STOP_TAPE_MAKE_CALLER_WAIT: p_ocount = 0; 001542 aa 6 00142 4501 20 stz pr6|98,* p_ocount STATEMENT 1 ON LINE 384 p_result_idx = TAPE_IO_BLOCK; 001543 aa 000001 3360 07 lcq 1,dl 001544 aa 6 00144 7561 20 stq pr6|100,* p_result_idx STATEMENT 1 ON LINE 385 return; 001545 aa 0 00631 7101 00 tra pr0|409 return_mac STATEMENT 1 ON LINE 1852 ERROR_RETURN: return; 001546 aa 0 00631 7101 00 tra pr0|409 return_mac STATEMENT 1 ON LINE 1876 end tape_ioi_io; BEGIN PROCEDURE queue_order_proc ENTRY TO queue_order_proc STATEMENT 1 ON LINE 387 queue_order_proc: proc (order, count, data_ptr, code); 001547 aa 6 00150 6501 00 spri4 pr6|104 001550 aa 6 00152 2521 00 spri2 pr6|106 STATEMENT 1 ON LINE 397 if tape_ioi_utils$io_in_progress (wksp) then do; 001551 aa 6 00116 3521 00 epp2 pr6|78 wksp 001552 aa 6 00576 2521 00 spri2 pr6|382 001553 aa 6 00572 3521 00 epp2 pr6|378 001554 aa 6 00600 2521 00 spri2 pr6|384 001555 aa 6 00574 6211 00 eax1 pr6|380 001556 aa 010000 4310 07 fld 4096,dl 001557 aa 6 00044 3701 20 epp4 pr6|36,* 001560 la 4 00044 3521 20 epp2 pr4|36,* tape_ioi_utils$io_in_progress 001561 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out 001562 aa 6 00572 2351 00 lda pr6|378 001563 aa 400000 3150 03 cana 131072,du 001564 aa 000006 6000 04 tze 6,ic 001572 STATEMENT 1 ON LINE 398 code = error_table_$device_active; 001565 aa 6 00044 3701 20 epp4 pr6|36,* 001566 la 4 00060 2361 20 ldq pr4|48,* error_table_$device_active 001567 aa 6 00152 3735 20 epp7 pr6|106,* 001570 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 399 return; 001571 aa 6 00150 6101 00 rtcd pr6|104 STATEMENT 1 ON LINE 400 end; STATEMENT 1 ON LINE 401 idcwp = addr (tai.order_idcw); 001572 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001573 aa 7 00046 3735 00 epp7 pr7|38 tai.order_idcw 001574 aa 6 00120 6535 00 spri7 pr6|80 idcwp STATEMENT 1 ON LINE 402 idcw.control = "00"b; 001575 aa 006153 2350 04 lda 3179,ic 007750 = 777777747777 001576 aa 7 00000 3551 00 ansa pr7|0 idcw.control STATEMENT 1 ON LINE 403 unspec (tai.order_data (*)) = ""b; 001577 aa 6 00116 3715 20 epp5 pr6|78,* wksp 001600 aa 000 100 100 400 mlr (),(pr),fill(000) 001601 aa 000000 00 0000 desc9a 0,0 001602 aa 5 00050 00 0040 desc9a pr5|40,32 STATEMENT 1 ON LINE 405 do order_idx = hbound (order_mnemonics, 1) to lbound (order_mnemonics, 1) by -1 while (order_mnemonics (order_idx) ^= order); 001603 aa 000025 2360 07 ldq 21,dl 001604 aa 6 00156 7561 00 stq pr6|110 order_idx 001605 aa 000000 0110 03 nop 0,du 001606 aa 6 00156 2361 00 ldq pr6|110 order_idx 001607 aa 000013 6040 04 tmi 11,ic 001622 001610 aa 6 00152 3735 20 epp7 pr6|106,* 001611 aa 7 00002 3715 20 epp5 pr7|2,* 001612 ta 000102 3534 06 epp3 66,ql 001613 aa 040 100 106 500 cmpc (pr),(pr),fill(040) 001614 aa 5 00000 00 0004 desc9a pr5|0,4 order 001615 aa 3 00000 00 0004 desc9a pr3|0,4 order_mnemonics 001616 aa 000004 6000 04 tze 4,ic 001622 STATEMENT 1 ON LINE 407 end; 001617 aa 000001 3360 07 lcq 1,dl 001620 aa 6 00156 0561 00 asq pr6|110 order_idx 001621 aa 777765 7100 04 tra -11,ic 001606 STATEMENT 1 ON LINE 408 goto QUEUE_ORDER (order_idx); 001622 ta 000001 7100 06 tra 1,ql STATEMENT 1 ON LINE 410 QUEUE_ORDER (-1): /* unknown order */ code = error_table_$no_operation; 001623 aa 6 00044 3701 20 epp4 pr6|36,* 001624 la 4 00102 2361 20 ldq pr4|66,* error_table_$no_operation 001625 aa 6 00152 3735 20 epp7 pr6|106,* 001626 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 412 return; 001627 aa 6 00150 6101 00 rtcd pr6|104 STATEMENT 1 ON LINE 416 QUEUE_ORDER (2): /* backspace record */ QUEUE_ORDER (4): /* forwardspace record */ if count >= ORDERS_PER_IDCW_TALLY then idcw.count = "00"b3; 001630 aa 6 00152 3735 20 epp7 pr6|106,* 001631 aa 7 00004 2361 20 ldq pr7|4,* count 001632 aa 000100 1160 07 cmpq 64,dl 001633 aa 000004 6040 04 tmi 4,ic 001637 001634 aa 006110 2350 04 lda 3144,ic 007744 = 777777777700 001635 aa 6 00120 3551 20 ansa pr6|80,* idcw.count 001636 aa 000206 7100 04 tra 134,ic 002044 STATEMENT 1 ON LINE 420 else idcw.count = bit (bin (count, 6), 6); 001637 aa 7 00004 2351 20 lda pr7|4,* count 001640 aa 000002 6050 04 tpl 2,ic 001642 001641 aa 000000 5310 00 neg 0 001642 aa 0 00314 3771 00 anaq pr0|204 = 000000000077 777777777777 001643 aa 6 00120 3715 20 epp5 pr6|80,* idcw.count 001644 aa 5 00000 7511 01 stca pr5|0,01 idcw.count STATEMENT 1 ON LINE 421 goto QUEUE_ORDER_JOIN_1; 001645 aa 000177 7100 04 tra 127,ic 002044 STATEMENT 1 ON LINE 425 QUEUE_ORDER (15): /* density */ begin; BEGIN BLOCK 1 STATEMENT 1 ON LINE 433 density = requested_density; 001646 aa 6 00152 3735 20 epp7 pr6|106,* 001647 aa 7 00006 3715 20 epp5 pr7|6,* data_ptr 001650 aa 5 00000 2361 20 ldq pr5|0,* requested_density 001651 aa 6 00157 7561 00 stq pr6|111 density STATEMENT 1 ON LINE 434 do density_idx = lbound (densities, 1) to hbound (densities, 1) while (density ^= densities (density_idx)); 001652 aa 000001 2360 07 ldq 1,dl 001653 aa 6 00160 7561 00 stq pr6|112 density_idx 001654 aa 6 00160 2361 00 ldq pr6|112 density_idx 001655 aa 000005 1160 07 cmpq 5,dl 001656 aa 000007 6054 04 tpnz 7,ic 001665 001657 aa 6 00157 2361 00 ldq pr6|111 density 001660 aa 6 00160 7271 00 lxl7 pr6|112 density_idx 001661 ta 000070 1160 17 cmpq 56,7 001662 aa 000003 6000 04 tze 3,ic 001665 STATEMENT 1 ON LINE 435 end; 001663 aa 6 00160 0541 00 aos pr6|112 density_idx 001664 aa 777770 7100 04 tra -8,ic 001654 STATEMENT 1 ON LINE 436 if density_idx > hbound (densities, 1) then do; 001665 aa 6 00160 2361 00 ldq pr6|112 density_idx 001666 aa 000005 1160 07 cmpq 5,dl 001667 aa 000006 6044 04 tmoz 6,ic 001675 STATEMENT 1 ON LINE 437 code = error_table_$bad_density; 001670 aa 6 00044 3701 20 epp4 pr6|36,* 001671 la 4 00052 2361 20 ldq pr4|42,* error_table_$bad_density 001672 aa 6 00152 3735 20 epp7 pr6|106,* 001673 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 438 return; 001674 aa 6 00150 6101 00 rtcd pr6|104 STATEMENT 1 ON LINE 439 end; STATEMENT 1 ON LINE 440 idcw.count = "01"b3; 001675 aa 000001 2350 07 lda 1,dl 001676 aa 6 00120 3735 20 epp7 pr6|80,* idcw.count 001677 aa 7 00000 7511 01 stca pr7|0,01 idcw.count STATEMENT 1 ON LINE 441 device_command = density_commands (density_idx); 001700 aa 000006 4020 07 mpy 6,dl 001701 aa 6 00105 4501 00 stz pr6|69 device_command 001702 aa 003 100 060 406 csl (ql),(pr),fill(0),bool(move) 001703 ta 000067 63 0006 descb 55(30),6 001704 aa 6 00105 00 0006 descb pr6|69,6 device_command STATEMENT 1 ON LINE 442 tai.density_command = device_command; 001705 aa 6 00105 2351 00 lda pr6|69 device_command 001706 aa 000036 7710 00 arl 30 001707 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001710 aa 7 00016 7511 01 stca pr7|14,01 tai.density_command STATEMENT 1 ON LINE 443 goto QUEUE_ORDER_JOIN_2; 001711 aa 000141 7100 04 tra 97,ic 002052 STATEMENT 1 ON LINE 444 end; END BLOCK 1 STATEMENT 1 ON LINE 449 QUEUE_ORDER (21): /* write control registers */ begin; BEGIN BLOCK 2 STATEMENT 1 ON LINE 454 addr (tai.order_data) -> error_counters = data_ptr -> error_counters; 001712 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001713 aa 6 00152 3715 20 epp5 pr6|106,* 001714 aa 5 00006 3535 20 epp3 pr5|6,* data_ptr 001715 aa 3 00000 3535 20 epp3 pr3|0,* data_ptr 001716 aa 000 100 100 500 mlr (pr),(pr),fill(000) 001717 aa 3 00000 00 0020 desc9a pr3|0,16 error_counters 001720 aa 7 00050 00 0020 desc9a pr7|40,16 error_counters STATEMENT 1 ON LINE 455 idcw.count = "01"b3; 001721 aa 000001 2350 07 lda 1,dl 001722 aa 6 00120 3515 20 epp1 pr6|80,* idcw.count 001723 aa 1 00000 7511 01 stca pr1|0,01 idcw.count STATEMENT 1 ON LINE 456 goto QUEUE_ORDER_JOIN_1; 001724 aa 000120 7100 04 tra 80,ic 002044 STATEMENT 1 ON LINE 457 end; END BLOCK 2 STATEMENT 1 ON LINE 463 QUEUE_ORDER (1): /* backspace file */ QUEUE_ORDER (3): /* forward space file */ QUEUE_ORDER (5): /* write EOF */ QUEUE_ORDER (6): /* erase */ begin; BEGIN BLOCK 3 STATEMENT 1 ON LINE 471 idcwp = addr (tai.order_data); 001725 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001726 aa 7 00050 3735 00 epp7 pr7|40 tai.order_data 001727 aa 6 00120 6535 00 spri7 pr6|80 idcwp STATEMENT 1 ON LINE 472 idcw.command = order_commands (order_idx); 001730 aa 6 00156 2361 00 ldq pr6|110 order_idx 001731 aa 000006 4020 07 mpy 6,dl 001732 aa 003 100 060 406 csl (ql),(pr),fill(0),bool(move) 001733 ta 000076 00 0006 descb 62,6 001734 aa 7 00000 00 0006 descb pr7|0,6 idcw.command STATEMENT 1 ON LINE 473 idcw.device = addr (tai.order_idcw) -> idcw.device; 001735 aa 6 00116 3715 20 epp5 pr6|78,* wksp 001736 aa 5 00046 2351 00 lda pr5|38 idcw.device 001737 aa 7 00000 7511 20 stca pr7|0,20 idcw.device STATEMENT 1 ON LINE 474 idcw.ext = ""b; 001740 aa 006003 2350 04 lda 3075,ic 007743 = 777700777777 001741 aa 7 00000 3551 00 ansa pr7|0 idcw.ext STATEMENT 1 ON LINE 475 idcw.code = "111"b; 001742 aa 700000 2350 07 lda 229376,dl 001743 aa 7 00000 2551 00 orsa pr7|0 idcw.code STATEMENT 1 ON LINE 476 idcw.ext_ctl = ""b; 001744 aa 005776 2350 04 lda 3070,ic 007742 = 777777737777 001745 aa 7 00000 3551 00 ansa pr7|0 idcw.ext_ctl STATEMENT 1 ON LINE 477 idcw.control = "10"b; 001746 aa 020000 2350 07 lda 8192,dl 001747 aa 7 00000 6751 00 era pr7|0 idcw.control 001750 aa 030000 3750 07 ana 12288,dl 001751 aa 7 00000 6551 00 ersa pr7|0 idcw.control STATEMENT 1 ON LINE 478 idcw.chan_cmd = "02"b3; 001752 aa 000200 2350 07 lda 128,dl 001753 aa 7 00000 7511 02 stca pr7|0,02 idcw.chan_cmd STATEMENT 1 ON LINE 479 idcw.count = "01"b3; 001754 aa 000001 2350 07 lda 1,dl 001755 aa 7 00000 7511 01 stca pr7|0,01 idcw.count STATEMENT 1 ON LINE 483 do idcw_idx = 2 to min (count, hbound (tai.order_data, 1)); 001756 aa 6 00152 3535 20 epp3 pr6|106,* 001757 aa 3 00004 2361 20 ldq pr3|4,* count 001760 aa 000010 1160 07 cmpq 8,dl 001761 aa 000002 6040 04 tmi 2,ic 001763 001762 aa 000010 2360 07 ldq 8,dl 001763 aa 6 00162 7561 00 stq pr6|114 001764 aa 000002 2360 07 ldq 2,dl 001765 aa 6 00161 7561 00 stq pr6|113 idcw_idx 001766 aa 6 00161 2361 00 ldq pr6|113 idcw_idx 001767 aa 6 00162 1161 00 cmpq pr6|114 001770 aa 000006 6054 04 tpnz 6,ic 001776 STATEMENT 1 ON LINE 484 string (tai.order_data (idcw_idx)) = string (idcw); 001771 aa 6 00120 2351 20 lda pr6|80,* 001772 aa 6 00116 3735 20 epp7 pr6|78,* wksp 001773 aa 7 00047 7551 06 sta pr7|39,ql tai.order_data STATEMENT 1 ON LINE 485 end; 001774 aa 6 00161 0541 00 aos pr6|113 idcw_idx 001775 aa 777771 7100 04 tra -7,ic 001766 STATEMENT 1 ON LINE 486 addr (tai.order_data (idcw_idx - 1)) -> idcw.control = "00"b; 001776 aa 005752 2350 04 lda 3050,ic 007750 = 777777747777 001777 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002000 aa 7 00046 3735 06 epp7 pr7|38,ql tai.order_data 002001 aa 7 00000 3551 00 ansa pr7|0 idcw.control STATEMENT 1 ON LINE 487 goto QUEUE_ORDER_JOIN_3; 002002 aa 000065 7100 04 tra 53,ic 002067 STATEMENT 1 ON LINE 488 end; END BLOCK 3 STATEMENT 1 ON LINE 494 QUEUE_ORDER (13): /* request device status */ begin; BEGIN BLOCK 4 STATEMENT 1 ON LINE 499 call ioi_$get_detailed_status (tai.ioi_index, status_present, based_detailed_status, code); 002003 aa 6 00116 3521 20 epp2 pr6|78,* tai.ioi_index 002004 aa 6 00604 2521 00 spri2 pr6|388 002005 aa 6 00114 3521 00 epp2 pr6|76 status_present 002006 aa 6 00606 2521 00 spri2 pr6|390 002007 aa 6 00152 3735 20 epp7 pr6|106,* 002010 aa 7 00006 3715 20 epp5 pr7|6,* data_ptr 002011 aa 5 00000 3521 20 epp2 pr5|0,* based_detailed_status 002012 aa 6 00610 2521 00 spri2 pr6|392 002013 aa 7 00010 3521 20 epp2 pr7|8,* code 002014 aa 6 00612 2521 00 spri2 pr6|394 002015 aa 6 00602 6211 00 eax1 pr6|386 002016 aa 020000 4310 07 fld 8192,dl 002017 aa 6 00044 3701 20 epp4 pr6|36,* 002020 la 4 00012 3521 20 epp2 pr4|10,* ioi_$get_detailed_status 002021 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 501 end; END BLOCK 4 STATEMENT 1 ON LINE 503 if code ^= 0 then return; 002022 aa 6 00152 3735 20 epp7 pr6|106,* 002023 aa 7 00010 2361 20 ldq pr7|8,* code 002024 aa 000002 6000 04 tze 2,ic 002026 002025 aa 6 00150 6101 00 rtcd pr6|104 STATEMENT 1 ON LINE 505 if status_present then do; 002026 aa 6 00114 2351 00 lda pr6|76 status_present 002027 aa 400000 3150 03 cana 131072,du 002030 aa 000011 6000 04 tze 9,ic 002041 STATEMENT 1 ON LINE 506 tai.flags.order_done = "1"b; 002031 aa 100000 2350 07 lda 32768,dl 002032 aa 6 00116 3715 20 epp5 pr6|78,* wksp 002033 aa 5 00020 2551 00 orsa pr5|16 tai.order_done STATEMENT 1 ON LINE 507 tai.order_count_done = 1; 002034 aa 000001 2350 07 lda 1,dl 002035 aa 5 00041 5511 14 stba pr5|33,14 tai.order_count_done STATEMENT 1 ON LINE 508 goto QUEUE_ORDER_JOIN_4; 002036 aa 000066 7100 04 tra 54,ic 002124 STATEMENT 1 ON LINE 509 end; STATEMENT 1 ON LINE 514 QUEUE_ORDER (0): /* ready pseudo-order */ tai.saved_special_status = ""b; 002037 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002040 aa 7 00042 4501 00 stz pr7|34 tai.saved_special_status STATEMENT 1 ON LINE 516 QUEUE_ORDER (7): /* data security erase */ QUEUE_ORDER (8): /* rewind */ QUEUE_ORDER (9): /* rewind/unload */ QUEUE_ORDER (10): /* tape load */ QUEUE_ORDER (11): /* request status */ QUEUE_ORDER (12): /* reset status */ QUEUE_ORDER_REQUEST_DEVICE_STATUS: /* request device status */ QUEUE_ORDER (14): /* reset device status */ QUEUE_ORDER (16): /* set file permit */ QUEUE_ORDER (17): /* set file protect */ QUEUE_ORDER (18): /* reserve device */ QUEUE_ORDER (19): /* release device */ QUEUE_ORDER (20): /* read control registers */ idcw.count = "01"b3; 002041 aa 000001 2350 07 lda 1,dl 002042 aa 6 00120 3735 20 epp7 pr6|80,* idcw.count 002043 aa 7 00000 7511 01 stca pr7|0,01 idcw.count STATEMENT 1 ON LINE 530 QUEUE_ORDER_JOIN_1: device_command = order_commands (order_idx); 002044 aa 6 00156 2361 00 ldq pr6|110 order_idx 002045 aa 000006 4020 07 mpy 6,dl 002046 aa 6 00105 4501 00 stz pr6|69 device_command 002047 aa 003 100 060 406 csl (ql),(pr),fill(0),bool(move) 002050 ta 000076 00 0006 descb 62,6 002051 aa 6 00105 00 0006 descb pr6|69,6 device_command STATEMENT 1 ON LINE 532 QUEUE_ORDER_JOIN_2: /* density orders enter here */ idcw.command = device_command; 002052 aa 6 00105 2351 00 lda pr6|69 device_command 002053 aa 6 00120 3735 20 epp7 pr6|80,* idcw.command 002054 aa 7 00000 7511 40 stca pr7|0,40 idcw.command STATEMENT 1 ON LINE 534 if order_idx = 7 then idcw.chan_cmd = "03"b3; 002055 aa 6 00156 2361 00 ldq pr6|110 order_idx 002056 aa 000007 1160 07 cmpq 7,dl 002057 aa 000005 6010 04 tnz 5,ic 002064 002060 aa 000300 2350 07 lda 192,dl 002061 aa 6 00120 3715 20 epp5 pr6|80,* idcw.chan_cmd 002062 aa 5 00000 7511 02 stca pr5|0,02 idcw.chan_cmd 002063 aa 000004 7100 04 tra 4,ic 002067 STATEMENT 1 ON LINE 536 else idcw.chan_cmd = "02"b3; 002064 aa 000200 2350 07 lda 128,dl 002065 aa 6 00120 3715 20 epp5 pr6|80,* idcw.chan_cmd 002066 aa 5 00000 7511 02 stca pr5|0,02 idcw.chan_cmd STATEMENT 1 ON LINE 537 QUEUE_ORDER_JOIN_3: /* all of the order connects come here */ if (order_idx >= 1 & order_idx <= 4) | /* bsf, bsr, fsf, fsr */ order_idx = 7 then /* dse */ call set_timeout (tai.max_timeout); 002067 aa 6 00156 2361 00 ldq pr6|110 order_idx 002070 aa 000001 1160 07 cmpq 1,dl 002071 aa 000003 6040 04 tmi 3,ic 002074 002072 aa 000004 1160 07 cmpq 4,dl 002073 aa 000003 6044 04 tmoz 3,ic 002076 002074 aa 000007 1160 07 cmpq 7,dl 002075 aa 000011 6010 04 tnz 9,ic 002106 002076 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002077 aa 7 00004 3521 00 epp2 pr7|4 tai.max_timeout 002100 aa 6 00576 2521 00 spri2 pr6|382 002101 aa 6 00574 3521 00 epp2 pr6|380 002102 aa 004000 4310 07 fld 2048,dl 002103 aa 2 00000 7571 00 staq pr2|0 002104 aa 004322 6700 04 tsp4 2258,ic 006426 002105 aa 000003 7100 04 tra 3,ic 002110 STATEMENT 1 ON LINE 541 else call set_timeout (TIMEOUT_ORDER); 002106 aa 005630 3520 04 epp2 2968,ic 007736 = 000002000000 002107 aa 004317 6700 04 tsp4 2255,ic 006426 STATEMENT 1 ON LINE 542 call connect (bin (rel (idcwp)), code); 002110 aa 6 00120 6351 20 eaa pr6|80,* idcwp 002111 aa 000066 7730 00 lrl 54 002112 aa 6 00572 7561 00 stq pr6|378 002113 aa 6 00572 3521 00 epp2 pr6|378 002114 aa 6 00604 2521 00 spri2 pr6|388 002115 aa 6 00152 3735 20 epp7 pr6|106,* 002116 aa 7 00010 3521 20 epp2 pr7|8,* code 002117 aa 6 00606 2521 00 spri2 pr6|390 002120 aa 6 00602 3521 00 epp2 pr6|386 002121 aa 010000 4310 07 fld 4096,dl 002122 aa 2 00000 7571 00 staq pr2|0 002123 aa 004334 6700 04 tsp4 2268,ic 006457 STATEMENT 1 ON LINE 543 QUEUE_ORDER_JOIN_4: /* orders that need no connects enter here */ if code = 0 then do; 002124 aa 6 00152 3735 20 epp7 pr6|106,* 002125 aa 7 00010 2361 20 ldq pr7|8,* code 002126 aa 000033 6010 04 tnz 27,ic 002161 STATEMENT 1 ON LINE 545 tai.flags.order_queued = "1"b; 002127 aa 000001 2350 03 lda 1,du 002130 aa 6 00116 3715 20 epp5 pr6|78,* wksp 002131 aa 5 00020 2551 00 orsa pr5|16 tai.order_queued STATEMENT 1 ON LINE 546 tai.order_count_requested = count; 002132 aa 7 00004 2361 20 ldq pr7|4,* count 002133 aa 000066 7370 00 lls 54 002134 aa 5 00041 5511 60 stba pr5|33,60 tai.order_count_requested STATEMENT 1 ON LINE 547 tai.order_count_done = 0; 002135 aa 000000 2350 03 lda 0,du 002136 aa 5 00041 5511 14 stba pr5|33,14 tai.order_count_done STATEMENT 1 ON LINE 548 tai.order_idx = order_idx; 002137 aa 6 00156 2361 00 ldq pr6|110 order_idx 002140 aa 5 00020 5521 04 stbq pr5|16,04 tai.order_idx STATEMENT 1 ON LINE 549 tai.order_data_ptr = data_ptr; 002141 aa 7 00006 3535 20 epp3 pr7|6,* data_ptr 002142 aa 3 00000 3535 20 epp3 pr3|0,* data_ptr 002143 aa 5 00044 2535 00 spri3 pr5|36 tai.order_data_ptr STATEMENT 1 ON LINE 550 tai.total_orders = tai.total_orders + 1; 002144 aa 6 00116 3715 20 epp5 pr6|78,* wksp 002145 aa 5 00025 2351 00 lda pr5|21 tai.total_orders 002146 aa 000044 7330 00 lrs 36 002147 aa 000001 0330 07 adl 1,dl 002150 aa 5 00025 7561 00 stq pr5|21 tai.total_orders STATEMENT 1 ON LINE 551 if order_mnemonics (order_idx) = "rew" then /* Reset at_bot after rewind order */ tai.at_bot = "1"b; 002151 aa 775767 2350 04 lda -1033,ic 000140 = 162145167000 002152 aa 0 00446 2771 00 oraq pr0|294 = 000000000040 040040040040 002153 aa 0 00110 3771 00 anaq pr0|72 = 777777777777 000000000000 002154 aa 6 00156 7271 00 lxl7 pr6|110 order_idx 002155 ta 000102 1150 17 cmpa 66,7 002156 aa 000003 6010 04 tnz 3,ic 002161 002157 aa 002000 2350 07 lda 1024,dl 002160 aa 5 00020 2551 00 orsa pr5|16 tai.at_bot STATEMENT 1 ON LINE 553 end; STATEMENT 1 ON LINE 555 end queue_order_proc; 002161 aa 6 00150 6101 00 rtcd pr6|104 END PROCEDURE queue_order_proc BEGIN PROCEDURE check_order_proc ENTRY TO check_order_proc STATEMENT 1 ON LINE 557 check_order_proc: proc (count, result, code); 002162 aa 6 00164 6501 00 spri4 pr6|116 002163 aa 6 00166 2521 00 spri2 pr6|118 STATEMENT 1 ON LINE 566 if ^tai.order_queued then do; 002164 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002165 aa 7 00020 2351 00 lda pr7|16 tai.order_queued 002166 aa 000001 3150 03 cana 1,du 002167 aa 000010 6010 04 tnz 8,ic 002177 STATEMENT 1 ON LINE 567 count = 0; 002170 aa 2 00002 4501 20 stz pr2|2,* count STATEMENT 1 ON LINE 568 result = TAPE_IO_USER_PROGRAM_ERROR; 002171 aa 000001 2360 07 ldq 1,dl 002172 aa 2 00004 7561 20 stq pr2|4,* result STATEMENT 1 ON LINE 569 code = error_table_$invalid_state; 002173 aa 6 00044 3701 20 epp4 pr6|36,* 002174 la 4 00074 2361 20 ldq pr4|60,* error_table_$invalid_state 002175 aa 2 00006 7561 20 stq pr2|6,* code STATEMENT 1 ON LINE 570 return; 002176 aa 6 00164 6101 00 rtcd pr6|116 STATEMENT 1 ON LINE 571 end; STATEMENT 1 ON LINE 573 if tai.order_done then do; 002177 aa 7 00020 2351 00 lda pr7|16 tai.order_done 002200 aa 100000 3150 07 cana 32768,dl 002201 aa 000011 6000 04 tze 9,ic 002212 STATEMENT 1 ON LINE 574 tai.order_done = "0"b; 002202 aa 005532 2350 04 lda 2906,ic 007734 = 777777677777 002203 aa 7 00020 3551 00 ansa pr7|16 tai.order_done STATEMENT 1 ON LINE 575 count = tai.order_count_done; 002204 aa 7 00041 2361 00 ldq pr7|33 tai.order_count_done 002205 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 002206 aa 2 00002 7561 20 stq pr2|2,* count STATEMENT 1 ON LINE 576 result = TAPE_IO_SUCCESS; 002207 aa 000000 2360 07 ldq 0,dl 002210 aa 2 00004 7561 20 stq pr2|4,* result STATEMENT 1 ON LINE 577 goto CHECK_ORDER_GOOD_RETURN; 002211 aa 000656 7100 04 tra 430,ic 003067 STATEMENT 1 ON LINE 578 end; STATEMENT 1 ON LINE 582 NEED_SPECIAL_STATUS: if tai.flags.special_status_expected then do; 002212 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002213 aa 7 00020 2351 00 lda pr7|16 tai.special_status_expected 002214 aa 020000 3150 07 cana 8192,dl 002215 aa 000035 6000 04 tze 29,ic 002252 STATEMENT 1 ON LINE 584 call get_special_status (auto_special_status); 002216 aa 005512 3520 04 epp2 2890,ic 007730 = 000002000000 002217 aa 000666 6700 04 tsp4 438,ic 003105 STATEMENT 1 ON LINE 586 tai.saved_special_status = auto_special_status; 002220 aa 6 00100 2351 00 lda pr6|64 auto_special_status 002221 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002222 aa 7 00042 7551 00 sta pr7|34 tai.saved_special_status STATEMENT 1 ON LINE 588 tai.flags.special_status_expected = "0"b; 002223 aa 005503 2350 04 lda 2883,ic 007726 = 777777757777 002224 aa 7 00020 3551 00 ansa pr7|16 tai.special_status_expected STATEMENT 1 ON LINE 589 call connect (bin (rel (addr (tai.order_idcw))), code); 002225 aa 7 00046 3715 00 epp5 pr7|38 tai.order_idcw 002226 aa 5 00000 6351 00 eaa pr5|0 002227 aa 000066 7730 00 lrl 54 002230 aa 6 00614 7561 00 stq pr6|396 002231 aa 6 00614 3521 00 epp2 pr6|396 002232 aa 6 00620 2521 00 spri2 pr6|400 002233 aa 6 00166 3535 20 epp3 pr6|118,* 002234 aa 3 00006 3521 20 epp2 pr3|6,* code 002235 aa 6 00622 2521 00 spri2 pr6|402 002236 aa 6 00616 3521 00 epp2 pr6|398 002237 aa 010000 4310 07 fld 4096,dl 002240 aa 2 00000 7571 00 staq pr2|0 002241 aa 6 00626 6515 00 spri5 pr6|406 002242 aa 004215 6700 04 tsp4 2189,ic 006457 STATEMENT 1 ON LINE 590 if code ^= 0 then do; 002243 aa 6 00166 3735 20 epp7 pr6|118,* 002244 aa 7 00006 2361 20 ldq pr7|6,* code 002245 aa 000005 6000 04 tze 5,ic 002252 STATEMENT 1 ON LINE 591 result = TAPE_IO_USER_PROGRAM_ERROR; 002246 aa 000001 2360 07 ldq 1,dl 002247 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 592 count = 0; 002250 aa 7 00002 4501 20 stz pr7|2,* count STATEMENT 1 ON LINE 593 return; 002251 aa 6 00164 6101 00 rtcd pr6|116 STATEMENT 1 ON LINE 594 end; STATEMENT 1 ON LINE 595 end; STATEMENT 1 ON LINE 599 count = 0; 002252 aa 6 00166 3735 20 epp7 pr6|118,* 002253 aa 7 00002 4501 20 stz pr7|2,* count STATEMENT 1 ON LINE 600 call get_status (tai.modes.wait, CHECK_ORDER_MAKE_CALLER_WAIT); 002254 aa 000623 3520 04 epp2 403,ic 003077 = 000001336007 002255 aa 6 00616 2521 00 spri2 pr6|398 002256 aa 6 00620 6521 00 spri6 pr6|400 002257 aa 000017 7270 07 lxl7 15,dl 002260 aa 6 00116 3715 20 epp5 pr6|78,* wksp 002261 aa 5 00020 3521 00 epp2 pr5|16 tai.wait 002262 aa 2 00000 5035 17 abd pr2|0,7 002263 aa 6 00632 2521 00 spri2 pr6|410 002264 aa 6 00616 3521 00 epp2 pr6|398 002265 aa 6 00634 2521 00 spri2 pr6|412 002266 aa 6 00630 3521 00 epp2 pr6|408 002267 aa 010000 4310 07 fld 4096,dl 002270 aa 2 00000 7571 00 staq pr2|0 002271 aa 004643 6700 04 tsp4 2467,ic 007134 STATEMENT 1 ON LINE 602 goto CHECK_ORDER (tai.order_idx); 002272 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002273 aa 7 00020 2361 00 ldq pr7|16 tai.order_idx 002274 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 002275 ta 000027 7100 06 tra 23,ql STATEMENT 1 ON LINE 604 CHECK_ORDER (0): /* rdy */ if status_class = "UE" then do; 002276 aa 6 00113 2351 00 lda pr6|75 status_class 002277 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 002300 aa 125105 1150 03 cmpa 43589,du 002301 aa 000006 6010 04 tnz 6,ic 002307 STATEMENT 1 ON LINE 606 code = error_table_$unexpected_device_status; 002302 aa 6 00044 3701 20 epp4 pr6|36,* 002303 la 4 00104 2361 20 ldq pr4|68,* error_table_$unexpected_device_status 002304 aa 6 00166 3715 20 epp5 pr6|118,* 002305 aa 5 00006 7561 20 stq pr5|6,* code STATEMENT 1 ON LINE 607 goto CHECK_ORDER_PROGRAM_ERROR; 002306 aa 000555 7100 04 tra 365,ic 003063 STATEMENT 1 ON LINE 608 end; STATEMENT 1 ON LINE 609 else if status_class = "SI" then do; 002307 aa 123111 1150 03 cmpa 42569,du 002310 aa 000004 6010 04 tnz 4,ic 002314 STATEMENT 1 ON LINE 610 tai.special_status_expected = "1"b; 002311 aa 020000 2350 07 lda 8192,dl 002312 aa 7 00020 2551 00 orsa pr7|16 tai.special_status_expected STATEMENT 1 ON LINE 611 goto NEED_SPECIAL_STATUS; 002313 aa 777677 7100 04 tra -65,ic 002212 STATEMENT 1 ON LINE 612 end; STATEMENT 1 ON LINE 613 else do; STATEMENT 1 ON LINE 614 based_special_status = tai.saved_special_status; 002314 aa 7 00042 2351 00 lda pr7|34 tai.saved_special_status 002315 aa 7 00044 7551 20 sta pr7|36,* based_special_status STATEMENT 1 ON LINE 615 count = 1; 002316 aa 000001 2360 07 ldq 1,dl 002317 aa 6 00166 3715 20 epp5 pr6|118,* 002320 aa 5 00002 7561 20 stq pr5|2,* count STATEMENT 1 ON LINE 616 result = TAPE_IO_SUCCESS; 002321 aa 000000 2360 07 ldq 0,dl 002322 aa 5 00004 7561 20 stq pr5|4,* result STATEMENT 1 ON LINE 617 goto CHECK_ORDER_GOOD_RETURN; 002323 aa 000544 7100 04 tra 356,ic 003067 STATEMENT 1 ON LINE 618 end; STATEMENT 1 ON LINE 620 CHECK_ORDER (1): /* backspace file */ do while ("1"b); STATEMENT 1 ON LINE 622 if status_class = "AB" then do; 002324 aa 6 00113 2351 00 lda pr6|75 status_class 002325 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 002326 aa 101102 1150 03 cmpa 33346,du 002327 aa 000016 6010 04 tnz 14,ic 002345 STATEMENT 1 ON LINE 623 result = TAPE_IO_BOT; 002330 aa 000006 2360 07 ldq 6,dl 002331 aa 6 00166 3735 20 epp7 pr6|118,* 002332 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 624 tai.at_bot = "1"b; 002333 aa 002000 2350 07 lda 1024,dl 002334 aa 6 00116 3715 20 epp5 pr6|78,* wksp 002335 aa 5 00020 2551 00 orsa pr5|16 tai.at_bot STATEMENT 1 ON LINE 625 count = repeatable_order_count (); 002336 aa 7 00002 3521 20 epp2 pr7|2,* count 002337 aa 6 00632 2521 00 spri2 pr6|410 002340 aa 6 00630 3521 00 epp2 pr6|408 002341 aa 004000 4310 07 fld 2048,dl 002342 aa 2 00000 7571 00 staq pr2|0 002343 aa 000614 6700 04 tsp4 396,ic 003157 STATEMENT 1 ON LINE 626 goto CHECK_ORDER_DONE; 002344 aa 000525 7100 04 tra 341,ic 003071 STATEMENT 1 ON LINE 627 end; STATEMENT 1 ON LINE 628 else if (status_class = "EF") | (status_class = "OK") then call finish_repeatable_order; 002345 aa 105106 1150 03 cmpa 35398,du 002346 aa 000003 6000 04 tze 3,ic 002351 002347 aa 117113 1150 03 cmpa 40523,du 002350 aa 000003 6010 04 tnz 3,ic 002353 002351 aa 000667 6700 04 tsp4 439,ic 003240 002352 aa 777752 7100 04 tra -22,ic 002324 STATEMENT 1 ON LINE 630 else do; STATEMENT 1 ON LINE 631 CHECK_ORDER_NOT_PERFORMED: code = error_table_$action_not_performed; 002353 aa 6 00044 3701 20 epp4 pr6|36,* 002354 la 4 00046 2361 20 ldq pr4|38,* error_table_$action_not_performed 002355 aa 6 00166 3735 20 epp7 pr6|118,* 002356 aa 7 00006 7561 20 stq pr7|6,* code STATEMENT 1 ON LINE 633 goto CHECK_ORDER_IO_ERROR; 002357 aa 000463 7100 04 tra 307,ic 003042 STATEMENT 1 ON LINE 634 end; STATEMENT 1 ON LINE 635 end; 002360 aa 777744 7100 04 tra -28,ic 002324 STATEMENT 1 ON LINE 637 CHECK_ORDER (2): /* backspace record */ idcwp = addr (tai.order_idcw); 002361 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002362 aa 7 00046 3735 00 epp7 pr7|38 tai.order_idcw 002363 aa 6 00120 6535 00 spri7 pr6|80 idcwp STATEMENT 1 ON LINE 639 io_status_word_ptr = addr (istat.iom_stat); 002364 aa 6 00132 3715 20 epp5 pr6|90,* isp 002365 aa 5 00004 3715 00 epp5 pr5|4 istat.iom_stat 002366 aa 6 00134 6515 00 spri5 pr6|92 io_status_word_ptr STATEMENT 1 ON LINE 640 do while ("1"b); 002367 aa 000000 0110 03 nop 0,du STATEMENT 1 ON LINE 641 if status_class = "AB" then do; 002370 aa 6 00113 2351 00 lda pr6|75 status_class 002371 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 002372 aa 101102 1150 03 cmpa 33346,du 002373 aa 000016 6010 04 tnz 14,ic 002411 STATEMENT 1 ON LINE 642 result = TAPE_IO_BOT; 002374 aa 000006 2360 07 ldq 6,dl 002375 aa 6 00166 3735 20 epp7 pr6|118,* 002376 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 643 tai.at_bot = "1"b; 002377 aa 002000 2350 07 lda 1024,dl 002400 aa 6 00116 3715 20 epp5 pr6|78,* wksp 002401 aa 5 00020 2551 00 orsa pr5|16 tai.at_bot STATEMENT 1 ON LINE 644 count = repeatable_order_count (); 002402 aa 7 00002 3521 20 epp2 pr7|2,* count 002403 aa 6 00620 2521 00 spri2 pr6|400 002404 aa 6 00616 3521 00 epp2 pr6|398 002405 aa 004000 4310 07 fld 2048,dl 002406 aa 2 00000 7571 00 staq pr2|0 002407 aa 000550 6700 04 tsp4 360,ic 003157 STATEMENT 1 ON LINE 645 goto CHECK_ORDER_GOOD_RETURN; 002410 aa 000457 7100 04 tra 303,ic 003067 STATEMENT 1 ON LINE 646 end; STATEMENT 1 ON LINE 647 else if status_class = "EF" then do; 002411 aa 105106 1150 03 cmpa 35398,du 002412 aa 000013 6010 04 tnz 11,ic 002425 STATEMENT 1 ON LINE 648 result = TAPE_IO_EOF; 002413 aa 000004 2360 07 ldq 4,dl 002414 aa 6 00166 3735 20 epp7 pr6|118,* 002415 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 649 count = repeatable_order_count (); 002416 aa 7 00002 3521 20 epp2 pr7|2,* count 002417 aa 6 00632 2521 00 spri2 pr6|410 002420 aa 6 00630 3521 00 epp2 pr6|408 002421 aa 004000 4310 07 fld 2048,dl 002422 aa 2 00000 7571 00 staq pr2|0 002423 aa 000534 6700 04 tsp4 348,ic 003157 STATEMENT 1 ON LINE 650 goto CHECK_ORDER_GOOD_RETURN; 002424 aa 000443 7100 04 tra 291,ic 003067 STATEMENT 1 ON LINE 651 end; STATEMENT 1 ON LINE 652 else if status_class = "OK" then call finish_repeatable_order; 002425 aa 117113 1150 03 cmpa 40523,du 002426 aa 000003 6010 04 tnz 3,ic 002431 002427 aa 000611 6700 04 tsp4 393,ic 003240 002430 aa 777740 7100 04 tra -32,ic 002370 STATEMENT 1 ON LINE 654 else do; STATEMENT 1 ON LINE 655 count = repeatable_order_count (); 002431 aa 6 00166 3735 20 epp7 pr6|118,* 002432 aa 7 00002 3521 20 epp2 pr7|2,* count 002433 aa 6 00620 2521 00 spri2 pr6|400 002434 aa 6 00616 3521 00 epp2 pr6|398 002435 aa 004000 4310 07 fld 2048,dl 002436 aa 2 00000 7571 00 staq pr2|0 002437 aa 000520 6700 04 tsp4 336,ic 003157 STATEMENT 1 ON LINE 656 goto CHECK_ORDER_NOT_PERFORMED; 002440 aa 777713 7100 04 tra -53,ic 002353 STATEMENT 1 ON LINE 657 end; STATEMENT 1 ON LINE 658 end; 002441 aa 777727 7100 04 tra -41,ic 002370 STATEMENT 1 ON LINE 660 CHECK_ORDER (3): /* forward space file */ do while ("1"b); STATEMENT 1 ON LINE 662 if status_class = "ET" then do; 002442 aa 6 00113 2351 00 lda pr6|75 status_class 002443 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 002444 aa 105124 1150 03 cmpa 35412,du 002445 aa 000013 6010 04 tnz 11,ic 002460 STATEMENT 1 ON LINE 663 result = TAPE_IO_EOT; 002446 aa 000005 2360 07 ldq 5,dl 002447 aa 6 00166 3735 20 epp7 pr6|118,* 002450 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 664 count = repeatable_order_count (); 002451 aa 7 00002 3521 20 epp2 pr7|2,* count 002452 aa 6 00632 2521 00 spri2 pr6|410 002453 aa 6 00630 3521 00 epp2 pr6|408 002454 aa 004000 4310 07 fld 2048,dl 002455 aa 2 00000 7571 00 staq pr2|0 002456 aa 000501 6700 04 tsp4 321,ic 003157 STATEMENT 1 ON LINE 665 goto CHECK_ORDER_GOOD_RETURN; 002457 aa 000410 7100 04 tra 264,ic 003067 STATEMENT 1 ON LINE 666 end; STATEMENT 1 ON LINE 667 else if (status_class = "EF") | (status_class = "OK") then call finish_repeatable_order; 002460 aa 105106 1150 03 cmpa 35398,du 002461 aa 000003 6000 04 tze 3,ic 002464 002462 aa 117113 1150 03 cmpa 40523,du 002463 aa 777670 6010 04 tnz -72,ic 002353 002464 aa 000554 6700 04 tsp4 364,ic 003240 STATEMENT 1 ON LINE 670 end; 002465 aa 777755 7100 04 tra -19,ic 002442 STATEMENT 1 ON LINE 672 CHECK_ORDER (4): /* forward space record */ idcwp = addr (tai.order_idcw); 002466 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002467 aa 7 00046 3735 00 epp7 pr7|38 tai.order_idcw 002470 aa 6 00120 6535 00 spri7 pr6|80 idcwp STATEMENT 1 ON LINE 674 io_status_word_ptr = addr (istat.iom_stat); 002471 aa 6 00132 3715 20 epp5 pr6|90,* isp 002472 aa 5 00004 3715 00 epp5 pr5|4 istat.iom_stat 002473 aa 6 00134 6515 00 spri5 pr6|92 io_status_word_ptr STATEMENT 1 ON LINE 675 do while ("1"b); STATEMENT 1 ON LINE 676 if status_class = "EF" then do; 002474 aa 6 00113 2351 00 lda pr6|75 status_class 002475 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 002476 aa 105106 1150 03 cmpa 35398,du 002477 aa 000013 6010 04 tnz 11,ic 002512 STATEMENT 1 ON LINE 677 result = TAPE_IO_EOF; 002500 aa 000004 2360 07 ldq 4,dl 002501 aa 6 00166 3735 20 epp7 pr6|118,* 002502 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 678 count = repeatable_order_count (); 002503 aa 7 00002 3521 20 epp2 pr7|2,* count 002504 aa 6 00620 2521 00 spri2 pr6|400 002505 aa 6 00616 3521 00 epp2 pr6|398 002506 aa 004000 4310 07 fld 2048,dl 002507 aa 2 00000 7571 00 staq pr2|0 002510 aa 000447 6700 04 tsp4 295,ic 003157 STATEMENT 1 ON LINE 679 goto CHECK_ORDER_GOOD_RETURN; 002511 aa 000356 7100 04 tra 238,ic 003067 STATEMENT 1 ON LINE 680 end; STATEMENT 1 ON LINE 681 else if status_class = "ET" then do; 002512 aa 105124 1150 03 cmpa 35412,du 002513 aa 000013 6010 04 tnz 11,ic 002526 STATEMENT 1 ON LINE 682 result = TAPE_IO_EOT; 002514 aa 000005 2360 07 ldq 5,dl 002515 aa 6 00166 3735 20 epp7 pr6|118,* 002516 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 683 count = repeatable_order_count (); 002517 aa 7 00002 3521 20 epp2 pr7|2,* count 002520 aa 6 00632 2521 00 spri2 pr6|410 002521 aa 6 00630 3521 00 epp2 pr6|408 002522 aa 004000 4310 07 fld 2048,dl 002523 aa 2 00000 7571 00 staq pr2|0 002524 aa 000433 6700 04 tsp4 283,ic 003157 STATEMENT 1 ON LINE 684 goto CHECK_ORDER_GOOD_RETURN; 002525 aa 000342 7100 04 tra 226,ic 003067 STATEMENT 1 ON LINE 685 end; STATEMENT 1 ON LINE 686 else if status_class = "OK" then call finish_repeatable_order; 002526 aa 117113 1150 03 cmpa 40523,du 002527 aa 000003 6010 04 tnz 3,ic 002532 002530 aa 000510 6700 04 tsp4 328,ic 003240 002531 aa 777743 7100 04 tra -29,ic 002474 STATEMENT 1 ON LINE 688 else do; STATEMENT 1 ON LINE 689 count = repeatable_order_count (); 002532 aa 6 00166 3735 20 epp7 pr6|118,* 002533 aa 7 00002 3521 20 epp2 pr7|2,* count 002534 aa 6 00620 2521 00 spri2 pr6|400 002535 aa 6 00616 3521 00 epp2 pr6|398 002536 aa 004000 4310 07 fld 2048,dl 002537 aa 2 00000 7571 00 staq pr2|0 002540 aa 000417 6700 04 tsp4 271,ic 003157 STATEMENT 1 ON LINE 690 goto CHECK_ORDER_NOT_PERFORMED; 002541 aa 777612 7100 04 tra -118,ic 002353 STATEMENT 1 ON LINE 691 end; STATEMENT 1 ON LINE 692 end; 002542 aa 777732 7100 04 tra -38,ic 002474 STATEMENT 1 ON LINE 694 CHECK_ORDER (5): /* write EOF */ do while ("1"b); 002543 aa 000000 0110 03 nop 0,du STATEMENT 1 ON LINE 696 if status_class = "ET" then do; 002544 aa 6 00113 2351 00 lda pr6|75 status_class 002545 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 002546 aa 105124 1150 03 cmpa 35412,du 002547 aa 000032 6010 04 tnz 26,ic 002601 STATEMENT 1 ON LINE 697 if tai.retry_in_progress & (istat.offset < bin (rel (addr (tai.order_data)))) then /* backspace and erase finished, but not EOF, so reconnect */ call finish_repeatable_order (); 002550 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002551 aa 7 00020 2351 00 lda pr7|16 tai.retry_in_progress 002552 aa 010000 3150 07 cana 4096,dl 002553 aa 000014 6000 04 tze 12,ic 002567 002554 aa 7 00050 3715 00 epp5 pr7|40 tai.order_data 002555 aa 5 00000 6351 00 eaa pr5|0 002556 aa 000066 7730 00 lrl 54 002557 aa 6 00640 7571 00 staq pr6|416 002560 aa 6 00132 3535 20 epp3 pr6|90,* isp 002561 aa 3 00002 2351 00 lda pr3|2 istat.offset 002562 aa 000044 7330 00 lrs 36 002563 aa 6 00640 1171 00 cmpaq pr6|416 002564 aa 000003 6050 04 tpl 3,ic 002567 002565 aa 6 00640 6515 00 spri5 pr6|416 002566 aa 000452 6700 04 tsp4 298,ic 003240 STATEMENT 1 ON LINE 701 result = TAPE_IO_EOT; 002567 aa 000005 2360 07 ldq 5,dl 002570 aa 6 00166 3735 20 epp7 pr6|118,* 002571 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 702 count = repeatable_order_count (); 002572 aa 7 00002 3521 20 epp2 pr7|2,* count 002573 aa 6 00632 2521 00 spri2 pr6|410 002574 aa 6 00630 3521 00 epp2 pr6|408 002575 aa 004000 4310 07 fld 2048,dl 002576 aa 2 00000 7571 00 staq pr2|0 002577 aa 000360 6700 04 tsp4 240,ic 003157 STATEMENT 1 ON LINE 703 goto CHECK_ORDER_GOOD_RETURN; 002600 aa 000267 7100 04 tra 183,ic 003067 STATEMENT 1 ON LINE 704 end; STATEMENT 1 ON LINE 705 else if (status_class = "EF") | (status_class = "OK") then call finish_repeatable_order (); 002601 aa 105106 1150 03 cmpa 35398,du 002602 aa 000003 6000 04 tze 3,ic 002605 002603 aa 117113 1150 03 cmpa 40523,du 002604 aa 000003 6010 04 tnz 3,ic 002607 002605 aa 000433 6700 04 tsp4 283,ic 003240 002606 aa 777736 7100 04 tra -34,ic 002544 STATEMENT 1 ON LINE 707 else if (status_class = "DA") | (status_class = "DE") then do; 002607 aa 104101 1150 03 cmpa 34881,du 002610 aa 000003 6000 04 tze 3,ic 002613 002611 aa 104105 1150 03 cmpa 34885,du 002612 aa 777541 6010 04 tnz -159,ic 002353 STATEMENT 1 ON LINE 708 tai.order_count_done = repeatable_order_count () - 1; 002613 aa 005107 3520 04 epp2 2631,ic 007722 = 000002000000 002614 aa 000343 6700 04 tsp4 227,ic 003157 002615 aa 6 00614 2361 00 ldq pr6|396 002616 aa 000001 1760 07 sbq 1,dl 002617 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002620 aa 7 00041 5521 14 stbq pr7|33,14 tai.order_count_done STATEMENT 1 ON LINE 710 tai.order_errors = tai.order_errors + 1; 002621 aa 7 00026 2351 00 lda pr7|22 tai.order_errors 002622 aa 000044 7330 00 lrs 36 002623 aa 000001 0330 07 adl 1,dl 002624 aa 7 00026 7561 00 stq pr7|22 tai.order_errors STATEMENT 1 ON LINE 711 if tai.retry_count < MAX_RETRY_COUNT then do; 002625 aa 7 00015 2351 00 lda pr7|13 tai.retry_count 002626 aa 000077 7730 00 lrl 63 002627 aa 6 00614 7561 00 stq pr6|396 tai.retry_count 002630 aa 000012 1160 07 cmpq 10,dl 002631 aa 000041 6050 04 tpl 33,ic 002672 STATEMENT 1 ON LINE 712 tai.retry_count = tai.retry_count + 1; 002632 aa 000001 0760 07 adq 1,dl 002633 aa 000077 7370 00 lls 63 002634 aa 7 00015 5511 40 stba pr7|13,40 tai.retry_count STATEMENT 1 ON LINE 713 call refill_order_list (); 002635 aa 000445 6700 04 tsp4 293,ic 003302 STATEMENT 1 ON LINE 714 call tape_ioi_error_retry$eof (wksp, code); 002636 aa 6 00116 3521 00 epp2 pr6|78 wksp 002637 aa 6 00620 2521 00 spri2 pr6|400 002640 aa 6 00166 3735 20 epp7 pr6|118,* 002641 aa 7 00006 3521 20 epp2 pr7|6,* code 002642 aa 6 00622 2521 00 spri2 pr6|402 002643 aa 6 00616 6211 00 eax1 pr6|398 002644 aa 010000 4310 07 fld 4096,dl 002645 aa 6 00044 3701 20 epp4 pr6|36,* 002646 la 4 00030 3521 20 epp2 pr4|24,* tape_ioi_error_retry$eof 002647 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 715 if code ^= 0 then goto CHECK_ORDER_PROGRAM_ERROR; 002650 aa 6 00166 3735 20 epp7 pr6|118,* 002651 aa 7 00006 2361 20 ldq pr7|6,* code 002652 aa 000211 6010 04 tnz 137,ic 003063 STATEMENT 1 ON LINE 717 call get_status (tai.modes.wait, CHECK_ORDER_MAKE_CALLER_WAIT); 002653 aa 000224 3520 04 epp2 148,ic 003077 = 000001336007 002654 aa 6 00630 2521 00 spri2 pr6|408 002655 aa 6 00632 6521 00 spri6 pr6|410 002656 aa 000017 7270 07 lxl7 15,dl 002657 aa 6 00116 3715 20 epp5 pr6|78,* wksp 002660 aa 5 00020 3521 00 epp2 pr5|16 tai.wait 002661 aa 2 00000 5035 17 abd pr2|0,7 002662 aa 6 00620 2521 00 spri2 pr6|400 002663 aa 6 00630 3521 00 epp2 pr6|408 002664 aa 6 00622 2521 00 spri2 pr6|402 002665 aa 6 00616 3521 00 epp2 pr6|398 002666 aa 010000 4310 07 fld 4096,dl 002667 aa 2 00000 7571 00 staq pr2|0 002670 aa 004244 6700 04 tsp4 2212,ic 007134 STATEMENT 1 ON LINE 718 end; 002671 aa 777653 7100 04 tra -85,ic 002544 STATEMENT 1 ON LINE 719 else do; STATEMENT 1 ON LINE 720 if status_class = "DE" then result = TAPE_IO_RECOVERABLE_IO_ERROR_AND_EOT; 002672 aa 6 00113 2351 00 lda pr6|75 status_class 002673 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 002674 aa 104105 1150 03 cmpa 34885,du 002675 aa 000005 6010 04 tnz 5,ic 002702 002676 aa 000007 2360 07 ldq 7,dl 002677 aa 6 00166 3715 20 epp5 pr6|118,* 002700 aa 5 00004 7561 20 stq pr5|4,* result 002701 aa 000004 7100 04 tra 4,ic 002705 STATEMENT 1 ON LINE 722 else result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 002702 aa 000002 2360 07 ldq 2,dl 002703 aa 6 00166 3715 20 epp5 pr6|118,* 002704 aa 5 00004 7561 20 stq pr5|4,* result STATEMENT 1 ON LINE 723 code = error_table_$device_parity; 002705 aa 6 00044 3701 20 epp4 pr6|36,* 002706 la 4 00072 2361 20 ldq pr4|58,* error_table_$device_parity 002707 aa 5 00006 7561 20 stq pr5|6,* code STATEMENT 1 ON LINE 724 goto CHECK_ORDER_DONE; 002710 aa 000161 7100 04 tra 113,ic 003071 STATEMENT 1 ON LINE 725 end; STATEMENT 1 ON LINE 726 end; STATEMENT 1 ON LINE 728 end; 002711 aa 777633 7100 04 tra -101,ic 002544 STATEMENT 1 ON LINE 730 CHECK_ORDER (6): /* erase */ if status_class = "OK" then call finish_repeatable_order (); 002712 aa 6 00113 2351 00 lda pr6|75 status_class 002713 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 002714 aa 117113 1150 03 cmpa 40523,du 002715 aa 000003 6010 04 tnz 3,ic 002720 002716 aa 000322 6700 04 tsp4 210,ic 003240 002717 aa 000016 7100 04 tra 14,ic 002735 STATEMENT 1 ON LINE 733 else if status_class = "ET" then do; 002720 aa 105124 1150 03 cmpa 35412,du 002721 aa 777432 6010 04 tnz -230,ic 002353 STATEMENT 1 ON LINE 734 count = repeatable_order_count (); 002722 aa 6 00166 3735 20 epp7 pr6|118,* 002723 aa 7 00002 3521 20 epp2 pr7|2,* count 002724 aa 6 00620 2521 00 spri2 pr6|400 002725 aa 6 00616 3521 00 epp2 pr6|398 002726 aa 004000 4310 07 fld 2048,dl 002727 aa 2 00000 7571 00 staq pr2|0 002730 aa 000227 6700 04 tsp4 151,ic 003157 STATEMENT 1 ON LINE 735 result = TAPE_IO_EOT; 002731 aa 000005 2360 07 ldq 5,dl 002732 aa 6 00166 3735 20 epp7 pr6|118,* 002733 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 736 goto CHECK_ORDER_GOOD_RETURN; 002734 aa 000133 7100 04 tra 91,ic 003067 STATEMENT 1 ON LINE 737 end; STATEMENT 1 ON LINE 742 CHECK_ORDER (11): /* request status */ call tape_ioi_hardware_status$hardware_status (unspec (tai.tioi_id), tai.order_data_ptr, code); 002735 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002736 aa 7 00001 2351 00 lda pr7|1 002737 aa 6 00614 7551 00 sta pr6|396 002740 aa 6 00614 3521 00 epp2 pr6|396 002741 aa 6 00632 2521 00 spri2 pr6|410 002742 aa 7 00044 3521 00 epp2 pr7|36 tai.order_data_ptr 002743 aa 6 00634 2521 00 spri2 pr6|412 002744 aa 6 00166 3715 20 epp5 pr6|118,* 002745 aa 5 00006 3521 20 epp2 pr5|6,* code 002746 aa 6 00636 2521 00 spri2 pr6|414 002747 aa 6 00630 6211 00 eax1 pr6|408 002750 aa 014000 4310 07 fld 6144,dl 002751 aa 6 00044 3701 20 epp4 pr6|36,* 002752 la 4 00032 3521 20 epp2 pr4|26,* tape_ioi_hardware_status$hardware_status 002753 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 744 if code = 0 then do; 002754 aa 6 00166 3735 20 epp7 pr6|118,* 002755 aa 7 00006 2361 20 ldq pr7|6,* code 002756 aa 000105 6010 04 tnz 69,ic 003063 STATEMENT 1 ON LINE 745 count = 1; 002757 aa 000001 2360 07 ldq 1,dl 002760 aa 7 00002 7561 20 stq pr7|2,* count STATEMENT 1 ON LINE 746 result = TAPE_IO_SUCCESS; 002761 aa 000000 2360 07 ldq 0,dl 002762 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 747 goto CHECK_ORDER_GOOD_RETURN; 002763 aa 000104 7100 04 tra 68,ic 003067 STATEMENT 1 ON LINE 748 end; STATEMENT 1 ON LINE 751 CHECK_ORDER (13): /* request device status */ count = 1; 002764 aa 000001 2360 07 ldq 1,dl 002765 aa 6 00166 3715 20 epp5 pr6|118,* 002766 aa 5 00002 7561 20 stq pr5|2,* count STATEMENT 1 ON LINE 753 result = TAPE_IO_SUCCESS; 002767 aa 000000 2360 07 ldq 0,dl 002770 aa 5 00004 7561 20 stq pr5|4,* result STATEMENT 1 ON LINE 755 begin; BEGIN BLOCK 5 STATEMENT 1 ON LINE 759 tai.order_data_ptr -> based_detailed_status = addr (tai.order_data) -> based_detailed_status; 002771 aa 6 00116 3735 20 epp7 pr6|78,* wksp 002772 aa 7 00044 3715 20 epp5 pr7|36,* tai.order_data_ptr 002773 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 002774 aa 7 00050 00 0330 descb pr7|40,216 based_detailed_status 002775 aa 5 00000 00 0330 descb pr5|0,216 based_detailed_status STATEMENT 1 ON LINE 761 end; END BLOCK 5 STATEMENT 1 ON LINE 763 goto CHECK_ORDER_GOOD_RETURN; 002776 aa 000071 7100 04 tra 57,ic 003067 STATEMENT 1 ON LINE 765 CHECK_ORDER (20): /* read control registers */ count = 1; 002777 aa 000001 2360 07 ldq 1,dl 003000 aa 6 00166 3715 20 epp5 pr6|118,* 003001 aa 5 00002 7561 20 stq pr5|2,* count STATEMENT 1 ON LINE 767 if ^((status_class = "AB") | (status_class = "OK")) then goto CHECK_ORDER_NOT_PERFORMED; 003002 aa 6 00113 2351 00 lda pr6|75 status_class 003003 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 003004 aa 101102 1150 03 cmpa 33346,du 003005 aa 000003 6000 04 tze 3,ic 003010 003006 aa 117113 1150 03 cmpa 40523,du 003007 aa 777344 6010 04 tnz -284,ic 002353 STATEMENT 1 ON LINE 770 begin; BEGIN BLOCK 6 STATEMENT 1 ON LINE 774 tai.order_data_ptr -> error_counters = addr (tai.order_data) -> error_counters; 003010 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003011 aa 7 00044 3715 20 epp5 pr7|36,* tai.order_data_ptr 003012 aa 000 100 100 500 mlr (pr),(pr),fill(000) 003013 aa 7 00050 00 0020 desc9a pr7|40,16 error_counters 003014 aa 5 00000 00 0020 desc9a pr5|0,16 error_counters STATEMENT 1 ON LINE 775 result = TAPE_IO_SUCCESS; 003015 aa 000000 2360 07 ldq 0,dl 003016 aa 6 00166 3535 20 epp3 pr6|118,* 003017 aa 3 00004 7561 20 stq pr3|4,* result STATEMENT 1 ON LINE 776 goto CHECK_ORDER_GOOD_RETURN; 003020 aa 000047 7100 04 tra 39,ic 003067 STATEMENT 1 ON LINE 777 end; END BLOCK 6 STATEMENT 1 ON LINE 781 CHECK_ORDER (7): /* data security erase */ CHECK_ORDER (8): /* rewind */ CHECK_ORDER (9): /* rewind/unload */ CHECK_ORDER (10): /* tape load */ CHECK_ORDER (12): /* reset status */ CHECK_ORDER (14): /* reset device status */ CHECK_ORDER (15): /* set density */ CHECK_ORDER (16): /* set file permit */ CHECK_ORDER (17): /* set file protect */ CHECK_ORDER (18): /* reserve device */ CHECK_ORDER (19): /* release device */ CHECK_ORDER (21): /* write control registers */ if (status_class = "AB") | (status_class = "OK") then do; 003021 aa 6 00113 2351 00 lda pr6|75 status_class 003022 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 003023 aa 101102 1150 03 cmpa 33346,du 003024 aa 000003 6000 04 tze 3,ic 003027 003025 aa 117113 1150 03 cmpa 40523,du 003026 aa 777325 6010 04 tnz -299,ic 002353 STATEMENT 1 ON LINE 794 count = 1; 003027 aa 000001 2360 07 ldq 1,dl 003030 aa 6 00166 3735 20 epp7 pr6|118,* 003031 aa 7 00002 7561 20 stq pr7|2,* count STATEMENT 1 ON LINE 795 result = TAPE_IO_SUCCESS; 003032 aa 000000 2360 07 ldq 0,dl 003033 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 796 if status_class = "AB" then tai.at_bot = "1"b; 003034 aa 101102 1150 03 cmpa 33346,du 003035 aa 000032 6010 04 tnz 26,ic 003067 003036 aa 002000 2350 07 lda 1024,dl 003037 aa 6 00116 3715 20 epp5 pr6|78,* wksp 003040 aa 5 00020 2551 00 orsa pr5|16 tai.at_bot STATEMENT 1 ON LINE 798 goto CHECK_ORDER_GOOD_RETURN; 003041 aa 000026 7100 04 tra 22,ic 003067 STATEMENT 1 ON LINE 799 end; STATEMENT 1 ON LINE 802 CHECK_ORDER_IO_ERROR: /* the order is done, but I/O errors occurred */ result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 003042 aa 000002 2360 07 ldq 2,dl 003043 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 804 tai.order_errors = tai.order_errors + 1; 003044 aa 6 00116 3715 20 epp5 pr6|78,* wksp 003045 aa 5 00026 2351 00 lda pr5|22 tai.order_errors 003046 aa 000044 7330 00 lrs 36 003047 aa 000001 0330 07 adl 1,dl 003050 aa 5 00026 7561 00 stq pr5|22 tai.order_errors STATEMENT 1 ON LINE 805 if status_class = "DN" then code = error_table_$bad_density; 003051 aa 6 00113 2351 00 lda pr6|75 status_class 003052 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 003053 aa 104116 1150 03 cmpa 34894,du 003054 aa 000004 6010 04 tnz 4,ic 003060 003055 la 4 00052 2361 20 ldq pr4|42,* error_table_$bad_density 003056 aa 7 00006 7561 20 stq pr7|6,* code 003057 aa 000012 7100 04 tra 10,ic 003071 STATEMENT 1 ON LINE 807 else code = error_table_$action_not_performed; 003060 la 4 00046 2361 20 ldq pr4|38,* error_table_$action_not_performed 003061 aa 7 00006 7561 20 stq pr7|6,* code STATEMENT 1 ON LINE 808 goto CHECK_ORDER_DONE; 003062 aa 000007 7100 04 tra 7,ic 003071 STATEMENT 1 ON LINE 810 CHECK_ORDER_PROGRAM_ERROR: result = TAPE_IO_USER_PROGRAM_ERROR; 003063 aa 000001 2360 07 ldq 1,dl 003064 aa 6 00166 3735 20 epp7 pr6|118,* 003065 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 812 goto CHECK_ORDER_DONE; 003066 aa 000003 7100 04 tra 3,ic 003071 STATEMENT 1 ON LINE 814 CHECK_ORDER_GOOD_RETURN: /* the order is done, no errors */ code = 0; 003067 aa 6 00166 3735 20 epp7 pr6|118,* 003070 aa 7 00006 4501 20 stz pr7|6,* code STATEMENT 1 ON LINE 816 CHECK_ORDER_DONE: /* the order is completed, with or without an error */ tai.order_queued = "0"b; 003071 aa 004656 2350 04 lda 2478,ic 007747 = 777776777777 003072 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003073 aa 7 00020 3551 00 ansa pr7|16 tai.order_queued STATEMENT 1 ON LINE 818 tai.retry_in_progress = "0"b; 003074 aa 004624 2350 04 lda 2452,ic 007720 = 777777767777 003075 aa 7 00020 3551 00 ansa pr7|16 tai.retry_in_progress STATEMENT 1 ON LINE 819 return; 003076 aa 6 00164 6101 00 rtcd pr6|116 STATEMENT 1 ON LINE 843 CHECK_ORDER_MAKE_CALLER_WAIT: result = TAPE_IO_BLOCK; 003077 aa 000001 3360 07 lcq 1,dl 003100 aa 6 00166 3735 20 epp7 pr6|118,* 003101 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 845 count = 0; 003102 aa 7 00002 4501 20 stz pr7|2,* count STATEMENT 1 ON LINE 846 code = 0; 003103 aa 7 00006 4501 20 stz pr7|6,* code STATEMENT 1 ON LINE 847 return; 003104 aa 6 00164 6101 00 rtcd pr6|116 STATEMENT 1 ON LINE 915 end check_order_proc; BEGIN PROCEDURE get_special_status ENTRY TO get_special_status STATEMENT 1 ON LINE 826 get_special_status: proc (status); 003105 aa 6 00172 6501 00 spri4 pr6|122 003106 aa 6 00174 2521 00 spri2 pr6|124 STATEMENT 1 ON LINE 831 call ioi_$get_special_status (tai.ioi_index, status_present, status, code); 003107 aa 6 00116 3521 20 epp2 pr6|78,* tai.ioi_index 003110 aa 6 00644 2521 00 spri2 pr6|420 003111 aa 6 00114 3521 00 epp2 pr6|76 status_present 003112 aa 6 00646 2521 00 spri2 pr6|422 003113 aa 6 00174 3735 20 epp7 pr6|124,* 003114 aa 7 00002 3521 20 epp2 pr7|2,* status 003115 aa 6 00650 2521 00 spri2 pr6|424 003116 aa 6 00166 3715 20 epp5 pr6|118,* 003117 aa 5 00006 3521 20 epp2 pr5|6,* code 003120 aa 6 00652 2521 00 spri2 pr6|426 003121 aa 6 00642 6211 00 eax1 pr6|418 003122 aa 020000 4310 07 fld 8192,dl 003123 aa 6 00044 3701 20 epp4 pr6|36,* 003124 la 4 00014 3521 20 epp2 pr4|12,* ioi_$get_special_status 003125 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 832 if status_present then return; 003126 aa 6 00114 2351 00 lda pr6|76 status_present 003127 aa 400000 3150 03 cana 131072,du 003130 aa 000002 6000 04 tze 2,ic 003132 003131 aa 6 00172 6101 00 rtcd pr6|122 STATEMENT 1 ON LINE 835 if tai.modes.wait then do; 003132 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003133 aa 7 00020 2351 00 lda pr7|16 tai.wait 003134 aa 000004 3150 03 cana 4,du 003135 aa 777742 6000 04 tze -30,ic 003077 STATEMENT 1 ON LINE 836 call block; 003136 aa 004270 6700 04 tsp4 2232,ic 007426 STATEMENT 1 ON LINE 837 call ioi_$get_special_status (tai.ioi_index, status_present, status, code); 003137 aa 6 00116 3521 20 epp2 pr6|78,* tai.ioi_index 003140 aa 6 00644 2521 00 spri2 pr6|420 003141 aa 6 00114 3521 00 epp2 pr6|76 status_present 003142 aa 6 00646 2521 00 spri2 pr6|422 003143 aa 6 00174 3735 20 epp7 pr6|124,* 003144 aa 7 00002 3521 20 epp2 pr7|2,* status 003145 aa 6 00650 2521 00 spri2 pr6|424 003146 aa 6 00166 3715 20 epp5 pr6|118,* 003147 aa 5 00006 3521 20 epp2 pr5|6,* code 003150 aa 6 00652 2521 00 spri2 pr6|426 003151 aa 6 00642 6211 00 eax1 pr6|418 003152 aa 020000 4310 07 fld 8192,dl 003153 aa 6 00044 3701 20 epp4 pr6|36,* 003154 la 4 00014 3521 20 epp2 pr4|12,* ioi_$get_special_status 003155 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 838 end; STATEMENT 1 ON LINE 841 end get_special_status; 003156 aa 6 00172 6101 00 rtcd pr6|122 END PROCEDURE get_special_status BEGIN PROCEDURE repeatable_order_count ENTRY TO repeatable_order_count STATEMENT 1 ON LINE 851 repeatable_order_count: proc () returns (fixed bin); 003157 aa 6 00200 6501 00 spri4 pr6|128 003160 aa 6 00202 2521 00 spri2 pr6|130 STATEMENT 1 ON LINE 854 if (tai.order_idx = 2) | (tai.order_idx = 4) then /* forward or backward space records */ if idcw.count = "00"b3 then return (ORDERS_PER_IDCW_TALLY - bin (io_status_word.rcount) + tai.order_count_done); 003161 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003162 aa 7 00020 2361 00 ldq pr7|16 tai.order_idx 003163 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 003164 aa 6 00654 7561 00 stq pr6|428 tai.order_idx 003165 aa 000002 1160 07 cmpq 2,dl 003166 aa 000003 6000 04 tze 3,ic 003171 003167 aa 000004 1160 07 cmpq 4,dl 003170 aa 000033 6010 04 tnz 27,ic 003223 003171 aa 6 00120 2351 20 lda pr6|80,* idcw.count 003172 aa 000036 7350 00 als 30 003173 aa 6 00654 7551 00 sta pr6|428 idcw.count 003174 aa 000013 6010 04 tnz 11,ic 003207 003175 aa 7 00041 2361 00 ldq pr7|33 tai.order_count_done 003176 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 003177 aa 6 00655 7561 00 stq pr6|429 tai.order_count_done 003200 aa 6 00134 2361 20 ldq pr6|92,* io_status_word.rcount 003201 aa 0 00424 3771 00 anaq pr0|276 = 000000000000 000000000077 003202 aa 000000 5330 00 negl 0 003203 aa 000100 0330 07 adl 64,dl 003204 aa 6 00655 0331 00 adl pr6|429 tai.order_count_done 003205 aa 2 00002 7561 20 stq pr2|2,* 003206 aa 6 00200 6101 00 rtcd pr6|128 STATEMENT 1 ON LINE 858 else return (bin (idcw.count) - bin (io_status_word.rcount) + tai.order_count_done); 003207 aa 7 00041 2361 00 ldq pr7|33 tai.order_count_done 003210 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 003211 aa 6 00655 7561 00 stq pr6|429 tai.order_count_done 003212 aa 6 00134 2361 20 ldq pr6|92,* io_status_word.rcount 003213 aa 0 00424 3771 00 anaq pr0|276 = 000000000000 000000000077 003214 aa 6 00656 7571 00 staq pr6|430 003215 aa 6 00654 2351 00 lda pr6|428 idcw.count 003216 aa 000102 7730 00 lrl 66 003217 aa 6 00656 1771 00 sbaq pr6|430 003220 aa 6 00655 0331 00 adl pr6|429 tai.order_count_done 003221 aa 2 00002 7561 20 stq pr2|2,* 003222 aa 6 00200 6101 00 rtcd pr6|128 STATEMENT 1 ON LINE 860 else return (istat.offset - bin (rel (addr (tai.order_data))) + tai.order_count_done + 1); 003223 aa 7 00041 2361 00 ldq pr7|33 tai.order_count_done 003224 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 003225 aa 6 00655 7561 00 stq pr6|429 tai.order_count_done 003226 aa 7 00050 3715 00 epp5 pr7|40 tai.order_data 003227 aa 5 00000 6351 00 eaa pr5|0 003230 aa 000066 7730 00 lrl 54 003231 aa 000000 5330 00 negl 0 003232 aa 6 00132 3535 20 epp3 pr6|90,* isp 003233 aa 3 00002 0331 00 adl pr3|2 istat.offset 003234 aa 6 00655 0331 00 adl pr6|429 tai.order_count_done 003235 aa 000001 0330 07 adl 1,dl 003236 aa 2 00002 7561 20 stq pr2|2,* 003237 aa 6 00200 6101 00 rtcd pr6|128 STATEMENT 1 ON LINE 862 end repeatable_order_count; END PROCEDURE repeatable_order_count BEGIN PROCEDURE finish_repeatable_order ENTRY TO finish_repeatable_order STATEMENT 1 ON LINE 869 finish_repeatable_order: proc; 003240 aa 6 00206 6501 00 spri4 pr6|134 STATEMENT 1 ON LINE 872 tai.order_count_done = repeatable_order_count (); 003241 aa 004453 3520 04 epp2 2347,ic 007714 = 000002000000 003242 aa 777715 6700 04 tsp4 -51,ic 003157 003243 aa 6 00660 2361 00 ldq pr6|432 003244 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003245 aa 7 00041 5521 14 stbq pr7|33,14 tai.order_count_done STATEMENT 1 ON LINE 873 if tai.order_count_done >= tai.order_count_requested then do; 003246 aa 6 00660 7561 00 stq pr6|432 tai.order_count_done 003247 aa 7 00041 2351 00 lda pr7|33 tai.order_count_requested 003250 aa 000066 7730 00 lrl 54 003251 aa 6 00660 1161 00 cmpq pr6|432 tai.order_count_done 003252 aa 000007 6054 04 tpnz 7,ic 003261 STATEMENT 1 ON LINE 874 count = tai.order_count_done; 003253 aa 6 00660 2361 00 ldq pr6|432 tai.order_count_done 003254 aa 6 00166 3715 20 epp5 pr6|118,* 003255 aa 5 00002 7561 20 stq pr5|2,* count STATEMENT 1 ON LINE 875 result = TAPE_IO_SUCCESS; 003256 aa 000000 2360 07 ldq 0,dl 003257 aa 5 00004 7561 20 stq pr5|4,* result STATEMENT 1 ON LINE 876 goto CHECK_ORDER_GOOD_RETURN; 003260 aa 777607 7100 04 tra -121,ic 003067 STATEMENT 1 ON LINE 877 end; STATEMENT 1 ON LINE 878 else do; STATEMENT 1 ON LINE 879 call refill_order_list; 003261 aa 000021 6700 04 tsp4 17,ic 003302 STATEMENT 1 ON LINE 880 call reconnect; 003262 aa 000071 6700 04 tsp4 57,ic 003353 STATEMENT 1 ON LINE 881 call get_status (tai.modes.wait, CHECK_ORDER_MAKE_CALLER_WAIT); 003263 aa 777614 3520 04 epp2 -116,ic 003077 = 000001336007 003264 aa 6 00662 2521 00 spri2 pr6|434 003265 aa 6 00664 6521 00 spri6 pr6|436 003266 aa 000017 7270 07 lxl7 15,dl 003267 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003270 aa 7 00020 3521 00 epp2 pr7|16 tai.wait 003271 aa 2 00000 5035 17 abd pr2|0,7 003272 aa 6 00670 2521 00 spri2 pr6|440 003273 aa 6 00662 3521 00 epp2 pr6|434 003274 aa 6 00672 2521 00 spri2 pr6|442 003275 aa 6 00666 3521 00 epp2 pr6|438 003276 aa 010000 4310 07 fld 4096,dl 003277 aa 2 00000 7571 00 staq pr2|0 003300 aa 003634 6700 04 tsp4 1948,ic 007134 STATEMENT 1 ON LINE 882 end; STATEMENT 1 ON LINE 884 end finish_repeatable_order; 003301 aa 6 00206 6101 00 rtcd pr6|134 END PROCEDURE finish_repeatable_order BEGIN PROCEDURE refill_order_list ENTRY TO refill_order_list STATEMENT 1 ON LINE 888 refill_order_list: proc; 003302 aa 6 00214 6501 00 spri4 pr6|140 STATEMENT 1 ON LINE 891 if (tai.order_idx = 2) | (tai.order_idx = 4) then /* forward or backward space records */ if tai.order_count_requested - tai.order_count_done >= ORDERS_PER_IDCW_TALLY then idcw.count = "00"b3; 003303 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003304 aa 7 00020 2361 00 ldq pr7|16 tai.order_idx 003305 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 003306 aa 6 00676 7561 00 stq pr6|446 tai.order_idx 003307 aa 000002 1160 07 cmpq 2,dl 003310 aa 000003 6000 04 tze 3,ic 003313 003311 aa 000004 1160 07 cmpq 4,dl 003312 aa 000024 6010 04 tnz 20,ic 003336 003313 aa 7 00041 2361 00 ldq pr7|33 tai.order_count_done 003314 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 003315 aa 6 00676 7561 00 stq pr6|446 tai.order_count_done 003316 aa 7 00041 2351 00 lda pr7|33 tai.order_count_requested 003317 aa 000066 7730 00 lrl 54 003320 aa 6 00676 1761 00 sbq pr6|446 tai.order_count_done 003321 aa 000100 1160 07 cmpq 64,dl 003322 aa 6 00676 7561 00 stq pr6|446 003323 aa 000004 6040 04 tmi 4,ic 003327 003324 aa 004420 2350 04 lda 2320,ic 007744 = 777777777700 003325 aa 6 00120 3551 20 ansa pr6|80,* idcw.count 003326 aa 000024 7100 04 tra 20,ic 003352 STATEMENT 1 ON LINE 895 else idcw.count = bit (bin (tai.order_count_requested - tai.order_count_done, 6), 6); 003327 aa 6 00676 2351 00 lda pr6|446 003330 aa 000002 6050 04 tpl 2,ic 003332 003331 aa 000000 5310 00 neg 0 003332 aa 0 00314 3771 00 anaq pr0|204 = 000000000077 777777777777 003333 aa 6 00120 3715 20 epp5 pr6|80,* idcw.count 003334 aa 5 00000 7511 01 stca pr5|0,01 idcw.count 003335 aa 000015 7100 04 tra 13,ic 003352 STATEMENT 1 ON LINE 896 else /* If there are at least hbound (tai.order_data, 1) orders left to do, leave the list alone. If there are less, set the stop bits in the IDCW. */ if (tai.order_count_requested - tai.order_count_done) < hbound (tai.order_data, 1) then addr (tai.order_data (tai.order_count_requested - tai.order_count_done)) -> idcw.control = "00"b; 003336 aa 7 00041 2361 00 ldq pr7|33 tai.order_count_done 003337 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 003340 aa 6 00676 7561 00 stq pr6|446 tai.order_count_done 003341 aa 7 00041 2351 00 lda pr7|33 tai.order_count_requested 003342 aa 000066 7730 00 lrl 54 003343 aa 6 00676 1761 00 sbq pr6|446 tai.order_count_done 003344 aa 000010 1160 07 cmpq 8,dl 003345 aa 6 00676 7561 00 stq pr6|446 003346 aa 000004 6050 04 tpl 4,ic 003352 003347 aa 004401 2350 04 lda 2305,ic 007750 = 777777747777 003350 aa 7 00047 3715 06 epp5 pr7|39,ql tai.order_data 003351 aa 5 00000 3551 00 ansa pr5|0 idcw.control STATEMENT 1 ON LINE 901 end refill_order_list; 003352 aa 6 00214 6101 00 rtcd pr6|140 END PROCEDURE refill_order_list BEGIN PROCEDURE reconnect ENTRY TO reconnect STATEMENT 1 ON LINE 903 reconnect: proc; 003353 aa 6 00222 6501 00 spri4 pr6|146 STATEMENT 1 ON LINE 906 if (tai.order_idx = 2) | (tai.order_idx = 4) then call connect (bin (rel (addr (tai.order_idcw))), code); 003354 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003355 aa 7 00020 2361 00 ldq pr7|16 tai.order_idx 003356 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 003357 aa 6 00677 7561 00 stq pr6|447 tai.order_idx 003360 aa 000002 1160 07 cmpq 2,dl 003361 aa 000003 6000 04 tze 3,ic 003364 003362 aa 000004 1160 07 cmpq 4,dl 003363 aa 000020 6010 04 tnz 16,ic 003403 003364 aa 7 00046 3715 00 epp5 pr7|38 tai.order_idcw 003365 aa 5 00000 6351 00 eaa pr5|0 003366 aa 000066 7730 00 lrl 54 003367 aa 6 00677 7561 00 stq pr6|447 003370 aa 6 00677 3521 00 epp2 pr6|447 003371 aa 6 00702 2521 00 spri2 pr6|450 003372 aa 6 00166 3535 20 epp3 pr6|118,* 003373 aa 3 00006 3521 20 epp2 pr3|6,* code 003374 aa 6 00704 2521 00 spri2 pr6|452 003375 aa 6 00700 3521 00 epp2 pr6|448 003376 aa 010000 4310 07 fld 4096,dl 003377 aa 2 00000 7571 00 staq pr2|0 003400 aa 6 00710 6515 00 spri5 pr6|456 003401 aa 003056 6700 04 tsp4 1582,ic 006457 003402 aa 000017 7100 04 tra 15,ic 003421 STATEMENT 1 ON LINE 908 else call connect (bin (rel (addr (tai.order_data))), code); 003403 aa 7 00050 3715 00 epp5 pr7|40 tai.order_data 003404 aa 5 00000 6351 00 eaa pr5|0 003405 aa 000066 7730 00 lrl 54 003406 aa 6 00677 7561 00 stq pr6|447 003407 aa 6 00677 3521 00 epp2 pr6|447 003410 aa 6 00702 2521 00 spri2 pr6|450 003411 aa 6 00166 3535 20 epp3 pr6|118,* 003412 aa 3 00006 3521 20 epp2 pr3|6,* code 003413 aa 6 00704 2521 00 spri2 pr6|452 003414 aa 6 00700 3521 00 epp2 pr6|448 003415 aa 010000 4310 07 fld 4096,dl 003416 aa 2 00000 7571 00 staq pr2|0 003417 aa 6 00712 6515 00 spri5 pr6|458 003420 aa 003037 6700 04 tsp4 1567,ic 006457 STATEMENT 1 ON LINE 909 if code ^= 0 then do; 003421 aa 6 00166 3735 20 epp7 pr6|118,* 003422 aa 7 00006 2361 20 ldq pr7|6,* code 003423 aa 000002 6000 04 tze 2,ic 003425 STATEMENT 1 ON LINE 910 goto CHECK_ORDER_PROGRAM_ERROR; 003424 aa 777437 7100 04 tra -225,ic 003063 STATEMENT 1 ON LINE 911 end; STATEMENT 1 ON LINE 913 end reconnect; 003425 aa 6 00222 6101 00 rtcd pr6|146 END PROCEDURE reconnect END PROCEDURE check_order_proc BEGIN PROCEDURE queue_read_proc ENTRY TO queue_read_proc STATEMENT 1 ON LINE 919 queue_read_proc: proc (buffer_ptr, code); 003426 aa 6 00230 6501 00 spri4 pr6|152 003427 aa 6 00232 2521 00 spri2 pr6|154 STATEMENT 1 ON LINE 925 if tai.order_queued | tai.write_queued then do; 003430 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003431 aa 7 00020 2351 00 lda pr7|16 tai.write_queued 003432 aa 004260 3150 04 cana 2224,ic 007712 = 000001200000 003433 aa 000005 6000 04 tze 5,ic 003440 STATEMENT 1 ON LINE 926 code = error_table_$invalid_state; 003434 aa 6 00044 3701 20 epp4 pr6|36,* 003435 la 4 00074 2361 20 ldq pr4|60,* error_table_$invalid_state 003436 aa 2 00004 7561 20 stq pr2|4,* code STATEMENT 1 ON LINE 927 return; 003437 aa 6 00230 6101 00 rtcd pr6|152 STATEMENT 1 ON LINE 928 end; STATEMENT 1 ON LINE 929 if buffer_ptr -> tbi.state ^= READY_STATE then do; 003440 aa 2 00002 3715 20 epp5 pr2|2,* buffer_ptr 003441 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 003442 aa 5 00001 2351 00 lda pr5|1 tbi.state 003443 aa 000022 7350 00 als 18 003444 aa 000077 7730 00 lrl 63 003445 aa 000001 1160 07 cmpq 1,dl 003446 aa 000005 6000 04 tze 5,ic 003453 STATEMENT 1 ON LINE 930 code = error_table_$buffer_invalid_state; 003447 aa 6 00044 3701 20 epp4 pr6|36,* 003450 la 4 00056 2361 20 ldq pr4|46,* error_table_$buffer_invalid_state 003451 aa 2 00004 7561 20 stq pr2|4,* code STATEMENT 1 ON LINE 931 return; 003452 aa 6 00230 6101 00 rtcd pr6|152 STATEMENT 1 ON LINE 932 end; STATEMENT 1 ON LINE 934 buffer_ptr -> tbi.modes = tai.modes; 003453 aa 000021 7270 07 lxl7 17,dl 003454 aa 003 140 060 540 csl (pr,rl),(pr,rl),fill(0),bool(move) 003455 aa 7 00020 00 0017 descb pr7|16,x7 tai.modes 003456 aa 6 00714 00 0017 descb pr6|460,x7 003457 aa 003 140 060 540 csl (pr,rl),(pr,rl),fill(0),bool(move) 003460 aa 6 00714 00 0017 descb pr6|460,x7 003461 aa 5 00002 00 0017 descb pr5|2,x7 tbi.modes STATEMENT 1 ON LINE 935 buffer_ptr -> tbi.state = QUEUED_STATE; 003462 aa 002000 2350 07 lda 1024,dl 003463 aa 5 00001 5511 10 stba pr5|1,10 tbi.state STATEMENT 1 ON LINE 936 idcwp = addr (buffer_ptr -> tbi.idcw_word); 003464 aa 5 00006 3535 00 epp3 pr5|6 tbi.idcw_word 003465 aa 6 00120 2535 00 spri3 pr6|80 idcwp STATEMENT 1 ON LINE 937 idcw.command = buffer_ptr -> tbi.modes.data_code; 003466 aa 5 00002 2351 00 lda pr5|2 tbi.data_code 003467 aa 3 00000 7511 40 stca pr3|0,40 idcw.command STATEMENT 1 ON LINE 938 idcw.control = "00"b; 003470 aa 004260 2350 04 lda 2224,ic 007750 = 777777747777 003471 aa 3 00000 3551 00 ansa pr3|0 idcw.control STATEMENT 1 ON LINE 939 if buffer_ptr -> tbi.modes.recovery then idcw.chan_cmd = "30"b3; 003472 aa 5 00002 2351 00 lda pr5|2 tbi.recovery 003473 aa 000010 3150 03 cana 8,du 003474 aa 000004 6000 04 tze 4,ic 003500 003475 aa 003000 2350 07 lda 1536,dl 003476 aa 3 00000 7511 02 stca pr3|0,02 idcw.chan_cmd 003477 aa 000004 7100 04 tra 4,ic 003503 STATEMENT 1 ON LINE 941 else idcw.chan_cmd = buffer_ptr -> tbi.modes.cif_code; 003500 aa 5 00002 2351 00 lda pr5|2 tbi.cif_code 003501 aa 000022 7710 00 arl 18 003502 aa 3 00000 7511 02 stca pr3|0,02 idcw.chan_cmd STATEMENT 1 ON LINE 942 idcw.count = "00"b3; 003503 aa 004241 2350 04 lda 2209,ic 007744 = 777777777700 003504 aa 3 00000 3551 00 ansa pr3|0 idcw.count STATEMENT 1 ON LINE 943 buffer_ptr -> tbi.data_len = buffer_ptr -> tbi.buffer_len; 003505 aa 5 00003 2361 00 ldq pr5|3 tbi.buffer_len 003506 aa 5 00004 7561 00 stq pr5|4 tbi.data_len STATEMENT 1 ON LINE 944 call fill_dcw_list (buffer_ptr); 003507 aa 2 00002 3521 20 epp2 pr2|2,* buffer_ptr 003510 aa 6 00720 2521 00 spri2 pr6|464 003511 aa 6 00716 3521 00 epp2 pr6|462 003512 aa 004000 4310 07 fld 2048,dl 003513 aa 2 00000 7571 00 staq pr2|0 003514 aa 003044 6700 04 tsp4 1572,ic 006560 STATEMENT 1 ON LINE 945 call remove_from_list (tai.free_list_offset, buffer_ptr); 003515 aa 000022 7270 07 lxl7 18,dl 003516 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003517 aa 7 00013 3521 00 epp2 pr7|11 tai.free_list_offset 003520 aa 2 00000 5035 17 abd pr2|0,7 003521 aa 6 00726 2521 00 spri2 pr6|470 003522 aa 6 00232 3715 20 epp5 pr6|154,* 003523 aa 5 00002 3521 20 epp2 pr5|2,* buffer_ptr 003524 aa 6 00730 2521 00 spri2 pr6|472 003525 aa 6 00724 3521 00 epp2 pr6|468 003526 aa 010000 4310 07 fld 4096,dl 003527 aa 2 00000 7571 00 staq pr2|0 003530 aa 003305 6700 04 tsp4 1733,ic 007035 STATEMENT 1 ON LINE 946 call add_to_list (semi_queued_offset, bin (rel (buffer_ptr))); 003531 aa 6 00232 3735 20 epp7 pr6|154,* 003532 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 003533 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 003534 aa 5 00000 6351 00 eaa pr5|0 buffer_ptr 003535 aa 000066 7730 00 lrl 54 003536 aa 000066 7370 00 lls 54 003537 aa 6 00715 5511 60 stba pr6|461,60 003540 aa 004144 3520 04 epp2 2148,ic 007704 = 000004000000 003541 aa 003134 6700 04 tsp4 1628,ic 006675 STATEMENT 1 ON LINE 948 end queue_read_proc; 003542 aa 6 00230 6101 00 rtcd pr6|152 END PROCEDURE queue_read_proc BEGIN PROCEDURE check_read_proc ENTRY TO check_read_proc STATEMENT 1 ON LINE 950 check_read_proc: proc (buffer_data_ptr, data_len, result, code); 003543 aa 6 00236 6501 00 spri4 pr6|158 003544 aa 6 00240 2521 00 spri2 pr6|160 STATEMENT 1 ON LINE 961 if ^tai.read_queued then do; 003545 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003546 aa 7 00020 2351 00 lda pr7|16 tai.read_queued 003547 aa 400000 3150 07 cana 131072,dl 003550 aa 000012 6010 04 tnz 10,ic 003562 STATEMENT 1 ON LINE 962 buffer_data_ptr = null (); 003551 aa 774401 2370 04 ldaq -1791,ic 000152 = 077777000043 000001000000 003552 aa 2 00002 7571 20 staq pr2|2,* buffer_data_ptr STATEMENT 1 ON LINE 963 data_len = 0; 003553 aa 2 00004 4501 20 stz pr2|4,* data_len STATEMENT 1 ON LINE 964 result = TAPE_IO_USER_PROGRAM_ERROR; 003554 aa 000001 2360 07 ldq 1,dl 003555 aa 2 00006 7561 20 stq pr2|6,* result STATEMENT 1 ON LINE 965 code = error_table_$device_not_active; 003556 aa 6 00044 3701 20 epp4 pr6|36,* 003557 la 4 00070 2361 20 ldq pr4|56,* error_table_$device_not_active 003560 aa 2 00010 7561 20 stq pr2|8,* code STATEMENT 1 ON LINE 966 return; 003561 aa 6 00236 6101 00 rtcd pr6|158 STATEMENT 1 ON LINE 967 end; STATEMENT 1 ON LINE 969 buffer_ptr = ptr (wksp, tai.queue_list_offset); 003562 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 003563 aa 000066 7730 00 lrl 54 003564 aa 7 00000 3515 00 epp1 pr7|0 003565 aa 000000 3114 06 eawp1 0,ql 003566 aa 6 00102 2515 00 spri1 pr6|66 buffer_ptr STATEMENT 1 ON LINE 970 code = 0; 003567 aa 2 00010 4501 20 stz pr2|8,* code STATEMENT 1 ON LINE 972 done = "0"b; 003570 aa 6 00244 4501 00 stz pr6|164 done STATEMENT 1 ON LINE 973 do while (^done); 003571 aa 000000 0110 03 nop 0,du 003572 aa 6 00244 2351 00 lda pr6|164 done 003573 aa 000500 6010 04 tnz 320,ic 004273 STATEMENT 1 ON LINE 974 lost_statuses = -1; 003574 aa 000001 3360 07 lcq 1,dl 003575 aa 6 00107 7561 00 stq pr6|71 lost_statuses STATEMENT 1 ON LINE 975 do while (lost_statuses < 0); 003576 aa 6 00107 2361 00 ldq pr6|71 lost_statuses 003577 aa 000031 6050 04 tpl 25,ic 003630 STATEMENT 1 ON LINE 976 call get_status (buffer_ptr -> tbi.modes.wait, CHECK_READ_MAKE_CALLER_WAIT); 003600 aa 000704 3520 04 epp2 452,ic 004504 = 773446237004 003601 aa 6 00734 2521 00 spri2 pr6|476 003602 aa 6 00736 6521 00 spri6 pr6|478 003603 aa 000017 7270 07 lxl7 15,dl 003604 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 003605 aa 7 00002 3521 00 epp2 pr7|2 tbi.wait 003606 aa 2 00000 5035 17 abd pr2|0,7 003607 aa 6 00742 2521 00 spri2 pr6|482 003610 aa 6 00734 3521 00 epp2 pr6|476 003611 aa 6 00744 2521 00 spri2 pr6|484 003612 aa 6 00740 3521 00 epp2 pr6|480 003613 aa 010000 4310 07 fld 4096,dl 003614 aa 2 00000 7571 00 staq pr2|0 003615 aa 003317 6700 04 tsp4 1743,ic 007134 STATEMENT 1 ON LINE 977 lost_statuses = missing_statuses (buffer_ptr, isp); 003616 aa 004056 3520 04 epp2 2094,ic 007674 = 000006000000 003617 aa 003453 6700 04 tsp4 1835,ic 007272 STATEMENT 1 ON LINE 978 if lost_statuses < 0 then tai.extra_statuses = tai.extra_statuses + 1; 003620 aa 6 00107 2361 00 ldq pr6|71 lost_statuses 003621 aa 777755 6050 04 tpl -19,ic 003576 003622 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003623 aa 7 00030 2351 00 lda pr7|24 tai.extra_statuses 003624 aa 000044 7330 00 lrs 36 003625 aa 000001 0330 07 adl 1,dl 003626 aa 7 00030 7561 00 stq pr7|24 tai.extra_statuses STATEMENT 1 ON LINE 980 end; 003627 aa 777747 7100 04 tra -25,ic 003576 STATEMENT 1 ON LINE 981 done = "1"b; 003630 aa 400000 2350 03 lda 131072,du 003631 aa 6 00244 7551 00 sta pr6|164 done STATEMENT 1 ON LINE 982 if lost_statuses ^= 0 then do; 003632 aa 6 00107 2361 00 ldq pr6|71 lost_statuses 003633 aa 000144 6000 04 tze 100,ic 003777 STATEMENT 1 ON LINE 983 tai.times_status_lost = tai.times_status_lost + 1; 003634 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003635 aa 7 00027 2351 00 lda pr7|23 tai.times_status_lost 003636 aa 000044 7330 00 lrs 36 003637 aa 000001 0330 07 adl 1,dl 003640 aa 7 00027 7561 00 stq pr7|23 tai.times_status_lost STATEMENT 1 ON LINE 984 if buffer_ptr -> tbi.modes.req_len then do; 003641 aa 6 00102 3715 20 epp5 pr6|66,* buffer_ptr 003642 aa 5 00002 2351 00 lda pr5|2 tbi.req_len 003643 aa 000002 3150 03 cana 2,du 003644 aa 000062 6000 04 tze 50,ic 003726 STATEMENT 1 ON LINE 985 addr (buffer_ptr -> tbi.idcw_word) -> idcw.control = "00"b; 003645 aa 004103 2350 04 lda 2115,ic 007750 = 777777747777 003646 aa 5 00006 3551 00 ansa pr5|6 idcw.control STATEMENT 1 ON LINE 987 tai.retry_in_progress = "1"b; 003647 aa 010000 2350 07 lda 4096,dl 003650 aa 7 00020 2551 00 orsa pr7|16 tai.retry_in_progress STATEMENT 1 ON LINE 988 do while (istat.run); 003651 aa 000000 0110 03 nop 0,du 003652 aa 6 00132 2351 20 lda pr6|90,* istat.run 003653 aa 100000 3150 03 cana 32768,du 003654 aa 000011 6000 04 tze 9,ic 003665 STATEMENT 1 ON LINE 989 CHECK_READ_STOP_TAPE: call get_status ("0"b, CHECK_READ_STOP_TAPE); 003655 aa 000000 2350 07 lda 0,dl 003656 aa 6 00750 7551 00 sta pr6|488 003657 aa 777776 3520 04 epp2 -2,ic 003655 = 000000235007 003660 aa 6 00734 2521 00 spri2 pr6|476 003661 aa 6 00736 6521 00 spri6 pr6|478 003662 aa 004004 3520 04 epp2 2052,ic 007666 = 000004000000 003663 aa 003251 6700 04 tsp4 1705,ic 007134 STATEMENT 1 ON LINE 991 end; 003664 aa 777766 7100 04 tra -10,ic 003652 STATEMENT 1 ON LINE 992 lost_statuses = missing_statuses (buffer_ptr, isp); 003665 aa 004007 3520 04 epp2 2055,ic 007674 = 000006000000 003666 aa 003404 6700 04 tsp4 1796,ic 007272 STATEMENT 1 ON LINE 993 tai.order_count_requested = lost_statuses; 003667 aa 6 00107 2361 00 ldq pr6|71 lost_statuses 003670 aa 000066 7370 00 lls 54 003671 aa 6 00116 3735 20 epp7 pr6|78,* wksp 003672 aa 7 00041 5511 60 stba pr7|33,60 tai.order_count_requested STATEMENT 1 ON LINE 995 CHECK_READ_BACKSPACE: call tape_ioi_error_retry$backspace (wksp, buffer_ptr, isp, lost_statuses, code); 003673 aa 6 00116 3521 00 epp2 pr6|78 wksp 003674 aa 6 00754 2521 00 spri2 pr6|492 003675 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 003676 aa 6 00756 2521 00 spri2 pr6|494 003677 aa 6 00132 3521 00 epp2 pr6|90 isp 003700 aa 6 00760 2521 00 spri2 pr6|496 003701 aa 6 00107 3521 00 epp2 pr6|71 lost_statuses 003702 aa 6 00762 2521 00 spri2 pr6|498 003703 aa 6 00240 3735 20 epp7 pr6|160,* 003704 aa 7 00010 3521 20 epp2 pr7|8,* code 003705 aa 6 00764 2521 00 spri2 pr6|500 003706 aa 6 00752 6211 00 eax1 pr6|490 003707 aa 024000 4310 07 fld 10240,dl 003710 aa 6 00044 3701 20 epp4 pr6|36,* 003711 la 4 00026 3521 20 epp2 pr4|22,* tape_ioi_error_retry$backspace 003712 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 997 if code = 0 then done = "0"b; 003713 aa 6 00240 3735 20 epp7 pr6|160,* 003714 aa 7 00010 2361 20 ldq pr7|8,* code 003715 aa 000003 6010 04 tnz 3,ic 003720 003716 aa 6 00244 4501 00 stz pr6|164 done 003717 aa 777653 7100 04 tra -85,ic 003572 STATEMENT 1 ON LINE 999 else do; STATEMENT 1 ON LINE 1000 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 003720 aa 000002 2360 07 ldq 2,dl 003721 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1001 code = error_table_$lost_device_position; 003722 aa 6 00044 3701 20 epp4 pr6|36,* 003723 la 4 00100 2361 20 ldq pr4|64,* error_table_$lost_device_position 003724 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1002 end; STATEMENT 1 ON LINE 1003 end; 003725 aa 777645 7100 04 tra -91,ic 003572 STATEMENT 1 ON LINE 1004 else do; STATEMENT 1 ON LINE 1005 istat.st = "1"b; 003726 aa 400000 2350 03 lda 131072,du 003727 aa 6 00132 2551 20 orsa pr6|90,* istat.st STATEMENT 1 ON LINE 1006 tai.status_entry_idx = mod (tai.status_entry_idx - 1, tai.status_entry_count); 003730 aa 7 00015 2351 00 lda pr7|13 tai.status_entry_count 003731 aa 000022 7350 00 als 18 003732 aa 000077 7730 00 lrl 63 003733 aa 6 00751 7561 00 stq pr6|489 tai.status_entry_count 003734 aa 7 00015 2361 00 ldq pr7|13 tai.status_entry_idx 003735 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 003736 aa 000001 1760 07 sbq 1,dl 003737 aa 6 00751 3521 00 epp2 pr6|489 tai.status_entry_count 003740 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 003741 aa 7 00015 5521 04 stbq pr7|13,04 tai.status_entry_idx STATEMENT 1 ON LINE 1007 isp = ptr (wksp, tai.status_queue_offset + mod (tai.status_entry_idx - 1, tai.status_entry_count) * size (istat)); 003742 aa 7 00015 2351 00 lda pr7|13 tai.status_entry_count 003743 aa 000022 7350 00 als 18 003744 aa 000077 7730 00 lrl 63 003745 aa 6 00751 7561 00 stq pr6|489 tai.status_entry_count 003746 aa 7 00015 2361 00 ldq pr7|13 tai.status_entry_idx 003747 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 003750 aa 000001 1760 07 sbq 1,dl 003751 aa 6 00751 3521 00 epp2 pr6|489 tai.status_entry_count 003752 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 003753 aa 000003 7360 00 qls 3 003754 aa 6 00751 7561 00 stq pr6|489 003755 aa 7 00016 2351 00 lda pr7|14 tai.status_queue_offset 003756 aa 000066 7730 00 lrl 54 003757 aa 6 00751 0761 00 adq pr6|489 003760 aa 7 00000 3521 00 epp2 pr7|0 003761 aa 000000 3120 06 eawp2 0,ql 003762 aa 6 00132 2521 00 spri2 pr6|90 isp STATEMENT 1 ON LINE 1010 istat.level = IO_MARKER_INTERRUPT_LEVEL; 003763 aa 000005 2360 07 ldq 5,dl 003764 aa 2 00001 7561 00 stq pr2|1 istat.level STATEMENT 1 ON LINE 1012 istat.run = "1"b; 003765 aa 100000 2350 03 lda 32768,du 003766 aa 2 00000 2551 00 orsa pr2|0 istat.run STATEMENT 1 ON LINE 1013 istat.er = "0"b; 003767 aa 003676 2350 04 lda 1982,ic 007665 = 577777777777 003770 aa 2 00000 3551 00 ansa pr2|0 istat.er STATEMENT 1 ON LINE 1014 status_class = "OK"; 003771 aa 117113 2350 03 lda 40523,du 003772 aa 6 00113 5511 60 stba pr6|75,60 status_class STATEMENT 1 ON LINE 1015 result = TAPE_IO_SUCCESS; 003773 aa 000000 2360 07 ldq 0,dl 003774 aa 6 00240 3735 20 epp7 pr6|160,* 003775 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1016 end; STATEMENT 1 ON LINE 1017 end; 003776 aa 777574 7100 04 tra -132,ic 003572 STATEMENT 1 ON LINE 1018 else if status_class = "OK" then result = TAPE_IO_SUCCESS; 003777 aa 6 00113 2351 00 lda pr6|75 status_class 004000 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 004001 aa 117113 1150 03 cmpa 40523,du 004002 aa 000005 6010 04 tnz 5,ic 004007 004003 aa 000000 2360 07 ldq 0,dl 004004 aa 6 00240 3735 20 epp7 pr6|160,* 004005 aa 7 00006 7561 20 stq pr7|6,* result 004006 aa 777564 7100 04 tra -140,ic 003572 STATEMENT 1 ON LINE 1020 else if status_class = "UE" then do; 004007 aa 125105 1150 03 cmpa 43589,du 004010 aa 000010 6010 04 tnz 8,ic 004020 STATEMENT 1 ON LINE 1021 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 004011 aa 000002 2360 07 ldq 2,dl 004012 aa 6 00240 3735 20 epp7 pr6|160,* 004013 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1022 code = error_table_$device_parity; 004014 aa 6 00044 3701 20 epp4 pr6|36,* 004015 la 4 00072 2361 20 ldq pr4|58,* error_table_$device_parity 004016 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1023 end; 004017 aa 777553 7100 04 tra -149,ic 003572 STATEMENT 1 ON LINE 1024 else if status_class = "AB" then do; 004020 aa 101102 1150 03 cmpa 33346,du 004021 aa 000010 6010 04 tnz 8,ic 004031 STATEMENT 1 ON LINE 1025 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 004022 aa 000002 2360 07 ldq 2,dl 004023 aa 6 00240 3735 20 epp7 pr6|160,* 004024 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1026 code = error_table_$unexpected_device_status; 004025 aa 6 00044 3701 20 epp4 pr6|36,* 004026 la 4 00104 2361 20 ldq pr4|68,* error_table_$unexpected_device_status 004027 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1027 end; 004030 aa 777542 7100 04 tra -158,ic 003572 STATEMENT 1 ON LINE 1028 else if status_class = "SI" then do; 004031 aa 123111 1150 03 cmpa 42569,du 004032 aa 000010 6010 04 tnz 8,ic 004042 STATEMENT 1 ON LINE 1029 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 004033 aa 000002 2360 07 ldq 2,dl 004034 aa 6 00240 3735 20 epp7 pr6|160,* 004035 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1030 code = error_table_$device_attention; 004036 aa 6 00044 3701 20 epp4 pr6|36,* 004037 la 4 00062 2361 20 ldq pr4|50,* error_table_$device_attention 004040 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1031 end; 004041 aa 777531 7100 04 tra -167,ic 003572 STATEMENT 1 ON LINE 1032 else if status_class = "DN" then do; 004042 aa 104116 1150 03 cmpa 34894,du 004043 aa 000010 6010 04 tnz 8,ic 004053 STATEMENT 1 ON LINE 1033 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 004044 aa 000002 2360 07 ldq 2,dl 004045 aa 6 00240 3735 20 epp7 pr6|160,* 004046 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1034 code = error_table_$bad_density; 004047 aa 6 00044 3701 20 epp4 pr6|36,* 004050 la 4 00052 2361 20 ldq pr4|42,* error_table_$bad_density 004051 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1035 end; 004052 aa 777520 7100 04 tra -176,ic 003572 STATEMENT 1 ON LINE 1036 else if status_class = "EF" then do; 004053 aa 105106 1150 03 cmpa 35398,du 004054 aa 000022 6010 04 tnz 18,ic 004076 STATEMENT 1 ON LINE 1037 if tai.retry_in_progress then do; 004055 aa 6 00116 3735 20 epp7 pr6|78,* wksp 004056 aa 7 00020 2351 00 lda pr7|16 tai.retry_in_progress 004057 aa 010000 3150 07 cana 4096,dl 004060 aa 000012 6000 04 tze 10,ic 004072 STATEMENT 1 ON LINE 1038 tai.order_count_requested = tai.order_count_requested - 1; 004061 aa 7 00041 2351 00 lda pr7|33 tai.order_count_requested 004062 aa 000066 7730 00 lrl 54 004063 aa 000001 1760 07 sbq 1,dl 004064 aa 000066 7370 00 lls 54 004065 aa 7 00041 5511 60 stba pr7|33,60 tai.order_count_requested STATEMENT 1 ON LINE 1039 lost_statuses = tai.order_count_requested; 004066 aa 7 00041 2351 00 lda pr7|33 tai.order_count_requested 004067 aa 000066 7730 00 lrl 54 004070 aa 6 00107 7561 00 stq pr6|71 lost_statuses STATEMENT 1 ON LINE 1040 goto CHECK_READ_BACKSPACE; 004071 aa 777602 7100 04 tra -126,ic 003673 STATEMENT 1 ON LINE 1041 end; STATEMENT 1 ON LINE 1042 else result = TAPE_IO_EOF; 004072 aa 000004 2360 07 ldq 4,dl 004073 aa 6 00240 3715 20 epp5 pr6|160,* 004074 aa 5 00006 7561 20 stq pr5|6,* result STATEMENT 1 ON LINE 1043 end; 004075 aa 777475 7100 04 tra -195,ic 003572 STATEMENT 1 ON LINE 1044 else if status_class = "ET" then do; 004076 aa 105124 1150 03 cmpa 35412,du 004077 aa 000010 6010 04 tnz 8,ic 004107 STATEMENT 1 ON LINE 1045 result = TAPE_IO_EOT; 004100 aa 000005 2360 07 ldq 5,dl 004101 aa 6 00240 3735 20 epp7 pr6|160,* 004102 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1046 code = error_table_$device_end; 004103 aa 6 00044 3701 20 epp4 pr6|36,* 004104 la 4 00066 2361 20 ldq pr4|54,* error_table_$device_end 004105 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1047 end; 004106 aa 777464 7100 04 tra -204,ic 003572 STATEMENT 1 ON LINE 1048 else if status_class = "BT" then do; 004107 aa 102124 1150 03 cmpa 33876,du 004110 aa 000010 6010 04 tnz 8,ic 004120 STATEMENT 1 ON LINE 1049 result = TAPE_IO_EOT; 004111 aa 000005 2360 07 ldq 5,dl 004112 aa 6 00240 3735 20 epp7 pr6|160,* 004113 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1050 code = error_table_$blank_tape; 004114 aa 6 00044 3701 20 epp4 pr6|36,* 004115 la 4 00054 2361 20 ldq pr4|44,* error_table_$blank_tape 004116 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1051 end; 004117 aa 777453 7100 04 tra -213,ic 003572 STATEMENT 1 ON LINE 1052 else if status_class = "BL" then do; 004120 aa 102114 1150 03 cmpa 33868,du 004121 aa 000044 6010 04 tnz 36,ic 004165 STATEMENT 1 ON LINE 1053 if ^tai.suspect_short_record then do; 004122 aa 6 00116 3735 20 epp7 pr6|78,* wksp 004123 aa 7 00020 2351 00 lda pr7|16 tai.suspect_short_record 004124 aa 004000 3150 07 cana 2048,dl 004125 aa 000031 6010 04 tnz 25,ic 004156 STATEMENT 1 ON LINE 1054 tai.suspect_short_record = "1"b; 004126 aa 004000 2350 07 lda 2048,dl 004127 aa 7 00020 2551 00 orsa pr7|16 tai.suspect_short_record STATEMENT 1 ON LINE 1056 semi_queued_offset = bin (rel (buffer_ptr)); 004130 aa 6 00102 6351 20 eaa pr6|66,* buffer_ptr 004131 aa 000066 7730 00 lrl 54 004132 aa 000066 7370 00 lls 54 004133 aa 6 00112 5511 60 stba pr6|74,60 semi_queued_offset STATEMENT 1 ON LINE 1057 tai.queue_list_offset = 0; 004134 aa 000000 2350 07 lda 0,dl 004135 aa 7 00014 5511 60 stba pr7|12,60 tai.queue_list_offset STATEMENT 1 ON LINE 1058 call run ("0"b, code); 004136 aa 000000 2350 07 lda 0,dl 004137 aa 6 00751 7551 00 sta pr6|489 004140 aa 6 00751 3521 00 epp2 pr6|489 004141 aa 6 00742 2521 00 spri2 pr6|482 004142 aa 6 00240 3715 20 epp5 pr6|160,* 004143 aa 5 00010 3521 20 epp2 pr5|8,* code 004144 aa 6 00744 2521 00 spri2 pr6|484 004145 aa 6 00740 3521 00 epp2 pr6|480 004146 aa 010000 4310 07 fld 4096,dl 004147 aa 2 00000 7571 00 staq pr2|0 004150 aa 002035 6700 04 tsp4 1053,ic 006205 STATEMENT 1 ON LINE 1059 if code ^= 0 then goto CHECK_READ_LIST_PROBLEM; 004151 aa 6 00240 3735 20 epp7 pr6|160,* 004152 aa 7 00010 2361 20 ldq pr7|8,* code 004153 aa 000003 6010 04 tnz 3,ic 004156 STATEMENT 1 ON LINE 1061 else done = "0"b; 004154 aa 6 00244 4501 00 stz pr6|164 done STATEMENT 1 ON LINE 1062 end; 004155 aa 777415 7100 04 tra -243,ic 003572 STATEMENT 1 ON LINE 1063 else do; STATEMENT 1 ON LINE 1064 CHECK_READ_LIST_PROBLEM: result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 004156 aa 000002 2360 07 ldq 2,dl 004157 aa 6 00240 3735 20 epp7 pr6|160,* 004160 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1066 code = error_table_$unexpected_device_status; 004161 aa 6 00044 3701 20 epp4 pr6|36,* 004162 la 4 00104 2361 20 ldq pr4|68,* error_table_$unexpected_device_status 004163 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1067 end; STATEMENT 1 ON LINE 1068 end; 004164 aa 777406 7100 04 tra -250,ic 003572 STATEMENT 1 ON LINE 1069 else if (status_class = "DA") | (status_class = "DE") | (status_class = "IP") then do; 004165 aa 104101 1150 03 cmpa 34881,du 004166 aa 000005 6000 04 tze 5,ic 004173 004167 aa 104105 1150 03 cmpa 34885,du 004170 aa 000003 6000 04 tze 3,ic 004173 004171 aa 111120 1150 03 cmpa 37456,du 004172 aa 000053 6010 04 tnz 43,ic 004245 STATEMENT 1 ON LINE 1071 if buffer_ptr -> tbi.recovery then do; 004173 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 004174 aa 7 00002 2351 00 lda pr7|2 tbi.recovery 004175 aa 000010 3150 03 cana 8,du 004176 aa 000040 6000 04 tze 32,ic 004236 STATEMENT 1 ON LINE 1072 tai.retry_in_progress = "1"b; 004177 aa 010000 2350 07 lda 4096,dl 004200 aa 6 00116 3715 20 epp5 pr6|78,* wksp 004201 aa 5 00020 2551 00 orsa pr5|16 tai.retry_in_progress STATEMENT 1 ON LINE 1073 call tape_ioi_error_retry (wksp, buffer_ptr, isp, code); 004202 aa 6 00116 3521 00 epp2 pr6|78 wksp 004203 aa 6 00754 2521 00 spri2 pr6|492 004204 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 004205 aa 6 00756 2521 00 spri2 pr6|494 004206 aa 6 00132 3521 00 epp2 pr6|90 isp 004207 aa 6 00760 2521 00 spri2 pr6|496 004210 aa 6 00240 3535 20 epp3 pr6|160,* 004211 aa 3 00010 3521 20 epp2 pr3|8,* code 004212 aa 6 00762 2521 00 spri2 pr6|498 004213 aa 6 00752 6211 00 eax1 pr6|490 004214 aa 020000 4310 07 fld 8192,dl 004215 aa 6 00044 3701 20 epp4 pr6|36,* 004216 la 4 00024 3521 20 epp2 pr4|20,* tape_ioi_error_retry 004217 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1074 if code = 0 then done = "0"b; 004220 aa 6 00240 3735 20 epp7 pr6|160,* 004221 aa 7 00010 2361 20 ldq pr7|8,* code 004222 aa 000003 6010 04 tnz 3,ic 004225 004223 aa 6 00244 4501 00 stz pr6|164 done 004224 aa 777346 7100 04 tra -282,ic 003572 STATEMENT 1 ON LINE 1076 else do; STATEMENT 1 ON LINE 1077 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 004225 aa 000002 2360 07 ldq 2,dl 004226 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1078 if code ^= error_table_$bad_density then code = error_table_$device_parity; 004227 aa 7 00010 2361 20 ldq pr7|8,* code 004230 aa 6 00044 3701 20 epp4 pr6|36,* 004231 la 4 00052 1161 20 cmpq pr4|42,* error_table_$bad_density 004232 aa 777340 6000 04 tze -288,ic 003572 004233 la 4 00072 2361 20 ldq pr4|58,* error_table_$device_parity 004234 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1080 end; STATEMENT 1 ON LINE 1081 end; 004235 aa 777335 7100 04 tra -291,ic 003572 STATEMENT 1 ON LINE 1082 else do; STATEMENT 1 ON LINE 1083 result = TAPE_IO_RECOVERABLE_IO_ERROR; 004236 aa 000003 2360 07 ldq 3,dl 004237 aa 6 00240 3715 20 epp5 pr6|160,* 004240 aa 5 00006 7561 20 stq pr5|6,* result STATEMENT 1 ON LINE 1084 code = error_table_$device_parity; 004241 aa 6 00044 3701 20 epp4 pr6|36,* 004242 la 4 00072 2361 20 ldq pr4|58,* error_table_$device_parity 004243 aa 5 00010 7561 20 stq pr5|8,* code STATEMENT 1 ON LINE 1085 end; STATEMENT 1 ON LINE 1086 end; 004244 aa 777326 7100 04 tra -298,ic 003572 STATEMENT 1 ON LINE 1087 else if status_class = "CA" then do; 004245 aa 103101 1150 03 cmpa 34369,du 004246 aa 777324 6010 04 tnz -300,ic 003572 STATEMENT 1 ON LINE 1088 code = error_table_$device_code_alert; 004247 aa 6 00044 3701 20 epp4 pr6|36,* 004250 la 4 00064 2361 20 ldq pr4|52,* error_table_$device_code_alert 004251 aa 6 00240 3735 20 epp7 pr6|160,* 004252 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1089 if buffer_ptr -> tbi.modes.data_code = "05"b3 | buffer_ptr -> tbi.modes.data_code = "04"b3 | buffer_ptr -> tbi.modes.data_code = "03"b3 then result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 004253 aa 6 00102 3715 20 epp5 pr6|66,* buffer_ptr 004254 aa 5 00002 2351 00 lda pr5|2 tbi.data_code 004255 aa 0 00014 3771 00 anaq pr0|12 = 770000000000 000000000000 004256 aa 6 00751 7551 00 sta pr6|489 tbi.data_code 004257 aa 050000 1150 03 cmpa 20480,du 004260 aa 000005 6000 04 tze 5,ic 004265 004261 aa 040000 1150 03 cmpa 16384,du 004262 aa 000003 6000 04 tze 3,ic 004265 004263 aa 030000 1150 03 cmpa 12288,du 004264 aa 000004 6010 04 tnz 4,ic 004270 004265 aa 000002 2360 07 ldq 2,dl 004266 aa 7 00006 7561 20 stq pr7|6,* result 004267 aa 777303 7100 04 tra -317,ic 003572 STATEMENT 1 ON LINE 1092 else result = TAPE_IO_CODE_ALERT; 004270 aa 000010 2360 07 ldq 8,dl 004271 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1093 end; STATEMENT 1 ON LINE 1094 end; 004272 aa 777300 7100 04 tra -320,ic 003572 STATEMENT 1 ON LINE 1096 call remove_from_list (tai.queue_list_offset, buffer_ptr); 004273 aa 6 00116 3735 20 epp7 pr6|78,* wksp 004274 aa 7 00014 3521 00 epp2 pr7|12 tai.queue_list_offset 004275 aa 6 00742 2521 00 spri2 pr6|482 004276 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 004277 aa 6 00744 2521 00 spri2 pr6|484 004300 aa 6 00740 3521 00 epp2 pr6|480 004301 aa 010000 4310 07 fld 4096,dl 004302 aa 2 00000 7571 00 staq pr2|0 004303 aa 002532 6700 04 tsp4 1370,ic 007035 STATEMENT 1 ON LINE 1097 if result = TAPE_IO_SUCCESS then do; 004304 aa 6 00240 3735 20 epp7 pr6|160,* 004305 aa 7 00006 2361 20 ldq pr7|6,* result 004306 aa 000030 6010 04 tnz 24,ic 004336 STATEMENT 1 ON LINE 1098 recovery_strategy = bin (substr (addr (buffer_ptr -> tbi.idcw_word) -> idcw.chan_cmd, 4, 3)); 004307 aa 6 00102 3715 20 epp5 pr6|66,* buffer_ptr 004310 aa 5 00006 2351 00 lda pr5|6 idcw.chan_cmd 004311 aa 000033 7350 00 als 27 004312 aa 000105 7730 00 lrl 69 004313 aa 6 00111 7561 00 stq pr6|73 recovery_strategy STATEMENT 1 ON LINE 1099 if recovery_strategy ^= 0 then tai.recovery_succeeded (recovery_strategy) = tai.recovery_succeeded (recovery_strategy) + 1; 004314 aa 6 00111 2361 00 ldq pr6|73 recovery_strategy 004315 aa 000007 6000 04 tze 7,ic 004324 004316 aa 6 00116 3535 20 epp3 pr6|78,* wksp 004317 aa 3 00031 2351 06 lda pr3|25,ql tai.recovery_succeeded 004320 aa 000044 7330 00 lrs 36 004321 aa 000001 0330 07 adl 1,dl 004322 aa 6 00111 7271 00 lxl7 pr6|73 recovery_strategy 004323 aa 3 00031 7561 17 stq pr3|25,7 tai.recovery_succeeded STATEMENT 1 ON LINE 1101 tai.at_bot = "0"b; 004324 aa 003340 2350 04 lda 1760,ic 007664 = 777777775777 004325 aa 6 00116 3535 20 epp3 pr6|78,* wksp 004326 aa 3 00020 3551 00 ansa pr3|16 tai.at_bot STATEMENT 1 ON LINE 1102 call keep_it_going (isp, xcode); 004327 aa 003327 3520 04 epp2 1751,ic 007656 = 000004000000 004330 aa 002024 6700 04 tsp4 1044,ic 006354 STATEMENT 1 ON LINE 1103 if xcode ^= 0 then code = xcode; 004331 aa 6 00245 2361 00 ldq pr6|165 xcode 004332 aa 000066 6000 04 tze 54,ic 004420 004333 aa 6 00240 3735 20 epp7 pr6|160,* 004334 aa 7 00010 7561 20 stq pr7|8,* code STATEMENT 1 ON LINE 1105 end; 004335 aa 000063 7100 04 tra 51,ic 004420 STATEMENT 1 ON LINE 1106 else do; STATEMENT 1 ON LINE 1107 begin; BEGIN BLOCK 7 STATEMENT 1 ON LINE 1111 semi_queued_offset = tai.queue_list_offset; 004336 aa 6 00116 3735 20 epp7 pr6|78,* wksp 004337 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 004340 aa 6 00112 5511 60 stba pr6|74,60 semi_queued_offset STATEMENT 1 ON LINE 1112 tai.queue_list_offset = 0; 004341 aa 000000 2350 07 lda 0,dl 004342 aa 7 00014 5511 60 stba pr7|12,60 tai.queue_list_offset STATEMENT 1 ON LINE 1113 do buffer_ptr = ptr (wksp, semi_queued_offset) repeat ptr (wksp, buffer_ptr -> tbi.next_state_offset) while (rel (buffer_ptr) ^= ""b); 004343 aa 6 00112 2351 00 lda pr6|74 semi_queued_offset 004344 aa 000066 7730 00 lrl 54 004345 aa 7 00000 3521 00 epp2 pr7|0 004346 aa 000000 3120 06 eawp2 0,ql 004347 aa 6 00246 2521 00 spri2 pr6|166 buffer_ptr 004350 aa 6 00246 6351 20 eaa pr6|166,* buffer_ptr 004351 aa 000021 6000 04 tze 17,ic 004372 STATEMENT 1 ON LINE 1115 buffer_ptr -> tbi.state = READY_STATE; 004352 aa 001000 2350 07 lda 512,dl 004353 aa 6 00246 3735 20 epp7 pr6|166,* buffer_ptr 004354 aa 7 00001 5511 10 stba pr7|1,10 tbi.state STATEMENT 1 ON LINE 1116 tai.total_reads = tai.total_reads - 1; 004355 aa 6 00116 3715 20 epp5 pr6|78,* wksp 004356 aa 5 00021 3361 00 lcq pr5|17 tai.total_reads 004357 aa 000044 7770 00 llr 36 004360 aa 000044 7330 00 lrs 36 004361 aa 000001 0330 07 adl 1,dl 004362 aa 000000 5330 00 negl 0 004363 aa 5 00021 7561 00 stq pr5|17 tai.total_reads STATEMENT 1 ON LINE 1117 end; 004364 aa 7 00001 2351 00 lda pr7|1 tbi.next_state_offset 004365 aa 000066 7730 00 lrl 54 004366 aa 5 00000 3521 00 epp2 pr5|0 004367 aa 000000 3120 06 eawp2 0,ql 004370 aa 6 00246 2521 00 spri2 pr6|166 buffer_ptr 004371 aa 777757 7100 04 tra -17,ic 004350 STATEMENT 1 ON LINE 1118 end; END BLOCK 7 STATEMENT 1 ON LINE 1119 call add_to_list (tai.free_list_offset, semi_queued_offset); 004372 aa 000022 7270 07 lxl7 18,dl 004373 aa 6 00116 3735 20 epp7 pr6|78,* wksp 004374 aa 7 00013 3521 00 epp2 pr7|11 tai.free_list_offset 004375 aa 2 00000 5035 17 abd pr2|0,7 004376 aa 6 00742 2521 00 spri2 pr6|482 004377 aa 6 00112 3521 00 epp2 pr6|74 semi_queued_offset 004400 aa 6 00744 2521 00 spri2 pr6|484 004401 aa 6 00740 3521 00 epp2 pr6|480 004402 aa 010000 4310 07 fld 4096,dl 004403 aa 2 00000 7571 00 staq pr2|0 004404 aa 002271 6700 04 tsp4 1209,ic 006675 STATEMENT 1 ON LINE 1120 if result ^= TAPE_IO_EOF & result ^= TAPE_IO_EOT then tai.read_errors = tai.read_errors + 1; 004405 aa 6 00240 3735 20 epp7 pr6|160,* 004406 aa 7 00006 2361 20 ldq pr7|6,* result 004407 aa 000004 1160 07 cmpq 4,dl 004410 aa 000010 6000 04 tze 8,ic 004420 004411 aa 000005 1160 07 cmpq 5,dl 004412 aa 000006 6000 04 tze 6,ic 004420 004413 aa 6 00116 3715 20 epp5 pr6|78,* wksp 004414 aa 5 00022 2351 00 lda pr5|18 tai.read_errors 004415 aa 000044 7330 00 lrs 36 004416 aa 000001 0330 07 adl 1,dl 004417 aa 5 00022 7561 00 stq pr5|18 tai.read_errors STATEMENT 1 ON LINE 1122 end; STATEMENT 1 ON LINE 1124 buffer_ptr -> tbi.state = READY_STATE; 004420 aa 001000 2350 07 lda 512,dl 004421 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 004422 aa 7 00001 5511 10 stba pr7|1,10 tbi.state STATEMENT 1 ON LINE 1125 call add_to_list (tai.free_list_offset, bin (rel (buffer_ptr))); 004423 aa 7 00000 6351 00 eaa pr7|0 buffer_ptr 004424 aa 000066 7730 00 lrl 54 004425 aa 000066 7370 00 lls 54 004426 aa 6 00751 5511 60 stba pr6|489,60 004427 aa 000022 7270 07 lxl7 18,dl 004430 aa 6 00116 3715 20 epp5 pr6|78,* wksp 004431 aa 5 00013 3521 00 epp2 pr5|11 tai.free_list_offset 004432 aa 2 00000 5035 17 abd pr2|0,7 004433 aa 6 00742 2521 00 spri2 pr6|482 004434 aa 6 00751 3521 00 epp2 pr6|489 004435 aa 6 00744 2521 00 spri2 pr6|484 004436 aa 6 00740 3521 00 epp2 pr6|480 004437 aa 010000 4310 07 fld 4096,dl 004440 aa 2 00000 7571 00 staq pr2|0 004441 aa 002234 6700 04 tsp4 1180,ic 006675 STATEMENT 1 ON LINE 1127 if buffer_ptr -> tbi.modes.req_len then data_len = get_io_byte_count (buffer_ptr, isp); 004442 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 004443 aa 7 00002 2351 00 lda pr7|2 tbi.req_len 004444 aa 000002 3150 03 cana 2,du 004445 aa 000014 6000 04 tze 12,ic 004461 004446 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 004447 aa 6 00754 2521 00 spri2 pr6|492 004450 aa 6 00132 3521 00 epp2 pr6|90 isp 004451 aa 6 00756 2521 00 spri2 pr6|494 004452 aa 6 00240 3715 20 epp5 pr6|160,* 004453 aa 5 00004 3521 20 epp2 pr5|4,* data_len 004454 aa 6 00760 2521 00 spri2 pr6|496 004455 aa 6 00752 3521 00 epp2 pr6|490 004456 aa 014000 4310 07 fld 6144,dl 004457 aa 2 00000 7571 00 staq pr2|0 004460 aa 001127 6700 04 tsp4 599,ic 005607 STATEMENT 1 ON LINE 1129 buffer_data_ptr = ptr (wksp, buffer_ptr -> tbi.data_offset); 004461 aa 6 00102 2351 20 lda pr6|66,* tbi.data_offset 004462 aa 000066 7730 00 lrl 54 004463 aa 6 00116 3521 20 epp2 pr6|78,* wksp 004464 aa 000000 3120 06 eawp2 0,ql 004465 aa 6 00240 3735 20 epp7 pr6|160,* 004466 aa 7 00002 2521 20 spri2 pr7|2,* buffer_data_ptr STATEMENT 1 ON LINE 1130 tai.read_queued = (tai.queue_list_offset ^= 0); 004467 aa 6 00116 3715 20 epp5 pr6|78,* wksp 004470 aa 5 00014 2351 00 lda pr5|12 tai.queue_list_offset 004471 aa 000066 7730 00 lrl 54 004472 aa 0 00515 7001 00 tsx0 pr0|333 r_ne_as 004473 aa 000022 7710 00 arl 18 004474 aa 5 00020 6751 00 era pr5|16 tai.read_queued 004475 aa 400000 3750 07 ana 131072,dl 004476 aa 5 00020 6551 00 ersa pr5|16 tai.read_queued STATEMENT 1 ON LINE 1131 tai.suspect_short_record = "0"b; 004477 aa 003155 2350 04 lda 1645,ic 007654 = 777777773777 004500 aa 5 00020 3551 00 ansa pr5|16 tai.suspect_short_record STATEMENT 1 ON LINE 1132 tai.retry_in_progress = "0"b; 004501 aa 003217 2350 04 lda 1679,ic 007720 = 777777767777 004502 aa 5 00020 3551 00 ansa pr5|16 tai.retry_in_progress STATEMENT 1 ON LINE 1133 return; 004503 aa 6 00236 6101 00 rtcd pr6|158 STATEMENT 1 ON LINE 1135 CHECK_READ_MAKE_CALLER_WAIT: buffer_data_ptr = null (); 004504 aa 773446 2370 04 ldaq -2266,ic 000152 = 077777000043 000001000000 004505 aa 6 00240 3735 20 epp7 pr6|160,* 004506 aa 7 00002 7571 20 staq pr7|2,* buffer_data_ptr STATEMENT 1 ON LINE 1137 data_len = 0; 004507 aa 7 00004 4501 20 stz pr7|4,* data_len STATEMENT 1 ON LINE 1138 result = TAPE_IO_BLOCK; 004510 aa 000001 3360 07 lcq 1,dl 004511 aa 7 00006 7561 20 stq pr7|6,* result STATEMENT 1 ON LINE 1139 code = 0; 004512 aa 7 00010 4501 20 stz pr7|8,* code STATEMENT 1 ON LINE 1140 return; 004513 aa 6 00236 6101 00 rtcd pr6|158 STATEMENT 1 ON LINE 1142 end check_read_proc; END PROCEDURE check_read_proc BEGIN PROCEDURE queue_write_proc ENTRY TO queue_write_proc STATEMENT 1 ON LINE 1144 queue_write_proc: proc (buffer_ptr, data_len, code); 004514 aa 6 00250 6501 00 spri4 pr6|168 004515 aa 6 00252 2521 00 spri2 pr6|170 STATEMENT 1 ON LINE 1155 if tai.order_queued | tai.read_queued then do; 004516 aa 6 00116 3735 20 epp7 pr6|78,* wksp 004517 aa 7 00020 2351 00 lda pr7|16 tai.read_queued 004520 aa 003133 3150 04 cana 1627,ic 007653 = 000001400000 004521 aa 000005 6000 04 tze 5,ic 004526 STATEMENT 1 ON LINE 1156 code = error_table_$invalid_state; 004522 aa 6 00044 3701 20 epp4 pr6|36,* 004523 la 4 00074 2361 20 ldq pr4|60,* error_table_$invalid_state 004524 aa 2 00006 7561 20 stq pr2|6,* code STATEMENT 1 ON LINE 1157 return; 004525 aa 6 00250 6101 00 rtcd pr6|168 STATEMENT 1 ON LINE 1158 end; STATEMENT 1 ON LINE 1160 if (buffer_ptr -> tbi.state ^= READY_STATE) & (buffer_ptr -> tbi.state ^= SUSPENDED_STATE) then do; 004526 aa 2 00002 3715 20 epp5 pr2|2,* buffer_ptr 004527 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 004530 aa 5 00001 2351 00 lda pr5|1 tbi.state 004531 aa 000022 7350 00 als 18 004532 aa 000077 7730 00 lrl 63 004533 aa 6 00766 7561 00 stq pr6|502 tbi.state 004534 aa 000001 1160 07 cmpq 1,dl 004535 aa 000007 6000 04 tze 7,ic 004544 004536 aa 000003 1160 07 cmpq 3,dl 004537 aa 000005 6000 04 tze 5,ic 004544 STATEMENT 1 ON LINE 1161 code = error_table_$buffer_invalid_state; 004540 aa 6 00044 3701 20 epp4 pr6|36,* 004541 la 4 00056 2361 20 ldq pr4|46,* error_table_$buffer_invalid_state 004542 aa 2 00006 7561 20 stq pr2|6,* code STATEMENT 1 ON LINE 1162 return; 004543 aa 6 00250 6101 00 rtcd pr6|168 STATEMENT 1 ON LINE 1163 end; STATEMENT 1 ON LINE 1165 buffer_ptr -> tbi.modes = tai.modes; 004544 aa 000021 7270 07 lxl7 17,dl 004545 aa 003 140 060 540 csl (pr,rl),(pr,rl),fill(0),bool(move) 004546 aa 7 00020 00 0017 descb pr7|16,x7 tai.modes 004547 aa 6 00766 00 0017 descb pr6|502,x7 004550 aa 003 140 060 540 csl (pr,rl),(pr,rl),fill(0),bool(move) 004551 aa 6 00766 00 0017 descb pr6|502,x7 004552 aa 5 00002 00 0017 descb pr5|2,x7 tbi.modes STATEMENT 1 ON LINE 1166 idcwp = addr (buffer_ptr -> tbi.idcw_word); 004553 aa 5 00006 3535 00 epp3 pr5|6 tbi.idcw_word 004554 aa 6 00120 2535 00 spri3 pr6|80 idcwp STATEMENT 1 ON LINE 1167 idcw.command = (buffer_ptr -> tbi.modes.data_code) | "10"b3; 004555 aa 5 00002 2351 00 lda pr5|2 tbi.data_code 004556 aa 0 00014 3771 00 anaq pr0|12 = 770000000000 000000000000 004557 aa 100000 2750 03 ora 32768,du 004560 aa 3 00000 7511 40 stca pr3|0,40 idcw.command STATEMENT 1 ON LINE 1169 idcw.control = "00"b; 004561 aa 003167 2350 04 lda 1655,ic 007750 = 777777747777 004562 aa 3 00000 3551 00 ansa pr3|0 idcw.control STATEMENT 1 ON LINE 1170 idcw.chan_cmd = "00"b3; 004563 aa 003067 2350 04 lda 1591,ic 007652 = 777777770077 004564 aa 3 00000 3551 00 ansa pr3|0 idcw.chan_cmd STATEMENT 1 ON LINE 1174 if buffer_ptr -> tbi.modes.length then do; 004565 aa 5 00002 2351 00 lda pr5|2 tbi.length 004566 aa 000020 3150 03 cana 16,du 004567 aa 000067 6000 04 tze 55,ic 004656 STATEMENT 1 ON LINE 1175 idcw.count = "00"b3; 004570 aa 003154 2350 04 lda 1644,ic 007744 = 777777777700 004571 aa 3 00000 3551 00 ansa pr3|0 idcw.count STATEMENT 1 ON LINE 1176 if ascii_mode (buffer_ptr) then do; 004572 aa 2 00002 3521 20 epp2 pr2|2,* buffer_ptr 004573 aa 6 00772 2521 00 spri2 pr6|506 004574 aa 6 00766 3521 00 epp2 pr6|502 004575 aa 6 00774 2521 00 spri2 pr6|508 004576 aa 6 00770 3521 00 epp2 pr6|504 004577 aa 010000 4310 07 fld 4096,dl 004600 aa 2 00000 7571 00 staq pr2|0 004601 aa 001737 6700 04 tsp4 991,ic 006540 004602 aa 6 00766 2351 00 lda pr6|502 004603 aa 400000 3150 03 cana 131072,du 004604 aa 000032 6000 04 tze 26,ic 004636 STATEMENT 1 ON LINE 1178 if buffer_ptr -> tbi.modes.data_code = "25"b3 then char_position_overlay.tcp = mod (data_len, CHARS_PER_WORD); 004605 aa 6 00252 3735 20 epp7 pr6|170,* 004606 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 004607 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 004610 aa 5 00002 2351 00 lda pr5|2 tbi.data_code 004611 aa 0 00014 3771 00 anaq pr0|12 = 770000000000 000000000000 004612 aa 250000 1150 03 cmpa 86016,du 004613 aa 000011 6010 04 tnz 9,ic 004624 004614 aa 7 00004 2361 20 ldq pr7|4,* data_len 004615 aa 003172 3520 04 epp2 1658,ic 010007 = 000000000006 004616 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 004617 aa 000047 7370 00 lls 39 004620 aa 6 00120 6751 20 era pr6|80,* char_position_overlay.tcp 004621 aa 000070 3750 07 ana 56,dl 004622 aa 6 00120 6551 20 ersa pr6|80,* char_position_overlay.tcp 004623 aa 000010 7100 04 tra 8,ic 004633 STATEMENT 1 ON LINE 1180 else char_position_overlay.tcp = mod (data_len, BYTES_PER_WORD); 004624 aa 7 00004 2361 20 ldq pr7|4,* data_len 004625 aa 003163 3520 04 epp2 1651,ic 010010 = 000000000004 004626 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 004627 aa 000047 7370 00 lls 39 004630 aa 6 00120 6751 20 era pr6|80,* char_position_overlay.tcp 004631 aa 000070 3750 07 ana 56,dl 004632 aa 6 00120 6551 20 ersa pr6|80,* char_position_overlay.tcp STATEMENT 1 ON LINE 1181 buffer_ptr -> tbi.data_len = data_len; 004633 aa 7 00004 2361 20 ldq pr7|4,* data_len 004634 aa 5 00004 7561 00 stq pr5|4 tbi.data_len STATEMENT 1 ON LINE 1182 end; 004635 aa 000037 7100 04 tra 31,ic 004674 STATEMENT 1 ON LINE 1183 else do; STATEMENT 1 ON LINE 1184 if mod (data_len, BYTES_PER_WORD) ^= 0 then buffer_ptr -> tbi.data_len = data_len + 1; 004636 aa 6 00252 3735 20 epp7 pr6|170,* 004637 aa 7 00004 2361 20 ldq pr7|4,* data_len 004640 aa 003150 3520 04 epp2 1640,ic 010010 = 000000000004 004641 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 004642 aa 000007 6000 04 tze 7,ic 004651 004643 aa 7 00004 2361 20 ldq pr7|4,* data_len 004644 aa 000001 0760 07 adq 1,dl 004645 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 004646 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 004647 aa 5 00004 7561 00 stq pr5|4 tbi.data_len 004650 aa 000024 7100 04 tra 20,ic 004674 STATEMENT 1 ON LINE 1186 else buffer_ptr -> tbi.data_len = data_len; 004651 aa 7 00004 2361 20 ldq pr7|4,* data_len 004652 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 004653 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 004654 aa 5 00004 7561 00 stq pr5|4 tbi.data_len STATEMENT 1 ON LINE 1187 end; STATEMENT 1 ON LINE 1188 end; 004655 aa 000017 7100 04 tra 15,ic 004674 STATEMENT 1 ON LINE 1189 else do; STATEMENT 1 ON LINE 1190 if mod (data_len, BYTES_PER_WORD) ^= 0 then do; 004656 aa 2 00004 2361 20 ldq pr2|4,* data_len 004657 aa 003131 3520 04 epp2 1625,ic 010010 = 000000000004 004660 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 004661 aa 000006 6000 04 tze 6,ic 004667 STATEMENT 1 ON LINE 1191 code = error_table_$invalid_tape_record_length; 004662 aa 6 00044 3701 20 epp4 pr6|36,* 004663 la 4 00076 2361 20 ldq pr4|62,* error_table_$invalid_tape_record_length 004664 aa 6 00252 3515 20 epp1 pr6|170,* 004665 aa 1 00006 7561 20 stq pr1|6,* code STATEMENT 1 ON LINE 1192 return; 004666 aa 6 00250 6101 00 rtcd pr6|168 STATEMENT 1 ON LINE 1193 end; STATEMENT 1 ON LINE 1194 else do; STATEMENT 1 ON LINE 1195 buffer_ptr -> tbi.data_len = data_len; 004667 aa 6 00252 3515 20 epp1 pr6|170,* 004670 aa 1 00004 2361 20 ldq pr1|4,* data_len 004671 aa 5 00004 7561 00 stq pr5|4 tbi.data_len STATEMENT 1 ON LINE 1196 idcw.count = "00"b3; 004672 aa 003052 2350 04 lda 1578,ic 007744 = 777777777700 004673 aa 3 00000 3551 00 ansa pr3|0 idcw.count STATEMENT 1 ON LINE 1197 end; STATEMENT 1 ON LINE 1198 end; STATEMENT 1 ON LINE 1200 if buffer_ptr -> tbi.state = READY_STATE then call remove_from_list (tai.free_list_offset, buffer_ptr); 004674 aa 6 00252 3735 20 epp7 pr6|170,* 004675 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 004676 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 004677 aa 5 00001 2351 00 lda pr5|1 tbi.state 004700 aa 000022 7350 00 als 18 004701 aa 000077 7730 00 lrl 63 004702 aa 000001 1160 07 cmpq 1,dl 004703 aa 000015 6010 04 tnz 13,ic 004720 004704 aa 000022 7270 07 lxl7 18,dl 004705 aa 6 00116 3535 20 epp3 pr6|78,* wksp 004706 aa 3 00013 3521 00 epp2 pr3|11 tai.free_list_offset 004707 aa 2 00000 5035 17 abd pr2|0,7 004710 aa 6 00772 2521 00 spri2 pr6|506 004711 aa 7 00002 3521 20 epp2 pr7|2,* buffer_ptr 004712 aa 6 00774 2521 00 spri2 pr6|508 004713 aa 6 00770 3521 00 epp2 pr6|504 004714 aa 010000 4310 07 fld 4096,dl 004715 aa 2 00000 7571 00 staq pr2|0 004716 aa 002117 6700 04 tsp4 1103,ic 007035 004717 aa 000014 7100 04 tra 12,ic 004733 STATEMENT 1 ON LINE 1202 else call remove_from_list (tai.susp_list_offset, buffer_ptr); 004720 aa 000022 7270 07 lxl7 18,dl 004721 aa 6 00116 3535 20 epp3 pr6|78,* wksp 004722 aa 3 00014 3521 00 epp2 pr3|12 tai.susp_list_offset 004723 aa 2 00000 5035 17 abd pr2|0,7 004724 aa 6 00772 2521 00 spri2 pr6|506 004725 aa 7 00002 3521 20 epp2 pr7|2,* buffer_ptr 004726 aa 6 00774 2521 00 spri2 pr6|508 004727 aa 6 00770 3521 00 epp2 pr6|504 004730 aa 010000 4310 07 fld 4096,dl 004731 aa 2 00000 7571 00 staq pr2|0 004732 aa 002103 6700 04 tsp4 1091,ic 007035 STATEMENT 1 ON LINE 1203 call fill_dcw_list (buffer_ptr); 004733 aa 6 00252 3735 20 epp7 pr6|170,* 004734 aa 7 00002 3521 20 epp2 pr7|2,* buffer_ptr 004735 aa 6 00772 2521 00 spri2 pr6|506 004736 aa 6 00770 3521 00 epp2 pr6|504 004737 aa 004000 4310 07 fld 2048,dl 004740 aa 2 00000 7571 00 staq pr2|0 004741 aa 001617 6700 04 tsp4 911,ic 006560 STATEMENT 1 ON LINE 1204 buffer_ptr -> tbi.state = QUEUED_STATE; 004742 aa 002000 2350 07 lda 1024,dl 004743 aa 6 00252 3735 20 epp7 pr6|170,* 004744 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 004745 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 004746 aa 5 00001 5511 10 stba pr5|1,10 tbi.state STATEMENT 1 ON LINE 1205 call add_to_list (semi_queued_offset, bin (rel (buffer_ptr))); 004747 aa 5 00000 6351 00 eaa pr5|0 buffer_ptr 004750 aa 000066 7730 00 lrl 54 004751 aa 000066 7370 00 lls 54 004752 aa 6 00766 5511 60 stba pr6|502,60 004753 aa 002671 3520 04 epp2 1465,ic 007644 = 000004000000 004754 aa 001721 6700 04 tsp4 977,ic 006675 STATEMENT 1 ON LINE 1207 end queue_write_proc; 004755 aa 6 00250 6101 00 rtcd pr6|168 END PROCEDURE queue_write_proc BEGIN PROCEDURE check_write_proc ENTRY TO check_write_proc STATEMENT 1 ON LINE 1209 check_write_proc: proc (buffer_data_ptr, result, code); 004756 aa 6 00256 6501 00 spri4 pr6|174 004757 aa 6 00260 2521 00 spri2 pr6|176 STATEMENT 1 ON LINE 1219 if ^tai.write_queued then do; 004760 aa 6 00116 3735 20 epp7 pr6|78,* wksp 004761 aa 7 00020 2351 00 lda pr7|16 tai.write_queued 004762 aa 200000 3150 07 cana 65536,dl 004763 aa 000011 6010 04 tnz 9,ic 004774 STATEMENT 1 ON LINE 1220 buffer_data_ptr = null (); 004764 aa 773166 2370 04 ldaq -2442,ic 000152 = 077777000043 000001000000 004765 aa 2 00002 7571 20 staq pr2|2,* buffer_data_ptr STATEMENT 1 ON LINE 1221 result = TAPE_IO_USER_PROGRAM_ERROR; 004766 aa 000001 2360 07 ldq 1,dl 004767 aa 2 00004 7561 20 stq pr2|4,* result STATEMENT 1 ON LINE 1222 code = error_table_$device_not_active; 004770 aa 6 00044 3701 20 epp4 pr6|36,* 004771 la 4 00070 2361 20 ldq pr4|56,* error_table_$device_not_active 004772 aa 2 00006 7561 20 stq pr2|6,* code STATEMENT 1 ON LINE 1223 return; 004773 aa 6 00256 6101 00 rtcd pr6|174 STATEMENT 1 ON LINE 1224 end; STATEMENT 1 ON LINE 1226 buffer_ptr = ptr (wksp, tai.queue_list_offset); 004774 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 004775 aa 000066 7730 00 lrl 54 004776 aa 7 00000 3515 00 epp1 pr7|0 004777 aa 000000 3114 06 eawp1 0,ql 005000 aa 6 00102 2515 00 spri1 pr6|66 buffer_ptr STATEMENT 1 ON LINE 1227 code = 0; 005001 aa 2 00006 4501 20 stz pr2|6,* code STATEMENT 1 ON LINE 1229 done = "0"b; 005002 aa 6 00264 4501 00 stz pr6|180 done STATEMENT 1 ON LINE 1230 do while (^done); 005003 aa 000000 0110 03 nop 0,du 005004 aa 6 00264 2351 00 lda pr6|180 done 005005 aa 000426 6010 04 tnz 278,ic 005433 STATEMENT 1 ON LINE 1231 lost_statuses = -1; 005006 aa 000001 3360 07 lcq 1,dl 005007 aa 6 00107 7561 00 stq pr6|71 lost_statuses STATEMENT 1 ON LINE 1232 do while (lost_statuses < 0); 005010 aa 6 00107 2361 00 ldq pr6|71 lost_statuses 005011 aa 000031 6050 04 tpl 25,ic 005042 STATEMENT 1 ON LINE 1233 call get_status (buffer_ptr -> tbi.modes.wait, CHECK_WRITE_MAKE_CALLER_WAIT); 005012 aa 000566 3520 04 epp2 374,ic 005600 = 772352237004 005013 aa 6 01000 2521 00 spri2 pr6|512 005014 aa 6 01002 6521 00 spri6 pr6|514 005015 aa 000017 7270 07 lxl7 15,dl 005016 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 005017 aa 7 00002 3521 00 epp2 pr7|2 tbi.wait 005020 aa 2 00000 5035 17 abd pr2|0,7 005021 aa 6 01006 2521 00 spri2 pr6|518 005022 aa 6 01000 3521 00 epp2 pr6|512 005023 aa 6 01010 2521 00 spri2 pr6|520 005024 aa 6 01004 3521 00 epp2 pr6|516 005025 aa 010000 4310 07 fld 4096,dl 005026 aa 2 00000 7571 00 staq pr2|0 005027 aa 002105 6700 04 tsp4 1093,ic 007134 STATEMENT 1 ON LINE 1234 lost_statuses = missing_statuses (buffer_ptr, isp); 005030 aa 002644 3520 04 epp2 1444,ic 007674 = 000006000000 005031 aa 002241 6700 04 tsp4 1185,ic 007272 STATEMENT 1 ON LINE 1235 if lost_statuses < 0 then tai.extra_statuses = tai.extra_statuses + 1; 005032 aa 6 00107 2361 00 ldq pr6|71 lost_statuses 005033 aa 777755 6050 04 tpl -19,ic 005010 005034 aa 6 00116 3735 20 epp7 pr6|78,* wksp 005035 aa 7 00030 2351 00 lda pr7|24 tai.extra_statuses 005036 aa 000044 7330 00 lrs 36 005037 aa 000001 0330 07 adl 1,dl 005040 aa 7 00030 7561 00 stq pr7|24 tai.extra_statuses STATEMENT 1 ON LINE 1237 end; 005041 aa 777747 7100 04 tra -25,ic 005010 STATEMENT 1 ON LINE 1238 done = "1"b; 005042 aa 400000 2350 03 lda 131072,du 005043 aa 6 00264 7551 00 sta pr6|180 done STATEMENT 1 ON LINE 1239 if lost_statuses ^= 0 then do; 005044 aa 6 00107 2361 00 ldq pr6|71 lost_statuses 005045 aa 000053 6000 04 tze 43,ic 005120 STATEMENT 1 ON LINE 1240 tai.times_status_lost = tai.times_status_lost + 1; 005046 aa 6 00116 3735 20 epp7 pr6|78,* wksp 005047 aa 7 00027 2351 00 lda pr7|23 tai.times_status_lost 005050 aa 000044 7330 00 lrs 36 005051 aa 000001 0330 07 adl 1,dl 005052 aa 7 00027 7561 00 stq pr7|23 tai.times_status_lost STATEMENT 1 ON LINE 1241 istat.st = "1"b; 005053 aa 400000 2350 03 lda 131072,du 005054 aa 6 00132 2551 20 orsa pr6|90,* istat.st STATEMENT 1 ON LINE 1242 tai.status_entry_idx = mod (tai.status_entry_idx - 1, tai.status_entry_count); 005055 aa 7 00015 2351 00 lda pr7|13 tai.status_entry_count 005056 aa 000022 7350 00 als 18 005057 aa 000077 7730 00 lrl 63 005060 aa 6 01014 7561 00 stq pr6|524 tai.status_entry_count 005061 aa 7 00015 2361 00 ldq pr7|13 tai.status_entry_idx 005062 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 005063 aa 000001 1760 07 sbq 1,dl 005064 aa 6 01014 3521 00 epp2 pr6|524 tai.status_entry_count 005065 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 005066 aa 7 00015 5521 04 stbq pr7|13,04 tai.status_entry_idx STATEMENT 1 ON LINE 1243 isp = ptr (wksp, tai.status_queue_offset + mod (tai.status_entry_idx - 1, tai.status_entry_count) * size (istat)); 005067 aa 7 00015 2351 00 lda pr7|13 tai.status_entry_count 005070 aa 000022 7350 00 als 18 005071 aa 000077 7730 00 lrl 63 005072 aa 6 01014 7561 00 stq pr6|524 tai.status_entry_count 005073 aa 7 00015 2361 00 ldq pr7|13 tai.status_entry_idx 005074 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 005075 aa 000001 1760 07 sbq 1,dl 005076 aa 6 01014 3521 00 epp2 pr6|524 tai.status_entry_count 005077 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 005100 aa 000003 7360 00 qls 3 005101 aa 6 01014 7561 00 stq pr6|524 005102 aa 7 00016 2351 00 lda pr7|14 tai.status_queue_offset 005103 aa 000066 7730 00 lrl 54 005104 aa 6 01014 0761 00 adq pr6|524 005105 aa 7 00000 3521 00 epp2 pr7|0 005106 aa 000000 3120 06 eawp2 0,ql 005107 aa 6 00132 2521 00 spri2 pr6|90 isp STATEMENT 1 ON LINE 1245 istat.level = IO_MARKER_INTERRUPT_LEVEL; 005110 aa 000005 2360 07 ldq 5,dl 005111 aa 2 00001 7561 00 stq pr2|1 istat.level STATEMENT 1 ON LINE 1246 istat.run = "1"b; 005112 aa 100000 2350 03 lda 32768,du 005113 aa 2 00000 2551 00 orsa pr2|0 istat.run STATEMENT 1 ON LINE 1247 istat.er = "0"b; 005114 aa 002551 2350 04 lda 1385,ic 007665 = 577777777777 005115 aa 2 00000 3551 00 ansa pr2|0 istat.er STATEMENT 1 ON LINE 1248 status_class = "OK"; 005116 aa 117113 2350 03 lda 40523,du 005117 aa 6 00113 5511 60 stba pr6|75,60 status_class STATEMENT 1 ON LINE 1249 end; STATEMENT 1 ON LINE 1251 if status_class = "OK" then result = TAPE_IO_SUCCESS; 005120 aa 6 00113 2351 00 lda pr6|75 status_class 005121 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 005122 aa 117113 1150 03 cmpa 40523,du 005123 aa 000005 6010 04 tnz 5,ic 005130 005124 aa 000000 2360 07 ldq 0,dl 005125 aa 6 00260 3735 20 epp7 pr6|176,* 005126 aa 7 00004 7561 20 stq pr7|4,* result 005127 aa 777655 7100 04 tra -83,ic 005004 STATEMENT 1 ON LINE 1253 else if (status_class = "AB") | (status_class = "EF") then do; 005130 aa 101102 1150 03 cmpa 33346,du 005131 aa 000003 6000 04 tze 3,ic 005134 005132 aa 105106 1150 03 cmpa 35398,du 005133 aa 000010 6010 04 tnz 8,ic 005143 STATEMENT 1 ON LINE 1254 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 005134 aa 000002 2360 07 ldq 2,dl 005135 aa 6 00260 3735 20 epp7 pr6|176,* 005136 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 1255 code = error_table_$unexpected_device_status; 005137 aa 6 00044 3701 20 epp4 pr6|36,* 005140 la 4 00104 2361 20 ldq pr4|68,* error_table_$unexpected_device_status 005141 aa 7 00006 7561 20 stq pr7|6,* code STATEMENT 1 ON LINE 1256 end; 005142 aa 777642 7100 04 tra -94,ic 005004 STATEMENT 1 ON LINE 1257 else if status_class = "SI" then do; 005143 aa 123111 1150 03 cmpa 42569,du 005144 aa 000010 6010 04 tnz 8,ic 005154 STATEMENT 1 ON LINE 1258 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 005145 aa 000002 2360 07 ldq 2,dl 005146 aa 6 00260 3735 20 epp7 pr6|176,* 005147 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 1259 code = error_table_$device_attention; 005150 aa 6 00044 3701 20 epp4 pr6|36,* 005151 la 4 00062 2361 20 ldq pr4|50,* error_table_$device_attention 005152 aa 7 00006 7561 20 stq pr7|6,* code STATEMENT 1 ON LINE 1260 end; 005153 aa 777631 7100 04 tra -103,ic 005004 STATEMENT 1 ON LINE 1261 else if status_class = "UE" then do; 005154 aa 125105 1150 03 cmpa 43589,du 005155 aa 000010 6010 04 tnz 8,ic 005165 STATEMENT 1 ON LINE 1262 result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 005156 aa 000002 2360 07 ldq 2,dl 005157 aa 6 00260 3735 20 epp7 pr6|176,* 005160 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 1263 code = error_table_$device_parity; 005161 aa 6 00044 3701 20 epp4 pr6|36,* 005162 la 4 00072 2361 20 ldq pr4|58,* error_table_$device_parity 005163 aa 7 00006 7561 20 stq pr7|6,* code STATEMENT 1 ON LINE 1264 end; 005164 aa 777620 7100 04 tra -112,ic 005004 STATEMENT 1 ON LINE 1265 else if status_class = "ET" then do; 005165 aa 105124 1150 03 cmpa 35412,du 005166 aa 000055 6010 04 tnz 45,ic 005243 STATEMENT 1 ON LINE 1266 if tai.retry_in_progress & istat.offset < bin (rel (addr (tai.order_data (hbound (tai.order_data, 1))))) then do; 005167 aa 6 00116 3735 20 epp7 pr6|78,* wksp 005170 aa 7 00020 2351 00 lda pr7|16 tai.retry_in_progress 005171 aa 010000 3150 07 cana 4096,dl 005172 aa 000042 6000 04 tze 34,ic 005234 005173 aa 7 00057 3715 00 epp5 pr7|47 tai.order_data 005174 aa 5 00000 6351 00 eaa pr5|0 005175 aa 000066 7730 00 lrl 54 005176 aa 6 01016 7571 00 staq pr6|526 005177 aa 6 00132 3535 20 epp3 pr6|90,* isp 005200 aa 3 00002 2351 00 lda pr3|2 istat.offset 005201 aa 000044 7330 00 lrs 36 005202 aa 6 01016 1171 00 cmpaq pr6|526 005203 aa 6 01016 6515 00 spri5 pr6|526 005204 aa 000030 6050 04 tpl 24,ic 005234 STATEMENT 1 ON LINE 1269 semi_queued_offset = tai.queue_list_offset; 005205 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 005206 aa 6 00112 5511 60 stba pr6|74,60 semi_queued_offset STATEMENT 1 ON LINE 1270 tai.queue_list_offset = 0; 005207 aa 000000 2350 07 lda 0,dl 005210 aa 7 00014 5511 60 stba pr7|12,60 tai.queue_list_offset STATEMENT 1 ON LINE 1271 call run ("1"b, code); 005211 aa 400000 2350 03 lda 131072,du 005212 aa 6 01015 7551 00 sta pr6|525 005213 aa 6 01015 3521 00 epp2 pr6|525 005214 aa 6 01006 2521 00 spri2 pr6|518 005215 aa 6 00260 3515 20 epp1 pr6|176,* 005216 aa 1 00006 3521 20 epp2 pr1|6,* code 005217 aa 6 01010 2521 00 spri2 pr6|520 005220 aa 6 01004 3521 00 epp2 pr6|516 005221 aa 010000 4310 07 fld 4096,dl 005222 aa 2 00000 7571 00 staq pr2|0 005223 aa 000762 6700 04 tsp4 498,ic 006205 STATEMENT 1 ON LINE 1272 if code ^= 0 then result = TAPE_IO_USER_PROGRAM_ERROR; 005224 aa 6 00260 3735 20 epp7 pr6|176,* 005225 aa 7 00006 2361 20 ldq pr7|6,* code 005226 aa 000004 6000 04 tze 4,ic 005232 005227 aa 000001 2360 07 ldq 1,dl 005230 aa 7 00004 7561 20 stq pr7|4,* result 005231 aa 777553 7100 04 tra -149,ic 005004 STATEMENT 1 ON LINE 1274 else done = "0"b; 005232 aa 6 00264 4501 00 stz pr6|180 done STATEMENT 1 ON LINE 1275 end; 005233 aa 777551 7100 04 tra -151,ic 005004 STATEMENT 1 ON LINE 1276 else do; STATEMENT 1 ON LINE 1277 result = TAPE_IO_EOT; 005234 aa 000005 2360 07 ldq 5,dl 005235 aa 6 00260 3715 20 epp5 pr6|176,* 005236 aa 5 00004 7561 20 stq pr5|4,* result STATEMENT 1 ON LINE 1278 code = error_table_$device_end; 005237 aa 6 00044 3701 20 epp4 pr6|36,* 005240 la 4 00066 2361 20 ldq pr4|54,* error_table_$device_end 005241 aa 5 00006 7561 20 stq pr5|6,* code STATEMENT 1 ON LINE 1279 end; STATEMENT 1 ON LINE 1280 end; 005242 aa 777542 7100 04 tra -158,ic 005004 STATEMENT 1 ON LINE 1281 else if status_class = "BT" then do; 005243 aa 102124 1150 03 cmpa 33876,du 005244 aa 000010 6010 04 tnz 8,ic 005254 STATEMENT 1 ON LINE 1282 result = TAPE_IO_EOT; 005245 aa 000005 2360 07 ldq 5,dl 005246 aa 6 00260 3735 20 epp7 pr6|176,* 005247 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 1283 code = error_table_$blank_tape; 005250 aa 6 00044 3701 20 epp4 pr6|36,* 005251 la 4 00054 2361 20 ldq pr4|44,* error_table_$blank_tape 005252 aa 7 00006 7561 20 stq pr7|6,* code STATEMENT 1 ON LINE 1284 end; 005253 aa 777531 7100 04 tra -167,ic 005004 STATEMENT 1 ON LINE 1285 else if (status_class = "DA") | (status_class = "DE") | ((status_class = "IP") & (buffer_ptr -> tbi.modes.data_code ^= "03"b3)) then do; 005254 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 005255 aa 7 00002 2351 00 lda pr7|2 tbi.data_code 005256 aa 0 00014 3771 00 anaq pr0|12 = 770000000000 000000000000 005257 aa 6 01015 7551 00 sta pr6|525 tbi.data_code 005260 aa 6 00113 2351 00 lda pr6|75 status_class 005261 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 005262 aa 111120 1150 03 cmpa 37456,du 005263 aa 0 00512 7001 00 tsx0 pr0|330 r_e_as 005264 aa 6 01014 7551 00 sta pr6|524 005265 aa 6 00113 2351 00 lda pr6|75 status_class 005266 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 005267 aa 104101 1150 03 cmpa 34881,du 005270 aa 000010 6000 04 tze 8,ic 005300 005271 aa 104105 1150 03 cmpa 34885,du 005272 aa 000006 6000 04 tze 6,ic 005300 005273 aa 6 01014 2351 00 lda pr6|524 005274 aa 000112 6000 04 tze 74,ic 005406 005275 aa 6 01015 2351 00 lda pr6|525 tbi.data_code 005276 aa 030000 1150 03 cmpa 12288,du 005277 aa 000107 6000 04 tze 71,ic 005406 STATEMENT 1 ON LINE 1288 tai.write_errors = tai.write_errors + 1; 005300 aa 6 00116 3715 20 epp5 pr6|78,* wksp 005301 aa 5 00024 2351 00 lda pr5|20 tai.write_errors 005302 aa 000044 7330 00 lrs 36 005303 aa 000001 0330 07 adl 1,dl 005304 aa 5 00024 7561 00 stq pr5|20 tai.write_errors STATEMENT 1 ON LINE 1289 if buffer_ptr -> tbi.recovery then do; 005305 aa 7 00002 2351 00 lda pr7|2 tbi.recovery 005306 aa 000010 3150 03 cana 8,du 005307 aa 000036 6000 04 tze 30,ic 005345 STATEMENT 1 ON LINE 1290 if tai.retry_count < MAX_RETRY_COUNT then do; 005310 aa 5 00015 2351 00 lda pr5|13 tai.retry_count 005311 aa 000077 7730 00 lrl 63 005312 aa 6 01020 7561 00 stq pr6|528 tai.retry_count 005313 aa 000012 1160 07 cmpq 10,dl 005314 aa 000053 6050 04 tpl 43,ic 005367 STATEMENT 1 ON LINE 1291 tai.retry_in_progress = "1"b; 005315 aa 010000 2350 07 lda 4096,dl 005316 aa 5 00020 2551 00 orsa pr5|16 tai.retry_in_progress STATEMENT 1 ON LINE 1292 tai.retry_count = tai.retry_count + 1; 005317 aa 000001 0760 07 adq 1,dl 005320 aa 000077 7370 00 lls 63 005321 aa 5 00015 5511 40 stba pr5|13,40 tai.retry_count STATEMENT 1 ON LINE 1293 call tape_ioi_error_retry (wksp, buffer_ptr, isp, code); 005322 aa 6 00116 3521 00 epp2 pr6|78 wksp 005323 aa 6 01024 2521 00 spri2 pr6|532 005324 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 005325 aa 6 01026 2521 00 spri2 pr6|534 005326 aa 6 00132 3521 00 epp2 pr6|90 isp 005327 aa 6 01030 2521 00 spri2 pr6|536 005330 aa 6 00260 3535 20 epp3 pr6|176,* 005331 aa 3 00006 3521 20 epp2 pr3|6,* code 005332 aa 6 01032 2521 00 spri2 pr6|538 005333 aa 6 01022 6211 00 eax1 pr6|530 005334 aa 020000 4310 07 fld 8192,dl 005335 aa 6 00044 3701 20 epp4 pr6|36,* 005336 la 4 00024 3521 20 epp2 pr4|20,* tape_ioi_error_retry 005337 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1294 if code = 0 then done = "0"b; 005340 aa 6 00260 3735 20 epp7 pr6|176,* 005341 aa 7 00006 2361 20 ldq pr7|6,* code 005342 aa 000003 6010 04 tnz 3,ic 005345 005343 aa 6 00264 4501 00 stz pr6|180 done 005344 aa 777440 7100 04 tra -224,ic 005004 STATEMENT 1 ON LINE 1296 else do; STATEMENT 1 ON LINE 1297 CHECK_WRITE_CANT_RECOVER: if status_class = "DE" then result = TAPE_IO_RECOVERABLE_IO_ERROR_AND_EOT; 005345 aa 6 00113 2351 00 lda pr6|75 status_class 005346 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 005347 aa 104105 1150 03 cmpa 34885,du 005350 aa 000005 6010 04 tnz 5,ic 005355 005351 aa 000007 2360 07 ldq 7,dl 005352 aa 6 00260 3735 20 epp7 pr6|176,* 005353 aa 7 00004 7561 20 stq pr7|4,* result 005354 aa 000004 7100 04 tra 4,ic 005360 STATEMENT 1 ON LINE 1300 else result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 005355 aa 000002 2360 07 ldq 2,dl 005356 aa 6 00260 3735 20 epp7 pr6|176,* 005357 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 1301 if code ^= error_table_$bad_density then code = error_table_$device_parity; 005360 aa 7 00006 2361 20 ldq pr7|6,* code 005361 aa 6 00044 3701 20 epp4 pr6|36,* 005362 la 4 00052 1161 20 cmpq pr4|42,* error_table_$bad_density 005363 aa 777421 6000 04 tze -239,ic 005004 005364 la 4 00072 2361 20 ldq pr4|58,* error_table_$device_parity 005365 aa 7 00006 7561 20 stq pr7|6,* code STATEMENT 1 ON LINE 1303 end; STATEMENT 1 ON LINE 1304 end; 005366 aa 777416 7100 04 tra -242,ic 005004 STATEMENT 1 ON LINE 1305 else do; STATEMENT 1 ON LINE 1306 if status_class = "DE" then result = TAPE_IO_RECOVERABLE_IO_ERROR_AND_EOT; 005367 aa 6 00113 2351 00 lda pr6|75 status_class 005370 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 005371 aa 104105 1150 03 cmpa 34885,du 005372 aa 000005 6010 04 tnz 5,ic 005377 005373 aa 000007 2360 07 ldq 7,dl 005374 aa 6 00260 3535 20 epp3 pr6|176,* 005375 aa 3 00004 7561 20 stq pr3|4,* result 005376 aa 000004 7100 04 tra 4,ic 005402 STATEMENT 1 ON LINE 1308 else result = TAPE_IO_RECOVERABLE_IO_ERROR; 005377 aa 000003 2360 07 ldq 3,dl 005400 aa 6 00260 3535 20 epp3 pr6|176,* 005401 aa 3 00004 7561 20 stq pr3|4,* result STATEMENT 1 ON LINE 1309 code = error_table_$device_parity; 005402 aa 6 00044 3701 20 epp4 pr6|36,* 005403 la 4 00072 2361 20 ldq pr4|58,* error_table_$device_parity 005404 aa 3 00006 7561 20 stq pr3|6,* code STATEMENT 1 ON LINE 1310 end; STATEMENT 1 ON LINE 1311 end; STATEMENT 1 ON LINE 1313 end; 005405 aa 777377 7100 04 tra -257,ic 005004 STATEMENT 1 ON LINE 1314 else if (status_class = "CA") | (status_class = "IP") then do; 005406 aa 6 00113 2351 00 lda pr6|75 status_class 005407 aa 0 00044 3771 00 anaq pr0|36 = 777777000000 000000000000 005410 aa 103101 1150 03 cmpa 34369,du 005411 aa 000003 6000 04 tze 3,ic 005414 005412 aa 6 01014 2351 00 lda pr6|524 005413 aa 777371 6000 04 tze -263,ic 005004 STATEMENT 1 ON LINE 1316 code = error_table_$device_code_alert; 005414 aa 6 00044 3701 20 epp4 pr6|36,* 005415 la 4 00064 2361 20 ldq pr4|52,* error_table_$device_code_alert 005416 aa 6 00260 3715 20 epp5 pr6|176,* 005417 aa 5 00006 7561 20 stq pr5|6,* code STATEMENT 1 ON LINE 1317 if buffer_ptr -> tbi.modes.data_code = "03"b3 | buffer_ptr -> tbi.modes.data_code = "25"b3 then result = TAPE_IO_CODE_ALERT; 005420 aa 6 01015 2351 00 lda pr6|525 tbi.data_code 005421 aa 030000 1150 03 cmpa 12288,du 005422 aa 000003 6000 04 tze 3,ic 005425 005423 aa 250000 1150 03 cmpa 86016,du 005424 aa 000004 6010 04 tnz 4,ic 005430 005425 aa 000010 2360 07 ldq 8,dl 005426 aa 5 00004 7561 20 stq pr5|4,* result 005427 aa 777355 7100 04 tra -275,ic 005004 STATEMENT 1 ON LINE 1319 else result = TAPE_IO_UNRECOVERABLE_IO_ERROR; 005430 aa 000002 2360 07 ldq 2,dl 005431 aa 5 00004 7561 20 stq pr5|4,* result STATEMENT 1 ON LINE 1320 end; STATEMENT 1 ON LINE 1321 end; 005432 aa 777352 7100 04 tra -278,ic 005004 STATEMENT 1 ON LINE 1323 call remove_from_list (tai.queue_list_offset, buffer_ptr); 005433 aa 6 00116 3735 20 epp7 pr6|78,* wksp 005434 aa 7 00014 3521 00 epp2 pr7|12 tai.queue_list_offset 005435 aa 6 01006 2521 00 spri2 pr6|518 005436 aa 6 00102 3521 00 epp2 pr6|66 buffer_ptr 005437 aa 6 01010 2521 00 spri2 pr6|520 005440 aa 6 01004 3521 00 epp2 pr6|516 005441 aa 010000 4310 07 fld 4096,dl 005442 aa 2 00000 7571 00 staq pr2|0 005443 aa 001372 6700 04 tsp4 762,ic 007035 STATEMENT 1 ON LINE 1324 if result = TAPE_IO_SUCCESS then do; 005444 aa 6 00260 3735 20 epp7 pr6|176,* 005445 aa 7 00004 2361 20 ldq pr7|4,* result 005446 aa 000013 6010 04 tnz 11,ic 005461 STATEMENT 1 ON LINE 1325 tai.at_bot = "0"b; 005447 aa 002215 2350 04 lda 1165,ic 007664 = 777777775777 005450 aa 6 00116 3715 20 epp5 pr6|78,* wksp 005451 aa 5 00020 3551 00 ansa pr5|16 tai.at_bot STATEMENT 1 ON LINE 1326 call keep_it_going (isp, xcode); 005452 aa 002164 3520 04 epp2 1140,ic 007636 = 000004000000 005453 aa 000701 6700 04 tsp4 449,ic 006354 STATEMENT 1 ON LINE 1327 if xcode ^= 0 then code = xcode; 005454 aa 6 00265 2361 00 ldq pr6|181 xcode 005455 aa 000056 6000 04 tze 46,ic 005533 005456 aa 6 00260 3735 20 epp7 pr6|176,* 005457 aa 7 00006 7561 20 stq pr7|6,* code STATEMENT 1 ON LINE 1329 end; 005460 aa 000053 7100 04 tra 43,ic 005533 STATEMENT 1 ON LINE 1330 else do; STATEMENT 1 ON LINE 1331 begin; BEGIN BLOCK 8 STATEMENT 1 ON LINE 1335 semi_queued_offset = tai.queue_list_offset; 005461 aa 6 00116 3735 20 epp7 pr6|78,* wksp 005462 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 005463 aa 6 00112 5511 60 stba pr6|74,60 semi_queued_offset STATEMENT 1 ON LINE 1336 tai.queue_list_offset = 0; 005464 aa 000000 2350 07 lda 0,dl 005465 aa 7 00014 5511 60 stba pr7|12,60 tai.queue_list_offset STATEMENT 1 ON LINE 1337 do buffer_ptr = ptr (wksp, semi_queued_offset) repeat ptr (wksp, buffer_ptr -> tbi.next_state_offset) while (rel (buffer_ptr) ^= ""b); 005466 aa 6 00112 2351 00 lda pr6|74 semi_queued_offset 005467 aa 000066 7730 00 lrl 54 005470 aa 7 00000 3521 00 epp2 pr7|0 005471 aa 000000 3120 06 eawp2 0,ql 005472 aa 6 00266 2521 00 spri2 pr6|182 buffer_ptr 005473 aa 000000 0110 03 nop 0,du 005474 aa 6 00266 6351 20 eaa pr6|182,* buffer_ptr 005475 aa 000012 6000 04 tze 10,ic 005507 STATEMENT 1 ON LINE 1339 buffer_ptr -> tbi.state = SUSPENDED_STATE; 005476 aa 003000 2350 07 lda 1536,dl 005477 aa 6 00266 3735 20 epp7 pr6|182,* buffer_ptr 005500 aa 7 00001 5511 10 stba pr7|1,10 tbi.state STATEMENT 1 ON LINE 1340 end; 005501 aa 7 00001 2351 00 lda pr7|1 tbi.next_state_offset 005502 aa 000066 7730 00 lrl 54 005503 aa 6 00116 3521 20 epp2 pr6|78,* wksp 005504 aa 000000 3120 06 eawp2 0,ql 005505 aa 6 00266 2521 00 spri2 pr6|182 buffer_ptr 005506 aa 777766 7100 04 tra -10,ic 005474 STATEMENT 1 ON LINE 1341 end; END BLOCK 8 STATEMENT 1 ON LINE 1342 call add_to_list (tai.susp_list_offset, semi_queued_offset); 005507 aa 000022 7270 07 lxl7 18,dl 005510 aa 6 00116 3735 20 epp7 pr6|78,* wksp 005511 aa 7 00014 3521 00 epp2 pr7|12 tai.susp_list_offset 005512 aa 2 00000 5035 17 abd pr2|0,7 005513 aa 6 01006 2521 00 spri2 pr6|518 005514 aa 6 00112 3521 00 epp2 pr6|74 semi_queued_offset 005515 aa 6 01010 2521 00 spri2 pr6|520 005516 aa 6 01004 3521 00 epp2 pr6|516 005517 aa 010000 4310 07 fld 4096,dl 005520 aa 2 00000 7571 00 staq pr2|0 005521 aa 001154 6700 04 tsp4 620,ic 006675 STATEMENT 1 ON LINE 1343 if result ^= TAPE_IO_EOT then tai.write_errors = tai.write_errors + 1; 005522 aa 6 00260 3735 20 epp7 pr6|176,* 005523 aa 7 00004 2361 20 ldq pr7|4,* result 005524 aa 000005 1160 07 cmpq 5,dl 005525 aa 000006 6000 04 tze 6,ic 005533 005526 aa 6 00116 3715 20 epp5 pr6|78,* wksp 005527 aa 5 00024 2351 00 lda pr5|20 tai.write_errors 005530 aa 000044 7330 00 lrs 36 005531 aa 000001 0330 07 adl 1,dl 005532 aa 5 00024 7561 00 stq pr5|20 tai.write_errors STATEMENT 1 ON LINE 1345 end; STATEMENT 1 ON LINE 1347 buffer_ptr -> tbi.state = READY_STATE; 005533 aa 001000 2350 07 lda 512,dl 005534 aa 6 00102 3735 20 epp7 pr6|66,* buffer_ptr 005535 aa 7 00001 5511 10 stba pr7|1,10 tbi.state STATEMENT 1 ON LINE 1348 call add_to_list (tai.free_list_offset, bin (rel (buffer_ptr))); 005536 aa 7 00000 6351 00 eaa pr7|0 buffer_ptr 005537 aa 000066 7730 00 lrl 54 005540 aa 000066 7370 00 lls 54 005541 aa 6 01015 5511 60 stba pr6|525,60 005542 aa 000022 7270 07 lxl7 18,dl 005543 aa 6 00116 3715 20 epp5 pr6|78,* wksp 005544 aa 5 00013 3521 00 epp2 pr5|11 tai.free_list_offset 005545 aa 2 00000 5035 17 abd pr2|0,7 005546 aa 6 01006 2521 00 spri2 pr6|518 005547 aa 6 01015 3521 00 epp2 pr6|525 005550 aa 6 01010 2521 00 spri2 pr6|520 005551 aa 6 01004 3521 00 epp2 pr6|516 005552 aa 010000 4310 07 fld 4096,dl 005553 aa 2 00000 7571 00 staq pr2|0 005554 aa 001121 6700 04 tsp4 593,ic 006675 STATEMENT 1 ON LINE 1350 buffer_data_ptr = ptr (wksp, buffer_ptr -> tbi.data_offset); 005555 aa 6 00102 2351 20 lda pr6|66,* tbi.data_offset 005556 aa 000066 7730 00 lrl 54 005557 aa 6 00116 3521 20 epp2 pr6|78,* wksp 005560 aa 000000 3120 06 eawp2 0,ql 005561 aa 6 00260 3735 20 epp7 pr6|176,* 005562 aa 7 00002 2521 20 spri2 pr7|2,* buffer_data_ptr STATEMENT 1 ON LINE 1351 tai.write_queued = (tai.queue_list_offset ^= 0); 005563 aa 6 00116 3715 20 epp5 pr6|78,* wksp 005564 aa 5 00014 2351 00 lda pr5|12 tai.queue_list_offset 005565 aa 000066 7730 00 lrl 54 005566 aa 0 00515 7001 00 tsx0 pr0|333 r_ne_as 005567 aa 000023 7710 00 arl 19 005570 aa 5 00020 6751 00 era pr5|16 tai.write_queued 005571 aa 200000 3750 07 ana 65536,dl 005572 aa 5 00020 6551 00 ersa pr5|16 tai.write_queued STATEMENT 1 ON LINE 1352 tai.retry_in_progress = "0"b; 005573 aa 002125 2350 04 lda 1109,ic 007720 = 777777767777 005574 aa 5 00020 3551 00 ansa pr5|16 tai.retry_in_progress STATEMENT 1 ON LINE 1353 tai.retry_count = 0; 005575 aa 000000 2350 07 lda 0,dl 005576 aa 5 00015 5511 40 stba pr5|13,40 tai.retry_count STATEMENT 1 ON LINE 1354 return; 005577 aa 6 00256 6101 00 rtcd pr6|174 STATEMENT 1 ON LINE 1356 CHECK_WRITE_MAKE_CALLER_WAIT: buffer_data_ptr = null (); 005600 aa 772352 2370 04 ldaq -2838,ic 000152 = 077777000043 000001000000 005601 aa 6 00260 3735 20 epp7 pr6|176,* 005602 aa 7 00002 7571 20 staq pr7|2,* buffer_data_ptr STATEMENT 1 ON LINE 1358 result = TAPE_IO_BLOCK; 005603 aa 000001 3360 07 lcq 1,dl 005604 aa 7 00004 7561 20 stq pr7|4,* result STATEMENT 1 ON LINE 1359 code = 0; 005605 aa 7 00006 4501 20 stz pr7|6,* code STATEMENT 1 ON LINE 1360 return; 005606 aa 6 00256 6101 00 rtcd pr6|174 STATEMENT 1 ON LINE 1362 end check_write_proc; END PROCEDURE check_write_proc BEGIN PROCEDURE get_io_byte_count ENTRY TO get_io_byte_count STATEMENT 1 ON LINE 1368 get_io_byte_count: proc (buffer_ptr, status_ptr) returns (fixed bin (21)); 005607 aa 6 00270 6501 00 spri4 pr6|184 005610 aa 6 00272 2521 00 spri2 pr6|186 STATEMENT 1 ON LINE 1378 statp = addr (status_ptr -> istat.iom_stat); 005611 aa 2 00004 3735 20 epp7 pr2|4,* status_ptr 005612 aa 7 00000 3735 20 epp7 pr7|0,* status_ptr 005613 aa 7 00004 3715 00 epp5 pr7|4 istat.iom_stat 005614 aa 6 00130 6515 00 spri5 pr6|88 statp STATEMENT 1 ON LINE 1379 if (^writing ()) & (^ascii_mode (buffer_ptr)) & (^status.eo) & (status_tcp () = 1) then do; 005615 aa 002015 3520 04 epp2 1037,ic 007632 = 000002000000 005616 aa 000274 6700 04 tsp4 188,ic 006112 005617 aa 6 01034 2361 00 ldq pr6|540 005620 aa 000001 1160 07 cmpq 1,dl 005621 aa 0 00512 7001 00 tsx0 pr0|330 r_e_as 005622 aa 6 01034 7551 00 sta pr6|540 005623 aa 6 00130 2351 20 lda pr6|88,* status.eo 005624 aa 000014 7350 00 als 12 005625 aa 0 00002 3771 00 anaq pr0|2 = 400000000000 000000000000 005626 aa 0 00002 6751 00 era pr0|2 = 400000000000 005627 aa 6 01035 7551 00 sta pr6|541 005630 aa 6 00272 3735 20 epp7 pr6|186,* 005631 aa 7 00002 3521 20 epp2 pr7|2,* buffer_ptr 005632 aa 6 01042 2521 00 spri2 pr6|546 005633 aa 6 01036 3521 00 epp2 pr6|542 005634 aa 6 01044 2521 00 spri2 pr6|548 005635 aa 6 01040 3521 00 epp2 pr6|544 005636 aa 010000 4310 07 fld 4096,dl 005637 aa 2 00000 7571 00 staq pr2|0 005640 aa 000700 6700 04 tsp4 448,ic 006540 005641 aa 6 01036 2351 00 lda pr6|542 005642 aa 0 00002 3771 00 anaq pr0|2 = 400000000000 000000000000 005643 aa 0 00002 6751 00 era pr0|2 = 400000000000 005644 aa 6 01036 7551 00 sta pr6|542 005645 aa 001761 3520 04 epp2 1009,ic 007626 = 000002000000 005646 aa 000231 6700 04 tsp4 153,ic 006077 005647 aa 6 01037 2351 00 lda pr6|543 005650 aa 0 00002 3771 00 anaq pr0|2 = 400000000000 000000000000 005651 aa 0 00002 6751 00 era pr0|2 = 400000000000 005652 aa 6 01036 3751 00 ana pr6|542 005653 aa 6 01035 3751 00 ana pr6|541 005654 aa 6 01034 3151 00 cana pr6|540 005655 aa 000006 6000 04 tze 6,ic 005663 STATEMENT 1 ON LINE 1380 status.char_pos = "0"b3; 005656 aa 001746 2350 04 lda 998,ic 007624 = 777777077777 005657 aa 6 00130 3735 20 epp7 pr6|88,* statp 005660 aa 7 00001 3551 00 ansa pr7|1 status.char_pos STATEMENT 1 ON LINE 1381 status.eo = "1"b; 005661 aa 000040 2350 03 lda 32,du 005662 aa 7 00000 2551 00 orsa pr7|0 status.eo STATEMENT 1 ON LINE 1382 end; STATEMENT 1 ON LINE 1387 if status.marker then substr (status_ptr -> istat.lpw, 1, 18) = bit ( bin (bin (rel (addr (buffer_ptr -> tbi.dcw_words)), 18) + divide (bin (status.address) - (buffer_ptr -> tbi.data_offset), WORDS_PER_DCW_TALLY, 12) + 1, 18), 18); 005663 aa 6 00130 2351 20 lda pr6|88,* status.marker 005664 aa 000020 3150 03 cana 16,du 005665 aa 000035 6000 04 tze 29,ic 005722 005666 aa 6 00272 3735 20 epp7 pr6|186,* 005667 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 005670 aa 5 00000 2351 20 lda pr5|0,* tbi.data_offset 005671 aa 000066 7730 00 lrl 54 005672 aa 6 01034 7561 00 stq pr6|540 tbi.data_offset 005673 aa 6 00130 3535 20 epp3 pr6|88,* statp 005674 aa 3 00001 2351 00 lda pr3|1 status.address 005675 aa 000066 7730 00 lrl 54 005676 aa 000000 5330 00 negl 0 005677 aa 6 01034 0331 00 adl pr6|540 tbi.data_offset 005700 aa 000000 5330 00 negl 0 005701 aa 002105 3520 04 epp2 1093,ic 010006 = 000000010000 005702 aa 0 01264 7001 00 tsx0 pr0|692 divide_fx3 005703 aa 000000000000 005704 aa 6 01034 7561 00 stq pr6|540 005705 aa 5 00000 3515 20 epp1 pr5|0,* buffer_ptr 005706 aa 1 00007 3535 00 epp3 pr1|7 tbi.dcw_words 005707 aa 3 00000 6351 00 eaa pr3|0 005710 aa 000066 7730 00 lrl 54 005711 aa 6 01034 0761 00 adq pr6|540 005712 aa 000001 0760 07 adq 1,dl 005713 aa 000003 6050 04 tpl 3,ic 005716 005714 aa 0 00110 6761 00 erq pr0|72 = 777777777777 005715 aa 000001 0760 07 adq 1,dl 005716 aa 000066 7370 00 lls 54 005717 aa 7 00004 3715 20 epp5 pr7|4,* status_ptr 005720 aa 5 00000 3715 20 epp5 pr5|0,* status_ptr 005721 aa 5 00006 5511 60 stba pr5|6,60 istat.lpw 005722 aa 6 01050 2535 00 spri3 pr6|552 STATEMENT 1 ON LINE 1396 if status.initiate then return (0); 005723 aa 6 00130 2351 20 lda pr6|88,* status.initiate 005724 aa 000002 3150 03 cana 2,du 005725 aa 000004 6000 04 tze 4,ic 005731 005726 aa 6 00272 3735 20 epp7 pr6|186,* 005727 aa 7 00006 4501 20 stz pr7|6,* 005730 aa 6 00270 6101 00 rtcd pr6|184 STATEMENT 1 ON LINE 1402 if writing () then do; 005731 aa 001701 3520 04 epp2 961,ic 007632 = 000002000000 005732 aa 000145 6700 04 tsp4 101,ic 006077 005733 aa 6 01034 2351 00 lda pr6|540 005734 aa 400000 3150 03 cana 131072,du 005735 aa 000015 6000 04 tze 13,ic 005752 STATEMENT 1 ON LINE 1403 if status_ptr -> istat.er then return (0); 005736 aa 6 00272 3735 20 epp7 pr6|186,* 005737 aa 7 00004 3715 20 epp5 pr7|4,* status_ptr 005740 aa 5 00000 2351 20 lda pr5|0,* istat.er 005741 aa 200000 3150 03 cana 65536,du 005742 aa 000003 6000 04 tze 3,ic 005745 005743 aa 7 00006 4501 20 stz pr7|6,* 005744 aa 6 00270 6101 00 rtcd pr6|184 STATEMENT 1 ON LINE 1405 else return (buffer_ptr -> tbi.data_len); 005745 aa 7 00002 3535 20 epp3 pr7|2,* buffer_ptr 005746 aa 3 00000 3535 20 epp3 pr3|0,* buffer_ptr 005747 aa 3 00004 2361 00 ldq pr3|4 tbi.data_len 005750 aa 7 00006 7561 20 stq pr7|6,* 005751 aa 6 00270 6101 00 rtcd pr6|184 STATEMENT 1 ON LINE 1406 end; STATEMENT 1 ON LINE 1407 else do; STATEMENT 1 ON LINE 1408 if ascii_mode (buffer_ptr) then do; 005752 aa 6 00272 3735 20 epp7 pr6|186,* 005753 aa 7 00002 3521 20 epp2 pr7|2,* buffer_ptr 005754 aa 6 01042 2521 00 spri2 pr6|546 005755 aa 6 01034 3521 00 epp2 pr6|540 005756 aa 6 01044 2521 00 spri2 pr6|548 005757 aa 6 01040 3521 00 epp2 pr6|544 005760 aa 010000 4310 07 fld 4096,dl 005761 aa 2 00000 7571 00 staq pr2|0 005762 aa 000556 6700 04 tsp4 366,ic 006540 005763 aa 6 01034 2351 00 lda pr6|540 005764 aa 400000 3150 03 cana 131072,du 005765 aa 000026 6000 04 tze 22,ic 006013 STATEMENT 1 ON LINE 1409 buffer_ptr -> tbi.data_len = word_count () * BYTES_PER_WORD - mod (BYTES_PER_WORD - status_tcp (), BYTES_PER_WORD); 005766 aa 001644 3520 04 epp2 932,ic 007632 = 000002000000 005767 aa 000123 6700 04 tsp4 83,ic 006112 005770 aa 000004 2360 07 ldq 4,dl 005771 aa 6 01034 1761 00 sbq pr6|540 005772 aa 002016 3520 04 epp2 1038,ic 010010 = 000000000004 005773 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 005774 aa 6 01034 7561 00 stq pr6|540 005775 aa 001623 3520 04 epp2 915,ic 007620 = 000002000000 005776 aa 000124 6700 04 tsp4 84,ic 006122 005777 aa 6 01035 2361 00 ldq pr6|541 006000 aa 000004 4020 07 mpy 4,dl 006001 aa 000000 5330 00 negl 0 006002 aa 6 01034 0331 00 adl pr6|540 006003 aa 000000 5330 00 negl 0 006004 aa 6 00272 3735 20 epp7 pr6|186,* 006005 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 006006 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 006007 aa 5 00004 7561 00 stq pr5|4 tbi.data_len STATEMENT 1 ON LINE 1411 buffer_ptr -> tbi.bit_len = (buffer_ptr -> tbi.data_len) * BITS_PER_BYTE; 006010 aa 000011 4020 07 mpy 9,dl 006011 aa 5 00005 7561 00 stq pr5|5 tbi.bit_len STATEMENT 1 ON LINE 1412 end; 006012 aa 000060 7100 04 tra 48,ic 006072 STATEMENT 1 ON LINE 1413 else do; STATEMENT 1 ON LINE 1414 buffer_ptr -> tbi.bit_len = BITS_PER_WORD * (word_count () - 1 - bin (status.eo)) + BITS_PER_CHAR * (BITS_PER_CHAR - mod (BITS_PER_CHAR - status_tcp (), BITS_PER_CHAR)); 006013 aa 001617 3520 04 epp2 911,ic 007632 = 000002000000 006014 aa 000076 6700 04 tsp4 62,ic 006112 006015 aa 000006 2360 07 ldq 6,dl 006016 aa 6 01034 1761 00 sbq pr6|540 006017 aa 001770 3520 04 epp2 1016,ic 010007 = 000000000006 006020 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 006021 aa 6 01034 7561 00 stq pr6|540 006022 aa 2 00000 2361 00 ldq pr2|0 BITS_PER_CHAR 006023 aa 6 01034 1761 00 sbq pr6|540 006024 aa 2 00000 4021 00 mpy pr2|0 BITS_PER_CHAR 006025 aa 6 01052 7571 00 staq pr6|554 006026 aa 001604 3520 04 epp2 900,ic 007632 = 000002000000 006027 aa 000073 6700 04 tsp4 59,ic 006122 006030 aa 6 01034 2361 00 ldq pr6|540 006031 aa 000001 1760 07 sbq 1,dl 006032 aa 6 01034 7561 00 stq pr6|540 006033 aa 6 00130 2351 20 lda pr6|88,* status.eo 006034 aa 000014 7350 00 als 12 006035 aa 000107 7730 00 lrl 71 006036 aa 000000 5330 00 negl 0 006037 aa 6 01034 0331 00 adl pr6|540 006040 aa 6 01054 7571 00 staq pr6|556 006041 aa 000044 2360 07 ldq 36,dl 006042 aa 6 01054 3521 00 epp2 pr6|556 006043 aa 0 00671 7001 00 tsx0 pr0|441 mpfx2 006044 aa 6 01052 0771 00 adaq pr6|554 006045 aa 6 00272 3735 20 epp7 pr6|186,* 006046 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 006047 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 006050 aa 5 00005 7561 00 stq pr5|5 tbi.bit_len STATEMENT 1 ON LINE 1417 if (status.major = "0000"b) & ((status.sub & "001010"b) = "000000"b) then buffer_ptr -> tbi.bit_len = buffer_ptr -> tbi.bit_len - bin (substr (status.sub, 1, 3)); 006051 aa 6 00130 2351 20 lda pr6|88,* status.major 006052 aa 170000 3150 03 cana 61440,du 006053 aa 000014 6010 04 tnz 12,ic 006067 006054 aa 6 00130 2351 20 lda pr6|88,* status.sub 006055 aa 000006 7350 00 als 6 006056 aa 0 00014 3771 00 anaq pr0|12 = 770000000000 000000000000 006057 aa 120000 3150 03 cana 40960,du 006060 aa 000007 6010 04 tnz 7,ic 006067 006061 aa 6 00130 2351 20 lda pr6|88,* status.sub 006062 aa 000006 7350 00 als 6 006063 aa 000105 7730 00 lrl 69 006064 aa 000000 5330 00 negl 0 006065 aa 5 00005 0331 00 adl pr5|5 tbi.bit_len 006066 aa 5 00005 7561 00 stq pr5|5 tbi.bit_len STATEMENT 1 ON LINE 1419 buffer_ptr -> tbi.data_len = divide (buffer_ptr -> tbi.bit_len, BITS_PER_BYTE, 21); 006067 aa 5 00005 2361 00 ldq pr5|5 tbi.bit_len 006070 aa 000011 5060 07 div 9,dl 006071 aa 5 00004 7561 00 stq pr5|4 tbi.data_len STATEMENT 1 ON LINE 1420 end; STATEMENT 1 ON LINE 1421 return (buffer_ptr -> tbi.data_len); 006072 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 006073 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 006074 aa 5 00004 2361 00 ldq pr5|4 tbi.data_len 006075 aa 7 00006 7561 20 stq pr7|6,* 006076 aa 6 00270 6101 00 rtcd pr6|184 STATEMENT 1 ON LINE 1422 end; BEGIN PROCEDURE writing ENTRY TO writing STATEMENT 1 ON LINE 1424 writing: proc () returns (bit (1) aligned); 006077 aa 6 00276 6501 00 spri4 pr6|190 006100 aa 6 00300 2521 00 spri2 pr6|192 STATEMENT 1 ON LINE 1427 return ((addr (buffer_ptr -> tbi.idcw_word) -> idcw.command & "10"b3) ^= "00"b3); 006101 aa 6 00272 3735 20 epp7 pr6|186,* 006102 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 006103 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 006104 aa 5 00006 2351 00 lda pr5|6 idcw.command 006105 aa 0 00014 3771 00 anaq pr0|12 = 770000000000 000000000000 006106 aa 100000 3150 03 cana 32768,du 006107 aa 0 00515 7001 00 tsx0 pr0|333 r_ne_as 006110 aa 2 00002 7551 20 sta pr2|2,* 006111 aa 6 00276 6101 00 rtcd pr6|190 STATEMENT 1 ON LINE 1429 end writing; END PROCEDURE writing BEGIN PROCEDURE status_tcp ENTRY TO status_tcp STATEMENT 1 ON LINE 1431 status_tcp: proc () returns (fixed bin (3)); 006112 aa 6 00304 6501 00 spri4 pr6|196 006113 aa 6 00306 2521 00 spri2 pr6|198 STATEMENT 1 ON LINE 1434 return (bin (status.char_pos, 3)); 006114 aa 6 00130 3735 20 epp7 pr6|88,* statp 006115 aa 7 00001 2351 00 lda pr7|1 status.char_pos 006116 aa 000022 7350 00 als 18 006117 aa 000105 7730 00 lrl 69 006120 aa 2 00002 7561 20 stq pr2|2,* 006121 aa 6 00304 6101 00 rtcd pr6|196 STATEMENT 1 ON LINE 1436 end status_tcp; END PROCEDURE status_tcp BEGIN PROCEDURE word_count ENTRY TO word_count STATEMENT 1 ON LINE 1438 word_count: proc () returns (fixed bin (19)); 006122 aa 6 00312 6501 00 spri4 pr6|202 006123 aa 6 00314 2521 00 spri2 pr6|204 STATEMENT 1 ON LINE 1445 wc = 0; 006124 aa 6 00324 4501 00 stz pr6|212 wc STATEMENT 1 ON LINE 1446 dcw_idx = 1; 006125 aa 000001 2360 07 ldq 1,dl 006126 aa 6 00320 7561 00 stq pr6|208 dcw_idx STATEMENT 1 ON LINE 1447 do dcw_ptr = addr (buffer_ptr -> tbi.dcw_words) repeat addrel (dcw_ptr, 1) while ((dcw_idx <= buffer_ptr -> tbi.ndcws) & (dcw_ptr ^= ptr (wksp, bin (substr (status_ptr -> istat.lpw, 1, 18))))); 006127 aa 6 00272 3735 20 epp7 pr6|186,* 006130 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 006131 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 006132 aa 5 00007 3535 00 epp3 pr5|7 tbi.dcw_words 006133 aa 6 00322 2535 00 spri3 pr6|210 dcw_ptr 006134 aa 6 00272 3735 20 epp7 pr6|186,* 006135 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 006136 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 006137 aa 5 00001 2361 00 ldq pr5|1 tbi.ndcws 006140 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 006141 aa 6 00320 1161 00 cmpq pr6|208 dcw_idx 006142 aa 000033 6040 04 tmi 27,ic 006175 006143 aa 7 00004 3535 20 epp3 pr7|4,* status_ptr 006144 aa 3 00000 3535 20 epp3 pr3|0,* status_ptr 006145 aa 3 00006 2351 00 lda pr3|6 istat.lpw 006146 aa 000066 7730 00 lrl 54 006147 aa 6 00116 3521 20 epp2 pr6|78,* wksp 006150 aa 000000 3120 06 eawp2 0,ql 006151 aa 6 01056 2521 00 spri2 pr6|558 006152 aa 6 01056 2371 00 ldaq pr6|558 006153 aa 6 00322 6771 00 eraq pr6|210 dcw_ptr 006154 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 006155 aa 000020 6000 04 tze 16,ic 006175 STATEMENT 1 ON LINE 1450 if dcw_ptr -> dcw.tally then wc = wc + bin (dcw_ptr -> dcw.tally); 006156 aa 6 00322 2351 20 lda pr6|210,* dcw.tally 006157 aa 000030 7350 00 als 24 006160 aa 6 01060 7551 00 sta pr6|560 dcw.tally 006161 aa 000005 6000 04 tze 5,ic 006166 006162 aa 000074 7730 00 lrl 60 006163 aa 6 00324 0331 00 adl pr6|212 wc 006164 aa 6 00324 7561 00 stq pr6|212 wc 006165 aa 000003 7100 04 tra 3,ic 006170 STATEMENT 1 ON LINE 1452 else wc = wc + WORDS_PER_DCW_TALLY; 006166 aa 010000 2360 07 ldq 4096,dl 006167 aa 6 00324 0561 00 asq pr6|212 wc STATEMENT 1 ON LINE 1453 dcw_idx = dcw_idx + 1; 006170 aa 6 00320 0541 00 aos pr6|208 dcw_idx STATEMENT 1 ON LINE 1454 end; 006171 aa 6 00322 3515 20 epp1 pr6|210,* dcw_ptr 006172 aa 000001 0510 03 adwp1 1,du 006173 aa 6 00322 2515 00 spri1 pr6|210 dcw_ptr 006174 aa 777740 7100 04 tra -32,ic 006134 STATEMENT 1 ON LINE 1455 return (wc - bin (status.tally)); 006175 aa 6 00130 3535 20 epp3 pr6|88,* statp 006176 aa 3 00001 2361 00 ldq pr3|1 status.tally 006177 aa 0 00410 3771 00 anaq pr0|264 = 000000000000 000000007777 006200 aa 000000 5330 00 negl 0 006201 aa 6 00324 0331 00 adl pr6|212 wc 006202 aa 6 00314 3515 20 epp1 pr6|204,* 006203 aa 1 00002 7561 20 stq pr1|2,* 006204 aa 6 00312 6101 00 rtcd pr6|202 STATEMENT 1 ON LINE 1457 end word_count; END PROCEDURE word_count END PROCEDURE get_io_byte_count BEGIN PROCEDURE run ENTRY TO run STATEMENT 1 ON LINE 1466 run: proc (write_flag, code); 006205 aa 6 00326 6501 00 spri4 pr6|214 006206 aa 6 00330 2521 00 spri2 pr6|216 STATEMENT 1 ON LINE 1474 if tai.queue_list_offset = 0 then do; 006207 aa 6 00116 3735 20 epp7 pr6|78,* wksp 006210 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 006211 aa 000066 7730 00 lrl 54 006212 aa 000131 6010 04 tnz 89,ic 006343 STATEMENT 1 ON LINE 1475 call set_timeout (TIMEOUT_IO); 006213 aa 001401 3520 04 epp2 769,ic 007614 = 000002000000 006214 aa 000212 6700 04 tsp4 138,ic 006426 STATEMENT 1 ON LINE 1476 call connect (bin (rel (addr (ptr (wksp, semi_queued_offset) -> tbi.idcw_word))), code); 006215 aa 6 00112 2351 00 lda pr6|74 semi_queued_offset 006216 aa 000066 7730 00 lrl 54 006217 aa 6 00116 3521 20 epp2 pr6|78,* wksp 006220 aa 000000 3120 06 eawp2 0,ql 006221 aa 2 00006 3735 00 epp7 pr2|6 tbi.idcw_word 006222 aa 7 00000 6351 00 eaa pr7|0 006223 aa 000066 7730 00 lrl 54 006224 aa 6 01061 7561 00 stq pr6|561 006225 aa 6 01061 3521 00 epp2 pr6|561 006226 aa 6 01064 2521 00 spri2 pr6|564 006227 aa 6 00330 3715 20 epp5 pr6|216,* 006230 aa 5 00004 3521 20 epp2 pr5|4,* code 006231 aa 6 01066 2521 00 spri2 pr6|566 006232 aa 6 01062 3521 00 epp2 pr6|562 006233 aa 010000 4310 07 fld 4096,dl 006234 aa 2 00000 7571 00 staq pr2|0 006235 aa 6 01072 6535 00 spri7 pr6|570 006236 aa 000221 6700 04 tsp4 145,ic 006457 STATEMENT 1 ON LINE 1477 if code = 0 then do; 006237 aa 6 00330 3735 20 epp7 pr6|216,* 006240 aa 7 00004 2361 20 ldq pr7|4,* code 006241 aa 000016 6010 04 tnz 14,ic 006257 STATEMENT 1 ON LINE 1478 if write_flag then tai.write_queued = "1"b; 006242 aa 7 00002 2351 20 lda pr7|2,* write_flag 006243 aa 400000 3150 03 cana 131072,du 006244 aa 000005 6000 04 tze 5,ic 006251 006245 aa 200000 2350 07 lda 65536,dl 006246 aa 6 00116 3715 20 epp5 pr6|78,* wksp 006247 aa 5 00020 2551 00 orsa pr5|16 tai.write_queued 006250 aa 000004 7100 04 tra 4,ic 006254 STATEMENT 1 ON LINE 1480 else do; STATEMENT 1 ON LINE 1481 tai.read_queued = "1"b; 006251 aa 400000 2350 07 lda 131072,dl 006252 aa 6 00116 3715 20 epp5 pr6|78,* wksp 006253 aa 5 00020 2551 00 orsa pr5|16 tai.read_queued STATEMENT 1 ON LINE 1482 end; STATEMENT 1 ON LINE 1483 tai.queue_list_offset = semi_queued_offset; 006254 aa 6 00112 2351 00 lda pr6|74 semi_queued_offset 006255 aa 5 00014 5511 60 stba pr5|12,60 tai.queue_list_offset STATEMENT 1 ON LINE 1484 end; 006256 aa 000075 7100 04 tra 61,ic 006353 STATEMENT 1 ON LINE 1485 else do; STATEMENT 1 ON LINE 1486 do bufp = ptr (wksp, semi_queued_offset) repeat ptr (wksp, bufp -> tbi.next_state_offset) while (rel (bufp) ^= ""b); 006257 aa 6 00112 2351 00 lda pr6|74 semi_queued_offset 006260 aa 000066 7730 00 lrl 54 006261 aa 6 00116 3521 20 epp2 pr6|78,* wksp 006262 aa 000000 3120 06 eawp2 0,ql 006263 aa 6 00334 2521 00 spri2 pr6|220 bufp 006264 aa 6 00334 6351 20 eaa pr6|220,* bufp 006265 aa 000022 6000 04 tze 18,ic 006307 STATEMENT 1 ON LINE 1488 if write_flag then bufp -> tbi.state = SUSPENDED_STATE; 006266 aa 6 00330 3735 20 epp7 pr6|216,* 006267 aa 7 00002 2351 20 lda pr7|2,* write_flag 006270 aa 400000 3150 03 cana 131072,du 006271 aa 000005 6000 04 tze 5,ic 006276 006272 aa 003000 2350 07 lda 1536,dl 006273 aa 6 00334 3715 20 epp5 pr6|220,* bufp 006274 aa 5 00001 5511 10 stba pr5|1,10 tbi.state 006275 aa 000004 7100 04 tra 4,ic 006301 STATEMENT 1 ON LINE 1490 else bufp -> tbi.state = READY_STATE; 006276 aa 001000 2350 07 lda 512,dl 006277 aa 6 00334 3715 20 epp5 pr6|220,* bufp 006300 aa 5 00001 5511 10 stba pr5|1,10 tbi.state STATEMENT 1 ON LINE 1491 end; 006301 aa 5 00001 2351 00 lda pr5|1 tbi.next_state_offset 006302 aa 000066 7730 00 lrl 54 006303 aa 6 00116 3521 20 epp2 pr6|78,* wksp 006304 aa 000000 3120 06 eawp2 0,ql 006305 aa 6 00334 2521 00 spri2 pr6|220 bufp 006306 aa 777756 7100 04 tra -18,ic 006264 STATEMENT 1 ON LINE 1492 if write_flag then call add_to_list (tai.susp_list_offset, semi_queued_offset); 006307 aa 6 00330 3735 20 epp7 pr6|216,* 006310 aa 7 00002 2351 20 lda pr7|2,* write_flag 006311 aa 400000 3150 03 cana 131072,du 006312 aa 000015 6000 04 tze 13,ic 006327 006313 aa 000022 7270 07 lxl7 18,dl 006314 aa 6 00116 3715 20 epp5 pr6|78,* wksp 006315 aa 5 00014 3521 00 epp2 pr5|12 tai.susp_list_offset 006316 aa 2 00000 5035 17 abd pr2|0,7 006317 aa 6 01064 2521 00 spri2 pr6|564 006320 aa 6 00112 3521 00 epp2 pr6|74 semi_queued_offset 006321 aa 6 01066 2521 00 spri2 pr6|566 006322 aa 6 01062 3521 00 epp2 pr6|562 006323 aa 010000 4310 07 fld 4096,dl 006324 aa 2 00000 7571 00 staq pr2|0 006325 aa 000350 6700 04 tsp4 232,ic 006675 006326 aa 000025 7100 04 tra 21,ic 006353 STATEMENT 1 ON LINE 1494 else call add_to_list (tai.free_list_offset, semi_queued_offset); 006327 aa 000022 7270 07 lxl7 18,dl 006330 aa 6 00116 3715 20 epp5 pr6|78,* wksp 006331 aa 5 00013 3521 00 epp2 pr5|11 tai.free_list_offset 006332 aa 2 00000 5035 17 abd pr2|0,7 006333 aa 6 01064 2521 00 spri2 pr6|564 006334 aa 6 00112 3521 00 epp2 pr6|74 semi_queued_offset 006335 aa 6 01066 2521 00 spri2 pr6|566 006336 aa 6 01062 3521 00 epp2 pr6|562 006337 aa 010000 4310 07 fld 4096,dl 006340 aa 2 00000 7571 00 staq pr2|0 006341 aa 000334 6700 04 tsp4 220,ic 006675 STATEMENT 1 ON LINE 1495 end; STATEMENT 1 ON LINE 1496 end; 006342 aa 000011 7100 04 tra 9,ic 006353 STATEMENT 1 ON LINE 1497 else call add_to_list (tai.queue_list_offset, semi_queued_offset); 006343 aa 7 00014 3521 00 epp2 pr7|12 tai.queue_list_offset 006344 aa 6 01064 2521 00 spri2 pr6|564 006345 aa 6 00112 3521 00 epp2 pr6|74 semi_queued_offset 006346 aa 6 01066 2521 00 spri2 pr6|566 006347 aa 6 01062 3521 00 epp2 pr6|562 006350 aa 010000 4310 07 fld 4096,dl 006351 aa 2 00000 7571 00 staq pr2|0 006352 aa 000323 6700 04 tsp4 211,ic 006675 STATEMENT 1 ON LINE 1499 end run; 006353 aa 6 00326 6101 00 rtcd pr6|214 END PROCEDURE run BEGIN PROCEDURE keep_it_going ENTRY TO keep_it_going STATEMENT 1 ON LINE 1508 keep_it_going: proc (status_ptr, code); 006354 aa 6 00336 6501 00 spri4 pr6|222 006355 aa 6 00340 2521 00 spri2 pr6|224 STATEMENT 1 ON LINE 1514 if (status_ptr -> istat.level = IO_TERMINATE_INTERRUPT_LEVEL) & (tai.queue_list_offset ^= 0) then do; 006356 aa 6 00116 3735 20 epp7 pr6|78,* wksp 006357 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 006360 aa 000066 7730 00 lrl 54 006361 aa 6 01074 7561 00 stq pr6|572 tai.queue_list_offset 006362 aa 2 00002 3715 20 epp5 pr2|2,* status_ptr 006363 aa 5 00000 3715 20 epp5 pr5|0,* status_ptr 006364 aa 5 00001 2361 00 ldq pr5|1 istat.level 006365 aa 000003 1160 07 cmpq 3,dl 006366 aa 000036 6010 04 tnz 30,ic 006424 006367 aa 6 01074 2361 00 ldq pr6|572 tai.queue_list_offset 006370 aa 000034 6000 04 tze 28,ic 006424 STATEMENT 1 ON LINE 1515 tai.times_tape_stopped = tai.times_tape_stopped + 1; 006371 aa 7 00031 2351 00 lda pr7|25 tai.times_tape_stopped 006372 aa 000044 7330 00 lrs 36 006373 aa 000001 0330 07 adl 1,dl 006374 aa 7 00031 7561 00 stq pr7|25 tai.times_tape_stopped STATEMENT 1 ON LINE 1516 semi_queued_offset = tai.queue_list_offset; 006375 aa 6 01074 2361 00 ldq pr6|572 tai.queue_list_offset 006376 aa 000066 7370 00 lls 54 006377 aa 6 00112 5511 60 stba pr6|74,60 semi_queued_offset STATEMENT 1 ON LINE 1517 tai.queue_list_offset = 0; 006400 aa 000000 2350 07 lda 0,dl 006401 aa 7 00014 5511 60 stba pr7|12,60 tai.queue_list_offset STATEMENT 1 ON LINE 1518 call run ((ptr (wksp, semi_queued_offset) -> tbi.idcw_word & "10"b3) ^= "0"b3, code); 006402 aa 6 00112 2351 00 lda pr6|74 semi_queued_offset 006403 aa 000066 7730 00 lrl 54 006404 aa 7 00000 3515 00 epp1 pr7|0 006405 aa 000000 3114 06 eawp1 0,ql 006406 aa 1 00006 2351 00 lda pr1|6 tbi.idcw_word 006407 aa 100000 3150 03 cana 32768,du 006410 aa 0 00515 7001 00 tsx0 pr0|333 r_ne_as 006411 aa 6 01074 7551 00 sta pr6|572 006412 aa 6 01074 3521 00 epp2 pr6|572 006413 aa 6 01100 2521 00 spri2 pr6|576 006414 aa 6 00340 3535 20 epp3 pr6|224,* 006415 aa 3 00004 3521 20 epp2 pr3|4,* code 006416 aa 6 01102 2521 00 spri2 pr6|578 006417 aa 6 01076 3521 00 epp2 pr6|574 006420 aa 010000 4310 07 fld 4096,dl 006421 aa 2 00000 7571 00 staq pr2|0 006422 aa 777563 6700 04 tsp4 -141,ic 006205 STATEMENT 1 ON LINE 1519 end; 006423 aa 000002 7100 04 tra 2,ic 006425 STATEMENT 1 ON LINE 1520 else code = 0; 006424 aa 2 00004 4501 20 stz pr2|4,* code STATEMENT 1 ON LINE 1522 end keep_it_going; 006425 aa 6 00336 6101 00 rtcd pr6|222 END PROCEDURE keep_it_going BEGIN PROCEDURE set_timeout ENTRY TO set_timeout STATEMENT 1 ON LINE 1526 set_timeout: proc (time); 006426 aa 6 00344 6501 00 spri4 pr6|228 006427 aa 6 00346 2521 00 spri2 pr6|230 STATEMENT 1 ON LINE 1533 if time ^= tai.cur_timeout then do; 006430 aa 2 00002 2371 20 ldaq pr2|2,* time 006431 aa 6 00116 3735 20 epp7 pr6|78,* wksp 006432 aa 7 00006 1171 00 cmpaq pr7|6 tai.cur_timeout 006433 aa 000023 6000 04 tze 19,ic 006456 STATEMENT 1 ON LINE 1534 call ioi_$timeout (tai.ioi_index, time, code); 006434 aa 7 00000 3521 00 epp2 pr7|0 tai.ioi_index 006435 aa 6 01110 2521 00 spri2 pr6|584 006436 aa 6 00346 3715 20 epp5 pr6|230,* 006437 aa 5 00002 3521 20 epp2 pr5|2,* time 006440 aa 6 01112 2521 00 spri2 pr6|586 006441 aa 6 00352 3521 00 epp2 pr6|234 code 006442 aa 6 01114 2521 00 spri2 pr6|588 006443 aa 6 01106 6211 00 eax1 pr6|582 006444 aa 014000 4310 07 fld 6144,dl 006445 aa 6 00044 3701 20 epp4 pr6|36,* 006446 la 4 00016 3521 20 epp2 pr4|14,* ioi_$timeout 006447 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1535 if code = 0 then tai.cur_timeout = time; 006450 aa 6 00352 2361 00 ldq pr6|234 code 006451 aa 000005 6010 04 tnz 5,ic 006456 006452 aa 6 00346 3735 20 epp7 pr6|230,* 006453 aa 7 00002 2371 20 ldaq pr7|2,* time 006454 aa 6 00116 3715 20 epp5 pr6|78,* wksp 006455 aa 5 00006 7571 00 staq pr5|6 tai.cur_timeout STATEMENT 1 ON LINE 1537 end; STATEMENT 1 ON LINE 1539 end set_timeout; 006456 aa 6 00344 6101 00 rtcd pr6|228 END PROCEDURE set_timeout BEGIN PROCEDURE connect ENTRY TO connect STATEMENT 1 ON LINE 1543 connect: procedure (offset, code); 006457 aa 6 00354 6501 00 spri4 pr6|236 006460 aa 6 00356 2521 00 spri2 pr6|238 STATEMENT 1 ON LINE 1554 give_up_time = clock () + TEN_SECONDS; 006461 aa 0 01435 7001 00 tsx0 pr0|797 clock_mac 006462 aa 771376 0770 04 adaq -3330,ic 000060 = 000000000000 000046113200 006463 aa 6 00364 7571 00 staq pr6|244 give_up_time STATEMENT 1 ON LINE 1555 do while ("1"b); STATEMENT 1 ON LINE 1556 do connect_attempt_count = 1 to 10; 006464 aa 000001 2360 07 ldq 1,dl 006465 aa 6 00362 7561 00 stq pr6|242 connect_attempt_count 006466 aa 6 00362 2361 00 ldq pr6|242 connect_attempt_count 006467 aa 000012 1160 07 cmpq 10,dl 006470 aa 000025 6054 04 tpnz 21,ic 006515 STATEMENT 1 ON LINE 1557 call ioi_$connect (tai.ioi_index, offset, code); 006471 aa 6 00116 3521 20 epp2 pr6|78,* tai.ioi_index 006472 aa 6 01120 2521 00 spri2 pr6|592 006473 aa 6 00356 3735 20 epp7 pr6|238,* 006474 aa 7 00002 3521 20 epp2 pr7|2,* offset 006475 aa 6 01122 2521 00 spri2 pr6|594 006476 aa 7 00004 3521 20 epp2 pr7|4,* code 006477 aa 6 01124 2521 00 spri2 pr6|596 006500 aa 6 01116 6211 00 eax1 pr6|590 006501 aa 014000 4310 07 fld 6144,dl 006502 aa 6 00044 3701 20 epp4 pr6|36,* 006503 la 4 00010 3521 20 epp2 pr4|8,* ioi_$connect 006504 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1558 if code ^= error_table_$device_active then return; 006505 aa 6 00356 3735 20 epp7 pr6|238,* 006506 aa 7 00004 2361 20 ldq pr7|4,* code 006507 aa 6 00044 3701 20 epp4 pr6|36,* 006510 la 4 00060 1161 20 cmpq pr4|48,* error_table_$device_active 006511 aa 000002 6000 04 tze 2,ic 006513 006512 aa 6 00354 6101 00 rtcd pr6|236 STATEMENT 1 ON LINE 1560 end; 006513 aa 6 00362 0541 00 aos pr6|242 connect_attempt_count 006514 aa 777752 7100 04 tra -22,ic 006466 STATEMENT 1 ON LINE 1561 if clock () > give_up_time then return; 006515 aa 0 01435 7001 00 tsx0 pr0|797 clock_mac 006516 aa 6 00364 1171 00 cmpaq pr6|244 give_up_time 006517 aa 777745 6044 04 tmoz -27,ic 006464 006520 aa 6 00354 6101 00 rtcd pr6|236 STATEMENT 1 ON LINE 1563 end; 006521 aa 777743 7100 04 tra -29,ic 006464 STATEMENT 1 ON LINE 1565 end connect; 006522 aa 6 00354 6101 00 rtcd pr6|236 END PROCEDURE connect BEGIN PROCEDURE get_tdcw_ptr ENTRY TO get_tdcw_ptr STATEMENT 1 ON LINE 1570 get_tdcw_ptr: proc (buffer_ptr) returns (ptr); 006523 aa 6 00366 6501 00 spri4 pr6|246 006524 aa 6 00370 2521 00 spri2 pr6|248 STATEMENT 1 ON LINE 1575 return ( addrel (addr (buffer_ptr -> tbi.dcw_words), divide ((buffer_ptr -> tbi.data_len) - 1, BYTES_PER_DCW_TALLY, 17) + 1)); 006525 aa 2 00002 3735 20 epp7 pr2|2,* buffer_ptr 006526 aa 7 00000 3735 20 epp7 pr7|0,* buffer_ptr 006527 aa 7 00007 3715 00 epp5 pr7|7 tbi.dcw_words 006530 aa 7 00004 2361 00 ldq pr7|4 tbi.data_len 006531 aa 000001 1760 07 sbq 1,dl 006532 aa 040000 5060 07 div 16384,dl 006533 aa 000001 0760 07 adq 1,dl 006534 aa 5 00000 3515 06 epp1 pr5|0,ql 006535 aa 000000 0510 03 adwp1 0,du 006536 aa 2 00004 2515 20 spri1 pr2|4,* 006537 aa 6 00366 6101 00 rtcd pr6|246 STATEMENT 1 ON LINE 1579 end get_tdcw_ptr; END PROCEDURE get_tdcw_ptr BEGIN PROCEDURE ascii_mode ENTRY TO ascii_mode STATEMENT 1 ON LINE 1584 ascii_mode: proc (buffer_ptr) returns (bit (1) aligned); 006540 aa 6 00374 6501 00 spri4 pr6|252 006541 aa 6 00376 2521 00 spri2 pr6|254 STATEMENT 1 ON LINE 1589 return ((buffer_ptr -> tbi.modes.data_code = "03"b3) | (buffer_ptr -> tbi.modes.data_code = "25"b3)); 006542 aa 2 00002 3735 20 epp7 pr2|2,* buffer_ptr 006543 aa 7 00000 3735 20 epp7 pr7|0,* buffer_ptr 006544 aa 7 00002 2351 00 lda pr7|2 tbi.data_code 006545 aa 0 00014 3771 00 anaq pr0|12 = 770000000000 000000000000 006546 aa 250000 1150 03 cmpa 86016,du 006547 aa 6 01126 7551 00 sta pr6|598 tbi.data_code 006550 aa 0 00512 7001 00 tsx0 pr0|330 r_e_as 006551 aa 6 01127 7551 00 sta pr6|599 006552 aa 6 01126 2351 00 lda pr6|598 tbi.data_code 006553 aa 030000 1150 03 cmpa 12288,du 006554 aa 0 00512 7001 00 tsx0 pr0|330 r_e_as 006555 aa 6 01127 2751 00 ora pr6|599 006556 aa 2 00004 7551 20 sta pr2|4,* 006557 aa 6 00374 6101 00 rtcd pr6|252 STATEMENT 1 ON LINE 1591 end ascii_mode; END PROCEDURE ascii_mode BEGIN PROCEDURE fill_dcw_list ENTRY TO fill_dcw_list STATEMENT 1 ON LINE 1595 fill_dcw_list: proc (buffer_ptr); 006560 aa 6 00402 6501 00 spri4 pr6|258 006561 aa 6 00404 2521 00 spri2 pr6|260 STATEMENT 1 ON LINE 1603 do dcwp = first_dcwp () repeat next_dcwp () while (full_dcw_tally_needed ()); 006562 aa 001026 3520 04 epp2 534,ic 007610 = 000002000000 006563 aa 000046 6700 04 tsp4 38,ic 006631 006564 aa 001020 3520 04 epp2 528,ic 007604 = 000002000000 006565 aa 000101 6700 04 tsp4 65,ic 006666 006566 aa 6 01130 2351 00 lda pr6|600 006567 aa 400000 3150 03 cana 131072,du 006570 aa 000021 6000 04 tze 17,ic 006611 STATEMENT 1 ON LINE 1604 dcw.address = rel (dcw_addr_ptr); 006571 aa 6 00410 6351 20 eaa pr6|264,* dcw_addr_ptr 006572 aa 6 00122 3735 20 epp7 pr6|82,* dcw.address 006573 aa 7 00000 5511 60 stba pr7|0,60 dcw.address STATEMENT 1 ON LINE 1605 dcw.char_pos = "0"b3; 006574 aa 001030 2350 04 lda 536,ic 007624 = 777777077777 006575 aa 6 00122 3551 20 ansa pr6|82,* dcw.char_pos STATEMENT 1 ON LINE 1606 dcw.m64 = "0"b; 006576 aa 001144 2350 04 lda 612,ic 007742 = 777777737777 006577 aa 6 00122 3551 20 ansa pr6|82,* dcw.m64 STATEMENT 1 ON LINE 1607 dcw.type = "01"b; 006600 aa 010000 2350 07 lda 4096,dl 006601 aa 6 00122 6751 20 era pr6|82,* dcw.type 006602 aa 030000 3750 07 ana 12288,dl 006603 aa 6 00122 6551 20 ersa pr6|82,* dcw.type STATEMENT 1 ON LINE 1608 dcw.tally = "0"b; 006604 aa 000776 2350 04 lda 510,ic 007602 = 777777770000 006605 aa 6 00122 3551 20 ansa pr6|82,* dcw.tally STATEMENT 1 ON LINE 1609 end; 006606 aa 001002 3520 04 epp2 514,ic 007610 = 000002000000 006607 aa 000044 6700 04 tsp4 36,ic 006653 006610 aa 777754 7100 04 tra -20,ic 006564 STATEMENT 1 ON LINE 1613 dcw.address = rel (dcw_addr_ptr); 006611 aa 6 00410 6351 20 eaa pr6|264,* dcw_addr_ptr 006612 aa 6 00122 3735 20 epp7 pr6|82,* dcw.address 006613 aa 7 00000 5511 60 stba pr7|0,60 dcw.address STATEMENT 1 ON LINE 1614 dcw.char_pos = "0"b3; 006614 aa 001010 2350 04 lda 520,ic 007624 = 777777077777 006615 aa 6 00122 3551 20 ansa pr6|82,* dcw.char_pos STATEMENT 1 ON LINE 1615 dcw.m64 = "0"b; 006616 aa 001124 2350 04 lda 596,ic 007742 = 777777737777 006617 aa 6 00122 3551 20 ansa pr6|82,* dcw.m64 STATEMENT 1 ON LINE 1616 dcw.type = "00"b; 006620 aa 001130 2350 04 lda 600,ic 007750 = 777777747777 006621 aa 6 00122 3551 20 ansa pr6|82,* dcw.type STATEMENT 1 ON LINE 1617 dcw.tally = bit (bin (words_left, 12), 12); 006622 aa 6 00412 2351 00 lda pr6|266 words_left 006623 aa 000002 6050 04 tpl 2,ic 006625 006624 aa 000000 5310 00 neg 0 006625 aa 0 00300 3771 00 anaq pr0|192 = 000000007777 777777777777 006626 aa 6 00122 3715 20 epp5 pr6|82,* dcw.tally 006627 aa 5 00000 7511 03 stca pr5|0,03 dcw.tally STATEMENT 1 ON LINE 1618 return; 006630 aa 6 00402 6101 00 rtcd pr6|258 STATEMENT 1 ON LINE 1647 end fill_dcw_list; BEGIN PROCEDURE first_dcwp ENTRY TO first_dcwp STATEMENT 1 ON LINE 1622 first_dcwp: proc returns (ptr); 006631 aa 6 00414 6501 00 spri4 pr6|268 006632 aa 6 00416 2521 00 spri2 pr6|270 STATEMENT 1 ON LINE 1625 words_left = divide ((buffer_ptr -> tbi.data_len) - 1, BYTES_PER_WORD, 18) + 1; 006633 aa 6 00404 3735 20 epp7 pr6|260,* 006634 aa 7 00002 3715 20 epp5 pr7|2,* buffer_ptr 006635 aa 5 00000 3715 20 epp5 pr5|0,* buffer_ptr 006636 aa 5 00004 2361 00 ldq pr5|4 tbi.data_len 006637 aa 000001 1760 07 sbq 1,dl 006640 aa 000004 5060 07 div 4,dl 006641 aa 000001 0760 07 adq 1,dl 006642 aa 6 00412 7561 00 stq pr6|266 words_left STATEMENT 1 ON LINE 1626 dcw_addr_ptr = ptr (wksp, buffer_ptr -> tbi.data_offset); 006643 aa 5 00000 2351 00 lda pr5|0 tbi.data_offset 006644 aa 000066 7730 00 lrl 54 006645 aa 6 00116 3515 20 epp1 pr6|78,* wksp 006646 aa 000000 3114 06 eawp1 0,ql 006647 aa 6 00410 2515 00 spri1 pr6|264 dcw_addr_ptr STATEMENT 1 ON LINE 1627 return (addr (buffer_ptr -> tbi.dcw_words)); 006650 aa 5 00007 3535 00 epp3 pr5|7 tbi.dcw_words 006651 aa 2 00002 2535 20 spri3 pr2|2,* 006652 aa 6 00414 6101 00 rtcd pr6|268 STATEMENT 1 ON LINE 1629 end first_dcwp; END PROCEDURE first_dcwp BEGIN PROCEDURE next_dcwp ENTRY TO next_dcwp STATEMENT 1 ON LINE 1631 next_dcwp: proc returns (ptr); 006653 aa 6 00422 6501 00 spri4 pr6|274 006654 aa 6 00424 2521 00 spri2 pr6|276 STATEMENT 1 ON LINE 1634 words_left = words_left - WORDS_PER_DCW_TALLY; 006655 aa 010000 3360 07 lcq 4096,dl 006656 aa 6 00412 0561 00 asq pr6|266 words_left STATEMENT 1 ON LINE 1635 dcw_addr_ptr = addrel (dcw_addr_ptr, WORDS_PER_DCW_TALLY); 006657 aa 6 00410 3515 20 epp1 pr6|264,* dcw_addr_ptr 006660 aa 010000 0510 03 adwp1 4096,du 006661 aa 6 00410 2515 00 spri1 pr6|264 dcw_addr_ptr STATEMENT 1 ON LINE 1636 return (addrel (dcwp, 1)); 006662 aa 6 00122 3535 20 epp3 pr6|82,* dcwp 006663 aa 000001 0530 03 adwp3 1,du 006664 aa 2 00002 2535 20 spri3 pr2|2,* 006665 aa 6 00422 6101 00 rtcd pr6|274 STATEMENT 1 ON LINE 1638 end next_dcwp; END PROCEDURE next_dcwp BEGIN PROCEDURE full_dcw_tally_needed ENTRY TO full_dcw_tally_needed STATEMENT 1 ON LINE 1640 full_dcw_tally_needed: proc returns (bit (1) aligned); 006666 aa 6 00430 6501 00 spri4 pr6|280 006667 aa 6 00432 2521 00 spri2 pr6|282 STATEMENT 1 ON LINE 1643 return (words_left > WORDS_PER_DCW_TALLY); 006670 aa 6 00412 2361 00 ldq pr6|266 words_left 006671 aa 010000 1160 07 cmpq 4096,dl 006672 aa 0 00503 7001 00 tsx0 pr0|323 r_g_a 006673 aa 2 00002 7551 20 sta pr2|2,* 006674 aa 6 00430 6101 00 rtcd pr6|280 STATEMENT 1 ON LINE 1645 end full_dcw_tally_needed; END PROCEDURE full_dcw_tally_needed END PROCEDURE fill_dcw_list BEGIN PROCEDURE add_to_list ENTRY TO add_to_list STATEMENT 1 ON LINE 1654 add_to_list: proc (list_head, new_list); 006675 aa 6 00436 6501 00 spri4 pr6|286 006676 aa 6 00440 2521 00 spri2 pr6|288 STATEMENT 1 ON LINE 1663 prev_buf_ptr = null (); 006677 aa 771253 2370 04 ldaq -3413,ic 000152 = 077777000043 000001000000 006700 aa 6 00446 7571 00 staq pr6|294 prev_buf_ptr STATEMENT 1 ON LINE 1664 do cur_buf_ptr = ptr (wksp, list_head) repeat ptr (wksp, cur_buf_ptr -> tbi.next_state_offset) while (rel (cur_buf_ptr) ^= ""b); 006701 aa 2 00002 3735 20 epp7 pr2|2,* 006702 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 006703 aa 7 00000 00 0022 descb pr7|0,18 list_head 006704 aa 6 00056 00 0044 descb pr6|46,36 006705 aa 6 00056 2351 00 lda pr6|46 006706 aa 000066 7730 00 lrl 54 006707 aa 6 00116 3515 20 epp1 pr6|78,* wksp 006710 aa 000000 3114 06 eawp1 0,ql 006711 aa 6 00444 2515 00 spri1 pr6|292 cur_buf_ptr 006712 aa 6 00444 6351 20 eaa pr6|292,* cur_buf_ptr 006713 aa 000011 6000 04 tze 9,ic 006724 STATEMENT 1 ON LINE 1666 prev_buf_ptr = cur_buf_ptr; 006714 aa 6 00444 3735 20 epp7 pr6|292,* cur_buf_ptr 006715 aa 6 00446 6535 00 spri7 pr6|294 prev_buf_ptr STATEMENT 1 ON LINE 1667 end; 006716 aa 7 00001 2351 00 lda pr7|1 tbi.next_state_offset 006717 aa 000066 7730 00 lrl 54 006720 aa 6 00116 3521 20 epp2 pr6|78,* wksp 006721 aa 000000 3120 06 eawp2 0,ql 006722 aa 6 00444 2521 00 spri2 pr6|292 cur_buf_ptr 006723 aa 777767 7100 04 tra -9,ic 006712 STATEMENT 1 ON LINE 1669 if prev_buf_ptr = null () then list_head = new_list; 006724 aa 6 00446 2371 00 ldaq pr6|294 prev_buf_ptr 006725 aa 771225 6770 04 eraq -3435,ic 000152 = 077777000043 000001000000 006726 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 006727 aa 000010 6010 04 tnz 8,ic 006737 006730 aa 6 00440 3735 20 epp7 pr6|288,* 006731 aa 7 00002 3715 20 epp5 pr7|2,* 006732 aa 7 00004 3535 20 epp3 pr7|4,* 006733 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 006734 aa 3 00000 00 0022 descb pr3|0,18 new_list 006735 aa 5 00000 00 0022 descb pr5|0,18 list_head 006736 aa 000076 7100 04 tra 62,ic 007034 STATEMENT 1 ON LINE 1671 else do; STATEMENT 1 ON LINE 1672 idcwp = addr (prev_buf_ptr -> tbi.idcw_word); 006737 aa 6 00446 3735 20 epp7 pr6|294,* prev_buf_ptr 006740 aa 7 00006 3735 00 epp7 pr7|6 tbi.idcw_word 006741 aa 6 00120 6535 00 spri7 pr6|80 idcwp STATEMENT 1 ON LINE 1673 tdcwp = get_tdcw_ptr (prev_buf_ptr); 006742 aa 000632 3520 04 epp2 410,ic 007574 = 000004000000 006743 aa 777560 6700 04 tsp4 -144,ic 006523 STATEMENT 1 ON LINE 1674 prev_buf_ptr -> tbi.next_state_offset = new_list; 006744 aa 6 00446 3735 20 epp7 pr6|294,* prev_buf_ptr 006745 aa 6 00440 3715 20 epp5 pr6|288,* 006746 aa 5 00004 3535 20 epp3 pr5|4,* 006747 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 006750 aa 3 00000 00 0022 descb pr3|0,18 new_list 006751 aa 7 00001 00 0022 descb pr7|1,18 tbi.next_state_offset STATEMENT 1 ON LINE 1675 string (tdcw) = ""b; 006752 aa 6 00124 4501 20 stz pr6|84,* STATEMENT 1 ON LINE 1676 tdcw.address = bit (bin (rel (addr (ptr (wksp, new_list) -> tbi.idcw_word)), 18), 18); 006753 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 006754 aa 3 00000 00 0022 descb pr3|0,18 new_list 006755 aa 6 00056 00 0044 descb pr6|46,36 006756 aa 6 00056 2351 00 lda pr6|46 006757 aa 000066 7730 00 lrl 54 006760 aa 6 00116 3521 20 epp2 pr6|78,* wksp 006761 aa 000000 3120 06 eawp2 0,ql 006762 aa 2 00006 3515 00 epp1 pr2|6 tbi.idcw_word 006763 aa 1 00000 6351 00 eaa pr1|0 006764 aa 000066 7730 00 lrl 54 006765 aa 0 00000 1161 00 cmpq pr0|0 = 000000000000 006766 aa 000003 6050 04 tpl 3,ic 006771 006767 aa 0 00110 6761 00 erq pr0|72 = 777777777777 006770 aa 000001 0760 07 adq 1,dl 006771 aa 000066 7370 00 lls 54 006772 aa 6 00124 3735 20 epp7 pr6|84,* tdcw.address 006773 aa 7 00000 5511 60 stba pr7|0,60 tdcw.address STATEMENT 1 ON LINE 1677 tdcw.type = "10"b; 006774 aa 020000 2350 07 lda 8192,dl 006775 aa 6 00124 6751 20 era pr6|84,* tdcw.type 006776 aa 030000 3750 07 ana 12288,dl 006777 aa 6 00124 6551 20 ersa pr6|84,* tdcw.type STATEMENT 1 ON LINE 1682 if (list_head = tai.queue_list_offset) & (clock () > tai.last_terminate_time + TWENTY_SECONDS) then idcw.control = "00"b; 007000 aa 6 01132 2515 00 spri1 pr6|602 007001 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007002 aa 7 00010 2371 00 ldaq pr7|8 tai.last_terminate_time 007003 aa 771057 0770 04 adaq -3537,ic 000062 = 000000000000 000114226400 007004 aa 6 01134 7571 00 staq pr6|604 007005 aa 0 01435 7001 00 tsx0 pr0|797 clock_mac 007006 aa 6 01134 1171 00 cmpaq pr6|604 007007 aa 0 00503 7001 00 tsx0 pr0|323 r_g_a 007010 aa 6 01131 7551 00 sta pr6|601 007011 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007012 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 007013 aa 000066 7730 00 lrl 54 007014 aa 6 01136 7561 00 stq pr6|606 tai.queue_list_offset 007015 aa 5 00002 3535 20 epp3 pr5|2,* 007016 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 007017 aa 3 00000 00 0022 descb pr3|0,18 list_head 007020 aa 6 00056 00 0044 descb pr6|46,36 007021 aa 6 00056 2351 00 lda pr6|46 007022 aa 000066 7730 00 lrl 54 007023 aa 6 01136 1161 00 cmpq pr6|606 tai.queue_list_offset 007024 aa 0 00512 7001 00 tsx0 pr0|330 r_e_as 007025 aa 6 01131 3151 00 cana pr6|601 007026 aa 000004 6000 04 tze 4,ic 007032 007027 aa 000721 2350 04 lda 465,ic 007750 = 777777747777 007030 aa 6 00120 3551 20 ansa pr6|80,* idcw.control 007031 aa 000003 7100 04 tra 3,ic 007034 STATEMENT 1 ON LINE 1684 else idcw.control = "11"b; 007032 aa 030000 2350 07 lda 12288,dl 007033 aa 6 00120 2551 20 orsa pr6|80,* idcw.control STATEMENT 1 ON LINE 1685 end; STATEMENT 1 ON LINE 1687 end add_to_list; 007034 aa 6 00436 6101 00 rtcd pr6|286 END PROCEDURE add_to_list BEGIN PROCEDURE remove_from_list ENTRY TO remove_from_list STATEMENT 1 ON LINE 1692 remove_from_list: proc (list_head, buffer_ptr); 007035 aa 6 00450 6501 00 spri4 pr6|296 007036 aa 6 00452 2521 00 spri2 pr6|298 STATEMENT 1 ON LINE 1701 pbufp = null (); 007037 aa 771113 2370 04 ldaq -3509,ic 000152 = 077777000043 000001000000 007040 aa 6 00460 7571 00 staq pr6|304 pbufp STATEMENT 1 ON LINE 1702 do cbufp = ptr (wksp, list_head) repeat ptr (wksp, cbufp -> tbi.next_state_offset) while ((rel (cbufp) ^= ""b) & (cbufp ^= buffer_ptr)); 007041 aa 2 00002 3735 20 epp7 pr2|2,* 007042 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 007043 aa 7 00000 00 0022 descb pr7|0,18 list_head 007044 aa 6 00056 00 0044 descb pr6|46,36 007045 aa 6 00056 2351 00 lda pr6|46 007046 aa 000066 7730 00 lrl 54 007047 aa 6 00116 3515 20 epp1 pr6|78,* wksp 007050 aa 000000 3114 06 eawp1 0,ql 007051 aa 6 00456 2515 00 spri1 pr6|302 cbufp 007052 aa 6 00456 6351 20 eaa pr6|302,* cbufp 007053 aa 000016 6000 04 tze 14,ic 007071 007054 aa 6 00456 2371 00 ldaq pr6|302 cbufp 007055 aa 6 00452 3735 20 epp7 pr6|298,* 007056 aa 7 00004 6771 20 eraq pr7|4,* buffer_ptr 007057 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 007060 aa 000011 6000 04 tze 9,ic 007071 STATEMENT 1 ON LINE 1704 pbufp = cbufp; 007061 aa 6 00456 3715 20 epp5 pr6|302,* cbufp 007062 aa 6 00460 6515 00 spri5 pr6|304 pbufp STATEMENT 1 ON LINE 1705 end; 007063 aa 5 00001 2351 00 lda pr5|1 tbi.next_state_offset 007064 aa 000066 7730 00 lrl 54 007065 aa 6 00116 3521 20 epp2 pr6|78,* wksp 007066 aa 000000 3120 06 eawp2 0,ql 007067 aa 6 00456 2521 00 spri2 pr6|302 cbufp 007070 aa 777762 7100 04 tra -14,ic 007052 STATEMENT 1 ON LINE 1706 if cbufp ^= buffer_ptr then return; 007071 aa 6 00456 2371 00 ldaq pr6|302 cbufp 007072 aa 6 00452 3735 20 epp7 pr6|298,* 007073 aa 7 00004 6771 20 eraq pr7|4,* buffer_ptr 007074 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 007075 aa 000002 6000 04 tze 2,ic 007077 007076 aa 6 00450 6101 00 rtcd pr6|296 STATEMENT 1 ON LINE 1708 if pbufp = null () then list_head = cbufp -> tbi.next_state_offset; 007077 aa 6 00460 2371 00 ldaq pr6|304 pbufp 007100 aa 771052 6770 04 eraq -3542,ic 000152 = 077777000043 000001000000 007101 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 007102 aa 000007 6010 04 tnz 7,ic 007111 007103 aa 7 00002 3715 20 epp5 pr7|2,* 007104 aa 6 00456 3535 20 epp3 pr6|302,* cbufp 007105 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 007106 aa 3 00001 00 0022 descb pr3|1,18 tbi.next_state_offset 007107 aa 5 00000 00 0022 descb pr5|0,18 list_head 007110 aa 000020 7100 04 tra 16,ic 007130 STATEMENT 1 ON LINE 1710 else do; STATEMENT 1 ON LINE 1711 pbufp -> tbi.next_state_offset = cbufp -> next_state_offset; 007111 aa 6 00456 3715 20 epp5 pr6|302,* cbufp 007112 aa 5 00001 2351 00 lda pr5|1 tbi.next_state_offset 007113 aa 6 00460 3535 20 epp3 pr6|304,* pbufp 007114 aa 3 00001 5511 60 stba pr3|1,60 tbi.next_state_offset STATEMENT 1 ON LINE 1712 if pbufp -> tbi.next_state_offset = 0 then /* new end of list */ addr (pbufp -> tbi.idcw_word) -> idcw.control = "00"b; 007115 aa 3 00001 2351 00 lda pr3|1 tbi.next_state_offset 007116 aa 000066 7730 00 lrl 54 007117 aa 000003 6010 04 tnz 3,ic 007122 007120 aa 000630 2350 04 lda 408,ic 007750 = 777777747777 007121 aa 3 00006 3551 00 ansa pr3|6 idcw.control STATEMENT 1 ON LINE 1714 get_tdcw_ptr (pbufp) -> tdcw = get_tdcw_ptr (cbufp) -> tdcw; 007122 aa 000444 3520 04 epp2 292,ic 007566 = 000004000000 007123 aa 777400 6700 04 tsp4 -256,ic 006523 007124 aa 000434 3520 04 epp2 284,ic 007560 = 000004000000 007125 aa 777376 6700 04 tsp4 -258,ic 006523 007126 aa 6 01142 2351 20 lda pr6|610,* tdcw 007127 aa 6 01140 7551 20 sta pr6|608,* tdcw STATEMENT 1 ON LINE 1715 end; STATEMENT 1 ON LINE 1716 cbufp -> tbi.next_state_offset = 0; 007130 aa 000000 2350 07 lda 0,dl 007131 aa 6 00456 3735 20 epp7 pr6|302,* cbufp 007132 aa 7 00001 5511 60 stba pr7|1,60 tbi.next_state_offset STATEMENT 1 ON LINE 1718 end remove_from_list; 007133 aa 6 00450 6101 00 rtcd pr6|296 END PROCEDURE remove_from_list BEGIN PROCEDURE get_status ENTRY TO get_status STATEMENT 1 ON LINE 1722 get_status: proc (wait_flag, wait_label); 007134 aa 6 00462 6501 00 spri4 pr6|306 007135 aa 6 00464 2521 00 spri2 pr6|308 STATEMENT 1 ON LINE 1728 if tai.modes.wait & (tai.status_entry_idx = 0) then /* drain the channel once in awhile */ call ipc_$drain_chn (tai.event_id, (0)); 007136 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007137 aa 7 00020 2351 00 lda pr7|16 tai.wait 007140 aa 000004 3150 03 cana 4,du 007141 aa 000016 6000 04 tze 14,ic 007157 007142 aa 7 00015 2361 00 ldq pr7|13 tai.status_entry_idx 007143 aa 0 00416 3771 00 anaq pr0|270 = 000000000000 000000000777 007144 aa 000013 6010 04 tnz 11,ic 007157 007145 aa 6 01144 4501 00 stz pr6|612 007146 aa 7 00002 3521 00 epp2 pr7|2 tai.event_id 007147 aa 6 01150 2521 00 spri2 pr6|616 007150 aa 6 01144 3521 00 epp2 pr6|612 007151 aa 6 01152 2521 00 spri2 pr6|618 007152 aa 6 01146 6211 00 eax1 pr6|614 007153 aa 010000 4310 07 fld 4096,dl 007154 aa 6 00044 3701 20 epp4 pr6|36,* 007155 la 4 00020 3521 20 epp2 pr4|16,* ipc_$drain_chn 007156 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1732 isp = tape_ioi_utils$get_status (wksp); 007157 aa 6 00116 3521 00 epp2 pr6|78 wksp 007160 aa 6 01150 2521 00 spri2 pr6|616 007161 aa 6 00132 3521 00 epp2 pr6|90 isp 007162 aa 6 01152 2521 00 spri2 pr6|618 007163 aa 6 01146 6211 00 eax1 pr6|614 007164 aa 010000 4310 07 fld 4096,dl 007165 aa 6 00044 3701 20 epp4 pr6|36,* 007166 la 4 00036 3521 20 epp2 pr4|30,* tape_ioi_utils$get_status 007167 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1733 do while (isp = null ()); 007170 aa 6 00132 2371 00 ldaq pr6|90 isp 007171 aa 770761 6770 04 eraq -3599,ic 000152 = 077777000043 000001000000 007172 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 007173 aa 000057 6010 04 tnz 47,ic 007252 STATEMENT 1 ON LINE 1734 if tai.modes.wait then call ipc_$drain_chn (tai.event_id, (0)); 007174 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007175 aa 7 00020 2351 00 lda pr7|16 tai.wait 007176 aa 000004 3150 03 cana 4,du 007177 aa 000013 6000 04 tze 11,ic 007212 007200 aa 6 01144 4501 00 stz pr6|612 007201 aa 7 00002 3521 00 epp2 pr7|2 tai.event_id 007202 aa 6 01150 2521 00 spri2 pr6|616 007203 aa 6 01144 3521 00 epp2 pr6|612 007204 aa 6 01152 2521 00 spri2 pr6|618 007205 aa 6 01146 6211 00 eax1 pr6|614 007206 aa 010000 4310 07 fld 4096,dl 007207 aa 6 00044 3701 20 epp4 pr6|36,* 007210 la 4 00020 3521 20 epp2 pr4|16,* ipc_$drain_chn 007211 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1736 isp = tape_ioi_utils$get_status (wksp); 007212 aa 6 00116 3521 00 epp2 pr6|78 wksp 007213 aa 6 01150 2521 00 spri2 pr6|616 007214 aa 6 00132 3521 00 epp2 pr6|90 isp 007215 aa 6 01152 2521 00 spri2 pr6|618 007216 aa 6 01146 6211 00 eax1 pr6|614 007217 aa 010000 4310 07 fld 4096,dl 007220 aa 6 00044 3701 20 epp4 pr6|36,* 007221 la 4 00036 3521 20 epp2 pr4|30,* tape_ioi_utils$get_status 007222 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1737 if isp = null () then do; 007223 aa 6 00132 2371 00 ldaq pr6|90 isp 007224 aa 770726 6770 04 eraq -3626,ic 000152 = 077777000043 000001000000 007225 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 007226 aa 777742 6010 04 tnz -30,ic 007170 STATEMENT 1 ON LINE 1738 if wait_flag then do; 007227 aa 6 00464 3735 20 epp7 pr6|308,* 007230 aa 7 00002 3715 20 epp5 pr7|2,* 007231 aa 000 000 066 500 cmpb (pr),(),fill(0) 007232 aa 5 00000 00 0001 descb pr5|0,1 wait_flag 007233 aa 000000 00 0000 descb 0,0 007234 aa 000003 6010 04 tnz 3,ic 007237 007235 aa 7 00004 3521 20 epp2 pr7|4,* wait_label 007236 aa 0 00660 7101 00 tra pr0|432 tra_ext_2 STATEMENT 1 ON LINE 1739 call block; 007237 aa 000167 6700 04 tsp4 119,ic 007426 STATEMENT 1 ON LINE 1740 isp = tape_ioi_utils$get_status (wksp); 007240 aa 6 00116 3521 00 epp2 pr6|78 wksp 007241 aa 6 01150 2521 00 spri2 pr6|616 007242 aa 6 00132 3521 00 epp2 pr6|90 isp 007243 aa 6 01152 2521 00 spri2 pr6|618 007244 aa 6 01146 6211 00 eax1 pr6|614 007245 aa 010000 4310 07 fld 4096,dl 007246 aa 6 00044 3701 20 epp4 pr6|36,* 007247 la 4 00036 3521 20 epp2 pr4|30,* tape_ioi_utils$get_status 007250 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1741 end; STATEMENT 1 ON LINE 1743 end; STATEMENT 1 ON LINE 1744 end; 007251 aa 777717 7100 04 tra -49,ic 007170 STATEMENT 1 ON LINE 1745 if ^istat.run then tai.last_terminate_time = clock (); 007252 aa 6 00132 2351 20 lda pr6|90,* istat.run 007253 aa 100000 3150 03 cana 32768,du 007254 aa 000004 6010 04 tnz 4,ic 007260 007255 aa 0 01435 7001 00 tsx0 pr0|797 clock_mac 007256 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007257 aa 7 00010 7571 00 staq pr7|8 tai.last_terminate_time STATEMENT 1 ON LINE 1747 status_class = tape_ioi_utils$get_status_class (isp); 007260 aa 6 00132 3521 00 epp2 pr6|90 isp 007261 aa 6 01150 2521 00 spri2 pr6|616 007262 aa 6 00113 3521 00 epp2 pr6|75 status_class 007263 aa 6 01152 2521 00 spri2 pr6|618 007264 aa 6 01146 6211 00 eax1 pr6|614 007265 aa 010000 4310 07 fld 4096,dl 007266 aa 6 00044 3701 20 epp4 pr6|36,* 007267 la 4 00040 3521 20 epp2 pr4|32,* tape_ioi_utils$get_status_class 007270 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1749 end get_status; 007271 aa 6 00462 6101 00 rtcd pr6|306 END PROCEDURE get_status BEGIN PROCEDURE missing_statuses ENTRY TO missing_statuses STATEMENT 1 ON LINE 1759 missing_statuses: proc (buffer_ptr, status_ptr) returns (fixed bin); 007272 aa 6 00470 6501 00 spri4 pr6|312 007273 aa 6 00472 2521 00 spri2 pr6|314 STATEMENT 1 ON LINE 1771 statp = addr (status_ptr -> istat.iom_stat); 007274 aa 2 00004 3735 20 epp7 pr2|4,* status_ptr 007275 aa 7 00000 3735 20 epp7 pr7|0,* status_ptr 007276 aa 7 00004 3715 00 epp5 pr7|4 istat.iom_stat 007277 aa 6 00130 6515 00 spri5 pr6|88 statp STATEMENT 1 ON LINE 1772 lpwp = addr (status_ptr -> istat.lpw); 007300 aa 7 00006 3535 00 epp3 pr7|6 istat.lpw 007301 aa 6 00126 2535 00 spri3 pr6|86 lpwp STATEMENT 1 ON LINE 1773 if status.marker then /* marker interrupt? */ residue = bin (status.address); 007302 aa 5 00000 2351 00 lda pr5|0 status.marker 007303 aa 000020 3150 03 cana 16,du 007304 aa 000005 6000 04 tze 5,ic 007311 007305 aa 5 00001 2351 00 lda pr5|1 status.address 007306 aa 000066 7730 00 lrl 54 007307 aa 6 00502 7561 00 stq pr6|322 residue 007310 aa 000020 7100 04 tra 16,ic 007330 STATEMENT 1 ON LINE 1775 else do; STATEMENT 1 ON LINE 1776 residue = istat.offset; 007311 aa 6 00132 3515 20 epp1 pr6|90,* isp 007312 aa 1 00002 2361 00 ldq pr1|2 istat.offset 007313 aa 6 00502 7561 00 stq pr6|322 residue STATEMENT 1 ON LINE 1777 if bin (rel (addr (tai.order_data (hbound (tai.order_data, 1))))) >= residue then return (0); 007314 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007315 aa 7 00057 3735 00 epp7 pr7|47 tai.order_data 007316 aa 7 00000 6351 00 eaa pr7|0 007317 aa 000066 7730 00 lrl 54 007320 aa 6 01154 7571 00 staq pr6|620 007321 aa 6 00502 2351 00 lda pr6|322 residue 007322 aa 000044 7330 00 lrs 36 007323 aa 6 01154 1171 00 cmpaq pr6|620 007324 aa 6 01154 6535 00 spri7 pr6|620 007325 aa 000003 6054 04 tpnz 3,ic 007330 007326 aa 2 00006 4501 20 stz pr2|6,* 007327 aa 6 00470 6101 00 rtcd pr6|312 STATEMENT 1 ON LINE 1779 end; STATEMENT 1 ON LINE 1781 sbuf_idx, bbuf_idx = -1; 007330 aa 000001 3360 07 lcq 1,dl 007331 aa 6 00503 7561 00 stq pr6|323 sbuf_idx 007332 aa 6 00476 7561 00 stq pr6|318 bbuf_idx STATEMENT 1 ON LINE 1782 buf_idx = 0; 007333 aa 6 00477 4501 00 stz pr6|319 buf_idx STATEMENT 1 ON LINE 1783 do bufp = ptr (wksp, tai.queue_list_offset) repeat ptr (wksp, bufp -> tbi.next_state_offset) while ((rel (bufp) ^= ""b) & ((sbuf_idx = -1) | (bbuf_idx = -1))); 007334 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007335 aa 7 00014 2351 00 lda pr7|12 tai.queue_list_offset 007336 aa 000066 7730 00 lrl 54 007337 aa 7 00000 3515 00 epp1 pr7|0 007340 aa 000000 3114 06 eawp1 0,ql 007341 aa 6 00500 2515 00 spri1 pr6|320 bufp 007342 aa 6 00500 6351 20 eaa pr6|320,* bufp 007343 aa 000056 6000 04 tze 46,ic 007421 007344 aa 6 00503 2361 00 ldq pr6|323 sbuf_idx 007345 aa 000444 1160 04 cmpq 292,ic 010011 = 777777777777 007346 aa 000004 6000 04 tze 4,ic 007352 007347 aa 6 00476 2361 00 ldq pr6|318 bbuf_idx 007350 aa 000441 1160 04 cmpq 289,ic 010011 = 777777777777 007351 aa 000050 6010 04 tnz 40,ic 007421 STATEMENT 1 ON LINE 1791 if (residue >= bin (rel (addr (bufp -> tbi.idcw_word))) - 1) & (residue <= (bufp -> tbi.data_offset) + divide (bufp -> tbi.buffer_len, BYTES_PER_WORD, 19)) then sbuf_idx = buf_idx; 007352 aa 6 00500 3735 20 epp7 pr6|320,* bufp 007353 aa 7 00006 3735 00 epp7 pr7|6 tbi.idcw_word 007354 aa 7 00000 6351 00 eaa pr7|0 007355 aa 000066 7730 00 lrl 54 007356 aa 000000 5330 00 negl 0 007357 aa 000001 0330 07 adl 1,dl 007360 aa 000000 5330 00 negl 0 007361 aa 6 01156 7571 00 staq pr6|622 007362 aa 6 00502 2351 00 lda pr6|322 residue 007363 aa 000044 7330 00 lrs 36 007364 aa 6 01156 1171 00 cmpaq pr6|622 007365 aa 6 01156 6535 00 spri7 pr6|622 007366 aa 000014 6040 04 tmi 12,ic 007402 007367 aa 6 00500 3715 20 epp5 pr6|320,* bufp 007370 aa 5 00003 2361 00 ldq pr5|3 tbi.buffer_len 007371 aa 000004 5060 07 div 4,dl 007372 aa 6 01160 7561 00 stq pr6|624 007373 aa 5 00000 2351 00 lda pr5|0 tbi.data_offset 007374 aa 000066 7730 00 lrl 54 007375 aa 6 01160 0761 00 adq pr6|624 007376 aa 6 00502 1161 00 cmpq pr6|322 residue 007377 aa 000003 6040 04 tmi 3,ic 007402 007400 aa 6 00477 2361 00 ldq pr6|319 buf_idx 007401 aa 6 00503 7561 00 stq pr6|323 sbuf_idx STATEMENT 1 ON LINE 1794 if bufp = buffer_ptr then bbuf_idx = buf_idx; 007402 aa 6 00500 2371 00 ldaq pr6|320 bufp 007403 aa 6 00472 3715 20 epp5 pr6|314,* 007404 aa 5 00002 6771 20 eraq pr5|2,* buffer_ptr 007405 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 007406 aa 000003 6010 04 tnz 3,ic 007411 007407 aa 6 00477 2361 00 ldq pr6|319 buf_idx 007410 aa 6 00476 7561 00 stq pr6|318 bbuf_idx STATEMENT 1 ON LINE 1796 buf_idx = buf_idx + 1; 007411 aa 6 00477 0541 00 aos pr6|319 buf_idx STATEMENT 1 ON LINE 1797 end; 007412 aa 6 00500 3535 20 epp3 pr6|320,* bufp 007413 aa 3 00001 2351 00 lda pr3|1 tbi.next_state_offset 007414 aa 000066 7730 00 lrl 54 007415 aa 6 00116 3521 20 epp2 pr6|78,* wksp 007416 aa 000000 3120 06 eawp2 0,ql 007417 aa 6 00500 2521 00 spri2 pr6|320 bufp 007420 aa 777722 7100 04 tra -46,ic 007342 STATEMENT 1 ON LINE 1799 return (sbuf_idx - bbuf_idx); 007421 aa 6 00503 2361 00 ldq pr6|323 sbuf_idx 007422 aa 6 00476 1761 00 sbq pr6|318 bbuf_idx 007423 aa 6 00472 3735 20 epp7 pr6|314,* 007424 aa 7 00006 7561 20 stq pr7|6,* 007425 aa 6 00470 6101 00 rtcd pr6|312 STATEMENT 1 ON LINE 1801 end missing_statuses; END PROCEDURE missing_statuses BEGIN PROCEDURE block ENTRY TO block STATEMENT 1 ON LINE 1805 block: proc; 007426 aa 6 00504 6501 00 spri4 pr6|324 STATEMENT 1 ON LINE 8 OF FILE 1 007427 aa 000001 2360 07 ldq 1,dl 007430 aa 6 00512 7561 00 stq pr6|330 event_wait_channel.n_channels STATEMENT 1 ON LINE 1822 event_wait_channel.channel_id = tai.event_id; 007431 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007432 aa 7 00002 2371 00 ldaq pr7|2 tai.event_id 007433 aa 6 01162 7571 00 staq pr6|626 007434 aa 000001 2360 07 ldq 1,dl 007435 aa 6 00525 7561 00 stq pr6|341 007436 aa 6 00525 2361 00 ldq pr6|341 007437 aa 000001 7360 00 qls 1 007440 aa 000000 6270 06 eax7 0,ql 007441 aa 6 01162 2371 00 ldaq pr6|626 007442 aa 6 00512 7571 17 staq pr6|330,7 event_wait_channel.channel_id 007443 aa 6 00525 2361 00 ldq pr6|341 007444 aa 6 00525 0541 00 aos pr6|341 007445 aa 000001 1160 07 cmpq 1,dl 007446 aa 777770 6040 04 tmi -8,ic 007436 STATEMENT 1 ON LINE 1823 if tai.special_status_expected then call timer_manager_$alarm_wakeup (TWO_MINUTES, RELATIVE_SECONDS, tai.event_id); 007447 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007450 aa 7 00020 2351 00 lda pr7|16 tai.special_status_expected 007451 aa 020000 3150 07 cana 8192,dl 007452 aa 000014 6000 04 tze 12,ic 007466 007453 aa 770403 3520 04 epp2 -3837,ic 000056 = 000000000000 007454 aa 6 01166 2521 00 spri2 pr6|630 007455 aa 770455 3520 04 epp2 -3795,ic 000132 = 600000000000 007456 aa 6 01170 2521 00 spri2 pr6|632 007457 aa 7 00002 3521 00 epp2 pr7|2 tai.event_id 007460 aa 6 01172 2521 00 spri2 pr6|634 007461 aa 6 01164 6211 00 eax1 pr6|628 007462 aa 014000 4310 07 fld 6144,dl 007463 aa 6 00044 3701 20 epp4 pr6|36,* 007464 la 4 00110 3521 20 epp2 pr4|72,* timer_manager_$alarm_wakeup 007465 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1825 call ipc_$block (addr (event_wait_channel), addr (auto_event_wait_info), (0)); 007466 aa 6 00512 3735 00 epp7 pr6|330 event_wait_channel 007467 aa 6 01162 6535 00 spri7 pr6|626 007470 aa 6 00516 3715 00 epp5 pr6|334 auto_event_wait_info 007471 aa 6 01174 6515 00 spri5 pr6|636 007472 aa 6 01161 4501 00 stz pr6|625 007473 aa 6 01162 3521 00 epp2 pr6|626 007474 aa 6 01166 2521 00 spri2 pr6|630 007475 aa 6 01174 3521 00 epp2 pr6|636 007476 aa 6 01170 2521 00 spri2 pr6|632 007477 aa 6 01161 3521 00 epp2 pr6|625 007500 aa 6 01172 2521 00 spri2 pr6|634 007501 aa 6 01164 6211 00 eax1 pr6|628 007502 aa 014000 4310 07 fld 6144,dl 007503 aa 6 00044 3701 20 epp4 pr6|36,* 007504 la 4 00106 3521 20 epp2 pr4|70,* ipc_$block 007505 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1826 if tai.special_status_expected then call timer_manager_$reset_alarm_wakeup (tai.event_id); 007506 aa 6 00116 3735 20 epp7 pr6|78,* wksp 007507 aa 7 00020 2351 00 lda pr7|16 tai.special_status_expected 007510 aa 020000 3150 07 cana 8192,dl 007511 aa 000010 6000 04 tze 8,ic 007521 007512 aa 7 00002 3521 00 epp2 pr7|2 tai.event_id 007513 aa 6 01166 2521 00 spri2 pr6|630 007514 aa 6 01164 6211 00 eax1 pr6|628 007515 aa 004000 4310 07 fld 2048,dl 007516 aa 6 00044 3701 20 epp4 pr6|36,* 007517 la 4 00112 3521 20 epp2 pr4|74,* timer_manager_$reset_alarm_wakeup 007520 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1830 end block; 007521 aa 6 00504 6101 00 rtcd pr6|324 END PROCEDURE block BEGIN PROCEDURE setup ENTRY TO setup STATEMENT 1 ON LINE 1832 setup: proc; 007522 aa 6 00526 6501 00 spri4 pr6|342 STATEMENT 1 ON LINE 1835 call tape_ioi_utils$get_workspace_ptr (p_tioi_id, wksp); 007523 aa 6 00032 3735 20 epp7 pr6|26,* 007524 aa 7 00002 3521 20 epp2 pr7|2,* p_tioi_id 007525 aa 6 01200 2521 00 spri2 pr6|640 007526 aa 6 00116 3521 00 epp2 pr6|78 wksp 007527 aa 6 01202 2521 00 spri2 pr6|642 007530 aa 6 01176 6211 00 eax1 pr6|638 007531 aa 010000 4310 07 fld 4096,dl 007532 aa 6 00044 3701 20 epp4 pr6|36,* 007533 la 4 00042 3521 20 epp2 pr4|34,* tape_ioi_utils$get_workspace_ptr 007534 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1836 if wksp = null () then call quit (error_table_$bad_arg); 007535 aa 6 00116 2371 00 ldaq pr6|78 wksp 007536 aa 770414 6770 04 eraq -3828,ic 000152 = 077777000043 000001000000 007537 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 007540 aa 000010 6010 04 tnz 8,ic 007550 007541 aa 6 00044 3701 20 epp4 pr6|36,* 007542 la 4 00050 3521 20 epp2 pr4|40,* error_table_$bad_arg 007543 aa 6 01200 2521 00 spri2 pr6|640 007544 aa 6 01176 3521 00 epp2 pr6|638 007545 aa 004000 4310 07 fld 2048,dl 007546 aa 2 00000 7571 00 staq pr2|0 007547 aa 000004 6700 04 tsp4 4,ic 007553 STATEMENT 1 ON LINE 1838 code, p_code = 0; 007550 aa 6 00104 4501 00 stz pr6|68 code 007551 aa 6 00140 4501 20 stz pr6|96,* p_code STATEMENT 1 ON LINE 1840 end setup; 007552 aa 6 00526 6101 00 rtcd pr6|342 END PROCEDURE setup BEGIN PROCEDURE quit ENTRY TO quit STATEMENT 1 ON LINE 1842 quit: proc (code); 007553 aa 6 00534 6501 00 spri4 pr6|348 007554 aa 6 00536 2521 00 spri2 pr6|350 STATEMENT 1 ON LINE 1847 p_code = code; 007555 aa 2 00002 2361 20 ldq pr2|2,* code 007556 aa 6 00140 7561 20 stq pr6|96,* p_code STATEMENT 1 ON LINE 1848 goto ERROR_RETURN; 007557 aa 771767 7100 04 tra -3081,ic 001546 STATEMENT 1 ON LINE 1850 end quit; END PROCEDURE quit END PROCEDURE tape_ioi_io ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved