Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Difference From 3295f96998411ff5 To c507e7ba4949dce8
2018-03-04
| ||
03:11 | Cleaner interface to show command: Do the split into a line array centrally. Make the show tape parsing orthogonal to rx and tti. check-in: 4b84f2a2ac user: poetnerd tags: os8-v3f-extensions | |
02:35 | If you call simh.os8_send_ctrl('e'), the object now marks itself as "in SIMH context". This supports legacy uses of the class where transitions had to be done manually. check-in: c507e7ba49 user: tangent tags: os8-v3f-extensions | |
02:30 | In two places, class simh was sending the same command to SIMH then calling parse_show_tti() on the result. Moved the command call into that function and renamed it get_tti(). check-in: fb6100a681 user: tangent tags: os8-v3f-extensions | |
2018-02-27
| ||
04:21 | This file should never have been checked in. It was a built artifact, not baseline truth source. check-in: ed42b06197 user: poetnerd tags: os8-v3f-extensions | |
04:20 | First step of moving os8-v3f to a os8/v3f. Move everything with no history. check-in: 3295f96998 user: poetnerd tags: os8-v3f-extensions | |
2018-02-26
| ||
04:28 | Added include functionality and split out the FOTP copy into a separate file so that it can be common to multiple system head creations scripts. check-in: f6c639f923 user: poetnerd tags: os8-v3f-extensions | |
Changes to bin/tc08.mkos8.
|
| | < | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | > > > > > > > > | > | > | > > | | < < < | > > | | | | > > | | | | > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | # Builds a bootable dectape image with pieces taken from: # os8v3d-patched.rk05, the os8v3d device driver distribution DECtape, # and the os8v3f-build rk05. # Building a bootable TD image is tricky, because our boot disk # is configured with TC08, not TD8E # For TD8E we run build 3 times: # First from SYS to change switch from TC08 to TD8E # Then from RKB1 to build the TD8E head, # Finally again from SYS to undo the first mess. mount rk0 ./os8v3d-patched.rk05 must-exist mount rk1 ./os8-v3f-build.rk05 must-exist mount dt1 ../media/os8/al-4712c-ba-os8-v3d-2.1978.tu56 read-only must-exist begin option td12k boot rk0 os8 SET SYS NO INIT begin build SYS:BUILD # TD8E non-system handler. # Comment out if we run out of room in BUILD. LOAD DTA1:TD8EA.BN DELETE DTA0,DTA1 INSERT TD8A,DTA0,DTA1 BOOT end build simh det dt1 # We switch our running simh over from the dt to the td device # This will clear itself when simh shuts down. simh set dt disabled simh set td enabled mount td0 ./system_td12k.tu56 no-overwrite mount td1 ../media/os8/al-4712c-ba-os8-v3d-2.1978.tu56 read-only must-exist end option td12k # Options decide what our output tape will be called. begin option tc08 mount dt0 ./system_tc08.tu56 no-overwrite end option tc08 boot rk0 os8 COPY DSK:<RKB1:OS8.BN,CD.BN begin build RKB1:BUILD LOAD DTA1:RK8ESY.BN LOAD DTA1:RK8ENS.BN LOAD DTA1:PT8E.BN # TD8E non-system handler. LOAD DTA1:TD8EA.BN begin option tc08 LOAD DTA1:TC08SY.BN LOAD DTA1:TC08NS.BN end option tc08 # TD8E systems with 12K uncomment next line. begin option td12k LOAD DTA1:TD8ESY.BN end option td12k # TD8E systems with ROM uncomment next line. begin option tdrom LOAD DTA1:ROMMSY.BN end option tdrom # Additional TD8E non-system devices # Units 2 and 3. # LOAD DTA1:TD8EB.BN # Units 4 and 5. # LOAD DTA1:TD8EC.BN # Units 6 and 7. # LOAD DTA1:TD8ED.BN # I think we want the RKB1 version of KL8E.BN LOAD DTA1:KL8E.BN LOAD DTA1:LPSV.BN LOAD RKB1:RXSY2.BN LOAD RKB1:RXNS.BN INSERT PT8E,PTR INSERT PT8E,PTP INSERT KL8E,TTY INSERT LPSV,LPT begin option tc08 SYSTEM TC08 INSERT TC08,DTA0 INSERT TC,DTA1 DSK TC08:DTA0 end option tc08 # Un-comment next 4 lines for TD8E 12K System begin option td12k SYSTEM TD8E INSERT TD8E,DTA0 INSERT TD8E,DTA1 DSK TD8E:DTA0 end option td12k # Un-comment next 4 lines for TD8E ROM System begin option tdrom SYSTEM ROM INSERT ROM,DTA0 INSERT ROM,DTA1 DSK ROM:DTA0 end option tdrom INSERT RX02,RXA0 INSERT RK05,RKA0,RKB0 INSERT RK05,RKA1,RKB1 INSERT RK05,RKA2,RKB2 BUILD DSK:OS8.BN DSK:CD.BN BOOT end build os8 SAVE DTA0 BUILD.SV include sys-dectape-copy.mkos8 begin option td12k # Put system image back to TC08 # The saved BUILD will just work. boot rk0 begin build SYS:BUILD.SV BOOT end build os8 SET SYS INIT boot td0 end option td12k begin option tc08 boot dt0 end option tc08 os8 R CCL done |
Changes to lib/mkos8/argparser.py.
︙ | ︙ | |||
51 52 53 54 55 56 57 58 59 60 61 62 63 64 | self.add_bool ('--' + od + 'able-' + obn, help = vals[1]) # Add options that do not exactly mirror configuration options self.add_bool ('--disable-lcmod', help = 'disable the OS/8 command upcasing patch; best set ' + 'when SIMH is set to tti ksr mode') # Add trailing "what do do" argument self.add_argument ( 'what', choices = allowed_acts, help = 'select which RK05 media gets built; default is "all"', nargs = argparse.REMAINDER) | > > > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | self.add_bool ('--' + od + 'able-' + obn, help = vals[1]) # Add options that do not exactly mirror configuration options self.add_bool ('--disable-lcmod', help = 'disable the OS/8 command upcasing patch; best set ' + 'when SIMH is set to tti ksr mode') # Add the ability to feed in options. self.add_argument("-o", "--option", nargs=1, action='append' ) # Add trailing "what do do" argument self.add_argument ( 'what', choices = allowed_acts, help = 'select which RK05 media gets built; default is "all"', nargs = argparse.REMAINDER) |
︙ | ︙ |
Changes to lib/simh.py.
︙ | ︙ | |||
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | ["ILLEGAL \\?", False], ["NO FILES OF THE FORM (\S+)", False], ["NO ROOM, SKIPPING \\((\S+)\\)", False], ["SYSTEM ERROR-CLOSING FILE", False], ["USE PIP FOR NON-FILE STRUCTURED DEVICE", False], ] #### ctor ############################################################ # The first parameter must be given as the parent of bin/pidp8i-sim. # # The second defaults to false, meaning that a failure to lock the # GPIO for the caller's exclusive use is a fatal error. If you pass # True instead, we just complain if the GPIO is already locked and # move on. This tolerant mode is appropriate for programs that need # the simulator alone, not actually the PiDP-8/I front panel display. def __init__ (self, basedir, ignore_gpio_lock = False): # Start the simulator instance self._child = pexpect.spawn(basedir + '/bin/pidp8i-sim') self._valid_pip_options = ["/A", "/B", "/I"] self._os8_file_re = re.compile("(\S+):(\S+)?") self._os8_error_match_strings = [] self._os8_fatal_check = [] | > > > > > > > > > > > | | | < | < | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | ["ILLEGAL \\?", False], ["NO FILES OF THE FORM (\S+)", False], ["NO ROOM, SKIPPING \\((\S+)\\)", False], ["SYSTEM ERROR-CLOSING FILE", False], ["USE PIP FOR NON-FILE STRUCTURED DEVICE", False], ] # Pattern to match a SIMH command. The command verb ends up in # match().group(1), and anything after the verb in group(3). _simh_comm_re = re.compile ("^\s*(\S+)(\s+(.*))?$") # Significant prefixes of SIMH command verbs that transition from SIMH # command context back into the simulation: BOOT, CONTINUE, and GO. # We need only the first letter in all cases, since these particular # commands are not ambiguous. They're uppercase because the code that # uses this always uppercases the command before searching this list. _enters_os8_context = ["B", "C", "G"] #### ctor ############################################################ # The first parameter must be given as the parent of bin/pidp8i-sim. # # The second defaults to false, meaning that a failure to lock the # GPIO for the caller's exclusive use is a fatal error. If you pass # True instead, we just complain if the GPIO is already locked and # move on. This tolerant mode is appropriate for programs that need # the simulator alone, not actually the PiDP-8/I front panel display. def __init__ (self, basedir, ignore_gpio_lock = False): # Start the simulator instance self._child = pexpect.spawn(basedir + '/bin/pidp8i-sim') self._valid_pip_options = ["/A", "/B", "/I"] self._os8_file_re = re.compile("(\S+):(\S+)?") self._os8_error_match_strings = [] self._os8_fatal_check = [] # We keep track of what our command context is so our caller does # not need to explicitly call back_to_cmd() or sendcontrol ('e'). # We keep track of the command context and transition automatically. self._context = "simh" # Parse our OS/8 Errors table into actionable chunks for error_spec in self._os8_errors: self._os8_error_match_strings.append(error_spec[0]) self._os8_fatal_check.append(error_spec[1]) self._pip_into_replies = ['\\^'] self._pip_into_replies.extend(self._os8_error_match_strings) self._pip_from_replies = ['\\*'] self._pip_from_replies.extend(self._os8_error_match_strings) # Turn off pexpect's default inter-send() delay. We add our own as # necessary. The conditional tracks an API change between 3 and 4. pev4 = (pkg_resources.get_distribution("pexpect").parsed_version > pkg_resources.parse_version("4.0")) self._child.delaybeforesend = None if pev4 else 0 |
︙ | ︙ | |||
206 207 208 209 210 211 212 213 214 215 216 217 218 219 | # wait for OS/8 to finish running a command so we can do something # down at the SIMH layer instead. def back_to_cmd (self, prompt): self._child.expect ("\n%s$" % prompt) self.os8_kbd_delay () self._child.sendcontrol ('e') #### os8_get_file #################################################### # Rough inverse of os8_send_file. # # Both paths must be given and are used literally. (Contrast our # inverse, where the destinatinon file name is produced from the | > | 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 | # wait for OS/8 to finish running a command so we can do something # down at the SIMH layer instead. def back_to_cmd (self, prompt): self._child.expect ("\n%s$" % prompt) self.os8_kbd_delay () self._child.sendcontrol ('e') self._context = "simh" #### os8_get_file #################################################### # Rough inverse of os8_send_file. # # Both paths must be given and are used literally. (Contrast our # inverse, where the destinatinon file name is produced from the |
︙ | ︙ | |||
251 252 253 254 255 256 257 258 259 260 261 262 263 264 | #### os8_kbd_delay ################################################### # Artificially delay the media generation process to account for the # fact that OS/8 lacks a modern multi-character keyboard input buffer. # It is unsafe to send text faster than a contemporary terminal could, # though we can scale it based on how much faster this host is than a # real PDP-8. See the constants above for the calculation. def os8_kbd_delay (self): time.sleep (self._os8_kbd_delay) #### os8_send_cmd #################################################### # Wait for an OS/8 command prompt running within SIMH, then send the # given line. | > | 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 | #### os8_kbd_delay ################################################### # Artificially delay the media generation process to account for the # fact that OS/8 lacks a modern multi-character keyboard input buffer. # It is unsafe to send text faster than a contemporary terminal could, # though we can scale it based on how much faster this host is than a # real PDP-8. See the constants above for the calculation. def os8_kbd_delay (self): time.sleep (self._os8_kbd_delay) #### os8_send_cmd #################################################### # Wait for an OS/8 command prompt running within SIMH, then send the # given line. |
︙ | ︙ | |||
273 274 275 276 277 278 279 280 | #### os8_send_ctrl ################################################### # Send a control character to OS/8 corresponding to the ASCII letter # given. We precede it with the OS/8 keyboard delay, since we're # probably following a call to os8_send_line or os8_send_cmd. def os8_send_ctrl (self, char): self.os8_kbd_delay () | > | > > > > | 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | #### os8_send_ctrl ################################################### # Send a control character to OS/8 corresponding to the ASCII letter # given. We precede it with the OS/8 keyboard delay, since we're # probably following a call to os8_send_line or os8_send_cmd. def os8_send_ctrl (self, char): cc = char[0].lower () self.os8_kbd_delay () self._child.sendcontrol (cc) if cc == 'e': self._context = 'simh' #### mk_os8_name # ################################################### # Create an OS/8 filename: of the form XXXXXX.YY # From a POSIX path. def mk_os8_name(self, dev, path): bns = os.path.basename (path) bns = re.sub("-|:|\(|\)|!", "", bns) bns = bns.upper() if "." not in bns: return dev + bns[:min(6, len(bns))] else: dot = bns.index('.') return dev + bns[:min(6, dot, len(bns))] + "." + bns[dot+1: dot+3] #### os8_send_file ################################################### # Send a copy of a local text file to OS/8. The local path may # contain directory components, but the remote must not, of course. # # If the destination file name is not uppercase, it will be so forced. # |
︙ | ︙ | |||
334 335 336 337 338 339 340 341 | self.os8_restart () self.os8_send_cmd ('\\.', 'R PIP') self.os8_send_cmd ('\\*', dest + '<PTR:') self._child.expect ('\\^') self.os8_send_ctrl ('[') # finish transfer self._child.expect ('\\*') self.os8_send_ctrl ('[') # exit PIP | < | > < > | 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 | self.os8_restart () self.os8_send_cmd ('\\.', 'R PIP') self.os8_send_cmd ('\\*', dest + '<PTR:') self._child.expect ('\\^') self.os8_send_ctrl ('[') # finish transfer self._child.expect ('\\*') self.os8_send_ctrl ('[') # exit PIP #### pip_error_handler ############################################### # Common error handler for os8_pip_into and os8_pip_from def pip_error_handler(self, caller, reply): print "PIP error from inside " + caller + ": " print "\t" + self._child.before.strip() print "\t" + self._child.after.strip() # Was this error fatal or do we need to clean up? # Remember we subtract 1 from reply to get index into error tables. if not self._os8_fatal_check[reply - 1]: # Non fatal error. Exit pip to the monitor self.os8_send_ctrl ('[') # exit PIP #### os8_pip_into ################################################### # Send a copy of a local file into OS/8 using PIP. # # The file is sent via the SIMH paper tape device through PIP # specifying a transfer option. If no option is specified, # ASCII is assumed. |
︙ | ︙ | |||
394 395 396 397 398 399 400 | did_conversion = True elif option not in self._valid_pip_options: print "Invalid PIP option: " + option + ". Ignoring: " + path + " into OS/8." return else: pt = path | | | 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 | did_conversion = True elif option not in self._valid_pip_options: print "Invalid PIP option: " + option + ". Ignoring: " + path + " into OS/8." return else: pt = path # TODO: Sacrificial extra character code goes here. # Paper tape created, so attach it read-only and copy it in. We're # relying on txt2ptp to insert the Ctrl-Z EOF marker at the end of # the file. self.back_to_cmd ('\\.') self.send_cmd ('attach -r ptr ' + pt) self.os8_restart () |
︙ | ︙ | |||
419 420 421 422 423 424 425 426 427 428 429 430 431 432 | self.os8_send_ctrl ('[') # finish transfer self._child.expect ('\\*') self.os8_send_ctrl ('[') # exit PIP # We could detach ptr and restart OS/8 here, but we don't need to. # Do remove the temp file if we created one. if did_conversion: os.remove (pt) #### os8_pip_from ################################################### # Fetch a file from OS/8 to a local path using PIP. # # The OS/8 source filename is synthesized from the basename of the path, # upcasing if necessary. # | > | 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 | self.os8_send_ctrl ('[') # finish transfer self._child.expect ('\\*') self.os8_send_ctrl ('[') # exit PIP # We could detach ptr and restart OS/8 here, but we don't need to. # Do remove the temp file if we created one. if did_conversion: os.remove (pt) #### os8_pip_from ################################################### # Fetch a file from OS/8 to a local path using PIP. # # The OS/8 source filename is synthesized from the basename of the path, # upcasing if necessary. # |
︙ | ︙ | |||
475 476 477 478 479 480 481 482 483 484 485 486 487 488 | print "Format converting " + path # Convert text file to SIMH paper tape format bdir = pidp8i.dirs.build os.rename(path, path + ".temp") tool = os.path.join (bdir, 'bin', 'ptp2txt') subprocess.call (tool + ' < ' + path + ".temp" + ' > ' + path, shell = True) os.remove(path + ".temp") #### os8_send_line ################################################### # Core of os8_send_cmd. Also used by code that needs to send text # "blind" to OS/8, without expecting a prompt, as when driving EDIT. def os8_send_line (self, line): self.os8_send_str (line) | > | 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 | print "Format converting " + path # Convert text file to SIMH paper tape format bdir = pidp8i.dirs.build os.rename(path, path + ".temp") tool = os.path.join (bdir, 'bin', 'ptp2txt') subprocess.call (tool + ' < ' + path + ".temp" + ' > ' + path, shell = True) os.remove(path + ".temp") #### os8_send_line ################################################### # Core of os8_send_cmd. Also used by code that needs to send text # "blind" to OS/8, without expecting a prompt, as when driving EDIT. def os8_send_line (self, line): self.os8_send_str (line) |
︙ | ︙ | |||
568 569 570 571 572 573 574 | def read_tail (self, head, timeout = -1): self._child.expect_exact ([head], timeout) return self._child.readline () #### send_cmd ######################################################## | | > > > > > > > > > > > > > > | 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 | def read_tail (self, head, timeout = -1): self._child.expect_exact ([head], timeout) return self._child.readline () #### send_cmd ######################################################## # Wait for a SIMH command prompt and then send the given command. # If we are not in the simh context send ^e and set context "simh". # If we are not in simh context, send ^e set context "simh" # and hope for the best. # If we issue a command that enters os8 context, set context "os8". def send_cmd (self, cmd): if self._context == "os8": self._child.expect ("\n\\.$") self._child.sendcontrol ('e') self._context = "simh" elif self._context != "simh": self._child.sendcontrol ('e') self._child.expect ("sim> $") self._child.sendline (cmd) m = re.match (self._simh_comm_re, cmd) if m != None and m.group(1)[:1].upper() in self._enters_os8_context: self._context = "os8" #### send_line ####################################################### # Sends the given line "blind", without waiting for a prompt. def send_line (self, line): self._child.sendline (line) |
︙ | ︙ | |||
620 621 622 623 624 625 626 | # memory before initializing it yourself. # # See os8_zero_core () for a less heavy-handed alternative for use # when running under OS/8. def zero_core (self): self.send_cmd ('de all 0') | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 | # memory before initializing it yourself. # # See os8_zero_core () for a less heavy-handed alternative for use # when running under OS/8. def zero_core (self): self.send_cmd ('de all 0') #### describe_dev_config ############################################# # We provide an interface to alter SIMH device configurations for # specific parameters and specific devices # # dev configs supported: rx, tti, tape # # rx: RX8E, RX28 RX8E is the simh name for RX01 support. # RX28 is the simh name for RX02 support. # tti: KSR, 7b 7b is full keyboard support. # KSR forces upcase of lower case keys on input. # tape: td, dt td is the TD8E DECtape device # dt is the TC08 DECtape device def describe_dev_config (self, name): if name == "tape": lines = self.do_simh_show("dt") dev_status = self.new_parse_show_tape_dev(lines) if dev_status == "dt": return "dt" else: lines = self.do_simh_show("td") return self.new_parse_show_tape_dev(lines) elif name == "rx": lines = self.do_simh_show("rx") return self.new_parse_show_rx_dev(lines) elif name == "tti": lines = self.do_simh_show("tti") return self.new_parse_show_tti(lines) else: return None #### do_simh_show ################################################### # Calls show on the device name. # Returns array of lines from output. def do_simh_show (self, name): supported_shows = ["dt", "td", "tti", "rx"] if name not in supported_shows: return None ucname = name.upper() self.send_cmd("show " + name) self._child.expect(ucname + "\s+(.+)\r") lines = self._child.after.split ("\r") return lines #### parse_show_tape_dev ############################################ # Returns current state of DECtape support. # One of: disabled, td, dt, or None if parse fails. def new_parse_show_tape_dev (self, lines): if lines == None: return None is_enabled_re = re.compile("^(TD|DT)\s+(disabled|(devno=\S+,\s(\d)\s+units))$") m = re.match(is_enabled_re, lines[0]) if m == None or m.group(1) == None or m.group(2) == None: return None if m.group(2) == "disabled": return "disabled" elif m.group(1) == "TD": return "td" elif m.group(1) == "DT": return "dt" else: return None #### parse_show_tape_dev ############################################ # Returns current state of DECtape support. # One of: disabled, td, dt, or None if parse fails. def parse_show_tape_dev (self, after): lines = after.split ("\r") is_enabled_re = re.compile("^(TD|DT)\s+(disabled|(devno=\S+,\s(\d)\s+units))$") m = re.match(is_enabled_re, lines[0]) if m == None or m.group(1) == None or m.group(2) == None: return None if m.group(2) == "disabled": return "disabled" elif m.group(1) == "TD": return "td" elif m.group(1) == "DT": return "dt" else: return None #### parse_show_tape ################################################# # Returns an ordered list of files attached or None if disabled. def parse_show_tape (self, after): lines = after.split ("\r") is_enabled_re = re.compile("^(TD|DT)\s+(disabled|(devno=\S+,\s(\d)\s+units))$") m = re.match(is_enabled_re, lines[0]) if m == None or m.group(2) == None: return None if m.group(2) == "disabled": return None attached = {} attachment_re = re.compile("^\s+(((DT|TD)(\d)(.+),\s+(not\s+attached|attached\s+to\s+(\S+)),(.+))|12b)$") for line in lines[1:]: m = re.match(attachment_re, line) if m == None or m.group(1) == None or m.group(1) == "12b": continue filename = m.group(7) if filename == None: filename = "" attached[m.group(4)] = filename return attached #### change_foo_to_bar routines ###################################### # These routines affect the state of device configuration in SIMH. # They are intended as robust ways to toggle between incompatible # configurations of SIMH: # Choice of TD8E or TC08 DECtape. # Choice of RX01 or RX02 Floppy emulation. # Choice of KSR or 7bit console configuration. # There are always a pair of routines so you can go both ways. # The routines attempt to detect and correct problems. # For example: You are not allowed to disable DT if there # is a file attached to a DT device so such needs to be # detected and corrected. # The routines should check to see if the change is unnecessary. # For now they return None if no change necessary. # In future, we should add exception handling for no change necessary. # They return True if the change was successful and False if not. def do_tape_change (self, from_tape, to_tape): print "Disable: " + from_tape + ", and enable: " + to_tape from_cap = from_tape.upper() to_cap = to_tape.upper() self.send_cmd("show " + from_tape) self._child.expect(from_cap + "\s+(.+)\r") attached_from= self.parse_show_tape(self._child.after) if attached_from == None: print from_tape + " already is disabled." else: for unit in attached_from.keys(): if attached_from[unit] != "": det_comm = "det " + from_tape + unit # print det_comm + "(Had: " + attached_from[unit] + ")" self.send_cmd(det_comm) self.send_cmd("set " + from_tape + " disabled") self.send_cmd("show " + to_tape) self._child.expect(to_cap + "\s+(.+)\r") attached_to = self.parse_show_tape(self._child.after) if attached_to == None: # print "Enabling formerly disabled " + to_tape self.send_cmd("set " + to_tape + " enabled") else: print to_tape + " is already enabled." for unit in attached_to.keys(): if attached_to[unit] != "": print "Not detaching " + to_tape + unit + " " + attached_to[unit] return None # Test to confirm to_tape is now enabled. self.send_cmd("show " + to_tape) self._child.expect(to_cap + "\s+(.+)\r") attached_to = self.parse_show_tape(self._child.after) if attached_to == None: print "Failed attempt to enable " + to_tape return False return True #### change_dt_to_td ################################################# def change_dt_to_td (self): return self.do_tape_change ("dt", "td") #### change_td_to_dt ################################################# def change_td_to_dt (self): return self.do_tape_change ("td", "dt") #### parse_show_rx_dev ############################################### # Show the rx device configuration. def parse_show_rx_dev (self, after): lines = after.split ("\r") is_enabled_re = re.compile("^\s*(RX)\s+(disabled|((RX8E|RX28),\s+devno=\S+,\s+(\d)\s+units))$") m = re.match(is_enabled_re, lines[0]) if m == None or m.group(2) == None: return None if m.group(2) == "disabled": return "disabled" return m.group(4) #### new_parse_show_rx_dev ########################################### # Show the rx device configuration. def new_parse_show_rx_dev (self, lines): is_enabled_re = re.compile("^\s*(RX)\s+(disabled|((RX8E|RX28),\s+devno=\S+,\s+(\d)\s+units))$") m = re.match(is_enabled_re, lines[0]) if m == None or m.group(2) == None: return None if m.group(2) == "disabled": return "disabled" return m.group(4) #### parse_show_rx_attached ########################################## # Returns an ordered list of files attached or None if disabled. def parse_show_rx_attached (self, after): lines = after.split ("\r") attached = {} attachment_re = re.compile("^\s+(((RX)(\d)(.+),\s+(not\s+attached|attached\s+to\s+(\S+)),(.+))|autosize)$") for line in lines[1:]: m = re.match(attachment_re, line) if m == None or m.group(1) == None or m.group(1) == "autosize": continue filename = m.group(7) if filename == None: filename = "" attached[m.group(4)] = filename return attached #### do_rx_change #################################################### def do_rx_change (self, from_rx, to_rx): print "Switch rx driver: " + from_rx + ", to: " + to_rx self.send_cmd("show rx") self._child.expect("RX\s+(.+)\r") rx_type = self.parse_show_rx_dev (self._child.after) if rx_type == None: print "do_rx_change: Trouble parsing \'show rx\' output from simh. Giving up on:" print self.child.after return False elif rx_type == "disabled": print "rx is disabled. Enabling..." self.send_cmd("set rx enabled") # Retry getting rx info self.send_cmd("show rx") self._child.expect("RX\s+(.+)\r") rx_type = self.parse_show_rx_dev (self._child.after) if rx_type == None: print "do_rx_change after re-enable: Trouble parsing \`show rx\` output from simh. Giving up on:" print self._child.after return False elif rx_type == "disabled": print "do_rx_change re-enable of rx failed. Giving up." return False if rx_type.lower() == to_rx: print "rx device is already set to " + to_rx return None attached_rx= self.parse_show_rx_attached(self._child.after) if attached_rx == None: print "do_rx_change: Trouble parsing /'show rx\' from simh to find rx attachments. Got:" print self._child.after else: for unit in attached_rx.keys(): if attached_rx[unit] != "": det_comm = "det rx" + unit # print det_comm + "(Had: " + attached_rx[unit] + ")" self.send_cmd(det_comm) self.send_cmd("set rx " + to_rx) # Test to confirm new setting of RX self.send_cmd("show rx") self._child.expect("RX\s+(.+)\r") rx_type = self.parse_show_rx_dev(self._child.after) if rx_type == None: print "Failed change of rx to " + to_rx + ". Parse fail on \'show rx\'." return False elif rx_type.lower() != to_rx: print "Failed change of rx to " + to_rx + ". Instead got: " + rx_type return False return True #### change_rx01_to_rx02 ############################################# def change_rx01_to_rx02 (self): return self.do_rx_change ("rx8e", "rx28") #### change_rx02_to_rx01 ############################################# def change_rx02_to_rx01 (self): return self.do_rx_change ("rx28", "rx8e") #### get_tti ################################################## # Returns an ordered list of files attached or None if disabled. def get_tti (self, after): self.send_cmd("show tti") self._child.expect("TTI\s+(.+)\r") lines = after.split ("\r") is_enabled_re = re.compile("^(KSR|7b)$") if len(lines) < 2: return None # That second line of output contains embedded newlines. m = re.match(is_enabled_re, lines[1].strip()) if m == None or m.group(1) == None: return None return m.group(1) #### new_parse_show_tti ############################################## # Returns an ordered list of files attached or None if disabled. def new_parse_show_tti (self, lines): is_enabled_re = re.compile("^(KSR|7b)$") if len(lines) < 2: return None # That second line of output contains embedded newlines. m = re.match(is_enabled_re, lines[1].strip()) if m == None or m.group(1) == None: return None return m.group(1) #### do_tti_change ################################################### def do_tti_change (self, from_tti, to_tti): print "Switch tti driver from: " + from_tti + ", to: " + to_tti tti_type = self.get_tti (self._child.after) if tti_type == None: print "do_tti_change: Trouble parsing \'show tti\' output from simh. Giving up on:" print self._child.after return False elif tti_type == to_tti: print "tti device is already set to " + to_tti return None else: # Change the tti setting self.send_cmd ("set tti " + to_tti) # Test to confirm new setting of tti tti_type = self.get_tti (self._child.after) if tti_type == None: print "Failed change of tti to " + to_tti + ". Parse fail on \'show tti\'." return False elif tti_type != to_tti: print "Failed change of tti to " + to_tti + ". Instead got: " + tti_type return False else: return True #### change_ksr_to_7b ################################################ def change_ksr_to_7b (self): return self.do_tti_change ("KSR", "7b") #### change_7b_to_ksr ################################################ def change_7b_to_ksr (self): return self.do_tti_change ("7b", "KSR") |
Changes to libexec/mkos8.
︙ | ︙ | |||
52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #### globals and constants ############################################# # Flag set when -v is *not* given. Causes make_*() and the functions # called thereby to print progress messages to the console since SIMH # and OS/8 output is not being sent there to clue the user into the # script's progress. progmsg = True # Name of the RK05 disk image files we create _bin_rk05 = "os8v3d-bin.rk05" _src_rk05 = "os8v3d-src.rk05" _patched_rk05 = "os8v3d-patched.rk05" _v3f_build_rk05 = "os8-v3f-build.rk05" | > > > > > > > | 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #### globals and constants ############################################# # Flag set when -v is *not* given. Causes make_*() and the functions # called thereby to print progress messages to the console since SIMH # and OS/8 output is not being sent there to clue the user into the # script's progress. progmsg = True # Optional sections encountered. Is a stack because optional sections # can be nested. options_stack = [] # List of options enabled on command line. options_set = [] # Name of the RK05 disk image files we create _bin_rk05 = "os8v3d-bin.rk05" _src_rk05 = "os8v3d-src.rk05" _patched_rk05 = "os8v3d-patched.rk05" _v3f_build_rk05 = "os8-v3f-build.rk05" |
︙ | ︙ | |||
84 85 86 87 88 89 90 91 92 93 94 95 96 97 | _odt_parse = re.compile(_odt_parse_str) # Simple regex to separate command keyword from rest of line. # rest is in group(3) _comm_re_str = "^(\S+)(\s+(.*))?$" _comm_re = re.compile(_comm_re_str) # Regex for parsing an argument string into a sys device _mount_regex_str = "^(rk|td|dt|rx)(\d?)\s+(.*)$" _mount_re = re.compile(_mount_regex_str) # Map of SIMH device names to OS/8 device name prefixes. _os8_from_simh_dev = {"rk" : "RK", "td" : "DTA", "dt" : "DTA", "rx" : "RX"} | > > > > > > > > > > > > | 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | _odt_parse = re.compile(_odt_parse_str) # Simple regex to separate command keyword from rest of line. # rest is in group(3) _comm_re_str = "^(\S+)(\s+(.*))?$" _comm_re = re.compile(_comm_re_str) # Simple regex to identify an end comm and put the rest # the rest of the line in group(1) _end_comm_re = re.compile ("^end\s+(.*)?$") # Simple regex to identify an end option command and put # the rest of the line in group(1) _end_option_comm_re = re.compile ("^end\s+option\s+(.*)$") # Simple regex to identify a begin command and put # the rest of the line in group(1) _begin_option_comm_re = re.compile ("^begin\s+option\s+(.*)$") # Regex for parsing an argument string into a sys device _mount_regex_str = "^(rk|td|dt|rx)(\d?)\s+(.*)$" _mount_re = re.compile(_mount_regex_str) # Map of SIMH device names to OS/8 device name prefixes. _os8_from_simh_dev = {"rk" : "RK", "td" : "DTA", "dt" : "DTA", "rx" : "RX"} |
︙ | ︙ | |||
1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 | # Finish up if progmsg: print "Cleaning up..." if progmsg: print "Squish RKB1" s.os8_squish ("RKB1") s.back_to_cmd("\\.") s.send_cmd ("detach rk0") s.send_cmd ("detach rk1") #### do_mount_comm ###################################################### # Remember we have to figure out how to differentiate between # RX01 and RX02 | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 | # Finish up if progmsg: print "Cleaning up..." if progmsg: print "Squish RKB1" s.os8_squish ("RKB1") s.back_to_cmd("\\.") s.send_cmd ("detach rk0") s.send_cmd ("detach rk1") #### basic_line_parse ################################################### # Returns stripped line and any other cleanup we want. # Returns None if we should just 'continue' on to the next line. # Filters out comments. # Processes the option begin/end blocks. def basic_line_parse (s, args, line, comm_file): global options_stack if line[0] == "#": return None retval = line.strip() if retval == "": return None # First test if we are in a begin option block m = re.match (_begin_option_comm_re, retval) if m != None: rest = m.group(1) print "doing_begin_option: " + rest print "options_set: " + str (options_set) if rest in options_set: # Option is active. We push it onto the stack print "Pushing " + rest + " onto options_stack" options_stack.insert(0, rest) else: # Option is inactive. Ignore all subseqent lines # until we get to an end command that matches our option. ignore_to_subcomm_end (s, args, line, comm_file, "option " + rest) return None m = re.match(_end_option_comm_re, line) if m != None: rest = m.group(1) if (rest == None or rest == ""): print "Warning! option end statement encountered with no argument." return None if len(options_stack) == 0: print "Warning! option end statement found with no matching begin for option: " + rest return None if rest != options_stack[0]: print "Warning! Mismatched option begin/end group. Currently inside option: " + \ options_stack[0] + " not " + rest return None else: print "Popping " + options_stack[0] options_stack.pop() return None return retval #### do_simh_comm ######################################################## # I tried to avoid including this command but sometimes you just # have to reconfigure subtle bits of device drivers. # We assume we can call a simh command at any time, but # doing so puts us in the simh context that persists until we # issue a boot or go command. def do_simh_comm (s, args, line, comm_file): if progmsg: print line s.send_cmd(line) #### do_umount_comm ###################################################### def do_umount_comm (s, args, line, comm_file): detach_comm = "det " + line if progmsg: print detach_comm s.send_cmd(detach_comm) #### do_mount_comm ###################################################### # Remember we have to figure out how to differentiate between # RX01 and RX02 def do_mount_comm (s, args, line, comm_file): m = re.match(_mount_re, line) if m == None: print "Could not parse mount. Ignoring: " + line return simh_dev = m.group(1) unit = m.group(2) rest = m.group(3) |
︙ | ︙ | |||
1202 1203 1204 1205 1206 1207 1208 | print "Unrecognized simh dev: " + simh_dev return os8dev = _os8_from_simh_dev[simh_dev] attach_comm = "att " + ro_arg + simh_dev + unit + " " + imagename if progmsg: print attach_comm | < < < < | < < < < < > | | > | < > > > > > > > > > > > > > > > > > > > > | | | | | < | | < | | > | < | | | 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 | print "Unrecognized simh dev: " + simh_dev return os8dev = _os8_from_simh_dev[simh_dev] attach_comm = "att " + ro_arg + simh_dev + unit + " " + imagename if progmsg: print attach_comm s.send_cmd(attach_comm) #### do_boot_comm ####################################################### def do_boot_comm (s, args, line, comm_file): boot_comm = "boot " + line if progmsg: print boot_comm s.send_cmd(boot_comm) #### do_os8_comm ######################################################## def do_os8_comm (s, args, line, comm_file): os8_comm = line if progmsg: print os8_comm s.os8_send_cmd ("\\.", os8_comm) #### do_pal8_comm ######################################################## # The "pal8" script command comes in two forms: # The two argument form where the PAL8 status is printed on the fly # and the 3 argument form where all status goes into the listing file. # We do the 3 argument form with a simple "os8" script command. def do_pal8_comm (s, args, line, comm_file): m_2form = re.match (_two_arg_pal_re, line) if m_2form != None: # Call the 2arg pal8 code that works hard at error analysis. call_pal8 (s, source=m_2form.group(4), binary=m_2form.group(1)) else: m_3form = re.match (_three_arg_pal_re, line) if m_3form != None: # Just run the OS/8 command. os8_comm = line if progmsg: print "Calling 3-arg pal8 command: " + os8_comm s.os8_send_cmd ("\\.", os8_comm) else: print "Unrecognized pal8 form: " + line #### do_done_comm ####################################################### # Return to SIMH from OS/8 # Detach all devices to make sure buffers all get written out. def do_done_comm (s, args, line, comm_file): s.back_to_cmd ("\\.") s.send_cmd ("detach all") #### do_begin_option #################################################### # Begin a block of text that is ignored unless the option # appears in options_set def do_begin_option (s, args, line, comm_file): global options_stack global options_set print "do_begin_option: line: " + line print "options_set: " + str (options_set) if line in options_set: # Option is active. We push it onto the stack print "Pushing " + line + " onto options_stack" options_stack.insert(0, line) else: # Option is inactive. Ignore all subseqent lines # until we get to an end command that matches our option. ignore_to_subcomm_end (s, args, line, comm_file, line) #### do_begin_comm ###################################################### def do_begin_comm (s, args, line, comm_file): sub_commands = {"fotp": do_fotp_subcomm, "build": do_build_subcomm, "absldr": do_absldr_subcomm} m = re.match(_comm_re, line) if m == None: print "Could not parse sub-command: " + line if m.group(1) not in sub_commands: print "Ignoring unrecognized sub-command: " + m.group(1) print "Ignoring everything to next end." ignore_to_subcomm_end(s, line, comm_file, "") else: sub_commands[m.group(1)](s, args, m.group(3), comm_file) #### do_run_build_build ################################################# # ***CAUTION*** # When you do this you are instructing BUILD to # OVERWRITE the system area. If you do this to your # running RK05 pack by mistake, you WILL make a mess # and need to re-run mkos8 to re-make it. def do_run_build_build (s, args, os8_spec, cd_spec): s.os8_send_cmd ("\$", "BUILD") s.os8_send_cmd ("LOAD OS/8: ", os8_spec) s.os8_send_cmd ("LOAD CD: ", cd_spec) #### do_build_subcomm ################################################### def do_build_subcomm (s, args, old_line, comm_file): os8_comm = "RU " + old_line if progmsg: print os8_comm s.os8_send_cmd ("\\.", os8_comm) for line in comm_file: line = basic_line_parse(s, args, line, comm_file) if line == None: continue m = re.match(_comm_re, line) if m == None: print "Ignoring mal-formed build sub-command: " + line continue build_sub = m.group(1) rest = m.group(3) if rest == None: rest = "" if build_sub not in _build_comm_regs: print "Unrecognized BUILD command: " + build_sub continue if build_sub == "end": if rest == "": print "Warning! end statement encountered inside build with no argument. Exiting build." return elif rest == "build": return else: print "Warning! Mismatched begin/end blocks. Encountered end: " + rest + "Exiting build." return build_re = _build_comm_regs[build_sub] if build_re != None: m2 = re.match(build_re, rest) if m2 == None: print "Ignoring mal-formed BUILD " + build_sub + " command: " + rest continue |
︙ | ︙ | |||
1350 1351 1352 1353 1354 1355 1356 | comm = build_sub + " " + rest if progmsg: print "$ " + comm s.os8_send_cmd ("\$", comm) #### do_fotp_subcomm #################################################### | | | > | | > | > > > > > > | | | > | | > | > > > > | > > | > > | > | > | | > > > > < < | | | 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 | comm = build_sub + " " + rest if progmsg: print "$ " + comm s.os8_send_cmd ("\$", comm) #### do_fotp_subcomm #################################################### def do_fotp_subcomm (s, args, old_line, comm_file): os8_comm = "RU " + old_line if progmsg: print os8_comm s.os8_send_cmd ("\\.", os8_comm) for line in comm_file: line = basic_line_parse(s, args, line, comm_file) if line == None: continue # Test for special case, "end" and act on it if present. m = re.match(_comm_re, line) if m != None and m.group(1) != None and m.group(1) != "" and m.group(1) == "end": rest = m.group(3) if rest == None or rest == "": print "Warning! end statement encountered inside fotp with no argument." elif rest != "fotp": print "Warning! Mismatched begin/end blocks in fotp. Encountered end: " + rest if progmsg: print "End FOTP" s.os8_send_ctrl ('[') return m = re.match(_fotp_re, line) if m == None: print "Ignoring mal-formed fotp file spec: " + line continue comm = line if progmsg: print "* " + line s.os8_send_cmd ("\\*", line) #### do_absldr_subcomm #################################################### # A clone of do_fotp_subcom. Can we find a way to merge the common code? def do_absldr_subcomm (s, args, old_line, comm_file): os8_comm = "RU " + old_line if progmsg: print os8_comm s.os8_send_cmd ("\\.", os8_comm) for line in comm_file: line = basic_line_parse(s, args, line, comm_file) if line == None: continue # Test for special case, "end" and act on it if present. m = re.match(_comm_re, line) if m != None and m.group(1) != None and m.group(1) != "" and m.group(1) == "end": rest = m.group(3) if rest == None or rest == "": print "Warning! end statement encountered inside absldr with no argument." elif rest != "absldr": print "Warning! Mismatched begin/end blocks in absldr. Encountered end: " + rest if progmsg: print "End ABSLDR" s.os8_send_ctrl ('[') return m = re.match(_absldr_re, line) if m == None: print "Ignoring mal-formed absldr file spec: " + line continue comm = line if progmsg: print "* " + line s.os8_send_cmd ("\\*", line) #### ignore_to_subcomm_end ############################################# def ignore_to_subcomm_end (s, args, old_line, comm_file, end_str): global options_stack for line in comm_file: line = line.strip() print "Ignore: " + line m = re.match(_end_comm_re, line) if m == None: continue rest = m.group(1) if rest == None: rest = "" if rest == end_str: return #### do_include_comm ##################################################### # Call run_system_script recursively on the file path provided. def do_include_comm (s, args, line, comm_file): if not os.path.isfile(line): print "Could not find include file: " + line run_system_script (s, args, line) #### do_end_comm ######################################################## def do_end_comm (s, args, line, comm_file): print "Unexpectedly encountered end command: " + line #### run_system ######################################################## # Run a system command script # Call parsers as needed for supported sub commands. # |
︙ | ︙ | |||
1452 1453 1454 1455 1456 1457 1458 | # about argument parsing for mkos8. def run_system_script (s, args, filename): # Strings, regexps, and command arrays used by run_system commands = {"mount": do_mount_comm, "boot": do_boot_comm , "os8": do_os8_comm, "done": do_done_comm, "pal8": do_pal8_comm, "include": do_include_comm, | | > | | < | | | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > | 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 | # about argument parsing for mkos8. def run_system_script (s, args, filename): # Strings, regexps, and command arrays used by run_system commands = {"mount": do_mount_comm, "boot": do_boot_comm , "os8": do_os8_comm, "done": do_done_comm, "pal8": do_pal8_comm, "include": do_include_comm, "begin": do_begin_comm, "end": do_end_comm, "umount": do_umount_comm, "simh": do_simh_comm} try: comm_file = open(dirs.os8mo + filename, "r") except IOError: print filename + " not found." sys.exit(-1) for line in comm_file: line = basic_line_parse (s, args, line, comm_file) if line == None: continue m = re.match(_comm_re, line) if m == None: print "Ignoring command line: " + line continue if m.group(1) not in commands: print "Unrecognized command: " + m.group(1) continue print "Calling: " + m.group(1) commands[m.group(1)](s, args, m.group(3), comm_file) #### testing ############################################################## def run_testing (s, args): print "Testing!" retval = s.describe_dev_config("tti") if retval == None: retval = "None" print "tti config: " + retval retval = s.change_ksr_to_7b() print str(retval) retval = s.describe_dev_config("tti") if retval == None: retval = "None" print "tti config: " + retval retval = s.change_7b_to_ksr() print str(retval) retval = s.describe_dev_config("tape") if retval == None: retval = "None" print "tape config: " + retval s.send_cmd("att dt0 test.tu56") retval = s.change_dt_to_td() print str(retval) retval = s.describe_dev_config("tape") if retval == None: retval = "None" print "tape config: " + retval retval = s.describe_dev_config("rx") if retval == None: retval = "None" print "rx config: " + retval s.send_cmd("att rx0 test.rx01") retval = s.change_rx01_to_rx02() print str(retval) retval = s.describe_dev_config("rx") if retval == None: retval = "None" print "rx config: " + retval s.send_cmd("att rx1 test.rx01") retval = s.change_rx02_to_rx01() print str(retval) #### main ############################################################## # Program entry point. Parses the command line and drives the above. def main (): # Parse the command line allowed_acts = ["all", "bin", "src", "patch", "head", "v3f", "system", "testing"] do_all_acts = ["bin", "src"] # Just do bin and src if act is "all". ap = argparser.ArgParser (allowed_acts) global progmsg global options_stack global options_set progmsg = not ap.args.verbose # Initialize our acts dict. acts = {} first_act = None for this in allowed_acts: acts[this] = False if ap.args.option != None: print "options:" for my_option in ap.args.option: options_set.extend(my_option) print my_option for act in ap.args.what: if act not in allowed_acts: print "Invalid act: " + act + " ignored." continue if first_act == None: first_act = act |
︙ | ︙ | |||
1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 | if acts["bin"]: make_bin (s, ap.args) if acts["src"]: make_src (s, ap.args) if acts["patch"]: make_patch (s, ap.args) if acts["v3f"]: make_v3f (s, ap.args) if acts["head"]: run_system_script (s, ap.args, "tc08.mkos8") if acts["system"]: run_system_script (s, ap.args, "v3f-control.mkos8") s.quit () if progmsg: print "Done!" if __name__ == "__main__": main() | > | 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 | if acts["bin"]: make_bin (s, ap.args) if acts["src"]: make_src (s, ap.args) if acts["patch"]: make_patch (s, ap.args) if acts["v3f"]: make_v3f (s, ap.args) if acts["head"]: run_system_script (s, ap.args, "tc08.mkos8") if acts["system"]: run_system_script (s, ap.args, "v3f-control.mkos8") if acts["testing"]: run_testing (s, ap.args) s.quit () if progmsg: print "Done!" if __name__ == "__main__": main() |
Deleted src/os8-v3f/BUILD.PA.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted src/os8-v3f/CCL.BI.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted src/os8-v3f/FUTIL.LS.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted src/os8-v3f/OS8.PA.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Deleted src/os8-v3f/RESORC.BI.
|
| < < < < < < < < < < < < |
Added src/os8/v3f/BUILD.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 | /33 OS/8 V3D BUILD / / / / / / / / / /COPYRIGHT (C) 1971,1972,1973,1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / /ABSTRACT-- /BUILD IS THE SYSTEM CONFIGURATOR FOR THE OS/8 PROGRAMMING /SYSTEM. WITH BUILD, THE DEVICES WITHIN A PARTICULAR /SYSTEM CAN BE RAPIDLY AND EASILY CHANGED. BUILD ALSO /PROVIDES THE FACILITY FOR CREATING AN INITIAL OS/8 SYSTEM /FROM BINARY PAPER TAPES OR CASSETTES. /V3 CHANGES /0. MADE BUILD SUPPORTABLE /1. ADDED VE COMMAND (CURRENT VERSION # IS 3X WHERE X IS PATCH LEVEL) /2. FIXED PROBLEM WITH Z'S AND 9'S IN FILENAMES /3. CHANGED LENGTH OF DF32 /4. FIXED PROBLEM WITH RK8 BOOTSTRAP RECORD. /5. ON LOAD, NULL EXTENSION FIRST SEARCHES FOR .BN /6. CR TO $ DOESN'T GIVE ERROR /7. FIXED BUG WITH BUILDING ROM SYS /8. RUBOUTS TO BOL GIVE $ /9. ^U RETYPES $ /10. ASSUME DSK: IF NO DEV GIVEN WITH LOAD /11. NO DOT IS PRINTED IF NO EXTENSION /12. ^O STUFF NEW /13. ALLOW PARITY ^C /14. ADDED EXAMINE COMMAND /15. FIXED BUG RE ACCESSING USR TABLE VIA POINTER /16. CLEANED UP MOVE ROUTINE /17. CLEANED UP NUMBER TOO BIG CHECKER /18. OVERFLOW ERROR MESSAGE CHANGED TO 'BAD ORIGIN' /19. DON'T ALLOW NAMES OVER 6 CHARS TO SPILL INTO EXTENSION; / DON'T ALLOW MULTIPLE EXTENSIONS /20. INCREASED NUMBER OF ALLOWABLE ENTRY PTS/HANDLER TO 16 (DEC) /21. CLEANED UP SYMBOL PRINT ROUTINE /22. GOT NAMES IN TABLE TO LINE UP. /23. INSERT GRPNAME <CR> INSERTS FIRST HANDLER /24. INSERT GRP,DEV1,DEV2,DEV3,... /25. INSERT GRP,DEV1-5,... /26. SAME FOR DELETE AND REPLACE /27. COUNT DEVICES AND SLOTS ONLY ON BOOT /28. FIXED BUG RE SYS RF08=4023 /29. GENERAL SUPPORT OF 2-PAGE SYS HANDLERS /30. ADDED QL COMMAND /31. SETS SA=00200, JSW=0 /32. UNLOAD UNLOADS AND DELETES /33. ADDED DSK COMMAND /34. BUILD COMMAND /35. PRINT TELLS YOU ABOUT DSK /36. TOOK OUT LOC DEPENDENT CHECK FOR SYSTEM HANDLERS /37. INSERT ALLOWS SETTING # OF PLATTERS /38. HANDLER HEADER LOADS DIRECTLY INTO DESCRIPTOR TABLE /39. USES EXTRA CORE IF AVAILABLE (ALSO CHECKS SOFTWARE CORE SIZE) /40. STOPS ECHOING ON INPUT LINE OVERFLOW /41. *'S SYSTEM DEVICE /42. REMEMBERS SYS ACROSS A BOOT /43. 'Y' INSTEAD OF 'YE' /44. BO CHECKS DCB IN CORE TO SEE IF NEED REWRITE MONITOR /45. ALLOW UNLOADING ENTRY POINT NAMES /46. CTL COMMAND /47. EACH COMMAND HAS ITS OWN MAXIMUM INPUT LINE SIZE /48. ADDED CORE COMMAND /49. FIXED ^U TO WRITE ZERO DIRECT MSG BUG /50. HIT CONTINUE AFTER 'SYS ERR' TO RETRY /51. PRESERVED DATE ACROSS BOOT /52. MULTIPLE LOADS AND UNLOADS /53. LOAD FROM SCRATCH USES INTERNAL ACTIVE HANDLERS /54. CASSETTE SUPPORT /55. SETS CORE CONTROL BLOCK /CHANGES SINCE FIELD RELEASE /A 'NO ROOM' DOESN'T PRINT 'BAD LOAD' /B NO. OF ENTRY POINTS NOW CORRECTLY CHECKED FOR /C FIXED BUG RE BUILDING TD8E FROM TD8E /D BOOT CMD DISABLES BUILD CMD /E JSW SET TO 1 BEFORE CHAINING TO ABSLDR /F P CMD BUG FIXED /G ALTER BUG FIXED /H LENGTH OF INPUT LINE SYMBOLIC /I SOFCOR STUFF OPTIMIZED /J QL DOESN'T PRINT SPACE BETWEEN SYS'S GRP:NAME /K FIXED BUG IN 32K /L PAPER TAPE PUTS HLT IN 7600 /THINGS TO DO: /? DIES IF DATA OCCURS BEFORE *0 /? BOOT.ZE, .NZ CMD? /? GET 2-PAGE BIT OF CURRENT SYSTEM /CHANGES FOR MAINTENANCE RELEASE V3C: / 7-AUG-75 /1. CHANGED VERSION NUMBER TO V5 /2. INCORPORATED PATCH SEQ #1 (DSN APRIL 1975) / ZERO LOCATION SOFSET WHILE BUILDING /3. INCORPORATED PATCH SEQ #2 (DSN NOV. 1974) / DISMISS USR AFTER ?NAME ERROR /4. INCORPORATED PATCH SEQ #3 (DSN MARCH 1975) / DECREASE SYSTEM SIZE BY 5 (FOR ABSLDR) WHEN BUILDING FROM PAPER TAPE /5. INCORPORATED PATCH SEQ #4 (DSN APRIL 1975) / ADDED 'SIZE' COMMAND TO BUILD /6. FIXED BUG WHICH CAUSES SYSXY.RS NOT FOUND TO BE PRINTED / ON BOOTXY.RS COMMAND /CHANGES FOR V3D: / 1-MAY-77 /1. FIXED PROBLEM WITH CASSETTE BUILD (JSW WAS SET WRONG) /2. ALLOWED SAVING OF HIGH-ORDER DATE BITS /BUILD PAGE 0 *1 HLT /SAFETY HALT AND PATCH SPACE SAV1, 0 SAV2, 0 /SAVES GROUP NAME /POINTER TO BATCH ROUTINE (GROSS BUT NEEDED THE ROOM) BATT, BATTST /AGAIN GROSS BUT WHAT CAN I SAY? *10 /AUTO INDEX REGISTERS XR1, 0 /GENERAL PURPOSE REGISTERS XR2, 0 XR3, 0 XR4, 0 /USED TO BUILD IMAGE TABLES XR5, 0 LXR, 0 GNMXR, 0 L600, 600 *20 COUNT, 0 /GENERAL COUNTER LOCATION CHAR, 0 /CHARACTER BUFFER TEMP, 0 /TEMPORARIES TMP1, 0 BUFFER=5400 BINARY=6000 DEVBUF=0400 /FIRST HANDLER AT 10400 /FOR REASONS TOO LONG TO GO INTO HERE, /BUT WHICH HAVE TO DO WITH CURIOUS /PROPERTIES OF THE NUMBER 0, /HANDLERS CAN'T START AT 0. /THEY COULD HAVE STARTED AT 200. SOFSET=7747 /SYSTEM OFFSET. (CURRENTLY =0) PG7600=BUFFER /RECORD 0 (IMAGES OF BOTH 7600'S) LDRCTL=4113 /CHECK OS/8 ASSEMBLY NAME1, 0 /NAME1-4 HOLDS FILE AND DEVICE NAMES NAME2, 0 NAME3, 0 NAME4, 0 TABLMT, DSCTAB /HIGH CORE END OF DESCRIPTORS /FIRST FREE LOCATION SIZE, 0 HNDPTR, DEVBUF /POINTS TO FIRST FREE LOCATION IN HANDLER TABLE BLDSAV=76 /**** WILL DESTROY PREVIOUS FILES /START OF 40 BLOCK TO SAVE BUILD IN HDRSIZ=10 /NUMBER OF ITEMS IN A DESCRIPTOR DSCPTR, DSCTAB /ALWAYS POINTS TO BEGIN OF CURRENT DESCRIPTOR SLOT, 0 DSKG1, 0 /NAME OF 'DSK' DSKG2, 0 DSKP1, 0 DSKP2, 0 NEWPAG, 0 OLDPAG, 0 NEWCOR, 0 /NEW CORE MAX SAVDAT, 0 /REMEMBERS DATE ACROSS A BOOT DATEWD=7666 FLAG2, 1 /0 IF PREVIOUS SYSTEM HAD A 2-PAGE HANDLER /SAMSYS, 1 /0 IF DIDN'T SPECIFY NEW SYS BLOK66=0 SYSDCB, 0 SA=7744 JSW=7746 /BOOTDV, 0 /HANDLER ADDRESS OF DEVICE WE'RE BOOTSTRAPPING TO SAVHID, 0 /HIGH-ORDER DATE (BITS 3-4) /BEGLIN: 72 CHAR LINE BUFFER /NEW BUILD CORE ALLOCATION: /0000-5177 BUILD (ABSLD MUST BE ABOVE 4177) /5400-5777 DEVICE HANDLER FOR LOAD /5200-5377 PAPER TAPE/INIT/LINE BUFFER /6000-6377 INPUT BUFFER FOR LOAD (TEMP LOC OF USR) /6400-7577 DESCRIPTOR TABLE (DSCTAB) /BINARY MUST FOLLOW BUFFER /FIELD 1: HANDLERS (0400-7577) /10000-10377 BLOK66 BUFFER *200 SKP CLA /ENTRY FROM 'R BUILD' HLT /CHAIN ENTRY ADDRESS TAD I [7600 /SEE IF SYSTEM ALREADY EXISTS CIA TAD [4207 SZA CLA /IF NOT, BUILD SYSTEM FROM PAPER TAPE CLA IAC /NOTE FACT THAT OS/8 AINT AROUND DCA I [RETSW JMS I (CORE DCA I (AMTCOR /FIGURE OUT HOW MUCH CORE WE HAVE JMS I (GOOD /DO SOME INITIALIZATION; IT'LL DO YA GOOD TAD (BATLS-1 /SET POINTER FOR BATCH OVERLAY JMS I (BATTST /GO CHECK FOR CALL FROM BATCH CONFIG, CDF 0 DCA I (ECHOFLG /ALLOW TYPING JMS I [CRLF DOLR, TAD ["$ /OUTPUT A $ BECAUSE I'M JEWISH JMS I [TTYOUT DCA I [SWAPER /USE CURRENT HANDLER, NO SWAP ON ^C. TAD [-LNLNGT JMS I [GTEXT /READ TTY LINE JMP DOLR JMS I [GNAME /INTERPRET THE COMMAND TAD NAME1 SNA JMP CONFIG DCA CHAR /ENABLE TEST TO WORK JMS I [TEST /LOOK FOR THE COMMAND IN LIST -1417;LOAD /LOAD DEVICE HANDLER BINARY -2205;REPLACE /REPLACE IN SYSTEM -1601;NAME /ALTER PERMANENT NAME -0114;ALTER /CHANGE DEVICE HANDLER LOCATION -2022;PRINT /SYSTEM STATUS -2331;SYSTEM /SPECIFY SYSTEM DEVICE -0217;BOOT /BOOTSTRAP THE NEW SYSTEM -2516;UNLOAD /DELETE INACTIVE HANDLER -0405;DELETE /DELETE ACTIVE HANDLER -1116;INSERT /INSERT HANDLER IN SYSTEM -2605;VERS /TYPE VERSION # -0530;EXAMINE /EXAMINE LOCATION -2114;QLIST /QUICK LIST -0423;DSK /DSK -0317;KORE /CORE -0403;DCBCM /DCB -0324;CTLCM /CTL -2311;SIZCM /SIZE -0516;END /END COMMAND FOR BATCH BD, -0225;BUILD /BUILD 0 /MUST TERMINATE LIST WITH 0 JMP I [WHAT /DIDN'T FIND COMMAND /NEW HEADER BLOCK: / DEVICE GROUPNAME / DEVICE PERMANENT NAME / DCB (R/W,TYPE,MAX # OF PLATTERS) / 1/2 PAGE, SYSTEM BIT, CORES BIT, REL ENTRY PT / MUST BE 0 / SIZE OF 1 PLATTER CORSIZ, GETCHA, 0 TAD DSCPTR TAD I GETCHA ISZ GETCHA DCA GETEM TAD I GETEM JMP I GETCHA /GOTCHA SUBROUTINE MOVED FOR ROOM PUT=JMS I [GOTCHA GET=JMS I [GETCHA BATTST, 0 /SUBROUTINE TO SEE IF CALLED FROM BATCH DCA XR1 /POINTER TO OVERLAY CODE IN FIELD 2 TAD I [7777 /GET THE BATCH SWITCH (JMP BATBK IF IN BATCH) RAL /BIT 1 SMA CLA /IF NO BATCH MAY NOT HAVE FIELD 2 JMP I BATTST /NOT CALLED FROM BATCH BATBK, CIF 20 /NOW TO FIELD 2 JMS I (BATSET /GO DO SOME OVERLAYS JMP I BATTST /RETURN TO CALLER GETEM, /POINTS INTO DSCTAB RELCOR, 0 CLA IAC DCA CORSIZ /MAKE RE-USABLE TAD [7400 DCA CORX /MAKE ROUTINE REUSABLE ON 32K MACHINE COR0, CDF 0 TAD CORSIZ RTL RAL AND COR70 TAD COREX DCA .+1 COR1, CDF /N TAD I CORLOC COR2, NOP DCA COR1 TAD COR2 DCA I CORLOC COR70, 70 TAD I CORLOC CORX, 7400 TAD CORX TAD CORV SZA CLA JMP COREX TAD COR1 DCA I CORLOC ISZ CORSIZ JMP COR0 COREX, CDF 0 STA TAD CORSIZ JMP I RELCOR /LEAVE WITH HIGHEST EXISTENT BANK CORLOC, CORX CORV, 1400 PAGE /GET GETS DESCRIPTOR ITEM FROM CURRENT DESCRIPTOR /OP /PUT PUTS DESCRIPTOR ITEM IN AC BACK IN SPECIFIED ITEM /OP IN CURRENT DESCRIPTOR /ITEMS: /ACTIVE BIT 0=1 MEANS ENTRY POINT HAS BEEN INSERTED (IS ACTIVE) /PERM1 PERMANENT NAME (FIRST 2 CHARS) /PERM2 2ND 2 CHARS /TWOPAG BIT 0=1 MEANS 2-PAGE HANDLER, BIT 4 IGNORED, BITS 5-11 RELATIVE ENTRY POINT /PAGRES BITS 7-11 GIVE PAGE OF START OF HANDLER WHEN ROTATED 6 RT /GRPNM1 GROUP NAME (DEVICE NAME) FIRST 2 CHARS /GRPNM2 2ND 2 CHARS /DEVSIZ GIVES SIZE OF 1 PLATTER /PLATNUM # OF PLATTERS IN BITS 2-4 /DSKBIT BIT 1 IS FLAG FOR 'DSK' (USED TEMPORARILY BY BUILD) /MAXPLT MAXIMUM NUMBER OF PLATTERS ALLOWED (IN BITS 9-11) /DCB D.C.B. BIT 0: FILESTRUCTURED, BITS 3-8 DEVICE TYPE / BITS 9-11 MAX NO. OF PLATTERS /CORES BIT 2 MEANS ENTRY PT IS CORESIDENT WITH SYS HANDLER /SYSBIT BIT 1 IS A 1 IF THE DEVICE HAS NAME 'SYS' AND IS A SYS DEVICE /IF FIRST ENTRY OF A DESCRIPTOR IS GE 7600, THEN THIS /ENTRY IS A BOOTSTRAP ENTRY. /IT STARTS WITH THE NEGATIVE OF THE NUMBER OF WORDS IN THE /BOOTSTRAP (FOR THE PRECEDING DEVICE), FOLLOWED BY THAT MANY WORDS GRPNM1=0 GRPNM2=1 PRMNM1=2 PRMNM2=3 DCB=4 MAXPLT=4 DVTYPE=4 TWOPAG=5 /BIT 0 SYSBIT=5 /BIT 1 ACTIVE=6 ENTPT=5 PAGRES=6 PLATNUM=6 DEVSIZ=7 DSKBIT=6 /BIT 1 CORES=5 /BIT 2 /READ A LINE OF TEXT RETURN 1 IS ^U RETURN GTEXT, 0 /ROUTINE TO COLLECT TTY INPUT TAD (-BEGLIN /AC IS NON-ZERO DCA ENDLIN DCA I (RUBFLG /INITIALIZE RUBOUT TO \ TAD (BEGLIN-1 RDTX, DCA LXR /BUFFER ADD. TO INDEX RDTXT, JMS I [TTYIN /READ BLOODY TELETYPE TAD CHAR DCA NAME1 /SETUP FOR TEST AGAIN JMS I [TEST -377;RBOUT /RUBOUT LFMOD, -212;LFEED /LINE FEED..ECHO CURRENT COMMAND -215;CARRET /LINE TERMINATOR -233;ALTMOD /ALT MODE IN SEVERAL FLAVORS -375;ALTMOD -376;ALTMOD -200;RDTXT /IGNORE BLANKS -217;RDTXT /AS WELL AS ^O -203;CTRLC /BACK TO CURRENT SYSTEM -225;CTRLU /CTRLU 0 /IF NOT ONE OF THESE, PUT IN BUFFER TAD LXR TAD ENDLIN SNA CLA JMP RDTXT /LINE OVERFLOW, STOP ECHOING JMS I [PRNT /PRINT THE CHARACTER TAD CHAR DCA I LXR /AND PUT IN LINE BUFFER JMP RDTXT /NO PROBLEMS YET RBOUT, TAD LXR /IS THERE TEXT TO RUB OUT? TAD [1-BEGLIN SNA CLA JMP RBCR /NO..SO DON'T DO ANYTHING TAD ["\ /YES..ECHO BACKSLASH? ISZ I (RUBFLG /IF = -1, NO JMS I [TTYOUT CLA CMA /IGNORE CONSECUTIVE RUBOUTS DCA I (RUBFLG TAD LXR DCA TMP1 TAD I TMP1 JMS I [TTYOUT /ECHO LAST CHAR XRBACK, CLA CMA TAD LXR /MOVE INDEX BACK ONE JMP RDTX CARRET, JMS I [CRLF /GENERATE 215,212 CAR1, DCA I LXR DCA I LXR /GUARD AGAINS CMD <CR> TAD [BEGLIN-1 DCA GNMXR /SETUP FOR GNAME ROUTINE ISZ GTEXT /TAKE NORMAL RETURN JMP I GTEXT LFEED, DCA I LXR /A 0 TO MARK END TAD [BEGLIN-1 DCA LXR JMS I [CRLF TAD ["$ JMS I [TTYOUT ECHO, TAD I LXR SNA /DONE ECHOING? JMP XRBACK /YES..REPOSITION LXR JMS I [TTYOUT JMP ECHO ALTMOD, TAD ["$ /ALT MODE ECHOES AS $ JMS I [TTYOUT JMP CAR1 CTRLU, TAD ["^ JMS I [TTYOUT /GENERATE ^U TAD NAME1 TAD [100 JMS I [TTYOUT RBCR, JMS I [CRLF JMP I GTEXT /TAKE ERROR RETURN GETCHR=JMS I [GETC BAKCHR=JMS I [BAKC ENDLIN, GETNUM, 0 /PICKS UP NUMBER FROM LINE BUFF /DELIM CHAR PUT IN 'CHAR' /PRINTS ERROR MESSAGE IF GT 4095 /IF NO NUMBER, TAKES RETURN 1 /IF NUMBER, TAKES RET 2 WITH # IN 'SIZE' DCA SIZE DCA GOTSW /HAVEN'T FOUND ANY DIGITS YET JMP NCHAR ROT, DCA TMP1 ISZ GOTSW /FOUND A DIGIT TAD SIZE AND [7000 SZA CLA JMP I [BADARG /NUMBER .GT. 4095 TAD SIZE CLL RTL RAL /BUILD UP THE DIGIT TAD TMP1 DCA SIZE NCHAR, GETCHR SNA /0 ENDS THE LINE JMP NUMOUT TAD [-240 /IGNORE SPACES SNA JMP NCHAR TAD (-30 /TEST LIMITS CLL TAD [10 /MUST BE BETWEEN 0 AND 7 SZL JMP ROT TAD (260 /RESTORE CHAR NUMOUT, DCA CHAR /SAVE AWAY THIS DELIMETER TAD GOTSW /DID WE GET ANY DIGITS? SZA CLA /? ISZ GETNUM /YES JMP I GETNUM /NO, RETURN GETC, 0 /GET THE NEXT CHARACTER, ADVANCE SCAN PAST IT TAD I GNMXR JMP I GETC GOTSW, /1 MEANS GOT A DIGIT BAKC, 0 /BACK UP SCAN TO THE CHARACTER JUST LOOKED AT STA TAD GNMXR DCA GNMXR JMP I BAKC PAGE INIT=JMS I [INI ADVDSC=JMS I [DSCADV ADVBOT=JMS I [BOTADV / JMS PRMNAM /SEARCH TABLE FOR A PERMANENT NAME /GIVEN IN NAME1-NAME2 /POINT TO DESCRIPTOR FOR THIS NAME / JMS ACTNAM /SAME BUT PERMANENT NAME MUST BE ACTIVE / JMS BIGNAM /SEARCHES FOR PERM & GRP NAME (GRP NAME IN SAV1,SAV2) / JMS GRPNAM /SAME BUT SEARCH FOR GROUP NAME CHKNAM, 0 INIT CHKLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR ADVBOT /ADVANCE OVER ANY BOOTSTRAP JMP NFOUND /NO MORE- ERROR GET NM1, GRPNM1 /GET GROUP OR PERMANENT NAME CIA TAD NAME1 SZA CLA /DO FIRST WORDS MATCH? JMP CHKLUP /NO, TRY AGAIN GET NM2, GRPNM2 /GET 2ND WORD CIA TAD NAME2 SZA CLA /2ND WORD MATCH? JMP CHKLUP /NO TAD BIGFLG SNA CLA /WANT BOTH GROUP AND PERM NAME? JMP NOBIG /NO GET /YES GRPNM1 CIA TAD SAV1 SZA CLA JMP CHKLUP GET GRPNM2 CIA TAD SAV2 SZA CLA JMP CHKLUP NOBIG, TAD ACTSW /FOUND MATCH SNA CLA /MUST HANDLER BE ACTIVE? JMP I CHKNAM /NO, RETURN GET /YES ACTIVE SMA CLA /IS IT ACTIVE? JMP CHKLUP /NO, TRY AGAIN JMP I CHKNAM /YES, RETURN GRPNAM, 0 TAD (GRPNM1 /WANT TO SEARCH FOR GROUP NAME DCA NM1 TAD (GRPNM2 DCA NM2 DCA ACTSW /NEED NOT BE ACTIVE DCA BIGFLG JMS CHKNAM /GO SEARCH JMP I GRPNAM ACTSW, 0 /1 MEANS HANDLER MUST BE ACTIVE PRMNAM, 0 DCA ACTSW /AC MAY BE NON ZERO (TO MEAN ACTIVE ONLY) TAD (PRMNM1 /WANT TO SEARCH FOR PERMANENT NAME DCA NM1 TAD (PRMNM2 DCA NM2 DCA BIGFLG JMS CHKNAM /GO SEARCH JMP I PRMNAM BADLOD, JMS I [CRLF JMS I [PRWD TEXT /?BAD LOAD/ DCA I TABLMT /RESTORE SENTINEL 0 JMP I [CONFIG BIGNAM, 0 DCA ACTSW TAD (PRMNM1 DCA NM1 TAD (PRMNM2 DCA NM2 CLA IAC DCA BIGFLG JMS CHKNAM JMP I BIGNAM /SOMETIMES CHKNAM CAME FROM DSKASK INSTEAD OF GETSYS **** BIGFLG, 0 /SET TO 1 TO CHECK GROUP & PERMANENT NAME NFOUND, JMS I [PRNAME JMS I [PRWD TEXT / NOT FOUND/ JMP I [CONFIG NOROOM, JMS I [PRWD TEXT /?NO ROOM/ DCA I TABLMT /RESTORE SENTINEL 0 JMP I [CONFIG VERS, JMS I [PRWD TEXT /BUILD V6A/ JMP I [CONFIG /BUILD CORE CONTROL BLOCK / ***** CAUTION IF BUILD GROWS FROM FIELD 2 BLDCCB, -3 /3 SEGMENTS 6203 /FIELD 0 0200 /200 IS S.A. 0000 /JSW 0000 1020 /20000-21777 0000 /10000-17577 3710 0000 /00000-07577 3700 /GOES INTO WORDS 200-377 OF BLOCK 37 PAGE /LOAD A 1- OR 2-PAGE HANDLER INTO BUFFER /USE IT TO ABSLD SETUP, 0 TAD [NAME1 DCA FILPTR /POINT TO FILENAME AREA TAD (BUFFER+1 /LOAD 2 PAGE HANDLER INTO 'BUFFER' DCA DRIVER /SET UP ASSIGN DEVICE HANDLER JMS I [GNAME /GET DEVICE NAME TAD NAME1 SNA CLA JMP I SETUP /NO ARG ISZ SETUP TAD I (RETSW SZA CLA JMP I (BLDLOD /WHEN LOADING STANDALONE, USE INTERNAL HANDLERS TAD CHAR TAD [-": SZA CLA JMP I (SETDSK /USE 'DSK ' IF NO DEVICE GIVEN TAD NAME1 DCA DVNM1 TAD NAME2 DCA DVNM1+1 /LOOKUP DEVICE NAME GETU, JMS I (GETUSR CIF 10 JMS I [200 /FETCH HANDLER 1 SUBLUP, DVNM1, 0 LODTMP, DVNUM, 0 /NAME GOES IN HERE DRIVER, 0 JMP I (KICKM /NO DEVICE. RELEASE MONITOR TAD CHAR SZA CLA JMS I [GNAME /PICK UP FILE NAME TAD DVNM1+1 /DEVICE NUMBER JMS I (DTYPE /SEE IF FILE STRUCTURED TAD NAME1 /IF FILE STRUCTURED WITH NO NAME SNA CLA /IT IS AN ERROR JMP I (NMER /V3C TAD NAME4 /SAVE ORIGINAL EXTENSION DCA TEMP TAD NAME4 SNA /IF NULL TAD (0216 /TRY .BN FIRST TRYAGN, DCA NAME4 TAD DVNUM /GET DEVICE NUMBER CIF 10 JMS I [200 /DO LOOKUP OF FILENAME 2 FILPTR, NAME1 0 JMP LDEXT /DIDN'T FIND FILE. DO SOMETHING CIF 10 JMS I [200 /KICK OUT MONITOR 11 TAD DRIVER LOADIN, DCA I [DVICE /ENTRY POINT OF HANDLER JMS I (IOPEN /IF HERE, IT WILL FIT JMP I SETUP LOAD, JMS SETUP /SET UP FOR INPUT JMP I [NODEV /NO LOAD DEVICE STA CLL RAL /-2 DO A HANDLER LOAD CIF CDF 20 /OFF TO FIELD 2 JMS I (LDABS JMP I [BADLOD /BAD TAD I TABLMT /SEE IF HEADER INFORMATION IS OK SMA JMP I [BADLOD TAD (20 /ALLOW 16 HANDLERS/BINARY SPA CLA JMP I [BADINP /TOO MANY TAD I TABLMT DCA LODTMP /# OF LOOPS TO EXECUTE TAD TABLMT TAD [PAGRES+1 /POINT TO FIRST 'PAGRES' WORD DCA HDPTR /GO THERE FOR DESCRIPTORS TAD HNDPTR JMS I [ROTL DCA TEMP /PAGE OF RESIDENCE PGLUP, TAD TEMP DCA I HDPTR /INSERT PAGE OF RESIDENCE TAD HDPTR TAD [HDRSIZ DCA HDPTR ISZ LODTMP JMP PGLUP TAD [2-HDRSIZ TAD HDPTR DCA HDPTR /POINT TO AFTER DESCRIPTORS TAD HDPTR CIA TAD I (NEWLIM SNA CLA /AT END? JMP I (OK /YES TAD I HDPTR /NO, MAYBE A BOOTSTRAP RECORD CLL TAD [200 SNL CLA JMP I [BADLOD /NO TAD I HDPTR /MAYBE CIA IAC /OVER COUNT TAD HDPTR CIA TAD I (NEWLIM SZA CLA JMP I [BADLOD /NO JMP I (OK HDPTR, 0 /POINTS INTO NEW HEADER /DESCRIPTOR TABLE DESCRIPTION: /'TABLMT' ALWAYS POINTS TO FIRST FREE LOCATION /'DSCPTR' ALWAYS POINTS TO BEGIN OF CURRENT HEADER BLOCK /ITEMS ARE OF 3 FORMS: /(A) GROUP COUNT: IN RANGE -1 TO -20 (IGNORED AND HAS NO MEANING) / IT IS THERE FOR COMPATIBILITY WITH OLD BUILD /(B) HEADER BLOCK STARTS WITH NUMBER IN RANGE 0-7577 / CONSISTS OF 'HDRSIZ' CONSECUTIVE WORDS / DESCRIBED ELSEWHERE /(C) BOOTSTRAP BLOCK: STARTS WITH NUMBER IN RANGE 7600-7757 / THIS IS THE NEGATIVE OF THE NUMBER OF WORDS TO FOLLOW /NON-SYSTEM HEADER INFO: / - NUMBER OF ENTRY POINTS /FOR EACH ENTRY POINT: /0,1 GROUP NAME /2,3 ENTRY POINT NAME (PERMANENT NAME) /4 R/W FILE-STR, DEVICE TYPE, MAX # OF PLATTERS /5 1/2 PAGE, REL ENTRY PT, SYSBIT, CORES /6* PAGE OF HANDLER, ACTIVE BIT, # OF PLATS, DSKBIT /7 SIZE OF DEVICE /* SUPPLIED BY BUILD LDEXT, TAD TEMP /DIDN'T FIND FILE SZA CLA JMP I (KICKM /NO RESORT ISZ TEMP JMP TRYAGN /TRY NULL EXTENSION PAGE REPLACE,JMS I (DEL /DELETE PERMANENT NAME SPECIFIED NEXT TAD CHAR TAD MEQ SZA CLA /AFTER ALL DELETIONS, MUST FIND A "=" JMP I [SYNTAX /IF NOT, WARN THE GUY JMS INS /IF FOUND IT, NOW PERFORM INSERTIONS JMP I [CONFIG /THE GUY HAS BEEN HUMORED INSERT, JMS INS TSTEOL, TAD CHAR /THERE SHOULDN'T BE ANYTHING AFTER EOC SNA CLA JMP I [CONFIG /THERE WASN'T JMP I [SYNTAX /WARN BLOKE ABOUT EXTRA STUFF DELETE, JMS I (DEL /DELETE PERMANENT NAMES SPECIFIED JMP TSTEOL SYSTEM, JMS INS /SYS IS SAME AS INSERT GET SYSBIT RTL SPA SZL CLA /BUT SYSBIT OR CORES SHOULD BE ON JMP TSTEOL /JUST TO HUMOR IT'S NAME TWOSYS, JMS I [PRWD /AND FOR COMPATIBILITY REASONS TEXT /?SYS/ JMP I [CONFIG INS, 0 TAD (STL RAR DCA I (ACTION /SET 'ACTION' FOR INSERTIONS JMS I [TSTNAM /LOOK FOR A NAME JMS I [GRPNAM /GET GROUP NAME JMS SAVNAM JMS I [TEST MEQ, -"=;ACT -",;INSNAM -":;INSNAM 4000;ACT 0 INSNAM, JMS I [TSTNAM /GRAB A NAME INSGN, JMS I [BIGNAM /GET PERMANENT NAME WITH SPECIFIED GROUP NAME GET GRPNM1 CIA TAD SAV1 SZA CLA JMP I [NFOUND /MAKE SURE PERMANENT NAME FOUND GET /HAS GROUP NAME PREVIOUSLY SPECIFIED GRPNM2 CIA TAD SAV2 SZA CLA JMP I [NFOUND ACT, JMS I (SETACT /SET ACTIVE BIT COM, JMS I [TEST -"-;HYPH -",;INSNAM -"=;INPLAT 0 JMP I INS INPLAT, JMS I [GETNUM /AN "=" JMP I [SYNTAX TAD SIZE SNA CLA JMP I [BADARG /=0 ILLEGAL GET MAXPLT AND [7 /GET MAXIMUM # OF PLATTERS ALLOWED SNA IAC /0 MEANT 1 CMA CLL TAD SIZE /COMPARE WITH USER'S REQUEST SZL CLA /IS HIS REQUEST OKAY? JMP BADPLT /REQUEST-SHMEST. TOO MANY PLATTERS TAD SIZE JMS I [ROTR DCA SIZE GET PLATNUM AND (6177 TAD SIZE /STORE AWAY HIS STATED NUMBER OF PLATTERS PUT /FOR FUTURE USE BY 'BOOT' PLATNUM JMP COM /REJOIN PROCESSING BADPLT, JMS I [PRWD TEXT /?PLAT/ JMP I [CONFIG SAVNAM, 0 TAD NAME1 DCA SAV1 /SAVE GROUP NAME TAD NAME2 DCA SAV2 JMP I SAVNAM HYPH, TAD NAME2 AND [77 CIA DCA DETEM GETCHR AND [77 TAD DETEM /GET CHAR AFTER HYPEN SNA CLA /REACHED IT YET? JMP IGET /YES, WELL TRY FOR MORE STUFF BAKCHR /NO, PUT IT BACK FOR FUTURE USE ISZ NAME2 /FORM NEXT SEQUENTIAL NAME JMP INSGN /GO INSERT IT /DO WE REALLY HAVE TO START SEARCH AT CURRENT DESCR? DETEM, 0 IGET, GETCHR DCA CHAR JMP COM NODEV, JMS I [PRWD TEXT /?DEVICE/ JMP I [CONFIG PAGE INTEM, SETACT, 0 GET ACTIVE /GET ACTIVATION BIT RAL ACTION, STL RAR /ACTIVATE IT (SET TO 'CLL RAR' TO DEACT) PUT ACTIVE /RESTORE JMP I SETACT DEL, 0 TAD (CLL RAR DCA ACTION DELNAM, JMS I [TSTNAM /PARSE OFF A NAME DELGN, JMS I [ACTNAM /FIND IT AS AN ACTIVE PERMANENT NAME JMS SETACT /DEACTIVATE IT GET PLATNUM AND [6177 /SET # OF PLATTERS TO 0 PUT PLATNUM DCOM, JMS I [TEST -"-;DHYPH -",;DELNAM 0 JMP I DEL DHYPH, TAD NAME2 AND [77 CIA DCA INTEM GETCHR AND [77 TAD INTEM SNA CLA /REACHED FINAL NAME? JMP DGET /YES BAKCHR /NO, PUT FINAL LETTER BACK ISZ NAME2 /YES, BUMP TO NEXT NAME L0423, 423 JMP DELGN /DELETE NEXT ONE IN SUCCESSION DGET, GETCHR DCA CHAR JMP DCOM TTYIN, 0 /TTY INPUT ROUTINE KSF JMP .-1 KRB SNA /LOW LEVEL BLANK IGNORE JMP TTYIN+1 AND [177 /HANDLE PARITY TAD [200 DCA CHAR JMP I TTYIN /DSK=ACTIVE PERMANENT NAME /DSK=GROUPNAME:PERMANENT NAME /DSK=<CR> MEANS NO DSK SPECIFIED, USE 'SYS' /JUST REMEMBERS NAME (NOTHING ELSE) DSK, JMS I [GNAME /GET A NAME TAD NAME1 SNA CLA JMP NODSK TAD CHAR SNA JMP NOCOL TAD [-": SZA CLA /IS IT FOLLOWED BY A ":"? JMP I [SYNTAX /NO, ASSUME HE'S GIVING AN ACTIVE PERMANENT NAME /THIS IS FOR COMPATIBILITY WITH OLD BUILD / JMS I [GRPNAM /YES, ITS A GROUP NAME TAD NAME1 /SAVE IT DCA DSKG1 TAD NAME2 DCA DSKG2 JMS I [TSTNAM /GET PERMANENT NAME PN, TAD NAME1 DCA DSKP1 /DON'T WORRY NOW IF IT'S AROUND TAD NAME2 DCA DSKP2 TAD CHAR SZA CLA JMP I [SYNTAX JMP I [CONFIG NODSK, DCA DSKG1 /FIRST WORD 0 MEANS NONE SPECIFIED JMP I [CONFIG NOCOL, JMS I [ACTNAM /IT MUST BE AN ACTIVE HANDLER GET GRPNM1 DCA DSKG1 GET GRPNM2 DCA DSKG2 JMP PN SETDSK, TAD L0423 /DS DCA I (DVNM1 TAD (1300 /K DCA I (DVNM1+1 JMP I (GETU KICKM, CIF 10 /RELEASE MONITOR AND RELOAD JMS I [200 /OUR DEVICES 11 JMP I [NFOUND GETUSR, 0 CIF 10 JMS I [7700 /LOCK IN MONITOR 10 CIF 10 /RESET RESIDENT HANDLER TABLE JMS I [200 13 JMP I GETUSR / CODE FOR USING INTERNAL HANDLERS ON STANDALONE LOAD: BLDLOD, DCA I (FILPTR /LOAD DEV JMS I [ACTNAM /MUST BE ACTIVE JMS I [GETPG DCA HNDLOK /LOCATION OF HANDLER TAD [-400 JMS I [MOVE CDF 10 HNDLOK, HLT CDF 0 PBUFFER,BUFFER GET DCB DCA BLDCB GET ENTPT AND [177 TAD PBUFFER /GET ENTRY POINT OF HANDLER JMP I (LOADIN BLDCB, 0 /CONTAINS DCB OF CURRENT LOAD HANDLER PAGE GETPG, 0 GET PAGRES JMS I [ROTR AND [7600 JMP I GETPG /FORMAT: NAME OLDNAME=NEWNAME NAME, JMS TSTNAM /SEE IF ARGUMENT SUPPLIED /SEARCH PERMANENT TABLES JMS I [ACTNAM /GET ACTIVE PERMANENT NAME DESCRIPTOR TAD CHAR TAD MEQL /CHECK FOR = SZA CLA JMP I [BADARG JMS TSTNAM /GET NEW DEVICE NAME TAD NAME1 /REPLACE THE NAME PUT PRMNM1 TAD NAME2 PUT PRMNM2 JMP I [CONFIG EXAMINE,CLA IAC ALTER, DCA XSWTCH JMS I [TSTNAM /ALTER ALLOWS MODS TO A PARTICULAR JMS I [GRPNAM /HANDLER'S ACTUAL CODE. /LOOK AT DEVICE TYPE ENTRY JMS GETPG /GET PAGE OF RESIDENCE DCA PAGAD /SAVE IT. JMS I [GETNUM /GET RELATIVE LOC TO ALTER JMP I [SYNTAX /NO NUMBER GET P2PAG, TWOPAG /IS THIS A 2-PAGE HANDLER? SPA CLA TAD [7600 TAD [7600 /ALLOW 200 OR 400 MAXIMUM CLL TAD SIZE /IS THE # TO ALTER TOO LARGE? SZL CLA JMP I [BADARG /I GUESS IT IS TAD SIZE TAD PAGAD /GET ABSOLUTE LOCATION DCA PAGAD TAD XSWTCH SZA CLA /EXAMINE OR ALTER? JMP EXAM /EXAMINE TAD CHAR /ALTER SZA CLA /CR? JMP GETVAL /NO JMS EXAMSB /YES, GIVE GUY OLD VALUE FIRST ODTL, TAD ["/ /ODT LIKE JMS I [TTYOUT TAD [-100 JMS I [GTEXT JMP ODTL GETVAL, JMS I [GETNUM /GET NEW CONTENTS JMP I (TSTEOL /NO NUMBER TAD SIZE CDF 10 DCA I PAGAD /REPLACE THAT LOC. JMP I [CONFIG /AND GET OUT PAGAD, 0 /ALTER GROUPNAME,LOC=NEWVALUE /ALTER GROUPNAME,LOC /EXAMINE GROUPNAME,LOC /SIZE ACTNAM /SIZE ACTNAM=VALUE /DCB ACTNAM /DCB ACTNAM=VALUE /CTL ACTNAM /CTL ACTNAM=VALUE SIZCM, TAD (3 /SIZE COMMAND V3C DCBCM, TAD [-1 /EXAMINE DCB WORD CTLCM, TAD P2PAG /EXAMINE CONTROL WORD DCA PUTAT TAD PUTAT DCA LOOKAT JMS I [TSTNAM /GET A NAME JMS I [ACTNAM /IT MUST BE ACTIVE JMS I [TEST MEQL, -"=;INPDCB 4000;EXAMDCB 0 JMP I [SYNTAX INPDCB, JMS I [GETNUM JMP I [CONFIG /IGNORE = NOTHING TAD SIZE PUT XSWTCH, /0 MEANS ALTER, 1 MEANS EXAMINE PUTAT, DCB JMP I [CONFIG /THE USER LIVES DANGEROUSLY EXAMDCB,GET LOOKAT, DCB JMS PUTNUM TAD ["/ JMS I [TTYOUT TAD [-100 JMS I [GTEXT JMP EXAMDCB JMP INPDCB /NOW PARSE OFF THE REPLY EXAM, JMS EXAMSB JMP I [CONFIG EXAMSB, 0 CDF 10 TAD I PAGAD /GET CURRENT CONTENTS CDF 0 JMS PUTNUM /PRINT IT JMP I EXAMSB PUTNUM, 0 /PRINT AN OCTAL NUMBER DCA PTM TAD [-4 /4 DIGITS DCA PKNT PLOOP, TAD PTM RTL RTL AND [7 TAD (60 JMS I [TTYOUT TAD PTM RTL RAL DCA PTM ISZ PKNT JMP PLOOP JMP I PUTNUM PTM, 0 PKNT, TSTNAM, 0 JMS I [GNAME /COLLECT NAME TAD NAME1 /IF NO NAME FOUND, GIVE ERROR SZA CLA JMP I TSTNAM NAMERR, JMS I [PRWD TEXT /?NAME/ JMP I [CONFIG PAGE /PRINT FUNCTION TYPES OUT THE STATUS OF BUILD ON COMMAND /AN * BESIDE A DEVICE INDICATES THAT IT IS CURRENTLY MARKED /FOR INSERTION IN THE SYSTEM BEING BUILT. TTY240, PRINT, STA DCA OLDPAG /SET ILLEGAL OLD PAGE INIT ISZ I (LINEUP /MAKE THINGS LINE UP PRLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR ADVBOT /ADVANCE PAST A BOOTSTRAP (IF ANY) JMP DONE /ALL DONE JMS I [GETPG /GET PAGE OF NEW HANDLER DCA NEWPAG TAD NEWPAG CIA TAD OLDPAG /COMPARE WITH LAST HANDLER'S PAGE SNA CLA /SAME? JMP PRTPER /YES JMS I [CRLF /NO, GO TO NEXT LINE TAD NEWPAG DCA OLDPAG JMS PGNAME TAD TTY240 JMS I [TTYOUT PRTPER, GET /GET ACTIVE BIT ACTIVE SPA CLA /IS IT ACTIVE? TAD ("*-STA /YES, PRINT * TAD TTY240 /NO, PRINT SPACE JMS I [TTYOUT JMS PNAME /PRINT PERMANENT NAME JMP PRLUP PGNAME, 0 GET GRPNM1 JMS I (PRINTE /PRINT GROUP NAME GET GRPNM2 JMS I (PRINTE TAD (": JMS I [TTYOUT JMP I PGNAME DONE, DCA I (LINEUP /NO MORE LINE-UP TAD DSKG1 SNA CLA JMP TELCOR JMS I [CRLF /TELL GUY ABOUT 'DSK' JMS I [CRLF JMS I [PRWD TEXT /DSK=/ TAD DSKG1 JMS I (PRINTE TAD DSKG2 JMS I (PRINTE TAD (": JMS I [TTYOUT TAD DSKP1 JMS I (PRINTE TAD DSKP2 JMS I (PRINTE TELCOR, TAD NEWCOR SNA JMP I [CONFIG /NO SPECIFIED CORE LIMIT JMS I [ROTL TAD (6000 DCA CORMSG+3 JMS I [CRLF JMS I [PRWD CORMSG, TEXT /CORE= / JMP I [CONFIG /QUICK PRINT QLIST, INIT QLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR ADVBOT /ADVANCE OVER ANY BOOTSTRAP IF NECESSARY JMP DONE /GO AWAY WHEN NO MORE GET ACTIVE /GET ACTIVE BIT SMA CLA /IS IT ACTIVE? JMP QLUP /NO, IGNORE IT GET /YES SYSBIT RAL SPA CLA /IS IT 'SYS'? JMS PGNAME /YES, PRINT GROUP NAME TOO JMS PNAME /NO, PRINT PERMANENT NAME ONLY JMP QLUP DT, PNAME, 0 GET PRMNM1 JMS I (PRINTE GET PRMNM2 JMS I (PRINTE TAD TTY240 JMS I [TTYOUT JMP I PNAME DCBTBL=7760 WHAT, JMS I [PRNAME JMS I [PRWD TEXT /?/ /FOR WHEN A COMMAND ERROR OCCURS JMP I [CONFIG DTYPE, 0 /RETURNS TYPE OF OUTPUT TAD (DCBTBL-1 DCA DT /ENTRY AC HAD DEVICE # CDF 10 TAD I DT /IF FILE DEVICE, LINK=0 CDF 0 CMA RAL /ALSO, IF FILE AC=0 ON EXIT CLA RAL JMP I DTYPE WRITCC, 0 TAD [-6 /PUT IN DATA BREAK FILLERS JMS I [MOVE CDF 0 K7750 CDF 0 PG7600+200+150 TAD (4200 JMS I [SYS /WRITE NEW CCB BLDCCB-200 37 JMP I WRITCC PAGE TOOMANY,JMS I [PRWD TEXT /?HANDLERS/ JMP I [CONFIG GOTCHA, 0 DCA I (GOTEM TAD I GOTCHA TAD DSCPTR ISZ GOTCHA DCA GETEMP TAD I (GOTEM DCA I GETEMP JMP I GOTCHA GETEMP, 0 /TEMP FOR GOTCHA TEST, 0 /TEST CHAR AGAINST ARGUMENTS TAD I TEST /PICK UP ARGUMENT FROM LIST SNA /0 TERMINATES JMP I TEST TAD CHAR /SEE IF THEY COMPARE = AND (3777 /COMPARE ONLY LOW ORDER, THUS ALLOWING '4000' TO MEAN '0' SNA CLA JMP TSTOVR /THEY DO..DISPATCH TO TABLE ISZ TEST ISZ TEST JMP TEST+1 /THEY DON'T. KEEP GOING TSTOVR, ISZ TEST TAD I TEST DCA TEMP JMP I TEMP K7750, 7750 /DATA BREAK FILLERS 7751 7752 7753 7754 7755 SYS, 0 /SAVES A FEW WORDS IN SYSTEM CALLS DCA SYCTL /SAVE FUNCTION WORD TAD I SYS DCA SYBUF /BUFFER BEING USED ISZ SYS TAD I SYS DCA SYREC /RECORD # ISZ SYS /THERE IS NO ERROR RETURN /IF SWAPER SET AND BOOTDV SET, USE SPECIAL BOOT HANDLER HERE GO, JMS I SYSENT SYCTL, 0 SYBUF, 0 SYREC, 0 SKP CLA JMP I SYS JMS I [PRWD TEXT /SYS ERR/ HLT /IF USER IS DARING, HIT CONTINUE TO RETRY JMP GO SYSENT, 7607 /***************** / / SYS HANDLER IS 2-PAGES LONG IF LOCATION 7612 IS A 3 / /****************** CLRTBL, 0 TAD [BEGLIN DCA XR1 TAD [-200 /ZERO OUT 5200-5377 DCA TMP1 DCA I XR1 ISZ TMP1 JMP .-2 JMP I CLRTBL /FOR HANDLER ONLY ORGLIM, 0 /THIS ROUTINE MAKES CERTAIN THAT DCA CLRTBL /THE ORIGIN FOR LDABS IS WITHIN TAD CLRTBL /THE BOUNDS SPECIFIED BY SIZE TAD [7600 /AND THE CONTENTS OF HNDPTR SPA JMP BADORG /ORIGIN BELOW 200 CIA TAD [400 /IS ORIGIN WITHIN UPPER BOUND? SPA CLA JMP BADORG TAD CLRTBL TAD [7600 /NOW GIVE BACK RELATIVE BUFFER TAD HNDPTR /ADDRESS IN FIELD 1 DCA CLRTBL TAD CLRTBL AND [7600 TAD [200 SNA CLA JMP I (NOROOM /CAN'T 'ORIGIN' INTO PAGE 7600 TAD CLRTBL CIF CDF 20 /CALLED FROM FIELD 2 JMP I ORGLIM BADORG, JMS I [PRWD TEXT /?ORIGIN/ JMP I (OVROUT /SOMEWHERE TEST IF HE GAVE US A 2-PAGE BUT REQ A 1-PAGE / PG7600_0 / BLOK66_66 / IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L RECZRO, 0 /READS FIELD 1 CODE, EVEN FOR 12K TD8E TAD [200 JMS I [SYS /READ RECORD 0 PG7600 0 /THAT NORMALLY CONTAINS FIELD 1 TAD (210 JMS I [SYS /READ RECORD 66 BLOK66 66 TAD FLAG2 /DID PREVIOUS SYSTEM HAVE A 2-PAGE HANDLER? SZA CLA TAD [-200 /NO JMS I [MOVE /YES CDF 0 PG7600 CDF 10 BLOK66 JMP I RECZRO NOTNUF, JMS I [PRWD TEXT /?CORE/ JMP I [CONFIG PAGE UNLOAD, JMS I [TSTNAM /PULL OFF A NAME JMS I [GRPNAM /IT HAD BETTER BE A GROUP NAME JMS I [TEST -":;UNLPRM 4000;UNLGRP 0 JMP I [SYNTAX UNLPRM, JMS I (SAVNAM /UNLOAD PARTICULAR HANDLER UNLNAM, JMS I [TSTNAM JMS I [BIGNAM TAD DSCPTR /DELETE A SINGLE DESCRIPTOR DCA SAVPTR /DON(T DELETE HANDLER TAD DSCPTR /OR BOOTSTRAP TAD [HDRSIZ /NO RELOCATION NECESSARY DCA LSTPTR TAD TABLMT JMP NOMOR UNLGRP, JMS I [GETPG /GET PAGE OF RESIDENCE DCA TOMOV /START OF HANDLER GET TWOPAG /IS IT A 1- OR 2- PAGE HANDLER? SPA CLA TAD [200 /2 PAGE TAD [200 /1 PAGE DCA UNSIZE TAD TOMOV /DELETE HANDLER AND MOVE ALL FOLLOWING DOWN TAD UNSIZE DCA FROMOV /GET FIRST LOCATION AFTER HANDLER TAD HNDPTR /GET NEXT FREE LOCATION FOR HANDLER CIA TAD FROMOV /GET NUMBER OF LOCS TO MOVE JMS I [MOVE CDF 10 FROMOV, 0 CDF 10 TOMOV, 0 /UPDATE POINTERS; SEARCH DESCRIPTORS TAD UNSIZE /FOR REFS TO MOVED HANDLERS AND DECREASE CIA /THOSE REFS BY -UNSIZE TAD HNDPTR DCA HNDPTR /FREES SOME BUFFER SPACE TAD TABLMT DCA OLDTOP /REMEMBER ORIGINAL TOP OF STACK STA /BACK UP OVER GROUP COUNT TAD DSCPTR DCA SAVPTR /REMEMBER THIS LOCATION TAD UNSIZE JMS I [ROTL CIA DCA UNSIZE TAD DSCPTR TAD [HDRSIZ DCA LSTPTR /'LSTPTR' POINTS TO FIRST DESCRIPTOR BEING MOVED /COMPRESS THE DESCRIPTORS ABOVE THIS ONE ADV, ADVDSC /ADVANCE TO NEXT DESCRIPTOR JMP BADV /ENCOUNTERED A BOOTSTRAP RECORD JMP NOMORE /NO MORE, THROUGH GT, JMS I [GETPG /GET PAGE OF THIS DESCRIPTOR CLL CIA TAD TOMOV /COMPARE WITH PAGE OF DELETED HANDLER SNA CLA JMP SAMPAG /THEY'RE THE SAME SZL /THEY'RE NOT THE SAME. WHICH IS HIGHER? JMP ADV /IT WAS BELOW HANDLER. NO SWEAT. GET /IT WAS ABOVE HANDLER, HAVE TO ACCOUNT FOR THIS PAGRES /POINT TO NEW HANDLER LOCATION TAD UNSIZE PUT PAGRES JMP ADV /CONTINUE SAMPAG, TAD [HDRSIZ TAD DSCPTR DCA LSTPTR /NOTE LOCATION OF NEXT DESCRIPTOR JMP ADV /ADVANCE PAST BOOTSTRAP OR DELETE IT AS NECESSARY BADV, TAD DSCPTR CIA TAD LSTPTR SZA CLA /IS THIS BOOT PART OF GROUP BEING UNLOADED? JMP BDV /NO TAD I DSCPTR /YES CIA IAC TAD DSCPTR DCA LSTPTR /SET 'LSTPTR' TO BEGIN OF NEXT DESCRIPTOR BDV, ADVBOT /ADVANCE OVER BOOTSTRAP JMP NOMORE /DONE JMP GT /GO ON TO NEXT DESCRIPTOR /ALL DESCRIPTORS FOR THE SAME HANDLER ARE CONSECUTIVE /MOVE DOWN DESCRIPTORS NOMORE, TAD OLDTOP NOMOR, CIA TAD LSTPTR /MINUS # OF WORDS TO MOVE JMS I [MOVE CDF 0 LSTPTR, 0 /FIRST DESCRIPTOR NOT CONSIDERED CDF 0 SAVPTR, 0 /POINTS TO INITIAL DESCRIPTOR BEING DELETED TAD LSTPTR CIA TAD SAVPTR /GET NUMBER OF WORDS DELETED TAD TABLMT DCA TABLMT /UPDATE TABLMT DCA I TABLMT /MUST HAVE 0 AT TABLE END SO DON'T THINK IT'S A BOOTSTRAP JMS I [COMMA JMP UNLNAM OLDTOP, /ORIGINAL TOP OF DESCRIPTORS INI, 0 TAD (DSCTAB-HDRSIZ DCA DSCPTR JMP I INI INIT=JMS I [INI /RETURN TO CONFIG IF EOL, OR BACK IN-LINE IF COMMA UNSIZE, COMMA, 0 TAD CHAR SNA JMP I [CONFIG TAD (-", SNA CLA JMP I COMMA JMP I [SYNTAX BOOTQ, SZA CLA /MAY BE OVERLAID JMP SAMEE DCA I (DRECT /DON'T TOUCH DIRECTORY IF DIDN'T COPY SYS SAMF, JMS I [SYSWP JMP I (BOOT4 SAMEE, JMS I (SYSCPY /OR IF OLD DEV=NEW DEV JMP SAMF PAGE LOCSYS, 0 TAD (2331 /"SY" DCA NAME1 TAD (2300 /"S " DCA NAME2 DCA NAME3 /V3C DCA NAME4 JMS I [ACTNAM /LOOK UP 'SYS' JMP I LOCSYS NOSLOT, JMS I [PRWD TEXT /?SLOTS/ JMP I [CONFIG GOOD, 0 TAD [4207 /RESTORE 7600 TO NORMAL DCA I [7600 TAD [5000 DCA I [7601 TAD (CDF CIF DCA I [SA /SET SA=00200 TAD [200 DCA I (SA+1 DCA I (JSW /SET JOB STATUS WORD=0 STA DCA I (DRECT CLL STA RTL /-3 TAD I [7612 /FUDGE FOR 12K TD8E DCA FLAG2 /SET FLAG2=0 IF PREV SYSTEM WAS 2 PAGE JMP I GOOD PACK, ISZ PROTECT /OK TO PACK IT? JMP PACKOK /YES STA DCA PROTECT /INHIBIT OTHER PACKS ALSO JMP GNAME2 PACKOK, ISZ SWIT /PACK LEFT OR RIGHT JMP RIGHT TAD CHAR AND [77 JMS I [ROTL /ROTATE 6 LEFT DCA I TEMP /STORE THE CHARACTER JMP GNAME2 RIGHT, CLA CMA /RESET FLIP FLOP DCA SWIT TAD CHAR AND [77 TAD I TEMP DCA I TEMP ISZ TEMP /POINT TO NEXT WORD JMP GNAME2 PROTECT,0 /-1 MEANS DON'T ACCEPT CHAR, IGNORE IT SWIT, 0 ACTNAM, 0 /THEY MUST BE ACTIVE CLA IAC JMS I (PRMNAM JMP I ACTNAM DOT, CLA CMA DCA SWIT TAD (-3 /NOW ALLOW ONLY A 2-CHAR EXTENSION DCA PROTECT TAD (NAME4 DCA TEMP ISZ DOTCNT /HAD WE SEEN A DOT BEFORE? JMP SYNTAX /YES JMP GNAME2 /NO DOTCNT, -1 /-1 MEANS HAVEN'T SEEN A DOT EOL, DCA CHAR JMP I GNAME GNAME, 0 /COLLECT A WORD IN NAME1-NAME4 /LEAVE DELIMITING CHAR IN 'CHAR' CDF 0 TAD [-7 /MAX 6 CHARACTERS DCA PROTECT DCA NAME1 /FIRST CLEAR OUT COLLECTION AREA DCA NAME2 DCA NAME3 DCA NAME4 CLA CMA DCA SWIT /L-R PACKING SWITCH STA DCA DOTCNT /ALLOW ONLY ONE DOT PER NAME TAD (NAME1 DCA TEMP GNAME2, GETCHR SNA /A 0 ENDS THE SEARCH JMP EOL DCA CHAR TAD CHAR TAD (-"A /GET ONLY A-Z OR 0-9 CLL TAD ("A-"Z-1 SNL CLA /IS IT A-Z? JMP PACK /YES..PACK IT AWAY TAD CHAR TAD (-"0 CLL TAD ("0-"9-1 SNL CLA JMP PACK /FOUND 0-9 JMS I [TEST /TEST FOR DELIMITING CHARS -".;DOT /ADVANCE POINTERS 0 JMP I GNAME SYNTAX, JMS I [PRWD TEXT /?SYNTAX/ JMP I [CONFIG DSKBAD, JMS I [PRWD TEXT /?DSK/ JMP I [CONFIG SRES=BEGLIN+60 /RESIDENCY TABLE SDCB=BEGLIN+100 /DCB SHND=BEGLIN+120 /SLOT ASSSIGNED? SNAME=BEGLIN+140/NAME SBUFF=BEGLIN+160/ADDRESS OF HANDLER / SYSTEM TABLES: /THOSE IN USR: /PDNT PERMANENT DEVICE NAME TABLE (SNAME) / POINTED TO BY LOCATION 10036 IN USR / CONTAIN HASH CODE OF DEVICE NAME / ADD TWO WORDS OF NAME TOGETHER AND TURN ON BIT 0 / IF SECOND WORD WAS NON-ZERO / AN ENTRY OF 0 MEANS THERE IS NO DEVICE FOR THAT ENTRY /DHIT DEVICE HANDLER INFORMATION TABLE (SHND) / POINTED TO BY LOCATION 10037 IN USR / BIT 0 =1 IF THIS IS A TWO-PAGE HANDLER / BITS 1-4 RELATIVE BLOCK LOCATION OF HANDLER ON SYSTEM DEVICE / (BLOCK SLOT). ADD 15 TO GET ACTUAL BLOCK #. / BITS 5-11 RELATIVE ENTRY POINT OF HANDLER /DHRT DEVICE HANDLER RESIDENCY TABLE (SRES) / IN LOCATIONS 17647-17665 / ACTUAL ENTRY POINT OF HANDLER / WE ONLY CARE ABOUT IT IF THE HANDLER IS RESIDENT. / OTHERWISE IT'S ZERO. / THE SYSTEM HANDLER AND ALL HANDLERS CORESIDENT WITH / IT ARE ALWAYS RESIDENT IN CORE AND HAVE THIS ENTRY NON-0. /DCWT DEVICE CONTROL WORD TABLE (SDCB) / RESIDES IN LOCATIONS 17760-17776 / BIT 0 1 IF DEVICE IS FILE STRUCTURED / BIT 1 1 IF THE DEVICE IS READ ONLY / BIT 2 1 IF THE DEVICE IS WRITE-ONLY / BITS 3-8 PHYSICAL DEVICE TYPE / BITS 9-11 DIRECTORY BLOCK # (WE SET TO 0) /PRE-ASSIGNED DEVICE TYPES /0 TELETYPE /1 HIGH SPEED PAPER TAPE READER /2 HIGH SPEED PAPER TAPE PUNCH /3 CARD READER /4 LINE PRINTER (ANY TYPE) /5 RK8 DISK /6 RF08 (1 PLATTER) /7 RF08 (2 PLATTERS) /10 RF08 (3 PLATTERS) /11 RF08 (4 PLATTERS) /12 DF32 (1 PLATTER) /13 DF32 (2 PLATTERS) /14 DF32 (3 PLATTERS) /15 DF32 (4 PLATTERS) /16 TC08 DECTAPE /17 LINCTAPE /20 TM8E MAGTAPE /21 TD8E DECTAPE (12K OR ROM) /22 BAT: /23 RK8E DISK /27 TU60 CASSETTES /30 VR12 (PDP-12 SCOPE) PAGE BOOT2A, TAD (15 DCA SLOT /START ASSIGNING AT BLOCK SLOT 16 (16-25) TAD (-17 /ALLOW 16 ACTIVE HANDLERS NOT COUNTING DSK DCA COUNT JMS I (CLRTBL /CLEAR OUT IN-CORE TABLES TAD (SHND+1 /ASSIGN SLOTS, COUNT ACTIVE HANDLERS DCA XR1 /XR1 POINTS TO SLOT TABLE (DHIT) TAD (SDCB+1 DCA XR2 /XR2 POINTS TO DCB TABLE TAD (SNAME+1 DCA XR3 /XR3 POINTS TO PERMANENT DEVICE NAME TABLE TAD (SBUFF+1 DCA XR4 /XR4 POINTS TO HANDLER BUFFER ADDRESSES TAD (SRES+1 DCA XR5 /XR5 POINTS TO RESIDENCY TABLE CLA IAC /?? DCA OLDPAG /SET 'OLDPAG' TO A RIDICULOUS VALUE INIT SLTLUP, ADVDSC /GO TO NEXT DESCRIPTOR ADVBOT /ADVANCING OVER ANY BOOTSTRAPS JMP BOOT2X /ALL DONE CREATING INTERNAL COPIES OF TABLES GET ACTIVE SMA CLA /IS IT ACTIVE? JMP INACT /NO ISZ COUNT /YES, UPDATE COUNT JMP ACTIV JMP I (TOOMANY /TOO MANY ACTIVE HANDLERS BOOT2X,/ TAD I (SNAME /SEE IF SYS WAS SPECIFIED / DCA SAMSYS /0 IF DIDN'T SPECIFY NEW SYS / TAD SAMSYS / SZA CLA / JMP CHKDSK / CDF 10 / TAD I (7760 /DIDN'T SPECIFY SYS SO USE CURRENT SYS / CDF 0 / DCA I (SDCB / TAD (7607 / DCA I (SRES /CHKDSK, TAD DSKG1 /WAS DSK SPECIFIED? / SZA CLA / JMP I (BOOT3 /YES, ALREADY SET UP / TAD I (SDCB / DCA I (SDCB+1 / TAD (7607 / DCA I (SRES+1 / DCA I (SBUFF+1 JMP I (BOOT3 CHKRES, 0 JMS I [GETPG /GET PAGE OF RESIDENCE DCA NEWPAG TAD NEWPAG TAD OLDPAG SNA CLA /SAME OR PREVIOUS PAGE? JMP I CHKRES /YES, SAME PAGE ISZ CHKRES GET /NO, A NEW PAGE, NEEDS NEW SLOT, ETC. CORES RTL /GET CORES BIT SPA CLA /IS THIS ALLOWED TO START A NEW GROUP? JMP I (TWOSYS /NO, IT MAY ONLY BE CORESIDENT WITH SOMETHING EARLIER TAD NEWPAG /YES CIA DCA OLDPAG /GOT NEW 'OLDPAG' JMP I CHKRES ACTIV, JMS CHKRES JMP SAMPG GET SYSBIT RAL SPA CLA /IS IT A 'SYS' HANDLER? JMP I (SETSY /YES JMS I (GETSLOT /NO JMS I (SETSLT /SET BLOCK SLOT DCA I XR1 TAD NEWPAG HNDLOC, DCA I XR4 /STORE AWAY ADDRESS OF HANDLER (OR 0 IF PREVIOUSLY USED) JMS I (GETDCB DCA I XR2 /SET DCB GET /HASH CODE NAME PRMNM2 DCA TEMP /SAVE 2ND WORD GET PRMNM1 TAD TEMP /ADD 2 WORDS DCA TMP1 /SAVE SUM TAD TEMP SNA CLA /WAS 2ND WORD 0? JMP NO4C /YES TAD TMP1 /NO, FORCE BIT 0 ON RAL STL RAR DCA TMP1 NO4C, TAD TMP1 /TAKE CODED NAME DCA I XR3 /SET PERMANENT NAME TABLE GET CORES RTL /GET CORESIDENT BIT SMA CLA /IS IT RESIDENT? JMP NORE /NO GET /YES ENTPT /GET RELATIVE ENTRY POINT AND [177 TAD [7600 /CORESIDENT ENTRY POINTS TO SYS MUST BE ON PAGE 7600 NORE, DCA I XR5 /SET RESIDENCY TABLE INACT, GET /BUT MAYBE IT'S 'DSK' DSKBIT RTL SNL CLA /IS IT DSK? JMP SLTLUP /NO, IT'S TO BE IGNORED JMS I (SLOTDSK /YES ASSIGN 'DSK''S LOCATION SLOT GET /GET RID OF DSK BIT DSKBIT RTL CLL RTR PUT DSKBIT JMP SLTLUP /REITERATE SAMPG, TAD SLOT /ALREADY HAVE SLOT JMS I (SETSLT DCA I XR1 JMP HNDLOC GOTEM, CORE, 0 TAD I [7777 AND [70 CLL RTR RAR SNA JMS I (RELCOR JMP I CORE PAGE / STEPS IN BOOTSTRAPPING: /1. ASSIGN DSK, IF SPECIFIED, MAKE SURE NFS [BOOT2] /2. ASSIGN SLOTS [BOOT2A] /3. GIVE ERROR IF TOO MANY ACTIVE OR TOO MANY SLOTS [BOOT2A] /4. BUILD INTERNAL COPIES OF DCB, SLOT, NAME, RES [BOOT2A] /5. ALSO BUILD HANDLER ADDRESS TABLE, CONTAINS [BOOT2A] / HANDLER ADDRESS IF NOT PREVIOUSLY WRITTEN OUT /6. COMPARE DCB'S OF NEW AND OLD SYSTEM, IF DIFF, [BOOT3] / COPY SYSTEM OVER. LEAVE NEW SYSTEM HANDLER / IN CORE /7. ASK GUY ABOUT NEW DIRECTORY [BOOT4] /8. READ IN USR, UPDATE ITS TABLES, WRITE OUT USR [BOOTC] / NAME TABLE, DHIT (SLOT, 2-PAGE,ENTPT) /9. READ IN CURRENT PAGE 7600 IMAGES [BOOT5] / SET UP AS FOLLOWS: / PG7600/L: BOOT / PG7600/H: 07600 IMAGE / BLOK66/L: 17600 IMAGE / BLOK66/U: 27600 IMAGE / THIS IS ACCOMPLISHED VIA: / PG7600_0 / BLOK66_66 / IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L /10. MOVE DCB AND RESIDENCY TABLES INTO 17600 IMAGE [BOOT6] /11. MOVE BOOTSTRAP INTO PAGE 7600 IMAGES (2 PLACES) [BOOT7] /12. WRITE OUT HANDLERS [BOOT8] /13. ZERO DIRECTORY IF REQUESTED [BOOTD] /14. PUT SYS, DATA BREAK, CORE LIM IN 07600 IMAGE [BOOTE] /15. WRITE 7600 IMAGES BACK OUT ONTO TAPE [BOOTF] / IF NEW SYS IS 1-PAGE, PG7600/L_BLOK66/L / 0_PG7600 / 66_BLOK66 /16. READ BACK PAGE 7600 IMAGES. MOVE IN FIELD 1 STUFF / EXCEPT FOR CD AREA, RESTORE TODAY'S DATE, / BRANCH TO 7600 GETSLOT,0 ISZ SLOT /USE NEXT SLOT TAD SLOT TAD (-26 SNA CLA JMP I (NOSLOT TAD SLOT JMP I GETSLOT BOOT, ISZ I (RETSW /***? CLA IAC DCA I (BD /DISABLE 'BUILD' CMD /SEE IF ARGUMENT WAS GIVEN; TREAT IT AS BOOT DEVICE, /SAVE HANDLER ADDRESS (MUST BE AN ACTIVE HANDLER) JMS I (LOCSYS /IN CASE DSK=SYS / JMS I [GETNUM / NOP / TAD SIZE / DCA BOOTDV /CHECK THAT # IS GT 7600 BOOT2, TAD DSKG1 /FIND OUT ABOUT 'DSK' SNA JMP GOTD /DSK=SYS DCA SAV1 TAD DSKG2 DCA SAV2 TAD DSKP1 DCA NAME1 TAD DSKP2 DCA NAME2 JMS I [BIGNAM /FIND IT IN TABLES GOTD, GET DCB SMA CLA /IS IT FILE-STRUCTURED? JMP I (DSKBAD /NO GET /YES DSKBIT RTL STL RTR /TURN ON BIT 1 PUT DSKBIT JMP I (BOOT2A GETDCB, 0 GET PLATNUM JMS I [ROTL AND [7 /GET # OF PLATTERS SNA IAC /0 MEANS 1 TAD [-1 /SUBTRACT 1 CLL RTL RAL /TIMES 10 DCA TMP1 GET DCB AND [7770 /MASK OFF USEFUL INFO TAD TMP1 JMP I GETDCB SLOTDSK,0 JMS I (CHKRES JMP SMPG TAD NEWPAG DCA I (SBUFF+1 JMS GETSLOT JMS SETSLT B, DCA I (SHND+1 JMS GETDCB DCA I (SDCB+1 TAD (5723 /'DSK' HASHED DCA I (SNAME+1 GET SYSBIT RTL /SYSBIT TO L, CORES BIT TO AC0 SNL SMA CLA /IS IT EITHER SYS OR CORESIDENT WITH SYS? JMP NORE2 /NO, SO IT'S NOT CORE-RESIDENT GET /YES, RESIDENT AT ALL TIMES IN 07600 ENTPT AND [177 TAD [7600 NORE2, DCA I (SRES+1 JMP I SLOTDSK SETSY, TAD NEWPAG DCA I (SBUFF / JMS SETSLT /NO BLOCK SLOT DCA I (SHND JMS GETDCB DCA I (SDCB /SET DCB TAD I (SNAME SZA CLA JMP I (TWOSYS TAD (4631 /HASH CODING FOR 'SYS' DCA I (SNAME /CHECK THAT NAME IS 'SYS' TAD [7607 DCA I (SRES /CHECK REL ENTRY PT IS 7 JMP I (INACT SMPG, TAD SLOT JMS SETSLT JMP B SETSLT, 0 SNA JMP .+3 TAD [-15 JMS I [ROTR DCA TMP1 GET / CORES / RTL / SPA SZL CLA / JMP I SETSLT /SYS &CORES HANDLERS GET 0 ENTRY (UNFORTUNATELY) GET ENTPT AND (4177 TAD TMP1 JMP I SETSLT PAGE USRBLK=13 /BLOCK OF USR ON SYSTEM DEVICE USRNPT=36 /POINTS TO USR PTR TO PERMANENT DEVICE NAME TABLE USRHPT=37 /POINTS TO USR PTR TO DEVICE HANDLER INFORMATION TABLE BOOTC, TAD [200 /READ FIRST BLOCK OF USR JMS I [SYS BUFFER /INTO BUFFER USRBLK TAD I [BUFFER+USRNPT /GET POINTER TO NAME TABLE TAD [BUFFER-400 /ADD IN OFFSET FOR RELOCATION DCA T1AD /ASSUME BOTH TABLES OCCUR IN THE SECOND TAD I [BUFFER+USRHPT /BLOCK OF THE USR TAD [BUFFER-400 DCA T2AD /GET POINTER TO DHIT TAD [400 /READ BLOCKS 2 AND 3 OF USR JMS I [SYS /INTO BUFFER,BINARY BUFFER USRBLK+1 TAD [-17 JMS I [MOVE /MOVE IN PERMANENT DEVICE NAME TABLE CDF 0 SNAME CDF 0 T1AD, HLT / TAD SAMSYS /WAS SYS SPECIFIED? / SZA CLA / JMP CHKD2 /YES / TAD I T2AD /NO, USE CURRENT SYS INFO / DCA I (SHND /CHKD2, TAD DSKG1 / SZA CLA /WAS DSK SPECIFIED? / JMP MVSHND /YES / TAD I T2AD /MAKE SAME AS SYS / DCA I (SHND+1 MVSHND, TAD [-17 /NOW PUT IN SLOT WORDS (DHIT) JMS I [MOVE CDF 0 SHND CDF 0 TMP2, T2AD, HLT TAD [4400 /RE-WRITE USR JMS I [SYS L5400, BUFFER USRBLK+1 JMP I [BOOT5 IFNZRO BUFFER-5400 <ERRRR,XX> BOOTD, TAD DRECT /WANT NEW DIRECTORY? SNACLA, SNA CLA JMP BOOTE TAD L5400 /YEP. WRITE ONE JMS I [SYS DPROPR 1 BOOTE, TAD NEWCOR CLL RAL RTL TAD SAVHID /V3D SET NEW H.O. DATE WORD DCA I [7777 /SET UP NEW CORE LIMIT TAD SYSLOC /MOVE IN FRESH COPY OF SYS HANDLER TAD [7 DCA SYSL2 TAD [7607-7743-1 JMS I [MOVE CDF 10 SYSL2, HLT CDF 0 7607 TAD [-200 /PUT SYS HANDLER INTO REC 0 BUFF. ??? JMS I [MOVE CDF 0 7600 CDF 0 PG7600+200 /RESIDENT F0 CODE JMS I (WRITCC /WRITE CCB AND DATA BREAK FILLERS TAD [200 TAD SYSLOC /MOVE IN COPY OF 27600 AGAIN DCA SYSL3 TAD [-200 JMS I [MOVE CDF 10 SYSL3, HLT CDF 10 BLOK66+200 JMP I (BOOTF DRECT, -1 /1 MEANS WRITE A ZERO DIRECTORY /0 MEANS DON'T TOUCH DIRECTORY /-1 MEANS ASK GUY FOR OPTION /SEE IF NEW SYSTEM HAS SAME DCB AS CURRENT SYSTEM /THIS MAY WELL CAUSE EXTRA I/O WHEN GOING FROM RF08=K TO RF08=M BOOT3, CDF 10 TAD I (DATEWD DCA SAVDAT /SAVE TODAY'S DATE FOR FUTURE REFERENCE TAD I (DCBTBL /GET DCB OF CURRENT SYSTEM CDF 0 AND [7770 DCA TMP2 JMS I (PATCH /V3D TAD SAVLOC /DON'T COPY IF DID 'BUILD' SNA CLA /WAS THE 'BU' COMMAND USED? TAD [-10 /NO, USE 'SZA CLA' TAD SNACLA /YES, USE 'SNA CLA' DCA I (BOOTQ JMS SETUPSYS TAD SYSDCB CIA TAD TMP2 JMP I (BOOTQ /NOTE: THIS PROCEDURE DOESN'T COPY BOOTSTRAP IF NEW DEV=OLD DEV. / THEREFORE YOU CAN'T CHANGE BOOTSTRAPS / CHECK ON AFFECT FOR TD8E/ROM INTERACTION SETUPSYS,0 DCA SAVLOC TAD SAVLOC DCA I (SAVLC JMS I (LOCSYS JMS I [GETPG /GET PAGE OF SYS HANDLER DCA SYSLOC /PAGE OF START OF NEW SYSTEM HANDLER JMS I (GETDCB DCA SYSDCB JMS I (GETLEN GET TWOPAG DCA I (SYSSIZ TAD I (SYSSIZ SMA CLA /IS IT 1- OR 2-PAGES? JMP ONEPG /GUESS WHAT THIS MEANS [HINT LOOK AT LABEL] STA TAD I (AMTCOR SNA CLA JMP I (NOTNUF /WE CAN'T RUN IN 8 K ONEPG, TAD [-400 JMS I [MOVE CDF 10 SYSLOC, HLT /MOVE SYSTEM HANDLER CDF 10 SAVLOC, 0 /TO 10000-10377 JMP I SETUPSYS PAGE FIRST, 0 /SUBROUTINE FOR LDABS IN FIELD 2 TAD KLUD DCA NEWLIM CIF CDF 20 JMP I FIRST /0: LOADING OS/8 /-2: LOADING HEADER OF HANDLER /-1: LOADING HANDLER HND, CDF 20 /DATA FIELD 2 TAD I (ORIGIN DCA KLUD TAD TABLMT CIF CDF 20 /BACK TO FIELD 2 JMP I (ORI KLUD, 0 NEWLIM, 0 /NEW END OF DESCRIPTORS OK, STA /NOW USE ORIGIN TO TELL US HOW BIG A CDF 20 TAD I (ORIGIN /HANDLER WAS LOADED CDF 00 /BACK TO OUR FIELD AND [7600 TAD [200 /REMEMBER THAT ORIGIN IS ONE GREATER DCA HNDPTR /THAN ACTUAL LAST LOCATION. /BETTER TO USE 2-PAGE BIT TAD NEWLIM DCA TABLMT /SET NEW TABLE TOP DCA I TABLMT /NEED 0 AT END JMS I [COMMA JMP I (LOAD NMER, CIF 10 /V3C JMS I [200 /DISMISS USR FROM CORE 11 JMP I (NAMERR IOPEN, 0 /PREPARE TO READ INPUT CLA CMA DCA I (CHCNT TAD I (JMPX /RESTORE SWITCH DCA I (JMPGET TAD I (FILPTR /RESULTS OF LOOKUP DCA I (RECNO DCA I (REOF TAD (CDF 0 CDF 20 /OFF TO FIELD 2 DCA I (XFIELD /SETUP LDABS FOR FIELD 0 CDF 00 /BACK TO FIELD 0 JMP I IOPEN PAGE /BLOCK 0 OF DEVICE CONTAINS INITIAL IMAGE /OF 17600 FOLLOWED BY 07600 /17600-17646 CD AREA INITIALLY CONTAINS BOOTSTRAP /17647-17665 RESIDENCY TABLE /17666 DATE /17667-17677 PART OF OS/8 KBM /17700-17740 PART OF OS/8 USR /17741-17757 USER DEVICE NAME TABLE/ODT /17760-17776 CONTROL WORD TABLE (DCB) /17777 UNUSED /07600-07606 PART OF OS/8 CODE /07607-07743 SYSTEM HANDLER /07744-07745 STARTING ADDRESS /07746 JOB STATUS WORD (JSW) /07747 MUST BE 0 (SOFSET) /07750-07755 DATA BREAK LOCATIONS RESERVED FOR HARDWARE /07756-07775 KBM AND ODT /07776 MUST BE 0 (SBLOCK) /07777 SOFTWARE CORE SIZE, BATCH FLAGS /IF SYSTEM HANDLER IS TWO PAGES LONG, THEN WE HAVE INSTEAD: /BLOCK 66 (LOWER) CONTAINS 17600 IMAGE /BLOCK 66 (UPPER) CONTAINS 27600 IMAGE (MUST END WITH 4 ZERO'S) /BLOCK 0 (LOWER) CONTAINS BOOTSTRAP /BLOCK 0 (UPPER) CONTAINS 07600 IMAGE *4000 DSCADV, 0 /ADVANCE TO NEXT DESCRIPTOR /RETURN 2 MEANS NO MORE /RETURN 1 MEANS NOW AT BOOTSTRAP BLOCK /RETURN 3 OTHERWISE TAD DSCPTR TAD [HDRSIZ DCA DSCPTR JMS I (SKPCRD /SKIP A POSSIBLE GROUP COUNT TAD I DSCPTR CLL TAD [200 SZL CLA JMP I DSCADV /TAKE RETURN1 UPON REACHING BOOTSTRAP RECORD ISZ DSCADV TAD I DSCPTR SZA CLA ISZ DSCADV /TAKE RETURN 2 IF ADVANCED TO END JMP I DSCADV /RETURN 1 MEANS NO MORE DESCRIPTORS BOTADV, 0 TAD I DSCPTR CIA IAC /COUNT IS ONE MORE TAD DSCPTR DCA DSCPTR /POINT TO BEGIN OF NEXT DESCRIPTOR JMS I (SKPCRD TAD I DSCPTR CLL TAD [200 SZL CLA JMP BOTADV+1 /WIERD CASE OF CONSECUTIVE BOOTSTRAPS TAD I DSCPTR SZA CLA ISZ BOTADV /TAKE RETURN1 IF ADVANCED TO END JMP I BOTADV /WIERD CASES CAN OCCUR IF GUY DELETES ALL ENTRY POINTS IN A GROUP SEPARATELY /DESCRIPTOR ENTRIES: /FIRST WORD: / 0 MEANS END OF TABLE / -1 TO -20 MEANS GROUP COUNT (NOT NECESSARILY ACCURATE) / -21 TO -400 APPROX MEANS BOOTSTRAP RECORD COUNT / OTHER MEANS DESCRIPTOR SYSCPY, 0 /COPY OS/8 SYSTEM STA TAD I (AMTCOR SZA CLA TAD [10 /GT 8K DCA CORBIT TAD CORBIT SZA CLA JMP COP2 JMS I [SYSWP /SWAP IN NEW SYS HANDLER TAD (7410 JMS I [SYS /SAVE PART OF BUILD TO MAKE A BIG BUFFER 400 /SAVE 400- 27 /SAVE IN BLOCK 27 JMS I [SYSWP /GET BACK ORIGINAL HANDLER COP2, TAD [4210 JMS COPY /COPY BLOCK 0 0 TAD (5610 JMS COPY /COPY 7-15 7 TAD [4210 JMS COPY /COPY 26 26 TAD (7410 JMS COPY /COPY 51-66 51 TAD [4210 JMS COPY /COPY 67 67 TAD CORBIT SZA CLA JMP COP3 JMS I [SYSWP /GET BACK NEW HANDLER FOR A MOMENT TAD (3410 /RESTORE CORE WE SAVED JMS I [SYS 400 27 JMS I [SYSWP /RESTORE ORIGINAL SYS HANDLER COP3, JMP I SYSCPY COPY, 0 TAD CORBIT DCA TMP1 TAD I COPY DCA COPREC /ARG 1 CONTAINS FIRST BLOCK TO COPY TAD COPREC DCA CPREC2 /MAKE TWO COPIES STL RAR /CONVERT 'WRITE' TO READ TAD TMP1 JMS I [SYS /READ FROM ORIGINAL DEVICE 400 COPREC, HLT JMS I [SYSWP TAD TMP1 JMS I [SYS /WRITE ON NEW DEVICE 400 CPREC2, HLT JMS I [SYSWP /LEAVE WITH ORIGINAL SYSTEM HANDLER STILL IN SYSTEM JMP I COPY /FALL THROUGH RECORD NUMBER CORBIT, GETLEN, 0 GET /GET LENGTH OF DEVICE PLATNUM JMS I [ROTL /GET NUMBER OF PLATTERS AND [7 SNA IAC /0 MEANS 1 CIA DCA COUNT GET DEVSIZ DCA TMP1 SIZLUP, TAD TMP1 SNA STA /4096 BECOMES 4095 ISZ COUNT JMP SIZLUP CIA TAD [70 /LEAVE ROOM FOR OS/8 DCA DLENGTH JMP I GETLEN DPROPR, -1 /INITIAL EMPTY DIRECTORY MFREE 0 0 -1 0 /1 EMPTY FILE DLENGT, 0 BADARG, JMS I [PRWD TEXT /?ARG/ JMP I [CONFIG PAGE /WANT TO COPY /SYS 0 /KBM 7-12 /USR 13-15 /ENTER 26 /CD 51-53 /SAVE,DATE 54-55 /ERR 56 /CHAIN 57 /ODT 60-63 /CCL 64,65,67 /SYS 66 /EXTRA (DON'T WANT TO COPY): /HANDLERS 16-25 /SCRATCH 27-50 /NEW ALGORITHM: /SET FIELD 2 IF 12K OR MORE AND SKIP *'ED ITEMS /1. MOVE NEW SYS HANDLER TO 0,200 /2.* SAVE 34 PAGES STARTING AT 10400 IN BLOCK 27 OF NEW DEVICE /3. COPY BLOCKS 7-15 /4. COPY BLOCK 26 /5. COPY BLOCKS 51-66 /6. COPY BLOCK 67 /7.* RESTORE 34 PAGES /THE FOLLOWING ROUTINES AND VARIABLES MUST BE ABOVE THE LOCATIONS /IN WHICH OS/8 AND CD LOAD INTO, BECAUSE THEY ARE CALLED BY LDABS. /FURTHERMORE, NONE OF THESE ROUTINES MAY USE PAGE 0 LITERALS /OR MAY USE ANY PAGE 0 TEMPORARIES, EXCEPT THAT SOME MAY USE /PAGE ZERO TEMPORARIES IF THE STORE INTO THEM FIRST /(EXCEPT THOSE COMMENTED OTHERWISE, WHICH MUST PRESERVE /THE NEW PAGE 0 AT ALL COSTS, UNTIL IT IS WRITTEN OUT /LDABS /ICHAR /BADINP /OVER /ASSEMB /CTCTST /PRWD /CTRLC /OVROUT /ROTL /PRINTE /TTYOUT /ROTR /PWORD /ECHOFL /LINEUP /CRLF /PRNT /RUBFLG /MOVE /SYSWP /AMTCOR SYDCB=7760 /LOCATION OF SYS,DSK DCB WORDS BOOT5, JMS I (RECZRO BOOT6, TAD [-17 JMS I [MOVE /PUT RESIDENT FIELD 1 TABLES INTO CDF 0 SDCB /FIXED SPOTS CDF 10 BLOK66+160 TAD [-17 JMS I [MOVE CDF 0 SRES CDF 10 BLOK66+47 /COULD SET USER DEVICE NAMES HERE IF DESIRED BOOT7, JMS I (LOCSYS / TAD SAMSYS / SZA CLA /SAME SYSTEM? / JMP BOOT8 /YES BLOOK, ADVDSC /SEARCH FOR BOOTSTRAP JMP FNDBOT /FOUND BOOTSTRAP RECORD AMONGST DESCRIPTORS HLT /IT WASN'T THERE! JMP BLOOK /KEEP LOOKING FNDBOT, TAD DSCPTR IAC /POINT TO BOOTSTRAP DCA FROMBO TAD I DSCPTR /LENGTH OF BOOTSTRAP /CHECK THAT'S IT'S LE 47 LOCS IF 1-PAGE SYSTEM JMS I [MOVE CDF 0 FROMBO, HLT CDF 0 PG7600 TAD [-47 /MOVE FIRST 47 LOCS INTO CD AREA IN 17600 IMAGE JMS I [MOVE CDF 0 PG7600 CDF 10 BLOK66 BOOT8, TAD (-16 DCA COUNT TAD (SBUFF DCA XR1 TAD (SHND DCA XR2 DVLOOP, TAD I XR1 SNA JMP NOHN DCA DVBUF /LOCATION OF HANDLER TAD I XR2 JMS I [ROTL AND [17 SNA JMP CN /NO BLOCK SLOT TAD L15 /CONVERT TO ACTUAL BLOCK # DCA DVREC TAD [4210 JMS I [SYS DVBUF, HLT DVREC, HLT CN, ISZ COUNT JMP DVLOOP JMP I (BOOTD NOHN, ISZ XR2 JMP CN SYSSIZ, 0 /MINUS MEANS 2-PAGE SYS HANDLER CTRLC, KCC /CLEAR ^C FLAG TAD I (SWAPER /DO WE HAVE TO SWITCH? SZA CLA JMS I (SYSWP /YES. INSERT OLD HANDLER JMP END /GO CHECK BATCH BEFORE RETURNING KORE, JMS I [GETNUM L15, 15 /NOTHING MEANS 0 TAD SIZE AND [7770 SZA CLA JMP I [BADARG /MUST BE BETWEEN 0 AND 7 JMS I (RELCOR /FIND REAL AMOUNT OF CORE CMA TAD SIZE SMA CLA JMP I (NOTNUF /MUST BE .LE. REAL AMT OF CORE TAD CHAR SZA CLA JMP I [SYNTAX TAD SIZE DCA NEWCOR JMP I [CONFIG / IF NEW SYS IS 1-PAGE, PG7600/L_BLOK66/L / 0_PG7600 / 66_BLOK66 BOOTF, TAD SYSSIZ SMA CLA /IS NEW SYS TWO PAGES? TAD [-200 /NO JMS I [MOVE /YES, NULL MOVE CDF 10 BLOK66 CDF 0 PG7600 TAD [4200 JMS I [SYS PG7600 0 TAD [4210 JMS I [SYS BLOK66 66 BOOTG, NOP / JMS I (RECZRO /SIMULATE BOOTSTRAP TAD [-131 /MOVE UP FIELD 1 CODE JMS I [MOVE CDF 10 BLOK66+47 CDF 10 7600+47 TAD SAVDAT CDF 10 DCA I (DATEWD CDF 0 JMS I [PRWD TEXT /SYS BUILT/ /MUST DO SOME CLEAN UP IF BATCH IS RUNNING /ALL OVERLAYED CODE MUST BE RESET IN CASE USER WANTS /TO REUSE THIS COPY OF BUILD. END, JMS I BATT /JUMP TO BATCH TEST ROUTINE FOR CLEAN UP JMP I [7600 /OTHERWISE GO HOME WITH NEW SYSTEM /THIS IS FROM BATCH PAGE /MOVE MOVES CORE AROUND (CALLABLE FROM ANY FIELD) / TAD (-# OF LOCS TO MOVE / JMS MOVE / CDF FROM FIELD / FROM BUFFER LOCATION START / CDF 'TO' FILED / TO BUFFER /MUSTN'T DESTROY OS/8 LOCS, NO PAGE 0 TEMPS! MOVE, 0 DCA MVCT RDF TAD (CIF CDF DCA MOVRET TAD I MOVE /GET CDF FROM-FLD DCA MVCDF2 ISZ MOVE /POINT TO FROM-BUF TAD I MOVE /GET LOC TO MOVE DCA MVTM1 ISZ MOVE /POINT TO TO-CDF TAD I MOVE DCA MVDF /GET CDF TO FIELD OF DESTINATION ISZ MOVE /POINT TO TARGET AREA TAD I MOVE DCA MVTM2 ISZ MOVE /POINT TO RETURN TAD MVCT SNA CLA JMP MOVRET /NOTHING TO MOVE MVCDF2, CDF 0 /GETS ALTERED TO PICK UP F1 TAD I MVTM1 MVDF, HLT DCA I MVTM2 ISZ MVTM1 /BUMP POINTERS TO AREAS ISZ MVTM2 MV20, 20 ISZ MVCT JMP MVCDF2 MOVRET, HLT /RETURN TO CALLING FIELD JMP I MOVE CTCTST, 0 TAD MV7600 /ALLOW FOR PARITY KRS TAD (-7603 SNA CLA KSF JMP I CTCTST JMP I (CTRLC MVCT, 0 ASSEMB, 0 /ASSEMBLE TWO 6 BIT WORDS CDF 20 TAD I LWD1 JMS I PROTL TAD I LWD2 CDF 00 JMP I ASSEMB LWD1, WD1 LWD2, WD2 PROTL, ROTL BOOT4, TAD I (DRECT SMA CLA JMP I (BOOTC /HE'S SPECIFIED ABOUT DIRECTORY ZERO JMS I [PRWD /YES, NO NEED TO COPY SYSTEM TEXT /WRITE ZERO DIRECT?/ TAD [-10 /DON'T WANT TO DESTROY PRECIOUS TABLES JMS I [GTEXT /GET REPLY JMP BOOT4 JMS I [GNAME TAD NAME1 AND [7700 TAD (-3100 SNA CLA CLA IAC /Y DCA I (DRECT /NO; COULD HAVE SAVED LOCATION BUT I FEEL SAFER THIS WAY JMP I (BOOTC MVTM1, ROTL, 0 CLL RTL RTL RTL JMP I ROTL MVTM2, ROTR, 0 CLL RTR RTR RTR JMP I ROTR TTYOUT, 0 /YOU GUESSED IT DCA TM TAD ECHOFL SZA CLA /ARE WE ECHOING? JMP I TTYOUT /NO TAD TM /YES TLS TSF JMP .-1 MV7600, 7600 /CLA JMS I (CTCTST /TEST FOR ^C. JMP I TTYOUT TM, SKPCRD, 0 TAD I DSCPTR CLL TAD MV20 /A GROUP COUNT MUST BE IN THE RANGE -1 TO -20 SNL CLA JMP I SKPCRD ISZ DSCPTR /IT'S A DARN GROUP COUNT, GO PAST IT JMP SKPCRD+1 /WIERD CASE OF CONSECUTIVE GROUP COUNTS ECHOFL, 0 /1 MEANS NOT ECHOING, SAW ^O PATCH, 0 TAD I [7777 /V3D AND L600 DCA SAVHID /SAVE HIGH ORDER DATE BITS JMP I PATCH PAGE PRNAME, 0 /ROUTINE TO PRINT NAME1-NAME4 TAD (NAME1 DCA TEMP CLL STA RTL /-3 DCA COUNT PRNM2, TAD I TEMP JMS PRINTE /TYPE OUT CHARS ISZ TEMP ISZ COUNT /EXHAUSTED ALL? JMP PRNM2 TAD I TEMP SNA CLA JMP I PRNAME /NO . IF NO EXTENSION TAD (". /PRINT '.' JMS I (TTYOUT TAD I TEMP JMS PRINTE JMP I PRNAME PRINTE, 0 DCA CHTMP2 TAD CHTMP2 /EXTRACT LEFT HAND SIDE JMS I (ROTR JMS PWORD TAD CHTMP2 JMS PWORD JMP I PRINTE PWORD, 0 AND (77 SNA /IF NULL, GET OUT JMP NULL DCA PRTM TAD (200 KRS TAD (-217 /^O SNA CLA /STOP ECHOING? KSF /MAYBE SKP /NO JMP CTO /YES TAD PRTM TAD (240 AND (77 PRSPAC, TAD (240 JMS I (TTYOUT JMP I PWORD NULL, TAD LINEUP SNA CLA /PRINT SPACE? JMP I PRINTE /NO JMP PRSPAC /YES PRWD, 0 CLA PRWD2, TAD I PRWD JMS PRINTE TAD I PRWD ISZ PRWD AND (77 SZA CLA JMP PRWD2 JMP I PRWD /LEAVE IF LAST WORD ENDED WITH 00 CHTMP2, 0 CTO, KCC TAD ("^ JMS I (TTYOUT TAD ("O JMS I (TTYOUT JMS CRLF CLA IAC DCA I (ECHOFL JMP I PWORD LINEUP, 0 /NON-ZERO MEANS PRINT NULLS AS SPACES OVER, JMS I (ASSEMB /EXTENSION OF LDABS. CIA CDF 20 /OFF TO FIELD 2 TAD I LCKSUM /CHECKSUM OK? CDF 00 /BACK TO OUR FIELD SZA CLA JMP BADINP /SOORY ABOUT THAT CLA IAC JMP OVROUT /SKIP ERROR EXIT BADINP, JMS PRWD TEXT /?BAD INPUT/ JMS CRLF OVROUT, CDF 20 TAD I (LDABS CDF 00 DCA OTEMP JMP I OTEMP OTEMP, 0 LCKSUM, CKSUM PRTM, 0 CRLF, 0 TAD (215 DCA NAME1 JMS PRNT TAD (212 JMS I (TTYOUT JMP I CRLF PRNT, 0 /CHARACTER PRINT ROUTINE TAD ("\ /IF NOT RUBOUT, AND IF RUBOUT WAS ISZ RUBFLG /LAST, ECHO \. SKP CLA JMS I (TTYOUT TAD NAME1 JMS I (TTYOUT JMP I PRNT RUBFLG, 0 /RUBOUT FLAG PAGE /ASSUMES NEW PROPOSED SYSTEM HANDLER IS IN 10000-10377 /CAN'T DESTROY OS/8, IE. CAN'T USE PG 0 TEMPS SYSWP, 0 /ROUTINE TO MOVE SYS HANDLER AROUND ISZ SWAPER /DIDDLE SWAP INDICATOR CLA CMA /-1 MEANS NEW HANDLER IS IN DCA SWAPER STA TAD AMTCOR SNA CLA /DO WE HAVE 8K? JMP SWAPLW /YES, DON'T SWAP WITH FIELD 2 TAD L7600 /NO, CAN'T HURT TO SWAP FIELD 2 DCA OUT TAD SAVLC TAD P200 DCA IN TAD (4-200 DCA STEMP /SWAP ENTIRE PAGE (EXCEPT LAST 4 LOCATIONS) SWAP3, CDF 10 /SWAP 27600 & 2ND PAGE OF HANDLER TAD I IN DCA SYSQ CDF 20 TAD I OUT CDF 10 DCA I IN TAD SYSQ CDF 20 DCA I OUT ISZ IN L7400, 7400 /NOP ISZ OUT L7600, 7600 ISZ STEMP JMP SWAP3 SWAPLW, CDF 0 TAD (7607 DCA OUT /7607 ALWAYS TARGET DESTINATION TAD SAVLC TAD (7 DCA IN TAD (7607-7743-1/ONLY 7607-7743 GETS MOVED DCA STEMP SWAP2, CDF 10 TAD I IN DCA SYSQ /TEMP STORE CDF 0 TAD I OUT CDF 10 DCA I IN TAD SYSQ CDF 0 DCA I OUT ISZ IN ISZ OUT ISZ STEMP JMP SWAP2 DCA I (SOFSET /V3C JMP I SYSWP AMTCOR, 1 /HIGHEST CORE BANK SAVLC, 0 /MUST BE ABOVE 3577 CHTMP, IN, 0 /POINTS TO HANDLER AREA AT ONE NAMED SYS OUT, 0 /POINTS TO 7607 HANDLER SWAPER, 0 /-1 MEANS NEW HANDLER IN /MUST BE ABOVE OS/8, NO PAGE 0 LITERALS STEMP, ICHAR, 0 JMS I (CTCTST ISZ JMPGET /POINT TO CORRECT CHAR ISZ CHCNT /NEED WE READ? JMPX, JMP JMPGET /NOT YET TAD REOF /YES. DID LAST YIELD EOF? SZA CLA JMP I (BADINP /SOMETHING IS WRONG. RDIN, JMS I DVICE P200, 0200 /READ INTO FIELD 0 BINBUF, BINARY RECNO, 0 JMP RERROR /READ ERROR RECNO2, ISZ RECNO /POINT TO NEXT RECORD TAD (-601 DCA CHCNT /NEW CHARACTER COUNT TAD BINBUF DCA CHPTR TAD JMPX DCA JMPGET /RESET JUMP SWITCH JMP ICHAR+1 SYSQ, JMPGET, JMP . /IF WE GET CAUGHT HERE, WE KNOW IT JMP CHAR1 /ASSEMBLE FIRST CHAR JMP CHAR2 /SECOND CHAR TAD JMPX /THIRD CHAR HERE DCA JMPGET /RESET SWITCH TAD I CHPTR AND L7400 CLL RTR RTR TAD CHTMP /ADD IN THE LAST TEMP STORE RTR RTR ISZ CHPTR /TO NEXT CHAR JMP GCHCOM CHAR2, TAD I CHPTR AND L7400 DCA CHTMP /SAVE FOR THIRD CHAR ISZ CHPTR CHAR1, TAD I CHPTR GCHCOM, AND (377 ISZ ICHAR /PASS UP ERROR RET JMP TO20 /RETURN RERROR, SPA CLA /FATAL, OR EOF? JMP IOERR /FATAL ISZ REOF /END OF FILE JMP RECNO2 /BACK TO MAINSTREAM IOERR, JMS I (PRWD TEXT \?I/O\ TO20, CIF CDF 20 /BACK TO FIELD 2 JMP I ICHAR REOF, 0 CHCNT, 0 CHPTR, 0 DVICE, 0 RETSW, 0 /0 MEANS RAN FROM 0S/8, 1 MEANS RNA STANDALONE PAGE LNLNGT=103 BEGLIN, ZBLOCK LNLNGT SBLOCK=7776 /?? /CTCFAK, .+1 /^C MUST NOT RETURN TO ANY SYSTEM. / JMP I CTCFAK /CTCFAK MARKS OUR PLACE DURING / /SYSGEN, AND ^C WILL RETURN TO THAT PLACE. /*** THIS STUFF GOES AWAY ON A BOOT BUILD, CDF 10 TAD I [7200 /HAS SPECIAL CODE BEEN OVERLAID BY HANDLERS? CDF 0 TAD [-1234 SZA CLA JMP I (NOROOM /YES, TOO BAD / TAD (5601 / DCA I [7600 / TAD (CTCFAK+1 / DCA I (7601 TAD [6600 /SAVE OLD SYSTEM HANDLER IN 16600 JMS I (SETUPSYS / JMS CTCFAK RDOS8, JMS I [PRWD TEXT \LOAD OS/8: \ JMS RD JMP RDOS8 CIF CDF 10 JMS I (WROS8 JMS I (SYSWP / JMS CTCFAK RDCD, JMS I [CRLF JMS I [PRWD TEXT /LOAD CD: / DCA DVER JMS RD JMP RDCD CIF CDF 10 JMS I (WRCD TAD I (RETSW SNA CLA /NOT IF FROM SCRATCH JMS I (SYSWP /GET OLD HANDLER IF ANY BACK IN JMP I [CONFIG RD, 0 TAD [-40 JMS I [GTEXT JMP I RD JMS I (SETUP DVER, JMP I (NODEV JMS I (SYSWP /PUT IN NEW HANDLER CIF CDF 10 JMS I (SAVE JMS I (SYSWP CIF CDF 20 /OFF TO PAGE 2 JMS I [LDABS /PAST HERE PAGE 0 IS GONE JMP I RD JMS I (SYSWP ISZ RD JMP I RD PAGE *6400 DSCTAB, ZBLOCK 1200 /RELIC: *7600 0 /ONLY LOADED FROM PAPER TAPE. *7777 0 /SET SOFTWARE CORE SIZE TO 'UNKNOWN' FIELD 1 *0 0 /FORCE ABSLDR TO LOAD THIS PAGE *400 / ZBLOCK 5400 0 *6600 RELOC BINARY BINPUN, CDF 10 CLA TAD (-400 CIF 0 JMS I (MOVE CDF 10 6600 CDF 0 BINARY /MOVE ONESELF DOWN CIF CDF 0 JMP I (LDR /EXECUTE IN FIELD 0 LDR, JMS LEDER /PUNCH 72 FRAMES OF 200 DCA CHECK /0 CHECKSUM TAD (102 JMS CKSUMM JMS PNCH STARTB, JMS I (CRLF TAD ("* JMS I (TTYOUT TAD (-100 JMS I (GTEXT JMP STARTB JMS I (GETNUM JMP I (OVERB TAD SIZE AND (7770 SZA CLA JMP STARTB TAD SIZE CLL RTL RAL DCA FLD JMS I (GETNUM /GET LOWER LIMIT JMP STARTB TAD SIZE DCA LIM1 JMS I (GETNUM /GET UPPER LIMIT JMP STARTB TAD SIZE DCA LIM2 TAD LIM2 CMA TAD LIM1 DCA COUNT2 TAD FLD TAD (300 JMS PNCH TAD FLD TAD (CDF 0 DCA BUFLD TAD LIM1 JMS I (ROTR AND (77 TAD (100 JMS CKSUMM TAD LIM1 AND (77 JMS CKSUMM BUFLD, HLT TAD I LIM1 JMS I (ROTR AND (77 JMS CKSUMM TAD I LIM1 AND (77 JMS CKSUMM ISZ LIM1 ISZ COUNT2 JMP BUFLD CIF CDF 0 JMP STARTB LEDER, 0 /PUNCH LEADER/TRAILER TAD (-200 DCA COUNT2 TAD (200 JMS PNCH ISZ COUNT2 JMP .-3 JMP I LEDER PNCH, 0 PLS PSF JMP .-1 CLA JMP I PNCH FLD, 0 LIM1, 0 LIM2, 0 COUNT2, 0 CHECK, 0 CKSUMM, 0 DCA CK1 TAD CK1 TAD CHECK DCA CHECK TAD CK1 JMS PNCH JMP I CKSUMM CK1, 0 PAGE OVERB, TAD Q300 JMS I QPNCH /FIELD 0 TAD Q176 JMS I QCKSUM JMS I QCKSUM /*7600 TAD Q74 JMS I QCKSUM STL CLA RTL JMS I QCKSUM /HALT TAD Q177 TAD Q77 JMS I QCKSUM /*7777 JMS I QCKSUM JMS I QCKSUM /*0000 TAD Q102 JMS I QCKSUM JMS I QCKSUM TAD I QCHECK JMS I QROTR AND Q77 JMS I QPNCH TAD I QCHECK AND Q77 JMS I QPNCH JMS I QLEDER HLT JMP .-1 /ALL DONE Q300, 300 QPNCH, PNCH Q176, 176 QCKSUM, CKSUMM Q74, 74 Q177, 177 Q77, 77 Q102, 102 QCHECK, CHECK QROTR, ROTR QLEDER, LEDER PAGE RELOC DIRLOC=1400 /FROM OS/8 ASSEMBLY READ=JMS I (7607 WRITE=READ MFREE=70 ERR=JMS I (WRERR *7200 1234 /MAGIC NUMBER WHICH IF NOT HERE, MEANS HANDLERS OVERLAID WROS8, 0 CIF 0 TAD Z7600 JMS I (MOVE /SAVE CURRENT 7600 CDF 0 7600 CDF 0 7000 /IN 07000 TAD (-7 /MOVE 6600 TO 7600 CIF 0 JMS I (MOVE CDF 0 6600 CDF 0 7600 TAD (-34 /FINISH MOVING FIELD 0 CIF 0 JMS I (MOVE CDF 0 6744 CDF 0 7744 CDF 0 TAD (6 /V3D DEV EXT LENGTH OF ABSLDR TAD I (DLENGTH /FILL IN INITIAL LENGTH CDF 10 DCA I (DIRLOC+14 /OS8 HAS INITIAL DIRECTORY CIF 0;WRITE;4200;7400;0;ERR /INITIAL REC.0 CIF 0;WRITE;4200;7400;66;ERR /ALSO WRITE RECORD 66 CIF 0;WRITE;4210;DIRLOC;1;ERR /INITIAL DIRECTORY CIF 0;WRITE;5000;0;7;ERR /KBM CIF 0;WRITE;4610;0;13;ERR /USR CIF CDF 20 /OFF IN FIELD 2 JMP I (BAK WHER, CDF 0 /RETURN FROM RELOCATED ROUTINES. TAD I (RETSW CDF 10 SNA CLA /SCRATCH BUILD? JMP I (RES76 /NO TAD Z7600 /YES /MOVE 17600 UP THERE CIF 0 JMS I (MOVE CDF 0 7400 CDF 10 Z7600, 7600 JMS I (RESTORE CIF CDF 0 JMP I WROS8 /RELATIONSHIP BEWTWEEN OS/8 CORE IMAGE AND BLOCKS ON SYSTEM DEVICE: /ITEM CORE LOC BLOCKS /KBM 0000-1777 7-12 /OVERLAYS 2000-3577 54-57 /INIT DIR DIRLOC- 1 /ABSLDR CCB LDRCTL- 70 /INIT BLOCK 0 7400-7777 0 /USR 10000-11377 13-15 /ABSLDR 12000-14377 71-75 /ENTER 13400-13577 26 /EXT MEM SAVE & ODT 64 /SYS 06600-06606 PART OF 07600 /SYS 06744-06777 " WRCD, 0 CIF 0;WRITE;4600;0;51;ERR /CD CIF 0;WRITE;5011;0;60;ERR /ODT /THE NEXT ROUTINE IS TO FINISH LOADING BLOCK 64 OF THE /SYSTEM DEVICE THAT HAD BEEN RESERVED. THE FIRST PART /WAS WRITTEN WITH OS8 AND NOW THE OTHER PART MUST BE /WRITTEN ON THAT SAME BLOCK FROM CD. CIF 0;READ;210;0;64;ERR /GET PART OF ODT WRITTEN /MOVE LOCATIONS 11600-11663 TO 10000-10063 CIF 0 TAD (-64 JMS I (MOVE CDF 10 1600 CDF 10 0000 CIF 0;WRITE;4210;0;64;ERR /END OF ROUTINE TO LOAD BLOCK 64 JMS I (RESTORE JMS I (CASIT CIF CDF 0 JMP I WRCD PAGE READ=JMS I (7607 ERR=JMS WRERR /SPECIAL CODE TO CHAIN TO ABSLDR, TO READ IN MCPIP JMS I (7700 10 /LOCK USR IN CORE TAD R7600 /ZERO CD AREA DCA CDPTR TAD (-47 DCA CDKNT DCA I CDPTR ISZ CDPTR ISZ CDKNT JMP .-3 STL CLA RAR /ALTMODE DCA I (7642 JMS I (200 12 /INQUIRE 4503 /ENCODE CSA0 CDN, 0 0 HLT TAD CDN /TAKE DEVICE NUMBER DCA I (7617 /STORE DEVICE NUMBER OF CASSETTE ISZ I (7620 /V3C FORCE BLOCK 1 CLA IAC CDF 0 /V3D DCA I (7746 /SET JSW SO CHAIN DOESN'T DO USROUT CDF 10 JMS I (200 /CHAIN TO ABSLDR 6 70 RESTORE,0 CIF 0;READ;3701;0;BLDSAV;ERR CIF 0;READ;3510;0;BLDSAV+20;ERR /RESTORE BUILD JMP I RESTORE WRITE=JMS I (7607 ERR=JMS WRERR SAVE, 0 CDF 0 DCA I (SOFSET DCA I (SBLOCK DCA I (DRECT /HAVE TO KEEP DIRECTORY LATER CDF 10 CIF 0;WRITE;7701;0;BLDSAV;ERR CIF 0;WRITE;7510;0;BLDSAV+20;ERR JMS CASIT CIF CDF 0 JMP I SAVE RES76, TAD I (Z7600 CIF 0 JMS I (MOVE CDF 0 7000 /RESTORE OLD PAGE 7600 CDF 0 7600 JMP I (Z7600 WRERR, 0 /WRITE ERROR HLT CLA /HIT CONTINUE TO RETRY TAD WRERR TAD (-6 DCA WRERR /POINT BACK TO CIF OF CALL JMP I WRERR /RETRY /RELATIONSHIP BETWEEN CD CORE IMAGE AND BLOCKS ON SYSTEM DEVICE: /ITEM CORE LOC BLOCKS /CD 00000-01377 51-63 /ODT 10000-11777 60-63 CSA, 0 /CASSETTE HANDLER ENTRY PT CDPTR, 0 CDKNT, CASIT, 0 CDF 0 TAD I (RECNO SNA CLA IAC /IF BLOCK 0, CHANGE TO 1 DCA I (RECNO TAD I PRETSW SNA CLA /BUILDING FROM SCRATCH? JMP I CASIT /NO TAD I (BLDCB /YES, GET DCB OF LOAD HANDLER AND L770 TAD M270 /CASSETTE DEVICE CODE=27 SZA CLA JMP I CASIT /NOT A CASSETTE TAD I (DVICE DCA CSA /GET HANDLER ENTRY POINT CDF 10 CIF 0 JMS I CSA 3 /SKIP TO NEXT FILE L770, 770 M270, -270 R7600, 7600 /IGNORE ERRORS CIF 0 JMS I CSA 100 /DUMMY READ A PAGE BINARY /TO SKIP HEADER PRETSW, RETSW SKP CLA /WANT AN ERROR HLT /A GOOD READ IS BAD! JMP I CASIT /INITIALIZATION CODE FOR BATCH OPERATION FIELD 2 *10 BATXR1, 0 /INDEX REG. 1 FOR BATCH BATXR2, 0 /INDEX REG. 2 FOR BATCH *200 BATSET, 0 TAD I (XR1 /GET THE OVERLAY POINTER SZA /IF ZERO USE OLD VALUE /THIS SAVES ME SOME FIELD 0 SPACE DCA BATXR1 /SAVE THE POINTER TAD I [7777 /NOW GET THE BATCH FIELD CDF 20 /TO FIELD 2 AND (0070 /NOW GET THE FIELD BITS TAD (CIF /MAKE A CIF FOR OVERLAY DCA CBATI /SAVE IN INPUT ROUTINE TAD CBATI /ALSO OUTPUT DCA CBATO /OVERLAY BATMOV, TAD I BATXR1 /GET NEXT STORAGE ADDRESS SNA /IF ZERO ALL DONE (SECOND TIME THRU) JMP BATDON /RETURN TO CALLER DCA BATXR2 /OTHERWISE SAVE POINTER TO TARGET CODE BATLUP, TAD I BATXR1 /GET A PATCH WORD SNA /ZERO MEANS END OF THIS PATCH JMP BATMOV /GO GET ANOTHER POINTER OR MAYBE ALL DONE CDF 0 /BACK TO FIELD ZERO DCA I BATXR2 /NOW CODE IS BATCHABLE CDF 20 /BACK TO FIELD 2 JMP BATLUP /DO IT ALL AGAIN BATDON, CIF CDF 0 /RETURN TO CALLER JMP I BATSET /BYE BATLS, TTYIN /POINTER TO MOVE DATA CBATI=. /SET CIF BATCH RELOC TTYIN+1 /RELOCATABLE CODE CIF JMS I BATINI /JUMP TO GET INPUT FROM BATCH HLT /BAD ERROR SKP /SKIP OVER POINTER BATINI, 5400 /POINTER TO BATCH INPUT ROUTINE 0 /TERMINATOR TTYOUT+5 /NOW FOR OUTPUT RELOC CBATO=. /SET FOR CIF BATCH RELOC TTYOUT+6 /POINTER TO MOVE DATA CIF /CIF BATCH JMS I .+1 /GO SEND DATA TO BATCH 7400 /POINTER TO BATCH OUTPUT PROCESSOR 0 /TERMINATOR LFMOD /POINTER TO LINE FEED MOD RELOC LFMOD+1 /RLOCATE THE CODE RDTXT /IGNORE LINE FEEDS 0 /TERMINATOR BATTST+1 /POINTER TO MODIFY BATCH TEST RELOC BATTST+2 /RELOCATE THE CODE JMP BATBK /JUMP AROUND THE BATCH SWITCH TEST /WITH A NEW SYSTEM THE TEST IS ILLOGICAL /WHICH IS THE CASE IF A BOOT IS REQUESTED 0 /TERMINATOR RELOC 0 /FINAL OVERLAY TERMINATOR /NOW COMES THE RESET CODE TO PUT THINGS BACK / THE WAY THEY WERE TO BEGIN WITH. TTYIN /POINTER TO MOVE DATA RELOC TTYIN+1 /RELOCATABLE CODE KSF /SKIP ON FLAG JMP .-1 KRB /READ A CHAR SNA /LOW LEVEL BLANK IGNORE JMP TTYIN+1 /GO GET ANOTHER 0 /OVERLAY TERMINATOR TTYOUT+5 /NOW FOR OUTPUT RELOC TTYOUT+6 /RELOCATE AGAIN TLS /PRINT THE CHAR TSF /DONE? JMP .-1 /NO. 0 /OVERLAY TERMINATOR LFMOD /POINTER TO LINE FEED MOD RELOC LFMOD+1 /RELOCATE ONE MORE TIME LFEED /LINE FEED..ECHO CURRENT COMMAND 0 /TERMINATOR BATTST+1 /POINTER TO BATCH TEST RELOC BATTST+2 /RELOCATE THE CODE TAD I [7777 /RESET THE CODE TO ORIGINAL STATE 0 /OVERLAY TERMINATOR RELOC 0 /FINAL OVERLAY TERMINATOR PAGE /LDABS DOES A REAL LIVE ABSLOAD IF AC=0 /IF AC=-2 THEN IT IS LOADING A HANDLER, THIS IS DONE AS FOLLOWS: /SEARCH FOR *0 /THEN LOAD CONSEC WORDS INTO DESCRIPTOR TABLE /AT NEXT ORIGIN, LOAD WORDS INTO HANDLER AREA (ALLOW ORIGINS) /CAN'T USE PAGE 0 LITERALS IN CASE LOADING OS/8 LDABS, 0 DCA LODTST /-2 IF HANDLER, 0 IF OS8 LDABS2, TAD JMPNXT DCA TSTO0 DCA CKSUM /CLEAR CHECKSUM JMS I (ICHA /GET A BUFFER CHAR JMP LDAB /NO INPUT FOUND SNA JMP .-3 /IGNORE BLANKS TAD (-200 SZA CLA /IS IT LEADER? JMP BADIN /WASN'T 200..PROBABLY NOT BINARY LEADER, JMS I (ICHA JMP LDAB /STRANGE....ALL LEADER!!! SNA JMP LDABS2 /START OVER.BLANKS AFTER LEADER TAD (-200 /IS IT STILL LEADER? SNA JMP LEADER /YES NEWWD, SMA /IS IT < 200? JMP FIELDW /NO.TEST FOR FIELD SEETING TAD (200 /RESTORE CHARACTER DCA WD1 JMS I (ICHA JMP BADIN /EOF BETWEEN WORDS. HOW NICE! DCA WD2 JMS I (ICHA JMP BADIN TAD (-200 /200 FINISHES US UP SNA JMP OVE DCA WD JMS I (ASSEM /ASSEMBLE LAST WORD READ SZL /IS IT AN ORIGIN? JMP ORGTST /YES XFIELD, HLT /GETS CDF N DCA I ORIGIN /STORE THIS WORD CDF20, CDF 20 ISZ ORIGIN /SHOULD NEVER SKIP, BUT... LD7, 7 TAD ORIGIN TAD (200 /GIVE ERROR IF ORIGIN ADVANCES TO 7600 SZA CLA JMP .+3 /SKIP AROUND ERROR CIF CDF 0 /ERROR IN FIELD 0 JMP I (NOROOM NEXT, TAD WD1 TAD WD2 /MAKE UP CHECKSUM TAD CKSUM DCA CKSUM TAD WD JMP NEWWD ORGTST, DCA ORGX /TEST FOR ORIGIN TAD LODTST /GET POINTER TO PROPER ORIGIN SNA CLA JMP .+3 CIF CDF 0 /JUMP TO HANDLER TEST JMP I (HND TAD ORGX /OS/8 - USE REAL ORIGIN ORI, DCA ORIGIN /BUFFER AREA TAD LODTST /HANDLER LOAD? SNA CLA JMP NEXT /NOPE TAD ORGX /DON'T START LOAD UNTIL *0 IS FOUND SZA CLA TSTO0, JMP NEXT DCA .-1 /FOUND *0..DO THE LOAD ISZ LODTST /YES. BUMP LODTST TO LOAD HANDLER NEXT JMP NEXT TAD XFIELD TAD (-CDF 0 SZA CLA JMP .+3 /JUMP AROUND IF NOT FIRST TIME CIF CDF 0 /SUBROUTINE IN FIELD 0 JMS I [FIRST /FIRST TIME THROUGH /DO THIS BETTER; ALSO MAKE SURE HANDLER DOESN(T HAVE A FILED PSEUDO TAD (CDF 10 DCA XFIELD /AT THIS POINT, WE START CLA CMA /LOADING THE HANDLER INTO THE DCA LODTST /AREA SPECIFIED BY HNDORG+1 /CHECK 'ORIGIN' TO SEE IF HEADER WAS RIGHT SIZE /ALSO ELSEWHERE, CAN CHECK ORIGIN WHEN BUMPING TO SEE /IF WE HIT ANY MAGIC LOCATIONS TAD ORGX /SEE IF LEGAL RE ORIGIN CIF CDF 0 /OFF ON FIELD 0 JMS I (ORGLIM DCA ORIGIN /ACTUAL FIELD 1 ORIGIN / TAD SNACLA /LOADING FIELD 1..TEST ORIGINS / DCA JMPRE JMPNXT, JMP NEXT FIELDW, TAD (-100 /LESS THAN 300 FAILS SPA JMP BADIN DCA WD1 TAD WD1 AND LD7 SZA CLA JMP BADIN /DISECT WORD TO CATCH GARBAGE TAD LODTST /IF LOADING HANDLER, IGNORE FIELD SZA CLA JMP FIELD2 TAD WD1 AND (70 /EXTRACT FIELD SETTING TAD [CDF 0 DCA XFIELD FIELD2, JMS I (ICHA JMP BADIN TAD (7600 SZA JMP NEWWD OVE, CIF CDF 0 /ROUTINE IN FIELD 0 JMP I [OVER LDAB, CIF CDF 0 /BACK TO FIELD 0 JMP I LDABS /RETURN FROM SUBROUTINE BADIN, CIF CDF 0 /BACK TO FIELD 0 JMP I [BADINP /BAD INPUT ORGX, 0 ORIGIN, 0 WD1, 0 WD2, 0 WD, 0 CKSUM, 0 LODTST, 0 PAGE ICHA, 0 /ICHAR CALL ROUTINE FOR FIELD 0 CIF CDF 0 /OFF TO FIELD 0 JMS I (ICHAR /JUMP TO ICHAR JMP I ICHA /ERROR RETURN ISZ ICHA /GOOD RETURN JMP I ICHA /RETURN TO CALLER ASSEM, 0 /ASSEMBLE A WORD /THIS CODE APPEARS IN FIELD 0 ALSO TAD I (WD1 /GET WORD 1 CLL RTL /NOW DO THE ROTATE RTL;RTL TAD I (WD2 /NOW FOR THE SECOND PART JMP I ASSEM /BACK TO CALLER PAGE WRITEX=JMS I (7607 /OFF TO WRITE TO DEV. ERROR=JMS ERRX /ERROR SUBROUTINE BAK, CIF 0;WRITEX;4111;3400;26;ERROR /ENTER OVERLAY CIF 0;WRITEX;4701;2000;54;ERROR /SAVE, DATE, MON ERROR, CHAIN OVERLAYS TAD Q200 CDF 0 TAD I QLD DCA I QLD CDF 20 CIF 0;WRITEX;4101;LDRCTL;70;ERROR /ABSLDR CORE CONTROL BLOCK TAD (-114 CIF 0 JMS I (MOVE CDF 0 4264 CDF 0 3464 CIF 0;WRITEX;4200;3400;64;ERROR CIF 0;WRITEX;5210;2000;71;ERROR /ABSLDR CIF CDF 10 /BACK TO FIELD 1 JMP I (WHER QLD, LDRCTL+5 Q200, 200 ERRX, 0 /WRITE ERROR HLT CLA /HIT CONTINUE TO RETRY TAD ERRX TAD (-6 /BACK TO TRY AGAIN DCA ERRX /AGAIN JMP I ERRX /RETRY FIELD 0 *200 $ |
Added src/os8/v3f/CCL.BI.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | $JOB ASSEMBLE AND LINK CCL.MA .MAC OUT:CCLPS<IN:CCLPS.MA .MAC OUT:CCLTBL<IN:CCLTBL.MA .MAC OUT:CCLCDX<IN:CCLCDX.MA .MAC OUT:CCLSIZ<IN:CCLSIZ.MA .MAC OUT:CCLCOR<IN:CCLCOR.MA .MAC OUT:CCLCD<IN:CCLCD.MA .MAC OUT:CCLTAB<IN:CCLTAB.MA .MAC OUT:CCLDRV<IN:CCLDRV.MA .MAC OUT:CCLAT<IN:CCLAT.MA .MAC OUT:CCLSEM<IN:CCLSEM.MA .MAC OUT:CCLDAT<IN:CCLDAT.MA .MAC OUT:CCLSB2<IN:CCLSB2.MA .MAC OUT:CCLREM<IN:CCLREM.MA .MAC OUT:CCLMSG<IN:CCLMSG.MA .MAC OUT:CCLRUN<IN:CCLRUN.MA .MAC OUT:CCLSUB<IN:CCLSUB.MA .MAC OUT:CCL<IN:CCL.MA .LINK OUT:CCL<OUT:CCL,OUT:CCLTBL,OUT:CCLAT,OUT:CCLMSG$ *OUT:CCLTAB,OUT:CCLDRV,OUT:CCLPS,OUT:CCLSIZ/F /*OUT:CCLSEM *=0/N/9 *=1000/N *=1400/N *=2000/N *=2400/N *=3000/N *=3400/N *=4000/N *=4400/N/O *OUT:CCLDAT,OUT:CCLCOR/C *OUT:CCLSUB/C *OUT:CCLSB2/C *OUT:CCLCDX */O *OUT:CCLCD/C *OUT:CCLRUN,OUT:CCLREM *$ .DEL OUT:CCL???.RB .COPY OUT:CCL.SV<DSK:CCL.SV .DEL CCL.SV /CHAIN TO RESORC COMPILE AND LINK .SUB RESORC.BI $END |
Added src/os8/v3f/OS8.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 | /12 OS8 MONITOR SYSTEM OS8 VERS. 3F / / / / / / / / / /COPYRIGHT (C) 1970,1971,1972,1973,1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / /13-APRIL-1977 RL/EF/HJ/SR /THIS VERSION OF OS/8 IS THE BATCH OPERATING SYSTEM /AS WELL AS THE STANDARD KEYBOARD SYSTEM. THIS SYSTEM /IS EXTERNALLY COMPATIBLE WITH ALL PREVIOUS OS/8-PS/8 /USER PROGRAMS. HOWEVER, INTERNALLY THE SYSTEMS ARE /QUITE DIFFERENT. THE MARCH 1972 OS/8 WILL NOT RUN BATCH. /THIS VERSION IS COMPATIBLE WITH CCL. / SYMBOLIC REFERENCES TO VARIOUS OVERLAYS: MEOVLY=26 /DIRECTORY OVERFLOW OVERLAY FOR "ENTER" MCDREC=51 /COMMAND DECODER MSOVLY=54 /"SAVE W. ARGS" OVERLAY MSOVL2=55 /SECOND PART OF SAVE W. ARGS MERRTN=56 /MONITOR ERROR ROUTINE MRUNRC=57 /"CHAIN" OVERLAY ODTREC=60 /SYSTEM ODT MFREE=70 /BEGINNING OF FILE STORAGE CCB=7400 CSOVLY=400 RSOVL1=1400 RSOVL2=2000 EXOVLY=64 /EXTENDED MEMORY OVERLAY LXM=6200 /EXTENDED MEMORY LOAD INSTRUCTION VERSNO=3 PATCHLEV="S /V3 CHANGES: /1. CCL SUPPORT /2. FIXED KILLER CLOSE BUG /3. ADDED VERSION NUMBER /4. ^U, RO TO BOL, AND LF ALL PRINT '.' AGAIN /5. CALL TO USR WITH CODE OF 0 GIVES ERROR /6. MONITOR ERROR MESSAGES NOW GIVE EXPLANATION /7. ENTER NOW MOVES 7 FILES TO MAKE ROOM INSTEAD OF HALF SEGMENT /8. DIRECTORY VERIFICATION HAS IMPROVED /V3 FIXES TO ABSLDR: /1. ALLOWED PARITY ^C /2. PUT IN SELF-STARTING STUFF /3. FIXED CCB BUG FOR 17600 /FIXES TO FIELD RELEASE /1. ABSLDR CHECKS PAGE 0 LITERALS /2. FIXED BUG RE MONITOR ERROR MESSAGES /3. ADDITIONAL INFO FIX /4. BATCH FIX /FIXES FOR MAINTENANCE RELEASE: /1. CHANGED VERSION NUMBER OF MONITOR TO V3M /2. INCORPORATED PATCH RE LOC 13121 AFTER MONITOR ERROR / [SEQ #1, DSN APRIL 1975] /3. ALLOW CHAIN TO WORK ON FULL FIELD SAVES / [SEQ #2, DSN JUNE 1975] /4. ALLOW ABSLDR/I TO WORK ON FULL FIELD CORE IMAGES / [SEQ #1, DSN OCTOBER 1975] /5. ADDED INTERNAL VERSION NUMBER TO ABSLDR AT LOCATION 2200 / MAINT. RELEASE VERSION # IS V4 /6. SET INITIAL ABSLDR DATE TO 1-NOVEMBER-1975 /V3D AND OS/78 CHANGES: /1. ACCEPT DEC STANDARD DATE FORMAT FOR INPUT (DD-MMM-YY) /2. CHANGED VERSION NUMBER TO V3Q /3. ADDED DATE/78 CHANGES /4. FIXED BUG ABOUT WAITING FOR TTY FLAG & BATCH /5. ADDED STUFF FOR LINKER [USES SOFSET] /6. CHANGED ABSLDR DATE TO 1-JUNE-77 /7. DISALLOW RUN OF PROGRAM WITH BIT 4 OF JSW ON [OS/78 ONLY] /8. ASSIGNED RESIDENT BITS FOR SCOPE AND OS/78 /9. ALLOW @ IN KBM COMMAND /10. COULD RUN INIT.CM ON SYSTEM START-UP /11. CHANGED BAD CORE IMAGE MSG TO CORE IMAGE ERR /12. CHANGED ABSLDR/I SO THAT IT SETS UP JSW AND SA /V3F CHANGES: /1. ADDED MONITOR SUPPORT FOR KT8A / A. R,RUN, GET COMMANDS NOW LOAD 128K / B. SAVE COMMAND CAN SAVE UP TO 128K /2. ADDED HIGROUND SUPPORT /3. ABSLDR ALSO UPDATED TO SUPPORT 128K /KEYBOARD MONITOR FOR OS/8 SYSTEM - UNCOMMENTED AT PRESENT FIELD 0 MTHREE=CLA CLL CMA RTL *200 PRINT, JMP I HNDL /MUST BE AT 200 FOR BATCH JMP .+3 /****GETS CIF CDF N FOR BATCH***** TSF /****GETS JMP I .+1****** JMP .-1 /*GETS BOSPRT***** TLS CLA TAD [7000 DCA PRINT+1 JMP I PRINT GETNAM, 0 /ROUTINE TO ACESS TTY INPUT DCA NM1 /FIRST OFF,INITIALIZE DCA NM2 /SET UP SYMBOLS FOR STORING NAME DCA NM3 DCA NM4 TAD TNM1 DCA PN CLA CMA DCA PRDSW GTNMX, DCA NMCT TAD I LXR /LOCATE FIRST CHARACTER TAD M240 /IS IT A SPACE? SNA /IF SO TEST NEXT CHARACTER JMP .-3 TAD [240 /WE'VE GOT FIRST CHARACTER SKP GTNMLP, TAD I LXR /GET ANOTHER CHARACTER DCA TMP TAD TMP TAD M256 /IS IT A PERIOD? SNA JMP PERIOD /IF SO, PROCESS IT TAD [-2 CLL TAD M12 SNL CLA /IS IT GT ASCII CHARACTER (#9)? JMP NINSRT /IF NO, INSERT IN NAME TAD M301 TAD TMP CLL CML TAD [-32 SNL CLA /IS IT GT ASCII(Z),IF SO JMP EONAME /END OF NAME NINSRT, TAD NMCT /CHECK FOR MAXIMUM CHARS TAD [-6 SMA CLA JMP GTNMLP /IF MAXIMUM SAVE NO MORE TAD NMCT /SET UP POINTER TO STORE CHARACTER CLL RAR TAD PN DCA TEMP1 /HERE IS POINTER TO NM1,NM2,ETC. TAD TMP AND [77 /ISOLATE SIX BITS FOR STORAGE SZL JMP .+4 /NO MORE ROOM RTL RTL RTL TAD I TEMP1 /OR IT IN AND STORE DCA I TEMP1 ISZ NMCT JMP GTNMLP PERIOD, ISZ PRDSW JMP EONAME ISZ PN TAD N4 JMP GTNMX EONAME, TAD NMCT SZA CLA ISZ GETNAM JMP I GETNAM HNDL, 4000 /ROUTINE TO RELOAD NON-SYS HANDLER FOR SAVE ROUTINE JMS I [SHNDLR 0200 /READ TWO PAGES 1000 /INTO 1000 LDBLK, 0 /SET UP BY SAVE ROUTINE JMP KMONER JMP I HNDL PRINTQ, JMS PRMESG TEXT /?/ 0 KMER3, JMS I [PRMESG TEXT /NO/ TNM1, NM1 M240, -240 *325 PRINLP, JMS PRWD ISZ PRMESG SKP IFNZRO .-330 <CCLTRB,ERRR> PRMESG, 0 /ERROR MESSAGE PRINTING ROUTINE CLA TAD I PRMESG SZA JMP PRINLP TSF JMP .-1 JMP I ERRET /RETURN TO MONITOR PRWD, 0 DCA TMP TAD TMP RTR RTR RTR JMS PCHAR TAD TMP JMS PCHAR JMP I PRWD PCHAR, 0 AND [77 SNA JMP I PCHAR TAD [240 AND [77 TAD [240 JMS I PCH JMP I PCHAR M12, -12 M256, -256 M301, -301 N4, 4 *367 SAVE12, JMS I [SHNDLR /RELOAD AND RETURN TO MONITOR FROM SAVE 0610 0 MONTOR JMP KMONER CLA CMA CDF 10 DCA I [7700 JMP I [7605 *400 KMNTRY, JMP I GDEVNO /V3 0 /FREE LOCATION ! PCRLF, JMS I [CRLF IFNZRO .-403 <BTCHER,XXXX> KEYMON, JMS I GLINE TAD [BEGLN-1 /ADDRESS REFERENCED BY INIT DCA LXR JMS I GNAME /V3D JMP I [PRINTQ XXX=[PRINTQ /NEED LITERAL IN SAME PLACE NOP /V3D ALLOW @ IN NAME JMS I [SRCH -123; ASSIGN -2301; SAVE -2225; RUN -705; GET -2200; R -2324; START -1704; ODT -0405; DEAS IFNZRO .-431 <SEECCL,ZZZ> -0401; DATE 0 JMP I .+1 CCLSW, PRQMRK /MODIFIED FOR CCL TO 'GETCCL' IFNZRO CCLSW-435 <SEECCL,ZZ> ASSIGN, TAD [12 JMS GDEVNO TAD [UDNAME-1 DCA TM1 JMS I GNAME JMP ASGN2+1 /NO USER DEV. DO A DEASSIGN TAD NM2 /SEE IF WE HASH IT SNA JMP ASGN2 /DON'T HASH..ONLY 1 OR 2 CHARS TAD NM1 RAL /LINK BECOMES 4000 IF NECESSARY CLA CML RAR TAD NM2 ASGN2, TAD NM1 JMP I [ASDONE R, DCA I [GETSW TAD P6203 JMS I [RESET ISZ RUNSW TAD [SHNDLR DCA HANDAD CLA IAC JMP RGETPG GDEVNO, KMINIT DCA ASNM1-1 JMS I [MINCOR JMS I GNAME JMP I [KMER4 TAD NM1 DCA ASNM1 TAD NM2 DCA ASNM1+1 TAD HNDLAD DCA HANDAD CIF 10 JMS I SYSTEM 1 ASNM1, 0;0 HANDAD, KMINIT JMP I [KMER1 TAD ASNM1+1 JMP I GDEVNO GET, TAD [SKP RUN, DCA I [GETSW TAD P6203 JMS I [RESET DCA RUNSW CLA IAC JMS GDEVNO RGETPG, JMS RSCOMN JMS I [MINCOR TAD SENTER CIF 10 JMS I SYSTEM 2 PGNAME, NM1 MOVBUF /USED AS POINTER TO FIELD 1 SR JMP I [KMER2 JMP I [RLOADR RSCOMN, 0 DCA SENTER TAD HANDAD DCA DEVHND JMS I GNAME JMP I [KMER4 TAD NM4 SNA TAD [2326 DCA NM4 JMP I RSCOMN SAVE, TAD [SAVE12 /CHANGE ERROR RETURN ADDRESS AS WE WILL DESTROY CORE DCA ERRET TAD I [JSBITS JMS I [RESET CIF 10 /MOVE THE LINE BUFFER TO 1600 DURING JMS I PGNAME+1 /A SAVE, AS HANDLER WIPES IT OUT TAD LXR /LET'S MOVE THE REGISTER AROUND TAD [SVLNBF-BEGLN DCA LXR TAD [1001 DCA HNDLAD CLA IAC JMS GDEVNO JMS RSCOMN JMP I [SAVE2 HNDLAD, /REPLACED WITH 1001 BY SAVE WRCTLB, 7001 /WRITE OVERLAY AND CCB JMS I [SHNDLR 4600 6200 MTEMP+6 JMP KMONER JMP I WRCTLB *573 /LOADS SYSTEM ODT OVER THE MONITOR ODT, JMS I PGTOUT JMS I [SHNDLR 1001 0 ODTREC /LOCATION 600 IN ODT IS A HLT (ERROR RETURN) *600 START, DCA TEMP1 DCA TEMP2 TAD I LXR /V3 SZA /V3 JMP I [STRTX /V3 TAD I [JFIELD DCA I [MSTCDF TAD I [JSBITS AND [1000 SZA CLA JMP I [KMER3 TAD I [JSBITS JMS I [RESET /RESET ONLY IF NO START ADR SPECIFIED TAD I [JSTART STCOMN, DCA I [MSTADR TSF JMP .-1 /WAIT FOR PRINTER TO FINISH JMS I PGTOUT TAD I [JSBITS SPA CLA JMP I [MSTCDF TAD [SHNDLR DCA I [MREAD-1 TAD [1000 DCA I [MREAD+1 DCA I [MREAD+2 TAD [MTEMP+4 DCA I [MREAD+3 TAD FUDJMP DCA I [MSWITC JMP I [MREAD MINCOR, 0 CIF 10 JMS I SYSTEM 10 CDF 10 DCA I [OLDT9 /ZERO OUT "DIRECTORY IN CORE" KEY CDF 0 TAD [200 DCA SYSTEM JMP I MINCOR RLOADR, RUN1, TAD I [PGNAME DCA FILE JMS I DEVHND 0101 CCB FILE, 0 /READ IN THE HEADER BLOCK JMP KMONER /ERROR WHILE READING HEADER BLOCK TAD I [CCB JMS I [CCBTST /TEST FOR VALID CORE CONTROL TAD I [CCB+3 /V3D RAL /V3D JMS I KRCHK /V3D CAN'T RUN SYSTEM CUSP UNDER OS78 TAD I [CCB+1 DCA I [MSTCDF TAD I [CCB+2 DCA I [MSTADR /MOVE THE STARTING ADDRESS INTO UPPER CORE TAD I [CCB+1 DCA I [JFIELD TAD I [CCB+2 DCA I [JSTART TAD I [CCB+3 /SET UP THE JOB INFORMATION AREA JMS I [RESET /AND CLEAR INFORMATION ABOUT "RUN" HANDLER TAD FUDJMP DCA I [MSWITC /SET MSWITC TO INHIBIT LOADING 7400 GETSW, SKP /SKP FOR GET, NOP FOR RUN JMP RUN2 TAD P6203 DCA I [MSTCDF TAD [7600 DCA I [MSTADR /IF A GET, SET STARTING ADDRESS TO RETURN /TO MONITOR RUN2, TAD EXTMP CLL CMA RAL /POINT TO LAST DOUBLEWORD IN CCB TAD TCCB4 /CCB4=CCB+4 DCA TM1 /TM1 POINTS TO SEG. ADDRESS TAD I TM1 /STORE ADDRES TO READ POSSIBLE OVERLAY DCA I [MREAD+2 ISZ TM1 /POINT TO SEGMENT CONTROL WORD TAD DEVHND /IF THE HANDLER IS IN 7600, OR TAD [200 /IF THE SEGMENT DOES NOT LOAD OVER CLA RAL /7000, NO OVERLAY IS NEEDED. ALSO IF TAD I TM1 /THE SEGMENT IS IN FIELDS 1-7. AND [77 RUN5A, SZA CLA JMP I RUNVI /NO PROBLEMS.. READ STUFF IN TAD I [MREAD+2 /SEE IF WE OVERLAY 7000 CLL CML RAR TAD I TM1 /ADD IN CONTROL WORD TAD [300 SPA /IF NEGATIVE, 7000 IS NOT OVERLAYED JMP RUN5A TAD [7600 /GETS 0, 100, 200, OR 300 SMA /IF POSITIVE READ 3 PAGE OVERLAY ISZ I [PGNAME+1 /POINT TO NEXT TO LAST RECORD TAD [300 DCA RDCNT TAD I [PGNAME+1 CMA /GET RECORD TO READ OVERLAY FROM TAD FILE DCA R7000 JMS I DEVHND /READ OVERLAY FROM THE FILE INTO PAGES RDCNT, 0 /BEFORE CCB 6200 /THEN WRITE THE WHOLE MESS OUT R7000, 0 JMP KMER1 /NOT AVAILABLE JMS I [WRCTLB /WRITE OUT THE OVERLAY+CCB DCA .-1 /BUT ONLY ONCE!! ISZ RUNSW DCA I [MSWITC /ENABLE READ OF OVERLAY TAD RDCNT /SEE IF THIS SEG IS EXHAUSTED CIA TAD I TM1 SPA SNA ISZ EXTMP /ARE WE DONE ALL SEGMENTS? SKP /NOT YET. LOOP UNTIL DONE JMP I [MSWITC RUN5, DCA I TM1 /SAVE ALTERED CONTROL WORD JMP RUN2 /ASDONE, CDF 10 / DCA I TM1 /THIS COULD BE OPTIMIZED / CDF 0 / JMP I [KEYMON KMER1, JMS I [PRNAME /DEVICE NOT AVAILABLE JMS I [PRMESG TEXT / NOT AVAIL/ TCCB4, 7404 /CCB+4 RUNVI, RUN6 *1000 /MUST BE AT 1000 FOR BATCH BEGLN, 0 /LINE BUFFER COULD BECOME "@ "I "N "I "T KMINIT, CDF 10 /INITIALIZATION - DESTROYED BY LINE BUFFER ISZ I [7700 /LOC 17700=7777 IF I/O MONITOR IS KNOWN JMP .+3 /TO BE IN CORE, SO SET UP TAD [200 /THE INITIAL POINTER FOR CALLS TO THE MONITOR DCA SYSTEM /ACCORDINGLY CDF 0 TAD I LXR DCA I X1 ISZ TEMP2 JMP .-3 CDF 10 TAD MVFROM DCA I PDBUF ISZ .-2 ISZ PDBUF ISZ MVCNT JMP .-5 CDF 0 TAD I PDBUF+1 /SEE IF BATCH IS SET RAL /IF YES, GO TO PAGE 0 TO CONTINUE SMA CLA /IF IT ISN'T, CONTINUE NORMALLY JMP INTGO /NORMAL KEYBOARD SYSTEM DCA I RTWTPT /DON'T WAIT ON TTY FLAG IF BATCH IS RUNNING TAD I [JSBITS /IS BOS IN PLACE? AND DCBF SNA CLA JMP BATCH /NO. GO READ IT IN. JMP BCHGO /YES. START IT UP. INTGO, TAD [200 KRS TAD M203 SNA CLA /IS THERE A ^C IN THE READER BUFFER KSF /WITH THE FLAG ON? JMP I ERRET /NO - PRINT CRLF AND PERIOD JMP CLR /V3D /CCLADR, GETCCL /V3D DIDN'T SEEM TO BE USED RTWTPT, RUNTWT DCBF, 400 /START PMSRST, SHNDLR&177+4200 /JMS SHNDLR 0300 7000 MTEMP+6 HLT /CONTAINS SECOND COPY OF OS/78 BIT CDF CIF 0 TCF /END MVCNT, MOVBUF-MVT3-1 PDBUF, MOVBUF MVFROM, NOPUNCH *7626 ENPUNCH MOVBUF, 7777 /USED IN BATCH SETUP TAD I MVT1 /MOVE THE LINE BUFFER FROM 1000 DCA I MVT2 /TO 1655 ISZ MVT1 ISZ MVT2 ISZ MVT3 JMP .-5 CIF CDF 0 JMP I MOVBUF MVT1, BEGLN MVT2, SVLNBF MVT3, -111 *1077 /V3D INIT, CDF 10 /V3D (INITIALIZATION) TAD DCBF DCA I ROT /RESTORE LOC 7677 TO '400' CDF 0 DCA KMINIT /END LINE WITH 0 TLS JMP I CRLF /FAKE OUT KBM AS IF USER TYPED @INIT CLR, KCC JMP I .+1 CTRLC TX212, 212 *1112 ENPUNCH DIGTLP, TAD I LXR STRTX, TAD (-270 CLL TAD [10 DCA TMP1 /V3 SNL JMP EONUM /V3 ISZ DIGFLG JMS ROT JMS ROT JMS ROT TAD TEMP2 TAD TMP1 DCA TEMP2 JMP DIGTLP EONUM, TAD TEMP1 AND [7 CLL RTL RAL TAD KM6203 DCA I [MSTCDF TAD TEMP2 JMP I .+1 STCOMN ROT, 7677 /V3D NEEDED FOR INIT TAD TEMP2 CLL RAL DCA TEMP2 TAD TEMP1 RAL DCA TEMP1 JMP I ROT DEAS, TAD [UDNAME-1 DCA X1 TAD [-17 DCA TM1 CDF 10 DCA I X1 ISZ TM1 JMP .-2 KM6203, CDF CIF 0 JMP I [KEYMON ASDONE, CDF 10 /V3 DCA I TM1 /V3 JMP KM6203 /V3 CRLF, KEYMON+1 /V3D NEEDED FOR INIT TAD [215 DCA NM1 JMS I (PRNT TAD TX212 JMS I PCH JMP I CRLF M203, -203 PAGE /NOTE: XR=AMFLAG ! *1200 /TELETYPE INPUT ROUTINE XGLINE, KEYMON+1 /MUST BE AT 1200 FOR BATCH & CCL TAD [". JMS I PCH DCA RBFLAG TAD [BEGLN-1 CHLM1, DCA LXR DCA AMFLAG /ZERO ALTMODE FLAG CHLOOP, KSF JMP CHLOOP TAD [200 KRS DCA NM1 KCC JMS SRCH -225;CTRLU -215;CARRET -377;RUBOUT -375;ALTMOD /THIS AREA GETS MODIFIED BY SET -376;ALTMOD -233;ALTMOD -212;LFEED -200;CHLOOP -217;CHLOOP /IGNORE ^O -203;CTRLC /MUST BE JUST BEFORE 0 /MUST BE HERE FOR CCL 0 JMS PRNT CINSRT, TAD NM1 DCA I LXR TAD LXR TAD [-BEGLN-110 SPA CLA JMP CHLOOP CARRET, JMS I [CRLF TAD LXR TAD [1-BEGLN SNA CLA JMP XGLINE+1 DCA I LXR DCA I LXR JMP I XGLINE /THIS PAGE GETS MODIFIED BY SET COMMANDS (FOR REAL SCOPE RUBOUTS) /**** BEWARE! *** PRNT, 0 ISZ RBFLAG JMP .+3 TAD ["\ JMS I PCH DCA RBFLAG TAD NM1 JMS I PCH JMP I PRNT CTRLC, CTRLU, TAD ["^ JMS I PCH TAD NM1 TAD [100 CLRLIN, JMS I PCH RBSPCL, JMS I [CRLF JMP XGLINE+1 ALTMOD, TAD ["$ DCA NM1 JMS PRNT ISZ AMFLAG /NOTE ALTMODE JMP CARRET+1 RUBOUT, TAD LXR TAD [1-BEGLN SNA CLA JMP RBSPCL TAD ["\ /MUST BE HERE ISZ RBFLAG JMS I PCH CLA CMA DCA RBFLAG TAD LXR DCA TEMP1 TAD I TEMP1 JMS I PCH LBCKUP, CLA CMA TAD LXR JMP CHLM1 SRCH, 0 TAD I SRCH ISZ SRCH SNA JMP I SRCH TAD NM1 SNA CLA JMP SFND ISZ SRCH JMP SRCH+1 SFND, TAD I SRCH DCA TEMP1 JMP I TEMP1 LFEED, JMS I [CRLF DCA I LXR TAD [". JMS I PCH TAD [BEGLN-1 DCA XR TAD I XR SNA JMP LBCKUP JMS I PCH JMP .-4 PRQMRK, JMS I [PRNAME JMP I [PRINTQ IFNZRO PRQMRK-1357 <SEECCL,ZZXX> ZBLOCK 1 /A FREE LOCATION! IFNZRO .-1362 <FIXCCL,ERRRR> GETCCL, TAD [6003 JMS I [RESET TAD [67 /CCL OVERLAY BLOCK IS BLOCK 67 *** DCA OV JMP DATE2 DATE, TAD TMP SNA CLA JMP I [CCLSW-1 /USED TO BE JMP GETCCL DATE2, JMS I [SHNDLR /READ IN DATE OVERLAY 0201 0400 OV, MSOVL2 JMP KMONER JMP I [600 PAGE *1400 SAVE2, TAD I LXR SNA /ARE THERE ANY ARGS? JMP SAVE2A /NO ... USE CCB JMS I [SHNDLR /READ IN ARG OVERLAY 0201 CSOVLY MSOVLY JMP KMONER JMP I CCBTST /GO TO IT SAVE2A, JMS I [SHNDLR 0201 400 MTEMP+10 JMP KMONER SAVE3, TAD [603 DCA XR DCA LXR /INITIALIZE FOR GT32K I.D. TAD I [600 JMS I [CCBTST JMS I [SHNDLR 0101 400 MSOVL2 JMP KMONER JMP I GETOUT SAV2X, JMS I PGTOUT TAD I [600 /UPDATE THE SEGMENT COUNT BY CLL RAL /FIRST,MAKING SURE 4000 BIT IS SET STL RAR CIA TAD MERTST /SUBTRACT # OF GT32K SEGS THIS ALLOW US TO BYPASS... DCA EXTMP /SAVE COUNT FOR GT32K TAD EXTMP CLL RAL /WE WANT TO BUMP COUNTER TWICE FOR EVERY SEG TAD [603 /ADD POINTER TO INITIAL SEGMENT DCA XR TAD EXTMP CIA DCA EXTMP JMP I RCHK KMER4, JMS I [PRMESG TEXT /TOO FEW ARGS/ CCBTST, SAVE1A&177+400 /EXAMINE COUNT WORD OF CCB FOR VALIDITY /ASCII AND BINARY FILES USUALLY FAIL THIS TEST CLL RAL /INSURES 4000 BIT IS SET--128K INDICATOR STL RAR DCA EXTMP LXM /INITIALIZE EXTENDED MEMORY TAD EXTMP CMA AND [7740 SNA CLA JMP I CCBTST /IT WAS VALID CIERR, TAD [7605 DCA ERRET /RELOAD MONITOR ON THIS ERROR JMS I [PRMESG /IT WASN'T - TELL THE USER TEXT /CORE IMAGE ERR/ GETOUT, SAVE3A&177+400 /SUBROUTINE TO KICK MONITOR OUT IF NECESSARY TAD I [JSBITS RAR CLA TAD SYSTEM SZL SPA CLA /IS THE SYSTEM IN CORE AND SHOULD IT BE? JMP I GETOUT CIF 10 /YES AND NO - KICK IT OUT JMS I SYSTEM 11 /BYE BYE TAD [7700 DCA SYSTEM JMP I GETOUT KMER2, JMS PRNAME JMS I [PRMESG TEXT / NOT FOUND/ PRNAME, 4000 TAD NM1 JMS I [PRWD TAD NM2 JMS I [PRWD TAD NM3 JMS I [PRWD TAD NM4 SNA CLA JMP I PRNAME TAD [256 JMS I [PCHAR TAD NM4 JMS I [PRWD JMP I PRNAME RESET, 0 DCA I [JSBITS /MARK AREAS FOR I/O OPTOMIZATION JMS I [MINCOR CIF 10 JMS I SYSTEM 13 /RESET DEVICE HANDLERS AND OUTPUT FILES JMP I RESET RCHK, XLOD&177+400 AND I XTADR /V3D AND [200 /CAN'T ALLOW BOTH OS78 BIT AND SYSTEM CUSP BIT SZA CLA JMP CIERR /V3D CAN'T FALL INTO KMER3 /BECAUSE HAVE TO RELOAD KBM TO RESET 'PGNAME' TAD EXTMP DCA I RR7400 /SET UP SEGMENT COUNT FOR RUN LOAD JMP I RCHK RR7400, R7400 SVXER, JMS I [PRMESG TEXT /SAVE ERR/ XTADR, OS78 PAGE *1600 RUN6, TAD I TM1 /STORE CONTROL WORD FOR LAST SEG. DCA I [MREAD+1 TAD RUNSW /IS THIS R OR RUN? SNA CLA JMS I [WRCTLB /RUN TAD I RFILE /V3D FOR LINKER DCA I RCTL /V3D SAVE BLOCK NUMBER IN 'SOFSET' TAD I RFILE RUN7, IAC DCA RUNFIL /STORE STARTING BLOCK NUMBER RUN7A, TAD DEVHND DCA I [MREAD-1 TAD DEVHND DCA RUNHND /STORE DEVICE HANDLER ENTRY IN THIS PAGE TAD I ADR1 DCA I ADR2 ISZ ADCNT JMP .-3 JMP I .+1 RUN8&177+7400 ADCNT, RUN8&177+7600 RFILE, FILE CHK32, 0 /PROTECTS MONITOR FROM GREATER THAN 32K FIELD 0 LOAD TAD I RCTL1 AND T76A /ISOLATE CDEB BITS FOR FUTURE USE DCA CDE TAD I RCTL1 AND [7700 /LOAD EVERY FIELD INTO FIELD 1 TAD [10 /WE'LL BUMP IT UP FROM THERE---LATER DCA I RCTL1 JMP I CHK32 T76A, 76 RCTL1, RCTL&177+7400 MOVUP, 0 /SUBROUTINE TO MOVE UP PROGRAM CODE AND T3700 /CALCULATE THE NUMBER OF LOCS RAL TAD T177 CIA DCA COUNT /STORE IT HERE TAD CDE /PREPARE FOR CDF TO PROPER BANK & FIELD CLL RTR SZL SVLNBF, / /NEXT 111 LOCATIONS DESTROYED BY THE LINE BUFFER DURING A SAVE / TAD TX20 CLL RTL TAD T6201 /STORE IT IN EXTEND DCA EXTEND TAD I RADR1 /INITIALIZE THE INDEX REGS TAD SPTST DCA ADR1 TAD ADR1 DCA ADR2 TAD [7000 /SET EXTENDED MEMORY0 LXM BACK, CDF 10 /MAKE THE MOVE TAD I ADR1 EXTEND, 0 DCA I ADR2 ISZ COUNT JMP BACK CDF 0 TAD SPTST DCA I HF2 TAD I RCTL1 JMP I MOVUP T177, 177 T3700, 3700 T6201, 6201 CDE, 0 TX20, 20 HF2, HF3&177+7400 COUNT, 0 RADR1, RADR&177+7400 PAGE *1710 RUN8, ISZ R7400 /IS THIS THE LAST PARAMETER PAIR? JMP RUN9 /NO - KEEP LOADING TAD RUNFIL DCA I RMRD3 /MOVE THE RECORD NUMBER INTO THE FINAL READ TSF RUNTWT, JMP .-1 /WAIT FOR THE TELETYPE TO DIE DOWN (RF08 IS FAST!) JMP I .+1 MREAD /READ THE LAST SEGMENT AND START UP RUN9, TAD I RUNADR DCA RADR /SET UP THE LOADING ADDRESS OF THE CURRENT SEGMENT ISZ RUNADR TAD I RUNADR DCA RCTL /AND THE READ CONTROL WORD TAD RCTL AND TS7 /TEST FOR GREATER THAN 32K SNA DCA HF3 SZA CLA JMS I CH32 JMS I RUNHND RCTL, SOFSET /V3D THESE ARE STORED INTO ONLY AFTER MOVING RADR, OS78 /V3D RUNFIL, 0 JMP RERR /INPUT ERROR READING THE PROGRAM TAD RCTL ISZ HF3 /IF GREATER THAN 32K JMP .+2 JMS I MOVUPT /LOAD HIGHER FIELDS JMS ROTAT /GET THE BLOCK LENGTH OF THIS SEGMENT TAD RUNFIL DCA RUNFIL /UPDATE THE BLOCK NUMBER FROM IT ISZ RUNADR JMP RUN8 /BACK FOR ANOTHER ONE HF3, -1 CH32, CHK32 MOVUPT, MOVUP RERR, CIF 10 JMS I RU7700 TS7, 7 0 /TOTALLY MEANINGLESS RUNADR, CCB+4 R7400, 7400 RMRD3, MREAD+3 RU7700, 7700 RUNHND, 0 IFNZRO ROTAT-SVLNBF-111&4000 <ERROR> *1765 /MUST BE AT TOP OF PAGE ROTAT, 0 CLL RTR RTR RTR AND RU37 SNA TAD RU37 IAC CLL RAR JMP I ROTAT RU37, 37 PAGE /OVERLAY TO KEYBOARD MONITOR FOR "SAVE" WITH ARGUMENTS *2000 /GOES INTO 400 SAVE1A, TAD [1603 DCA X1 DCA TM1 CDF 10 DCA I [OLDT9 S6203, CIF CDF 0 TAD (SGETOUT-RSOVL2 /POINTER TO NEW GETOUT DCA PGTOUT /LIKEWISE "GETOUT" JMS I [SHNDLR 0210 1400 MTEMP+10 /READ IN CONTROL BLOCK JMP KMONER JMS I (LXRBAK-RSOVL1 /RESET LXR TO LOOK AT FIRST CHAR JMS I (LXRBAK-RSOVL1 DCA DASHFG SNUMLP, JMS SGTNUM JMP SDLOOK /NO NUMBER - GET DELIMETER TAD I LXR TAD (-"- SNA CLA JMP SVDASH JMS I (LXRBAK-RSOVL1 TAD DASHFG SNA CLA /WAS THERE A LOWER LIMIT? JMS DASHSB /NO - SET LOWER LIMIT TO UPPER LIMIT TAD TEMP1 CIA CLL CML TAD OLD1 SZA CLA /ARE THE FIELDS THE SAME? JMP KMER5 /NO - ERROR TAD TEMP2 AND [7600 TAD [200 DCA TEMP2 TAD TEMP2 CIA TAD OLD2 SZL CLA /IS UPPER LIMIT > LOWER LIMIT? JMP KMER5 /NO - ERROR CDF 10 TAD OLD1 DCA I X1 TAD OLD2 DCA I X1 TAD TEMP2 DCA I X1 /CREATE A TRIPLET(FIELD, LOW LIMIT, HIGH LIMIT) /IN THE TABLE IN FIELD 1 ISZ TM1 /BUMP ENTRY COUNT SDLOOK, CDF 0 TAD I LXR SNA JMP I (SVEND-RSOVL1 TAD (-", SNA JMP SNUMLP-1 TAD [",-"; SNA JMP SSTADR TAD [";-"= SNA CLA JMP I (SSBITS-RSOVL1 KMER5, JMS I [PRMESG TEXT /BAD ARGS/ SVDASH, TAD DASHFG SZA CLA JMP KMER5 ISZ DASHFG JMS DASHSB JMP SNUMLP SSTADR, JMS SGTNUM JMP KMER5 /NULL STARTING ADR - ERROR TAD TEMP1 /TRANSFORM FOR CDF --"37" TO "174"-128K AND [7757 /ISOLATE '17' BITS TAD (-10 SMA TAD [-17 TAD (10 TAD TEMP1 CLL RTL TAD S6203 CDF 10 DCA I (1601 /STORE AWAY STARTING FIELD TAD TEMP2 DCA I (1602 /AND STARTING ADDRESS JMP SDLOOK DASHSB, 0 TAD TEMP1 AND (37 /ISOLATE FIELD( & BANK) DCA OLD1 TAD TEMP2 AND [7600 DCA OLD2 JMP I DASHSB DASHFG, 0 OLD1, 0 OLD2, 0 SGTNUM, 0 /GET A NUMBER ROUTINE DCA DIGFLG /CLEAR DIGIT COLLECTED FLAG DCA TEMP1 DCA TEMP2 JMS I (STARTX-RSOVL1 JMP .+4 TAD (20 SNA CLA JMP .-4 JMS I (LXRBAK-RSOVL1 /SHOVE INDEX BACK TAD DIGFLG /IS DIGIT PRESENT? SZA CLA ISZ SGTNUM JMP I SGTNUM PAGE *2200 /LOADS INTO 600 SSBITS, JMS I (SGTNUM-RSOVL1 JMP I (KMER5-RSOVL1 TAD TEMP2 CDF 10 DCA I [1603 JMP I (SDLOOK-RSOVL1 SVEND, JMS I [SHNDLR 0101 0400 MSOVL2 /READ IN SECOND PART OF OVERLAY JMP KMONER TAD TM1 SNA JMP I (MOVECB-RSOVL2 CIA CDF 10 DCA I [1600 /NOW SORT THE ENTRIES IN THE SEGMENT TABLE ON /DECREASING FIELD AND INCREASING ADDRESS /WITHIN THE FIELD. TAD [1603 DCA P1 CLA IAC TAD I [1600 SNA JMP SORTED /RIDICULOUS TO SORT ONE ITEM DCA TEMP1 OUTRLP, TAD (3 TAD P1 DCA P2 TAD TEMP1 DCA TEMP2 INERLP, TAD P1 DCA LXR TAD P2 DCA X1 TAD I LXR CIA CLL TAD I X1 SNA CLA JMP TIE /FIELDS ARE EQUAL - SORT ON ADDRESS IN FIELD SZL JMP SWITCH /WRONG ORDER - SWITCH 'EM TIENTY, TAD P2 TAD (3 DCA P2 /INDEX TO NEXT ENTRY SWNTRY, ISZ TEMP2 JMP INERLP TAD P1 TAD (3 DCA P1 /ELEMENT IS IN PLACE - GO TO NEXT POSITION ISZ TEMP1 JMP OUTRLP JMP SORTED /SORT COMPLETE - CHECK FOR CONSISTENCY TIE, TAD I LXR CIA CLL TAD I X1 SZL CLA /TEST FOR ADRESSES IN ASCENDING ORDER JMP TIENTY /YES - DONT HAVE TO SWAP SWITCH, JMS SWSUBR JMS SWSUBR JMS SWSUBR CLA CLL CMA RTL TAD P1 DCA P1 /RESET FIRST POINTER JMP SWNTRY /AND DONT BUMP 2D POINTER, AS WE HAVE JUST BUMPED IT SWSUBR, 0 ISZ P1 ISZ P2 TAD I P1 DCA TM1 TAD I P2 DCA I P1 TAD TM1 DCA I P2 JMP I SWSUBR P1, 0 P2, 0 STARTX, 0 TAD I LXR /ANYTHING LEFT? SNA JMP I STARTX /NO.. TAKE EMPTY RETURN SKP ADGTLP, TAD I LXR TAD (-270 CLL /SEE IF THIS IS A DIGIT TAD [10 SNL JMP AONUM /NO.. GET OUT DCA TMP1 ISZ DIGFLG JMS ROT2 JMS ROT2 JMS ROT2 TAD TEMP2 TAD TMP1 DCA TEMP2 JMP ADGTLP /KEEP LOOKING AONUM, ISZ STARTX JMP I STARTX ROT2, 0 TAD TEMP2 CLL RAL /WE NEED THIS BECAUSE THE HANDLER DCA TEMP2 /WIPED THE FIRST COPY (MAYBE!!!) TAD TEMP1 RAL DCA TEMP1 JMP I ROT2 LXRBAK, 0 CLA CMA TAD LXR DCA LXR JMP I LXRBAK SORTED, TAD I [1600 IAC SNA JMP I (MERGED-RSOVL2 DCA TEMP1 TAD [1603 DCA X1 TAD (1606 DCA LXR JMP I [MRGLP-RSOVL2 PAGE *2400 /LOADS INTO 400 ON TOP OF SAVE1A /NOW CHECK THE SORTED FILE FOR CONSISTENCY /OVERLAPPING SEGMENTS ARE ERRORS, /ABUTTING SEGMENTS ARE TO BE CONDENSED IN /THE INTERESTS OF SPEED MRGLP, TAD I LXR CIA TAD I X1 SZA CLA JMP NOCMPR /DIFFERENT FIELDS - INCOMPARABLE ISZ X1 TAD I X1 CIA CLL TAD I LXR SNA CLA JMP BUTTNG /UPPER LIMIT(2)=LOWER LIMIT(1) - ABUTTING SEGMENTS SZL CLA JMP NXTONE /UPPER LIM(2)<LOWER LIM(1) - NORMAL CASE CDF 0 /UPPER LIM(2) > LOWER LIM(1) - ERROR JMS I [PRMESG TEXT /BAD ARGS/ BUTTNG, CLA CMA TAD X1 DCA X1 TAD I LXR DCA I X1 /SET UPPER LIM(2) = UPPER LIM(1) TAD X1 TAD (-1777 SZA CLA JMP .-5 /AND COMPRESS OUT THE LOWER ENTRY ISZ I [1600 /DECREMENT THE ENTRY COUNT (CAN'T OVERFLOW) JMP I (SORTED-RSOVL1 /START OVER FROM BEGINNING NOCMPR, ISZ X1 ISZ X1 ISZ LXR NXTONE, ISZ LXR ISZ TEMP1 JMP MRGLP /NOW ALL THAT REMAINS IS TO TRANSFORM OUR TRIPLETS /INTO THE FORMAT WHICH THE RUN LOADER EXPECTS; I.E. /DEVICE-HANDLER ARGUMENTS MERGED, CDF 0 /LOAD IN MERGED OVERLAY JMS I [SHNDLR 0100 0600 64 JMP KMONER JMP I (MERGEX MOVECB, TAD (-1777 DCA MERTST JMP MERGED CBMOVE, CDF 10 /FINAL CODE TO MOVE NEW CONTROL BLOCK TAD I LXR /INTO PAGE 600 OF FIELD 0 CDF 0 DCA I X1 ISZ TEMP1 JMP CBMOVE JMP I (SAVE3 /EXIT TO SAVE PROCESSOR SAVE3A, ISZ XR TAD I XR /GET THE I/O CONTROL WORD OF THIS SEGMENT DCA ADR2 /CAUTION AUTO-INDEX TEST FOR GREATER THAN 32K TAD ADR2 AND [7 /ARE THERE ANY BANK BITS? SZA CLA JMP XTAT /NO- PROCEED AS NORMAL TAD SPTST /ONLY WANT TO ISOLATE FIRST FIELD SNA CLA /BELOW 32K JMP XTAT TAD CLENGT /SET UP FIRST FIELD I.D. DCA LXR /CAUTION AUTO-INDEX-SAVE BLOCK OFFSET TAD EXTMP /SAVE NUMBER OF SEGS LEFT DCA MERTST /... NEGATIVE OF # LEFT DCA SPTST /SET I.D. "SET" FLAG XTAT, TAD ADR2 JMS I PROTAT /EXTRACT THE LENGTH FROM IT TAD CLENGT DCA CLENGT /UPDATE THE LENGTH OF THE FILE ISZ EXTMP JMP SAVE3A /LOOP FOR ALL SEGMENTS OF THE FILE TAD CLENGT /USE THIS LENGTH WHEN ENTERING THE FILE CLL RTL RTL TAD SENTER CIF 10 JMS I SYSTEM 3 /ENTER SFILE, NM1 0 /LENGHT UNIMPORTANT JMP I (SVXER /SAVERR CODE REPEATED CIF CDF 10 TAD I [DVHREC CDF 0 DCA I [LDBLK TAD SENTER JMS I SYSTEM 4 /CLOSE NM1 /NAME FOR "CLOSE" CLENGT, 1 /CLOSING LENGTH JMP I (SVXER JMP I (SAV2X XLOD, JMS I [SHNDLR 0201 1200 64 JMP KMONER JMP I (SAVXX /JMP T0 1400 SGETOUT,0 /REPLACES "GETOUT" WHICH WE'VE STORED OVER TAD I [JSBITS RAL /ONLY PERFORMS THOSE FUNCTIONS THAT "SAVE" NEEDS SPA CLA JMP I SGETOUT CIF 10 JMS I SYSTEM 11 DECIMB, JMP I SGETOUT /DECIMB ONLY CALLED BY NEXT PAGE /PART OF NEXT PAGE'S ROUTINE: TAD NM2 /ALL NEW FOR V3D TAD NM4 /ONLY ALLOW 2 CHARS FOR MM SNA CLA ISZ DECIMB TAD NM1 RTR RTR JMP I DECIMB PROTAT, ROTAT *2600 /DATE PROCESSOR - LOADS IN 400, RUNS IN 600 DATEXX, JMS DECIM NUM2, DCA NUM2 TAD NUM2 TAD M40 SMA CLA JMP BADNUM /DAY > 31 JMS I GNAME L30, 30 /NOTHING FOUND WILL GIVE ERROR LATER / DCA NUM1 /NUM1 IS INITIALLY 0 NEWLUP, ISZ MONPTR ISZ NUM1 TAD I MONPTR ISZ MONPTR SMA JMP BADNUM /SYMBOLIC MONTH NOT FOUND TAD NM1 SNA CLA /SKIP IF FIRST 2 LETTERS DON'T MATCH TAD NM2 TAD I MONPTR SZA CLA JMP NEWLUP /SECOND 2 LETTERS DON'T MATCH /*** TEST DELIMETER HERE TAD NUM1 CLL RTL RTL RAL TAD NUM2 RTL RAL DCA NUM2 DCA DDELIM /MAKE END-OF-LINE THE DELIMITER JMS DECIM TAD (-106 /SCALE DOWN TO RANGE 1970-1999 SPA JMP BADNUM /DIDN'T MAKE THE RANGE DCA NUM1 TAD NUM1 AND L30 /ISOLATE EXTENSION DATE BITS CLL RTL RTL DCA TM1 TAD I (BIPCCL AND L7177 /STORE THEM INTO BITS RESERVED FOR THIS PURPOSE TAD TM1 TSLUP, DCA I (BIPCCL TAD NUM1 AND [7 TAD NUM2 /COMBINE WITH MONTH AND DAY CDF 10 DCA I (MDATE /STORE IN SYSTEM DATE CELL TSF /7605 SETS THE DF JMS L7177 /TIME OUT A BIT JMP I [7605 /IN CASE RUNNING UNDER BATCH L7177, 7177 /JMS IS LONGER THAN JMP ISZ DDELIM /DDELIM IS 0 AT END JMS TSLUP /WAIT FOR TELETYPE TO DIE DOWN (RF08) JMP I [7605 /RETURN TO MONITOR DDELIM, -"- /WOULD LIKE TO BRANCH TO CCLSW-1 IF DATE ENDED WITH ALTMODE CNV, 0 AND [77 SNA JMP NUL TAD (-60 SPA JMP BADNUM JMP I CNV NUL, TAD TM1 JMP GODE DECIM, 0 JMS I GNAME M40, -40 /NOTHING THERE (LOGIC WILL CAUSE ERROR LATER) TAD TMP TAD DDELIM /COMPARE AGAINST DESIRED DELIMETER SNA CLA /DASH OR NULL JMS I (DECIMB-2400+400 JMP BADNUM /DELIMETER BAD RTR JMS CNV DCA TM1 TAD TM1 CLL RTL TAD TM1 RAL DCA TEMP2 TAD NM1 JMS CNV TAD TEMP2 GODE, SZA JMP I DECIM BADNUM, CLA /CRAP IN AC TAD [7605 DCA ERRET JMS I [PRMESG TEXT /BAD DATE/ NUM1, 0 /MONTH NUMBER (MUST BE 0 INITIALLY) MONS, -1201 /JAN -1600 -0605 /FEB -0200 -1501 /MAR -2200 -0120 /APR -2200 -1501 /MAY -3100 -1225 /JUN -1600 -1225 /JUL -1400 -0125 /AUG -0700 -2305 /SEP -2000 -1703 /OCT -2400 -1617 /NOV -2600 -0405 /DEC -0300 MONPTR, MONS-2600+600-1 /RELOCATES TO PAGE 600 /MUST BE POSITIVE PAGE *3000 /MONITOR ERROR PROCESSOR - LOADS INTO 11400 DLYLPX, AND I 0 D7600, 7600 TAD MERRNO CLL RAL ISZ I (ZERO-1400 ISZ I (ZERO-1400 /V3C ISZ I (ZERO-1400 JMP DLYLPX /WAIT FOR TELEPRINTER (WITHOUT CDF'S) SNA JMP USRERR CLL RAL RTL RTL TAD (6040 DCA I (MERTYP-1400 MERCMN, TAD (MERRXR-1400 JMS EPRINT TAD I (FPUTX RTR RAR AND (7 TAD (60 JMS MERPCH CLA CLL CMA RAL TAD I (MONITO RAL DCA T1 TAD (-4 DCA T2 MEROLP, TAD T1 RTL RAL DCA T1 TAD T1 AND (7 TAD (60 JMS MERPCH ISZ T2 JMP MEROLP TAD MERRNO CLL RAL SNA JMP NOEXPL /NO EXPLANATION FOR USER ERRORS CLL RAR TAD (EXPLTBL-1401 /PRINT EXPLANATION DCA T1 /GET ADDRESS INTO MESSAGE TABLE TAD (240 JMS MERPCH TAD ("( JMS MERPCH TAD I T1 /GET ADDRESS OF MESSAGE JMS EPRINT TAD (") JMS MERPCH TAD MERRNO NOEXPL, TAD (3773 SPA CLA CLA CMA DCA I (7700 DCA OLDT9 CLA CLL CML RAR DCA MERRNO CDF 0 TAD I (JSBITS AND (6777 TAD (1000 DCA I (JSBITS /SET THE CURRENT JOB UNSTARTABLE CDF CIF 0 JMP I D7600 USRERR, CLA CLL JMS I (FGET TAD (4060 DCA I (UERTYP-1400 TAD (UERRXR-MERRXR JMP MERCMN MERPCH, 0 TLS TSF JMP .-1 CLA JMP I MERPCH ZERO, 0 EPRINT, 0 DCA T2 EPRLUP, TAD I T2 RTR RTR RTR JMS EPR TAD I T2 JMS EPR ISZ T2 JMP EPRLUP EPR, 0 AND (77 SNA JMP I EPRINT TAD (240 AND (77 TAD (240 JMS MERPCH JMP I EPR PAGE *3200 /LOADS INTO 1600 MERRXR, TEXT \MONITOR ERROR 0 AT \ MERTYP=MERRXR+7 UERRXR, TEXT \USER ERROR 0 AT \ UERTYP=UERRXR+5 EXPLTBL,MON1-1400 MON2-1400 MON3-1400 MON4-1400 MON5-1400 MON6-1400 MON7-1400 MON1, TEXT \CLOSE ERROR\ MON2, TEXT \DIRECTORY I/O ERROR\ MON3, TEXT \DEVICE HANDLER NOT IN CORE\ MON4, TEXT \ILLEGAL USR CALL\ MON5, TEXT \I/O ERROR ON SYS:\ MON6, TEXT \DIRECTORY OVERFLOW\ MON7, TEXT \RESERVED\ /EXECUTION TIME LOADER FOR MONITOR "CHAIN" COMMAND *3400 /EXECUTES IN FIELD 0 IN PAGE 7400 MCHNX, DCA MCHREC /STORE STARTING RECORD # TAD MCHREC DCA I (SOFSET /V3D SAVE STARTING ADDRESS CIF 10 JMS I (200 13 /RESET ALL DEVICE ASSIGNMENTS 0 /BUT DON'T CLEAR OUTPUT FILES CIF 10 JMS I (200 11 /KICK MONITOR OUT AND RESTORE CORE IF NECESSARY JMS MCHRD /PARAMETERS PRESET TO READ CONTROL BLOCK INT0 7200 TAD I (7200 /TEST FOR SAVE FILE! CMA /TEST FOR VALID CCB AND (7740 SZA CLA JMP CHERR TAD I (7201 DCA I (MSTCDF /TRANSFER INFORMATION FROM CONTROL BLOCK CLA IAC TAD I (7202 DCA I (MSTADR /TO PAGE 7600 TAD I (7203 TAD (1000 DCA I (JSBITS TAD (7204 DCA MCHT1 TAD MCHFJM DCA I (MSWITC TAD (TCF DCA I (MSTCDF+1 MCHN1, ISZ I (7200 JMP MCHN2 TAD I MCHT1 DCA I (MREAD+2 ISZ MCHT1 TAD I MCHT1 DCA I (MREAD+1 TAD MCHREC DCA I (MREAD+3 TAD (SHNDLR DCA I (MREAD-1 JMP I (MREAD MCHN2, TAD I MCHT1 DCA MCHADR /SET UP COMMAND TO READ NEXT SEGMENT ISZ MCHT1 TAD I MCHT1 DCA MCHCTL JMS MCHRD /READ IT ISZ MCHT1 JMP MCHN1 /LOOP ON NUMBER OF SEGMENTS MCHRD, 0 JMS I (SHNDLR MCHCTL, 0101 /1 RECORD INTO FIELD 0 STARTING FORWARDS MCHADR, 7200 MCHREC, 0 JMP CHERR /CHAIN ERROR TAD MCHCTL MCHBMP, CLL RTR RTR RTR AND (37 SNA /V3C TAD (40 /0 MEANS FULL 4K READ IAC CLL RAR TAD MCHREC DCA MCHREC JMP I MCHRD MCHT1, 0 MCHFJM, MSTCDF&177+5200 /"JMP MSTCDF" CHERR, ISZ CHERR1 JMP CHERR /LET TTY DIE DOWN ISZ CHERR2 JMP CHERR CHTADC, TAD CHARS SNA JMP I (7600 /DONE..BACK TO MONITOR TLS TSF JMP .-1 CLA ISZ CHTADC /NEXT LETTER JMP CHTADC CHERR1, 0 CHERR2, -6 CHARS, "C;"H;"A;"I;"N;" ;"E;"R;"R;215;212;0 PAGE *3600 RELOC 1400 SAVXX, TAD I SXFLE /STORES SFILE DCA SWFILE JMS I PHNDL /LOAD IN NON SYS HANDLER JMS SWRITE /WRITE OUT CCB TAD MERTST /MINUS THE # OF SEGS OF LT32K CODE DCA I [600 TAD LXR /# OF BLOCKS OF GT 32K SEGS SNA /LXR IS ZERO IF ALL SEGS ARE ABOVE 32K JMP OVR32 TAD I SXFLE /LXR--- COMPENSATES FOR CCB DCA SWFILE SAVE4, TAD I XR DCA SADR CLA CLL CML RAR TAD I XR DCA SCTL SAVE5, TAD SADR RAL SZL SPA CLA /DOES THIS SEGMENT START BELOW 2000? JMP SAVE8 /NO - NOTHING TO WORRY ABOUT TAD SCTL AND T76 SZA CLA /FIELD 0? JMP SAVE8 /NO - SAVE AS IS SAVE6, JMS LOADF0 /LOAD THE FIELD 0 SAVE AREA OVER THE I/O MONITOR SAVE7, CLA CMA TAD SCTL CLL RAL TAD SADR RAL SZL SPA CLA /CHECK WHETHER UPPER LIMIT IS ABOVE 2000 JMP SAVE7A /IT IS - MUST MAKE 2 WRITES TAD SCTL /TOTALLY CONTAINED IN 0-1777 TAD [10 /CHANGE FIELD 0 TO FIELD 1 AND CONTINUE JMP SAVE8A SAVE7A, TAD SCTL /WRITE IN 2 PARTS - DCA TM1 TAD SADR CIA /FIRST PART FROM FIELD 1, EVERYTHING BELOW 2000 TAD [2020 CLL CML RAR DCA SCTL JMS SWRITE CLA CLL CML RTR DCA SADR TAD SCTL /SECOND PART FROM FIELD 0, EVERYTHING ABOVE 2000 AND [3700 CIA TAD TM1 SMA /FULL FIELD SAVE IN F0 MAKES THIS + TAD [4000 /COMPENSATE FOR THAT CASE SAVE8A, DCA SCTL SAVE8, JMS SWRITE ISZ I [600 JMP SAVE4 STA /LXR BECOMES ONE BECAUSE OF CCB TAD LXR /NUMBER OF BLOCKS OF GT32K SEGS SNA CLA JMP I [SAVE12 OVR32, TAD I SXFLE /RESET FILE TO INITIAL BLOCK IAC /COMPENSATE FOR CCB DCA SWFILE TAD [603 /RESET CCB POINTER DCA ADR1 TAD [7000 LXM SAVE4B, TAD I ADR1 /IDENTICAL TO SAVE4 CODE DCA SADR CLA CLL CML RAR TAD I ADR1 DCA SCTL DCA ADR2 /SET UP TO MOVE GREATER THAN 32K CODE DOWN DCA X1 /DITTO DCA SXFLE /INTIALIZE FOR COUNTER TAD SCTL /SET UP CDF FOR MOVE AND T76 /ISOLATE BANK AND FIELD CLL RTR /ADJUST MENT SZL TAD T20 CLL RTL TAD FDC0 DCA .+1 XFSP, 0 /START OF MOVE LOOP TAD I ADR2 CDF 70 /PUT THEM IN FIELD SEVEN DCA I X1 /IT SEEMS LIKE A GOOD FIELD ISZ SXFLE JMP .-5 FDC0, CDF 0 /LOOP IS OFFICIALLY OVER TAD SCTL /ADJUST SWRITE CONTROL WORD AND [7700 TAD [70 /TO FIELD SEVEN DCA SCTL JMS SWRITE ISZ EXTMP /IS THAT ALL THE SEGMENTS?? JMP SAVE4B /NO ---CONTINUE JMP I [SAVE12 /TIME TO EXIT LOADF0, 0 /ISZ F0OVLY /HAS THE FIELD 0 OVERLAY BEEN LOADED BEFORE? /JMP I LOADF0 /EVIDENTLY JMS I [SHNDLR 1010 F0OVLY, 0 /WILL BE 0 IF WE EXECUTE THIS CODE, OF COURSE MTEMP+4 JMP KMONER JMP I LOADF0 SWRITE, 0 JMS I DEVHND SCTL, 4101 SADR, 600 SWFILE, 0 JMP KMONER TAD SCTL CLL RTR RTR RTR AND RO37 SNA TAD RO37 IAC CLL RAR TAD SWFILE DCA SWFILE /BUMP RECORD NUMBER JMP I SWRITE RO37, 37 T76, 76 T20, 20 PHNDL, HNDL SXFLE, SFILE&177+400 RELOC PAGE *4000 /SYSTEM GENERATOR - WRITES STUFF OUT USING SHNDLR WRITE=JMS I SYSHND JMS SYSSWP /SWAP SYSTEM DEVICE HANDLER INTO 7600 WRITE; 4200; 7400; 0; JMP BERR /BOOTSTRAP TAD RBFLAG SZA CLA JMP .+6 WRITE; 4210; DCOUNT; 01; JMP BERR /DIRECTORY WRITE; 5001; 0000; 07; JMP BERR /KEYBOARD MONITOR WRITE; 4610; 0000; MONTOR; JMP BERR /USR WRITE; 4111; 3400; MEOVLY; JMP BERR /"ENTER" OVERLAY WRITE; 4701; 2000; MSOVLY; JMP BERR /SAVE OVERLAY, /ERROR ROUTINE AND "CHAIN" TAD RBFLAG SZA CLA JMP .+13 WRITE; 4101; LDRCTL; MFREE; JMP BERR /ABSLDR CONTROL BLOCK WRITE; 5010; 2000;MFREE+1; JMP BERR /ABSLDR JMS I (4200 /OUTPUT THE DEVICE HANDLERS JMP BERR JMS SYSSWP /SWAP BACK PAGE 7600 CLA CMA HLT CLA JMP I .+1 BERR, 7600 JMS SYSSWP HLT JMP .-1 W6600, 6600 W7600, 7600 SYSSWP, 0 TAD W6600 DCA SYTM1 TAD W7600 DCA SYTM2 SWAPLP, TAD I SYTM1 DCA TMSY TAD I SYTM2 DCA I SYTM1 TAD TMSY DCA I SYTM2 ISZ SYTM1 ISZ SYTM2 JMP SWAPLP JMP I SYSSWP /CONTROL BLOCK FOR ABSOLUTE LOADER LDRCTL, 7777 /ONE CONTIGUOUS LOAD 6213 /STARTING ADDRESS IN FIELD 1 2000 /STARTING LOCATION=12000 6003 /DOES NOT LOAD OVER EITHER MONITOR AREA /ALSO DOES NOT USE THESE AREAS AT COMMAND TIME - TRUE /ONLY FOR FIRST CALL TO COMMAND DECODER 2000 /FIRST(AND ONLY) SEGMENT STARTS AT 2000 1210 /IN FIELD 1 AND IS 10 PAGES LONG IFNZRO LDRCTL-4113 <BLDER,XQX> SYTM1, 0 SYTM2, 0 TMSY, 0 SYSHND, 7607 PAGE *4264 RELOC 664 MERGEX, CDF 10 TAD MERTST SZA CLA JMP MOVEC TAD [1603 /LOADS INTO 600--MERGED--CODE DCA LXR TAD [1603 DCA X1 TAD I [1603 AND T1777 TAD T6000 DCA I [1603 /INITIALIZE STATUS BITS TO NO OVERLOADS TAD I [1600 DCA TEMP1 MERGLP, TAD I LXR AND TX37 CLL RTR /TRANSFORM 'ABCDE' TO 'CDEBA0' RTR SZL /TEST FOR 'B' BANK TAD [400 CLL RAR SZL /TEST FOR 'A' BANK TAD [100 CLL RTR RTR RAR DCA TEMP2 TAD I LXR AND [7400 DCA TMP1 TAD TMP1 DCA I X1 /STORE ADDRESS TAD TMP1 CIA TAD I LXR /FORM UPPER LIM - LOWER LIM CLL RAR TAD TEMP2 /ADD IN FIELD DCA I X1 TAD TMP1 CLL RAL SZL SPA CLA /IS THE LOWER LIMIT < 2000? JMP NXTSEG /NO TAD TEMP2 RAR SZA CLA /YES- IS THE FIELD 0 OR 1? JMP NXTSEG /NO SNL IAC CMA CML RTR AND I [1603 /AND OUT THE PROPER OVERLOAD BIT DCA I [1603 NXTSEG, ISZ TEMP1 JMP MERGLP TAD I T1605 /TEST FIRST SEGMENT FOR GREATER THAN 32K AND [7 SNA CLA /IF GREATER THAN 32K SET JMP MOVEC TAD I [1600 /THE 4000 BIT OF THE FIRST WORD OF THE CCB TO ZERO RAL CLL RAR DCA I [1600 /REMOVED LXM PUT IT IN MOVE UP CODE MOVEC, TAD T1577 DCA LXR TAD T577 DCA X1 TAD [7600 DCA TEMP1 DCA MERTST /SET MOVE I.D. TO ZERO JMP I MVECB /RETURN TIME MVECB, CBMOVE&177+400 T1605, 1605 T1777, 1777 T6000, 6000 T1577, 1577 T577, 577 TX37, 37 RELOC PAGE *7400 NOPUNCH *7600 ENPUNCH /UPPER PAGE OF FIELD 1 - CHOCK FULL OF GOODIES /LIKE THOUSANDS OF TABLES AND THE MONITOR CALL LOCATION MOFILE, ZBLOCK 17 /OUTPUT FILE TABLE - 7600-7616 (3 ENTRIES MAX) /5 WORDS PER ENTRY - DEVICE # AND FILE NAME MIFILE, ZBLOCK 24 /INPUT FILE TABLE - 7617-7642 (10 ENTRIES MAX) /2 WORDS PER ENTRY - DEVICE # AND RECORD # /LAST WORD IN TABLE CONTAINS TERMINATION INDICATOR /(0 FOR CR, 1 FOR ALTMODE) AND HIGH ORDER /PART OF NUMERICAL ARGUMENT MPARAM, ZBLOCK 4 /PARAMETER TABLE - 7643-7646 /FIRST 3 WORDS - MASK OF SWITCHES(A-Z,0-9). /FOURTH WORD - CONTAINS THE LOW ORDER BITS OF /THE NUMERICAL ARGUMENT /TABLE OF DEVICE HANDLERS PRESENTLY IN CORE DVHNDL, 7607;7607;0;0;0;0;0 0;0;0;0;0;0;0;0 MDATE, 0 /HOLDS THE CURRENT DATE- 4 BIT MONTH, /5 BIT DAY, 3 BIT YEAR FROM 1970 MGET, CIF 0 JMS SHNDLR /INST FIELD IS 0 1000 /READ 4 RECORDS INTO FIELD 0 0 /LOCATIONS 0-1777 7 /KEYBOARD MONITOR FOLLOWS DIRECTORY PJSBTS, JSBITS /SERVES AS A HALT (WATCH IT!) SCDCIF, CDF CIF 0 JMP I .+1 KMNTRY /V3D GETS CHANGED TO INIT MCALL1, 0 DCA MARG1 /SAVE AC AS IT MAY CONTAIN AN ARGUMENT RDF /GET CALLING FIELD TAD SCDCIF DCA SMCIF CDF 0 TAD I PJSBTS RAR CDF 10 SZL CLA /DOES JOB USE LOCS 10000-11777? JMP MONRD /NO - DONT SAVE THEM CIF 0 JMS SHNDLR 5010 0 MTEMP HLT MONRD, CIF 0 JMS SHNDLR 610 0 MONTOR SCOPE, HLT /BIT 4 IS A 1 IF CONSOLE IS A SCOPE JMP MSTART /START THE MONITOR UP IN PAGE 0 MRETRN, CIF 0 JMS SHNDLR 1010 /READ 10 RECS INTO FIELD 1 0 MTEMP /TEMP REGION ON SYS HLT /SYS HAS PROBLEMS SMCIF, 0 JMP I MCALL1 MARG1, 0 /TABLE OF USER DEVICE NAMES /ALSO USED BY SYSTEM ODT UDNAME, 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 DCB, ZBLOCK 17 /DEVICE CONTROL BLOCK - SET IN "CONFIG" /******************************************************** / MAP OF SYSTEM DEVICE AS OF 2/21/73 /******************************************************** / * 256 WORD RECORDS * /******************************************************** / RECORDS CONTENTS / ------- -------- / 0 MONITOR BOOTSTRAP / 1- 6 SYSTEM DIRECTORIES / 7-12 KEYBOARD MONITOR / 13-15 I/O MONITOR(CALLABLE MONITOR) / 16-25 DEVICE HANDLER RECORDS / 26 MONITOR "ENTER" OVERLAY / 27-50 MONITOR SCRATCH AREA FOR SAVING CORE / 51-53 COMMAND DECODER / 54-55 "SAVE WITH ARGUMENTS" AND "DATE" OVERLAYS / 56 MONITOR ERROR ROUTINE / 57 "CHAIN" PROCESSOR / 60-63 SYSTEM ODT / 64 RESERVED FOR EXPANSION /65 CCL REMINISCENSES / 66 USED BY TWO-PAGE SYS HANDLER / 67 USED BY CCL (CCL OVERLAY) / 70-END FILE STORAGE SHNDLR=7607 /ENTRY POINT TO SYSTEMS HANDLER *6600 NOPUNCH *7600 ENPUNCH /SYSTEM HANDLER AND FIELD 0 UPPER PAGE /INCLUDES BOOTSTRAP AND PART OF MONITOR CALL ROUTINE DVHORG=16 /DEVICE HANDLER RECORDS MTEMP=27 MONTOR=13 JMS SHNDLR 5000 /SAVE MONITOR CORE - WRITE 5 RECORDS FROM FIELD 0 0 /(LOCATIONS 0-1777) MTEMP+4 7602 /TROUBLE WITH SYSTEM DEVICE CDF CIF 10 JMP MGET /NOW GO READ IN THE KEYBOARD MONITOR *6744 /INFORMATION ABOUT CURRENT JOB NOPUNCH *7744 ENPUNCH JFIELD, 6203 /A CDF CIF N INSTRUCTION TO START THE JOB JSTART, 7600 /THE STARTING ADDRESS JSBITS, 1000 /VARIOUS STATUS BITS - USED FOR OPTIMIZATION /BIT 4000 - JOB DID NOT LOAD INTO 00000-01777 /BIT 2000 - JOB DID NOT LOAD INTO 10000-11777 /BIT 1000 - JOB IS NOT RESTARTABLE /BIT 400 - DOESN'T DESTROY BATCH MONITOR /BIT 2 - JOB DOES NOT USE LOCS 00000-01777 /BIT 1 - JOB DOES NOT USE LOCS 10000-11777 SOFSET, 0 /FOR FUTURE(AND MAYBE PRESENT) USE /DATA BREAK FILLERS FOR SYSTEM BOOTSTRAP 7750 7751 7752 7753 7754 7755 /MONITOR PATCH TO HELP BLEEP LOADER 0 /ADDRESS OF HANDLER FOR DEVICE USED MREAD, HLT 0 0 0 HLT MSWITC, JMP .+6 /ZEROED IF PG 7000 (HANDLER) MUST BE READ OVER JMS SHNDLR 0300 7000 /THIS AREA MODIFIED BY ODT MTEMP+6 OS78, HLT /BIT 4 IS A 1 IF OS/78 IS RUNNING MSTCDF, CDF CIF 0 TCF /EXIT WITH A CLEAR CONSCIENCE(ALSO A CLEAR FLAG) JMP I .+1 MSTADR, 0 SBLOCK, 0 BIPCCL, 0 /MORE STATUS BITS. /BIT 1: 1=> BATCH IS IN PROGRESS /BITS 6-8: FIELD OF BATCH MONITOR /HIGHEST CORE FIELD USED BY OS/8 /OR 0 TO MEAN OS/8 MAY USE ALL OF CORE *0 VERSNO /OS/8 VERSION NUMBER CIF 30 JMP .-1 /HIGROUND SUPPORT KMONER, CLA TAD [7605 DCA ERRET JMS I [PRMESG TEXT /?ERROR/ /THE FOLLOWING REGISTERS ARE SET TO VITAL INITIAL VALUES. TO ALTER /THESE VALUES IS TO BRING DISASTER DOWN UPON YOUR HEAD! LXR, PMSRST-1 X1, MSWITC /THESE TWO ARE USED AT INITIALIZATION. ADR1, RUN8-1 ADR2, RUN8&177+7377 /USED DURING R, AND RUN COMMANDS XR, AMFLAG, 0 /1 MEANS SAW ALTMODE /MUST NOT MOVE FOR CCL AND BATCH *20 RBFLAG, 0 /MUST BE AT LOCATION 20 TEMP2, -7 SYSTEM, 7700 PCH, PRINT GLINE, XGLINE GNAME, GETNAM DEVHND, 7607 FUDJMP, MSTCDF&177+5200 P6203, 6203 TMP, PATCHLEV /MONITOR PATCH LEVEL MUST BE AT LOC 31 FOR CCL PGTOUT, GETOUT ERRET, PCRLF /MUST BE AT 33 FOR CCL /THE FOLLOWING LOCS. ARE TEMPORARIES. HOWEVER, THERE IS NOW /VITAL ONCE ONLY CODE TO HELP THE BATCH PROCESSOR. THIS CODE IS /READ IN EVERY TIME THE KEYBOARD MONITOR IS RE-READ. NM1, 203 /THIS MUST BE A 203! BATCH, /ENTRY TO READ NEW BATCH MONITOR NM2, JMS I [7607 /THE BATCH INITIALIZER ALTERS SOME VALUES NM3, 610 /IN THIS LIST...THIS ONE********** NM4, 0 /THIS ONE*****GETS ADDRESS OF BOS. TEMP1, 13 /******GETS RECORD OF BOS***** TM1, SKP CLA /ERROR. DON'T RUN BATCH TMP1, JMP BCHGO NMCT, DCA I KM1 /CLEAR BATCH FLAG. PN, JMP KMONER PRDSW, KM1, 7777 BCHGO, RUNSW, CIF CDF 0 DIGFLG, JMP I .+1 SENTER, KMINIT /GETS ENTRY POINT (BOS) KRCHK, RCHK EXTMP, 0 MERTST, 0 SPTST, -1 /-1 USED IN RUN CODE FIELD 1 /FIELD 1 /OS/8 MONITOR - MONITOR ROUTINES /THIS MONITOR IS CALLED INTO CORE BY A JMS 7700 IN FIELD 1 /IT REPLACES CORE FROM 200-1777 /AND INTERPRETS THE WORDS AFTER THE JMS AS A MONITOR FUNCTION /MONITOR FUNCTIONS ARE ASSIGN,LOOKUP,ENTER,ETC. MAXCMD=13 *200 MONITO, 0 /MONITOR SUBROUTINE DCA MACARG /STORE AC ARG DCA USERFG /SET FLAG TO INDICATE WE WERE CALLED DIRECTLY RDF /GET CALLING FIELD TAD [CDF CIF 0 DCA FGETX MRENTR, TAD FGETX DCA FPUTX /FOR LOADING AND STORING CALLING SEQUENCE JMS FGET /GET FIRST ARGUMENT[AND SET DATA FIELD 1) ISZ MONITO CLL TAD [-MAXCMD-1 SZL JMP MERROR TAD JMPMAX DCA .+1 /BRANCH TO APPROPRIATE ROUTINE WITH LINK ON FGET, 0 /MUST PRESERVE LINK TAD MONITO JMS FGETW JMP I FGET /MONITOR COMMAND DISPATCH TABLE MUST BE JAMMED BEFORE 'FPUT' MERROR MASSIGN MLOOKUP MENTER MCLOSE MCD MCHAIN MERR MESCAP MESCPR MASGN MRSETP, MRESET FPUT, 0 /MUST FOLLOW LAST ADDRESS IN JUMP TABLE FPUTX, 0 DCA I MONITO CDF CIF 10 JMPMAX, JMP I FPUT MEOERR, ISZ MERRNO MIOERR, ISZ MERRNO MERROR, ISZ MERRNO ISZ MERRNO ISZ MERRNO ISZ MERRNO MERR, CLA CIF 0 JMS I [SHNDLR 0210 1400 MERRTN HLT JMP I .-3 MCD, CLA CLL CML RAR JMS CDSWAP /SWAP OUT CORE IF NECESSARY JMS FGET DCA T1 CIF 0 JMS I [SHNDLR 0601 0 MCDREC JMP MIOERR TAD FPUTX CDF CIF 0 JMS I [200 DCA FPUTX TAD FPUTX DCA FGETX JMS CDSWAP /RESTORE THE SWAPPED CORE IF NECESSARY STL /LINK MUST BE ON AT MRESET JMP I MRSETP /AFTER CD, RESET DEVICE AREA MCHAIN, JMS FGET DCA T1 /BUFFER THE ARGUMENT CIF 0 JMS I [SHNDLR 0101 7400 MRUNRC JMP MIOERR TAD T1 /LOAD THE BUFFERED ARGUMENT CDF CIF 0 JMP I .-5 MLNOTF, CLA ISZ MONITO MNEXT, TAD USERFG MESCAP, CLL RAR TAD MONITO DCA I [7700 TAD FPUTX DCA I [SMCIF CLA IAC CML CDF 0 AND I [JSBITS CDF 10 RAR SZL SPA CLA /RESTORE CORE IF USERFG=1 AND JSW[11]=0 JMP I [SMCIF JMP I [MRETRN MESCPR, CLL CML JMP MESCAP+1 FGETW, 0 DCA FPUT FGETX, HLT TAD I FPUT CDF CIF 10 JMP I FGETW CDSWAP, 0 TAD ME1000 /FORM READ OR WRITE OPERATION DCA MCDCTL CDF 0 TAD I [JSBITS CDF 10 RTR SZL CLA /IS IT NECESSARY TO SAVE CORE? JMP I CDSWAP /NO CIF 0 JMS I [SHNDLR MCDCTL, 0 0 MTEMP+4 JMP MIOERR JMP I CDSWAP EOVFLO, CIF 0 JMS I [SHNDLR 0111 ME1000, 1000 /ENTER OVERLAY LOADS OVER ENTER (NATCH) MEOVLY JMP MIOERR JMP I ME1000 *400 /ASSIGN PROCESSOR - TRANSLATE DEVICE NAME INTO DEVICE NUMBER /(IF NECESSARY),GET DEVICE HANDLER INTO CORE(IF NECESSARY) /AND ADJUST TABLES(IF NECESSARY). IS THIS REALLY NECESSARY? MASGN, CLA IAC MASSIGN, DCA ASFLAG TAD MACARG SZA /IS DEVICE NUMERIC OR SYMBOLIC? JMP DFOUND /NUMERIC JMS I [FGET /GET HIGH ORDER 2 CHARS OF NAME ISZ I [MONITO SNA JMP I [MRTRN+1 /FIRST WORD OF NAME MUST BE NON-ZERO DCA NAME JMS I [FGET SNA /IS NAME >2 CHARACTERS LONG? JMP NOHASH /NO - DON'T HASH TAD NAME RAL CLL CML RAR /FORCE SIGN BIT OF HASH NAME ON DCA NAME NOHASH, TAD [UDNAME-1 /SEARCH USER NAME TABLE FIRST DSRCH, DCA XR TAD [-17 DCA T2 DSRCLP, TAD I XR CIA TAD NAME SNA CLA JMP DSFND ISZ T2 JMP DSRCLP TAD XR SMA CLA /WHICH TABLE DID WE JUST SEARCH? JMP I [MRTRN+1 /SYSTEM TABLE - ERROR TAD [SDNAME-1 JMP DSRCH /GO SEARCH SYSTEM TABLE DSFND, TAD T2 TAD [20 JMS I [FPUT /PUT NUMBER INTO CALLING SEQUENCE JMS I [FGET /GET IT BACK IN AC, BUMPING POINTER ISZ I [MONITO DFOUND, JMS I [MCKDEV /DETERMINE ITS VALIDITY (NON-ZERONESS) /AND FORM POINTERS SNA /IS THE DEVICE HANDLER IN CORE? TAD I T2 SNA /DOES A HANDLER EXIST FOR THE DEVICE? JMP I [MLNOTF /NO - SAME AS THE DEVICE NOT EXISTING CMA RAL /GET THE COMPLEMENT OF THE HIGH ORDER BIT INTO THE LINK SNL CLA /TWO PAGE HANDLER?(IF HANDLER IS IN CORE, /THIS TEST IS RANDOM BUT WE DON'T CARE) TAD [100 /YES - FORCE A TWO-PAGE READ TAD [100 DCA DVHCTL TAD T1 DCA T7 /SAVE T1 AS WE WILL DESTROY IT LATER TAD I T1 TAD ASFLAG SZA CLA /DOES HE ACTUALLY WANT US TO LOAD THE SILLY THING? JMP AFINIS /NO - HE MUST HAVE TASTE. JMS I [FGET /FETCH PAGE IN WHICH HANDLER IS TO BE LOADED RAR /GET THE LINK, WHICH HAS BEEN UNTOUCHED SINCE WE /PUT THE "TWO PAGE HANDLER" FLAG INTO IT SNL SMA /IF THIS HANDLER IS TWO-PAGE, IS HE ALLOWING IT TO BE? JMP I [MLNOTF /NO - GIVE AN ERROR RETURN RAL /YES - ROTATE BACK AND [7600 /MAKE IT LEGAL DCA DVHLOC JMS GETREC DCA DVHREC CIF 0 JMS I [SHNDLR DVHCTL, 0 /READ ONE OR TWO PAGES INTO FIELD 0 DVHLOC, 0 DVHREC, 0 JMP I [MIOERR /SYSTEM DEVICE ERROR /NOW GO THROUGH THE TABLE OF AVAILABE HANDLERS TAD [-17 /AND MARK OFF THOSE WHICH ARE NOW IN CORE DCA T4 DVHCLP, TAD T4 JMS I [MCKDEV /LOW ORDER BITS OF T4 GO THROUGH 1-17 CMA TAD DVHLOC CLL CML RAR TAD DVHCTL /IF A HANDLER ENTRY POINT IS WITHIN 200 WORDS OF THE SMA CLA /LOADING ADDRESS (400 FOR A TWO-PAGE HANDLER) DCA I T1 /MARK IT AS WIPED JMS GETREC CIA TAD DVHREC SZA CLA JMP NOTINC TAD I T2 AND [177 TAD DVHLOC DCA I T1 NOTINC, ISZ T4 JMP DVHCLP AFINIS, TAD I T7 JMP I [MRTRN /STORE HANDLER ADDRESS AND EXIT GETREC, 0 TAD I T2 /GET RECORD OF DEVICE HANDLER CLL RTL RTL RTL /EXTRACT THE RECORD NUMBER AND [17 TAD [DVHORG-1 /ADD THE BASE OF DEVICE HANDLER STORAGE JMP I GETREC MCKDEV, 0 /MUST PRESERVE LINK AND [17 SNA JMP I [MERROR /DEVICE 0 IS ILLEGAL DCA NAME TAD NAME TAD [SDVHND-1 /FORM POINTER INTO HANDLER IMAGE TABLE DCA T2 TAD NAME TAD [DVHNDL-1 DCA T1 TAD NAME TAD [DCB-1 DCA T8 /FORM POINTER TO DCB ENTRY FOR DEVICE TAD I T1 JMP I MCKDEV IFNZRO .-564 <REASSEMBLE CONFIG> SDNAME, ZBLOCK 17 /SYSTEM DNAME TABLE - SET UP BY "CONFIG" IFZERO .+200&1000 <*600> /LOOKUP PROCESSOR - GETS THE STARTING BLOCK OF AN INPUT FILE /ON A SPECIFIED DEVICE.SKIPS IF FILE WAS FOUND OR DEVICE /IS NOT FILE ORIENTED MLOOKUP,CLL /SET RDCAT MODE TO INPUT JMS MRDCAT JMP ERETRN /NON-FILE STRUCTURED DEVICE JMS MDSRCH /SEARCH THE DIRECTORY FOR THE FILE JMP MRTRN+1 /NOT FOUND - TAKE ERROR RETURN LRETRN, TAD T5 CIA TAD I [DORG /CONVERT T5 TO A RECORD NUMBER ERETRN, JMS I [FPUT ISZ I [MONITO TAD T6 CIA /STORE FILE LENGTH AS A NEGATIVE NUMBER MRTRN, JMS I [FPUT /THIS CODE IS JUMPED TO BY SEVERAL ROUTINES MRTRN2, ISZ I [MONITO JMP I [MLNOTF MRDCAT, 0 SZA JMP MRDREN /NOT THE FIRST SEGMENT - DON'T SET UP POINTERS DCA T5 /ZERO STARTING BLOCK NUMBER DCA T6 /ZERO FILE LENGTH TAD MACARG /GET DEVICE NUMBER FROM AC JMS I [MCKDEV /CHECK LEGALITY AND FORM POINTERS SNA JMP I [MERROR+1 /DEVICE HANDLER IS NOT IN CORE - ERROR DCA T9 /ADDRESS OF DEVICE HANDLER JMS I [FGET DCA T4 /STORE THE POINTER TO THE FILE NAME IN T4 SNL CML RAR RTR /FORM A MASK OF 2000 OR 1000 DEPENDING ON LINK AND I T8 SZA CLA /TEST FOR READ-ONLY(L=1) OR WRITE-ONLY(L=0) JMP MRTRN+1 /FAILED THE TEST - ERROR RETURN TAD I T8 SMA CLA JMP I MRDCAT /DEVICE IS NOT FILE-ORIENTED ISZ MRDCAT CLA IAC MRDREN, DCA MCATRC /STORE SEGMENT NUMBER TAD T9 /USE LOW ORDER BITS AND [177 /OF DEVICE HANDLER ENTRY POINT CLL RTL /AND THE REQUESTED SEGMENT NUMBER RAL /TO FORM A "UNIQUE" KEY TAD MCATRC /FOR THIS SEGMENT OF THIS DIRECTORY /(THE UNIQUENESS DEPENDS ON EACH HANDLER HAVING A DIFFERENT /STARTING OFFSET IN ITS PAGE) CIA TAD OLDT9 /COMPARE KEY AGAINST KEY OF CURRENT SEGMENT SNA /ARE THEY THE SAME? JMP INLRDY /YES - DON'T READ SEGMENT, ITS IN CORE CIA TAD OLDT9 DCA OLDT9 /STORE THE KEY OF THE NEW IN-CORE SEGMENT CLA CLL CML RAR /CHANGE WRITE TO READ JMS MWRCAT INLRDY, TAD I [DCOUNT CML CMA RAL SZL SPA JMP JMPME2 CMA CML RAR /NEW V3 DIRECTORY VERIFYER DCA NFILES /FIRST WORD IN CATALOG = -# OF FILES IN CATALOG TAD [DPROPR-1 DCA XR /SET XR TO POINT TO FIRST FILE ENTRY JMP I MRDCAT /RETURN TO BUMPED ADDRESS MDSRCH, 0 FSRCLP, TAD I XR SNA CLA /EMPTY SPACES HAVE A ONE WORD ZERO DIRECTORY ENTRY JMP SKPMTF /SO SKIP THE 4 WORD COMPARE ON THEM CLA CMA TAD XR DCA XR TAD [-4 DCA T6 TAD T4 DCA T7 SRCWDL, TAD T7 JMS I [FGETW CIA TAD I XR SZA CLA /COMPARE ENTRY AGAINST ARGUMENT(8 CHARACTERS) JMP NXTFIL ISZ T7 ISZ T6 JMP SRCWDL JMS BUMPXR /SKIP GARBAGE WORDS TAD I XR SNA JMP SKPMTF+1 /UNCLOSED OUTPUT FILES DONT COUNT CIA DCA T6 /STORE FILE LENGTH ISZ MDSRCH JMP I MDSRCH NXTFIL, TAD T6 IAC JMS BUMPXR /SKIP REST OF NAME AND GARBAGE WORDS SKPMTF, TAD I XR /GET LENGTH OF THIS ENTRY TAD T5 DCA T5 /ADD TO BLOCK STARTING ADDRESS ISZ NFILES JMP FSRCLP DCA T5 /RE-INITIALIZE BLOCK NUMBER FOR NEXT SEGMENT TAD I [DLINK /DIRECTORY EXHAUSTED - ANY MORE? SZA JMP MRDREN JMP I MDSRCH BUMPXR, 0 /ROUTINE TO SKIP (DWASTE+AC) WORDS TAD I [DWASTE CIA /DWASTE IS NEGATIVE AND SO IS AC TAD XR DCA XR JMP I BUMPXR MWRCAT, 0 TAD [4210 DCA CATCTL CIF 0 JMS I T9 CATCTL, 4210 /WRITE 2 RECORDS FROM FIELD 1 1400 MCATRC, 1 JMPME2, JMP I [MERROR+2 /CANNOT REWRITE CATALOG JMP I MWRCAT IFNZRO .-772 <REASSEMBLE CONFIG> /USED TO BE 766 SDVHND, ZBLOCK 17 /DEVICE HANDLER INFORMATION TABLE - SET BY CONFIG IFZERO 1000&. <*1000> /ENTER PROCESSOR FOR MONITOR /FIND A HOLE IN THE DIRECTORY LARGE ENOUGH TO ACCOMODATE THE FILE /AND STICK IT IN. MAKE A NOTE THAT WE DID SO FOR THE /"CLOSE" PROCESSOR. MENTER, DCA EPASS /SET UP FOR PASS 1 JMS I [MRDCAT /READ CATALOG AND SET UP NFILES AND XR JMP I [ERETRN /NON-FILE-STRUCTURED DEVICE JMS I [CONSOL DCA T2 /INTIIALIZE STARTING BLOCK NUMBER COUNTER TAD [DPROPR-1 DCA XR /RESTORE XR (CONSOLIDATOR DESTROYED IT) TAD MACARG CLL RTR RTR AND [377 /GET REQUESTED LENGTH FROM AC BITS 0-7 CIA DCA T3 /T3=REQUESTED LENGTH. IF T3=0, MEANS RETURN /LARGEST EMPTY SPACE ON TAPE. IF T3<>0, MEANS RETURN /SMALLEST BLOCK OF LENGTH =>T3. TAD I T8 /GET FCB ENTRY AND [7 SZA CLA /ANY ACTIVE TENTATIVE FILES ON THIS DEVICE? JMP I [MRTRN+1 /YES - TAKE ERROR RETURN MELOOP, TAD I XR SNA CLA JMP MEMPTY /EMPTY SPACE - LOOK AT LENGTH MTHREE /OCCUPIED - IGNORE JMS I [BUMPXR TAD I XR MELEND, TAD T2 DCA T2 /UPDATE T2 TO STARTING BLOCK # OF NEXT ENTRY ISZ NFILES JMP MELOOP /GO TO NEXT ENTRY /DIRECTORY BLOCK EXHAUSTED TAD EPASS SZA CLA /WHAT PASS ARE WE IN? JMP EFINUP /SECOND PASS - THIS IS FOR KEEPS TAD I [DLINK /FIRST PASS SZA /ANY MORE SEGMENTS? JMP I [MRDREN /YES - CONTINUE /DONE - SEE IF OUR BEST IS GOOD ENOUGH. TAD T4 JMS I [FGETW SZA CLA /CHECK THAT FIRST WORD OF NAME IS NON-ZERO TAD T6 SNA CLA /AND THAT WE FOUND WHAT WE WANTED JMP I [MRTRN2 /OTHERWISE GIVE ERROR RETURN TAD ASFLAG /GET NUMBER OF BEST SEGMENT ISZ EPASS /AND RESTART THE ALGORITHM IN PASS 2 JMP I [MRDREN /(TAKES LESS SPACE THAN SAVING XR AND NAME) /EVERYTHING IS SET UP - PERFORM THE ACTUAL ENTRY OPERATION EFINUP, TAD XR DCA T1 TAD [-4 JMS I [BUMPXR TAD I [DWASTE CIA TAD XR /CATALOG MUST HAVE ROOM FOR ONE MORE FILE TAD [-1772 /AFTER THIS FILE IS ENTERED SMA CLA /WILL NEW ADDITION OVERFLOW CATALOG? JMP I [EOVFLO /YUP - CALL OVERLAY TO EXTEND DIRECTORY MELP2, TAD I T1 /MOVE REST OF CATALOG UP DCA I XR /TO CREATE SPACE FOR NEW ENTRY CLA CMA TAD T1 DCA T1 CLA CMA CLL RAL TAD XR DCA XR TAD T1 CIA CLL CML TAD NAME SZA CLA /HAVE WE PUSHED UP EVERYTHING? JMP MELP2 /NO, KEEP PUSHING TAD [-4 DCA T1 /NOW MOVE THE USERS FILE NAME TAD NAME DCA XR TAD T4 JMS I [FGETW /[IN THE USERS FIELD, OF COURSE) DCA I XR ISZ T4 ISZ T1 /INTO THE EMPTY SPACE JUST CREATED JMP .-5 TAD I [MDATE /PUT DATE OF CREATION INTO FILE NAME DCA I XR /THIS WILL BE DESTROYED IF DWASTE=0 IAC /ADJUST XR BUMP BECAUSE OF DATE STORE JMS I [BUMPXR DCA I XR /GIVE THE NEWLY ENTERED FILE A LENGTH OF 0 TAD XR /PUT A POINTER TO THE LENGTH WORD OF THE DCA I [DFLAG /NEW ENTRY INTO THE DIRECTORY HEADER CLA CMA TAD I [DCOUNT DCA I [DCOUNT /INCREASE THE FILE COUNT BY 1 TAD I T8 TAD ASFLAG DCA I T8 /SIGNAL AN OPEN OUTPUT FILE ON THIS DEVICE JMS I [MWRCAT /WRITE THE ALTERED CATALOG BACK OUT JMP I [LRETRN /STORE ARGS BACK JUST LIKE "LOOKUP" MEMPTY, TAD I XR CIA CLL DCA T1 /SAVE LENGTH OF CURRENT ENTRY TAD T3 TAD T6 CLA /LINK NOW EQUALS BEST LENGTH>=DESIRED LENGTH TAD T3 SNA CML /IF DESIRED LENGTH=0 WE ALWAYS WANT MAXIMUM TAD T1 CLA CML /LINK IS NOW ON IF DESIRED LENGTH IS NOT IN BETWEEN /BEST LENGTH AND CURRENT LENGTH TAD T1 CIA TAD T6 SZL SNA CLA /TAKE EITHER MIN OR MAX OF BEST AND CURRENT LENGTHS, /DEPENDING ON WHETHER LINK IS ON OR OFF JMP MNOCHG /MIN(MAX)=BEST - NOTHING TO DO TAD T1 DCA T6 /MAKE CURRENT ENTRY NEW "BEST" CLA CLL CMA RAL TAD XR DCA NAME /REMEMBER CATALOG LOCATION TAD I [MCATRC DCA ASFLAG /ALSO DIRECTORY SEGMENT NUMBER TAD T2 DCA T5 /AND STARTING BLOCK NUMBER MNOCHG, TAD T1 CIA JMP MELEND /GO UPDATE THE BLOCK NUMBER /CLOSE PROCESSOR - CLOSES AN OUTPUT FILE WHICH WAS OPENED /BY THE "ENTER" CALL -- ARGUMENTS ARE THE DEVICE NUMBER AND THE /CLOSING LENGTH OF THE FILE. PERFORMS A DIRECTORY CLEANUP AFTER /CLOSING THE FILE. IF AN ENTRY ALREADY EXISTS WITH THE NEW FILE'S /NAME IT IS DELETED. (CLOSE MAY BE USED AS A "DELETE" COMMAND /ONLY IF NO OUTPUT FILE WAS ENTERED). AN ERROR RETURN IS /GIVEN IF THE CLOSING LENGTH IS TOO BIG OR IF THERE WAS NEITHER /AN ACTIVE TENTATIVE FILE OR AN OLD FILE TO DELETE. MCLOSE, JMS I [MRDCAT /GET THE CATALOG JMP CRETRN /NON-FILE STRUCTURED DEVICE - RETURN NORMALLY CLA IAC /GET THE NEXT WORD IN THE CALLING SEQUENCE JMS I [FGET DCA T1 /GET CLOSING LENGTH AND STORE IT AWAY JMS I [MDSRCH /SEARCH FOR THE OLD COPY JMP NODLET /NO OLD COPY MTHREE TAD I [DWASTE JMS SQUISH /SQUISH OUT 3+#WASTE WORDS OF THE OLD COPY DCA I XR2 /AND MAKE THE OTHER TWO INTO AN EMPTY TAD T6 /FILE ENTRY WITH THE SAME LENGTH CIA DCA I XR2 /AS THE OLD COPY TAD I T8 AND [7 SNA /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE JMP EOCLOS /NO - FINISH UP AND GET OUT CIA /GET THE SEGMENT NUMBER WE WANT TAD I [MCATRC SNA CLA JMP .+3 JMS CONSOL JMS I [MWRCAT /NO - WRITE OUT THE ONE WE SQUISHED TAD I [DFLAG /GET LOCATION OF TENTATIVE FILE CIA CLL TAD XR2 SZL CLA /IS THE ENTRY TO BE CLOSED ABOVE THE ONE JMP .+3 /WE JUST DELETED? MTHREE /YES - MOVE THE POINTER DOWN TAD I [DWASTE /TO COMPENSATE FOR THE SQUISHING TAD I [DFLAG /THE POINTER WILL NOW POINT DCA I [DFLAG /TO THE LENGTH WORD. /(THIS WAS WASTED WORK UNLESS THE CORRECT SEGMENT IS IN CORE) NODLET, TAD I T8 AND [7 SNA /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE? JMP I [MRTRN+1 /WHAT DID HE CALL US FOR? - ERROR JMS I [MRDCAT /YES - READ IN THE CORRECT SEGMENT TAD I [DFLAG DCA T4 /T4 POINTS TO THE LENGTH OF THE TENTATIVE ENTRY TAD T1 CIA /IF T1=0, NEW ENTRY WILL BE DELETED AUTOMATICALLY DCA I T4 /DURING CONSOLIDATION ISZ T4 ISZ T4 CLL CML TAD T1 TAD I T4 /SUBTRACT CLOSING LENGTH FROM FREE BLOCK ADJACENT TO ENTRY SNL SZA JMP I [MERROR+3 /THIS CREEP HAS GONE AND DESTROYED HIS TAPE DCA I T4 EOCLOS, JMS CONSOL /CONSOLIDATE THE DIRECTORY TAD [7770 AND I T8 DCA I T8 SKP CRETRN, TAD [7600 /DO A WRITE OF 0 PAGES. (MAGTAPE) JMS I [MWRCAT ISZ I [MONITO JMP I [MRTRN2 /CONSOLIDATOR - CHECKS FOR ENTRIES OF LENGTH 0 AND DELETES THEM. /ALSO CHECKS FOR ADJACENT FREE AREAS AND COMBINES THEM. CONSOL, 0 TAD [DPROPR-1 DCA XR TAD I [DCOUNT DCA T7 /T7 = FILE COUNT CONLP, TAD I XR SNA CLA /EMPTY FILE? JMP CONMTF /YES - GO CHECK FOR NULL AND 2 IN A ROW MTHREE JMS I [BUMPXR /GET PAST THE GARBAGE WORDS TAD I XR /GET COUNT SZA CLA /WOULD THIS HAPPEN TO BE A NULL FILE? JMP CONLPT /NAH, GO TO NEXT ONE TAD [-5 /YEAH, REMOVE IT ENTIRELY TAD I [DWASTE /INCLUDING THE WASTE WORDS SQCOMN, JMS SQUISH ISZ I [DCOUNT /BUMP DOWN FILE COUNT IN DIRECTORY ISZ NFILES /AS WELL AS THE TEMPORARY ONE IN PAGE 0 NOP /V3 RL INSISTS JMP CONSOL+1 /REPEAT ENTIRE CONSOLIDATION - THIS DELETION MAY /HAVE BROUGHT TWO FREE ENTRIES TOGEHER / THE ABOVE NOP FIXES THE KILLER CLOSE BUG CONLPT, ISZ T7 JMP CONLP /MORE FILES - KEEP PLUGGING JMP I CONSOL /RETURN FROM CONSOLIDATOR CONMTF, TAD I XR /IS THIS FREE ENTRY NULL? SNA JMP SQTRIV /YES - SQUASHITLIKEABUG DCA T2 /NO - SAVE LENGTH TAD XR DCA SQUISH /SAVE POSITION OF LENGTH WORD ISZ T7 /WAS IT THE LAST FILE? SKP /NO, THEN THERE IS ONE AFTER IT(GOOD THINKING!) JMP I CONSOL /YES - RETURN FROM CONSOLIDATOR TAD I XR SZA CLA /TWO EMPTIES IN A ROW? JMP CONLP+3 /NO - SLIP BACK INTO LOOP TAD I XR TAD T2 /YES - COMBINE LENGTHS DCA I SQUISH /STORE BACK IN FIRST LENGTH WORD AND SQUISH SECOND ENTRY SQTRIV, CLA CMA CLL RAL JMP SQCOMN /SQUISH OUT 2 WORDS MRESET, TAD [-17 DCA T3 MRSETL, TAD T3 JMS I [MCKDEV /LINK MUST BE ON AT THIS POINT TAD [200 SZL CLA /ZERO ALL DEVICE HANDLER SLOTS THAT AREN'T RESIDENT DCA I T1 JMS I [FGET SZA CLA TAD [7 CMA STL AND I T8 DCA I T8 /DELETE THE "FILE CURRENTLY OPEN" FLAG IF ASKED ISZ T3 JMP MRSETL JMP I [MNEXT /SUBR TO COLLAPSE DIRECTORY AFTER A POINT SQUISH, 0 TAD XR DCA XR1 CLA CLL CMA RAL TAD XR1 DCA XR2 /SET UP XR2 FOR CHANGING SQUISHED ENTRY SQLOOP, TAD I XR DCA I XR1 /MOVE DOWN ONE WORD TAD XR TAD [-1777 SZA CLA /AT END YET? JMP SQLOOP /NO, KEEP GOING JMP I SQUISH *1400 /INITIAL DIRECTORY FOR MONITOR /DEFINES OS/8 ABSOLUTE LOADER (ABSLDR.SV) DCOUNT, -2 /TWO ENTRIES DORG, MFREE /FILE STORAGE STARTS AT BLOCK "MFREE" DLINK, 0 /THIS IS THE ONLY DIRECTORY RECORD DFLAG, 0 /THERE ARE NO OPEN OUTPUT FILES ON THIS DEVICE DWASTE, -1 /# OF WASTED WORDS PER ENTRY DPROPR, 0102 /AB 2314 /SL 0422 /DR 2326 /.SV 3017 /V3D ENCODING FOR 1-JUN-77 -6 /SIX BLOCKS LONG( 1 BLOCK = 256 WORDS) 0 /EMPTY SPACE -1 /OVERLAYED BY DEVICE DEPENDENT PART WITH LENGTH IFNZRO .-1415 <CNFER,QQQ> *3400 /"ENTER" OVERLAY TO USR - RUNS IN 11000 JMP .+3 MSEGLM, -7 /# DIRECT. SEGS NEWLEN, -10 MEOVLP, TAD I [DLINK SNA CLA JMP MELAST /LAST SEGMENT - MUST CREATE A NEW ONE ISZ I [DCOUNT /BUMP ENTRY COUNT DOWN JMS I [MWRCAT /WRITE OUT THIS SEGMENT JMS MSKIPF /FIND END OF SHORTENED DIRECTORY DCA MEFCNT /PREPARE TO TRANSFER LAST ENTRY TAD (MEOVLS-1 DCA XR1 /INTO NEXT DIRECTORY SEGMENT TAD I XR DCA I XR1 ISZ MEFCNT /THROUGH A BUFFER AT LOC 11200 TAD XR CIA TAD T1 /T1 WAS SET UP BY "ENTER" SZA CLA JMP .-7 TAD I T1 /GET LENGTH OF MOVED ENTRY DCA MEOCNT TAD I [DLINK JMS I [MRDCAT /READ NEXT SEGMENT JMS I [CONSOL /MAKE SURE IT IS AT ITS SMALLEST TAD I [DORG TAD MEOCNT DCA I [DORG /BUMP FILE ORIGIN DOWN JMS MSKIPF /FIND LAST LOC IN NEW SEGMENT MELP3, TAD XR DCA METMP1 TAD XR TAD MEFCNT DCA METMP2 /PREPARE TO PUSH ALL ENTRIES UP TAD I METMP1 DCA I METMP2 /DO THE PUSHING STA TAD XR DCA XR TAD XR TAD (-DWASTE SZA CLA /ARE WE THROUGH? JMP MELP3 /NO TAD (MEOVLS-1 DCA XR /PREPARE TO MOVE THE SAVED ENTRY INTO THE CLA CMA /NEW SEGMENT TAD I [DCOUNT DCA I [DCOUNT /INCREASE ENTRY COUNT OF NEW SEGMENT TAD MEFCNT CIA MECOMN, DCA MEFCNT /STORE NUMBER OF WORDS TO MOVE TAD [DWASTE DCA XR1 TAD I XR DCA I XR1 ISZ MEFCNT JMP .-3 /MOVE THE ENTRY IN JMS MSKIPF TAD XR DCA T1 /T1=LAST LOC IN SEGMENT TAD I [DWASTE CIA TAD XR TAD [-1772 SMA CLA /HAVE WE MADE THIS SEGMENT TOO BIG? JMP MEOVLP /YES - LOOP UNTIL WE GET IT RIGHT JMS I [MWRCAT /WRITE OUT NEW SEGMENT JMP MEOXIT /READ IN ENTER AND CONTINUE MWRONG, IAC MELAST, TAD NEWLEN DCA METMP1 /LENGTH OF NEW SEGMENT TAD METMP1 CIA TAD I [DCOUNT SMA /WERE THERE "NEWLEN+1" JMP MWRONG /NO - SET OUR SIGHTS LOWER DCA I [DCOUNT /ADJUST LENGTH OF OLD SEGMENT JMS MSKIPF /FIND BOUNDARY LOC BETWEEN SEGMENTS TAD I [MCATRC IAC DCA I [DLINK /LINK THE OLD LAST SEGMENT TO TAD I [DLINK /THE NEWLY CREATED ONE TAD MSEGLM SMA CLA JMP I (MEOERR /PROVIDED THAT THERE IS ROOM FOR ANOTHER JMS I [MWRCAT /WRITE OUT THE NEXT-TO-LAST SEGMENT ISZ I [MCATRC /BUMP RECORD NUMBER FOR NEXT WRITE ISZ OLDT9 /LIKEWISE BUMP DIRECTORY KEY TAD METMP1 DCA I [DCOUNT TAD MEOCNT CIA TAD I [DORG DCA I [DORG /SET UP PARAMETERS OF THE NEW SEGMENT DCA I [DLINK /MARK IT AS THE NEW LAST SEGMENT TAD XR TAD [-1777 /SET UP COUNT OF WORDS TO SLIDE DOWN JMP MECOMN /USE COMMON CODE TO SLIDE WORDS AND EXIT MSKIPF, 0 /SUBR TO FIND LAST LOC USED IN A SEGMENT /ALSO FINDS NUMBER OF BLOCKS USED BY SEGMENT TAD I [DCOUNT DCA MNOFIL TAD [DWASTE DCA XR DCA MEOCNT /INITIALIZE POINTER(XR) AND COUNT(MEOCNT) MSKPLP, TAD I XR SNA CLA JMP MEOMTY MTHREE TAD I [DWASTE /BUMP POINTER TO LENGTH WORD OF FILE ENTRY CIA TAD XR DCA XR MEOMTY, TAD I XR TAD MEOCNT DCA MEOCNT ISZ MNOFIL JMP MSKPLP JMP I MSKIPF MEOCNT, 0 MEFCNT, 0 METMP1, 0 METMP2, 0 MNOFIL, 0 MEOVLS=1200 /DESTROYS PART OF "CLOSE" OP FOR BUFFER PAGE EJECT ABSLDR /ABSOLUTE LOADER FOR OS/8 - VERSION 4A *2000 CTLBLK=3400 BUFFER=CTLBLK RXM=6230 /KT8A INSTRUCTION LXM=6200 /KT8A INSTRUCTION XVALU=70 /XCODE XFIELD=20 ORIGIN=21 B1=22 B2=23 B3=24 C1=25 C2=26 C3=27 WD=30 WD1=31 WD2=32 FILPTR=33 PG7400=34 LSTFLD=35 LOADXR=11 ABSLDR, JMS I (CTINIT JMS I (CTINIT JMP CALLCD JMP NOCD NEXTCD, JMS I (NEXFIL CALLCD, JMS I [200 5 /COMMAND DECODE 0216 /ASSUMED EXTENSION IS .BN NOCD, TAD [6001 CDF 0 DCA I [JSBITS /SET JSBITS TO SAVE CD AREA NEXT TIME CDF 10 TAD I [MPARAM+1 AND [100 SZA CLA /IS /R SWITCH ON? JMS I (CTINIT /YES - RE-INITIALIZE LOADER TABLES LD7400, 7400 TAD (MIFILE DCA FILPTR JMS I (SETADR /GET THE STARTING ADDRESS IF IT APPEARS ON THE LINE NEWFIL, TAD (7001 DCA HANDLR TAD I FILPTR AND [7760 SZA /LENGTH OF 256 BLOCKS IMPLIES AT LEAST 256 TAD [17 CLL CML RTR RTR DCA RCDCNT TAD I FILPTR ISZ FILPTR SNA JMP NEXTCD /FILE POINTER = 0 MEANS NO MORE INPUT FILES JMS I [200 1 /ASSIGN HANDLR, 7001 /LOAD INTO 7000 IF NOT ALREADY LOADED JMP I (IOERR TAD I FILPTR DCA RECNO ISZ FILPTR CLA CMA DCA CHCNT DCA REOF TAD I [MPARAM /TEST FOR /I AND (10 SNA CLA JMP I (LOADER /I IS NOT ON ISZ OFLG /IS /I ALLOWED? JMP I (OERR /NO! JMP I (SLASHO GETCH, 0 /GET-NEXT-INPUT-CHARACTER ROUTINE TAD [200 KRS TAD (-203 SNA CLA KSF SKP JMP I (MGET ISZ JMPGET ISZ CHCNT JMPX, JMP JMPGET TAD REOF SZA CLA JMP I GETCH /EOF REACHED BEFORE LOGICAL END - ERROR CIF 0 JMS I HANDLR 0210 /READ 2 RECORDS INTO FIELD 1 PBUFFR, BUFFER RECNO, 0 JMP RERROR ISZ RECNO ISZ RCDCNT SKP ISZ REOF TAD (-601 DCA CHCNT TAD PBUFFR DCA CHPTR TAD JMPX DCA JMPGET JMP GETCH+1 JMPGET, JMP . JMP CHAR1 JMP CHAR2 CHAR3, TAD JMPX DCA JMPGET TAD I CHPTR AND LD7400 CLL RTR RTR TAD CHTMP RTR RTR ISZ CHPTR JMP GCHCOM CHAR2, TAD I CHPTR AND LD7400 DCA CHTMP ISZ CHPTR CHAR1, TAD I CHPTR GCHCOM, AND (377 ISZ GETCH JMP I GETCH RERROR, SPA CLA JMP I (IOERR /AN ACTUAL READ ERROR - AMAZING! ISZ REOF JMP RECNO+2 REOF, 0 CHCNT, 0 CHPTR, 0 CHTMP, 0 RCDCNT, 0 OFLG, -1 /SWITCH FOR /O OPTION PAGE *2200 PUTWD, 6601 /ABSLDR VERSION NUMBER CMA AND I B2 /AND OUT THE PAGE SLOT IN THE PAGE TABLE DCA I B2 TAD ORIGIN DCA ORGX TAD XVALU CLL RAR SZA CLA /TEST FOR FIELDS 0 OR 1 JMP PUTIT /NEITHER - STORE AS IS SNL JMP FLD0 TAD ORIGIN SPA TAD [-400 SPA CLA JMP FLD1 CLA CLL CML RTR TAD ORIGIN SMA CLA JMP .+3 ISZ I (OVLYFG /SET FLAG THAT LOADER IS BEING OVERLAYED TAD (2400 /LOADER OVERLAYS GO IN MTEMP+11 - MTEMP+14 LCOMPR, TAD ORIGIN RTL RTL RAL AND [17 TAD (MTEMP RLCOMN, DCA PGTMP TAD BUFREC CIA TAD PGTMP SNA CLA JMP DONTWR JMS WRBUF WRIBUF, CLA /MODIFIED..IF NOT /O GETS SZA CLA JMP DONTWR CIF 0 JMS I [SHNDLR 0210 1400 /USE CATALOG SPACE PGTMP, 0 JMP I (LIOERR DONTWR, DCA OLDT9 /MARK THE CATALOG DESTROYED TAD PGTMP DCA BUFREC TAD ORIGIN AND [377 TAD PTRBFR DCA ORGX CDF 10 JMP PUTIT2 FLD1, CLL TAD ORIGIN /IGNORE LOCATIONS ABOVE 17600 TAD [200 SZL CLA JMP I PUTWD PUTIT, TAD XFIELD TAD (6201 DCA .+1 M7, -7 PUTIT2, TAD C3 DCA I ORGX CDF10, CDF 10 JMP I PUTWD FLD0, TAD ORIGIN /CHECK FOR STUFF IN PAGE 7000 TAD (1000 SNL CLA /IF NON ZERO,OVERLAY JMP PUTIT ISZ PG7400 /SET OVERLAY FLAG JMP LCOMPR /FORM RECORD NO. WRBUF, CALONC TAD BUFREC SNA JMP I WRBUF CIF 0 JMS I [SHNDLR 4210 PTRBFR, 1400 BUFREC, 0 JMP I (LIOERR DCA BUFREC /BAD I/O ON SYSTEM DEVICE JMP I WRBUF ORGX, NEXFIL, ERTRN JMS WRBUF /WRITE WHATEVER TAD I [MPARAM-1 SPA CLA JMP I (BUILD TAD I [MPARAM AND (40 SZA CLA JMP I (BUILD JMP I NEXFIL CORTB, ZBLOCK 30 /ONCE-ONLY CODE INSERTED HERE KATER ZBLOCK 2 /EXTRA NEEDED BY ONCE-ONLY CODE /NOT USED BY CORE TABLE PAGE *2400 ITSOVR, JMS ASSEMB /END OF FILE CIA TAD LCKSUM SZAIN, SZA CLA /TEST CHECKSUM JMP I (BADCKS TAD I [MPARAM+1 /TEST FOR S OPTION AND L40 SNA CLA JMP I (NEWFIL /TIME FOR ANOTHER FILE LOADER, DCA LCKSUM / DCA I (OFLG /CANCEL FURTHER /I'S TAD SZAIN DCA I (WRIBUF JMS GETFLD /FIELD SETTING /DCA XFIELD TAD [200 DCA ORIGIN /ORIGIN SETTING JMS I (GETCH JMP I (NEWFIL SNA /IGNORE ZEROES JMP .-3 TAD [-200 /LOOKING FOR LEADER CODE SZA CLA JMP LOADER+1 LEADER, JMS I (GETCH JMP I (NEWFIL SNA JMP LOADER+1 TAD [-200 SNA /IS IT LEADER CODE? JMP LEADER NEWWD, SMA /IS IT POSSIBLY AFIELD PSEUDO-OP? JMP FIELDW TAD [200 /IF NOT STORE FOR ASSEMBLING DCA WD1 NEWD1, DCA I (HT JMS I (GETCH JMP I (BADINP DCA WD2 /STORE SECOND WORD FOR ASSEMBLING JMS I (GETCH JMP I (BADINP TAD [-200 SNA /TEST FOR TRAILER CODE JMP ITSOVR DCA WD /STORE THIRD WORD JMS ASSEMB SNL JMP DATAWD DCA ORIGIN DCA I (LOADWD /ZERO 'DATA LOADED' FLAG V3 JMP GETNXT DATAWD, JMS I (LOADWD ISZ ORIGIN L40, 40 GETNXT, TAD WD1 TAD WD2 TAD LCKSUM DCA LCKSUM TAD WD JMP NEWWD ASSEMB, 0 /ASSEMBLING WORDS... TAD WD1 CLL RTL RTL RTL TAD WD2 JMP I ASSEMB FIELDW, TAD (-32 /TESTING TO ISOLATE FIELD PSEUDO-OP SNA /IS IT A CONTROL/Z? JMP CTLZ TAD (-46 SPA /IS IT GREATER THAN 300? JMP NOTXP DCA WD1 TAD WD1 AND [7 SZA CLA JMP NOTXP TAD WD1 AND (70 ISZ I (HT /I.D. DISTINGUISHES BETWEEN GETFLD & FIELDW CALL JMS I (XTEND /GO SEARCH FOR GREATER THAN 32K FIELD SETTING /DCA XFIELD JMS I (GETCH JMP I (BADINP TAD [-200 SZA JMP NEWWD NOTXP, CLA TAD LCKSUM SNA CLA JMP LOADER JMP I (BADINP LCKSUM, 0 CTLZ, TAD LCKSUM SZA CLA JMP I (BADINP JMP I (NEWFIL GETFLD, 0 /TEST FOR SPECIFIED FIELD SETTING DCA C1 DCA XVALU /INITIALIZE XVALU TAD I (MPARAM+2 /COMMAND DECODER INPUT AND (1774 SNA /WAS FIELD SPECIFIED? JMP I GETFLD RTL /IF SO, WHAT WAS IT? RAL ISZ C1 SNL JMP .-3 CLA CMA TAD C1 /FIELD...IS HERE JMS I (XTEND /MAKE NECESSARY ADJUSTMENTS(KT8A) JMP I GETFLD PAGE *2600 /BUILD CORE CONTROL BLOCK /FIELDS AND PAGES TO BE SAVED HAVE BEEN ISOLATED /BY LOADWD.SEE CORTAB FOR MORE INFO ON TABLE. BUILD, TAD (CORTAB+135 /ROUTINE TO SEARCH SAVE TABLE DCA B1 TAD I (CORTAB+3 CLL CMA AND [7760 SNA CLA CML TAD I (CORTAB CMA AND [7760 SNA CLA IAC RTR DCA I (CTLBLK+3 TAD (CTLBLK+3 DCA LOADXR TAD [-40 DCA C1 TAD [70 CLA TAD (37 DCA FIELDB DCA I (CTLBLK FLDLP, TAD FIELDB TAD (-2 SMA CLA /IGNORE 07600 AND 17600 IN CCB /V3 CMA /IN THE CORE MAP TAD [-37 DCA C2 DCA LOWERA MTLOOP, JMS I (SHFT SNL CLA JMP INUSE TAD LOWERA MTRSME, TAD [200 DCA LOWERA ISZ C2 JMP MTLOOP JMP FLDOVR INUSE, TAD LOWERA TAD [200 DCA UPPERA ISZ C2 SKP JMP ENDRGN-2 JMS I (SHFT SZL CLA JMP ENDRGN TAD UPPERA JMP INUSE+1 CLA CMA DCA C2 ENDRGN, TAD LOWERA AND [7400 DCA I LOADXR ISZ I (CTLBLK TAD LOWERA AND [7400 CIA TAD UPPERA CLL RAR TAD XFB DCA I LOADXR TAD UPPERA JMP MTRSME XFB, 0 FLDOVR, JMS I (EXTST TAD I [MPARAM+1 /CLOBBER BATCH? AND [400 TAD I (MPARAM+2 /AH ED, BUG IF YOU SPEC /P/1 TO LOADER AND (403 TAD I (CTLBLK+3 DCA I (CTLBLK+3 TAD LSTFLD AND (37 JMS I (BANKSW /ADJUST FOR CDF TAD [CDF CIF 0 DCA I (CTLBLK+1 SKP ORG200, TAD [200 TAD LSTADR SZA /V3 JMP NOORG /V3 ALLOW EXPLICIT START ADDR TO OVERRIDE DEFAULT TAD I (LOADWD /V3 NO EXPLICIT START ADDR CLA /REPLACE BY 'SZA CLA' TO ALLOW SELF-STARTING STUFF /* SZA CLA /V3 IS IT SELF STARTING BIN FORMAT? JMP ORG200 /V3 NO TAD XFIELD /V3 YES TAD [CIF CDF 0 /V3 DCA I (CTLBLK+1 /V3 TAD I (ORIGIN /V3 NOORG, DCA I (CTLBLK+2 JMP I (LGTOUT /WRITE CONTROL BLOCK AND EXIT FIELDB, 0 UPPERA, SETADR, 0 TAD I (MPARAM+3 SNA /IS THERE A STARTING ADDRESS SPECIFIED? JMP I SETADR /NO DCA LSTADR TAD I [MPARAM-1 DCA LSTFLD JMP I SETADR LOWERA, 0 LSTADR, 0 PAGE *3000 ZOFILE, MOFILE ZOUCNT, -47 LGTOUT, TAD PG7400 SNA CLA JMP .+7 CIF 0 JMS I [SHNDLR 0300 7000 MTEMP+16 JMP I (LIOERR CIF 0 JMS I [SHNDLR 4210 CTLBLK-200 MTEMP+10 JMP I (LIOERR TAD I (CTLBLK+2 DCA CTL2 /MOVE THINGS INTO THIS PAGE TAD I (CTLBLK+3 DCA CTL3 /SO WE CAN REFERENCE THEM WITH DF=0 TAD I [MPARAM AND (40 SNA CLA JMP LNOGO TAD CTL3 RAL SPA CLA /ARE WE OVERLAYING THE I/O MONITOR? JMP LKICKM /NO CDF 0 DCA I [JSBITS /YES - SET JSBITS TO FORCE A READ CDF 10 JMS I [200 13 /RESET I/O DEVICES AND FILES LKICKM, JMS I [200 11 /KICK MONITOR OUT /******************************************** /NO PAGE ZERO REFERENCES AFTER THIS POINT /PAGE ZERO MAY CONTAIN USER CODE /******************************************** DCA I ZOFILE /ZERO OUT COMMAND DECODER AREA ISZ ZOFILE ISZ ZOUCNT JMP .-3 TAD I (CTLBLK+1 CDF 0 DCA I (MSTCDF TAD CTL2 DCA I (MSTADR /SET UP STARTING ADDRESS IN FIELD 0 JMP LMOVRD LNOGO, TAD CTL3 /ABOVE COMMENT DOESN'T APPLY TO NEXT 9 LINES SPA CLA /ARE WE OVERLAYING THE KEYBOARD MONITOR? TAD (5 /NO - RETURN TO NON-SAVING ENTRY TAD [7600 CDF 0 DCA I (MSTADR TAD ZCDIF0 DCA I (MSTCDF CLA CMA LMOVRD, CDF 10 DCA I (7700 /SET 7700 TO -1 IF NO GO TAD I (CTLBLK+1 CDF 0 DCA I (JFIELD /SET UP PARAMETERS IN FIELD 0 TAD CTL2 DCA I (JSTART TAD CTL3 DCA I (JSBITS LMOVLP, TAD COMBO DCA I COMBPT ISZ LMOVLP ISZ COMBPT ISZ COMBCT JMP LMOVLP /MOVE THE READ OF THE LOADER OVERLAY INTO FIELD 0 ZCDIF0, CDF CIF 0 TAD OVLYFG SZA CLA JMP I (MREAD /LOADER OVERLAYED - GO READ OVERLAY JMP I (MSTCDF /LOADER NOT OVERLAYED - WHY READ? COMBPT, MREAD-1 COMBCT, -7 COMBO, 7607 MREAD-1&177+4600 /JMS I .-1 1210 2000 MTEMP+11 /LOCATION OF SCRATCH BLOCKS FOR LOADER OVERLAY HLT MSTCDF&177+5200 /JMP MSTCDF CTL2, 0 CTL3, 0 OVLYFG, 0 /LOADWD CALCULATES AN INDEX INTO CORTAB /IT SETS APPROPRIATE BITS FOR IDENTIFYING MEMORY AREA /TO BE SAVED BY CCB.SEE CORTAB FOR MORE INFO LOADWD, 0 /ROUTINE TO IDENTIFY FIELDS AND PAGES DCA C3 /TO BE SAVED. TAD XVALU /FIELD VALUE-INDEX INTO CORTAB(SEE CORTAB) CLL RAL TAD XVALU TAD (CORTAB-1 DCA B2 TAD ORIGIN AND [7600 CLL RTL RTL RTL ISZ B2 TAD (-14 SMA JMP .-3 DCA CTL2 CLL CML RAL ISZ CTL2 JMP .-2 JMS I (PUTWD JMP I LOADWD PAGE *3200 ERPCH, 0 AND (77 /GET LOW ORDER 6 BITS SZA JMP NZCHAR JMS ERR FILMSG, TEXT /, FILE 0/ NZCHAR, TAD (240 AND (77 TAD (240 /CONVERT TO ASCII JMS LDRPCH /PRINT JMP I ERPCH /AND RETURN LDRPCH, 0 TLS TSF JMP .-1 CLA JMP I LDRPCH SHFT, 0 CLA CLL CMA RTL DCA C3 CLA CLL CML RTL TAD B1 SHFTLP, DCA B3 TAD I B3 RAL DCA I B3 CLA CMA CML TAD B3 ISZ C3 JMP SHFTLP JMP I SHFT /NOTE: SHFT LEAVES AC NON-ZERO ERR, ONCE /CAN'T USE PAGE 0 LITERALS CLA CDF 10 TAD I (FILPTR /ZERO CHAR GETS REPLACED BY "FILE #" TAD (322 /MAGIC NUMBER CLL CML RAR /AC NOW CONTAINS " #" DCA FILMSG+3 ERRLUP, TAD I ERR SNA JMP EOMESG /MESSAGE MUST BE EVEN NUMBER OF CHARS LONG RTR RTR RTR JMS ERPCH TAD I ERR JMS ERPCH ISZ ERR JMP ERRLUP EOMESG, TAD (215 /TERMINATE MESSAGE WITH CR-LF JMS LDRPCH TAD T212 JMS LDRPCH ERTRN, JMP I (ABSLDR /RETURN TO LOADER STARTING ADDRESS IOERR, JMS ERR TEXT %I/O ERROR% BADINP, JMS ERR TEXT /BAD INPUT/ BADCKS, JMS ERR TEXT / BAD CHECKSUM/ NULERR, JMS CTINIT T212, 212 JMS ERR TEXT /NO INPUT/ LIOERR, JMS ERR TEXT /SYSTEM I-O ERROR/ OERR, JMS ERR TEXT %NO /I!% CTINIT, 0 CALONC, JMS I ERR /CALL ONCE-ONLY CODE TAD (-140 DCA C1 DCA XFIELD /INITIALIZE XFIELD TAD (CORTAB-1 DCA LOADXR CLA CMA DCA I LOADXR ISZ C1 JMP .-3 DCA LSTFLD DCA I (LSTADR /V3 SET INITIAL STARTING ADDRESS TO 0 DCA I (OVLYFG DCA PG7400 ISZ CTINIT JMP I CTINIT PAGE *CTLBLK+200 /CODE FOR OVERLAY OPTION IS HERE.IF /I IS NOT /USED IMMEDIATELY, THIS CODE WILL PROBABLY BE DESTROYED, /AS IT IS USED FOR A BUFFER SLASHO, CLA CMA DCA I (OFLG /RE ENABLE /I TAD I (HANDLR DCA GLONK /ENTRY POINT TO HANDLER TAD I (RECNO DCA CCBLOK CIF 0 JMS I GLONK /READ IN CORE CONTROL BLOCK 0110 CCBPTR, CTLBLK CCBLOK, 0 JMP I (OERR /DATA FAILURE TAD I CCBPTR /NO. SEGMENTS CMA /TEST FOR BAD CORE IMAGE AND L7740 SZA CLA JMP I (BADINP /NOT CORE IMAGE TAD I CCBPTR DCA SEGCNT TAD I SGSTAD /THIS CODE IS NEW FOR V3D / AND [70 /GET FIELD CLL RTR RAR DCA I (LSTFLD ISZ SGSTAD TAD I SGSTAD DCA I (LSTADR ISZ SGSTAD TAD I SGSTAD /GET JSW FROM SAVE FILE AND [400 DCA TEMP /PRESERVE /P TAD I [MPARAM+1 AND (7377 TAD TEMP DCA I [MPARAM+1 TAD I SGSTAD AND (3 /PRESERVE LAST 2 BITS DCA TEMP TAD I (MPARAM+2 AND [7774 TAD TEMP DCA I (MPARAM+2 ISZ SGSTAD NEWSEG, TAD I SGSTAD /SEGMENT START ADDRESS DCA ORIGIN TAD I SGFDLT /FIELD AND LENGTH AND L77 DCA XFIELD TAD I SGFDLT AND [7700 SNA /V3C STL CLA RAR /AC4000 DCA SEGLTH TAD SEGLTH TWOPG, TAD [7600 SMA CLA /NO.. IS TWO PAGE SEGMENT LEFT? TAD [7600 /YES..-400 TO WORD COUNT TAD [7600 /NO.. -200 TO WORD COUNT DCA WDCT TAD SEGLTH TAD [7600 /BUMP DOWN LENGTH LEFT DCA SEGLTH ISZ CCBLOK /POINT TO NEXT DATA RECORD TAD CCBLOK DCA DATRC DCA OLDT9 /MARK DIRECTORY DESTROYED CIF 0 JMS I GLONK /READ THE DATA RECORD IN 0210 1400 /INTO 11400 TEMP, DATRC, 0 JMP I (IOERR /DATA FAILURE CLA CMA TAD ORIGIN AND [177 TAD (1200 /SET UP INPUT POINTER CHARPT=10 DCA CHARPT LOOPI, TAD I CHARPT JMS I (LOADWD /MOST OF THE WORK ISZ ORIGIN L7400, 7400 /NOP ISZ WDCT /FINISHED THIS BLOCK? JMP LOOPI JMS I (WRBUF /YES.. WRITE THE STUFF OUT DCA I (BUFREC /SO THAT WRBUF DOESN'T SCREW US UP TAD SEGLTH /V3C (REARRANGED) SMA SZA /ALL PAGES DONE? JMP TWOPG /NO, NEXT! (IF DONE, FALL INTO 'GTSEG') ISZ SEGCNT /YES, ANY MORE SEGMENTS SKP JMP RENEW /RESET CCB POINTER FOR NEXT /I CLA CLL CML RTL TAD SGSTAD DCA SGSTAD CLA CLL CML RTL TAD SGFDLT DCA SGFDLT /POINT TO NEXT CCB ENTRIES JMP NEWSEG GLONK, 0 /HANDLER ENTRY POINT HERE WDCT, 0 SEGCNT, 0 SEGLTH, 0 CTLBLK=3400 SGFDLT, CTLBLK+5 /FIELD AND LENGTH WORD SGSTAD, CTLBLK+1 /SEGMENT START ADDRESS L7740, RENEW, 7740 /USED TO CLEAR AC L77, 77 /MIGHT OR MIGHT NOT SKIP TAD (CTLBLK+1 DCA SGSTAD TAD (CTLBLK+5 DCA SGFDLT JMP I (NEWFIL PAGE *4000 XTEND, 0 /CODE TO HANDLE EXTENDED MEMORY BANK MANIPULATIONS DCA XVALU /STORE INFO TO BE PROCESSED TAD HT /IS IT A GETFLD OR A FIELDW CALL? SZA CLA /IF GETFLD CALL ALL WE WANT TO DO IS TRANSFORM JMP XFLDT XNDT, TAD XVALU / TRANSFORM FROM ABCDE TO ACDEB00 JMS BANKSW DCA XFIELD JMP I XTEND XFLDT, JMS I (GETCH /FIELDW CODE TEST FOR SECOND FIELD WORD JMP I (BADINP TAD [-200 SNA JMP I (NOTXP SMA JMP XTD TAD [200 /REPEATED NEWWD CODE DCA WD1 /REPEATED NEWWD CODE TAD XVALU /IF NO SECOND FIELD WORD WE PROCEED AS NORMALLY DCA XFIELD TAD XVALU CLL RTR RAR DCA XVALU JMP I (NEWD1 /BY PASS NEWWD CODE -- ALREADY RAN IT XTD, TAD (-32 /REPITITION OF FIELDW CODE SNA /IS IT CONTROL/Z? JMP I (CTLZ TAD (-46 SPA /IS IT ABOVE 300? JMP I (NOTXP CLL RTR RAR AND [7 TAD WD1 DCA XVALU TAD (7000 LXM JMP XNDT HT, 0 EXTST, 0 /BUILD CCB CODE TO HANDLE EXTENDED MEMORY TAD I (FIELDB /PREVIOUSLY KNOWN AS FLDOVR CODE TAD (-1 /TRANSFORM THE BITS FROM DCA I (FIELDB /ABCDE FORM TO CDEBA FORM TAD I (FIELDB CLL RTR RTR SZL TAD (400 CLL RAR SZL TAD (100 CLL RTR RTR RAR DCA I (XFB CLA CLL CMA RTL TAD I (B1 DCA I (B1 ISZ I (C1 JMP I (FLDLP TAD I (CTLBLK SNA JMP I (NULERR CIA DCA I (CTLBLK RXM SNA CLA JMP I EXTST TAD I (CTLBLK RAL CLL RAR DCA I (CTLBLK JMP I EXTST BANKSW, 0 CLL RTR /ISOLATE BANK AND FIELD BITS RTR SZL /ADJUST FOR PROPER CDF CIF TAD [400 /WAS THERE AN "A" BIT? CLL RAR SZL /WAS THERE A "B" BIT? TAD (4000 CLL RTR RTR RAR JMP I BANKSW PAGE *4200 /CORTAB IS A TABLE FOR STORING SAVE INFO /FOR EACH OF THE 0-37 FIELDS, THERE ARE THREE /IDENTIFYING WORDS...THE BITS IN THESE WORDS /CORRESPOND TO PAGES IN THE RESPECTIVE FIELD /E.G. CORTAB+130 REFERS TO 130%3=35TH FIELD /--- FIRST WORD,I.E. PAGES 0-14... /LOADWD BUILDS THE TABLE... /BUILD REFERENCES IT FOR CONSTRUCTING THE CCB CORTAB, ZBLOCK 140 PAGE *CORTB /ONCE-ONLY CODE ONCE, 0 /ONCE-ONLY CODE TO CHECK FOR CORRECT MONITOR DCA I WRBUF /DON'T CALL AGAIN TAD [400 TAD K7400 SZA CLA JMP OLDMON TAD [7 TAD M7 SNA CLA JMP I ONCE /THEY AGREE OLDMON, TAD KERR DCA I NEXFIL JMS I PERR /THEY DON'T TEXT /INCOMPATIBLE/ /MUST BE AN EVEN # OF CHARS LONG CIF CDF 0 JMP I K7605 K7400, 7400 PERR, ERR K7605, 7605 KERR, ERR&177+5600 /PAGE 0 - TEMPORARIES AND LITERALS. /LOCATIONS 0-3 ARE RESERVED FOR POINTERS TO KEY LOCATIONS /IN THE MONITOR (SO THE CUSPS CAN GET AT THESE LOCATIONS) /LOCATIONS 4-6 ARE RESERVED FOR SYSTEM ODT FIELD 1 BREAKPOINTS *7 OLDT9, 0 /POINTER TO DEVICE HANDLER OF DIRECTORY IN CORE *15 XR1, 0 XR2, 0 XR, 0 *20 /ENTRY TO MONITOR FROM A CALL TO 17700 - /CAN BE DESTROYED AFTER IT IS EXECUTED MSTART, TAD I T1 DCA MACARG TAD I [7700 DCA I [MONITO TAD I [SMCIF DCA I T2 /FAKE A CALL TO "MONITO" TAD I [MONITO RAL SNL SMA CLA TAD I [SMCIF TAD T3 SNA CLA /CHECK FOR A CALL FROM 10000-11777 JMP I [MERROR /YES - GIVE ERROR IMMEDIATELY JMP I T4 /NO - SLIDE INTO MONITOR CODE *36 /POINTERS TO INTERNAL MONITOR LOCATIONS FOR "BUILD" SDNAME /SYSTEM DEVICE NAME TABLE SDVHND /DEVICE HANDLER ENTRY TABLE *40 /LOCATIONS 20-37 RESERVED FOR CUSP SCRATCH SPACE USERFG, 1 /MUST BE IN 40 - SEE CD LISTING T1, MARG1 /MUST BE AT 41 T2, FGETX T3, -6213 T4, MRENTR T5, 0 T6, 0 T7, 0 T8, 0 T9, 0 NAME, 0 NFILES, 0 ASFLAG, 0 MACARG, 0 EPASS, 0 MERRNO, 4000 MEOXIT, CIF 0 /RETURN FROM ENTER OVERLAY JMS I [SHNDLR 0210 1000 MONTOR+2 /RESTORE LOCS 1000-1377 OF USR HLT /HELP! JMP I .+1 MENTER /RESTART ENTER OPERATION COMPLETELY $ |
Added src/os8/v3f/RESORC.BI.
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | $JOB ASSEMBLE AND LINK RESORC.MA .MAC OUT:RESORC<IN:RESORC.MA .MAC OUT:RESOV0<IN:RESOV0.MA .MAC OUT:RESOV1<IN:RESOV1.MA .MAC OUT:RESOV2<IN:RESOV2.MA .MAC OUT:RESOVD<IN:RESOVD.MA .LINK OUT:RESORC,RESOV0,RESOV1,RESOV2,RESOVD/9/S=12000 .DEL OUT:RESO??.RB .COPY OUT:RESORC.SV<DSK:RESORC.SV .DEL DSK:RESORC.SV $END |