Index: bin/tc08.mkos8 ================================================================== --- bin/tc08.mkos8 +++ bin/tc08.mkos8 @@ -1,14 +1,49 @@ -# Builds a bootable TC08 dectape image -# With pieces taken from os8v3d-patched.rk05, -# the os8v3d device driver distribution DECtape, -# the os8v3f-build rk05 +# 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 dt0 ./system.tu56 no-overwrite 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: pkg_resources.parse_version("4.0")) @@ -208,10 +217,11 @@ 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. # @@ -253,10 +263,11 @@ # 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 #################################################### @@ -275,26 +286,31 @@ # 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 (char[0].lower ()) + 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. # @@ -336,15 +352,14 @@ self.os8_send_cmd ('\\*', dest + ' ' + 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. @@ -570,15 +588,29 @@ self._child.expect_exact ([head], timeout) return self._child.readline () #### send_cmd ######################################################## - # Wait for a SIMH command prompt and then send the given command + # 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. @@ -622,5 +654,348 @@ # 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") + Index: libexec/mkos8 ================================================================== --- libexec/mkos8 +++ libexec/mkos8 @@ -54,10 +54,17 @@ # 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" @@ -86,10 +93,22 @@ # 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. @@ -1154,16 +1173,87 @@ 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, file): +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) @@ -1204,32 +1294,24 @@ 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 ####################################################### -# This command toggles our context from "simh" to "os8" -# If we are already in os8 context, this is a RE-boot command -# and we need to shift to simh context first - -def do_boot_comm (s, args, line, file): - if s._context != "simh": - # Not in simh, need to get back to simh command level. - s.back_to_cmd ("\\.") - s._context = "simh" + +def do_boot_comm (s, args, line, comm_file): boot_comm = "boot " + line if progmsg: print boot_comm - s._context = "os8" s.send_cmd(boot_comm) + #### do_os8_comm ######################################################## -def do_os8_comm (s, args, line, file): +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 ######################################################## @@ -1236,11 +1318,11 @@ # 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, file): +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: @@ -1251,35 +1333,55 @@ 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, file): +def do_done_comm (s, args, line, comm_file): s.back_to_cmd ("\\.") - s._context = "simh" 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, file): +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, file) + ignore_to_subcomm_end(s, line, comm_file, "") else: - sub_commands[m.group(1)](s, args, m.group(3), file) + 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 @@ -1293,19 +1395,18 @@ s.os8_send_cmd ("LOAD CD: ", cd_spec) #### do_build_subcomm ################################################### -def do_build_subcomm (s, args, old_line, file): +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 file: - if line[0] == "#": continue - line = line.strip() - if line == "": continue + 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 @@ -1316,20 +1417,19 @@ if build_sub not in _build_comm_regs: print "Unrecognized BUILD command: " + build_sub continue - # Handle end here if build_sub == "end": if rest == "": - print "Warning, it is preferred that the name of the sub command follow end." + 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 - if rest != "build": - print "Warning: expected \"end build\". Instead got: " + m.group(3) - if progmsg: print "End BUILD" - return - + build_re = _build_comm_regs[build_sub] if build_re != None: m2 = re.match(build_re, rest) if m2 == None: @@ -1352,20 +1452,28 @@ s.os8_send_cmd ("\$", comm) #### do_fotp_subcomm #################################################### -def do_fotp_subcomm (s, args, old_line, file): +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 file: - if line[0] == "#": continue - line = line.strip() - if line == "": continue - if line == "end fotp": + 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) @@ -1378,20 +1486,28 @@ 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, file): +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 file: - if line[0] == "#": continue - line = line.strip() - if line == "": continue - if line == "end absldr": + 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) @@ -1403,32 +1519,38 @@ if progmsg: print "* " + line s.os8_send_cmd ("\\*", line) #### ignore_to_subcomm_end ############################################# -def ignore_to_subcomm_end (s, args, old_line, file): - for line in file: +def ignore_to_subcomm_end (s, args, old_line, comm_file, end_str): + global options_stack + + for line in comm_file: line = line.strip() - end_key = "end" - if len(line) < len(end_key): continue - if line[0:len(end_key)] == end_key: return + 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. -# Our system context is a global variable, and may indeed be -# affected by the running of the included command file. -def do_include_comm (s, args, line, file): +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, file): +def do_end_comm (s, args, line, comm_file): print "Unexpectedly encountered end command: " + line #### run_system ######################################################## # Run a system command script @@ -1454,23 +1576,23 @@ 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} + "begin": do_begin_comm, "end": do_end_comm, + "umount": do_umount_comm, "simh": do_simh_comm} try: - command_file = open(dirs.os8mo + filename, "r") + comm_file = open(dirs.os8mo + filename, "r") except IOError: print filename + " not found." sys.exit(-1) - for line in command_file: - if line[0] == "#": continue - line = line.strip() - if line == "": continue - + 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 @@ -1477,29 +1599,84 @@ 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), command_file) + 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"] + 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 @@ -1523,12 +1700,13 @@ 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 Index: src/os8-v3f/BUILD.PA ================================================================== --- src/os8-v3f/BUILD.PA +++ /dev/null @@ -1,3751 +0,0 @@ -/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 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 - 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= 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 - 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 - $ - DELETED src/os8-v3f/CCL.BI Index: src/os8-v3f/CCL.BI ================================================================== --- src/os8-v3f/CCL.BI +++ /dev/null @@ -1,45 +0,0 @@ -$JOB ASSEMBLE AND LINK CCL.MA -.MAC OUT:CCLPS 1 -00053 0000 DMODE, 0 /DUMP MODE: NONE=0,PART=1,ALL=4000 - -00054 0000 CBLK, 0 /= CURRENT BLOCK -00055 0000 0 /DUMMY FOR "SHOW ABS" -00056 0000 CAD, 0 /= CURRENT ADDRESS (0 -> 377)+IOBUF -00057 0000 BLK, 0 /= "BLOCK" -00060 0000 LOCH, 0 -00061 0000 LOCL, 0 /= "LOCATION" (DISPLACEMENT) -00062 0000 UBLK, 0 /UPPER LIMIT FOR SEARCHES -00063 0001 ULOCH, 1 -00064 7577 ULOCL, 7577 -00065 0000 LBLK, 0 /LOWER LIMIT FOR SEARCHES -00066 0000 LLOCH, 0 -00067 0200 LLOCL, 200 -00070 0000 SBLK, 0 /"LOCATION" FOR "ODT" ROUTINES -00071 0000 SLOCH, 0 -00072 0000 SLOCL, 0 - -00073 0000 OFFSET, 0 /OFFSET -00074 0000 FILLER, 0 /FILLER CONSTANT FOR "MODIFY" -00075 7777 MASK, -1 /MASK FOR WORD SEARCH -00076 7777 SMASKL, -1 /= -(LENGTH OF SMASK) -00077 0000 RBLK1, 0 /START BLOCK OF FILE -00100 7607 DEVAD, 7607 /DEVICE ENTRY ADDR (INIT TO "SYS") -00101 0001 DEVNO, 1 /DEVICE NUMBER (INIT TO "SYS") -00102 7700 USRAD, 7700 /USR ADDRESS, INITIALIZED TO OUT - /7700=MSGS IN; 0=NONE IN; 200=USR IN - - /CONSTANTS -00103 7400 M400, -400 -00104 7540 M240, -240 -00105 7563 M215, -215 -00106 7600 M200, -200 -00107 7700 M100, -100 -00110 7760 M20, -20 -00111 7770 M10, -10 -00112 7777 M1, -1 -00113 0007 N7, 7 -00114 0015 N15, 15 -00115 0020 N20, 20 -00116 0077 N77, 77 -00117 0177 N177, 177 -00120 0200 N200, 200 -00121 0377 N377, 377 -00122 7000 N7000, 7000 - 0103 N7400= M400 - - /ADDRESSES - 4523 READLN= JMS I . /GET NEXT INPUT LINE, WITH -00123 4000 READ / SPECIAL TERMINATORS -00124 3605 TYPSTI, TYPSTR - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 3-2 - -00125 3600 TYPSI, TYPES -00126 5054 TYPECI, TYPEC -00127 1761 TWOCI, TWOCS -00130 5044 CRLFI, CRLF - 4531 DIGIT= JMS I . /OUTPUT AN ASCII DIGIT -00131 4161 DODIG - 4532 SPACE1= JMS I . /OUTPUT 1 SPACE OR ... -00132 2561 DO1SP - 4533 SPACE2= JMS I . /OUTPUT 2 SPACES -00133 2565 DO2SP -00134 5125 CTRLI, CTRL -00135 3621 TWOT, PACOUT -00136 5061 TYPEI, TYPE -00137 3436 DECI, DPRT -00140 3400 OCTI, OPRT -00141 3445 DEC2I, DEC2 -00142 5000 PDATEI, PDATE -00143 3762 RTL6I, RTL6 -00144 3767 RTR6I, RTR6 -00145 5261 SOCTI, OCTSET -00146 3105 BKLOCI, BKLOC -00147 5400 EVALI, EVAL - - 4550 PUSH= JMS I . /PUSH AC ON P.D.L. -00150 5600 PUSHX - 4551 POP= JMS I . /POP P.D.L. INTO AC -00151 5606 POPX - 4552 CALUSR= JMS I . /DO USR FUNCTION -00152 0520 USEUSR - 4553 TADIDP= JMS I . /"TAD I DPNT" IN FIELD 1 -00153 2156 TIDPNT - 4554 TADICAD= JMS I . /"TAD I CAD" IN FIELD 1 -00154 6170 TICAD - 4555 DCAICAD= JMS I . /"DCA I CAD" IN FIELD 1 -00155 6163 DICAD - -00156 3122 GWORDI, GWORD -00157 5272 GARGI, GARGS -00160 5713 ARGI, ARG -00161 3000 GETI, GET -00162 3073 ODGETI, ODGET -00163 5362 GETNI, GETN -00164 3502 SSKIPI, SSKIP -00165 2752 LIMITI, LIMITS -00166 3557 INCI, INC -00167 3643 SORTI, SORTJ -00170 4141 ENDCI, ENDC -00171 0203 RECRLF, MAIN1-1 -00172 0204 RESTAR, MAIN1 - - 4573 ERROR= JMS I . -00173 0454 XERROR - -00174 5712 COMST, COMB-1 -00175 6305 TEMPST, TEMPL-1 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 3-3 - -00176 5610 MASKBS, SMASKB-1 - - - 0200 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 4 - - /PROGRAM MAIN LOOP AND DRIVER. COLLECTS CHARACTERS - /INTO COMMAND BUFFER UNTIL END IS REACHED. - -00200 3102 DCA USRAD /CLEAR ON RESTART (NOTHING IN)! -00201 6046 TLS /RAISE TELETYPE FLAG -00202 3047 DCA SHUT /NOTHING IS OPEN -00203 4530 JMS I CRLFI /OUTPUT CR-LF. -00204 4545 MAIN1, JMS I SOCTI /SET INPUT TO OCTAL; EXEC 'COMMENT' -00205 3052 DCA DSWIT /RESET DUMP OUTPUT SWITCH -00206 1174 TAD COMST /INIT COMMAND BUFFER. -00207 3015 DCA COMIR -00210 1377 TAD (PDLB+1 /INIT PUSH-DOWN-LIST -00211 3007 DCA PDLPT -00212 4523 MAIN2, READLN /GET A LINE FROM INPUT. -00213 4472 CCHARL-1 /CR LF ; ! / ALT- -00214 0050 COPSL-CCHARL / MODES ETC... -00215 5204 JMP MAIN1 /BUFFER WAS EMPTIED. - - - /ROUTINE TO HANDLE CARRIAGE RETURN. -00216 4570 CRCR, JMS I ENDCI /PUT A CR IN BUFFER -00217 5235 JMP CRCRC /ONLY A CR IN BUFFER -00220 4556 JMS I GWORDI /GET COMMAND WORD -00221 5234 JMP CRCRN /BUFFER BEGINS WITH A # -00222 2046 ISZ CRSWT /WORD ENDED BY A CR? -00223 5230 JMP CRCR1 /YES, ONLY A FEW ARE OK -00224 4567 JMS I SORTI /NO, LOOK UP COMMAND -00225 4602 CWORDL-1 -00226 0031 WOPSL-CWORDL -00227 4573 ERCB, ERROR /NOT A LEGAL COMMAND - / -00230 4567 CRCR1, JMS I SORTI /"WRITE","REWIND","EXIT" & "COMMENT" -00231 4663 CWORL2-1 -00232 0010 WOPSLL-CWORL2 -00233 4573 ERCA, ERROR /SOMETHING NOT LEGAL - / -00234 4361 CRCRN, JMS CLOSE /CLOSE THE OPEN LOCATION IF OPEN -00235 3047 CRCRC, DCA SHUT / MARK LOCATION CLOSED -00236 5204 JMP MAIN1 - - /ROUTINE TO HANDLE SLASH -00237 4570 SLASH, JMS I ENDCI /END BUFFER WITH A CR -00240 5244 JMP SLA1 /OPEN LAST, CR ONLY -00241 4776' JMS WCHEK /DOES LINE START W. A WORD? -00242 4565 JMS I LIMITI /NO, GET ARG-- -00243 0070 SBLK / & SLOCH & SLOCL -00244 4532 SLA1, SPACE1 /OUTPUT SPACE -00245 4775' SLO1, JMS ODTOUT /GET THE WORD & OUTPUT -00246 4532 SLO2, SPACE1 /FOLLOWED BY 2 SPACES -00247 4532 SPACE1 /(FOR ";"--OUTPUT ONLY 1 SPACE AND -00250 4562 JMS I ODGETI / THEN FORCE ACTION & IGNORE VALUE) -00251 7240 STA -00252 5235 JMP CRCRC /GO MARK LOCATION OPEN - - /ROUTINE TO HANDLE ALT MODE & ESCAPE KEYS - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 4-1 - -00253 1043 ALTMOD, TAD OUTPNT /USE OUTPUT ROUTINE 'SET' BY -00254 5261 JMP ALTM1 / 'FORMAT' OPTION. - - /ROUTINE TO CLOSE A LOCATION, OUTPUT ITS (NEW) CONTENTS IN A - / SPECIFIED FORMAT AND THEN RE-OPEN. THE ROUTINE HANDLES: - / # (BCD), $ (OS/8 ASCII), % (BYTE OCTAL), & (XS240 ASCII), - / : (SIGNED DECIMAL), < (OCTAL), = (UNSIGNED DECIMAL), - / > (PDP SYMBOLIC), @ (DATE), [ (ASCII), \ (FPP SYMBOLIC), - / ] (PACKED ASCII) AND ? (DIRECTORY). - / -00255 1012 OMODES, TAD SCANX1 /'SORTJ' POINTER TO CHAR LIST -00256 1374 TAD (OTABLE-1-CCHARL -00257 3010 DCA DPNT /POINT INTO ADDR TABLE, -00260 4553 TADIDP / GET OUTPUT ROUTINE ADDR, -00261 3270 ALTM1, DCA OMODPT / & SET POINTER TO ROUTINE. -00262 4353 JMS ECLOSE /CLOSE THIS LOCATION -00263 4532 SPACE1 /OUTPUT SPACE -00264 3045 DCA CHARSW /RESET UNPACK SWITCH -00265 4562 JMS I ODGETI /GET WORD -00266 4670 JMS I OMODPT /OUTPUT IN DESIRED FORMAT -00267 5246 JMP SLO2 /AND GO REOPEN. -00270 0000 OMODPT, 0 - - /ROUTINE TO HANDLE BACKARROW. -00271 4353 BACKAR, JMS ECLOSE /CLOSE THIS LOCATION -00272 4554 TADICAD /GET THE CONTENTS, -00273 5306 JMP UPARR1 /AND USE THEM AS THE ADDR - - /ROUTINE TO HANDLE UPARROW. -00274 4353 UPARR, JMS ECLOSE /CLOSE THIS LOCATION -00275 4554 TADICAD /IS THIS A 'PAGE 0' REF.? -00276 0120 AND N200 -00277 7640 SZA CLA -00300 1072 TAD SLOCL /YES, USE PAGE BITS -00301 0106 AND M200 / MASK PAGE OR 0 TO PAGE # -00302 3072 DCA SLOCL / & SAVE IT -00303 4554 TADICAD /GET THE CONTENTS, -00304 0117 AND N177 /AND USE THE ADDRESS BITS. -00305 1072 TAD SLOCL / ALONG WITH PAGE BITS -00306 3072 UPARR1, DCA SLOCL /THIS IS 12 BIT ADDR -00307 5336 JMP EXCL2 /NOW GO FINISH - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 5 - - /ROUTINE TO HANDLE SEMICOLON, LINE FEED & EXCLAMATION. - -00310 3536 SEMIC, DCA I TYPEI /SET NO-OUTPUT SWITCH-V7B -00311 7240 LFLF, STA /LINE-FEED - CLOSE,INCREMENT,OUTPUT -00312 3270 EXCL, DCA OMODPT /EXCLAMATION - CLOSE,DECREMENT,OUTPUT -00313 4353 JMS ECLOSE /CLOSE THIS LOCATION -00314 7001 IAC -00315 3025 DCA ACC1 /SET UP D.P. INCREMENT -00316 3026 DCA ACC2 -00317 3001 EXCL1, DCA DPSGN /(FOR SAFETY) -00320 2270 ISZ OMODPT /INCREMENT OR DECREMENT? -00321 4773' JMS DPNEG / DECREMENT, NEGATE VALUE -00322 7100 CLL -00323 1025 TAD ACC1 -00324 1072 TAD SLOCL /UPDATE LOCATION TO 15 BITS -00325 3072 DCA SLOCL -00326 7004 RAL -00327 1026 TAD ACC2 -00330 1071 TAD SLOCH -00331 0113 AND N7 / (BUT ONLY 15 BITS) -00332 3071 DCA SLOCH -00333 1536 TAD I TYPEI / ANY OUTPUT?-V7B -00334 7650 SNA CLA -00335 5247 JMP SLO2+1 / NO, WAS ";" DO ONE SPACE -00336 4530 EXCL2, JMS I CRLFI /GIVE CR/LF FOR NEXT LINE -00337 4546 JMS I BKLOCI /OUTPUT ADDRESS -00340 0067 SBLK-1 -00341 4527 JMS I TWOCI /OUTPUT "\ " -00342 3440 3440 -00343 5245 JMP SLO1 /NOW GO OPEN NEXT LOCATION - - /ROUTINE TO HANDLE PLUS & MINUS. -00344 7240 PLUS, STA /"+", SET SWITCH -00345 3270 MINUS, DCA OMODPT /"-", CLEAR SWITCH -00346 4570 JMS I ENDCI /END BUFFER, TEST -00347 5336 JMP EXCL2 /NO ARG, DO SAME AGAIN -00350 4776' JMS WCHEK /LINE START WITH A COMMAND? -00351 4560 JMS I ARGI /NO, GET AN ARG -00352 5317 JMP EXCL1 /UPDATE LOC & GO OPEN - - -00353 0000 ECLOSE, 0 /SUB. TO CLOSE THE LOCATION IF ARG. -00354 4570 JMS I ENDCI /END BUFFER WITH A CR. -00355 5753 JMP I ECLOSE /ONLY A CR IN BUFFER, DONE -00356 4776' JMS WCHEK /DOES LINE START W. A WORD? -00357 4361 JMS CLOSE /ARG IN BUFFER, USE IT -00360 5753 JMP I ECLOSE /DONE - -00361 0000 CLOSE, 0 /SUBROUTINE TO CLOSE A LOCATION -00362 4560 JMS I ARGI /GET ONE ARG -00363 2047 ISZ SHUT /ANYTHING OPEN? -00364 5761 JMP I CLOSE /NO, RETURN -00365 4562 JMS I ODGETI /YES, SET UP THINGS RIGHT -00366 7240 STA -00367 3050 DCA MODIF /SET MODIFY FLAG - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 5-1 - -00370 1025 TAD ACC1 /USE "LOC" AS DATA -00371 4555 DCAICAD /STORE IT -00372 5761 JMP I CLOSE - - -00373 6141 -00374 0032 -00375 4200 -00376 6200 -00377 6130 - 0400 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 6 - - /ROUTINE TO 'EVALUATE' A SIGNED DOUBLE PRECISION ARITHMETIC - / EXPRESSION & OUTPUT THE RESULTS IN OCTAL & D.P. SIGNED - / DECIMAL. -00400 4547 XVAL, JMS I EVALI /GO EVALUATE -00401 7410 SKP /TERMINATED BY A CR -00402 4573 ERCC, ERROR / SORRY!--TOO MANY ")"S -00403 4527 JMS I TWOCI /"= " -00404 7540 7540 -00405 1026 TAD ACC2 -00406 4540 JMS I OCTI /OUTPUT HIGH ORDER IN OCTAL -00407 1025 TAD ACC1 -00410 4540 JMS I OCTI /OUTPUT LOW ORDER IN OCTAL -00411 1027 TAD ACCX1 /SAVE REMAINDER FOR LATER -00412 3015 DCA COMIR -00413 1030 TAD ACCX2 -00414 3016 DCA COMOUT -00415 1377 TAD (-7 -00416 3254 DCA XERROR /MUST DEVELOP 7 DIGITS -00417 4527 JMS I TWOCI /OUTPUT " (" -00420 4050 4050 -00421 1026 TAD ACC2 /IS DPAC NEG? -00422 7700 SMA CLA -00423 5226 JMP DLOOP1-1 /NO, OUTPUT " " -00424 4776' JMS DPNEG /YES, MAKE IT POSITIVE -00425 1114 TAD N15 / AND OUTPUT "-". -00426 4532 SPACE1 -00427 1375 DLOOP1, TAD (12 /RESET DIVISOR TO 10(10) -00430 3031 DCA OPER1 -00431 3032 DCA OPER2 -00432 4774' JMS DDIV /GO DIVIDE DPAC BY 10(10) -00433 1027 TAD ACCX1 / GET REMAINDER -00434 4550 PUSH /PUT IT ON PUSH-DOWN-LIST -00435 2254 ISZ XERROR /DONE YET? -00436 5227 JMP DLOOP1 -00437 1016 TAD COMOUT /YES, RESTORE REMAINDER -00440 3030 DCA ACCX2 -00441 1015 TAD COMIR -00442 3027 DCA ACCX1 -00443 1377 TAD (-7 -00444 3254 DCA XERROR /NOW SET UP TO OUTPUT 7 DIGITS -00445 4551 DLOOP2, POP / IN REVERSE ORDER! -00446 4531 DIGIT /MAKE REMAIN A DIGIT -00447 2254 ISZ XERROR /DONE? -00450 5245 JMP DLOOP2 -00451 4526 JMS I TYPECI /YES, OUTPUT ")" -00452 0251 ") -00453 5571 JMP I RECRLF / AND CR/LF - - - /ERROR ROUTINE -00454 0000 XERROR, 0 -00455 7200 CLA /CLEAR POSSIBLE JUNK FROM AC -00456 3052 DCA DSWIT /RESET IN CASE DUMP MODE -00457 6201 CDF 0 -00460 4526 JMS I TYPECI /OUTPUT "?" - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 6-1 - -00461 0277 "? -00462 1373 TAD (ERLIST-1 /INIT LIST POINTER -00463 3010 DCA DPNT -00464 3021 DCA TEMP /SET CODE TO 0 -00465 2021 XERR1, ISZ TEMP /BUMP ERROR CODE -00466 4553 TADIDP /GET AN ADDRESS -00467 7450 SNA -00470 5275 JMP XERR2 /(FOR DEBUGGING) -00471 7040 CMA /= -(ADDR+1) -00472 1254 TAD XERROR /DOES IT MATCH THE CALL? -00473 7640 SZA CLA -00474 5265 JMP XERR1 /NO -00475 1021 XERR2, TAD TEMP /YES, OUTPUT ERROR CODE -00476 4541 JMS I DEC2I / AS 2 DECIMAL DIGITS -00477 4525 JMS I TYPSI /NOW OUTPUT " AT " -00500 4310 MS17 -00501 1372 TAD (-COMB+1 /CALCULATE POSITION IN -00502 1016 TAD COMOUT / COMMAND BUFFER, -00503 4541 JMS I DEC2I / & OUTPUT AS 2 DIGITS. -00504 1020 TAD ERMODE /LONG/SHORT MESSAGES? [NOTE: THIS -> -00505 7640 XERR3, SZA CLA / "7600" (A CLA) IF 'USROUT' ERROR!] -00506 5315 JMP XERR4 /SHORT, GO DO CR/LF -00507 4344 JMS USROUT /LONG, BE SURE MESSAGES ARE IN -00510 4533 SPACE2 /OUTPUT 2 SPACES -00511 1021 TAD TEMP /CODE = ADDRESS-1 OF ADDRESS -00512 3010 DCA DPNT / OF MESSAGE -00513 4553 TADIDP /GET MESSAGE ADDR -00514 4524 JMS I TYPSTI / OUTPUT MESSAGE -00515 4530 XERR4, JMS I CRLFI /OUTPUT A CR,LF PAIR -00516 5717 JMP I .+1 /*** CIF BAT /BATCH OPER. -00517 0204 MAIN1 /*** JMP I N7000 /'BATABT'! - - -00520 0000 USEUSR, 0 /USR CALLER SUBROUTINE (FROM EITHER FIELD!) -00521 3344 DCA USRSAV /SAVE CONTENTS OF AC -00522 6214 RDF -00523 1325 TAD UCDF0 /SET UP RETURN FIELD (FOR 2ND USR CALL) -00524 3341 DCA USRCDF -00525 6201 UCDF0, CDF 0 /SET TO HERE FOR 1ST CALL -00526 1102 TAD USRAD /IS USR IN OR OUT? -00527 7740 SMA SZA CLA -00530 5336 JMP USRIN /IN, GO TO IT -00531 6212 CIF 10 -00532 4507 JMS I M100 /OUT, DO "USRIN" FUNCTION -00533 0010 10 -00534 1120 TAD N200 -00535 3102 DCA USRAD / & SO INDICATE -00536 6213 USRIN, CDF CIF 10 -00537 1320 TAD USEUSR /MOVE RETURN ADDRESS TO THE -00540 3520 DCA I N200 / USR ENTRY POINT -00541 6201 USRCDF, CDF /SET UP D.F. FOR RETURN -00542 1344 TAD USRSAV /RESTORE AC CONTENTS -00543 5771 JMP I (201 / & FAKE A CALL TO IT - USRSAV, - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 6-2 - -00544 0000 USROUT, 0 /SUBROUTINE TO REMOVE USR BY RECALLING -00545 1102 ERC15, TAD USRAD / ERROR MESSAGES FROM SCRATCH -00546 7710 SPA CLA / BLOCKS ON SYS. -00547 5744 JMP I USROUT /JUST EXIT IF PRESENT... -00550 1107 TAD M100 -00551 3102 DCA USRAD /SET USR TO "OUT" -00552 4770 JMS I (7607 /READ IN THE MESSAGES -00553 0610 610 / 6 PAGES TO FIELD 1 -00554 0000 0 / STARTING AT LOC 10000 -00555 0027 27 / FROM SCRATCH BLKS -00556 7610 SKP CLA /!!! ERROR !!! -00557 5744 JMP I USROUT /OK, JUST EXIT -00560 1106 TAD M200 -00561 3305 DCA XERR3 /NO MORE MESSAGES ON ERROR! -00562 1364 TAD ERC16 -00563 3345 DCA ERC15 /AND NO MORE "SHOW ERROR"! -00564 4573 ERC16, ERROR /TELL THE HORRIBLE STORY! - - -00570 7607 -00571 0201 -00572 2066 -00573 5530 -00574 6040 -00575 0012 -00576 6141 -00577 7771 - 0600 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 7 - - /ROUTINE TO EXECUTE THE BLOCK 'SCAN' COMMAND -00600 4557 XSCAN, JMS I GARGI /GET ARGS CONVERTED -00601 1377 TAD (SCANER / & SET UP FOR SCANNING -00602 5210 JMP XDUM0 - - /ROUTINE TO EXECUTE THE BLOCK 'DUMP' COMMAND -00603 1044 XDUMP, TAD MODSW /MAPPED MODE? -00604 7740 SMA SZA CLA -00605 4573 ERC14, ERROR /YES, DUMP IS MEANINGLESS! -00606 4247 JMS XDLCOM /DO COMMON STUFF -00607 1376 TAD (LLIST / & SET UP FOR DUMPING -00610 3327 XDUM0, DCA XGFORM /SET OUTPUT ROUTINE--DUMP/SCAN -00611 2010 XDUM1, ISZ DPNT /SKIP FIRST WORD -00612 2010 ISZ DPNT /SKIP A WORD -00613 1410 TAD I DPNT /GET NEXT START BLOCK. -00614 4775' JMS BLKTST -00615 1410 TAD I DPNT /GET NEXT -(# BLOCKS) -00616 3022 DCA TEMP1 -00617 4534 XDUM2, JMS I CTRLI /TEST HERE FOR 'SCAN' TERMINATE -00620 3061 DCA LOCL /SET LOC TO 0 -00621 3060 DCA LOCH -00622 1103 TAD M400 /SET TO -400(8) [1 BLOCK] -00623 4727 JMS I XGFORM /DUMP OR SCAN A BLOCK -00624 2057 ISZ BLK /INCREMENT BLOCK NUMBER -00625 2022 ISZ TEMP1 /DONE? -00626 5217 JMP XDUM2 /NO, DO NEXT BLOCK -00627 2021 ISZ TEMP /YES, ARE ALL ARGS DONE? -00630 5211 JMP XDUM1 /NO, DO NEXT -00631 5245 JMP XLIS2 /YES, DONE--RESET SWITCH - - /ROUTINE TO EXECUTE THE LOCATION 'LIST' COMMAND -00632 4247 XLIST0, JMS XDLCOM /DO COMMON STUFF -00633 1410 XLIS1, TAD I DPNT /GET BLOCK # -00634 4775' JMS BLKTST /TEST & SET BLK -00635 1410 TAD I DPNT /GET & SET LOCATION -00636 3060 DCA LOCH -00637 1410 TAD I DPNT -00640 3061 DCA LOCL -00641 1410 TAD I DPNT /GET -(# WORDS) -00642 4261 JMS LLIST /NOW GO DO IT -00643 2021 ISZ TEMP /ARE ALL ARGS USED? -00644 5233 JMP XLIS1 /NO, CONTINUE -00645 3052 XLIS2, DCA DSWIT /RESET DUMP SWITCH -00646 5571 JMP I RECRLF / DO CR/LF & CONTINUE - - /COMMON SUBROUTINE FOR 'XDUMP'&'XLIST0' -00647 0000 XDLCOM, 0 -00650 1043 TAD OUTPNT /INITIALIZE DEFAULTS -00651 3325 DCA LISTPT -00652 1365 TAD OUTSW -00653 3326 DCA LOUTSW -00654 4327 JMS XGFORM /GET FORMAT, IF ANY -00655 7000 NOP /RETURN FOR NO FORMAT -00656 4557 JMS I GARGI /GET ARGS -00657 2052 ISZ DSWIT /SET DUMP SWITCH - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 7-1 - -00660 5647 JMP I XDLCOM - - /SUBROUTINE TO OUTPUT -[C(AC)] WORDS FROM THE DEVICE - /BEGINNING AT BLK.LOC IN THE SPECIFIED FORMAT -00661 0000 LLIST, 0 -00662 3040 DCA CNTRA /SET UP -# WORDS TO LIST -00663 3045 DCA CHARSW /RESET UNPACK SWITCH -00664 4530 LLIS1, JMS I CRLFI -00665 1061 TAD LOCL -00666 0113 AND N7 /SET UP # ON THIS LINE -00667 3037 DCA CNTR -00670 1326 TAD LOUTSW /IF CHARACTER OUTPUT, -00671 7650 SNA CLA -00672 1111 TAD M10 / DOUBLE # WORDS/LINE -00673 1037 TAD CNTR -00674 1111 TAD M10 -00675 3037 DCA CNTR -00676 4546 JMS I BKLOCI /OUTPUT LOCATION -00677 0056 BLK-1 -00700 4525 JMS I TYPSI /OUTPUT ": " -00701 4264 MS13 -00702 4561 LLIS2, JMS I GETI /GET A WORD -00703 5312 JMP LLIS3 /FILE MODE, NO SUCH ADDR.. -00704 4725 JMS I LISTPT /OUTPUT IT -00705 1326 TAD LOUTSW /TEST MODE SWITCH -00706 7510 SPA -00707 5322 JMP LLIS5 /"SYMBOLIC", CR/LF NOW -00710 7640 SZA CLA /CHARACTERS, NO SPACES -00711 4533 SPACE2 /NUMBERS, TWO SPACES -00712 4566 LLIS3, JMS I INCI /INCREMENT LOC -00713 2040 ISZ CNTRA /ALL WORDS DONE? -00714 5317 JMP LLIS4 /NO -00715 4530 JMS I CRLFI -00716 5661 JMP I LLIST /YES, RETURN - / -00717 2037 LLIS4, ISZ CNTR /ALL DONE WITH THIS LINE? -00720 5302 JMP LLIS2 /NOT YET -00721 5264 JMP LLIS1 /YES, OUTPUT CR/LF & CONTINUE - / -00722 7240 LLIS5, STA -00723 3037 DCA CNTR /FORCE A CR/LF -00724 5312 JMP LLIS3 -00725 0000 LISTPT, 0 -00726 0000 LOUTSW, 0 - - - /SUBROUTINE TO GET A FORMAT FOR 'XFORM' & 'XDLCOM' -00727 0000 XGFORM, 0 -00730 4556 JMS I GWORDI /GET A WORD -00731 5727 JMP I XGFORM /NOT FOLLOWED BY A WORD -00732 4567 JMS I SORTI /LOOK UP WORD -00733 4702 FORML-1 -00734 0031 FOPSL-FORML -00735 4573 ERCD, ERROR /WORD NOT RECOGNIZED - / - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 7-2 - -00736 7130 XFSYM, STL RAR /"SYMBOLIC"; SWITCH NEG -00737 7001 XFNUM, IAC /NUMERIC; SWITCH POS -00740 3326 XFCHR, DCA LOUTSW /CHARACTER; SWITCH 0 -00741 1012 TAD SCANX1 /'SORTJ' POINTER TO CHAR -00742 1374 TAD (-FORML /CALCULATE FORMAT # -00743 7110 CLL RAR /(DIVIDE BY 2) -00744 3022 DCA TEMP1 / & SAVE IT. -00745 1022 TAD TEMP1 -00746 1373 TAD (FTABLE-1 -00747 3010 DCA DPNT -00750 4553 TADIDP -00751 3325 DCA LISTPT /SET UP OUTPUT POINTER -00752 2327 ISZ XGFORM /BUMP RETURN ADDRESS -00753 5727 JMP I XGFORM - - /ROUTINE TO 'SET' THE 'FORMAT' OPTION -00754 4327 XFORM, JMS XGFORM /GET FORMAT WORD -00755 4573 ERCE, ERROR /NUMBER?! SORRY ABOUT THAT! -00756 1326 TAD LOUTSW /OK, SET UP DEFAULTS: -00757 3365 DCA OUTSW / SWITCH, -00760 1325 TAD LISTPT -00761 3043 DCA OUTPNT / ROUTINE POINTER, -00762 1022 TAD TEMP1 -00763 3042 DCA FCNT / & FORMAT # -00764 5772' JMP XSETN -00765 0000 OUTSW, 0 /MODE:0=NOTHING,+=SPACES,-=CR/LF - - -00772 1600 -00773 4763 -00774 3075 -00775 6154 -00776 0661 -00777 5744 - 1000 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 8 - - /ROUTINE TO EXECUTE THE 'OPEN' COMMAND. -01000 7240 XOPEN, STA /"." LEGAL IN FILE NAME -01001 4777' JMS GNAME /GET FILE NAME FOR OUTPUT -01002 6212 CIF 10 -01003 5776' JMP XOPEN1 /NOW GO TO FIELD 1 TO HANDLE - - - /ROUTINE TO EXECUTE THE 'CLOSE' COMMAND. -01004 6213 XCLOSE, CDF CIF 10 -01005 5775' JMP XCLOS1 /ALL CODE IS IN FIELD 1 - - - /ROUTINE TO EXECUTE THE 'FILE' COMMAND. -01006 1022 XFIERR, TAD TEMP1 /MADE ALL POSSIBLE ATTEMPTS -01007 7700 SMA CLA / AT EXTENSION RETRIES? -01010 5216 JMP XFIOUT / YES, ALL TRIES DONE! -01011 2001 ISZ DPSGN /THIS WILL SKIP ON 1ST FAIL -01012 2022 ISZ TEMP1 /THIS WILL SKIP ON 2ND FAIL -01013 1374 TAD (1404 / 2ND TRY--USE "LD" EXTEN -01014 3030 DCA NAM4 / 3RD TRY--USE NULL EXTEN -01015 5230 JMP XFICHN+2 / 3RD TRY IS FINAL FAILURE - / -01016 4773' XFIOUT, JMS PNAME /OUTPUT FILE NAME & -01017 4525 JMS I TYPSI /"LOOKUP FAILED" -01020 4277 MS15 - / -01021 4530 XFILEN, JMS I CRLFI /OUTPUT CR/LF -01022 2046 ISZ CRSWT /WAS LAST ENDED BY A CR? -01023 5572 JMP I RESTAR /YES, DONE -01024 7240 XFILE, STA /"." LEGAL IN FILE NAME -01025 4777' JMS GNAME /GET NEXT FILE NAME -01026 7240 XFICHN, STA -01027 3001 DCA DPSGN /SET TRY AGAIN SWITCH -01030 1372 TAD (NAM1 /INIT POINTER TO NAME -01031 3235 DCA FSTBLK -01032 1101 TAD DEVNO /GET DEVICE # -01033 4552 CALUSR -01034 0002 2 /LOOKUP -01035 0000 FSTBLK, 0 /NAME PNTR, BECOMES ST BLK -01036 0000 FBKLEN, 0 / BECOMES -(FILE LENGTH) -01037 5206 JMP XFIERR /LOOKUP FAILED -01040 1235 TAD FSTBLK -01041 3077 DCA RBLK1 /SET UP PAGE 0 ST BLK -01042 6211 CDF 10 -01043 3771 DCA I (CCBB / & RESET CCBB -01044 1774 TAD I (1404 /GET # ADD'L INFO WORDS -01045 3354 DCA GDEV2 / (NEGATIVE) & SAVE IT -01046 1354 TAD GDEV2 -01047 1770 TAD I (17 /POINT TO FIRST OF THEM -01050 3355 DCA GDEV3 / (THE DATE, IF PRESENT) -01051 1513 TAD I N7 /GET THE NUMBER OF THE -01052 0113 AND N7 / DIRECTORY SEGMENT IN -01053 3037 DCA CNTR / CORE & SAVE IT. -01054 1354 TAD GDEV2 /WAS # OF ADD'L WRDS = 0? -01055 7640 SZA CLA - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 8-1 - -01056 1755 TAD I GDEV3 / NO, GET THE DATE WORD -01057 6201 CDF 0 -01060 3353 DCA GDEV1 /STORE DATE OR 0 (NO DATE) -01061 4773' JMS PNAME /OUTPUT FILE NAME -01062 1235 TAD FSTBLK -01063 4540 JMS I OCTI /OUTPUT ST. BLK. IN OCTAL -01064 4526 JMS I TYPECI -01065 0255 "- -01066 1236 TAD FBKLEN /CALCULATE LAST BLK # -01067 7040 CMA -01070 1235 TAD FSTBLK -01071 4540 JMS I OCTI / & OUTPUT IN OCTAL -01072 4533 SPACE2 /OUTPUT 2 SPACES -01073 1236 TAD FBKLEN -01074 7041 CIA -01075 4540 JMS I OCTI /OUTPUT LENGTH IN OCTAL -01076 4527 JMS I TWOCI /" (" -01077 4050 4050 -01100 1236 TAD FBKLEN -01101 7041 CIA -01102 4537 JMS I DECI / & AGAIN IN DECIMAL -01103 4525 JMS I TYPSI /") " -01104 4403 MS33 -01105 1037 TAD CNTR /GET SEGMENT # -01106 4543 JMS I RTL6I / & PUT IN BITS 3-5 -01107 4527 JMS I TWOCI / TO OUTPUT IT & "." -01110 6056 6056 -01111 1355 TAD GDEV3 /GET ADDR OF 1ST ADD'L WRD -01112 1367 TAD (-1400-4 / FOR OFFSET OF NAME START -01113 4766' JMS OCT3 /OUTPUT LOCATION IN SEG -01114 4533 SPACE2 / & TWO SPACES -01115 1353 TAD GDEV1 /GET DATE WORD -01116 7440 SZA /IS IT = 0? -01117 4542 JMS I PDATEI /NO, OUTPUT DATE -01120 5221 JMP XFILEN /NOW OUTPUT CR/LF & CONTINUE - - - /ROUTINE TO 'SET' THE 'DEVICE' OPTION -01121 4340 XDEV, JMS GDEVICE /GET & FETCH DEVICE HANDLER -01122 7201 DEVHAN+1 / (2 PAGE HANDLER IS OK) -01123 3100 DCA DEVAD /SET UP HANDLER ADDRESS -01124 1354 TAD GDEV2 /SAVE DEVICE # -01125 3101 DCA DEVNO -01126 3077 DCA RBLK1 / & NO FILE KNOWN -01127 3047 DCA SHUT / & NOTHING OPENED -01130 3050 DCA MODIF / & NOTHING MODIFIED -01131 1025 TAD NAM1 -01132 6212 CIF 10 -01133 5765' JMP XDEVM /GO FINISH SETUP IN FIELD 1 - - - /ROUTINE TO 'SET' THE 'DDEV' OPTION -01134 4340 XDDEV, JMS GDEVICE /GET & FETCH DEVICE HANDLER -01135 6601 DMPHAN+1 / (2 PAGE HANDLER IS OK) -01136 6212 CIF 10 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 8-2 - -01137 5764' JMP XDDEV1 /GO TO FIELD 1 TO FINISH SETUP - -01140 0000 GDEVICE,0 /SUBROUTINE TO GET DEVICE NAME & FETCH HANDLER -01141 4777' JMS GNAME /GET DEV NAME ("." ILLEGAL) -01142 1025 TAD NAM1 /MOVE NAME TO CALL -01143 3353 DCA GDEV1 -01144 1026 TAD NAM2 -01145 3354 DCA GDEV2 -01146 1740 TAD I GDEVICE /GET HANDLER SPACE ADDRESS -01147 2340 ISZ GDEVICE -01150 3355 DCA GDEV3 -01151 4552 CALUSR -01152 0001 1 /FETCH HANDLER -01153 0000 GDEV1, 0 -01154 0000 GDEV2, 0 -01155 0000 GDEV3, 0 -01156 4573 ERCY, ERROR /NO SUCH HANDLER -01157 1355 TAD GDEV3 /RETURN HANDLER ADDRESS -01160 5740 JMP I GDEVICE - - -01164 2200 -01165 2467 -01166 3407 -01167 6374 -01170 0017 -01171 6400 -01172 0025 -01173 2731 -01174 1404 -01175 2272 -01176 2222 -01177 3676 - 1200 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 9 - - /ROUTINE TO EXECUTE THE 'SHOW' COMMAND -01200 4525 XSHBLK, JMS I TYPSI /"BLOCK = " -01201 4376 MS32 -01202 1077 TAD RBLK1 /OUTPUT BLOCK IN OCTAL -01203 4540 XSTYPE, JMS I OCTI -01204 4530 XSHCR, JMS I CRLFI /GIVE A CR & LF -01205 3052 DCA DSWIT /BE SURE SWITCH IS RESET -01206 2046 ISZ CRSWT /LAST WORD ENDED BY CR? -01207 5572 JMP I RESTAR /YES, DONE -01210 4556 XSHOW, JMS I GWORDI /GET A WORD -01211 5215 JMP ERCG /NUMBERS NOT RECOGNIZED -01212 4567 JMS I SORTI /LOOK IT UP -01213 5073 SHOWL-1 -01214 0037 SHOWOP-SHOWL -01215 4573 ERCG, ERROR /NOT FOLLOWED BY LEGAL WORD - -01216 4525 XSHVER, JMS I TYPSI /"VERSION = " -01217 2512 MSVER -01220 5204 JMP XSHCR - -01221 4525 XSHMSK, JMS I TYPSI /"MASK = " -01222 4204 MS02 -01223 1075 TAD MASK -01224 5203 JMP XSTYPE - -01225 4525 XSHOFF, JMS I TYPSI /"OFFSET = " -01226 4242 MS09 -01227 1073 TAD OFFSET -01230 7041 CIA -01231 5203 JMP XSTYPE - -01232 4525 XSHFIL, JMS I TYPSI /"FILLER = " -01233 4415 MS37 -01234 1074 TAD FILLER -01235 5203 JMP XSTYPE - -01236 4525 XSHODL, JMS I TYPSI /"ODT LOC = " -01237 4256 MS12 -01240 4546 JMS I BKLOCI /OUTPUT IT -01241 0067 SBLK-1 -01242 5257 JMP XSHBKS - -01243 4525 XSHREL, JMS I TYPSI /"REL. LOC = " -01244 4324 MS20 -01245 4546 JMS I BKLOCI / & OUTPUT IT -01246 0056 BLK-1 -01247 5257 JMP XSHBKS - -01250 4525 XSHABS, JMS I TYPSI /"ABS. LOC = " -01251 4210 MS03 -01252 1056 TAD CAD /OUTPUT LOCATION IN BLOCK -01253 1377 TAD (-IOBUF -01254 3056 DCA CAD -01255 4546 JMS I BKLOCI -01256 0053 CBLK-1 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 9-1 - -01257 1050 XSHBKS, TAD MODIF /HAS BLOCK BEEN MODIFIED? -01260 7700 SMA CLA -01261 5204 JMP XSHCR / NO, SAY NOTHING! -01262 4525 JMS I TYPSI / YES, SAY " MOD" -01263 2142 MSMOD -01264 5204 JMP XSHCR - -01265 4525 XSHUPP, JMS I TYPSI /"UPPER = " -01266 4216 MS04 -01267 4546 JMS I BKLOCI /OUTPUT IN BLOCK.LOC FORM -01270 0061 UBLK-1 -01271 5204 JMP XSHCR - -01272 4525 XSHLOW, JMS I TYPSI /"LOWER = " -01273 4223 MS05 -01274 4546 JMS I BKLOCI -01275 0064 LBLK-1 -01276 5204 JMP XSHCR - -01277 4525 XSHFMT, JMS I TYPSI /"FORMAT = " -01300 4230 MS06 -01301 1042 TAD FCNT -01302 1376 TAD (FMTLS-1 /SET UP FOR CORRECT TITLE -01303 3010 XSHFM, DCA DPNT -01304 4553 TADIDP /GET MESSAGE ADDRESS -01305 4524 JMS I TYPSTI /OUTPUT DESCRIPTOR -01306 5204 JMP XSHCR - -01307 4525 XSHMOD, JMS I TYPSI /"MODE = " -01310 4247 MS10 -01311 1044 TAD MODSW /GET CORRECT MESSAGE -01312 1375 TAD (MODELS-1 /(OFFSET INTO TABLE) -01313 5303 JMP XSHFM /GET ADDRESS & OUTPUT - -01314 4525 XSHOUT, JMS I TYPSI /"OUTPUT = " -01315 4367 MS30 -01316 1017 TAD TYPSW /SET UP MESSAGE ADDRESS -01317 1374 TAD (OUTLS-1 /(OFFSET INTO TABLE) -01320 5303 JMP XSHFM - -01321 4525 XSHSMS, JMS I TYPSI /"SMASK = " -01322 4203 MS07 -01323 1076 TAD SMASKL -01324 3021 DCA TEMP /-# TO OUTPUT -01325 1176 TAD MASKBS -01326 3010 DCA DPNT /SET UP TO OUTPUT -01327 1111 TAD M10 /SET LINE LENGTH -01330 3022 DCA TEMP1 -01331 5342 JMP XSHSM2 -01332 4527 XSHSM1, JMS I TWOCI /OUTPUT ", " -01333 5440 5440 -01334 2022 ISZ TEMP1 /ENOUGH ON THIS LINE? -01335 5342 JMP XSHSM2 /NO, OK -01336 4530 JMS I CRLFI /YES, OUTPUT CR-LF -01337 4533 SPACE2 / & 2 SPACES - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 9-2 - -01340 7240 STA /MAKE LINE 1 LONGER -01341 5327 JMP XSHSM1-3 /AND RESET LENGTH - / -01342 4553 XSHSM2, TADIDP /GET NEXT VALUE -01343 4540 JMS I OCTI / & OUTPUT IT -01344 2021 ISZ TEMP /ENOUGH? -01345 5332 JMP XSHSM1 -01346 5204 JMP XSHCR /OK, GET NEXT WORD - -01347 4525 XSHDEV, JMS I TYPSI /"DEVICE = XXXX" -01350 2457 MSDEV -01351 4527 JMS I TWOCI /NOW OUTPUT " (" -01352 4050 4050 -01353 1101 TAD DEVNO /GET THE DEVICE # -01354 4541 JMS I DEC2I / & OUTPUT AS 2 DIGITS -01355 4526 JMS I TYPECI /FINALLY OUTPUT ")" -01356 0251 ") -01357 5204 JMP XSHCR - -01360 4525 XSHDDEV,JMS I TYPSI /"DDEV = XXXX" -01361 2450 MSDDEV -01362 5204 JMP XSHCR - - -01363 0000 FPRNT, 0 /PRINT FIELD DIGIT FROM BITS 6-8 -01364 4773 JMS I (FPRNTX /FIRST PRINT BANK BITS -01365 7012 RTR /MOVE TO BITS 9-11 -01366 7010 RAR -01367 0113 AND N7 /MASK TO 1 DIGIT -01370 4531 DIGIT / & OUTPUT IN ASCII -01371 5763 JMP I FPRNT - - -01373 7011 -01374 5274 -01375 5270 -01376 4777 -01377 0600 - 1400 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 10 - - /CONTINUATION OF 'SHOW' COMMAND - - /SHOW 'CCB' HANDLER -01400 6213 XSHCCB, CDF CIF 10 -01401 4777' JMS GCCB /SET UP CCB FOR FILE -01402 3001 DCA DPSGN / & SET UP SEGMENTS -01403 4525 JMS I TYPSI /"CCB:" -01404 4253 MS11 -01405 4353 JMS CCHDST /DO SETUP, OUTPUT START -01406 4525 JMS I TYPSI /", JSW = " -01407 4317 MS19 -01410 4776' JMS NXTOCT /OUTPUT J.S.W. IN OCTAL -01411 4530 JMS I CRLFI -01412 4525 JMS I TYPSI /" CORE SEGS: " -01413 4267 MS14 -01414 1375 XSHCC1, TAD (-4 -01415 3037 DCA CNTR /-#/LINE -01416 4553 XSHCC2, TADIDP /GET ORIGIN WORD -01417 3022 DCA TEMP1 -01420 4553 TADIDP / & COUNT WORD -01421 3023 DCA TEMP2 - / TAD TEMP2 /GO OUTPUT START FIELD - / JMS FPRNT -01422 4774 JMS I (ADFLD /ADJUST BANK AND FIELD FOR 128K -01423 1022 TAD TEMP1 / & START ADDR -01424 4540 JMS I OCTI -01425 4526 JMS I TYPECI / & A "-" -01426 0255 "- - / TAD TEMP2 /OUTPUT FIELD AGAIN - / JMS FPRNT -01427 4774 JMS I (ADFLD /ADJUST BANK AND FIELD (128K) -01430 1023 TAD TEMP2 / PAGE COUNT -> PAGES -01431 7104 CLL RAL -01432 0106 AND M200 /MASK OFF FIELD DATA -01433 1022 TAD TEMP1 /ADD ORIGIN ADDR -01434 1112 TAD M1 / & SUBTRACT 1 FOR END -01435 4540 JMS I OCTI /OUTPUT END ADDR IN OCTAL -01436 2001 ISZ DPSGN /DONE? -01437 5245 JMP XSHCC4 /NO -01440 1000 TAD OVLFLG /YES, OVERLAYS? (LINK OUTPUT) -01441 7450 SNA -01442 5773' JMP XSHCR / NO, DONE -01443 3010 DCA DPNT / YES, RESET POINTER -01444 5277 JMP XSHHD1 / & CONTINUE - / -01445 4527 XSHCC4, JMS I TWOCI /OUTPUT SEPARATOR -01446 5440 5440 -01447 2037 ISZ CNTR /DONE ON THIS LINE? -01450 5216 JMP XSHCC2 /NO -01451 4530 JMS I CRLFI /YES -01452 4533 SPACE2 /ADD 2 SPACES -01453 7240 STA /AND 1 MORE ITEM PER LINE -01454 5214 JMP XSHCC1 - - /SHOW 'HEADER' HANDLER - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 10-1 - -01455 6213 XSHHDR, CDF CIF 10 -01456 4772' JMS GHDR /SET UP HEADER FOR MODULE -01457 4525 JMS I TYPSI /"HEADER:" -01460 4422 MS38 -01461 4353 JMS CCHDST /DO SETUP, OUTPUT START -01462 4525 JMS I TYPSI /", NEXT WORD = " -01463 4426 MS39 -01464 4553 TADIDP /GET FIELD DIGIT -01465 4531 DIGIT / & OUTPUT -01466 4776' JMS NXTOCT /FOLLOWED BY ADDRESS -01467 4525 JMS I TYPSI /", LOAD VER = " -01470 4436 MS40 -01471 4776' JMS NXTOCT / & OUTPUT VERSION -01472 4553 TADIDP /GET E.P. FLAG -01473 7650 SNA CLA -01474 5277 JMP XSHHD1 / NO E.P. -01475 4525 JMS I TYPSI /", EP REQ'D" -01476 4443 MS41 -01477 4530 XSHHD1, JMS I CRLFI /TO THE NEXT LINE -01500 4525 JMS I TYPSI /" OVLYS START... -01501 4452 MS42 -01502 4553 XSHHD2, TADIDP /GET NUMBER OF OVERLAYS -01503 7450 SNA / FOR THIS LEVEL -01504 5773' JMP XSHCR / 0 = END, DONE -01505 3022 DCA TEMP1 /SAVE IT -01506 4530 JMS I CRLFI /OUTPUT A CR/LF -01507 4533 SPACE2 / AND 4 SPACES -01510 4533 SPACE2 -01511 1022 TAD TEMP1 -01512 4541 JMS I DEC2I /# OVLYS IN DECIMAL -01513 4533 SPACE2 -01514 4553 TADIDP /GET MEMORY START WORD -01515 3023 DCA TEMP2 -01516 1023 TAD TEMP2 -01517 4771' JMS FPRNT /OUTPUT START FIELD -01520 1023 TAD TEMP2 -01521 0103 AND M400 / & DOUBLE-PAGE -01522 4540 JMS I OCTI -01523 4533 SPACE2 -01524 4776' JMS NXTOCT /OUTPUT RELATIVE BLOCK -01525 4533 SPACE2 -01526 4776' JMS NXTOCT /OUTPUT OVERLAY LENGTH -01527 5302 JMP XSHHD2 /AND DO ANOTHER ROUND! - - /SHOW 'ERRORS' HANDLER -01530 4770' XSHERR, JMS USROUT /BE SURE MESSAGES ARE IN -01531 2052 ISZ DSWIT /SET DUMP SWITCH -01532 4525 JMS I TYPSI /"ERRORS: FUTIL VERSION ..." -01533 2500 MSERR -01534 4530 JMS I CRLFI -01535 7201 CLA IAC -01536 3010 DCA DPNT /SET POINTER & CODE -01537 4530 XSHER1, JMS I CRLFI /DO ANOTHER CR/LF -01540 1010 TAD DPNT /TEST FOR LAST REAL MESSAGE -01541 1367 TAD (-EMSEND /(NOT DEBUG MESSAGE!) - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 10-2 - -01542 7650 SNA CLA -01543 5773' JMP XSHCR -01544 1010 TAD DPNT /OUTPUT ERROR CODE -01545 4541 JMS I DEC2I / AS 2 DIGITS -01546 4525 JMS I TYPSI /THEN " = " -01547 4200 MS01 -01550 4553 TADIDP /GET ADDR OF MESSAGE AND -01551 4524 JMS I TYPSTI / OUTPUT IT -01552 5337 JMP XSHER1 - - -01553 0000 CCHDST, 0 -01554 4530 JMS I CRLFI -01555 4525 JMS I TYPSI /" SA = " -01556 4313 MS18 -01557 1366 TAD (CCBB -01560 3010 DCA DPNT /SET UP POINTER TO DATA -01561 4553 TADIDP /GET 2ND WORD FROM CCB/HDR -01562 4771' JMS FPRNT /IT HAS START FIELD SO OUTPUT -01563 4776' JMS NXTOCT / FOLLOWED BY START ADDR -01564 5753 JMP I CCHDST - - -01566 6400 -01567 7720 -01570 0544 -01571 1363 -01572 2050 -01573 1204 -01574 7000 -01575 7774 -01576 1766 -01577 2000 - 1600 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 11 - - /ROUTINE TO EXECUTE THE 'SET' COMMAND -01600 2046 XSETN, ISZ CRSWT /WAS LAST INFO ENDED BY CR? -01601 5572 JMP I RESTAR /YES, DONE -01602 4556 XSET, JMS I GWORDI /GET OPTION WORD -01603 5211 JMP XSET1 /NO NUMBERS PLEASE! -01604 2046 ISZ CRSWT /WAS WORD ENDED BY A CR? -01605 4573 ERCK, ERROR /YES, ILLEGAL HERE -01606 4567 JMS I SORTI /LOOK UP WORD -01607 5110 SETLST-1 -01610 0060 SETJMP-SETLST -01611 4573 XSET1, ERROR /WHAT??? - - - /ROUTINE TO 'SET' THE 'DMODE' (DUMP MODE) -01612 4556 XDMODE, JMS I GWORDI /GET A WORD -01613 5217 JMP ERC11 /NO NUMBERS HERE! -01614 4567 JMS I SORTI /LOOK IT UP -01615 5260 XDMLST-1 -01616 0004 XDMOPS-XDMLST -01617 4573 ERC11, ERROR /NO LIKEE!! - / -01620 7350 CLL STA RAR /4000: 'ALL' (ECHO TO TTY & FILE) -01621 7001 XDMODS, IAC / 1: 'PART' (ONLY DUMP,LIST,ETC) -01622 3053 DCA DMODE / 0: 'NONE' (TTY ONLY) -01623 5200 JMP XSETN - - - /ROUTINE TO 'SET' THE 'OUTPUT' OPTION -01624 4556 XOUTS, JMS I GWORDI /GET OPTION WORD -01625 5231 JMP ERCL / # IN THE BUFFER -01626 4567 JMS I SORTI /LOOK IT UP -01627 5222 XOLST-1 -01630 0007 XOOPS-XOLST -01631 4573 ERCL, ERROR /NOT FOLLOWED BY LEGAL WORD - / -01632 7344 CLL STA RAL /-1: 'FPP' (SYMBOLIC) -01633 7001 XOUTS1, IAC /+1: 'PDP' (SYMBOLIC) -01634 3017 DCA TYPSW / 0: 'OCTAL' -01635 5200 JMP XSETN - - - /ROUTINE TO 'SET' THE 'MASK' OPTION -01636 4560 XMASK, JMS I ARGI /GET ONE ARG -01637 1025 TAD ACC1 /GET 'LOC' -01640 3075 DCA MASK / & SET MASK -01641 5200 JMP XSETN - - - /ROUTINE TO 'SET' THE 'OFFSET' OPTION -01642 4560 XOFFS, JMS I ARGI /GET ONE ARG -01643 1025 TAD ACC1 /GET # -01644 7041 CIA -01645 3073 DCA OFFSET /SET IT -01646 5200 JMP XSETN - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 11-1 - - - /ROUTINE TO 'SET' THE 'ERROR' (MODE) OPTION -01647 4556 XEMODE, JMS I GWORDI /GET WORD -01650 5254 JMP ERCZ /NO NUMBERS ALLOWED!!! -01651 4567 JMS I SORTI /LOOK IT UP -01652 5211 XELST-1 -01653 0005 XEOPS-XELST -01654 4573 ERCZ, ERROR /ILLEGAL SOMETHING - / -01655 7001 XEMOD1, IAC /'SHORT' -01656 3020 DCA ERMODE /'LONG' -01657 5200 JMP XSETN - - - /ROUTINE TO 'SET' THE 'UPPER' LIMITS OPTION -01660 4565 XUPP, JMS I LIMITI /UPPER, GET ARGS -01661 0062 UBLK -01662 5200 JMP XSETN - - /ROUTINE TO 'SET' THE 'LOWER' LIMITS OPTION -01663 4565 XLOW, JMS I LIMITI /LOWER, GET ARGS -01664 0065 LBLK -01665 5200 JMP XSETN - - /ROUTINE TO 'SET' THE 'MODE' OPTION -01666 4556 XMODE, JMS I GWORDI /GET OPTION WORD -01667 5273 JMP ERCJ /NUMBER IN BUFFER, BAIL OUT -01670 4567 JMS I SORTI /LOOK IT UP -01671 5237 MODLST-1 -01672 0011 MODOPS-MODLST -01673 4573 ERCJ, ERROR /NOT RECOGNIZED - / -01674 7346 CLL STA RTL /-1: OFFSET -01675 7001 XMODS, IAC /+2: LOAD (MODULE) -01676 7001 IAC /+1: SAVE (FILE) -01677 3044 DCA MODSW / 0: NORMAL -01700 5200 JMP XSETN - - /ROUTINE TO 'SET' THE 'FILLER' OPTION -01701 4560 XFILL, JMS I ARGI /GET ONE ARG -01702 1025 TAD ACC1 -01703 3074 DCA FILLER / & SET AS FILLER -01704 5200 JMP XSETN - - /ROUTINE TO 'SET' THE 'TEMP' STORAGE -01705 4560 XTEMP, JMS I ARGI /GET THE 24 BIT ARG (EXPRESSION!) -01706 1025 TAD ACC1 /NOW SAVE THE 24 BITS FOR LATER -01707 3033 DCA TEMPV1 -01710 1026 TAD ACC2 /GET IT BACK WITH "EVAL T" -01711 3034 DCA TEMPV2 / (OR IN AN EXPRESSION) -01712 5200 JMP XSETN - - - /ROUTINE TO EXECUTE THE 'IF' COMMAND -01713 4547 XIF, JMS I EVALI /EVALUATE THE EXPRESSION - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 11-2 - -01714 7410 SKP / TERMIN = CR, OK -01715 5777' JMP ERCC / TOO MANY PARENS -01716 1025 TAD ACC1 /TEST THE 24-BIT VALUE FOR ZERO -01717 7450 SNA -01720 1026 TAD ACC2 -01721 7650 SNA CLA -01722 5572 JMP I RESTAR /OK, JUST CONTINUE -01723 1174 XIFSKP, TAD COMST /NOT ZERO, BEGIN SKIPPING FOR -01724 3015 DCA COMIR / LINE STARTING WITH "END" -01725 4523 READLN /GET A LINE FROM THE INPUT -01726 4522 TYPEM-1 / WITH THESE TERMINATORS -01727 0342 IFSKPO-TYPEM -01730 5323 JMP XIFSKP /BUFFER EMPTIED - / -01731 4570 XIFCR, JMS I ENDCI /CR FOUND, TIDY THINGS UP -01732 5323 JMP XIFSKP / CR ONLY -01733 4556 JMS I GWORDI /GET 1ST WORD ON LINE -01734 5323 JMP XIFSKP / NO WORD -01735 1376 TAD (-0516 /IS THE WORD "EN..."? -01736 7640 SZA CLA -01737 5323 JMP XIFSKP / NO, KEEP LOOKING! -01740 5572 JMP I RESTAR /YES! BEGIN EXECUTION AGAIN! - - - /ROUTINE TO OUTPUT LOCATION THAT SATISFIED ONE - /OF THE SEARCH COMMANDS. IF ABSSW=0, OUTPUT - /AS RELATIVE LOCATION. -01741 0000 ABKLOC, 0 -01742 1051 TAD ABSSW /IS IT 0? -01743 7640 SZA CLA -01744 5353 JMP ABK2 /NO, OUTPUT AS ABSOLUTE -01745 4546 JMS I BKLOCI /OUTPUT LOCATION -01746 0056 BLK-1 -01747 4527 ABK1, JMS I TWOCI /OUTPUT ": " -01750 7240 7240 -01751 4535 JMS I TWOT -01752 5741 JMP I ABKLOC - / -01753 1061 ABK2, TAD LOCL /MAKE ABSOLUTE -01754 0121 AND N377 -01755 3056 DCA CAD -01756 4546 JMS I BKLOCI /NOW OUTPUT IT -01757 0053 CBLK-1 -01760 5347 JMP ABK1 - -01761 0000 TWOCS, 0 /OUTPUT 2-CHARACTER ARG -01762 1761 TAD I TWOCS /GET ARG -01763 2361 ISZ TWOCS /SKIP IT -01764 4535 JMS I TWOT /OUTPUT IT -01765 5761 JMP I TWOCS - -01766 0000 NXTOCT, 0 -01767 4553 TADIDP /GET NEXT WORD FROM BLOCK -01770 4540 JMS I OCTI / & OUTPUT IN OCTAL -01771 5766 JMP I NXTOCT - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 11-3 - - - -01776 7262 -01777 0402 - 2000 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 12 - - /ROUTINE TO EXECUTE THE 'WORD' SEARCH COMMAND -02000 4247 XWORD, JMS SSET /INITIALIZE SEARCH -02001 1236 TAD CNOP /SET UP FOR NORMAL, -02002 3237 DCA CNOP+1 -02003 1111 TAD M10 / EQUAL SEARCH -02004 1377 XWOR2, TAD (SNA CLA /"UNEQUAL" WORD SEARCH -02005 3233 DCA XWORC -02006 4556 XWOR1, JMS I GWORDI /GET POSSIBLE WORD -02007 5221 JMP XWOR3 /NUMBERS IN BUFFER -02010 2046 ISZ CRSWT /WAS IT ENDED BY A CR? -02011 4573 ERCI, ERROR /YES, VELLY SOLLY! -02012 4567 JMS I SORTI /LOOK UP COMMAND: UN, ME, -02013 5276 XWORCL-1 / AB, FR, TO -02014 0014 XWOROP-XWORCL -02015 4573 ERCH, ERROR /COMMAND NOT RECOGNIZED - / -02016 1230 XWOR7, TAD XWOR4+1 /"MEMREF", ONLY MEMORY- -02017 3237 DCA CNOP+1 / REFERENCE OP-CODES CAN -02020 5206 JMP XWOR1 / EVER BE OUTPUT. - / -02021 4560 XWOR3, JMS I ARGI /GET AN ARG -02022 1025 TAD ACC1 /GET THE VALUE -02023 0075 AND MASK -02024 7041 CIA -02025 3036 DCA CNT /LOOK FOR THIS WORD -02026 4307 JMS LSETUP /SET UP COUNT OF WORDS TO DO -02027 4561 XWOR4, JMS I GETI /GET A WORD -02030 5245 JMP XWOR5 /FILE MODE, NO SUCH ADDRESS -02031 0075 AND MASK -02032 1036 TAD CNT -02033 7402 XWORC, HLT /WILL BE "SZA CLA" OR "SNA CLA" -02034 5245 JMP XWOR5 /DID NOT MATCH -02035 4776' JMS OPRTST /TEST FOR OP-CODES 6 & 7 -02036 7000 CNOP, NOP / 7--OPR -02037 7000 NOP / 6--IOT;"NOP" OR "JMP XWOR5" -02040 4775' JMS ABKLOC /DID MATCH, OUTPUT LOC -02041 4561 JMS I GETI /GET THAT WORD -02042 5774' JMP ERCP / OH I HOPE NOT!!! -02043 4540 JMS I OCTI /AND OUTPUT IT IN OCTAL -02044 4530 JMS I CRLFI -02045 4347 XWOR5, JMS LCHEK /DONE YET? -02046 5227 JMP XWOR4 /NO - - /SUBROUTINE TO INITIALIZE THE SEARCH COMMANDS -02047 0000 SSET, 0 -02050 3051 DCA ABSSW /RESET ABSOLUTE SWITCH -02051 1065 TAD LBLK /SET UP START BLK & LOC -02052 3057 DCA BLK -02053 1066 TAD LLOCH -02054 3060 DCA LOCH -02055 1067 TAD LLOCL -02056 3061 DCA LOCL -02057 1062 TAD UBLK /SET UP END BLK & LOC -02060 3304 DCA EBLK -02061 1063 TAD ULOCH - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 12-1 - -02062 3305 DCA ELOCH -02063 1064 TAD ULOCL -02064 3306 DCA ELOCL -02065 5647 JMP I SSET - - /COMMON OPTIONS FOR 'WORD' AND 'STRING' SEARCHES - -02066 7240 XWSABS, STA -02067 3051 DCA ABSSW /'ABSOLUTE'--SET SWITCH -02070 5300 JMP XWSRET - / -02071 4565 XWSFRM, JMS I LIMITI /'FROM'--GET LOWER LIMITS -02072 0057 BLK -02073 5300 JMP XWSRET - / -02074 1062 XWSTO, TAD UBLK /'TO'--SET UP IF NEEDED -02075 3304 DCA EBLK -02076 4565 JMS I LIMITI / & GET UPPER LIMITS -02077 2104 EBLK -02100 7344 XWSRET, STA CLL RAL /= -2, CALCULATE RETURN ADDRESS AS -02101 1556 TAD I GWORDI / LAST CALL TO "GWORD" TO ALLOW -02102 3347 DCA LCHEK / THESE TO BE COMMON TO BOTH -02103 5747 JMP I LCHEK / 'WORD' AND 'STRING' SEARCHES. -02104 0000 EBLK, 0 -02105 0000 ELOCH, 0 -02106 0000 ELOCL, 0 - - -02107 0000 LSETUP, 0 /SET SEARCH WORD-COUNTERS **** SEE NOTE **** -02110 3025 DCA ACC1 /INITIALIZE THESE TO 0 -02111 3026 DCA ACC2 -02112 1044 TAD MODSW /IN A MAPPED MODE? -02113 7740 SMA SZA CLA -02114 5327 JMP LSETL / YES, IGNORE BLOCK PARTS -02115 1057 TAD BLK / NO, SET UP FOR 24 BIT -02116 3025 DCA ACC1 -02117 1304 TAD EBLK / BLK-EBLK -02120 3031 DCA OPER1 -02121 3032 DCA OPER2 -02122 4773' JMS DSUB /DO THE SUBTRACTION -02123 1372 TAD (400 /NOW SET UP MULTIPLY BY 400 -02124 3031 DCA OPER1 -02125 3032 DCA OPER2 -02126 4771' JMS DMUL /GIVES: (BLK-EBLK)*400 -02127 7101 LSETL, CLL IAC -02130 1306 TAD ELOCL -02131 3031 DCA OPER1 /NOW SET UP ELOC+1 -02132 7004 RAL -02133 1305 TAD ELOCH -02134 3032 DCA OPER2 -02135 4773' JMS DSUB /AND SUBTRACT IT -02136 1061 TAD LOCL /NOW ADD LOC TO GIVE: -02137 3031 DCA OPER1 / (BLK-EBLK)*400+(LOC-ELOC-1) -02140 1060 TAD LOCH / WHICH IS 24-BIT COUNT OF -02141 3032 DCA OPER2 / WORDS TO SEARCH. - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 12-2 - -02142 4770' JMS DADD -02143 1026 TAD ACC2 /IF NOT NEGATIVE, ALREADY TOO -02144 7700 SMA CLA -02145 5571 JMP I RECRLF / FAR, SO JUST QUIT NOW! -02146 5707 JMP I LSETUP - - /**** NOTE: COUNT LEFT SET UP IN ACC1 & ACC2 **** - -02147 0000 LCHEK, 0 /CHECK IF SEARCH RANGE EXHAUSTED -02150 4566 JMS I INCI /INCREMENT LOC -02151 2025 ISZ ACC1 /COUNT WORDS TO DO -02152 5747 JMP I LCHEK -02153 2026 ISZ ACC2 / (24-BIT) -02154 5747 JMP I LCHEK -02155 5571 JMP I RECRLF /DO CR/LF & STOP! - - -02156 0000 TIDPNT, 0 /"TAD I DPNT" IN FIELD 1 -02157 6211 CDF 10 -02160 1410 TAD I DPNT -02161 6201 CDF 0 -02162 5756 JMP I TIDPNT - - -02163 0000 ASCII, 0 /ASCII OUTPUT FORMAT FROM DEVICE -02164 0117 AND N177 /MAKE CHARS INTO "STANDARD" -02165 1120 TAD N200 / FORM: 7 BITS + PARITY ON -02166 4536 JMS I TYPEI / TO CAUSE CORRECT PRINTING -02167 5763 JMP I ASCII - - -02170 5650 -02171 6000 -02172 0400 -02173 5662 -02174 2473 -02175 1741 -02176 4547 -02177 7650 - 2200 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 13 - - /ROUTINE TO 'REWIND' THE DEVICE -02200 6211 XREWIN, CDF 10 -02201 1102 TAD USRAD /RESET DIRECTORY SEGMENT KEY -02202 7700 SMA CLA -02203 3513 DCA I N7 / IN USR IF IT IS IN MEMORY. -02204 6201 CDF 0 -02205 4500 JMS I DEVAD /CALL HANDLER -02206 0110 0110 /READ, 1 PAGE, FIELD 1 -02207 6127 PDLB /DUMMY BUFFER (ZAP P.D.L.) -02210 0001 1 /BLK 1 -02211 5213 JMP RERROR /READ ERROR! -02212 5572 JMP I RESTAR - - /READ ERROR--TEST TYPE & OUTPUT MESSAGE - -02213 7710 RERROR, SPA CLA /BIT 0 = 1 IF FATAL -02214 4573 ERC00, ERROR /FATAL -02215 4573 ERC01, ERROR /NON-FATAL - - - /ROUTINE TO EXECUTE THE 'STRING' SEARCH COMMAND -02216 4777' XSTRIN, JMS SSET /INITIALIZE -02217 1376 TAD (STJMP-STCDF /RESET MASKING SWITCH -02220 1200 XSTR0, TAD XREWIN / OR SET MASKING SWITCH -02221 3360 DCA SMSKSW -02222 4556 JMS I GWORDI /GET POSSIBLE WORD -02223 5232 JMP XSTR1 /NUMBERS ONLY -02224 2046 ISZ CRSWT /FOLLOWED BY A CR? -02225 5775' JMP ERCI / YES, KICK OUT***** -02226 4567 JMS I SORTI /LOOK UP OPTION: MA, -02227 5300 STRLST-1 / AB, FR, TO -02230 0025 STROPS-STRLST -02231 5774' JMP ERCH /NO LIKEE! - / -02232 4557 XSTR1, JMS I GARGI /GET ARGS - THEN REPACK INTO BUFFER -02233 1021 TAD TEMP / MASKING THEM IF SPECIFIED -02234 3037 DCA CNTR /SET UP LENGTH -02235 1175 TAD TEMPST -02236 3013 DCA SCANX2 /STORING DONE IN NEG. FORM -02237 5242 JMP XSTR2+2 /GO SET UP MASK - / -02240 2024 XSTR2, ISZ TEMP3 /MASK END? -02241 5246 JMP XSTR3 -02242 1176 TAD MASKBS /YES, RESET MASK -02243 3011 DCA SPNT -02244 1076 TAD SMASKL /SET UP LENGTH -02245 3024 DCA TEMP3 -02246 2010 XSTR3, ISZ DPNT /SKIP 2 EXTRA WORDS -02247 2010 ISZ DPNT -02250 1410 TAD I DPNT /GET A WORD -02251 4357 JMS STRMSK /TEST & MASK -02252 7041 CIA /NEGATE -02253 3413 DCA I SCANX2 /STORE -02254 2010 ISZ DPNT /BUMP POINTER -02255 2037 ISZ CNTR /DONE? - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 13-1 - -02256 5240 JMP XSTR2 -02257 4773' JMS LSETUP /YES, SET UP COUNT OF WORDS -02260 1175 XSTR4, TAD TEMPST /SET UP FOR SEARCH: -02261 3010 DCA DPNT / STRING, -02262 1021 TAD TEMP -02263 3037 DCA CNTR / & STRING LENGTH. -02264 1061 TAD LOCL -02265 3366 DCA XLOCL /SAVE CURRENT LOCATION -02266 1060 TAD LOCH -02267 3365 DCA XLOCH -02270 1057 TAD BLK -02271 3364 DCA XBLK -02272 1025 TAD ACC1 / & COUNT FOR RESET -02273 3031 DCA OPER1 -02274 1026 TAD ACC2 -02275 3032 DCA OPER2 -02276 5302 JMP XSTR6 /NOW SET UP MASK - / -02277 4772' XSTR5, JMS LCHEK /DONE? -02300 2024 ISZ TEMP3 /NO, AT MASK END? -02301 5306 JMP XSTR7 -02302 1176 XSTR6, TAD MASKBS / YES, RESET MASK -02303 3011 DCA SPNT -02304 1076 TAD SMASKL -02305 3024 DCA TEMP3 -02306 4561 XSTR7, JMS I GETI /GET NEXT WORD -02307 5333 JMP XSTR10 /MAPPED MODE, NO SUCH ADDRESS -02310 4357 JMS STRMSK /TEST & MASK -02311 1410 TAD I DPNT /COMPARE? -02312 7640 SZA CLA -02313 5333 JMP XSTR10 /NO, GO RESET & CONTINUE -02314 2037 ISZ CNTR /MATCHED ENOUGH? -02315 5277 JMP XSTR5 /NOT YET -02316 4343 JMS XRSET /YES, RESET LOCATION & COUNT -02317 1021 TAD TEMP /AND LENGTH -02320 3037 DCA CNTR -02321 1111 XSTR8, TAD M10 -02322 3027 DCA ACCX1 / -(#/LINE) -02323 4771' JMS ABKLOC /OUTPUT THIS LOCATION -02324 4561 XSTR9, JMS I GETI /GET A WORD -02325 5770' JMP ERCP /BAD,BAD,BAD!!! -02326 4540 JMS I OCTI /AND OUTPUT IN OCTAL -02327 4566 JMS I INCI /INCREMENT LOC -02330 2037 ISZ CNTR /DONE? -02331 5336 JMP XSTR11 /NO, CONTINUE -02332 4530 JMS I CRLFI /YES, OUTPUT CR/LF -02333 4343 XSTR10, JMS XRSET /RESET LOCATION & COUNT -02334 4772' JMS LCHEK /DONE? -02335 5260 JMP XSTR4 /NO, LOC INC'D, TRY NEXT - / -02336 4533 XSTR11, SPACE2 /OUTPUT " " -02337 2027 ISZ ACCX1 /DONE ON THIS LINE? -02340 5324 JMP XSTR9 /NO, NOT YET -02341 4530 JMS I CRLFI /YES -02342 5321 JMP XSTR8 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 13-2 - - -02343 0000 XRSET, 0 /RESET BLK & LOC FROM XBLK & XLOC -02344 1366 TAD XLOCL /LOC -02345 3061 DCA LOCL -02346 1365 TAD XLOCH -02347 3060 DCA LOCH -02350 1364 TAD XBLK /BLK -02351 3057 DCA BLK -02352 1031 TAD OPER1 /WORDS LEFT TO SEARCH -02353 3025 DCA ACC1 -02354 1032 TAD OPER2 -02355 3026 DCA ACC2 -02356 5743 JMP I XRSET - -02357 0000 STRMSK, 0 /STRING MASKING *** NEXT WORD MODIFIED *** -02360 6211 SMSKSW, CDF 10 /"CDF 10" OR "JMP I STRMSK" -02361 0411 AND I SPNT /OK, MASK IN FIELD 1 -02362 6201 CDF 0 -02363 5757 JMP I STRMSK - 5757 STJMP= JMP I STRMSK - 6211 STCDF= CDF 10 - -02364 0000 XBLK, 0 -02365 0000 XLOCH, 0 -02366 0000 XLOCL, 0 - - -02370 2473 -02371 1741 -02372 2147 -02373 2107 -02374 2015 -02375 2011 -02376 7546 -02377 2047 - 2400 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 14 - - /ROUTINE TO EXECUTE THE BLOCK 'WRITE' COMMAND -02400 4560 XWRARG, JMS I ARGI /GET ONE ARG -02401 1025 TAD ACC1 /USE IT AS THE BLOCK -02402 7410 SKP -02403 1777' XWRITE, TAD WBLK /SET BLOCK -02404 3210 DCA XWBLK -02405 4500 JMS I DEVAD /CALL HANDLER -02406 4210 4210 /WRITE, 2 PAGES, FIELD 1 -02407 7200 IOBUF -02410 0000 XWBLK, 0 /[** COUNTER FOR MODIFY **] -02411 5214 JMP WERROR /WRITE ERROR -02412 3050 DCA MODIF /CLEAR SOMETHING-CHANGED FLAG -02413 5572 JMP I RESTAR - - /WRITE ERROR--TEST TYPE & OUTPUT MESSAGE - -02414 7710 WERROR, SPA CLA /BIT 0 = 1 IF FATAL -02415 4573 ERC02, ERROR /FATAL -02416 4573 ERC03, ERROR /NON-FATAL - - - /ROUTINE TO EXECUTE THE 'MODIFY' COMMAND -02417 4556 XMODIF, JMS I GWORDI /GET FORMAT WORD IF ONE -02420 5231 JMP XMODEF /NONE, GET DEFAULT -02421 3277 DCA MODTMP /SAVE FOR LATER -02422 2046 ISZ CRSWT /TERMINATED BY A CR? -02423 5230 JMP ERCO / YES, SAVE USER FROM HIMSELF! -02424 1277 TAD MODTMP /TEST FORMAT FOR RECOGNITION -02425 4567 JMS I SORTI -02426 5013 MODIFL-1 -02427 0021 MODADS-MODIFL -02430 4573 ERCO, ERROR / I THEENK YOU USE BAD WORD! - / - /NO FORMAT DESCRIPTOR GIVEN, USE DEFAULT -02431 1042 XMODEF, TAD FCNT /USE CURRENT FORMAT, -02432 1376 TAD (MODDLS-1 / WITH A LITTLE DIFFERENCE -02433 3010 DCA DPNT -02434 4553 TADIDP /GET THE ONE TO USE -02435 3277 DCA MODTMP / AND SAVE IT - / -02436 4557 XMOD0, JMS I GARGI /OK, NOW GET ARGS -02437 1021 TAD TEMP /MOVE COUNT TO A SAFE PLACE -02440 3210 DCA XWBLK -02441 1410 XMOD1, TAD I DPNT /GET BLOCK # -02442 4775' JMS BLKTST /TEST & SET BLK -02443 1410 TAD I DPNT /GET LOC -02444 3060 DCA LOCH -02445 1410 TAD I DPNT -02446 3061 DCA LOCL -02447 1410 TAD I DPNT /GET -(# LOCS) -02450 3037 DCA CNTR -02451 1174 XMOD2, TAD COMST /INIT COMM. BUFF. FOR MODS -02452 3015 DCA COMIR -02453 3045 DCA CHARSW /RESET HALF SWITCH -02454 4545 JMS I SOCTI /INITIALIZE INPUT TO OCTAL - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 14-1 - -02455 4546 JMS I BKLOCI /OUTPUT START LOC -02456 0056 BLK-1 -02457 4527 JMS I TWOCI /AND ": " -02460 7240 7240 -02461 4523 READLN /GET A LINE (TEST: RUBOUT, ^U & ^R) -02462 4522 TYPEM-1 /IGNORE LF'S -02463 0340 MCHARO-TYPEM -02464 5251 JMP XMOD2 /BUFFER EMPTIED! - - - /CR TYPED, END -02465 4570 XMODCR, JMS I ENDCI /END BUFFER WITH A CR. -02466 5251 JMP XMOD2 /ONLY A CR IN BUFFER-RETRY! -02467 1277 TAD MODTMP /NOW LOOK UP FORMAT -02470 4567 JMS I SORTI -02471 5013 MODIFL-1 -02472 0011 MODIFO-MODIFL -02473 4573 ERCP, ERROR /ILLEGAL (EXTRA BAD IF HERE) - -02474 2210 XMODDN, ISZ XWBLK /RETURN HERE, ALL ARGS DONE? -02475 5241 JMP XMOD1 /NO -02476 5572 JMP I RESTAR /YES -02477 0000 MODTMP, 0 - -02500 0000 XGET, 0 /SUB. TO SET CURRENT LOC & FLAG -02501 4561 JMS I GETI /SET LOCATION -02502 4573 ERC07, ERROR /MAPPED MODE, NO SUCH ADDRESS -02503 7240 STA -02504 3050 DCA MODIF /SET FLAG -02505 5700 JMP I XGET - - /NUMERIC FORMATS HERE -02506 4567 XNUM0, JMS I SORTI /TEST TERMINATOR -02507 5443 GETLST-1-1 /SPACE, COMMA, CR -02510 7423 NUMOPS-GETLST+1 -02511 5774' JMP ERCQ /ILLEGAL TERMIN - / -02512 4563 XNUM1, JMS I GETNI /COMMA, SKIP IT -02513 4564 JMS I SSKIPI / SPACE, IGNORE IT -02514 4773' XNUM2, JMS EXPRIN /GET NEXT ARG--EXPRESSION -02515 4300 JMS XGET /SET UP LOCATION -02516 1025 TAD ACC1 -02517 4555 DCAICAD / & STORE VALUE -02520 4566 JMS I INCI /INCREMENT LOCATION -02521 2037 ISZ CNTR /ALL MODS DONE? -02522 5306 JMP XNUM0 /NO, TEST TERMIN -02523 5274 JMP XMODDN /YES, TEST NEXT SET - / -02524 1037 XNUM3, TAD CNTR /DONE? -02525 7650 SNA CLA -02526 5274 JMP XMODDN /YES -02527 4300 JMS XGET /NO, SET UP LOC -02530 1074 TAD FILLER -02531 4555 DCAICAD /AND FILL WITH 'FILLER' -02532 4566 JMS I INCI /INCREMENT LOC - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 14-2 - -02533 2037 ISZ CNTR /DONE? -02534 5324 JMP XNUM3 /NO -02535 5274 JMP XMODDN /YES - - /ASCII FORMAT HERE -02536 4346 JMS CGET /GET A CHAR & CHECK FOR CR -02537 4300 XASC1, JMS XGET /SET UP LOC & SET FLAG -02540 1035 TAD CHAR -02541 4555 DCAICAD /STORE THIS CHAR -02542 4566 JMS I INCI /INCREMENT LOC -02543 2037 ISZ CNTR /MODS DONE? -02544 5336 JMP XASC1-1 /NO -02545 5274 JMP XMODDN /YES - -02546 0000 CGET, 0 /GET NEXT CHAR. IF CR, MODS DONE -02547 4352 JMS CGTEST /GET & TEST NEXT -02550 5324 JMP XNUM3 /CR, FILL REST WITH 'FILLER' -02551 5746 JMP I CGET - -02552 0000 CGTEST, 0 /SUB. TO GET A CHAR & CHECK FOR CR -02553 4563 JMS I GETNI /GET NEXT CHARACTER -02554 1035 TAD CHAR /IS IT A CR? -02555 1105 TAD M215 -02556 7640 SZA CLA -02557 2352 ISZ CGTEST /RETURN TO CALL+2 IF NOT -02560 5752 JMP I CGTEST - - -02561 0000 DO1SP, 0 /OUTPUT " " + AC -02562 4526 JMS I TYPECI -02563 0240 " -02564 5761 JMP I DO1SP /ANOTHER TUFFIE - -02565 0000 DO2SP, 0 /OUTPUT " " + AC (PACKED ASCII) -02566 4527 JMS I TWOCI -02567 4040 4040 -02570 5765 JMP I DO2SP /FAST & SWEET! - - -02573 5727 -02574 5722 -02575 6154 -02576 5045 -02577 3042 - 2600 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 15 - - /ROUTINE TO EXECUTE THE 'SMASK' (STRING MASK) COMMAND -02600 4557 XSMASK, JMS I GARGI /GET ARGS -02601 1021 TAD TEMP -02602 3076 DCA SMASKL /SAVE -(MASK LENGTH) -02603 1176 TAD MASKBS /SET UP TO STORE WORDS -02604 3011 DCA SPNT -02605 2010 XSMAS1, ISZ DPNT /SKIP 2 WORDS -02606 2010 ISZ DPNT -02607 1410 TAD I DPNT /GET & STORE ONE -02610 6211 CDF 10 -02611 3411 DCA I SPNT -02612 6201 CDF 0 -02613 2010 ISZ DPNT /SKIP 1 MORE -02614 2021 ISZ TEMP /DONE ? -02615 5205 JMP XSMAS1 /NO -02616 5572 JMP I RESTAR - - - /XS240 PACKED ASCII FORMAT HERE -02617 1104 XXS20, TAD M240 /SET OFFSET - /PACKED ASCII FORMAT HERE -02620 3331 XPAC0, DCA PNAME /CLEAR OFFSET -02621 1104 XPAC1, TAD M240 /IS CHAR < 240? -02622 1035 TAD CHAR -02623 7700 SMA CLA -02624 5227 JMP XPAC2 /NO, JUST PACK CHAR -02625 7040 CMA -02626 4304 JMS PACK /YES, PACK A FLAG (77) FIRST -02627 1035 XPAC2, TAD CHAR /NOW GO PACK CHAR -02630 1331 TAD PNAME /(WITH DESIRED OFFSET) -02631 4304 JMS PACK -02632 4777' JMS CGET /NOW GET & TEST NEXT -02633 5221 JMP XPAC1 / OK, CONTINUE - - /OS/8 ASCII HERE -02634 1061 XOPS1, TAD LOCL /TEST START & COUNT FOR EVEN -02635 7010 RAR /(LOW BIT TO LINK & -02636 7200 CLA / CLEAR AC) -02637 1037 TAD CNTR -02640 7010 RAR /(LOW TO LINK, LINK TO AC0) -02641 7730 SZL SPA CLA /BOTH L=0 & AC0=0 FOR OK -02642 4573 ERC04, ERROR /START OR COUNT NOT EVEN -02643 1045 XOPS2, TAD CHARSW /GET SWITCH -02644 2045 ISZ CHARSW / & BUMP IT -02645 7110 CLL RAR /ROTATE AC 11 INTO LINK -02646 7670 SZL SNA CLA /CHARACTER 3? -02647 5275 JMP XOPS5 /NO, CHAR 1 OR CHAR 2 -02650 7240 STA -02651 1056 TAD CAD /YES, BACK UP POINTER -02652 3056 DCA CAD -02653 7344 STA CLL RAL / & SET LOOP COUNT TO -2 -02654 3045 DCA CHARSW -02655 1035 XOPS3, TAD CHAR /GET REST OF CHAR -02656 7106 CLL RTL /4 BITS LEFT -02657 7006 RTL - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 15-1 - -02660 3035 DCA CHAR /SAVE IT -02661 1035 TAD CHAR /NOW MERGE 4 BITS WITH -02662 0103 AND N7400 / A PREVIOUS CHAR -02663 4554 TADICAD -02664 4555 DCAICAD /4 BITS OF 3RD + 1ST OR 2ND -02665 2056 ISZ CAD /BUMP POINTER -02666 2045 ISZ CHARSW /DONE? -02667 5255 JMP XOPS3 -02670 1037 TAD CNTR /YES, DONE ALL MODS? -02671 7650 SNA CLA -02672 5776' JMP XMODDN /YES, TEST FOR DONE -02673 4777' XOPS4, JMS CGET /GET & TEST NEXT CHAR -02674 5243 JMP XOPS2 /OK, DO NEXT - / -02675 4775' XOPS5, JMS XGET /SET UP CURRENT LOC -02676 1035 TAD CHAR -02677 4555 DCAICAD /AND STORE CHARACTER -02700 4566 JMS I INCI /INCREMENT LOC -02701 2037 ISZ CNTR /BUMP COUNTER FOR LATER -02702 5273 JMP XOPS4 / SO IGNORE SKIP NOW -02703 5273 JMP XOPS4 - -02704 0000 PACK, 0 /SUB. TO PACK CHARACTERS -02705 0116 AND N77 /USE ONLY 6 BITS -02706 2045 ISZ CHARSW /CHECK HALF -02707 5316 JMP PACK1 -02710 4554 TADICAD /RIGHT HALF, ADD TO LEFT -02711 4555 DCAICAD -02712 1037 TAD CNTR /ALL MODS DONE? -02713 7640 SZA CLA -02714 5704 JMP I PACK /NO -02715 5776' JMP XMODDN /YES - / -02716 4543 PACK1, JMS I RTL6I /LEFT HALF, ROTATE INTO IT -02717 3045 DCA CHARSW /SAVE IT -02720 4775' JMS XGET /SET UP CURRENT LOC -02721 1045 TAD CHARSW -02722 4555 DCAICAD /STORE WORD -02723 4566 JMS I INCI /INCREMENT LOC -02724 2037 ISZ CNTR /BUMP COUNTER FOR LATER -02725 7000 NOP / SO DON'T SKIP NOW -02726 7240 STA -02727 3045 DCA CHARSW /RESET SWITCH -02730 5704 JMP I PACK - - -02731 0000 PNAME, 0 /PRINT A FILE NAME, PADDED W. SPACES -02732 1025 TAD NAM1 -02733 4535 JMS I TWOT / OUTPUT UP TO -02734 1026 TAD NAM2 -02735 4535 JMS I TWOT / 6 CHARACTERS -02736 1027 TAD NAM3 -02737 4535 JMS I TWOT / OF FILE NAME, -02740 4526 JMS I TYPECI / A "." -02741 0256 ". - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 15-2 - -02742 1030 TAD NAM4 / & UP TO 2 CHARS -02743 4535 JMS I TWOT / OF EXTENSION. -02744 4532 PNAME1, SPACE1 /OUTPUT A " " -02745 1041 TAD NCNT /11(10) CHARS ON LINE YET? -02746 1374 TAD (-13 -02747 7710 SPA CLA -02750 5344 JMP PNAME1 /NO, OUTPUT ANOTHER SPACE -02751 5731 JMP I PNAME - - - /SUBROUTINE TO GET A NUMERIC ARGUMENT FROM THE - / COMMAND BUFFER AND RETURN IT TO THE 3 WORDS - / POINTED TO BY CALL+1. THE FIRST WORD (BLOCK - / NUMBER) IS NOT CHANGED IF NO BLOCK PART WAS - / GIVEN IN THE COMMAND. - -02752 0000 LIMITS, 0 -02753 1752 TAD I LIMITS /GET ADDRESS OF 3 WORDS -02754 2352 ISZ LIMITS -02755 3331 DCA PNAME / & SAVE IT -02756 4560 JMS I ARGI /GET COMMAND DATA -02757 1022 TAD TEMP1 /GET BLOCK NUMBER PART -02760 2022 ISZ TEMP1 /WAS A BLOCK PART SPEC'D? -02761 3731 DCA I PNAME / YES, STORE IT -02762 7200 CLA /(CLEAR IN CASE NOT!) -02763 2331 ISZ PNAME /BUMP POINTER -02764 1026 TAD ACC2 -02765 0113 AND N7 -02766 3731 DCA I PNAME /STORE HIGH 3 BITS -02767 2331 ISZ PNAME -02770 1025 TAD ACC1 -02771 3731 DCA I PNAME / & LOW 12 BITS OF ADDR. -02772 5752 JMP I LIMITS - - -02774 7765 -02775 2500 -02776 2474 -02777 2546 - 3000 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 16 - - /SUBROUTINE TO 'GET' A WORD FROM THE DEVICE. - / - / THE ACTUAL WORD ON THE DEVICE THAT IS ACCESSED - / IS DEPENDENT ON THE MODE SWITCH, AS FOLLOWS: - / - / MODE ACTION - / - / 0 = NORMAL THE HIGH 7 BITS OF THE 15 BIT ADDRESS - / ARE ADDED TO THE SPECIFIED BLOCK # - / TO GET THE ACTUAL BLOCK & THE LOW 8 - / BITS OF THE 15 BIT ADDR ARE USED TO - / SPECIFY THE WORD WITHIN THE BLOCK. - / - / -1 = OFFSET THE 12 BIT "OFFSET" (WHICH IS NEGATED) - / IS ADDED TO THE LOW 12 BITS OF THE - / ADDRESS, AND THEN THE NEW ADDRESS IS - / HANDLED AS ABOVE. - / THIS MODE IS USED PRIMARILY WHEN - / WORKING WITH THE OPERATING SYSTEM - / WITH OVERLAYS WHOSE REAL START BLOCK - / AND LOCATION WITHIN A FIELD ARE KNOWN. - / BY SETTING THE "OFFSET" TO THE START - / ADDRESS OF THE OVERLAY, ITS REAL - / ADDRESSES CAN BE USED AND THE PROPER - / LOCATIONS WILL BE ACCESSED. - / - / +1 = SAVE THIS MODE IS USED WITH CORE IMAGE - / "SAVE" FILES ONLY. THE FILE'S CCB - / (CORE CONTROL BLOCK) IS USED TO - / DETERMINE THE REAL LOCATION ON THE - / DEVICE OF THE SPECIFIED 15 BIT ADDR- - / ESS. THE START BLOCK OF THE FILE - / IS USED, AND ANY SPECIFIED "BLOCK" - / PART IS USED TO SPECIFY THE OVERLAY - / WANTED AT THAT ADDRESS. FOR FILES - / WITHOUT OVERLAYS (GENERATED BY THE - / MONITOR "SAVE" COMMAND), THIS PART - / MUST BE ZERO (0) OR NO MATCH WILL - / OCCUR. FOR FILES WITH OVERLAYS - / (GENERATED BY THE PROGRAM "LINK"), - / A LEGAL OVERLAY AT THE SPECIFIED - / ADDRESS MUST BE SPECIFIED FOR A - / MATCH TO OCCUR. THIS MODE CAN ONLY - / BE USED AFTER A "FILE" COMMAND. - / - / +2 = LOAD THIS MODE IS USED WITH OS/8 FORTRAN - / IV LOAD MODULES. THE FILE'S HEADER - / BLOCK IS USED TO DETERMINE THE REAL - / LOCATION ON THE DEVICE OF THE SPECI- - / FIED 15 BIT ADDRESS AND THE "BLOCK" - / PART IS USED TO SPECIFY THE OVERLAY - / WANTED AT THAT ADDRESS. THIS MODE CAN - / ONLY BE USED AFTER A "FILE" COMMAND. - - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 16-1 - - /CALLING SEQUENCE: - / - / JMS I GETI - / RETURN1 /MODE=MAPPED, NO SUCH ADDRESS - / NORMAL RETURN /'CAD' SET, DATA IN AC - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 17 - - /SUBROUTINE 'GET'--PART OF THIS PAGE & ALL OF NEXT - -03000 0000 GET, 0 -03001 4534 JMS I CTRLI /GO TEST FOR CONTROL-CHARS -03002 1044 TAD MODSW /OK, TEST MODE -03003 7450 SNA -03004 5210 JMP GET0 /NORMAL MODE, NO CHANGES -03005 7700 SMA CLA -03006 5777' JMP GET4 /SAVE MODE, DO MAPPING -03007 1073 TAD OFFSET /OFFSET MODE, ADD IT -03010 4263 GET0, JMS DBLPGS /NOW ADD 'DOUBLE PAGES' -03011 1057 TAD BLK / OF LOC TO BLK TO SET -03012 3054 DCA CBLK /'CURRENT BLOCK' -03013 4227 GET1, JMS GETIO /OUTPUT CURREN (IF NEEDED), GET NEXT -03014 5776' JMP RERROR / READ ERROR, GO TELL ABOUT IT -03015 1044 TAD MODSW /TEST AGAIN FOR OFFSET -03016 7710 SPA CLA -03017 1073 TAD OFFSET /YES, ADD IT AGAIN -03020 1061 TAD LOCL /USE 8 ADDRESS BITS FROM LOC -03021 0121 AND N377 -03022 1241 TAD BUFST /INTO BUFFER, TO SET -03023 3056 DCA CAD /'CURRENT ADDRESS' -03024 4554 TADICAD /NOW GET THE WORD -03025 2200 ISZ GET /RETURN TO CALL+2 WITH IT -03026 5600 GETX, JMP I GET /[EXIT TO CALL+1 FOR MAP FAIL] - -03027 0000 GETIO, 0 /DO I/O FOR 'GET' & 'SCANER' -03030 1054 TAD CBLK /IS THIS SAME BLOCK AS IS IN -03031 7041 CIA /CORE CURRENTLY? -03032 1257 TAD RBLK -03033 7650 SNA CLA -03034 5261 JMP GETIO2 /YES, USE IT. -03035 2050 ISZ MODIF /NO, ANY CHANGES IN THIS BLK? -03036 5244 JMP GETIO1 /NO, DEVICE OK AS IS -03037 4500 JMS I DEVAD /CALL DEVICE HANDLER -03040 4210 4210 /WRITE, 2 PAGES, FIELD 1 -03041 7200 BUFST, IOBUF -03042 0000 WBLK, 0 -03043 5775' JMP WERROR /WRITE ERROR -03044 1054 GETIO1, TAD CBLK /NOW UPDATE OUTPUT BLOCK -03045 3242 DCA WBLK -03046 1054 TAD CBLK / AND INPUT BLOCK # -03047 3257 DCA RBLK -03050 3050 DCA MODIF / AND RESET SWITCH -03051 1054 TAD CBLK /SHOW BLOCK NUMBER IN LIGHTS -03052 7421 MQL / (IF THERE ARE ANY!) -03053 7200 CLA -03054 4500 JMS I DEVAD /CALL DEVICE HANDLER -03055 0210 0210 /READ, 2 PAGES, FIELD 1 -03056 7200 IOBUF -03057 7777 RBLK, -1 /(NOTHING IN CORE-ILLEGAL BLK #) -03060 5627 JMP I GETIO /READ ERROR -03061 2227 GETIO2, ISZ GETIO /OK, DO NORMAL RETURN -03062 5627 JMP I GETIO - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 17-1 - - -03063 0000 DBLPGS, 0 /CONVERT LOCATION TO DOUBLE-PAGES -03064 1061 TAD LOCL -03065 0103 AND M400 /HIGH 4 BITS HERE -03066 7104 CLL RAL /BECOME LOW 4 BITS -03067 1060 TAD LOCH /FOR A 7 BIT VALUE -03070 7006 RTL -03071 7006 RTL -03072 5663 JMP I DBLPGS - - - /GET WORD ROUTINE FOR "ODT" COMMANDS - -03073 0000 ODGET, 0 -03074 1070 TAD SBLK /SET UP BLOCK -03075 3057 DCA BLK -03076 1071 TAD SLOCH -03077 3060 DCA LOCH -03100 1072 TAD SLOCL -03101 3061 DCA LOCL /SET UP LOCATION -03102 4561 JMS I GETI /NOW GET WORD -03103 4573 ERC05, ERROR /MAPPED MODE, NO SUCH ADDRESS -03104 5673 JMP I ODGET / & RETURN WITH IT - - - /OUTPUT 12 BIT BLOCK # & 15 BIT ADDRESS IN OCTAL - -03105 0000 BKLOC, 0 -03106 1705 TAD I BKLOC /GET ARGUMENT (ADDR-1) -03107 2305 ISZ BKLOC -03110 3014 DCA GETPNT / & SET UP A-XR -03111 1414 TAD I GETPNT /GET BLOCK PART -03112 4540 JMS I OCTI / & OUTPUT IT -03113 1414 TAD I GETPNT /GET FIELD -03114 0113 AND N7 -03115 4527 JMS I TWOCI / & OUTPUT "." & IT -03116 5660 5660 / (".0") -03117 1414 TAD I GETPNT /GET ADDRESS -03120 4540 JMS I OCTI / & OUTPUT IT -03121 5705 JMP I BKLOC - - - /SUBROUTINE TO GET A COMMAND WORD OR CHARACTER - /FROM THE COMMAND BUFFER. IF THE BUFFER CONTAINS - /ONLY NUMERIC ITEMS, RETURN TO CALL+1. TERMINATOR - /IS SPACE OR CR -03122 0000 GWORD, 0 -03123 4564 JMS I SSKIPI /GET NEXT NON-SPACE -03124 1035 TAD CHAR -03125 0116 AND N77 /USE THIS CHAR AS LEFT -03126 4543 JMS I RTL6I / 6 BITS. -03127 3045 DCA CHARSW /SAVE IT -03130 4567 JMS I SORTI /CHECK FOR ^K, ^D, (, ", ', -03131 5350 GWLST1-1 / DIGITS, SPACE & CR -03132 0022 GWOPS1-GWLST1 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 17-2 - -03133 4563 JMS I GETNI /NONE, IS NEXT A SPACE -03134 4567 JMS I SORTI / OR A C.R.? -03135 5367 GWLST2-1 -03136 0022 GWOPS2-GWLST2 -03137 1035 TAD CHAR /NONE, USE AS LOWER 6 BITS -03140 0116 AND N77 -03141 1045 TAD CHARSW -03142 3045 DCA CHARSW /SAVE IT -03143 4563 GWD1, JMS I GETNI /LOOK FOR SPACE OR C.R. -03144 4567 JMS I SORTI -03145 5367 GWLST2-1 -03146 0022 GWOPS2-GWLST2 -03147 5343 JMP GWD1 /NEITHER, KEEP LOOKING - / -03150 7240 GWD2, STA /SPACE FOUND, SET SWITCH -03151 3046 GWD3, DCA CRSWT /CR FOUND, RESET SWITCH -03152 1045 TAD CHARSW /RETURN WITH WORD -03153 2322 ISZ GWORD / TO CALL+2 -03154 5722 GWD4, JMP I GWORD - /EXIT TO CALL+1 IF ANY NUMERIC ITEM FOUND-- - / ^K, ^D, (, ", ', DIGITS - - - /"DIRECTORY" FORMAT OUTPUT ROUTINE -03155 0000 DIRDMP, 0 -03156 4540 JMS I OCTI /OUTPUT IN OCTAL FIRST -03157 4533 SPACE2 -03160 4554 TADICAD -03161 4363 JMS DIROUT / THEN 3 OTHERS -03162 5755 JMP I DIRDMP - - /"?" ODT OUTPUT ROUTINE -03163 0000 DIROUT, 0 -03164 7041 CIA /ASSUME WAS NEGATIVE -03165 4537 JMS I DECI / & OUTPUT IN DECIMAL -03166 4533 SPACE2 -03167 4554 TADICAD -03170 4542 JMS I PDATEI /OUTPUT AGAIN AS DATE -03171 4533 SPACE2 -03172 4554 TADICAD -03173 4535 JMS I TWOT /OUTPUT LAST TIME AS PACKED ASCII -03174 5763 JMP I DIROUT - - -03175 2414 -03176 2213 -03177 3200 - 3200 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 18 - - /CONTINUATION OF 'GET' -- MAPPING FOR "SAVE" AND "LOAD" - / MODES DONE HERE. - -03200 4777' GET4, JMS DBLPGS /GET # DOUBLE-PAGES -03201 3056 DCA CAD / & SAVE IT -03202 7240 STA -03203 1044 TAD MODSW /TEST FOR SAVE OR LOAD MODE -03204 7640 SZA CLA -03205 5300 JMP GETL1 / LOAD MODE -03206 6213 CDF CIF 10 -03207 4776' JMS GCCB /SAVE MODE, GET CCB -03210 3361 DCA SEGCNT / & SET UP # SEGMENTS -03211 1077 TAD RBLK1 /SET UP ACTUAL FIRST BLOCK -03212 7001 IAC -03213 3054 DCA CBLK / FOR MAPPING. -03214 6211 GETS1, CDF 10 -03215 1414 TAD I GETPNT /GET AN ORIGIN WORD -03216 3357 DCA GETORG -03217 1414 TAD I GETPNT / & A CONTROL WORD. -03220 6201 CDF 0 -03221 3360 DCA GETCW -03222 1360 TAD GETCW /TEST FOR FIELD MATCH -03223 7112 CLL RTR -03224 7010 RAR -03225 0113 AND N7 /(MASK OFF COUNT) -03226 7041 CIA -03227 1060 TAD LOCH /SAME? -03230 7640 SZA CLA -03231 5261 JMP GETS2 /NO, TRY NEXT SEGMENT -03232 1061 TAD LOCL /YES, NOW TEST ADDRESSES -03233 0106 AND M200 /(MASK TO PAGE) -03234 7161 STL CIA -03235 1357 TAD GETORG /[ORIG PAGE]-[ADDR PAGE] -03236 7460 SZA SNL /ABOVE THE ORIGIN? -03237 5261 JMP GETS2 /NO, TRY NEXT -03240 7010 RAR /OK, DIVIDE BY 2 (WITH SIGN) -03241 3357 DCA GETORG / & SAVE IT. -03242 1360 TAD GETCW /BEYOND TOP OF SEGMENT? -03243 0107 AND M100 /(MASK OFF FIELD AND MAKE) -03244 7450 SNA -03245 7130 STL RAR / 0 => 40, THEN SUBTRACT -03246 1107 TAD M100 / ONE PAGE) -03247 1357 TAD GETORG -03250 7710 SPA CLA -03251 5261 JMP GETS2 /NO, TRY NEXT -03252 1357 TAD GETORG /YES, UPDATE CBLK TO RIGHT -03253 7041 CIA -03254 4362 JMS UPCBLK / ACTUAL BLOCK -03255 1057 TAD BLK /MUST BE IN "LVL 0" OR -03256 7640 SZA CLA -03257 5775' JMP GETX / RETURN AS BAD -03260 5774' JMP GET1 /NOW GO GET THE DATA - / -03261 7200 GETS2, CLA -03262 1360 TAD GETCW /UPDATE CBLK - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 18-1 - -03263 0107 AND M100 -03264 7450 SNA -03265 7130 STL RAR /(MAKING 0 => 40) -03266 1373 TAD (100 /(ROUND UP PAGE COUNT) -03267 4362 JMS UPCBLK -03270 2361 ISZ SEGCNT /ALL SEGMENTS DONE? -03271 5214 JMP GETS1 /NO, TRY NEXT -03272 1000 TAD OVLFLG /YES, OVERLAYS? (LINK OUTPUT) -03273 7450 SNA -03274 5775' JMP GETX / NO, RETURN TO CALL+1 -03275 1372 TAD (4 / YES, RESET POINTER -03276 3014 DCA GETPNT / TO SKIP OVER LVL 0 -03277 5302 JMP GETL2 / & CONTINUE - / -03300 6213 GETL1, CDF CIF 10 -03301 4771' JMS GHDR /GET & TEST HEADER -03302 6211 GETL2, CDF 10 -03303 1414 TAD I GETPNT /GET NUMBER OF OVERLAYS -03304 3361 DCA SEGCNT -03305 1414 TAD I GETPNT /GET PAGE & FIELD -03306 3360 DCA GETCW -03307 1414 TAD I GETPNT /GET REL BLK NUMBER -03310 1077 TAD RBLK1 / + START BLOCK -03311 3054 DCA CBLK / = ABS START BLK, THIS LEVEL -03312 1414 TAD I GETPNT /GET LENGTH, THESE OVERLAYS -03313 6201 CDF 0 -03314 3357 DCA GETORG -03315 1360 TAD GETCW /GET DBL-PAGE & FIELD -03316 7450 SNA -03317 5775' JMP GETX / 0 = THE END!!! -03320 0103 AND M400 /CONVERT TO DBL-PAGE # -03321 7106 CLL RTL -03322 7006 RTL -03323 1360 TAD GETCW / IN BITS 5-11 -03324 7004 RAL -03325 0117 AND N177 -03326 7041 CIA /-(DBL-PG # OF OVLY START) -03327 1056 TAD CAD /+(DBL-PG # OF DESIRED) -03330 7510 SPA -03331 5345 JMP GETL3 / GONE TOO FAR, MISSED IT! -03332 3360 DCA GETCW /= RELATIVE BLOCK NUMBER -03333 1360 TAD GETCW /IS THIS WITHIN THIS OVLY? -03334 7041 CIA -03335 1357 TAD GETORG -03336 7750 SPA SNA CLA -03337 5302 JMP GETL2 / NO, TRY NEXT OVERLAY -03340 1057 TAD BLK /OK, SET UP -(#LVL +1) -03341 7040 CMA -03342 3362 DCA UPCBLK /V7B -03343 1362 TAD UPCBLK /V7B-ADDR IS OK, IS THERE A -03344 1361 TAD SEGCNT / LEVEL WANTED? -03345 7710 GETL3, SPA CLA -03346 5775' JMP GETX /ILLEGAL LEVEL; TOO FAR--EXIT -03347 1360 TAD GETCW /ALL OK! ADD RELATIVE BLK -03350 7410 SKP - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 18-2 - -03351 1357 GETL4, TAD GETORG / TO (LVLS-1)*LENGTH-V7B -03352 1054 TAD CBLK -03353 3054 DCA CBLK / TO OVERLAY START BLOCK -03354 2362 ISZ UPCBLK /[MULTIPLY BY ADDING]-V7B -03355 5351 JMP GETL4 -03356 5774' JMP GET1 -03357 0000 GETORG, 0 -03360 0000 GETCW, 0 -03361 0000 SEGCNT, 0 - -03362 0000 UPCBLK, 0 -03363 4544 JMS I RTR6I /MOVE COUNT TO BITS 6-11 -03364 7110 CLL RAR /DIVIDE FOR DOUBLE PAGES -03365 1054 TAD CBLK /UPDATE -03366 3054 DCA CBLK -03367 5762 JMP I UPCBLK - - - -03371 2050 -03372 0004 -03373 0100 -03374 3013 -03375 3026 -03376 2000 -03377 3063 - 3400 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 19 - - /NUMERIC OUTPUT SUBROUTINES, NO ZERO SUPPRESSION: - -03400 0000 OPRT, 0 /4-DIGIT OCTAL -03401 4253 JMS NUMOUT -03402 7000 -1000 -03403 7700 -100 -03404 7770 -10 -03405 0000 0 -03406 5600 JMP I OPRT - -03407 0000 OCT3, 0 /3-DIGIT OCTAL -03410 4253 JMS NUMOUT -03411 7700 -100 -03412 7770 -10 -03413 0000 0 -03414 5607 JMP I OCT3 - -03415 0000 BPRT, 0 /3-DIGIT BCD -03416 4253 JMS NUMOUT -03417 7400 -400 -03420 7760 -20 -03421 0000 0 -03422 5615 JMP I BPRT - - -03423 0000 SGNDP, 0 /4-DIGIT DECIMAL, SIGNED -03424 3300 DCA NUMB -03425 1300 TAD NUMB -03426 7710 SPA CLA -03427 1114 TAD N15 -03430 4532 SPACE1 /OUTPUT "-" OR " " -03431 1300 TAD NUMB /NOW OUTPUT IN DECIMAL -03432 7510 SPA -03433 7041 CIA -03434 4236 JMS DPRT -03435 5623 JMP I SGNDP - - DECIMAL - -03436 0000 DPRT, 0 /4-DIGIT DECIMAL, UNSIGNED -03437 4253 JMS NUMOUT -03440 6030 -1000 -03441 7634 -100 -03442 7766 -10 -03443 0000 0 -03444 5636 JMP I DPRT - -03445 0000 DEC2, 0 /2-DIGIT DECIMAL, UNSIGNED -03446 0117 AND N177 /MASK IT FIRST -03447 4253 JMS NUMOUT -03450 7766 -10 -03451 0000 0 -03452 5645 JMP I DEC2 - - OCTAL - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 19-1 - - -03453 0000 NUMOUT, 0 /THE REAL OUTPUT SUBROUTINE -03454 3300 DCA NUMB /SAVE THE NUMBER -03455 3301 NUMO1, DCA NUMDGT /RESET "DIGIT" TO 0 -03456 7300 CLA CLL -03457 1300 TAD NUMB /GET CURRENT VALUE -03460 1653 TAD I NUMOUT /SUBTRACT DIGIT BASE -03461 7420 SNL /DID IT OVERFLOW? -03462 5266 JMP NUMO2 /NO, TOO FAR! -03463 2301 ISZ NUMDGT /YES, BUMP DIGIT -03464 3300 DCA NUMB / & UPDATE VALUE -03465 5256 JMP NUMO1+1 - / -03466 7300 NUMO2, CLA CLL -03467 1301 TAD NUMDGT /OUTPUT THE "DIGIT" -03470 4531 DIGIT -03471 2253 ISZ NUMOUT /BUMP TO NEXT ARG -03472 1653 TAD I NUMOUT /DONE ENOUGH? -03473 7640 SZA CLA -03474 5255 JMP NUMO1 -03475 1300 TAD NUMB /YES, SO OUTPUT THE LAST -03476 4531 DIGIT / ONE. -03477 5653 JMP I NUMOUT /AND RETURN -03500 0000 NUMB, 0 -03501 0000 NUMDGT, 0 - -03502 0000 SSKIP, 0 /SKIP SPACES IN COMMAND BUFFER. -03503 1035 TAD CHAR -03504 1104 TAD M240 /IS THIS A SPACE? -03505 7640 SZA CLA -03506 5702 JMP I SSKIP /NO, DONE -03507 4563 JMS I GETNI /YES, GET NEXT CHAR -03510 5303 JMP SSKIP+1 / & GO TRY IT - - - /OS/8 ASCII OUTPUT SUBROUTINE. OUTPUTS 1 CHAR - / FOR EVEN WORD & 2 CHARS FOR ODD WORD. - -03511 0000 OSTYPE, 0 -03512 4327 JMS OSSET /DO SETUP FOR UNPACKING -03513 4777 JMS I (ASCII /OUTPUT CHARS TO "STANDARD" -03514 2045 ISZ CHARSW /UNPACK 2ND CHARACTER? -03515 5340 JMP OSUNPK / YES, & RETURN TO OSSET CALL! -03516 5711 JMP I OSTYPE /DONE, RETURN TO CALLER - - - /OS/8 "BYTE" OUTPUT SUBROUTINE. OUTPUT ONE - / 8-BIT OCTAL NUMBER FOR EVEN WORD AND TWO 8- - / BIT OCTAL NUMBERS FOR ODD WORD. USED FOR - / DUMPING OS/8 ".BN" FILES OR ASCII IN OCTAL. - -03517 0000 BYTEO, 0 -03520 4327 JMS OSSET /DO SETUP FOR UNPACKING -03521 4207 JMS OCT3 /3 DIGIT OCTAL OUTPUT -03522 2045 ISZ CHARSW /UNPACK 2ND "CHAR"? - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 19-2 - -03523 7410 SKP -03524 5717 JMP I BYTEO / DONE, RETURN -03525 4533 SPACE2 /YES, BUT OUTPUT 2 SPACES -03526 5340 JMP OSUNPK / BEFORE DOING UNPACKING - - - /OS/8 FORMAT UNPACKING ROUTINES FOR 'OSTYPE' AND - / 'BYTEO'. THE SUBROUTINE SETS UP THE COUNTER - / FOR NUMBER OF OUTPUTS TO DO, SAVING & RESTORING - / THE AC. THE ROUTINE WILL BE CALLED ONLY IF 2 - / OUTPUTS BEING DONE AND DOES THE UNPACK OF THE - / 2ND "CHARACTER", RETURNING TO THE CALLER OF THE - / SUBROUTINE! - -03527 0000 OSSET, 0 /ENTER HERE TO INITIALIZE -03530 3357 DCA INC /SAVE AC -03531 7001 IAC -03532 0061 AND LOCL /AC = 0 OR 1 -03533 7040 CMA /AC = -1 OR -2 (-# TO DO) -03534 3045 DCA CHARSW /SET UP UNPACK COUNT -03535 1357 OSRETN, TAD INC /GET VALUE TO AC -03536 0121 AND N377 /MASK TO 8 BITS -03537 5727 JMP I OSSET - / -03540 7240 OSUNPK, STA /JUMP HERE IF 2ND CHAR TO GET -03541 1056 TAD CAD -03542 3223 DCA SGNDP /POINT TO HIGH WORD -03543 6211 CDF 10 -03544 1456 TAD I CAD /GET LOW BITS OF "CHAR" -03545 0103 AND N7400 / MASK TO 4 BITS AND -03546 4544 JMS I RTR6I / MOVE TO BITS 8-11 -03547 7012 RTR -03550 3357 DCA INC /SAVING IT HERE FOR LATER! -03551 1623 TAD I SGNDP /NOW GET HIGH BITS OF "CHAR" -03552 0103 AND N7400 / MASK TO 4 BITS AND -03553 6201 CDF 0 -03554 7112 CLL RTR / MOVE TO BITS 4-7 -03555 7012 RTR -03556 5335 JMP OSRETN /GET OTHER BITS & RETURN! - - - /SUBROUTINE TO INCREMENT THE "CURRENT LOCATION" - -03557 0000 INC, 0 -03560 2061 ISZ LOCL /INCREMENT LOW 12 ADDR BITS -03561 5757 JMP I INC /OK AS IS -03562 7100 CLL -03563 1060 TAD LOCH /LOW OVERFLOW, INCR. HIGH -03564 1376 TAD (7771 / 3 ADDRESS BITS (& TEST) -03565 0113 AND N7 -03566 3060 DCA LOCH -03567 7430 SZL /DID HIGH OVERFLOW ALSO? -03570 1120 TAD N200 / YES, THEN BUMP BLK ALSO -03571 1057 TAD BLK -03572 3057 DCA BLK - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 19-3 - -03573 5757 JMP I INC - - -03576 7771 -03577 2163 - 3600 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 20 - - /OUTPUT PACKED STRING, ADDRESS IN CALL+1, - / TERMINATOR IS XX00. -03600 0000 TYPES, 0 -03601 1600 TAD I TYPES -03602 2200 ISZ TYPES -03603 4205 JMS TYPSTR -03604 5600 JMP I TYPES - - /OUTPUT PACKED STRING, ADDRESS IN AC, TERMIN IS XX00 -03605 0000 TYPSTR, 0 -03606 3341 DCA GETNT -03607 6211 TTAGN, CDF 10 -03610 1741 TAD I GETNT -03611 6201 CDF 0 -03612 2341 ISZ GETNT -03613 4221 JMS PACOUT -03614 1276 TAD GNAME -03615 0116 AND N77 -03616 7650 SNA CLA -03617 5605 JMP I TYPSTR -03620 5207 JMP TTAGN - - /PACKED ASCII OUTPUT ROUTINE -03621 0000 PACOUT, 0 -03622 3276 DCA GNAME -03623 1276 TAD GNAME /USE LEFT 6 BITS -03624 4544 JMS I RTR6I -03625 4231 JMS ONECHR -03626 1276 TAD GNAME /USE RIGHT 6 BITS -03627 4231 JMS ONECHR -03630 5621 JMP I PACOUT - - /OUTPUT TRIMMED OR UNTRIMMED ASCII IN THE AC -03631 0000 ONECHR, 0 /NO CODE FOR CR/LF -03632 0116 AND N77 -03633 7450 SNA -03634 5631 JMP I ONECHR /IGNORE "@" -03635 1377 TAD (-40 -03636 7500 SMA -03637 1107 TAD M100 -03640 4526 JMS I TYPECI -03641 0340 340 -03642 5631 JMP I ONECHR - - - /SUBROUTINE TO MATCH CHAR AGAINST LIST1 AND JUMP - /THROUGH LIST2 WHEN MATCH FOUND. BOTH LISTS IN - /FIELD 1. - -03643 0000 SORTJ, 0 -03644 7450 SNA -03645 1035 TAD CHAR /USE CHAR IF AC = 0 -03646 3275 DCA SORTEM /ITEM TO LOOK UP -03647 1643 TAD I SORTJ -03650 2243 ISZ SORTJ /GET LIST1 ADDRESS - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 20-1 - -03651 3012 DCA SCANX1 -03652 6211 SORT1, CDF 10 -03653 1412 TAD I SCANX1 /COMPARE WITH SORTEM -03654 6201 CDF 0 -03655 7450 SNA /0 ? -03656 5273 JMP SORT2 /END OF LIST -03657 7161 CIA STL -03660 1275 TAD SORTEM -03661 7640 SZA CLA /DOES IT MATCH? -03662 5252 JMP SORT1 /NO, TRY NEXT -03663 1012 TAD SCANX1 /YES, GET ADDRESS... -03664 1643 TAD I SORTJ -03665 3243 DCA SORTJ /...OF JUMP ADDRESS -03666 6211 CDF 10 -03667 1643 TAD I SORTJ -03670 3243 DCA SORTJ -03671 6201 CDF 0 -03672 5643 JMP I SORTJ /GO TO ROUTINE -03673 2243 SORT2, ISZ SORTJ /MATCH NOT FOUND, -03674 5643 JMP I SORTJ /EXIT TO CALL+3 -03675 0000 SORTEM, 0 - - - /SUBROUTINE TO GET A NAME FOR 'XOPEN', 'XFILE', 'XDEV' & 'XDDEV' - -03676 0000 GNAME, 0 /GET A FILE OR DEVICE NAME -03677 3022 DCA TEMP1 /SET UP "." SWITCH AND -03700 1022 TAD TEMP1 / FILE/DEVICE SWITCH -03701 3023 DCA TEMP2 -03702 3025 DCA NAM1 -03703 3026 DCA NAM2 /CLEAR NAME AREA -03704 3027 DCA NAM3 -03705 1376 TAD (2326 / & INIT EXTENSION TO "SV" -03706 3030 DCA NAM4 -03707 1375 TAD (NAM1 / & INIT POINTER FOR NAME -03710 3021 DCA TEMP -03711 4564 JMS I SSKIPI /SKIP LEADING SPACES -03712 7240 STA -03713 1016 TAD COMOUT /BACK UP THE POINTER -03714 3016 DCA COMOUT -03715 4351 JMS GPAIR /1ST & 2ND CHAR -03716 4351 JMS GPAIR /3RD & 4TH -03717 4351 GETSCN, JMS GPAIR /5TH & 6TH OR 1ST & 2ND EXT. -03720 4341 JMS GETNT /SCAN FOR TERMINATOR -03721 7200 CLA -03722 5320 JMP .-2 - / -03723 1023 GETCOL, TAD TEMP2 /":" SEEN, DEVICE OR FILE NAME? -03724 7640 SZA CLA -03725 5346 JMP GETNTC / FILE, JUST USE THE ":" -03726 2023 ISZ TEMP2 / DEVICE, FLAG ":" SEEN -03727 5320 JMP GETSCN+1 / AND SCAN TO TERMIN. - / -03730 2022 GETPER, ISZ TEMP1 /"." FOUND, FIRST ONE? -03731 4573 ERCM, ERROR /NO, THE END... - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 20-2 - -03732 3030 DCA NAM4 /YES, RESET EXT, -03733 1374 TAD (NAM4 / SET POINTER -03734 3021 DCA TEMP -03735 5317 JMP GETSCN / & GO GET IT - / -03736 7240 GETEND, STA /TERM = SPACE, SET SWITCH -03737 3046 DCA CRSWT /TERM = CR, RESET SWITCH -03740 5676 JMP I GNAME /..DONE.... - -03741 0000 GETNT, 0 /GET & TEST A CHAR -03742 4563 JMS I GETNI /GET NEXT CHAR -03743 4567 JMS I SORTI /TEST IT -03744 5444 GETLST-1 -03745 0005 GETOPS-GETLST -03746 1035 GETNTC, TAD CHAR /OK, USE CHAR -03747 0116 AND N77 /MASK TO 6 BITS -03750 5741 JMP I GETNT / & EXIT WITH IT - -03751 0000 GPAIR, 0 /GET RIGHT/LEFT-HALF-CHARS -03752 4341 JMS GETNT -03753 4543 JMS I RTL6I /TO LEFT HALF -03754 3421 DCA I TEMP / & STORE IT -03755 4341 JMS GETNT -03756 1421 TAD I TEMP /MERGE WITH LAST LEFT -03757 3421 DCA I TEMP -03760 2021 ISZ TEMP /BUMP POINTER -03761 5751 JMP I GPAIR - -03762 0000 RTL6, 0 /ROTATE AC 6 LEFT -03763 7106 CLL RTL -03764 7006 RTL -03765 7006 RTL -03766 5762 JMP I RTL6 - -03767 0000 RTR6, 0 /ROTATE AC 6 RIGHT -03770 7112 CLL RTR -03771 7012 RTR -03772 7012 RTR -03773 5767 JMP I RTR6 - - -03774 0030 -03775 0025 -03776 2326 -03777 7740 - 4000 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 21 - - /SUBROUTINE TO READ A "LINE" FROM THE USER. IT CHECKS FOR - / RUBOUT, ^U AND ^R FIRST, THEN CHECKS FOR ONE OF A LIST OF - / TERMINATORS PASSED BY THE CALLER. AS WITH OS/8, RUBOUT - / DELETES CHARACTES AND ^U DELETES THE CURRENT LINE. ^R - / (FOR RETYPE) ECHOES THE CURRENT COMMAND BUFFER IN THE SAME - / MANNER AS LINE-FEED DOES FOR OS/8. IF THE CHARACTER IS A - / TERMINATOR, CONTROL PASSES DIRECTLY TO THE CORRESPONDING - / CALLER ROUTINE (OUT OF THIS ROUTINE). INPUT CHARACTERS - / ARE ALSO TRANSLATED FROM LOWER CASE TO UPPER CASE. EXIT - / IN THE NORMAL MANNER OCCURS ONLY ON BUFFER EMPTY FROM - / RUBOUT OR ^U. - -04000 0000 READ, 0 /READ AND ECHO INPUT CHARACTER -04001 1600 TAD I READ /GET TWO LIST ADDRESS PARAMETERS -04002 2200 ISZ READ -04003 3220 DCA RETERM / FROM CALLER AND SET UP IN -04004 1600 TAD I READ / SORT ROUTINE CALL -04005 2200 ISZ READ -04006 3221 DCA RETERM+1 -04007 4312 RENEXT, JMS RKEY /GET A CHAR -04010 5231 JMP RUBO /RUBOUT, GO BEGIN DELETIONS -04011 3035 REKEY, DCA CHAR -04012 4567 JMS I SORTI /CHECK FOR CTRL-R & CTRL-U -04013 5523 REACTL-1 -04014 0003 REACTS-REACTL -04015 1035 TAD CHAR -04016 4536 JMS I TYPEI -04017 4567 JMS I SORTI /CHECK FOR CALLER TERMINATORS -04020 0000 RETERM, 0 / PARAMETERS HERE -04021 0000 0 -04022 1035 TAD CHAR /NONE, JUST STORE IN BUFFER -04023 7410 SKP -04024 1377 RESPC, TAD (" /FOR CAMMAND INPUT, TAB -> SPACE! -04025 6211 CDF 10 -04026 3415 DCA I COMIR /COMMAND (LINE) INPUT BUFFER -04027 6201 CDF 0 -04030 5207 JMP RENEXT - / - /+++ FOR SCOPE OPERATION, RUBOUTS CAUSE OUTPUT OF THE - /+++ SEQUENCE BACKSPACE, SPACE, BACKSPACE TO CLEAR THE - /+++ PREVIOUS CHARACTER FROM THE SCREEN. IF "SCOPE - /+++ MODE" IS SET, RUBO IS OVERLAID ON STARTUP. - - /*** FOR BATCH OPERATION, RUBOUTS ARE IGNORED BY 'RKEY' - /*** AND 'RUBO' IS OVERLAID WITH CODE TO IGNORE A LINE- - /*** FEED THAT FOLLOWS A CARRIAGE-RETURN. - / -04031 4303 RUBO, JMS BTEST /RUBOUT TYPED,TEST FOR EMPTY -04032 5261 JMP RUBOF / INPUT BUFFER EMPTY! -04033 4526 JMS I TYPECI /OK, OUTPUT 1ST "\" -04034 0334 "\ -04035 4303 RUBO1, JMS BTEST /NOW EMPTY? -04036 5257 JMP RUBOE / YES, LINE END -04037 1015 TAD COMIR /ECHO LAST CHAR IN BUFFER -04040 3341 DCA ENDC - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 21-1 - -04041 6211 CDF 10 -04042 1741 TAD I ENDC -04043 6201 CDF 0 -04044 4536 JMS I TYPEI -04045 7240 STA -04046 1015 TAD COMIR /NOW BACK UP POINTER -04047 3015 DCA COMIR -04050 4312 JMS RKEY /GET A CHAR -04051 5235 JMP RUBO1 /ANOTHER RUBOUT, GO HANDLE -04052 3303 DCA BTEST /SAVE THE CHAR -04053 4526 JMS I TYPECI / DO CLOSING "\" -04054 0334 "\ -04055 1303 TAD BTEST -04056 5211 JMP REKEY /& GO USE NEW CHAR - / -04057 4526 RUBOE, JMS I TYPECI /BUFFER WAS EMPTIED, -04060 0334 "\ /OUTPUT CLOSING "\" -04061 4530 RUBOF, JMS I CRLFI / & A CR/LF -04062 5600 JMP I READ - / -04063 4526 RECHO, JMS I TYPECI /ECHO "^R" & THEN -04064 0222 "R-100 -04065 4530 JMS I CRLFI /ECHO CURRENT LINE -04066 1174 TAD COMST /INIT AUTO-XR -04067 3016 DCA COMOUT -04070 1016 RECHO1, TAD COMOUT /DONE? -04071 7041 CIA -04072 1015 TAD COMIR -04073 7650 SNA CLA -04074 5207 JMP RENEXT /YES, MORE INPUT -04075 4563 JMS I GETNI /NO, GET NEXT CHAR -04076 4536 JMS I TYPEI / & OUTPUT IT -04077 5270 JMP RECHO1 / & CONTINUE - / -04100 4526 RERASE, JMS I TYPECI /OUTPUT "^U" -04101 0225 "U-100 -04102 5261 JMP RUBOF /GO OUTPUT CR/LF & EXIT - -04103 0000 BTEST, 0 /TEST FOR COMM. BUFFER EMPTY -04104 1015 TAD COMIR -04105 7041 CIA -04106 1174 TAD COMST -04107 7640 SZA CLA /EMPTY? -04110 2303 ISZ BTEST /NO, STILL OK, TO CALL+2 -04111 5703 JMP I BTEST / OTHERWISE TO CALL+1 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 22 - -04112 0000 RKEY, 0 /GET A NON-NULL CHAR, TEST & TRANSLATE -04113 6031 KSF /*** JMS I CTRLI /CHECK KEYBOARD -04114 5313 JMP .-1 /*** CIF BAT /BATCH OPER. -04115 4534 JMS I CTRLI /*** JMS I BATINI -04116 6031 KSF /*** ERROR /EOF!! -04117 5313 JMP RKEY+1 /*** NOP /MUST USE SPECIAL CARE -04120 6036 KRB /*** NOP / TO HANDLE CTRL-Q! -04121 0117 AND N177 /MASK OFF PARITY -04122 7450 SNA -04123 5313 JMP RKEY+1 /NULL CHAR -04124 1376 TAD (-177 /IS IT A RUBOUT? -04125 7450 SNA -04126 5712 RKEY0, JMP I RKEY /YES, EXIT TO CALL+1 /*** BATCH -04127 2312 ISZ RKEY /NO, EXIT TO CALL+2 /*** OPER. -04130 1375 TAD (2 /TEST FOR ALT-MODES -04131 7500 SMA -04132 5337 JMP RKEY1 / 375 OR 376 -04133 1374 TAD (35 /IS IT LOWER CASE? -04134 7500 SMA -04135 1373 TAD (-40 /YES, MAKE UPPER CASE -04136 1372 TAD (-35 -04137 1371 RKEY1, TAD (375 /RESTORE CHAR & ADD PARITY -04140 5712 JMP I RKEY / & EXIT WITH IT - - - /SUBROUTINE TO TERMINATE COMMAND BUFFER WITH A C.R. - /RETURN TO CALL+1 IF ONLY A CR (EXCLUDING LEADING - /SPACES) IN BUFFER, TO CALL+2 IF ANYTHING ELSE. -04141 0000 ENDC, 0 -04142 1370 TAD (215 /PUT A CR IN BUFFER -04143 6211 CDF 10 -04144 3415 DCA I COMIR -04145 6201 CDF 0 -04146 1174 TAD COMST /INIT'L BUFFER UNLOAD -04147 3016 DCA COMOUT -04150 1035 TAD CHAR /SAVE CHAR FOR POSSIBLE -04151 3021 DCA TEMP / USE BY 'WCHEK' -04152 4563 JMS I GETNI /GET FIRST CHARACTER -04153 4564 JMS I SSKIPI /SKIP LEADING SPACES -04154 1035 TAD CHAR /GET 1ST NON-SPACE -04155 1105 TAD M215 /IS IT A CR? -04156 7640 SZA CLA /YES, NOTHING IN BUFFER -04157 2341 ISZ ENDC /OTHERWISE RETURN TO CALL+2 -04160 5741 JMP I ENDC - - -04161 0000 DODIG, 0 /OUTPUT AC AS AN ASCII DIGIT -04162 4526 JMS I TYPECI -04163 0260 "0 -04164 5761 JMP I DODIG - - -04170 0215 -04171 0375 -04172 7743 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 22-1 - -04173 7740 -04174 0035 -04175 0002 -04176 7601 -04177 0240 - 4200 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 23 - - /'FPP'/OCTAL/'PDP' OUTPUT ROUTINE FOR ODT -04200 0000 ODTOUT, 0 -04201 1017 TAD TYPSW /-1, 0, +1 -04202 1377 TAD (TAD ODTOL /GENERATE ADDRESS OF DESIRED -04203 3204 DCA ODTOPT / OUTPUT ROUTINE -04204 7402 ODTOPT, HLT /[USED TWICE!] -04205 3204 DCA ODTOPT -04206 4562 JMS I ODGETI /GET SPECIFIED WORD -04207 4604 JMS I ODTOPT / & OUTPUT IT -04210 5600 JMP I ODTOUT - -04211 4400 FPPDMP /-1 = OCTAL + FPP -04212 3400 ODTOL, OPRT / 0 = OCTAL -04213 4214 PDPDMP /+1 = OCTAL + PDP - - - /OCTAL & 'PDP' (SYMBOLIC) DUMP ROUTINE -04214 0000 PDPDMP, 0 -04215 4540 JMS I OCTI /FIRST OUTPUT IN OCTAL -04216 4533 SPACE2 /FOLLOWED BY 2 SPACES, -04217 4221 JMS PDPOUT / & THEN AS 'PDP' -04220 5614 JMP I PDPDMP - - - /'PDP' (SYMBOLIC) INSTRUCTION DECODING -04221 0000 PDPOUT, 0 -04222 7200 CLA -04223 4776' JMS OPRTST /TEST FOR OPR & IOT -04224 5262 JMP OPRS / OPR -04225 4775' JMS IOPRNT / IOT -04226 4774' SYMS, JMS GETOP /GET OP-CODE TO BITS 9-11 -04227 7004 RAL / * 2 -04230 4773' JMS SYMTYP /OUTPUT 3 CHAR SYMBOL & SPACE -04231 2600 INSLST /(TABLE FOR INDEXING) -04232 7776 -2 /(- # WORDS) -04233 4776' JMS OPRTST /TEST FOR OPR & IOT -04234 5256 JMP SYMEND / OPR, DONE -04235 5257 JMP IOTS / IOT -04236 4554 TADICAD /MEMORY REF., INDIRECT? -04237 0372 AND (400 -04240 7650 SNA CLA -04241 5244 JMP REFS1 /NO -04242 4527 JMS I TWOCI /YES, OUTPUT "I " -04243 1140 1140 -04244 4554 REFS1, TADICAD /SET UP ADDR BITS -04245 0117 AND N177 -04246 3771' DCA BITVAL /SAVE THEM -04247 4554 TADICAD /IS THIS A 'PAGE 0 REF'? -04250 0120 AND N200 -04251 7640 SZA CLA -04252 1061 TAD LOCL /NO, USE PAGE BITS -04253 0106 AND M200 -04254 1771' TAD BITVAL /OK, NOW ADD ADDR BITS -04255 4540 REFS2, JMS I OCTI /OUTPUT IN OCTAL -04256 5621 SYMEND, JMP I PDPOUT /DONE, RETURN - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 23-1 - - - / -04257 4554 IOTS, TADICAD /USE ONLY LAST 9 BITS -04260 0370 AND (777 -04261 5255 JMP REFS2 /AND OUTPUT IN OCTAL - / -04262 4554 OPRS, TADICAD /IS THIS A NOP? -04263 0370 AND (777 -04264 7450 SNA -04265 5226 JMP SYMS /YES, OUTPUT "NOP " -04266 0120 AND N200 /IS THERE A CLA IN IT? -04267 7650 SNA CLA -04270 5275 JMP OPRS1 /NO, CONTINUE -04271 4773' JMS SYMTYP /YES, OUTPUT "CLA " -04272 2726 CLANAM -04273 7776 -2 -04274 7001 IAC -04275 3036 OPRS1, DCA CNT /SET ANYTHING OUTPUT SWITCH -04276 4554 TADICAD /SET UP WORD FOR DECODE -04277 4543 JMS I RTL6I -04300 7010 RAR -04301 3771' DCA BITVAL /SAVE IT -04302 4554 TADICAD /CHECK FOR OPR1, OPR2 OR EAE -04303 7110 CLL RAR -04304 0120 AND N200 -04305 7450 SNA -04306 5333 JMP OPR1A /OPR1 MICRO-INSTRUCTION -04307 7620 SNL CLA -04310 5767' JMP OPR2A /OPR2 MICRO-INSTRUCTION - / - /DO THE DOCODING FOR THE EAE MICRO-INSTRUCTIONS -04311 1366 EAE, TAD (EAELST-2 /SET UP EAE LIST POINTER -04312 3765' DCA BITPNT -04313 4764' JMS BITS /SHIFT & CHECK BIT 5 -04314 4763' JMS OPRTYP /IF = 1, "MQA " -04315 1771' TAD BITVAL /CHECK BIT 6 -04316 7104 CLL RAL /("SCA" IN "A" MODE OF 8/E -04317 3771' DCA BITVAL / 'MODE BIT' IN "B" MODE) -04320 7430 SZL -04321 1115 TAD N20 /IF ON, USE OTHER WORDS -04322 3332 DCA EAETMP -04323 4764' JMS BITS /CHECK BIT 7 -04324 4763' JMS OPRTYP / "MQL " -04325 4554 TADICAD -04326 0362 AND (16 -04327 1332 TAD EAETMP /(ADD SWITCH WORD) -04330 4761' JMS SYMLIM /CHECK FOR & OUTPUT LAST INST. -04331 7742 -36 /UPPER LIMIT -04332 0000 EAETMP, 0 - / - /DO THE DECODING FOR THE OPR1 MICRO-INSTRUCTIONS -04333 1360 OPR1A, TAD (OP1LST-2 /SET OPR1 LIST -04334 3765' DCA BITPNT -04335 4764' JMS BITS /SHIFT & CHECK BIT 5 -04336 4763' JMS OPRTYP /IF = 1, OUTPUT "CLL " - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 23-2 - -04337 4764' JMS BITS /CHECK BIT 6 -04340 4763' JMS OPRTYP / "CMA " -04341 4764' JMS BITS /CHECK BIT 7 -04342 4763' JMS OPRTYP / "CML " -04343 2765' ISZ BITPNT /BUMP POINTER -04344 2765' ISZ BITPNT -04345 4554 TADICAD /LOOK FOR IAC -04346 7010 RAR -04347 7630 SZL CLA -04350 4763' JMS OPRTYP /OUTPUT "IAC " -04351 4554 TADICAD /SET UP TO CHECK FOR ROTATES -04352 0362 AND (16 -04353 4761' JMS SYMLIM /CHECK & OUTPUT -04354 7766 -12 /UPPER LIMIT - - -04360 2616 -04361 4433 -04362 0016 -04363 4467 -04364 4456 -04365 4471 -04366 2662 -04367 4405 -04370 0777 -04371 4522 -04372 0400 -04373 4475 -04374 6243 -04375 4523 -04376 4547 -04377 1212 - 4400 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 24 - - /OCTAL & 'FPP' (SYMBOLIC) DUMP ROUTINE -04400 0000 FPPDMP, 0 -04401 4540 JMS I OCTI /FIRST OUTPUT IN OCTAL -04402 4533 SPACE2 / THEN 2 SPACES -04403 4777' JMS FPPOUT / & THEN AS FPP -04404 5600 JMP I FPPDMP - - /THE FOLLOWING ROUTINES ARE USED BY 'PDPOUT' - - /DO THE DECODING FOR THE OPR2 MICROINSTRUCTIONS -04405 1376 OPR2A, TAD (OP2LST-2 /SET UP LIST POINTER -04406 3271 DCA BITPNT -04407 4256 JMS BITS /SHIFT & CHECK BIT 5 -04410 4315 JMS OPR2T /IF 1, OUTPUT "SMA " OR "SPA " -04411 4256 JMS BITS /CHECK BIT 6 -04412 4315 JMS OPR2T / "SZA " OR "SNA " -04413 4256 JMS BITS /CHECK BIT 7 -04414 4315 JMS OPR2T / "SNL " OR "SZL " -04415 4256 JMS BITS /CHECK BIT 8 -04416 7410 SKP -04417 5224 JMP OPR2B /IT WAS 0 -04420 4554 TADICAD /MUST CHECK FOR "SKP " -04421 0375 AND (160 -04422 7650 SNA CLA /ARE ALL SKIP SENSES = 0? -04423 4267 JMS OPRTYP /YES, SO OUTPUT "SKP " -04424 1374 OPR2B, TAD (OP2LST+14 /SET UP CHECK FOR OSR & HLT -04425 3271 DCA BITPNT -04426 4256 JMS BITS /CHECK BIT 9 -04427 4267 JMS OPRTYP / "OSR " -04430 4256 JMS BITS /CHECK BIT 10 -04431 4267 JMS OPRTYP / "HLT " -04432 5246 JMP OPEND /CHECK FOR ANY DONE - -04433 0000 SYMLIM, 0 /CHECK LAST SYMBOL AGAINST LIMIT -04434 3035 DCA CHAR /SAVE AC -04435 1035 TAD CHAR -04436 7550 SPA SNA /IS IT > 0? -04437 5246 JMP OPEND /NO, TEST IF ANY OUTPUT DONE -04440 1633 TAD I SYMLIM /IT IS > UPPER LIMIT? -04441 7740 SMA SZA CLA -04442 5246 JMP OPEND /NO, GO CHECK AGAIN -04443 1035 TAD CHAR /CALCULATE ADDRESS -04444 4267 JMS OPRTYP / & OUTPUT LAST -04445 5773' JMP SYMEND /...DONE - / -04446 7200 OPEND, CLA -04447 1036 TAD CNT /ANYTHING OUTPUT? -04450 7640 SZA CLA -04451 5773' JMP SYMEND /YES, DONE WITH OUTPUT -04452 4275 JMS SYMTYP /NO, OUTPUT "OPR " -04453 2730 OPRMES -04454 7776 -2 -04455 5772' JMP IOTS /NOW GO OUTPUT LAST 9 BITS - -04456 0000 BITS, 0 /DECODE A WORD ONE BIT AT A TIME - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 24-1 - -04457 1322 TAD BITVAL /SHIFT A BIT INTO LINK -04460 7104 CLL RAL -04461 3322 DCA BITVAL /SAVE FOR LATER -04462 2271 ISZ BITPNT /BUMP SYMBOL POINTER -04463 2271 ISZ BITPNT -04464 7420 SNL -04465 2256 ISZ BITS /TO CALL+2 IF L = 0 -04466 5656 JMP I BITS - -04467 0000 OPRTYP, 0 /OUTPUT AN OPR SYMBOL -04470 4275 JMS SYMTYP /OUTPUT THE SYMBOL -04471 0000 BITPNT, 0 /ADDRESS -04472 7776 -2 -04473 2036 ISZ CNT /SET SWITCH -04474 5667 JMP I OPRTYP - -04475 0000 SYMTYP, 0 /OUTPUT A SYMBOL -04476 1675 TAD I SYMTYP /ADD TABLE ADDR TO ANY INDEX -04477 2275 ISZ SYMTYP -04500 3314 DCA SYMPNT /SAVE POINTER -04501 1675 TAD I SYMTYP /GET COUNT OF WORDS -04502 2275 ISZ SYMTYP -04503 3256 DCA BITS / & SAVE IT -04504 6211 SYMNXT, CDF 10 /"SYMBOL"S IN FIELD 1 -04505 1714 TAD I SYMPNT -04506 6201 CDF 0 -04507 4535 JMS I TWOT /OUTPUT A PAIR OF LETTERS -04510 2314 ISZ SYMPNT -04511 2256 ISZ BITS /DONE? -04512 5304 JMP SYMNXT -04513 5675 JMP I SYMTYP -04514 0000 SYMPNT, 0 - -04515 0000 OPR2T, 0 /OUTPUT AN OPR2 SYMBOL -04516 4554 TADICAD -04517 0371 AND (10 /IF BIT IS ON, REVERSE THE -04520 4267 JMS OPRTYP /SENSE OF THE SKIP -04521 5715 JMP I OPR2T - -04522 0000 BITVAL, 0 - - -04523 0000 IOPRNT, 0 /OUTPUT I/O NAMES -04524 1370 TAD (IOTTAB /SET UP POINTER -04525 3344 IOPRN1, DCA IOPNT /SET (OR UPDATE) POINTER -04526 6211 CDF 10 -04527 1744 TAD I IOPNT /GET NEXT IOT -04530 6201 CDF 0 -04531 7450 SNA /AT END OF TABLE? -04532 5723 JMP I IOPRNT /YES, CODE NOT FOUND -04533 7041 CIA -04534 4554 TADICAD /NO, DO THEY MATCH? -04535 7650 SNA CLA -04536 5342 JMP IOPRN2 /YES, OUTPUT NAME -04537 1367 TAD (4 /NO, UPDATE POINTER - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 24-2 - -04540 1344 TAD IOPNT -04541 5325 JMP IOPRN1 / & TRY AGAIN - / -04542 7001 IOPRN2, IAC /WORD FOLLOWS CODE -04543 4275 JMS SYMTYP /OUTPUT THE MNEMONIC -04544 0000 IOPNT, 0 -04545 7775 -3 -04546 5773' JMP SYMEND / & RETURN - - -04547 0000 OPRTST, 0 /TEST "INSTRUCTION" FOR OPR & IOT -04550 4554 TADICAD /GET WORD -04551 0122 AND N7000 /MASK OFF OP CODE -04552 1366 TAD (1000 /IS IT AN OPR? -04553 7450 SNA -04554 5747 JMP I OPRTST /YES, EXIT TO CALL+1 -04555 2347 ISZ OPRTST -04556 1366 TAD (1000 /IS IT AN IOT? -04557 7640 SZA CLA -04560 2347 ISZ OPRTST /NO, EXIT TO CALL+3 -04561 5747 JMP I OPRTST / YES, TO CALL+2 - - -04566 1000 -04567 0004 -04570 2732 -04571 0010 -04572 4257 -04573 4256 -04574 2656 -04575 0160 -04576 2640 -04577 4600 - 4600 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 25 - - /'FPP' (SYMBOLIC) INSTRUCTION DECODING -04600 0000 FPPOUT, 0 -04601 7200 CLA /HARD TO TELL WHAT MIGHT COME! -04602 4554 TADICAD /GET THE WORD -04603 0377 AND (600 /MASK OFF MODE BITS -04604 7450 SNA -04605 5254 JMP SPECIAL / NON-ARITHMETIC -04606 1103 TAD M400 /GIVES: -=BASE, 0=LONG, +=INDIR. -04607 3023 DCA TEMP2 -04610 4776' JMS GETOP /GET OP-CODE TO BITS 9-11 -04611 4775' FPLEA, JMS MULT3 /MULTIPLY BY 3 (WORDS/OP OUT) -04612 4774' JMS SYMTYP /OUTPUT 6 CHAR OPR SYMBOL -04613 3757 FPPINS /(INCLUDING "LEA") -04614 7775 -3 -04615 1023 TAD TEMP2 /NOW HANDLE MODE -04616 7450 SNA -04617 5240 JMP LONG / LONG INDEXED -04620 7700 SMA CLA -04621 5231 JMP INDIR / INDIRECT INDEXED -04622 4525 BASE, JMS I TYPSI / BASE - OUTPUT " B+" -04623 3743 MSBASE -04624 4554 TADICAD /GET WORD AGAIN -04625 0117 AND N177 / MASK OFF OFFSET -04626 4775' JMS MULT3 / MULTIPLY IT BY 3 -04627 4773' JMS OCT3 / & OUTPUT IN OCTAL -04630 5600 JMP I FPPOUT - / -04631 4525 INDIR, JMS I TYPSI /OUTPUT "% B+" -04632 3746 MSINDI -04633 4554 TADICAD /GET WORD AGAIN -04634 0113 AND N7 / MASK OFF OFFSET -04635 4775' JMS MULT3 / MULTIPLY IT BY 3 -04636 4773' JMS OCT3 / & OUTPUT IT IN OCTAL -04637 5243 JMP XRPLUS /FINALLY DO XR OUTPUT - / -04640 4527 LONG, JMS I TWOCI /OUTPUT "# " -04641 4340 4340 -04642 4772' JMS FLDOUT /AND FIELD AND "*" -04643 4771' XRPLUS, JMS GET678 /GET XR FIELD -04644 4527 JMS I TWOCI / & OUTPUT ",X" WHERE -04645 5460 5460 / "X" IS A DIGIT -04646 4554 TADICAD /GET WORD THE LAST TIME -04647 0370 AND (100 / AND CHECK "+" BIT -04650 7640 SZA CLA -04651 4526 JMS I TYPECI /OUTPUT "+" OR SKIP -04652 0253 "+ /[A NOP] -04653 5600 JMP I FPPOUT - / -04654 4776' SPECIAL,JMS GETOP /GET OP-CODE -04655 4567 JMS I SORTI / & BRANCH ON IT -04656 4121 FPPMO0-1 -04657 0010 FPPMOJ-FPPMO0 -04660 4554 SPCOP0, TADICAD /FALLS THRU ON 0, GET -04661 0367 AND (170 / SUB-OP-CODE -04662 4567 JMS I SORTI / & BRANCH ON IT - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 25-1 - -04663 4140 FPPOP0-1 -04664 0020 FPPOPJ-FPPOP0 -04665 4554 SPOP00, TADICAD /FALLS THRU ON 0, USE AS -04666 0113 AND N7 / INDEX INTO LAST LIST -04667 7001 IAC -04670 4775' SPOP04, JMS MULT3 /THREE WORDS/SYMBOL -04671 4774' JMS SYMTYP /OUTPUT ONE OF SEVERAL -04672 4015 FPOP00 / SYMBOLS IN THIS LIST -04673 7775 -3 -04674 5600 JMP I FPPOUT - / -04675 7340 SPOP05, CLL STA /= -1 -04676 5270 JMP SPOP04 /OUTPUT "STARTE" - / -04677 7344 SPNUSE, CLL STA RAL /= -2 -04700 5270 JMP SPOP04 /OUTPUT "UNUSED" - / -04701 4771' SPO123, JMS GET678 /"ALN X", "ATX X", "XTA X" -04702 7104 CLL RAL /(2 WORDS PER) -04703 4774' JMS SYMTYP /OUTPUT SYMBOL -04704 4046 FPXR1S-2 -04705 7776 -2 -04706 5313 JMP XROUT / & XR VALUE - / -04707 1366 SPOP10, TAD (4 /"LDX *,X" -04710 4774' SPOP11, JMS SYMTYP /"ADDX *,X" -04711 4057 FPXR2S -04712 7774 -4 -04713 4554 XROUT, TADICAD /GET XR FIELD -04714 0113 AND N7 -04715 4531 DIGIT / & OUTPUT AS DIGIT -04716 5600 JMP I FPPOUT - / -04717 4554 SPCOP1, TADICAD /GROUP 0 OR 1? -04720 0370 AND (100 -04721 7650 SNA CLA -04722 5337 JMP SPOP1J / 1 = CONDITIONAL JUMPS -04723 4771' JMS GET678 / 0 = SETS, ETC. -04724 1365 TAD (-4 /SUB-OP-CODES 0 THRU 3? -04725 7700 SMA CLA -04726 5277 JMP SPNUSE / NO, 4 THRU 7 = UN-USED -04727 4771' JMS GET678 /0 THRU 3: SETX,SETB,JSA,JSR -04730 7001 IAC / +1+1 => 2 THRU 5 -04731 7001 SPCOP3, IAC / 1: TRAP3 -04732 4775' SPCOP4, JMS MULT3 / 0: TRAP4 -04733 4774' JMS SYMTYP /GO DO ONE OF THESE -04734 4067 FOP134 -04735 7775 -3 -04736 5342 JMP DOFLD /FINISH WITH FIELD - / -04737 4764' SPOP1J, JMS CONDIT /CONDITIONAL JUMPS -04740 1200 1200 / "J--" -04741 4533 SPACE2 -04742 4772' DOFLD, JMS FLDOUT /OUTPUT FIELD & "*" -04743 5600 JMP I FPPOUT - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 25-2 - - / -04744 4525 SPCOP2, JMS I TYPSI /OUTPUT "JNX " -04745 3751 MSJNX -04746 5242 JMP XRPLUS-1 / & HANDLE ADDRESS - / - / SPCOP3 & SPCOP4 - / -04747 4554 SPCOP5, TADICAD /GET WORD AGAIN -04750 0370 AND (100 -04751 7640 SZA CLA -04752 5277 JMP SPNUSE /BIT 5 ON IS UNUSED OP -04753 4764' JMS CONDIT /LOAD TRUTH -04754 1424 1424 / "LT--" -04755 5600 JMP I FPPOUT - / -04756 7001 SPCOP7, IAC / "LEA" INDIRECT, SET SWITCH -04757 3023 SPCOP6, DCA TEMP2 / "LEA" LONG, SET SWITCH -04760 7340 CLL STA -04761 5211 JMP FPLEA / & GO DO OUTPUT - - -04764 6265 -04765 7774 -04766 0004 -04767 0170 -04770 0100 -04771 6251 -04772 6277 -04773 3407 -04774 4475 -04775 6257 -04776 6243 -04777 0600 - 5000 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 26 - -05000 0000 PDATE, 0 /ROUTINE TO OUTPUT AN EXTENDED DATE WORD -05001 3244 DCA CRLF /SAVE IT -05002 1244 TAD CRLF /GET WORD & MASK -05003 0121 AND N377 -05004 7112 CLL RTR /DAY (4-8) TO 7-11 -05005 7010 RAR -05006 4541 JMS I DEC2I / OUTPUT AS 2 DIGITS (MASKED) -05007 4526 JMS I TYPECI / AND A SEPARATOR -05010 0255 "- -05011 1244 TAD CRLF /GET WORD A SECOND TIME -05012 4544 JMS I RTR6I /MONTH (0-3) TO 7-10 -05013 7010 RAR / FOR MONTH*2 -05014 0377 AND (36 / MASK IT AND USE AS AN INDEX -05015 4525 JMS I TYPSI / TO OUTPUT MONTH IN ALPHA -05016 2521 MONTHS / FORM (WITH SAFETY...) -05017 4526 JMS I TYPECI /FOLLOWED BY "-" -05020 0255 "- -05021 1244 TAD CRLF /GET LAST TIME -05022 0113 AND N7 / MASK OFF YEAR -05023 1231 TAD YRTEST / TEST IF .GT. THIS YEAR -05024 7540 SMA SZA -05025 1376 TAD (-10 / YES, SUBTRACT 8 -05026 1232 TAD YRBASE / ADD TO BASE YEAR -05027 4541 JMS I DEC2I / & OUTPUT IT -05030 5600 JMP I PDATE -05031 0000 YRTEST, 0 /-(THIS YEAR) FOR TESTING -05032 0000 YRBASE, 0 /BASE YEAR FOR DATE + THIS YEAR - - -05033 0000 TYPEA, 0 /OUTPUT ASCII CHARACTER IN THE AC -05034 1633 TAD I TYPEA /GET ARG, IF ANY -05035 2233 ISZ TYPEA -05036 3543 DCA I RTL6I /SAVE THE CHAR HERE FOR FIELD 1 -05037 4534 JMS I CTRLI -05040 6212 CIF 10 -05041 5775' JMP TYPE1 /GO TO FIELD 1 TO DO THE OUTPUT - / -05042 2041 TYPEX, ISZ NCNT /BUMP LINE POSITION -05043 5633 JMP I TYPEA / & EXIT - -05044 0000 CRLF, 0 /OUTPUT CARRIAGE RETURN, LINE FEED -05045 7200 CLA -05046 4233 JMS TYPEA -05047 0215 215 -05050 4233 JMS TYPEA -05051 0212 212 -05052 3041 DCA NCNT /RESET LINE POSITION -05053 5644 JMP I CRLF - - -05054 0000 TYPEC, 0 /OUTPUT A SINGLE CHAR ARG -05055 1654 TAD I TYPEC /GET IT -05056 2254 ISZ TYPEC -05057 4261 JMS TYPE /OUTPUT IT -05060 5654 JMP I TYPEC - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 26-1 - - - -05061 0000 TYPE, 0 /CHARACTER OUTPUT ROUTINE -05062 0121 AND N377 /BE SURE ONLY 8 BITS -05063 7450 SNA -05064 1035 TAD CHAR /USE CHAR IF AC = 0 -05065 3277 DCA TCHAR /CHAR TO OUTPUT -05066 1277 TAD TCHAR -05067 4567 JMS I SORTI /CHECK FOR SPECIALS -05070 4516 TYPEL-1 -05071 0056 TYPEOP-TYPEL -05072 1277 TAD TCHAR /IS TCHAR < 240? -05073 1104 TAD M240 -05074 7710 SPA CLA -05075 5320 JMP TYPCTL /NO, OUTPUT AS CTRL-CHAR -05076 4233 TYPC, JMS TYPEA /NOW OUTPUT CHAR -05077 0000 TCHAR, 0 -05100 5661 JMP I TYPE - / -05101 4233 TYPALT, JMS TYPEA /OUTPUT "$" FOR ALT-MODES -05102 0244 "$ -05103 5661 JMP I TYPE - / -05104 4244 TYPCR, JMS CRLF /C.R. TO OUTPUT -05105 5661 JMP I TYPE - / -05106 4233 TYPTAB, JMS TYPEA /SPACE OVER FOR TAB -05107 0240 " -05110 1041 TAD NCNT /TAB TO OUTPUT -05111 1111 TAD M10 -05112 7450 SNA -05113 5661 JMP I TYPE -05114 7500 SMA -05115 5311 JMP TYPTAB+3 /REDUCE BY TAB SIZE -05116 7200 CLA -05117 5306 JMP TYPTAB - / -05120 4233 TYPCTL, JMS TYPEA /CONTROL-CHAR, OUTPUT AS -05121 0336 "^ -05122 1324 TAD C100 / "^","CHAR+100" -05123 5276 JMP TYPC -05124 0100 C100, 100 - - -05125 0000 CTRL, 0 /CHECK FOR CTRL-C, CTRL-S, CTRL-Q & CTRL-P -05126 3367 DCA CTRLQS /CLEAR HANG FLAG -05127 6031 CTRL0, KSF /HAS A KEY BEEN HIT? -05130 5363 JMP CTRLX /NO, TEST IF HANGING -05131 6034 KRS -05132 0117 AND N177 /YES, MASK OFF PARITY BIT -05133 1374 TAD (-"C+300 /IS IT A CTRL-C (ABORT PROGRAM)? -05134 7450 SNA -05135 5360 BCTRLC, JMP CTRLC /*** JMP I CTRLCI /== ABORT == -05136 1110 TAD M20 /IS IT A CTRL-S (STOP OUTPUT)? -05137 7440 SZA - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 26-2 - -05140 5343 JMP CTRL1 -05141 2367 ISZ CTRLQS / YES, SET HANG FLAG -05142 6032 KCC / & CLEAR HARDWARE FLAG -05143 1373 CTRL1, TAD (2 /IS IT A CTRL-Q (START OUTPUT)? -05144 7440 SZA -05145 5350 JMP CTRL2 -05146 6032 KCC / YES, CLEAR THE HARDWARE -05147 5725 JMP I CTRL / & JUST EXIT - / -05150 7001 CTRL2, IAC /IS IT A CTRL-P (STOP PROGRAM)? -05151 7640 SZA CLA -05152 5363 JMP CTRLX /NO, TEST IF HANGING -05153 6032 KCC -05154 3052 DCA DSWIT /YES, RESET DUMP SWITCH -05155 4526 JMS I TYPECI /OUTPUT "^P" -05156 0220 "P-100 -05157 5571 JMP I RECRLF / THEN CR/LF & RESTART - / - /ROUTINE TO EXECUTE THE 'EXIT' COMMAND - / - XEXIT, -05160 3052 CTRLC, DCA DSWIT /RESET DUMP SWITCH -05161 5506 JMP I M200 / & GO TO SYSTEM -05162 0516 CTRLCI, XERR4+1 /*** CTRL-C ABORTS JOB STREAM! *** - / -05163 1367 CTRLX, TAD CTRLQS /HANGING BECAUSE OF CTRL-S? -05164 7640 SZA CLA -05165 5327 JMP CTRL0 / YES, BACK FOR ANOTHER ROUND -05166 5725 JMP I CTRL / NO, OUT WE GO! - -05167 0000 CTRLQS, 0 /CTRL-S, CTRL-Q FLAG - - -05173 0002 -05174 7775 -05175 2400 -05176 7770 -05177 0036 - 5200 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 27 - - /INPUT AN UNSIGNED 24 BIT NUMBER -05200 0000 ACCEPT, 0 -05201 3025 DCA ACC1 /CLEAR LO -05202 3026 DCA ACC2 / & HI WORDS -05203 3777' DCA DADD / & LEGAL INPUT SWITCH -05204 4564 JMS I SSKIPI /GET FIRST NON-SPACE -05205 7410 SKP -05206 4563 ACCPT1, JMS I GETNI /DON'T IGNORE SPACES -05207 4567 JMS I SORTI /CHECK FOR ^D, ^K, (, ", ', -05210 5350 GWLST1-1 / DIGITS, SPACE -05211 0043 ACOPS-GWLST1 -05212 5236 JMP ACCPT3 /NONE OF THE ABOVE - / -05213 1035 ACCNUM, TAD CHAR -05214 1376 TAD (-"0 /MAKE A DIGIT -05215 3261 DCA OCTSET -05216 1261 TAD OCTSET /IS DIGIT LEGAL? -05217 7041 CIA -05220 1242 TAD ACBASE -05221 7750 SPA SNA CLA -05222 4573 ERC09, ERROR / NO, ILLEGAL DIGIT! -05223 1242 ACCMUL, TAD ACBASE /SET UP MULTIPLY OF PREVIOUS -05224 3031 DCA OPER1 / BY BASE -05225 3032 DCA OPER2 -05226 4775' JMS DMUL / DO MULTIPLY -05227 1261 TAD OCTSET /SET UP ADD OF NEXT "DIGIT" -05230 3031 DCA OPER1 -05231 3032 DCA OPER2 -05232 4777' JMS DADD /OK, DO THE ADD (& SET SWITCH) -05233 5206 JMP ACCPT1 - / -05234 7240 STA / SPACE HERE -05235 3046 DCA CRSWT /SET SWITCH: CR HERE -05236 1777' ACCPT3, TAD DADD /TERMINATING CHAR RECEIVED -05237 7650 SNA CLA /CHECK FOR LEGAL INPUT -05240 4573 ERCR, ERROR /YOU CAN'T OUT-SMART ME! -05241 5600 JMP I ACCEPT -05242 0010 ACBASE, 10 - / - / -05243 4265 DQUOTE, JMS QUOTEC / " - GET SINGLE CHAR -05244 3261 DCA OCTSET / SAVE VALUE -05245 5223 JMP ACCMUL / & USE IT AS A "DIGIT" - / -05246 4265 SQUOTE, JMS QUOTEC / ' - PACKED ASCII, GET 1ST -05247 0116 AND N77 /MASK TO 6 BITS -05250 4543 JMS I RTL6I /MOVE TO LEFT HALF -05251 3261 DCA OCTSET / & SAVE IT -05252 4265 JMS QUOTEC /GET 2ND CHAR -05253 0116 AND N77 /MASK -05254 1261 TAD OCTSET /MERGE -05255 5244 JMP DQUOTE+1 / & USE THIS AS A "DIGIT" - / -05256 1374 CTRLD, TAD (2 / ^D - SET RADIX TO DECIMAL -05257 4261 CTRLK, JMS OCTSET / ^K - SET RADIX TO OCTAL - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 27-1 - -05260 5206 JMP ACCPT1 - - - /SUB. TO SET UP FOR OCTAL/DECIMAL INPUT. CALLED FROM - / COMMAND INPUT & MODIFY & IF AN "^K"/"^D" IN INPUT. -05261 0000 OCTSET, 0 /SET UP FOR OCTAL/DECIMAL INPUT -05262 1373 TAD (10 /ENTER WITH AC= 2 FOR DECIMAL -05263 3242 DCA ACBASE -05264 5661 JMP I OCTSET - -05265 0000 QUOTEC, 0 /GET A QUOTED CHARACTER -05266 4772' JMS CGTEST /GET & TEST FOR A CR -05267 4573 ERC13, ERROR / ILLEGAL USE OF " OR ' -05270 1035 TAD CHAR /OK, RETURN WITH IT -05271 5665 JMP I QUOTEC - - - /SUBROUTINE TO DEVELOP ARGUMENTS FROM THE COMMAND - /BUFFER, AND RETURN WITH -(#) OF ARGS IN 'TEMP'. -05272 0000 GARGS, 0 -05273 1175 TAD TEMPST /GET BUFFER ADDRESS -05274 3010 DCA DPNT -05275 3021 DCA TEMP /ZERO THE NUMBER OF ARGS -05276 7240 GAR1, STA -05277 3022 DCA TEMP1 /SET BLK TO -1 -05300 7240 STA -05301 3036 DCA CNT /RESET SWITCH -05302 4771' GAR2, JMS EXPRIN /GET NEXT ARG -05303 4564 JMS I SSKIPI /IGNORE TRAILING SPACES -05304 4567 JMS I SORTI /BRANCH ON TERMINATOR -05305 5442 GARLST-1 -05306 7772 GAROPS-GARLST -05307 4573 ERCS, ERROR /ILLEGAL TERMIN., FLAME OUT - / -05310 4326 GAR3, JMS GPUT /CR FOUND, END -05311 1175 TAD TEMPST /SET UP POINTER FOR -05312 3010 DCA DPNT / GETTING RESULTS -05313 5672 JMP I GARGS - / -05314 4563 GAR4, JMS I GETNI /SKIP OVER "." -05315 1025 TAD ACC1 /.= TERMIN (BLOCK PART) -05316 5277 JMP GAR1+1 /SET BLOCK & GET NEXT - / -05317 1025 GAR5, TAD ACC1 /-= TERMIN (LOC PART) -05320 3023 DCA TEMP2 -05321 4563 JMS I GETNI /SKIP OVER "-" -05322 5301 JMP GAR2-1 /GO SET SWITCH - / -05323 4326 GAR6, JMS GPUT /,= TERMIN -05324 4563 JMS I GETNI /SKIP OVER "," -05325 5276 JMP GAR1 - - - /SUBROUTINE TO PUT THE DEVELOPED ARGS IN THE ARG - /BUFFER. ALL ARGUMENTS ARE STORED IN 4 WORDS IN - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 27-2 - - /THE BUFFER, AS SPECIFIED BY: - / BLOCK.LOC1-LOC2 (TERMINATED BY , OR C.R.) - /AS: - /I-------I-------I-------I-------I----- - /I WORD1 I WORD2 I WORD3 I WORD4 I ETC. - /I-------I-------I-------I-------I----- - /WHERE: - / WORD1= BLOCK (OR -1 IF NONE SPECIFIED) - / WORD2= LOC (HIGH) [ONLY 3 BITS, LOC2 IF SPEC'D] - / WORD3= LOC1 (LOW) - / WORD4= LOC2-LOC1-1 (LOC2=LOC1 IF NOT - / SPECIFIED) [ONLY 12 LOW BITS USED] -05326 0000 GPUT, 0 -05327 1022 TAD TEMP1 -05330 3410 DCA I DPNT /SET BLOCK -05331 2036 ISZ CNT /WAS A LOC2 SPECIFIED? -05332 5335 JMP GPUT1 /YES, OK -05333 1025 TAD ACC1 -05334 3023 DCA TEMP2 /NO, MAKE ARGS SAME -05335 1026 GPUT1, TAD ACC2 /STORE HIGH ADDR -05336 0113 AND N7 /MASKED TO 3 BITS -05337 3410 DCA I DPNT -05340 1023 TAD TEMP2 /USE 1ST ARG -05341 3410 DCA I DPNT -05342 1025 TAD ACC1 -05343 7040 CMA -05344 1023 TAD TEMP2 -05345 3410 DCA I DPNT /DIFF= (TEMP2-ACC1-1) -05346 7240 STA -05347 1021 TAD TEMP /ANOTHER ENTRY -05350 3021 DCA TEMP -05351 5726 JMP I GPUT - - -05352 0000 XS240O, 0 /XS240 FORMAT PACKED ASCII -05353 4544 JMS I RTR6I /HIGH 6 BITS -05354 0116 AND N77 -05355 4532 SPACE1 / PLUS A SPACE -05356 4554 TADICAD /THEN LOW 6 BITS, -05357 0116 AND N77 -05360 4532 SPACE1 / PLUS A SPACE -05361 5752 JMP I XS240O - - -05362 0000 GETN, 0 /GET NEXT CHAR FROM COMM. BUFF. -05363 6211 CDF 10 -05364 1416 TAD I COMOUT -05365 6201 CDF 0 -05366 3035 DCA CHAR -05367 5762 JMP I GETN - - -05371 5727 -05372 2552 -05373 0010 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 27-3 - -05374 0002 -05375 6000 -05376 7520 -05377 5650 - 5400 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 28 - - /ROUTINE TO EVALUATE THE PARENTHESIZED EXPRESSION - /OF DOUBLE PRECISION INTEGERS IN THE COMMAND BUFFER. - /IT CALLS ITSELF RECURSIVELY TO EVALUATE EXPRESSIONS - /IN "(...)", PLACING INFORMATION ON A PUSH-DOWN-LIST - /OR DOING ARITHMETIC ACCORDING TO OPERATOR PRECIDENCE. - / - /OPERATIONS (IN ORDER OF PRECIDENCE): - / OR AND ADD SUB DIV MPY - / ! & + - / * - - /ALL ARITHMETIC IS DONE IN DOUBLE-PRECISION SIGNED - /INTEGER. OVERFLOW ON MULTIPLY, ADD OR SUBTRACT IS - /IGNORED BUT DIVIDE BY 0 WILL CAUSE AN ERROR. - - -05400 0000 EVAL, 0 -05401 3032 DCA OPER2 /0 => D.P. TEMP (NEW NUMBER -05402 3031 DCA OPER1 / OR LAST RESULT). -05403 3002 DCA LASTOP /0 => LASTOP -05404 4765 JMS I TERMTI /GET NEXT & TEST FOR TERM. -05405 5207 JMP EVAL1 /TERM, CHECK IT -05406 5272 JMP ENUM / IT MUST BE A NUMBER - -05407 4567 EVAL1, JMS I SORTI /CHECK LEGAL TERMS -05410 5476 EVLST1-1 /"+","-" & "(" -05411 7775 EVOPS1-EVLST1 -05412 4573 ERCT, ERROR /SORRY ABOUT THAT - -05413 4764 EVAL2, JMS I LPARI /IS CHAR "("? -05414 4573 ERCU, ERROR /YES,ILLEGAL (NO OP FIRST) -05415 1040 EVMIN, TAD CNTRA /SEQN # OF TERMINATOR -05416 3003 DCA THISOP /SET UP THISOP -05417 1040 TAD CNTRA /IS IT ")" OR "CR"? -05420 1111 TAD M10 -05421 7700 SMA CLA -05422 3003 DCA THISOP /YES, 0 => THISOP -05423 1003 EVAL3, TAD THISOP /CHECK PRIORITIES -05424 7041 CIA -05425 1002 TAD LASTOP /IS LASTOP < THISOP? -05426 7710 SPA CLA -05427 5256 JMP EVPAR /YES, CONTINUE SCAN -05430 1003 TAD THISOP / IS THISOP+LASTOP=0? -05431 1002 TAD LASTOP -05432 7650 SNA CLA -05433 5357 JMP EVALX /YES, DONE -05434 1002 TAD LASTOP /NO, DO THIS OP NOW -05435 1366 TAD EVTAB -05436 3246 DCA EVOP /SET UP OPERATION -05437 1002 TAD LASTOP /IS THIS =0? -05440 7650 SNA CLA -05441 5246 JMP EVOP /YES, DO OP -05442 4551 POP /NO, POP LAST OFF LIST -05443 3026 DCA ACC2 / INTO D.P.AC. -05444 4551 POP -05445 3025 DCA ACC1 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 28-1 - -05446 7402 EVOP, HLT /JMS TO OPERATION ROUTINE -05447 1026 TAD ACC2 -05450 3032 DCA OPER2 /DUPLICATE D.P.AC. INTO -05451 1025 TAD ACC1 -05452 3031 DCA OPER1 / D.P. TEMP -05453 4551 POP -05454 3002 DCA LASTOP /POP UP ANOTHER OLD OPERATOR -05455 5223 JMP EVAL3 /AND GO DO IT - -05456 4764 EVPAR, JMS I LPARI /IS CHAR A "("? -05457 5337 JMP EVLPAR /YES, GO DO A SUB-EXPRESSION -05460 1002 TAD LASTOP /NO, PUSH DOWN OLD OP -05461 4550 PUSH -05462 1031 TAD OPER1 / & D.P. TEMP (LAST -05463 4550 PUSH -05464 1032 TAD OPER2 / RESULT OR NEW NUMBER). -05465 4550 PUSH -05466 1003 TAD THISOP /UPDATE LASTOP -05467 3002 DCA LASTOP -05470 4765 EVNEXT, JMS I TERMTI /GET NEXT & TEST FOR TERM. -05471 5337 JMP EVLPAR /TERM, MUST BE A "(" -05472 4567 ENUM, JMS I SORTI /CHECK FOR "C","B", ETC... -05473 5502 EVLST2-1 -05474 0011 EVOPS2-EVLST2 -05475 4777' JMS ACCEPT /GET A # OR BOMB OUT! -05476 7240 STA -05477 1016 TAD COMOUT /BACK UP POINTER -05500 3016 DCA COMOUT -05501 1025 ENUMX, TAD ACC1 -05502 3031 DCA OPER1 /LO ORDER PART -05503 1026 TAD ACC2 -05504 3032 DCA OPER2 /HI ORDER PART -05505 5354 JMP EVOPN /GO CHECK TERMINATOR - / -05506 6211 EVDATE, CDF 10 /"D" -- USE DATE WORD -05507 1776 TAD I (7666 /GET DATE WORD -05510 6201 CDF 0 -05511 5334 JMP EVBLK+1 -05512 1027 EVREM, TAD ACCX1 /"R" -- USE REMAINDER -05513 3025 DCA ACC1 -05514 1030 TAD ACCX2 / AS NEXT "INPUT". -05515 5335 JMP EVBLK+2 -05516 1033 EVTEMP, TAD TEMPV1 /"T" -- USE 'TEMP' STORAGE -05517 3025 DCA ACC1 -05520 1034 TAD TEMPV2 -05521 5335 JMP EVBLK+2 -05522 7614 EVSR, LAS SKP /"S" -- USE SWITCHES -05523 4554 TADICAD /"C" -- USE CONTENTS -05524 5334 JMP EVBLK+1 -05525 1074 EVFIL, TAD FILLER /"F" -- USE FILLER -05526 5334 JMP EVBLK+1 -05527 1061 EVLOC, TAD LOCL /"L" -- USE LOCATION -05530 3025 DCA ACC1 -05531 1060 TAD LOCH -05532 5335 JMP EVBLK+2 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 28-2 - -05533 1057 EVBLK, TAD BLK /"B" -- USE BLOCK -05534 3025 DCA ACC1 /INTO LO ORDER PART -05535 3026 DCA ACC2 /0 HIGH ORDER PART -05536 5301 JMP ENUMX /CHECK NEXT CHARACTER - -05537 4764 EVLPAR, JMS I LPARI /IS CHAR "("? -05540 7410 SKP -05541 4573 ERCV, ERROR /NO, DIE! (ILLEGAL OPERATOR) -05542 1002 EVPAR2, TAD LASTOP /PUSH DOWN LASTOP -05543 4550 PUSH -05544 1200 TAD EVAL /PREPARE TO RE-CALL -05545 4550 PUSH -05546 4200 JMS EVAL /RECURSIVE CALL -05547 4573 ERCW, ERROR /TERM = CR, NOT ENOUGH PARENS -05550 4551 POP -05551 3200 DCA EVAL /RESTORE RETURN ADDR -05552 4551 POP -05553 3002 DCA LASTOP /RESTORE LASTOP -05554 4765 EVOPN, JMS I TERMTI /GET NEXT & TEST FOR TERM. -05555 5213 JMP EVAL2 /OK -05556 5341 JMP EVPAR2-1 /GARBAGE, GIVE SAME ERROR - -05557 1040 EVALX, TAD CNTRA /WAS CHAR CR OR ")"? -05560 1111 TAD M10 -05561 7650 SNA CLA -05562 2200 ISZ EVAL / ")", RETURN TO CALL+2 -05563 5600 JMP I EVAL / CR, RETURN TO CALL+1 - -05564 5616 LPARI, LPAR -05565 5624 TERMTI, TERMT - -05566 4766 EVTAB, JMS I . /JMS THRU TABLE TO OPERATIONS - -05567 5677 DIOR /INCLUSIVE OR -05570 5667 DAND /AND -05571 5650 DADD /ADD -05572 5662 DSUB /SUBTRACT -05573 6040 DDIV /DIVIDE -05574 6000 DMUL /MULTIPLY - - -05576 7666 -05577 5200 - 5600 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 29 - -05600 0000 PUSHX, 0 /PUSH AC ONTO LIST -05601 6211 CDF 10 -05602 3407 DCA I PDLPT -05603 6201 CDF 0 -05604 2007 ISZ PDLPT /BUMP POINTER -05605 5600 JMP I PUSHX - -05606 0000 POPX, 0 /POP LIST INTO AC -05607 7360 STA STL /SET LINK SO IT WILL BE 0 -05610 1007 TAD PDLPT /BACK UP POINTER -05611 3007 DCA PDLPT -05612 6211 CDF 10 -05613 1407 TAD I PDLPT -05614 6201 CDF 0 -05615 5606 JMP I POPX - - -05616 0000 LPAR, 0 /CHECK IF CHAR = "(" -05617 1035 TAD CHAR -05620 1377 TAD (-"( -05621 7640 SZA CLA -05622 2216 ISZ LPAR /IF IT IS NOT, TO CALL+2 -05623 5616 JMP I LPAR / ELSE TO CALL+1 - - /COMPARE CHAR AGAINST LIST OF TERMINATORS. IF IT - /IS ONE, RETURN TO CALL+1, ELSE TO CALL+2. -05624 0000 TERMT, 0 -05625 7300 CLA CLL -05626 4563 JMS I GETNI /GET NEXT CHARACTER -05627 4564 JMS I SSKIPI /IGNORE SPACES -05630 1376 TAD (TERMS-1 /SET UP POINTER -05631 3011 DCA SPNT -05632 3040 DCA CNTRA /SET CNTRA TO 0 -05633 6211 TERMT1, CDF 10 -05634 1411 TAD I SPNT /GET AN ITEM -05635 6201 CDF 0 -05636 2040 ISZ CNTRA /ADD 1 TO ITEM # -05637 7450 SNA -05640 5246 JMP TERMTE /WAS 0, END -05641 7041 CIA -05642 1035 TAD CHAR /SAME AS THIS? -05643 7650 SNA CLA -05644 5624 JMP I TERMT /YES, TO CALL+1 -05645 5233 JMP TERMT1 -05646 2224 TERMTE, ISZ TERMT /DIDN'T FIND IT, TO -05647 5624 JMP I TERMT / CALL+2 - - /DOUBLE-PRECISION ROUTINES - -05650 0000 DADD, 0 /D.P. ADD -05651 7100 CLL -05652 1031 TAD OPER1 -05653 1025 TAD ACC1 /ADD LOW ORDER PARTS -05654 3025 DCA ACC1 -05655 7004 RAL /GET CARRY TO AC11 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 29-1 - -05656 1032 TAD OPER2 /ADD HIGH ORDER PARTS -05657 1026 TAD ACC2 -05660 3026 DCA ACC2 /STORE HIGH ORDER PART -05661 5650 JMP I DADD - -05662 0000 DSUB, 0 /D.P. SUBTRACT -05663 3001 DCA DPSGN /ZERO IT FOR SAFETY -05664 4775' JMS MULNEG /NEGATE OPERAND -05665 4250 JMS DADD / & ADD -05666 5662 JMP I DSUB - -05667 0000 DAND, 0 /D.P. LOGICAL AND -05670 1026 TAD ACC2 /AND HIGH ORDER PARTS -05671 0032 AND OPER2 -05672 3026 DCA ACC2 -05673 1025 TAD ACC1 /AND LOW ORDER PARTS -05674 0031 AND OPER1 -05675 3025 DCA ACC1 -05676 5667 JMP I DAND /RETURN - -05677 0000 DIOR, 0 /D.P. LOGICAL INCLUSIVE OR -05700 1026 TAD ACC2 /IOR HIGH ORDER PARTS -05701 7040 CMA -05702 0032 AND OPER2 -05703 1026 TAD ACC2 -05704 3026 DCA ACC2 -05705 1025 TAD ACC1 /IOR LOW ORDER PARTS -05706 7040 CMA -05707 0031 AND OPER1 -05710 1025 TAD ACC1 -05711 3025 DCA ACC1 -05712 5677 JMP I DIOR - - - /SUBROUTINE TO GET SINGLE ARGS FROM THE COMMAND - /BUFFER. MUST BE IN 'BLOK.LOC' FORM. ONLY ".", - /SPACE AND CR ARE ALLOWED OTHER THAN DIGITS. -05713 0000 ARG, 0 -05714 7240 STA -05715 3022 ARG1, DCA TEMP1 /SET 'BLOK' [INIT TO -1] -05716 4327 JMS EXPRIN / GET AN ARG -05717 4567 JMS I SORTI /LOOK UP TERMINATOR -05720 5445 ARGLST-1 -05721 0010 ARGOPS-ARGLST -05722 4573 ERCQ, ERROR /ILLEGAL TERMINATOR - / -05723 4563 ARG2, JMS I GETNI /SKIP OVER "." -05724 1025 TAD ACC1 /TERM = ".", SET 'BLOK' -05725 5315 JMP ARG1 - / -05726 5713 ARG3, JMP I ARG /TERM = " " OR CR - - - /GET NEXT ARG FROM COMM. BUFF. IF NEXT CHAR IS - / A "(", USE 'EVAL' TO GET IT, OTHERWISE USE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 29-2 - - / 'ACCEPT'. -05727 0000 EXPRIN, 0 -05730 4564 JMS I SSKIPI /IGNORE SPACES -05731 4216 JMS LPAR /IS CHAR A "("? -05732 5335 JMP EXPRI1 -05733 4774' JMS ACCEPT /NO, MUST BE A NUMBER -05734 5727 JMP I EXPRIN - / -05735 4547 EXPRI1, JMS I EVALI /YES, GO EVALUATE EXPRESSION -05736 4573 ERC08, ERROR /CR = ILLEGAL TERMINATOR -05737 4773' JMS CGTEST /OK, SKIP OVER ")" & TEST FOR CR -05740 7410 SKP -05741 7240 STA /NO, SET SWITCH -05742 3046 DCA CRSWT /YES, RESET IT -05743 5727 JMP I EXPRIN / & LEAVE... - - -05744 0000 SCANER, 0 /EXECUTION SUBROUTINE FOR 'SCAN' COMMAND -05745 7200 CLA -05746 1057 TAD BLK /SET UP DESIRED BLOCK -05747 3054 DCA CBLK -05750 4772' JMS GETIO /DO NECESSARY I/O -05751 7610 SKP CLA / READ ERROR! -05752 5744 JMP I SCANER /THIS BLOCK IS OK! -05753 1057 TAD BLK -05754 4540 JMS I OCTI /OUTPUT BLOCK NUMBER -05755 4525 JMS I TYPSI / & TELL IT'S BAD -05756 2145 MSBAD -05757 4530 JMS I CRLFI / TO ANOTHER LINE -05760 5744 JMP I SCANER - - -05772 3027 -05773 2552 -05774 5200 -05775 6126 -05776 5336 -05777 7530 - 6000 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 30 - - /SIGNED MULTIPLY AND DIVIDE ROUTINES - -06000 0000 DMUL, 0 -06001 4312 JMS MDCOM /MAKE DPAC POS, INITIALIZE -06002 7710 SPA CLA /MAKE SURE MULTIPLIER IS POSITIVE -06003 4326 JMS MULNEG / IT WAS NEG, MAKE POS & SET SIGN -06004 1026 DMUL1, TAD ACC2 /SHIFT RIGHT & OUT -06005 7010 RAR -06006 3026 DCA ACC2 /THRU HI OF LO -06007 1025 TAD ACC1 -06010 7010 RAR -06011 3025 DCA ACC1 /THRU LO OF LO INTO LINK -06012 2341 ISZ DPNEG /DONE YET? -06013 5221 JMP DMUL2 /NO, CONTINUE -06014 1001 DMUL4, TAD DPSGN /YES, CHECK SIGN OF RESULT -06015 7010 RAR -06016 7630 SZL CLA /SKIP IF SIGN OK -06017 4341 JMS DPNEG /NOT OK, NEGATE -06020 5600 JMP I DMUL - / -06021 7420 DMUL2, SNL /ADD IN THIS TIME? -06022 5231 JMP DMUL3 /NO, BIT OUT WAS 0 -06023 7300 CLA CLL /YES, BIT WAS 1 -06024 1031 TAD OPER1 /START WITH LOW -06025 1027 TAD ACCX1 -06026 3027 DCA ACCX1 -06027 7204 CLA RAL /GET CARRY -06030 1032 TAD OPER2 /ADD HIGH PARTS -06031 1030 DMUL3, TAD ACCX2 /AND BEGIN SHIFTING OUT -06032 7010 RAR -06033 3030 DCA ACCX2 -06034 1027 TAD ACCX1 -06035 7010 RAR -06036 3027 DCA ACCX1 -06037 5204 JMP DMUL1 - -06040 0000 DDIV, 0 -06041 1240 TAD DDIV /MOVE RETURN ADDRESS -06042 3200 DCA DMUL -06043 4312 JMS MDCOM /MAKE DPAC POS, INITIALIZE -06044 7700 SMA CLA /IS DIVISOR NEGATIVE? -06045 4326 JMS MULNEG / NO, NEGATE IT & SET SIGN -06046 7430 SZL / IS IT 0? (CARRY OUT ON NEGATE) -06047 4573 ERCX, ERROR / YES, YOU LOST -06050 2001 ISZ DPSGN /CORRECT FOR SIGN DIF IN * & / -06051 1027 DDIV1, TAD ACCX1 /SUBTRACT LO OF LO -06052 1031 TAD OPER1 -06053 3027 DCA ACCX1 -06054 7204 CLA RAL /CARRY TO AC -06055 1030 TAD ACCX2 /SUBTRACT HI OF LO -06056 1032 TAD OPER2 -06057 7510 SPA /TOO FAR? -06060 5264 JMP DDIV2 /YES -06061 7120 CLL CML /NO, SET LINK -06062 3030 DCA ACCX2 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 30-1 - -06063 5272 JMP DDIV3 -06064 7200 DDIV2, CLA -06065 1031 TAD OPER1 /RESET LO ORDER PART -06066 7041 CIA -06067 1027 TAD ACCX1 -06070 3027 DCA ACCX1 -06071 7100 CLL /RESET LINK -06072 1025 DDIV3, TAD ACC1 /BEGIN SHIFTING -06073 7004 RAL -06074 3025 DCA ACC1 -06075 1026 TAD ACC2 -06076 7004 RAL -06077 3026 DCA ACC2 -06100 2341 ISZ DPNEG /DONE YET? -06101 7410 SKP -06102 5214 JMP DMUL4 /YES, CHECK SIGN & RETURN -06103 1027 TAD ACCX1 /NO, KEEP SHIFTING -06104 7004 RAL -06105 3027 DCA ACCX1 -06106 1030 TAD ACCX2 -06107 7004 RAL -06110 3030 DCA ACCX2 -06111 5251 JMP DDIV1 - -06112 0000 MDCOM, 0 /COMMON ROUTINE FOR MULTIPLY & DIVIDE -06113 3001 DCA DPSGN /RESET SIGN -06114 1026 TAD ACC2 /IS DPAC POS? -06115 7710 SPA CLA -06116 4341 JMS DPNEG /NO, NEGATE -06117 3030 DCA ACCX2 / 0 => DPACX -06120 3027 DCA ACCX1 -06121 1377 TAD (-31 /INITIALIZE COUNTER -06122 3341 DCA DPNEG -06123 7100 CLL -06124 1032 TAD OPER2 /RETURN W. HIGH OPERAND -06125 5712 JMP I MDCOM - -06126 0000 MULNEG, 0 /NEGATE THE MULTIPLIER/DIVISOR -06127 1031 TAD OPER1 /DO LO-ORDER PART -06130 7141 CLL CIA -06131 3031 DCA OPER1 -06132 1032 TAD OPER2 /DO HI-ORDER PART -06133 7040 CMA -06134 7430 SZL /CARRY? -06135 7101 CLL IAC /YES, ADD IT IN -06136 3032 DCA OPER2 -06137 2001 ISZ DPSGN /SIGN CHANGE MADE -06140 5726 JMP I MULNEG - -06141 0000 DPNEG, 0 /NEGATE THE D.P.AC. -06142 1025 TAD ACC1 /DO LO-ORDER PART -06143 7141 CLL CIA -06144 3025 DCA ACC1 -06145 1026 TAD ACC2 /DO HI-ORDER PART -06146 7040 CMA - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 30-2 - -06147 7430 SZL /CARRY? -06150 7101 CLL IAC /YES, ADD IT IN -06151 3026 DCA ACC2 -06152 2001 ISZ DPSGN /SIGN CHANGE MADE -06153 5741 JMP I DPNEG - - -06154 0000 BLKTST, 0 /TEST & SET BLK -06155 3341 DCA DPNEG /SAVE DATA -06156 1341 TAD DPNEG /GET IT BACK AGAIN -06157 2341 ISZ DPNEG /LEGAL BLOCK NUMBER? -06160 3057 DCA BLK / YES IF NOT 7777 (-1) -06161 7200 CLA / IF NOT, CLEAR JUNK -06162 5754 JMP I BLKTST - - -06163 0000 DICAD, 0 /"DCA I CAD" IN FIELD 1 -06164 6211 CDF 10 -06165 3456 DCA I CAD -06166 6201 CDF 0 -06167 5763 JMP I DICAD - -06170 0000 TICAD, 0 /"TAD I CAD" IN FIELD 1 -06171 6211 CDF 10 -06172 1456 TAD I CAD -06173 6201 CDF 0 -06174 5770 JMP I TICAD - - -06177 7747 - 6200 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 31 - - /CHECK IF THE COMMAND BUFFER STARTS WITH A WORD. IF - /IT DOES, RETURN TO 'MAIN3' WITH THE SPECIAL CHAR- - /ACTER AND JUST USE IT AS PART OF THE COMMAND STRING. - /IF IT DOES NOT, TEST FOR EXPRESSIONS [IN "(...)", - /TO ALLOW CHARACTERS IN THE EXPRESSIONS TO NOT BE - /TAKEN AS COMMAND CHARACTERS] AND SINGLE & DOUBLE - /QUOTES [THE FOLLOWING CHARACTER OR CHARACTERS ARE - /LITERALS, NOT COMMANDS]. IF THE PARENS MATCH AND - /THE QUOTES ARE FOLLOWED BY THE CORRECT NUMBER OF - /CHARACTERS, THEN THE LAST CHARACTER WAS AN "ODT" - /COMMAND TO BE EXECUTED SO RETURN TO CALL+1. OTHER- - /WISE RETURN TO 'MAIN3' AS ABOVE. - -06200 0000 WCHEK, 0 -06201 4556 JMS I GWORDI /COM BUF BEGIN WITH A WORD? -06202 5211 JMP WCHEK2 /NO, TEST FOR PARENS, ETC. -06203 7240 WCHEK1, STA -06204 1015 TAD COMIR /YES, BACK UP COMIR -06205 3015 DCA COMIR -06206 1021 TAD TEMP /AND USE THE SPECIAL CHAR AS -06207 5610 JMP I .+1 / PART OF THE COMMAND STRING -06210 4025 RESPC+1 - / -06211 7240 WCHEK2, STA -06212 1016 TAD COMOUT /SET UP ANOTHER A-XR -06213 3010 DCA DPNT -06214 3036 DCA CNT /RESET (OR SET) PAREN COUNT -06215 4553 WCHEK3, TADIDP /GET A CHAR FROM COMM. BUFF. -06216 4567 JMS I SORTI / & GO TEST IT -06217 5460 WCKLST-1 -06220 0006 WCKOPS-WCKLST -06221 5215 JMP WCHEK3 /NONE, CONTINUE SCAN - / -06222 1036 WCHEK4, TAD CNT /CR, DO PARENS MATCH? -06223 7640 SZA CLA -06224 5203 JMP WCHEK1 /NO, CONTINUE COMMAND INPUT -06225 5600 JMP I WCHEK /YES, INPUT IS DONE - / -06226 7344 WCHEK5, STA CLL RAL /SET TO -2 -06227 7001 IAC /AC = +1 OR -1 -06230 1036 TAD CNT / UPDATE PAREN COUNT -06231 5214 JMP WCHEK3-1 / & CONTINUE SCAN - / -06232 4235 WCHEK6, JMS WCHONE / ' -- 2 CHARACTERS -06233 4235 JMS WCHONE / " -- 1 CHARACTER -06234 5215 JMP WCHEK3 /OK, CONTINUE SCAN - -06235 0000 WCHONE, 0 -06236 4553 TADIDP /GET NEXT CHAR -06237 1105 TAD M215 /IS IT A CR? -06240 7650 SNA CLA -06241 5203 JMP WCHEK1 /YES, DON'T EXECUTE SPECIAL -06242 5635 JMP I WCHONE /NO, OK - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 32 - - /FPP INSTRUCTION DECODING SUPPORT SUBROUTINES - -06243 0000 GETOP, 0 /GET OP-CODE (BITS 0-3) TO BITS 9-11 -06244 4554 TADICAD -06245 0122 AND N7000 -06246 7106 CLL RTL -06247 7006 RTL -06250 5643 JMP I GETOP - -06251 0000 GET678, 0 /GET BITS 678 TO BITS 9-11 -06252 4554 TADICAD -06253 7112 CLL RTR -06254 7010 RAR -06255 0113 AND N7 -06256 5651 JMP I GET678 - -06257 0000 MULT3, 0 /MULTIPLY AC BY THREE -06260 3243 DCA GETOP -06261 1243 TAD GETOP -06262 7104 CLL RAL -06263 1243 TAD GETOP /WORKS FOR POS OR NEG! -06264 5657 JMP I MULT3 - -06265 0000 CONDIT, 0 /OUTPUT CONDITIONAL FPP INSTRUCTION -06266 1665 TAD I CONDIT /GET LEADING 1 OR 2 CHARS -06267 2265 ISZ CONDIT -06270 4535 JMS I TWOT / & OUTPUT THEM -06271 4251 JMS GET678 /GET CONDITION CODE -06272 4676 JMS I SYMTYI / AS INDEX TO TABLE -06273 4111 FPCOND -06274 7777 -1 -06275 5665 JMP I CONDIT -06276 4475 SYMTYI, SYMTYP - -06277 0000 FLDOUT, 0 /OUTPUT FIELD DIGIT & "*" -06300 4554 TADICAD -06301 0113 AND N7 /GET FIELD -06302 4543 JMS I RTL6I / TO BITS 3-5 -06303 4527 JMS I TWOCI / & OUTPUT "F*" -06304 6052 6052 / WHERE "F" IS DIGIT -06305 5677 JMP I FLDOUT - - - - DECIMAL /SET RADIX TO DECIMAL - - 6306 TEMPL= . /ARGUMENT BUFFER - /L(TEMPL)=180(10) - 6572 F0END= TEMPL+180 -06306 0006 DMPHAN-F0END /(SHOW SPACE LEFT) - - OCTAL - - 6400 PAGE /****** MUST BE NO LITERALS! ****** - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 32-1 - - 6600 DMPHAN= 06600 /DUMP HANDLER AREA, 2 FIELD 0 PAGES - - 7200 DEVHAN= 07200 /DEVICE HANDLER AREA, 2 FIELD 0 PGS - - - IFNZRO DMPHAN-F0END&4000 - - /IF THE ABOVE ASSEMBLES, THE BUFFERS ARE OVER- - / RUNNING THE DUMP DEVICE HANDLER. - - - 6306 *TEMPL /ADD INITIALIZATION CODE WHICH IS OVERLAID - -06306 0000 INIMSG, 0 /INITIALIZE ERROR MESSAGES ON SCRATCH BLKS -06307 6211 CDF 10 -06310 1777 TAD I (7726 /BUT FIRST CHECK FOR "SCOPE MODE" -06311 6201 CDF 0 -06312 0120 AND N200 / (BIT 4 OF 17726) -06313 7650 SNA CLA -06314 5322 JMP INIDAT / NOT SET, GO SET UP DATE -06315 1411 INISCO, TAD I SPNT /SET, CHANGE RUBOUT HANDLER TO -06316 7450 SNA -06317 5322 JMP INIDAT / ERASE CHARACTERS FROM SCREEN -06320 3410 DCA I DPNT / AND FROM BUFFER (MUCH EASIER -06321 5315 JMP INISCO / THAN ON HARD COPY!) - / -06322 6211 INIDAT, CDF 10 /NOW INIT EXTENDED DATE -06323 1776 TAD I (7666 /GET SYSTEM DATE WORD -06324 6201 CDF 0 -06325 0113 AND N7 /PICK OFF THIS YEAR PART -06326 7041 CIA -06327 3775' DCA YRTEST / AND SET TEST YEAR (NEG) -06330 1512 TAD I M1 /NOW GET EXTENDED YEAR BITS -06331 0374 AND (600 / FROM "B.I.P." WORD AND -06332 7112 CLL RTR / MOVE TO BITS 7,8 (*8) -06333 7012 RTR -06334 1373 TAD (106 /ADD TO A STARTING BASE OF 70[10] -06335 7041 CIA -06336 1775' TAD YRTEST /AND ADD THIS YEAR ALSO -06337 7041 CIA -06340 3772' DCA YRBASE /= 70 + EXTEND*8 + THIS YEAR -06341 1771 TAD I (7746 /GET JSW -06342 0370 AND (6777 /CLEAR BIT 2 (CAN RESTART!) -06343 7110 CLL RAR -06344 7124 STL RAL /SET BIT 11 (DON'T SAVE FIELD 1) -06345 3771 DCA I (7746 /& PUT IT BACK -06346 4767 JMS I (7607 /WRITE ERROR MESSAGES -06347 4610 4610 / 6 PAGES, FIELD 1 -06350 0000 0 / FROM LOC 10000 -06351 0027 27 / NORMAL SAVE AREA! -06352 7610 SKP CLA -06353 5706 JMP I INIMSG /OK, JUST EXIT -06354 1106 TAD M200 -06355 3766' DCA XERR3 /FAILED, ASSUME WRITE LOCKED -06356 1365 TAD (ERROR / SO NO ERROR MESSAGES ON - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 32-2 - -06357 3764' DCA ERC15 / ERROR OR "SHOW ERRORS" -06360 5706 JMP I INIMSG - - -06364 0545 -06365 4573 -06366 0505 -06367 7607 -06370 6777 -06371 7746 -06372 5032 -06373 0106 -06374 0600 -06375 5031 -06376 7666 -06377 7726 - 6400 PAGE /LITERALS HERE ARE OK! - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 33 - - /INITIALIZATION CODE--RESIDES IN BUFFER AREA AND IS WIPED - / OUT DURING EXECUTION. HANDLES CHAINED AND NORMAL STARTS. - -06400 7610 START, CLA SKP /NORMAL -06401 7240 STA /CHAINED (FROM CCL!) -06402 3021 DCA TEMP -06403 6211 CDF 10 -06404 3777 DCA I (CCBB /ZAP CCB SWITCH -06405 6201 CDF 0 -06406 1120 TAD N200 -06407 3776 DCA I (7745 /RESET START ADDRESS -06410 4775' JMS INIMSG /INIT SCOPE, DATE & ERROR MESSAGES -06411 4774' JMS BATSET /TEST & SET UP FOR BATCH -06412 2021 ISZ TEMP /CHAINED? -06413 5773 JMP I (201 / NO, START IT UP! -06414 6211 CDF 10 -06415 1506 TAD I M200 /YES, 1ST OUTPUT DEVICE? -06416 6201 CDF 0 -06417 0372 AND (17 /(IGNORE LENGTH SPEC) -06420 7450 SNA -06421 5271 JMP STSWIT / NO, LEAVE AS SYS -06422 3101 DCA DEVNO /YES, SET DEVICE NUMBER -06423 1101 TAD DEVNO -06424 4552 CALUSR /NOW DO HANDLER FETCH BY -06425 0001 1 / NUMBER (PAINTING?) -06426 7201 STDEV, DEVHAN+1 /--2 PAGES-- -06427 5351 JMP STERR /ARGGGG! FAILED!!! -06430 1226 TAD STDEV -06431 3100 DCA DEVAD /SET UP HANDLER ENTRY -06432 1106 TAD M200 -06433 3010 DCA DPNT /SET UP FIELD 1 POINTER -06434 4553 TADIDP /GET NAME OF FILE -06435 3025 DCA NAM1 -06436 4553 TADIDP -06437 3026 DCA NAM2 -06440 4553 TADIDP -06441 3027 DCA NAM3 -06442 4553 TADIDP /GET EXTENSION -06443 3030 DCA NAM4 -06444 1025 TAD NAM1 /WAS THERE REALLY A NAME? -06445 7640 SZA CLA -06446 7240 STA / YES, SET NAME SWITCH -06447 3021 DCA TEMP / NO, RESET -06450 6211 CDF 10 -06451 3771 DCA I (XDNAM /CLEAR DEVICE NAME WORDS -06452 3770 DCA I (XDNAM+1 -06453 1410 TAD I DPNT /GET NEXT WORD & TEST FOR ZERO -06454 7640 SZA CLA -06455 5271 JMP STSWIT / SOMETHING NOT RIGHT! -06456 1410 TAD I DPNT /OK, ASSUME CCL CHAIN & SET -06457 3771 DCA I (XDNAM / UP DEVICE NAME -06460 1410 TAD I DPNT -06461 3770 DCA I (XDNAM+1 -06462 1771 TAD I (XDNAM /EMPTY? -06463 7640 SZA CLA - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 33-1 - -06464 5271 JMP STSWIT -06465 1367 TAD (0423 /YES, MUST BE DEFAULT NAME-- -06466 3771 DCA I (XDNAM / "DSK" -06467 1366 TAD (1300 -06470 3770 DCA I (XDNAM+1 -06471 6211 STSWIT, CDF 10 -06472 1765 TAD I (7643 /TEST SWITCHES -06473 0120 AND N200 / "/E"? -06474 3020 DCA ERMODE / 0= LONG, NON-0= SHORT -06475 7001 IAC -06476 0765 AND I (7643 / "/L"? [LOAD] -06477 7650 SNA CLA -06500 5307 JMP STSWO /NO, CHECK NEXT -06501 1030 TAD NAM4 /YES, SET DEFAULT EXTENSION -06502 7450 SNA -06503 1364 TAD (1404 / TO ".LD" -06504 3030 DCA NAM4 -06505 7001 IAC -06506 5330 JMP STSWEX-2 / & GO SET MODE - / -06507 1763 STSWO, TAD I (7644 -06510 0362 AND (1000 / "/O"? [OFFSET] -06511 7650 SNA CLA -06512 5320 JMP STSWS /NO, GO CHECK LAST -06513 1761 TAD I (7646 /YES, GET LOW 12 BITS OF -06514 7041 CIA / "=NNNN" AS OFFSET AND -06515 3073 DCA OFFSET / IT UP -06516 7240 STA -06517 5331 JMP STSWEX-1 / & GO SET MODE - / -06520 1763 STSWS, TAD I (7644 / "/S"? [SAVE] -06521 0360 AND (40 -06522 7650 SNA CLA -06523 5332 JMP STSWEX /NO, WAS NOT ANY THAT COUNT -06524 1030 TAD NAM4 /YES, SET DEFAULT EXTENSION -06525 7450 SNA -06526 1357 TAD (2326 / TO ".SV" -06527 3030 DCA NAM4 -06530 7001 IAC / & SET MODE -06531 3044 DCA MODSW /-1=OFF,0=NOR,+1=SV,+2=LD -06532 6201 STSWEX, CDF 0 -06533 2021 ISZ TEMP /FILE NAME SPECIFIED? -06534 5773 JMP I (201 / NO, JUST START -06535 3046 DCA CRSWT /YES, SET SWITCH TO CR, -06536 6046 STTLS, TLS / START TTY *** BATCH OPER. -06537 4530 JMS I CRLFI / & DO CR/LF -06540 1030 TAD NAM4 /ANY EXTENSION SPECIFIED? -06541 7650 SNA CLA -06542 7240 STA / NO--ALLOW 3 TRIES: SV, LD, NULL -06543 3022 DCA TEMP1 / ELSE ALLOW ONLY 1 TRY -06544 1030 TAD NAM4 /IF NO EXTENSION SET YET, -06545 7450 SNA -06546 1357 TAD (2326 / SET TO START DEFAULTS WITH SV -06547 3030 DCA NAM4 -06550 5756' JMP XFICHN /NOW GO DO FILE LOOKUP - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 33-2 - - / -06551 6046 STERR, TLS /START UP OUTPUT *** BATCH OPER. -06552 5755' JMP ERCY / & GIVE ERROR! - - -06555 1156 -06556 1026 -06557 2326 -06560 0040 -06561 7646 -06562 1000 -06563 7644 -06564 1404 -06565 7643 -06566 1300 -06567 0423 -06570 2465 -06571 2464 -06572 0017 -06573 0201 -06574 6600 -06575 6306 -06576 7745 -06577 6400 - 6600 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 34 - - /INITIALIZATION CODE FOR BATCH OPERATION - -06600 0000 BATSET, 0 -06601 1512 TAD I M1 /TEST BIT 1 OF 07777 FOR "BIP" -06602 7004 RAL / (BATCH-IN-PROGRESS) -06603 7700 SMA CLA -06604 5600 JMP I BATSET / NO, INTERACTIVE MODE -06605 1512 TAD I M1 / YES, GET FIELD BITS OF BATCH -06606 0377 AND (70 / TO GENERATE A "CIF BAT" -06607 1376 TAD (CIF / AND SET UP 3 CALLS: -06610 3307 DCA CBATI / INPUT, -06611 1307 TAD CBATI -06612 3346 DCA CBATO / OUTPUT AND -06613 1307 TAD CBATI -06614 3336 DCA CBATE / ERROR. -06615 1412 BATMOV, TAD I SCANX1 /GET NEXT STORAGE ADDRESS -06616 7450 SNA -06617 5600 JMP I BATSET / 0 = ALL DONE! -06620 3010 DCA DPNT /SET UP POINTER -06621 1412 BATLUP, TAD I SCANX1 /GET A PATCH WORD -06622 7450 SNA -06623 5215 JMP BATMOV / 0 = GROUP END -06624 6201 BATPAT, CDF 0 /CHANGED FOR "TYPEB"!! -06625 3410 DCA I DPNT /PATCH THE WORD -06626 6201 CDF 0 -06627 5221 JMP BATLUP /DO IT AGAIN! - - - /"SCOPE MODE" PATCHES FOR RUBOUT HANDLER. INITIAL- - / IZATION CODE FIRST CHECKS FOR SCOPE AND THEN FOR - / BATCH. THUS, IF BOTH ARE SET, FIRST THINGS WILL BE - / SET UP FOR SCOPE AND THEN THEY WILL BE RESET FOR - / BATCH. THIS SEQUENCE IS REQUIRED! - -06776 6202 -06777 0070 - 4031 SCOPLS, RELOC RUBO -04031* 4303 JMS BTEST /BUFFER NOW EMPTY? -04032* 5207 JMP RENEXT / YES, JUST IGNORE RUBOUT -04033* 7240 STA -04034* 1015 TAD COMIR /NO, BACK UP POINTER -04035* 3015 DCA COMIR -04036* 1015 TAD COMIR /SET UP POINTER FOR TESTING, ALSO -04037* 3016 DCA COMOUT -04040* 4247 JMS RUBO2 /OUTPUT BACKSPACE, SPACE, BACKSPACE -04041* 4563 JMS I GETNI /GET RUBBED OUT CHAR AND TEST -04042* 1035 TAD CHAR -04043* 1104 TAD M240 / FOR A CONTROL CHAR -04044* 7710 SPA CLA -04045* 4247 JMS RUBO2 /YES, ERASE "^" ALSO! -04046* 5207 JMP RENEXT /TRY FOR ANOTHER CHAR - -04047* 7402 RUBO2, HLT /MUST BE NON-ZERO!!! -04050* 4656 JMS I TYPEAI /OUTPUT A BACKSPACE, -04051* 0210 "H-100 /(CTRL-H) - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 34-1 - -04052* 4532 SPACE1 / SPACE, -04053* 4656 JMS I TYPEAI / BACKSPACE SEQUENCE TO -04054* 0210 "H-100 / CLEAR OFF SCREEN CHAR -04055* 5647 JMP I RUBO2 -04056* 5033 TYPEAI, TYPEA -04057* 0000 0 - - 6657 RELOC - - - BATLS, /PATCHES--ADDRESS-1, CODE, 0 WITH EXTRA 0 FOR END. - -06657 4030 RUBO-1 /==== INPUT PATCHES ==== - 4031 RELOC RUBO -04031* 3035 DCA CHAR /SAVE NEW CHAR INPUT -04032* 1035 TAD CHAR /IS THIS A FORM-FEED? -04033* 1252 TAD RM214 -04034* 7450 SNA -04035* 5313 JMP RKEY+1 / YES, JUST IGNORE IT! -04036* 1253 TAD R2 /NO, THEN IS IT A LINE-FEED? -04037* 7650 SNA CLA -04040* 1254 TAD RLAST / YES, WAS LAST A CARRIAGE-RETURN? -04041* 1105 TAD M215 -04042* 7640 SZA CLA -04043* 1035 TAD CHAR /NO TO ONE OR OTHER, USE CHAR. -04044* 3254 DCA RLAST / YES TO BOTH, SET TO 0! -04045* 1254 TAD RLAST /OK, WAS IT A CR-LF PAIR? -04046* 7650 SNA CLA -04047* 5313 JMP RKEY+1 / YES, JUST IGNORE LF! -04050* 5212 JMP REKEY+1 / NO, GO USE THIS CHAR - -04051* 5400 BATINI, 5400 /IN THE BATCH FIELD -04052* 7564 RM214, -214 -04053* 0002 R2, 2 -04054* 0215 RLAST, 215 /!!! CR OF ".R FUTIL" HAS AN LF !! -04055* 0000 0 - -04056* 4112 RKEY+1-1 - 6706 RELOC /TO PUT 'CBATI' ON THIS PAGE - 6707 CBATI= .+1 /REALLY ON "CIF BAT" - 4113 RELOC RKEY+1 -04113* 4534 JMS I CTRLI /CHECK FOR CONTROL KEYS -04114* 6202 CIF /*** CIF BAT -04115* 4651 JMS I BATINI /GET A BATCH CHARACTER -04116* 4573 ERC17, ERROR /!!! EOF ON INPUT !!! -04117* 7000 NOP /FILLER FOR INTERACTIVE CTRL-Q -04120* 7000 NOP -04121* 0000 0 - -04122* 4125 RKEY0-1 - 4126 RELOC RKEY0 -04126* 5313 JMP RKEY+1 /IGNORE RUBOUT UNDER BATCH -04127* 7000 NOP / & RETURN TO CALL+1! -04130* 0000 0 - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 34-2 - -04131* 5134 BCTRLC-1 - 5135 RELOC BCTRLC -05135* 5762 JMP I CTRLCI /CTRL-C, ABORT JOB STREAM! -05136* 0000 0 - - 6724 RELOC /==== OUTPUT PATCHES ==== -06724 0200 201-1 -06725 7000 NOP -06726 0000 0 - -06727 6535 STTLS-1 -06730 7000 NOP /ZAP 3 "TLS"S USED FOR STARTUP -06731 0000 0 - -06732 6550 STERR-1 -06733 7000 NOP -06734 0000 0 - - 6735 RELOC /==== ERROR PATCH ==== - -06735 0514 XERR4-1 - 6736 CBATE= . /REALLY ON "CIF BAT" - 0515 RELOC XERR4 -00515* 6202 CIF /*** CIF BAT -00516* 5522 JMP I N7000 /ABORT TO BATCH FIELD! -00517* 0000 0 - - 6741 RELOC - -06741 6623 BATPAT-1 -06742 6211 CDF 10 /*** NEXT CODE IN FIELD 1 *** -06743 0000 0 - -06744 2404 TYPEB-1 - 6745 RELOC - 6746 CBATO= .+1 /REALLY ON "CIF BAT" - IFDEF TYPEB -02405* 6211 CDF 10 /*** SET UP RETURN D.F. -02406* 6202 CIF /*** CIF BAT -02407* 4610 JMS I .+1 /OUTPUT A CHARACTER TO LOG -02410* 7400 7400 /BATOUT, IN THE BATCH FIELD -02411* 6201 CDF 0 /*** RESET D.F. -02412* 0000 0 - - 6753 RELOC - -06753 0000 0 - 7000 PAGE - - - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 35 - - - 7000 *7000 - /NEW CODE TO HANDLE 128K SUPPORT -07000 0000 ADFLD, 0 /ADJUSTS BANK AND FIELD FOR CCB PRINTING -07001 1023 TAD TEMP2 -07002 0377 AND (76 -07003 7112 CLL RTR -07004 7430 SZL -07005 1376 TAD (20 -07006 7106 CLL RTL -07007 4775 JMS I (FPRNT -07010 5600 JMP I ADFLD -07011 0000 FPRNTX, 0 /ROUTINE TO PRINT BANK BITS -07012 0374 AND (174 /ISOLATE BANK AND FIELD BITS -07013 3226 DCA FLD -07014 1226 TAD FLD -07015 0373 AND (104 /ISOLATE BANK BITS -07016 7112 CLL RTR /SSWITCH THEM AROUND -07017 7010 RAR -07020 7430 SZL -07021 1372 TAD (4 -07022 7112 CLL RTR -07023 4531 DIGIT /PRINT BANK BITS -07024 1226 TAD FLD -07025 5611 JMP I FPRNTX -07026 0000 FLD, 0 - -07172 0004 -07173 0104 -07174 0174 -07175 1363 -07176 0020 -07177 0076 - 0001 FIELD 1 /THE END OF FIELD 0! - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36 - - 0000 *10000 /PUT A POINTER HERE! - -10000 3542 NXTIOT /ADDR OF NEXT FREE SPACE IN TABLE - - - /ERROR MESSAGES AND ADDRESS LIST. THESE ITEMS RESIDE - / UNDER THE USR, REQUIRING THAT THE USR SWAP THEM - / WHEN IT IS USED AND THAT THE PROGRAM KICK OUT THE - / USR WHEN AN ERROR OCCURS IN LONG ERROR MESSAGE MODE - / OR WHEN A "SHOW ERRORS" COMMAND IS GIVEN. IT IS - / TO THE ADVANTAGE OF DECTAPE (AND PROBABLY ALSO - / FLOPPY DISK) SYSTEMS TO USE SHORT ERROR MESSAGE - / MODE TO REDUCE USR SWAPPING IF DOING MANY "FILE" - / OR "SET DEVICE ...DDEV..." COMMANDS. - - 0002 *10002 /MESSAGE ADDRESS AT ERROR CODE NUMBER +1 (AUTO-XR) - - /LIST OF ADDRESSES OF ERROR MESSAGES - -10002 0062 ERMSA -10003 0100 ERMSB -10004 0116 ERMSC -10005 1104 ERMS14 -10006 0125 ERMSD -10007 0137 ERMSE -10010 0227 ERMSG -10011 0242 ERMSH -10012 0256 ERMSI -10013 0276 ERMSK -10014 0267 ERMSJ -10015 0322 ERMSXO -10016 0341 ERMSL -10017 0651 ERMSZ -10020 0404 ERMSO -10021 1051 ERMS11 -10022 0717 ERMS04 -10023 0417 ERMSP -10024 0435 ERMSQ -10025 0456 ERMSR -10026 1030 ERMS09 -10027 1003 ERMS08 -10030 1071 ERMS13 -10031 0501 ERMSS -10032 0523 ERMST -10033 0543 ERMSU -10034 0564 ERMSV -10035 0604 ERMSW -10036 0622 ERMSX -10037 0636 ERMSY -10040 0361 ERMSM -10041 0673 ERMS00 -10042 0671 ERMS01 -10043 0706 ERMS02 -10044 0704 ERMS03 -10045 1037 ERMS10 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-1 - -10046 0150 ERMSF -10047 0171 ERMSGC -10050 0207 ERMSHD -10051 0742 ERMS05 -10052 0764 ERMS07 -10053 1163 ERMS18 -10054 1172 ERMS19 -10055 1201 ERMS20 -10056 1124 ERMS15 -10057 1135 ERMS16 -10060 1151 EMSEND, ERMS17 -10061 1212 ERMS99 - - - /ERROR MESSAGES: - -10062 1114 ERMSA, TEXT &ILLEGAL SINGLE-WORD COMMAND& -10063 1405 -10064 0701 -10065 1440 -10066 2311 -10067 1607 -10070 1405 -10071 5527 -10072 1722 -10073 0440 -10074 0317 -10075 1515 -10076 0116 -10077 0400 - -10100 1114 ERMSB, TEXT &ILLEGAL MULTI-WORD COMMAND& -10101 1405 -10102 0701 -10103 1440 -10104 1525 -10105 1424 -10106 1155 -10107 2717 -10110 2204 -10111 4003 -10112 1715 -10113 1501 -10114 1604 -10115 0000 - -10116 2417 ERMSC, TEXT &TOO MANY ")"S& -10117 1740 -10120 1501 -10121 1631 -10122 4042 -10123 5142 -10124 2300 - -10125 1114 ERMSD, TEXT &ILLEGAL FORMAT WORD& - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-2 - -10126 1405 -10127 0701 -10130 1440 -10131 0617 -10132 2215 -10133 0124 -10134 4027 -10135 1722 -10136 0400 - -10137 0201 ERMSE, TEXT &BAD FORMAT SYNTAX& -10140 0440 -10141 0617 -10142 2215 -10143 0124 -10144 4023 -10145 3116 -10146 2401 -10147 3000 - -10150 1617 ERMSF, TEXT &NO FILE FOR C.C.B./HEADER REQUEST& -10151 4006 -10152 1114 -10153 0540 -10154 0617 -10155 2240 -10156 0356 -10157 0356 -10160 0256 -10161 5710 -10162 0501 -10163 0405 -10164 2240 -10165 2205 -10166 2125 -10167 0523 -10170 2400 - -10171 0201 ERMSGC, TEXT &BAD C.C.B (NOT A SAVE FILE)& -10172 0440 -10173 0356 -10174 0356 -10175 0240 -10176 5016 -10177 1724 -10200 4001 -10201 4023 -10202 0126 -10203 0540 -10204 0611 -10205 1405 -10206 5100 - -10207 0201 ERMSHD, TEXT &BAD HEADER (NOT A LOAD MODULE)& -10210 0440 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-3 - -10211 1005 -10212 0104 -10213 0522 -10214 4050 -10215 1617 -10216 2440 -10217 0140 -10220 1417 -10221 0104 -10222 4015 -10223 1704 -10224 2514 -10225 0551 -10226 0000 - -10227 1114 ERMSG, TEXT &ILLEGAL ITEM TO SHOW& -10230 1405 -10231 0701 -10232 1440 -10233 1124 -10234 0515 -10235 4024 -10236 1740 -10237 2310 -10240 1727 -10241 0000 - -10242 1114 ERMSH, TEXT &ILLEGAL SEARCH MODIFIER& -10243 1405 -10244 0701 -10245 1440 -10246 2305 -10247 0122 -10250 0310 -10251 4015 -10252 1704 -10253 1106 -10254 1105 -10255 2200 - -10256 0201 ERMSI, TEXT &BAD SEARCH SYNTAX& -10257 0440 -10260 2305 -10261 0122 -10262 0310 -10263 4023 -10264 3116 -10265 2401 -10266 3000 - -10267 1114 ERMSJ, TEXT &ILLEGAL MODE& -10270 1405 -10271 0701 -10272 1440 -10273 1517 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-4 - -10274 0405 -10275 0000 - -10276 2305 ERMSK, TEXT &SET OPTION FOLLOWED BY A CR, BAD SYNTAX& -10277 2440 -10300 1720 -10301 2411 -10302 1716 -10303 4006 -10304 1714 -10305 1417 -10306 2705 -10307 0440 -10310 0231 -10311 4001 -10312 4003 -10313 2254 -10314 4002 -10315 0104 -10316 4023 -10317 3116 -10320 2401 -10321 3000 - -10322 1625 ERMSXO, TEXT &NUMBER OR ILLEGAL SET OPTION& -10323 1502 -10324 0522 -10325 4017 -10326 2240 -10327 1114 -10330 1405 -10331 0701 -10332 1440 -10333 2305 -10334 2440 -10335 1720 -10336 2411 -10337 1716 -10340 0000 - -10341 1625 ERMSL, TEXT &NUMBER OR ILLEGAL OUTPUT OPTION& -10342 1502 -10343 0522 -10344 4017 -10345 2240 -10346 1114 -10347 1405 -10350 0701 -10351 1440 -10352 1725 -10353 2420 -10354 2524 -10355 4017 -10356 2024 -10357 1117 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-5 - -10360 1600 - -10361 1114 ERMSM, TEXT &ILLEGAL "." IN NAME (FILE OR DEVICE)& -10362 1405 -10363 0701 -10364 1440 -10365 4256 -10366 4240 -10367 1116 -10370 4016 -10371 0115 -10372 0540 -10373 5006 -10374 1114 -10375 0540 -10376 1722 -10377 4004 -10400 0526 -10401 1103 -10402 0551 -10403 0000 - -10404 1114 ERMSO, TEXT &ILLEGAL MODIFY FORMAT& -10405 1405 -10406 0701 -10407 1440 -10410 1517 -10411 0411 -10412 0631 -10413 4006 -10414 1722 -10415 1501 -10416 2400 - -10417 2022 ERMSP, TEXT &PROGRAM OR HARDWARE PROBLEM& -10420 1707 -10421 2201 -10422 1540 -10423 1722 -10424 4010 -10425 0122 -10426 0427 -10427 0122 -10430 0540 -10431 2022 -10432 1702 -10433 1405 -10434 1500 - -10435 0201 ERMSQ, TEXT &BAD TERMINATOR IN SINGLE ARGUMENT& -10436 0440 -10437 2405 -10440 2215 -10441 1116 -10442 0124 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-6 - -10443 1722 -10444 4011 -10445 1640 -10446 2311 -10447 1607 -10450 1405 -10451 4001 -10452 2207 -10453 2515 -10454 0516 -10455 2400 - -10456 2405 ERMSR, TEXT &TERMINATOR BEFORE LEGAL NUMBER INPUT& -10457 2215 -10460 1116 -10461 0124 -10462 1722 -10463 4002 -10464 0506 -10465 1722 -10466 0540 -10467 1405 -10470 0701 -10471 1440 -10472 1625 -10473 1502 -10474 0522 -10475 4011 -10476 1620 -10477 2524 -10500 0000 - -10501 0201 ERMSS, TEXT &BAD TERMINATOR IN MULTIPLE ARGUMENT& -10502 0440 -10503 2405 -10504 2215 -10505 1116 -10506 0124 -10507 1722 -10510 4011 -10511 1640 -10512 1525 -10513 1424 -10514 1120 -10515 1405 -10516 4001 -10517 2207 -10520 2515 -10521 0516 -10522 2400 - -10523 1114 ERMST, TEXT &ILLEGAL CHARACTER IN EXPRESSION& -10524 1405 -10525 0701 -10526 1440 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-7 - -10527 0310 -10530 0122 -10531 0103 -10532 2405 -10533 2240 -10534 1116 -10535 4005 -10536 3020 -10537 2205 -10540 2323 -10541 1117 -10542 1600 - -10543 1114 ERMSU, TEXT &ILLEGAL USE OF "(" IN EXPRESSION& -10544 1405 -10545 0701 -10546 1440 -10547 2523 -10550 0540 -10551 1706 -10552 4042 -10553 5042 -10554 4011 -10555 1640 -10556 0530 -10557 2022 -10560 0523 -10561 2311 -10562 1716 -10563 0000 - -10564 1114 ERMSV, TEXT &ILLEGAL OPERATOR IN EXPRESSION& -10565 1405 -10566 0701 -10567 1440 -10570 1720 -10571 0522 -10572 0124 -10573 1722 -10574 4011 -10575 1640 -10576 0530 -10577 2022 -10600 0523 -10601 2311 -10602 1716 -10603 0000 - -10604 2417 ERMSW, TEXT &TOO FEW ")"S IN EXPRESSION& -10605 1740 -10606 0605 -10607 2740 -10610 4251 -10611 4223 -10612 4011 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-8 - -10613 1640 -10614 0530 -10615 2022 -10616 0523 -10617 2311 -10620 1716 -10621 0000 - -10622 0411 ERMSX, TEXT &DIVISION BY 0 ATTEMPTED& -10623 2611 -10624 2311 -10625 1716 -10626 4002 -10627 3140 -10630 6040 -10631 0124 -10632 2405 -10633 1520 -10634 2405 -10635 0400 - -10636 2516 ERMSY, TEXT &UNKNOWN HANDLER NAME& -10637 1316 -10640 1727 -10641 1640 -10642 1001 -10643 1604 -10644 1405 -10645 2240 -10646 1601 -10647 1505 -10650 0000 - -10651 1625 ERMSZ, TEXT &NUMBER OR ILLEGAL ERROR OPTION& -10652 1502 -10653 0522 -10654 4017 -10655 2240 -10656 1114 -10657 1405 -10660 0701 -10661 1440 -10662 0522 -10663 2217 -10664 2240 -10665 1720 -10666 2411 -10667 1716 -10670 0000 - -10671 1617 ERMS01, TEXT &NON-& -10672 1655 -10673 0000 - 0673 *.-1 - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-9 - -10673 0601 ERMS00, TEXT &FATAL READ ERROR& -10674 2401 -10675 1440 -10676 2205 -10677 0104 -10700 4005 -10701 2222 -10702 1722 -10703 0000 - -10704 1617 ERMS03, TEXT &NON-& -10705 1655 -10706 0000 - 0706 *.-1 - -10706 0601 ERMS02, TEXT &FATAL WRITE ERROR& -10707 2401 -10710 1440 -10711 2722 -10712 1124 -10713 0540 -10714 0522 -10715 2217 -10716 2200 - -10717 1704 ERMS04, TEXT &ODD START LOC OR COUNT IN OS/8 MODIFY& -10720 0440 -10721 2324 -10722 0122 -10723 2440 -10724 1417 -10725 0340 -10726 1722 -10727 4003 -10730 1725 -10731 1624 -10732 4011 -10733 1640 -10734 1723 -10735 5770 -10736 4015 -10737 1704 -10740 1106 -10741 3100 - -10742 0201 ERMS05, TEXT &BAD ADDRESS/OVERLAY (ODT COMMANDS)& -10743 0440 -10744 0104 -10745 0422 -10746 0523 -10747 2357 -10750 1726 -10751 0522 -10752 1401 -10753 3140 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-10 - -10754 5017 -10755 0424 -10756 4003 -10757 1715 -10760 1501 -10761 1604 -10762 2351 -10763 0000 - - /ERMS06, - -10764 0201 ERMS07, TEXT &BAD ADDRESS/OVERLAY (MODIFY)& -10765 0440 -10766 0104 -10767 0422 -10770 0523 -10771 2357 -10772 1726 -10773 0522 -10774 1401 -10775 3140 -10776 5015 -10777 1704 -11000 1106 -11001 3151 -11002 0000 - -11003 0122 ERMS08, TEXT &ARGUMENT EXPRESSION NOT TERMINATED BY ")"& -11004 0725 -11005 1505 -11006 1624 -11007 4005 -11010 3020 -11011 2205 -11012 2323 -11013 1117 -11014 1640 -11015 1617 -11016 2440 -11017 2405 -11020 2215 -11021 1116 -11022 0124 -11023 0504 -11024 4002 -11025 3140 -11026 4251 -11027 4200 - -11030 1114 ERMS09, TEXT &ILLEGAL DIGIT& -11031 1405 -11032 0701 -11033 1440 -11034 0411 -11035 0711 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-11 - -11036 2400 - -11037 0425 ERMS10, TEXT &DUMP HANDLER ERROR& -11040 1520 -11041 4010 -11042 0116 -11043 0414 -11044 0522 -11045 4005 -11046 2222 -11047 1722 -11050 0000 - -11051 1625 ERMS11, TEXT &NUMBER OR ILLEGAL DMODE OPTION& -11052 1502 -11053 0522 -11054 4017 -11055 2240 -11056 1114 -11057 1405 -11060 0701 -11061 1440 -11062 0415 -11063 1704 -11064 0540 -11065 1720 -11066 2411 -11067 1716 -11070 0000 - - /ERMS12, - -11071 1114 ERMS13, TEXT &ILLEGAL USE OF ' OR "& -11072 1405 -11073 0701 -11074 1440 -11075 2523 -11076 0540 -11077 1706 -11100 4047 -11101 4017 -11102 2240 -11103 4200 - -11104 1501 ERMS14, TEXT &MAPPED MODE--USE LIST, NOT DUMP& -11105 2020 -11106 0504 -11107 4015 -11110 1704 -11111 0555 -11112 5525 -11113 2305 -11114 4014 -11115 1123 -11116 2454 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-12 - -11117 4016 -11120 1724 -11121 4004 -11122 2515 -11123 2000 - -11124 1617 ERMS15, TEXT &NO ERROR MESSAGES& -11125 4005 -11126 2222 -11127 1722 -11130 4015 -11131 0523 -11132 2301 -11133 0705 -11134 2300 - -11135 1116 ERMS16, TEXT &INPUT ERROR ON MESSAGES& -11136 2025 -11137 2440 -11140 0522 -11141 2217 -11142 2240 -11143 1716 -11144 4015 -11145 0523 -11146 2301 -11147 0705 -11150 2300 - -11151 0517 ERMS17, TEXT &EOF ON BATCH INPUT& -11152 0640 -11153 1716 -11154 4002 -11155 0124 -11156 0310 -11157 4011 -11160 1620 -11161 2524 -11162 0000 - -11163 0516 ERMS18, TEXT &ENTER FAILED& -11164 2405 -11165 2240 -11166 0601 -11167 1114 -11170 0504 -11171 0000 - -11172 0314 ERMS19, TEXT &CLOSE FAILED& -11173 1723 -11174 0540 -11175 0601 -11176 1114 -11177 0504 -11200 0000 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 36-13 - - -11201 0425 ERMS20, TEXT &DUMP FILE OVERRUN& -11202 1520 -11203 4006 -11204 1114 -11205 0540 -11206 1726 -11207 0522 -11210 2225 -11211 1600 - -11212 0405 ERMS99, TEXT &DEBUG& -11213 0225 -11214 0700 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 37 - - 2000 *12000 /BEGIN ABOVE THE USR AREA - - /GCCB & GHDR--ROUTINES TO READ IN THE FIRST BLOCK OF THE - / LAST FILE SPECIFIED BY THE LAST "FILE" COMMAND, ASSUM- - / ING THAT IT WAS A SAVE FILE OR LOAD MODULE, AND DO THE - / FEW CHECKS THAT ARE AVAILABLE TO TEST FOR A CCB (CORE- - / CONTROL-BLOCK) OR HEADER BLOCK BEFORE LETTING THE DATA - / BE USED FOR THE APPROPRIATE PURPOSE. - -12000 0000 GCCB, 0 /GET CORE-CONTROL-BLOCK -12001 4306 JMS CCBHDR /DO COMMON TEST & READ-IN -12002 7104 CLL RAL /ADJUSTS FOR 128K INDICATOR BIT -12003 7130 STL RAR -12004 7700 SMA CLA /1ST WORD (-# SEGS) NEG? -12005 5222 JMP GCCERR / NO, CAN'T BE CCB -12006 1777 TAD I (CCBB+3 /GET JOB STATUS WORD -12007 0376 AND (200 /OVERLAY BIT SET (LINK)? -12010 7640 SZA CLA / 0 = NO -12011 1375 TAD (CCBB+140-1 / 1 = YES, START ADDR-1 -12012 6201 CDF 0 -12013 3774 DCA I (OVLFLG /NO = 0; YES = ADDR-1 -12014 6211 CDF 10 -12015 1773 TAD I (CCBB+1 /2ND WORD A "CDF CIF X0"? -12016 0372 AND (7603 -12017 7041 CIA -12020 1246 TAD GCCCDF -12021 7640 SZA CLA -12022 4771' GCCERR, JMS ERROR1 /LOOKS BAD, JUST EXIT NOW! -12023 2341 ISZ GETSWX /LOOKS OK, 1ST TIME SINCE READ? -12024 5242 JMP GCCB2 /NO, DON'T CHANGE THINGS AGAIN -12025 1370 TAD (CCBB+140+3 /YES, POINT TO LENGTH WORDS -12026 3250 GCCB1, DCA GHDR / TO CHANGE PAGES TO BLOCKS -12027 1250 TAD GHDR /GET A WORD - PAGES-V7C -12030 1367 TAD (-6603 /V7C -12031 7650 SNA CLA /V7C -12032 5242 JMP GCCB2 / 0 = DONE -12033 1650 TAD I GHDR /V7C -12034 7001 IAC /ROUND DOWN IN 2 STEPS FOR PDP-8 -12035 7110 CLL RAR -12036 3650 DCA I GHDR /STORE A WORD - BLOCKS -12037 1250 TAD GHDR /UPDATE POINTER TO NEXT -12040 1366 TAD (4 -12041 5226 JMP GCCB1 - / -12042 3341 GCCB2, DCA GETSWX /BE SURE SWITCH STAYS CLEAR -12043 1727 TAD I SEGNI /GET -# SEGMENTS -12044 7104 CLL RAL -12045 7130 STL RAR /ADJUSTS FOR 128K INDICATOR BIT -12046 6203 GCCCDF, CDF CIF 0 -12047 5600 JMP I GCCB /OK, RETURN VALUE - -12050 0000 GHDR, 0 /GET HEADER BLOCK (FORTRAN IV) -12051 1365 TAD (3 /TO SET UP CCBB+6 -12052 4306 JMS CCBHDR /DO COMMON TEST & READ-IN -12053 1364 TAD (-2 /1ST WORD MUST BE EXACTLY 2 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 37-1 - -12054 7640 SZA CLA -12055 5301 JMP HDRERR / NO, CAN'T BE A HEADER -12056 2341 ISZ GETSWX /1ST TIME THRU SINCE READ? -12057 5302 JMP GHDR1 / NO, DON'T CHANGE ANYTHING -12060 3763 DCA I (CCBB+47 /YES, BE SURE THESE WORDS -12061 3762 DCA I (CCBB+50 / ARE 0 FOR USERS -12062 1773 TAD I (CCBB+1 /GET START FIELD WORD -12063 7450 SNA -12064 5301 JMP HDRERR / SHOULD BE 1 THRU 7 -12065 7106 CLL RTL /LOOKS OK, MOVE FIELD TO BITS -12066 7004 RAL / 6-8 TO HELP "SHOW HEAD" -12067 3773 DCA I (CCBB+1 -12070 1773 TAD I (CCBB+1 /ARE THESE ONLY BITS SET? -12071 0361 AND (7707 -12072 7640 SZA CLA -12073 5301 JMP HDRERR / NO, SOMETHING MUST BE BAD -12074 1777 TAD I (CCBB+3 /OK, TEST FIELD OF NEXT FREE -12075 7450 SNA -12076 5301 JMP HDRERR / SHOULD BE 1 THRU 7 -12077 0360 AND (7770 -12100 7640 SZA CLA -12101 4771' HDRERR, JMS ERROR1 -12102 3341 GHDR1, DCA GETSWX /MAKE SURE THIS IS 0 -12103 7000 NOP /AC NON-ZERO FOR OK-V7C -12104 6203 CDF CIF 0 -12105 5650 JMP I GHDR /OK, BACK TO USER - -12106 0000 CCBHDR, 0 -12107 1377 TAD (CCBB+3 /CCBB+6 FOR GHDR -12110 6201 CDF 0 -12111 3757 DCA I (GETPNT /SET UP POINTER FOR 'GET' -12112 1756 TAD I (DEVAD /GET ADDR OF DEVICE -12113 3340 DCA DEVADX / HANDLER & SAVE HERE -12114 1755 TAD I (RBLK1 /GET START BLOCK NUMBER -12115 7450 SNA -12116 4771' ERCF, JMS ERROR1 / NO FILE!!! GIVE ERROR -12117 6211 CDF 10 -12120 3330 DCA GCCBLK /OK, SET UP 1ST BLOCK -12121 1727 TAD I SEGNI /IS SOMETHING IN MEMORY? -12122 7440 SZA -12123 5706 JMP I CCBHDR / YES, RETURN 1ST WORD -12124 6202 CIF 0 -12125 4740 JMS I DEVADX /NO, READ 1ST BLOCK OF FILE -12126 0110 0110 /READ; 1 PAGE; FIELD 1 -12127 6400 SEGNI, CCBB /BUFFER IS HERE -12130 0000 GCCBLK, 0 /BLOCK NUMBER -12131 5336 JMP RDERX /...BAD NEWS... -12132 7240 STA -12133 3341 DCA GETSWX /OK, SET "JUST READ" SWITCH -12134 1727 TAD I SEGNI /AND GET 1ST WORD -12135 5706 JMP I CCBHDR - / -12136 6203 RDERX, CDF CIF 0 /RETURN TO FIELD 0 -12137 5754 JMP I (RERROR / FOR READ ERROR - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 37-2 - -12140 0000 DEVADX, 0 -12141 0000 GETSWX, 0 - - -12142 4040 MSMOD, TEXT " MOD" -12143 1517 -12144 0400 - -12145 4002 MSBAD, TEXT " BAD BLOCK" -12146 0104 -12147 4002 -12150 1417 -12151 0313 -12152 0000 - - -12154 2213 -12155 0077 -12156 0100 -12157 0014 -12160 7770 -12161 7707 -12162 6450 -12163 6447 -12164 7776 -12165 0003 -12166 0004 -12167 1175 -12170 6543 -12171 2433 -12172 7603 -12173 6401 -12174 0000 -12175 6537 -12176 0200 -12177 6403 - 2200 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 38 - - /CONTINUATION OF OUTPUT COMMANDS AND ROUTINES FROM FIELD 0 - - /CONTINUATION OF 'SET' 'DDEV' HANDLER - -12200 3263 XDDEV1, DCA DDEVAD /SET UP HANDLER ADDRESS -12201 1777 TAD I (GDEV2 -12202 3264 DCA DDEVNO / AND DEVICE NUMBER -12203 6211 CDF 10 -12204 1264 TAD DDEVNO /LOOK AT DCW FOR SPECIFIED -12205 1376 TAD (7760-1 / DEVICE TO SEE IF FILE -12206 3265 DCA DDCWPT / STRUCTURED. -12207 1665 TAD I DDCWPT /BIT 0 = 1 FOR FILES -12210 7700 SMA CLA -12211 1375 TAD (212 / NO, LINE-AT-A-TIME -12212 3774' DCA DDEVS / YES, BLOCK-AT-A-TIME -12213 1340 TAD DMPADR /OK, INITIALIZE OUTPUT POINTER -12214 3353 DCA DMPPTR -12215 3253 DCA XOSIZ / AND ZERO BLOCK COUNTER -12216 3266 DCA DNAM / AND CLEAR ANY FILE NAME -12217 7001 IAC -12220 3341 DCA DMPBLK / AND SET BLOCK NUMBER TO 1 -12221 5773' JMP XDDEV2 /LAST, GO SET UP NAME FOR OUTPUT - - - /CONTINUATION OF EXECUTION OF 'OPEN' COMMAND - -12222 1372 XOPEN1, TAD (NAM1-1 /SET UP POINTER TO FIELD 0 FILE -12223 3010 DCA DPNT / NAME (NOTE: XR IN FIELD 1!!!) -12224 1410 TAD I DPNT /MOVE THE FILE NAME UP HERE -12225 3266 DCA DNAM -12226 1410 TAD I DPNT -12227 3267 DCA DNAM+1 -12230 1410 TAD I DPNT -12231 3270 DCA DNAM+2 -12232 1410 TAD I DPNT /GET THE EXTENSION PART -12233 2771 ISZ I (TEMP1 / WAS ANYTHING REALLY SPECIFIED? -12234 5237 JMP XOPEN2 -12235 7200 CLA -12236 1370 TAD (0425 / NO, DEFAULT TO ".DU" -12237 3271 XOPEN2, DCA DNAM+3 -12240 1310 TAD XCLNAM /SET UP POINTER TO NAME FOR USR -12241 3252 DCA XOBLK -12242 6211 CDF 10 /SET UP RETURN FIELD -12243 1665 TAD I DDCWPT /CLEAR ANY OPEN FILE ON -12244 0367 AND (7770 / THIS DEVICE SO "OPEN" -12245 3665 DCA I DDCWPT / CAN BE DONE WHENEVER! -12246 6202 CIF 0 /SET UP SUBROUTINE FIELD -12247 1264 TAD DDEVNO /GET DUMP DEVICE NUMBER -12250 4766' JMS USEUSR / AND GO GET USR & CALL IT. -12251 0003 3 /ENTER -12252 0000 XOBLK, 0 /NAME POINTER, BECOMES START BLK -12253 0000 XOSIZ, 0 / BECOMES -# BLOCKS CAN USE -12254 4765' ERC18, JMS ERROR1 /THE ENTER FAILED! -12255 1252 TAD XOBLK /OK! SET UP FILE START BLOCK -12256 3341 DCA DMPBLK - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 38-1 - -12257 1340 TAD DMPADR /INITIALIZE POINTER -12260 3353 DCA DMPPTR -12261 6203 XOCEX, CDF CIF 0 -12262 5764' JMP MAIN1 /TRY NEXT COMMAND - -12263 7607 DDEVAD, 7607 /INIT ADDRESS TO "SYS:" (SEE ABOVE) -12264 0001 DDEVNO, 1 /INIT THIS TO "SYS:" ALSO. -12265 7760 DDCWPT, 7760 / THIS ALSO - -12266 0000 DNAM, 0 /DUMP FILE NAME, INIT TO NULL -12267 0000 0 -12270 0000 0 -12271 0000 0 /(EXTENSION HERE) - - - /CONTINUATION OF EXECUTION OF 'CLOSE' COMMAND - -12272 1266 XCLOS1, TAD DNAM /IS ANY FILE OPEN? -12273 7650 SNA CLA -12274 5261 JMP XOCEX / NO, IGNORE COMMAND -12275 1277 TAD XCTLZ / YES, OUTPUT A CTRL-Z -12276 4315 JMS DMPOUT / AND FILL TO END -12277 0232 XCTLZ, "Z-100 -12300 1252 TAD XOBLK /OK, CALCULATE FILE SIZE -12301 7041 CIA -12302 1341 TAD DMPBLK /= NEXT - START -12303 3311 DCA XCLSIZ /= FILE SIZE IN BLOCKS -12304 1264 TAD DDEVNO /GET DUMP DEVICE NUMBER -12305 6202 CIF 0 -12306 4766' JMS USEUSR /GET USR AND CALL IT -12307 0004 4 /CLOSE -12310 2266 XCLNAM, DNAM /POINTER TO FILE NAME -12311 0000 XCLSIZ, 0 /SIZE OF NEW FILE -12312 4765' ERC19, JMS ERROR1 /OH NO! CLOSE FAILED! -12313 3266 DCA DNAM /OK, ZAP KNOWLEDGE OF FILE -12314 5261 JMP XOCEX - - -12315 0000 DMPOUT, 0 /DUMP FILE CHARACTER OUTPUT ROUTINE -12316 3352 DCA DMPCHR /SAVE THE CHARACTER -12317 1352 TAD DMPCHR /PUT IT INTO FILE BUFFER -12320 6211 CDF 10 /(MUST BE SURE!) -12321 3753 DMPNUL, DCA I DMPPTR /INSERT AN 8 BIT CHAR -12322 2353 ISZ DMPPTR -12323 1353 TAD DMPPTR /NOW AT END OF BUFFER? -12324 1363 TAD (-DMPBUF-400 -12325 7650 SNA CLA -12326 5335 JMP DMPIT / YES, DUMP BUFFER NOW -12327 1352 TAD DMPCHR /NO, FILL FOLLOWING THIS CHAR? -12330 7041 CIA -12331 1715 TAD I DMPOUT /(THE TEST CHAR @ CALL+1) -12332 7650 SNA CLA -12333 5321 JMP DMPNUL / YES, FILL WITH NULLS! -12334 5715 JMP I DMPOUT / NO, EXECUTE FILL CHAR - / - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 38-2 - -12335 6202 DMPIT, CIF 0 -12336 4663 JMS I DDEVAD /CALL DUMP FILE HANDLER -12337 4210 4210 /WRITE, 2 PAGES, FIELD 1 -12340 6600 DMPADR, DMPBUF -12341 0001 DMPBLK, 1 /BLOCK NUMBER -12342 4765' ERC10, JMS ERROR1 /ERROR ON OUTPUT FILE! -12343 1340 TAD DMPADR /NOW RESET OUTPUT POINTER -12344 3353 DCA DMPPTR -12345 2341 ISZ DMPBLK /INCREMENT BLOCK NUMBER -12346 2253 ISZ XOSIZ /ANY MORE SPACE LEFT? -12347 5715 JMP I DMPOUT / YES, EXIT NOW -12350 3266 DCA DNAM / NO! ZAP DUMP FILE -12351 4765' ERC20, JMS ERROR1 / AND DIE! -12352 0000 DMPCHR, 0 -12353 0000 DMPPTR, 0 /CHARACTER OUTPUT POINTER - - -12363 0600 -12364 0204 -12365 2433 -12366 0520 -12367 7770 -12370 0425 -12371 0022 -12372 0024 -12373 2441 -12374 2430 -12375 0212 -12376 7757 -12377 1154 - 2400 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 39 - - /CONTINUATION OF ROUTINE TO OUTPUT A CHAR TO A DEVICE - -12400 1777 TYPE1, TAD I (DMODE /TTY= NONE, PART&-DSWIT, ALL -12401 0776 AND I (DSWIT / SO TEST FOR PART&DSWIT -12402 7640 SZA CLA -12403 5212 JMP TYPE2 /NO OUTPUT TO TTY -12404 1775 TAD I (RTL6 /GET CHARACTER TO OUTPUT -12405 7000 TYPEB, NOP /*** CDF 10 /*** BATCH -12406 6041 TSF /*** CIF BAT /*** CHANGES -12407 5206 JMP .-1 /*** JMS I .+1 /*** LOG -12410 6046 TLS /*** 7400 /*** OUTPUT -12411 7200 CLA /*** CDF 0 -12412 7330 TYPE2, STL CLA RAR /=4000 (SET AC BIT 0 FOR TEST) -12413 1776 TAD I (DSWIT /=4000 OR 4001 (DSWIT=1) -12414 0777 AND I (DMODE /FILE= PART&DSWIT OR ALL -12415 7650 SNA CLA -12416 5231 JMP TYPE3 / OUTPUT TO TTY ONLY -12417 1230 TAD DDEVS /FILE STRUCTURED OUTPUT? -12420 6211 CDF 10 -12421 7450 SNA -12422 1774 TAD I (DNAM / YES, FILE OPEN? -12423 6201 CDF 0 -12424 7650 SNA CLA -12425 5231 JMP TYPE3 / NO TO EITHER -12426 1775 TAD I (RTL6 /OK, GET CHARACTER TO OUTPUT -12427 4773' JMS DMPOUT /OUTPUT IT & TEST FOR END -12430 0000 DDEVS, 0 /TEST: 0=FILE, 212= NON-FILE -12431 6203 TYPE3, CDF CIF 0 -12432 5772' JMP TYPEX /BACK AND OUT - - -12433 0000 ERROR1, 0 /FIELD 1 ERROR ROUTINE HEAD -12434 7200 CLA /CLEAR POSSIBLE JUNK IN AC -12435 1233 TAD ERROR1 /MOVE RETURN ADDR TO FIELD 0 -12436 6203 CDF CIF 0 -12437 3771 DCA I (XERROR -12440 5770 JMP I (XERROR+1 - - -12441 6201 XDDEV2, CDF 0 /NAME IS OVER THERE -12442 1767 TAD I (NAM1 /MOVE DEVICE NAME INTO STRING -12443 3254 DCA XDDNAM / IN THIS FIELD FOR "SHOW DDEV" -12444 1766 TAD I (NAM2 -12445 3255 DCA XDDNAM+1 -12446 6203 CDF CIF 0 -12447 5765' JMP XSETN /BACK TO 'SET' - -12450 0004 MSDDEV, TEXT "@DDEV = SYS@" -12451 0405 -12452 2640 -12453 7540 -12454 2331 -12455 2300 -12456 0000 - 2454 XDDNAM= .-3 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 39-1 - - -12457 0004 MSDEV, TEXT "@DEVICE = SYS@" -12460 0526 -12461 1103 -12462 0540 -12463 7540 -12464 2331 -12465 2300 -12466 0000 - - 2464 XDNAM= .-3 /ADDR OF 1ST WORD OF DEVICE NAME - - /CONTINUATION OF CODE FROM FIELD 0 - -12467 3264 XDEVM, DCA XDNAM /SET 4 DEVICE NAME CHARS IN -12470 1766 TAD I (NAM2 / OUTPUT MESSAGE -12471 3265 DCA XDNAM+1 -12472 6211 CDF 10 -12473 3764 DCA I (CCBB /NO C.C.B. OR HEADER PRESENT -12474 6203 CDF CIF 0 -12475 7240 STA -12476 3763 DCA I (RBLK /RESET BLOCK NUMBER -12477 5765' JMP XSETN /GO DO NEXT OPTION - - -12500 4005 MSERR, TEXT " ERROR CODES: FUTIL " -12501 2222 -12502 1722 -12503 4003 -12504 1704 -12505 0523 -12506 7240 -12507 0625 -12510 2411 -12511 1440 -12512 0000 - 2512 *.-1 - - /VERSION NUMBER MESSAGE--THE FOLLOWING CODE INSERTS THE - / VERSION NUMBER AND PATCH LEVEL SET NEAR THE START OF - / THE SOURCE INTO THE VERSION MESSAGE. - -12512 2605 MSVER, TEXT "VERSION = ???" /VERS = 2 DIGITS, PATCH = 1 -12513 2223 -12514 1117 -12515 1640 -12516 7540 -12517 7777 -12520 7700 - 2517 *.-2 - 0000 VERTEN= VERSION%12 /TENS DIGIT - 0010 VERONE= -VERTEN^12+VERSION /ONES DIGIT -12517 6070 VERTEN^100+VERONE+6060 /INSERT TWO DIGITS -12520 0100 PATCH^100 /INSERT PATCH + NULL TERM - - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 39-2 - - /ALPHA MONTH NAMES PLUS DUMMIES FOR PDATE SUBROUTINE - -12521 4060 MONTHS, TEXT " 00@JAN@FEB@MAR@APR@MAY@JUN@JUL" -12522 6000 -12523 1201 -12524 1600 -12525 0605 -12526 0200 -12527 1501 -12530 2200 -12531 0120 -12532 2200 -12533 1501 -12534 3100 -12535 1225 -12536 1600 -12537 1225 -12540 1400 -12541 0125 TEXT "AUG@SEP@OCT@NOV@DEC@ 13@ 14@ 15" -12542 0700 -12543 2305 -12544 2000 -12545 1703 -12546 2400 -12547 1617 -12550 2600 -12551 0405 -12552 0300 -12553 4061 -12554 6300 -12555 4061 -12556 6400 -12557 4061 -12560 6500 - - -12563 3057 -12564 6400 -12565 1600 -12566 0026 -12567 0025 -12570 0455 -12571 0454 -12572 5042 -12573 2315 -12574 2266 -12575 3762 -12576 0052 -12577 0053 - 2600 PAGE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 40 - - /SYMBOLICS FOR PDP-8 INSTRUCTIONS: -12600 0116 INSLST, TEXT "AND TAD ISZ DCA JMS JMP IOT NOP " -12601 0440 -12602 2401 -12603 0440 -12604 1123 -12605 3240 -12606 0403 -12607 0140 -12610 1215 -12611 2340 -12612 1215 -12613 2040 -12614 1117 -12615 2440 -12616 1617 -12617 2040 -12620 0000 - 2620 *.-1 - - / GROUP 1 MICRO-INSTS.: -12620 0314 OP1LST, TEXT "CLL CMA CML IAC BSW RAL RTL RAR RTR " -12621 1440 -12622 0315 -12623 0140 -12624 0315 -12625 1440 -12626 1101 -12627 0340 -12630 0223 -12631 2740 -12632 2201 -12633 1440 -12634 2224 -12635 1440 -12636 2201 -12637 2240 -12640 2224 -12641 2240 -12642 0000 - 2642 *.-1 - - - / GROUP 2 MICRO-INST'S: -12642 2315 OP2LST, TEXT "SMA SZA SNL SKP SPA SNA SZL OSR HLT " -12643 0140 -12644 2332 -12645 0140 -12646 2316 -12647 1440 -12650 2313 -12651 2040 -12652 2320 -12653 0140 -12654 2316 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 40-1 - -12655 0140 -12656 2332 -12657 1440 -12660 1723 -12661 2240 -12662 1014 -12663 2440 -12664 0000 - 2664 *.-1 - - / EAE MICRO-INST'S: -12664 1521 EAELST, TEXT "MQA MQL SCL MUY DVI NMI SHL ASR LSR SCA " -12665 0140 -12666 1521 -12667 1440 -12670 2303 -12671 1440 -12672 1525 -12673 3140 -12674 0426 -12675 1140 -12676 1615 -12677 1140 -12700 2310 -12701 1440 -12702 0123 -12703 2240 -12704 1423 -12705 2240 -12706 2303 -12707 0140 -12710 0000 - 2710 *.-1 -12710 0401 TEXT "DAD DST SWBADPSZDPICDCM SAM " -12711 0440 -12712 0423 -12713 2440 -12714 2327 -12715 0201 -12716 0420 -12717 2332 -12720 0420 -12721 1103 -12722 0403 -12723 1540 -12724 2301 -12725 1540 -12726 0000 - 2726 *.-1 - -12726 0314 CLANAM, 0314 /"CLA " -12727 0140 0140 - -12730 1720 OPRMES, 1720 /"OPR " -12731 2240 2240 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 41 - - / IOT INSTRUCTIONS: - -12732 6000 IOTTAB, 6000 -12733 2313 TEXT "SKON" -12734 1716 -12735 0000 -12736 6001 6001 -12737 1117 TEXT "ION@" -12740 1600 -12741 0000 -12742 6002 6002 -12743 1117 TEXT "IOF@" -12744 0600 -12745 0000 -12746 6003 6003 -12747 2322 TEXT "SRQ@" -12750 2100 -12751 0000 -12752 6004 6004 -12753 0724 TEXT "GTF@" -12754 0600 -12755 0000 -12756 6005 6005 -12757 2224 TEXT "RTF@" -12760 0600 -12761 0000 -12762 6006 6006 -12763 2307 TEXT "SGT@" -12764 2400 -12765 0000 -12766 6007 6007 -12767 0301 TEXT "CAF@" -12770 0600 -12771 0000 -12772 6010 6010 -12773 2220 TEXT "RPE@" -12774 0500 -12775 0000 -12776 6011 6011 -12777 2223 TEXT "RSF@" -13000 0600 -13001 0000 -13002 6012 6012 -13003 2222 TEXT "RRB@" -13004 0200 -13005 0000 -13006 6014 6014 -13007 2203 TEXT "RCF@" -13010 0600 -13011 0000 -13012 6016 6016 -13013 2203 TEXT "RCC@" -13014 0300 -13015 0000 -13016 6020 6020 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 41-1 - -13017 2003 TEXT "PCE@" -13020 0500 -13021 0000 -13022 6021 6021 -13023 2023 TEXT "PSF@" -13024 0600 -13025 0000 -13026 6022 6022 -13027 2003 TEXT "PCF@" -13030 0600 -13031 0000 -13032 6024 6024 -13033 2020 TEXT "PPC@" -13034 0300 -13035 0000 -13036 6026 6026 -13037 2014 TEXT "PLS@" -13040 2300 -13041 0000 -13042 6030 6030 -13043 1303 TEXT "KCF@" -13044 0600 -13045 0000 -13046 6031 6031 -13047 1323 TEXT "KSF@" -13050 0600 -13051 0000 -13052 6032 6032 -13053 1303 TEXT "KCC@" -13054 0300 -13055 0000 -13056 6034 6034 -13057 1322 TEXT "KRS@" -13060 2300 -13061 0000 -13062 6035 6035 -13063 1311 TEXT "KIE@" -13064 0500 -13065 0000 -13066 6036 6036 -13067 1322 TEXT "KRB@" -13070 0200 -13071 0000 -13072 6040 6040 -13073 2406 TEXT "TFL@" -13074 1400 -13075 0000 -13076 6041 6041 -13077 2423 TEXT "TSF@" -13100 0600 -13101 0000 -13102 6042 6042 -13103 2403 TEXT "TCF@" -13104 0600 -13105 0000 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 41-2 - -13106 6044 6044 -13107 2420 TEXT "TPC@" -13110 0300 -13111 0000 -13112 6045 6045 -13113 2423 TEXT "TSK@" -13114 1300 -13115 0000 -13116 6046 6046 -13117 2414 TEXT "TLS@" -13120 2300 -13121 0000 -13122 6100 6100 -13123 0420 TEXT "DPI@" -13124 1100 -13125 0000 -13126 6101 6101 -13127 2315 TEXT "SMP@" -13130 2000 -13131 0000 -13132 6102 6102 -13133 2320 TEXT "SPL@" -13134 1400 -13135 0000 -13136 6103 6103 -13137 0520 TEXT "EPI@" -13140 1100 -13141 0000 -13142 6104 6104 -13143 0315 TEXT "CMP@" -13144 2000 -13145 0000 -13146 6105 6105 -13147 2354 TEXT "S,CMP" -13150 0315 -13151 2000 -13152 6106 6106 -13153 0305 TEXT "CEP@" -13154 2000 -13155 0000 -13156 6107 6107 -13157 2320 TEXT "SPO@" -13160 1700 -13161 0000 -13162 6110 6110 -13163 2203 TEXT "RCTV" -13164 2426 -13165 0000 -13166 6111 6111 -13167 2203 TEXT "RCRL" -13170 2214 -13171 0000 -13172 6112 6112 -13173 2203 TEXT "RCRH" -13174 2210 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 41-3 - -13175 0000 -13176 6113 6113 -13177 2203 TEXT "RCCV" -13200 0326 -13201 0000 -13202 6114 6114 -13203 2203 TEXT "RCGB" -13204 0702 -13205 0000 -13206 6115 6115 -13207 2203 TEXT "RCLC" -13210 1403 -13211 0000 -13212 6116 6116 -13213 2203 TEXT "RCCB" -13214 0302 -13215 0000 -13216 6130 6130 -13217 0314 TEXT "CLZE" -13220 3205 -13221 0000 -13222 6131 6131 -13223 0314 TEXT "CLSK" -13224 2313 -13225 0000 -13226 6132 6132 -13227 0314 TEXT "CLOE" -13230 1705 -13231 0000 -13232 6133 6133 -13233 0314 TEXT "CLAB" -13234 0102 -13235 0000 -13236 6134 6134 -13237 0314 TEXT "CLEN" -13240 0516 -13241 0000 -13242 6135 6135 -13243 0314 TEXT "CLSA" -13244 2301 -13245 0000 -13246 6136 6136 -13247 0314 TEXT "CLBA" -13250 0201 -13251 0000 -13252 6137 6137 -13253 0314 TEXT "CLCA" -13254 0301 -13255 0000 -13256 6201 6201 -13257 0304 TEXT "CDF 00" -13260 0640 -13261 6060 -13262 0000 - 3262 *.-1 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 41-4 - -13262 6211 6211 -13263 0304 TEXT "CDF 10" -13264 0640 -13265 6160 -13266 0000 - 3266 *.-1 -13266 6221 6221 -13267 0304 TEXT "CDF 20" -13270 0640 -13271 6260 -13272 0000 - 3272 *.-1 -13272 6231 6231 -13273 0304 TEXT "CDF 30" -13274 0640 -13275 6360 -13276 0000 - 3276 *.-1 -13276 6241 6241 -13277 0304 TEXT "CDF 40" -13300 0640 -13301 6460 -13302 0000 - 3302 *.-1 -13302 6251 6251 -13303 0304 TEXT "CDF 50" -13304 0640 -13305 6560 -13306 0000 - 3306 *.-1 -13306 6261 6261 -13307 0304 TEXT "CDF 60" -13310 0640 -13311 6660 -13312 0000 - 3312 *.-1 -13312 6271 6271 -13313 0304 TEXT "CDF 70" -13314 0640 -13315 6760 -13316 0000 - 3316 *.-1 -13316 6202 6202 -13317 0311 TEXT "CIF 00" -13320 0640 -13321 6060 -13322 0000 - 3322 *.-1 -13322 6212 6212 -13323 0311 TEXT "CIF 10" -13324 0640 -13325 6160 -13326 0000 - 3326 *.-1 -13326 6222 6222 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 41-5 - -13327 0311 TEXT "CIF 20" -13330 0640 -13331 6260 -13332 0000 - 3332 *.-1 -13332 6232 6232 -13333 0311 TEXT "CIF 30" -13334 0640 -13335 6360 -13336 0000 - 3336 *.-1 -13336 6242 6242 -13337 0311 TEXT "CIF 40" -13340 0640 -13341 6460 -13342 0000 - 3342 *.-1 -13342 6252 6252 -13343 0311 TEXT "CIF 50" -13344 0640 -13345 6560 -13346 0000 - 3346 *.-1 -13346 6262 6262 -13347 0311 TEXT "CIF 60" -13350 0640 -13351 6660 -13352 0000 - 3352 *.-1 -13352 6272 6272 -13353 0311 TEXT "CIF 70" -13354 0640 -13355 6760 -13356 0000 - 3356 *.-1 -13356 6203 6203 -13357 0304 TEXT "CDIF00" -13360 1106 -13361 6060 -13362 0000 - 3362 *.-1 -13362 6213 6213 -13363 0304 TEXT "CDIF10" -13364 1106 -13365 6160 -13366 0000 - 3366 *.-1 -13366 6223 6223 -13367 0304 TEXT "CDIF20" -13370 1106 -13371 6260 -13372 0000 - 3372 *.-1 -13372 6233 6233 -13373 0304 TEXT "CDIF30" - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 41-6 - -13374 1106 -13375 6360 -13376 0000 - 3376 *.-1 -13376 6243 6243 -13377 0304 TEXT "CDIF40" -13400 1106 -13401 6460 -13402 0000 - 3402 *.-1 -13402 6253 6253 -13403 0304 TEXT "CDIF50" -13404 1106 -13405 6560 -13406 0000 - 3406 *.-1 -13406 6263 6263 -13407 0304 TEXT "CDIF60" -13410 1106 -13411 6660 -13412 0000 - 3412 *.-1 -13412 6273 6273 -13413 0304 TEXT "CDIF70" -13414 1106 -13415 6760 -13416 0000 - 3416 *.-1 -13416 6204 6204 -13417 0311 TEXT "CINT" -13420 1624 -13421 0000 -13422 6214 6214 -13423 2204 TEXT "RDF@" -13424 0600 -13425 0000 -13426 6224 6224 -13427 2211 TEXT "RIF@" -13430 0600 -13431 0000 -13432 6234 6234 -13433 2211 TEXT "RIB@" -13434 0200 -13435 0000 -13436 6244 6244 -13437 2215 TEXT "RMF@" -13440 0600 -13441 0000 -13442 6254 6254 -13443 2311 TEXT "SINT" -13444 1624 -13445 0000 -13446 6264 6264 -13447 0325 TEXT "CUF@" -13450 0600 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 41-7 - -13451 0000 -13452 6274 6274 -13453 2325 TEXT "SUF@" -13454 0600 -13455 0000 -13456 6550 6550 -13457 0606 TEXT "FFST" -13460 2324 -13461 0000 -13462 6551 6551 -13463 0620 TEXT "FPINT" -13464 1116 -13465 2400 -13466 6552 6552 -13467 0620 TEXT "FPICL" -13470 1103 -13471 1400 -13472 6553 6553 -13473 0620 TEXT "FPCOM" -13474 0317 -13475 1500 -13476 6554 6554 -13477 0620 TEXT "FPHLT" -13500 1014 -13501 2400 -13502 6555 6555 -13503 0620 TEXT "FPST" -13504 2324 -13505 0000 -13506 6556 6556 -13507 0620 TEXT "FPRST" -13510 2223 -13511 2400 -13512 6557 6557 -13513 0620 TEXT "FPIST" -13514 1123 -13515 2400 -13516 6561 6561 -13517 0615 TEXT "FMODE" -13520 1704 -13521 0500 -13522 6563 6563 -13523 0615 TEXT "FMRB" -13524 2202 -13525 0000 -13526 6564 6564 -13527 0615 TEXT "FMRP" -13530 2220 -13531 0000 -13532 6565 6565 -13533 0615 TEXT "FMDO" -13534 0417 -13535 0000 -13536 6567 6567 -13537 0620 TEXT "FPEP" - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 41-8 - -13540 0520 -13541 0000 - - -13542 0000 NXTIOT, ZBLOCK 200 /LEAVE ROOM FOR EXPANSION - -13742 0000 0 /TABLE TERMINATOR - - - /CODES MAY BE ADDED TO THE TABLE IN THE SPACE LEFT BY THE - / "ZBLOCK 200". SINCE EACH ENTRY REQUIRES 4 WORDS (THE - / ACTUAL CODE IN THE FIRST WORD AND UP TO 6 PACKED ASCII - / CHARACTERS IN THE NEXT THREE WORDS, PADDED WITH TRAIL- - / ING 0'S), THERE IS ROOM FOR 40 OCTAL (32 DECIMAL) IOTS - / AND THEIR NAMES. THESE CAN BE PATCHED IN DIRECTLY - / USING THE PROGRAM ITSELF. **** NOTE THAT THE CONTENTS - / OF LOCATION 10000 POINT TO THE FIRST FREE ENTRY. **** - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 42 - - /SYMBOLICS FOR FPP-12/8A INSTRUCTIONS - -13743 4040 MSBASE, TEXT " B+" -13744 0253 -13745 0000 - -13746 4540 MSINDI, TEXT "% B+" -13747 0253 -13750 0000 - -13751 1216 MSJNX, TEXT "JNX " -13752 3040 -13753 4000 - - /THE FOLLOWING STRINGS ARE PADDED WITH "@"S IN PROPER - / PLACES TO FORCE WORD ALIGNMENT AS NEEDED. - -13754 1405 TEXT "LEA@" /+1 WORD 0000 -13755 0100 -13756 0000 -13757 0614 FPPINS, TEXT "FLDA@@FADD@@FSUB@@FDIV" -13760 0401 -13761 0000 -13762 0601 -13763 0404 -13764 0000 -13765 0623 -13766 2502 -13767 0000 -13770 0604 -13771 1126 -13772 0000 -13773 0615 TEXT "FMUL@@FADDM@FSTA@@FMULM" -13774 2514 -13775 0000 -13776 0601 -13777 0404 -14000 1500 -14001 0623 -14002 2401 -14003 0000 -14004 0615 -14005 2514 -14006 1500 - -14007 2516 TEXT "UNUSEDSTARTE" -14010 2523 -14011 0504 -14012 2324 -14013 0122 -14014 2405 -14015 0000 - 4015 *.-1 -14015 0616 FPOP00, TEXT "FNOP@@FEXIT@FPAUSEFCLA@@FNEG" -14016 1720 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 42-1 - -14017 0000 -14020 0605 -14021 3011 -14022 2400 -14023 0620 -14024 0125 -14025 2305 -14026 0603 -14027 1401 -14030 0000 -14031 0616 -14032 0507 -14033 0000 -14034 0616 TEXT "FNORM@STARTFSTARTDJAC@@" -14035 1722 -14036 1500 -14037 2324 -14040 0122 -14041 2406 -14042 2324 -14043 0122 -14044 2404 -14045 1201 -14046 0300 -14047 0000 - -14050 0114 FPXR1S, TEXT "ALN ATX XTA " -14051 1640 -14052 0124 -14053 3040 -14054 3024 -14055 0140 -14056 0000 - -14057 0104 FPXR2S, TEXT "ADDX *,@LDX *,@" -14060 0430 -14061 4052 -14062 5400 -14063 1404 -14064 3040 -14065 5254 -14066 0000 - -14067 2422 FOP134, TEXT "TRAP4 TRAP3 SETX SETB JSA @JSR " -14070 0120 -14071 6440 -14072 2422 -14073 0120 -14074 6340 -14075 2305 -14076 2430 -14077 4040 -14100 2305 -14101 2402 -14102 4040 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 42-2 - -14103 1223 -14104 0140 -14105 4000 -14106 1223 -14107 2240 -14110 4000 - -14111 0521 FPCOND, TEXT "EQGELEA@NELTGTAL" -14112 0705 -14113 1405 -14114 0100 -14115 1605 -14116 1424 -14117 0724 -14120 0114 -14121 0000 - - - /CONTROL TABLES FOR FPP INSTRUCTION DECODING - -14122 0007 FPPMO0, 7 /MAJOR SUB-OP-CODE OF SPECIALS -14123 0006 6 -14124 0005 5 -14125 0004 4 -14126 0003 3 -14127 0002 2 -14130 0001 1 -14131 0000 0 /END & FALL-OUT POINT - -14132 4756 FPPMOJ, SPCOP7 -14133 4757 SPCOP6 -14134 4747 SPCOP5 -14135 4732 SPCOP4 -14136 4731 SPCOP3 -14137 4744 SPCOP2 -14140 4717 SPCOP1 - -14141 0170 FPPOP0, 170 /MINOR SUB-OP-CODE OF SUB-OP-CODE -14142 0160 160 / 0 SPECIALS -14143 0150 150 -14144 0140 140 -14145 0130 130 -14146 0120 120 -14147 0110 110 -14150 0100 100 -14151 0070 70 -14152 0060 60 -14153 0050 50 -14154 0040 40 -14155 0030 30 -14156 0020 20 -14157 0010 10 -14160 0000 00 - -14161 4677 FPPOPJ, SPNUSE /ALL UNUSED POSSIBILITIES - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 42-3 - -14162 4677 SPNUSE -14163 4677 SPNUSE -14164 4677 SPNUSE -14165 4677 SPNUSE -14166 4677 SPNUSE -14167 4710 SPOP11 -14170 4707 SPOP10 -14171 4677 SPNUSE -14172 4677 SPNUSE -14173 4675 SPOP05 -14174 4670 SPOP04 -14175 4701 SPO123 -14176 4701 SPO123 -14177 4701 SPO123 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 43 - - /MESSAGES: - -14200 4075 MS01, TEXT " = " -14201 4040 -14202 0000 - -14203 0023 MS07, 0023 /"SMASK = " -14204 1501 MS02, TEXT "MASK = " -14205 2313 -14206 4075 -14207 4000 - -14210 0102 MS03, TEXT "ABS. LOC = " -14211 2356 -14212 4014 -14213 1703 -14214 4075 -14215 4000 - -14216 2520 MS04, TEXT "UPPER = " -14217 2005 -14220 2240 -14221 7540 -14222 0000 - -14223 1417 MS05, TEXT "LOWER = " -14224 2705 -14225 2240 -14226 7540 -14227 0000 - -14230 0617 MS06, TEXT "FORMAT = " -14231 2215 -14232 0124 -14233 4075 -14234 4000 - -14235 0411 MS08, TEXT "DIRECTORY" -14236 2205 -14237 0324 -14240 1722 -14241 3100 - -14242 1706 MS09, TEXT "OFFSET = " -14243 0623 -14244 0524 -14245 4075 -14246 4000 - -14247 1517 MS10, TEXT "MODE = " -14250 0405 -14251 4075 -14252 4000 - -14253 0303 MS11, TEXT "CCB:" - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 43-1 - -14254 0272 -14255 0000 - -14256 1704 MS12, TEXT "ODT LOC = " -14257 2440 -14260 4014 -14261 1703 -14262 4075 -14263 4000 - -14264 7240 MS13, TEXT ": " -14265 4040 -14266 0000 - -14267 4040 MS14, TEXT " CORE SEGS: " -14270 0317 -14271 2205 -14272 4023 -14273 0507 -14274 2372 -14275 4040 -14276 4000 - -14277 1417 MS15, TEXT "LOOKUP FAILED" -14300 1713 -14301 2520 -14302 4006 -14303 0111 -14304 1405 -14305 0400 - -14306 0620 MS16, TEXT "FPP" -14307 2000 - -14310 4001 MS17, TEXT " AT " -14311 2440 -14312 0000 - -14313 4040 MS18, TEXT " SA = " -14314 2301 -14315 4075 -14316 4000 - -14317 5440 MS19, TEXT ", JSW = " -14320 4012 -14321 2327 -14322 4075 -14323 4000 - -14324 2205 MS20, TEXT "REL. LOC = " -14325 1456 -14326 4014 -14327 1703 -14330 4075 -14331 4000 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 43-2 - - -14332 2001 MS21, TEXT "PACKED" -14333 0313 -14334 0504 -14335 0000 - -14336 0123 MS22, TEXT "ASCII" -14337 0311 -14340 1100 - -14341 1723 MS23, TEXT "OS/8" -14342 5770 -14343 0000 - -14344 2516 MS24, 2516 /"UNSIGNED" - -14345 2311 MS25, TEXT "SIGNED" -14346 0716 -14347 0504 -14350 0000 - -14351 1703 MS26, TEXT "OCTAL" -14352 2401 -14353 1400 - -14354 1706 MS27, TEXT "OFFSET" -14355 0623 -14356 0524 -14357 0000 - -14360 2301 MS28, TEXT "SAVE" -14361 2605 -14362 0000 - -14363 1617 MS29, TEXT "NORMAL" -14364 2215 -14365 0114 -14366 0000 - -14367 1725 MS30, TEXT "OUTPUT = " -14370 2420 -14371 2524 -14372 4075 -14373 4000 - -14374 2004 MS31, TEXT "PDP" -14375 2000 - -14376 0214 MS32, TEXT "BLOCK = " -14377 1703 -14400 1340 -14401 7540 -14402 0000 - -14403 5140 MS33, TEXT ") " - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 43-3 - -14404 4000 - -14405 1417 MS34, TEXT "LOAD" -14406 0104 -14407 0000 - -14410 0203 MS35, TEXT "BCD" -14411 0400 - -14412 0231 MS36, TEXT "BYTE" -14413 2405 -14414 0000 - -14415 0611 MS37, TEXT "FILLER = " -14416 1414 -14417 0522 -14420 4075 -14421 4000 - -14422 1005 MS38, TEXT "HEADER:" -14423 0104 -14424 0522 -14425 7200 - -14426 5440 MS39, TEXT ", NEXT WORD = " -14427 1605 -14430 3024 -14431 4027 -14432 1722 -14433 0440 -14434 7540 -14435 0000 - -14436 5440 MS40, TEXT ", LOAD V " -14437 1417 -14440 0104 -14441 4026 -14442 4000 - -14443 5440 MS41, TEXT ", E.P. REQ'D" -14444 0556 -14445 2056 -14446 4022 -14447 0521 -14450 4704 -14451 0000 - -14452 4040 MS42, TEXT " OVLYS START BLOCK LENGTH" -14453 1726 -14454 1431 -14455 2340 -14456 2324 -14457 0122 -14460 2440 -14461 0214 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 43-4 - -14462 1703 -14463 1340 -14464 1405 -14465 1607 -14466 2410 -14467 0000 - -14470 3023 MS43, TEXT "XS240" -14471 6264 -14472 6000 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 44 - - /MAIN LOOP CHARACTER LIST -14473 0243 CCHARL, "# -14474 0244 "$ -14475 0245 "% -14476 0246 "& -14477 0272 ": -14500 0274 "< -14501 0275 "= -14502 0276 "> -14503 0277 "? -14504 0300 "@ -14505 0333 "[ -14506 0334 "\ -14507 0335 "] -14510 0257 "/ -14511 0241 "! -14512 0253 "+ -14513 0255 "- -14514 0273 "; -14515 0336 "^ -14516 0337 "_ - /'TYPE' COMMAND LIST -14517 0211 TYPEL, 211 /TAB -14520 0233 233 /ALT MODES -14521 0375 375 -14522 0376 376 - /'XMODIF' CHECK LIST -14523 0215 TYPEM, 215 /CR -14524 0212 212 /LF -14525 0000 0 - - /ADDRESSES FOR 'OMODES' -14526 3415 OTABLE, BPRT /# -14527 3511 OSTYPE /$ -14530 3517 BYTEO /% -14531 5352 XS240O /& -14532 3423 SGNDP /: -14533 3400 OPRT /< -14534 3436 DPRT /= -14535 4221 PDPOUT /> -14536 3163 DIROUT /? -14537 5000 PDATE /@ -14540 2163 ASCII /[ -14541 4600 FPPOUT /\ -14542 3621 PACOUT /] - - /MAIN LOOP JUMP LIST - RESPOND TO SPECIAL CHAR -14543 0255 COPSL, OMODES -14544 0255 OMODES -14545 0255 OMODES -14546 0255 OMODES -14547 0255 OMODES -14550 0255 OMODES -14551 0255 OMODES /SEE ABOVE LIST -14552 0255 OMODES - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 44-1 - -14553 0255 OMODES -14554 0255 OMODES -14555 0255 OMODES -14556 0255 OMODES -14557 0255 OMODES -14560 0237 SLASH -14561 0312 EXCL -14562 0344 PLUS -14563 0345 MINUS -14564 0310 SEMIC -14565 0274 UPARR -14566 0271 BACKAR -14567 4024 RESPC -14570 0253 ALTMOD -14571 0253 ALTMOD -14572 0253 ALTMOD -14573 0216 CRCR -14574 0311 LFLF - - /'TYPE' JUMP LIST -14575 5106 TYPEOP, TYPTAB -14576 5101 TYPALT -14577 5101 TYPALT -14600 5101 TYPALT -14601 5104 TYPCR -14602 5105 TYPCR+1 - - /COMMAND WORD LIST FOR COMMANDS NOT FOLLOWED BY CR -14603 0526 CWORDL, TEXT "EVE@DUD@LIL@FIF@OPSCSTSMWOW@MOM@SHSES@WRIFEXCOC@" -14604 0500 -14605 0425 -14606 0400 -14607 1411 -14610 1400 -14611 0611 -14612 0600 -14613 1720 -14614 2303 -14615 2324 -14616 2315 -14617 2717 -14620 2700 -14621 1517 -14622 1500 -14623 2310 -14624 2305 -14625 2300 -14626 2722 -14627 1106 -14630 0530 -14631 0317 -14632 0300 -14633 0000 - - /MAIN LOOP JUMP LIST - EXECUTE A COMMAND - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 44-2 - -14634 0400 WOPSL, XVAL -14635 0400 XVAL -14636 0603 XDUMP -14637 0603 XDUMP -14640 0632 XLIST0 -14641 0632 XLIST0 -14642 1024 XFILE -14643 1024 XFILE -14644 1000 XOPEN -14645 0600 XSCAN -14646 2216 XSTRIN -14647 2600 XSMASK -14650 2000 XWORD -14651 2000 XWORD -14652 2417 XMODIF -14653 2417 XMODIF -14654 1210 XSHOW -14655 1602 XSET -14656 1602 XSET -14657 2400 XWRARG -14660 1713 XIF -14661 5160 XEXIT -14662 0204 MAIN1 /COMMENT -14663 0204 MAIN1 - - /LISTS FOR COMMANDS FOLLOWED BY A CR. -14664 2205 CWORL2, TEXT "REWRENEXCLCOC@" -14665 2722 -14666 0516 -14667 0530 -14670 0314 -14671 0317 -14672 0300 -14673 0000 - -14674 2200 WOPSLL, XREWIN /REWIND -14675 2403 XWRITE /WRITE -14676 0204 MAIN1 /END -14677 5160 XEXIT /EXIT -14700 1004 XCLOSE /CLOSE -14701 0204 MAIN1 /COMMENT -14702 0204 MAIN1 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 45 - - /'XFORM' LISTS ----ORDER IS CRITICAL---- -14703 2001 FORML, TEXT "PAP@ASA@OSOSXSX@UNU@SIS@OCO@BCB@BYBYPDPDFPF@DID@" -14704 2000 -14705 0123 -14706 0100 -14707 1723 -14710 1723 -14711 3023 -14712 3000 -14713 2516 -14714 2500 -14715 2311 -14716 2300 -14717 1703 -14720 1700 -14721 0203 -14722 0200 -14723 0231 -14724 0231 -14725 2004 -14726 2004 -14727 0620 -14730 0600 -14731 0411 -14732 0400 -14733 0000 - -14734 0740 FOPSL, XFCHR /PACKED (ASCII) -14735 0740 XFCHR -14736 0740 XFCHR /ASCII -14737 0740 XFCHR -14740 0740 XFCHR /OS/8 (ASCII, PACKED) -14741 0740 XFCHR -14742 0740 XFCHR /XS240 (ASCII, PACKED) -14743 0740 XFCHR -14744 0737 XFNUM /UNSIGNED (DECIMAL) -14745 0737 XFNUM -14746 0737 XFNUM /SIGNED (DECIMAL) -14747 0737 XFNUM -14750 0737 XFNUM /OCTAL -14751 0737 XFNUM -14752 0737 XFNUM /BCD -14753 0737 XFNUM -14754 0737 XFNUM /BYTE (OCTAL) -14755 0737 XFNUM -14756 0736 XFSYM /PDP (SYMBOLIC) -14757 0736 XFSYM -14760 0736 XFSYM /FPP (SYMBOLIC) -14761 0736 XFSYM -14762 0736 XFSYM /DIRECTORY -14763 0736 XFSYM - - / ROUTINE ADDRESS LIST - -14764 3621 FTABLE, PACOUT - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 45-1 - -14765 2163 ASCII -14766 3511 OSTYPE -14767 5352 XS240O -14770 3436 DPRT -14771 3423 SGNDP -14772 3400 OPRT -14773 3415 BPRT -14774 3517 BYTEO -14775 4214 PDPDMP -14776 4400 FPPDMP -14777 3155 DIRDMP - - /'XSHFMT' DESCRIPTOR ADDRESS LIST -15000 4332 FMTLS, MS21 /PACKED ASCII -15001 4336 MS22 /ASCII -15002 4341 MS23 /OS/8 ASCII -15003 4470 MS43 /XS240 ASCII -15004 4344 MS24 /UNSIGNED DECIMAL -15005 4345 MS25 /SIGNED DECIMAL -15006 4351 MS26 /OCTAL -15007 4410 MS35 /BCD -15010 4412 MS36 /BYTE -15011 4374 MS31 /PDP SYMBOLIC -15012 4306 MS16 /FPP SYMBOLIC -15013 4235 MS08 /DIRECTORY - - - /'XMODIF' COMMAND LIST -15014 2001 MODIFL, TEXT "PAP@ASA@OSXSNUN@" -15015 2000 -15016 0123 -15017 0100 -15020 1723 -15021 3023 -15022 1625 -15023 1600 -15024 0000 - - /'XMODIF' JUMP LIST -15025 2620 MODIFO, XPAC0 /PACKED -15026 2620 XPAC0 -15027 2537 XASC1 /ASCII -15030 2537 XASC1 -15031 2634 XOPS1 /OS/8 -15032 2617 XXS20 /XS240 -15033 2514 XNUM2 /NUMERIC -15034 2514 XNUM2 - -15035 2436 MODADS, XMOD0 /MODIFL TEST LIST -15036 2436 XMOD0 -15037 2436 XMOD0 -15040 2436 XMOD0 -15041 2436 XMOD0 -15042 2436 XMOD0 -15043 2436 XMOD0 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 45-2 - -15044 2436 XMOD0 -15045 2436 XMOD0 - -15046 2001 MODDLS, TEXT "PAASOSXSNUNUNUNUNUNUNUNU" /DEFAULT LIST -15047 0123 -15050 1723 -15051 3023 -15052 1625 -15053 1625 -15054 1625 -15055 1625 -15056 1625 -15057 1625 -15060 1625 -15061 1625 -15062 0000 - - /'XMODIF' CHARACTER JUMP LIST -15063 2465 MCHARO, XMODCR /CR, END -15064 4007 RENEXT /LF, IGNORE - - /'XIF' CHARACTER JUMP LIST -15065 1731 IFSKPO, XIFCR /CR, END OF LINE -15066 4007 RENEXT /LF, IGNORE - - /XNUM JUMP LIST -15067 2512 NUMOPS, XNUM1 /, -15070 5722 ERCQ /: -15071 5722 ERCQ /. -15072 2513 XNUM1+1 /SPACE -15073 2524 XNUM3 /CR - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 46 - - /'XSHOW' COMMAND LIST -15074 0214 SHOWL, TEXT "BLB@ODCCC@HEH@ABA@RER@SMVE" -15075 0200 -15076 1704 -15077 0303 -15100 0300 -15101 1005 -15102 1000 -15103 0102 -15104 0100 -15105 2205 -15106 2200 -15107 2315 -15110 2605 -15111 0000 - 5111 *.-1 - /'XSET' COMMAND LIST -15111 0404 SETLST, TEXT "DDFOF@OUO@ERE@OFUPLOTEDEDMMOFIMAM@ -15112 0617 -15113 0600 -15114 1725 -15115 1700 -15116 0522 -15117 0500 -15120 1706 -15121 2520 -15122 1417 -15123 2405 -15124 0405 -15125 0415 -15126 1517 -15127 0611 -15130 1501 -15131 1500 -15132 0000 - - /'XSHOW' JUMP LIST -15133 1200 SHOWOP, XSHBLK /BLOCK -15134 1200 XSHBLK -15135 1236 XSHODL /ODT LOC -15136 1400 XSHCCB /CCB (CORE CONTROL BLOCK) -15137 1400 XSHCCB -15140 1455 XSHHDR /HEADER (F4 LOAD MODULE) -15141 1455 XSHHDR -15142 1250 XSHABS /ABS. LOC -15143 1250 XSHABS -15144 1243 XSHREL /REL. LOC -15145 1243 XSHREL -15146 1321 XSHSMS /SMASK -15147 1216 XSHVER /VERSION -15150 1360 XSHDDEV /DDEV -15151 1277 XSHFMT /FORMAT -15152 1277 XSHFMT -15153 1314 XSHOUT /OUTPUT -15154 1314 XSHOUT - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 46-1 - -15155 1530 XSHERR /ERRORS -15156 1530 XSHERR -15157 1225 XSHOFF /OFFSET -15160 1265 XSHUPP /UPPER -15161 1272 XSHLOW /LOWER -15162 1215 ERCG /TEMP--NOT ALLOWED FOR SHOW -15163 1347 XSHDEV /DEVICE -15164 1215 ERCG /DMODE--NOT ALLOWED FOR SHOW -15165 1307 XSHMOD /MODE -15166 1232 XSHFIL /FILLER -15167 1221 XSHMSK /MASK -15170 1221 XSHMSK - - /'XSET' JUMP LIST -15171 1134 SETJMP, XDDEV /DDEV (DUMP DEVICE) -15172 0754 XFORM /FORMAT -15173 0754 XFORM -15174 1624 XOUTS /OUTPUT -15175 1624 XOUTS -15176 1647 XEMODE /ERROR (MODE) -15177 1647 XEMODE -15200 1642 XOFFS /OFFSET -15201 1660 XUPP /UPPER -15202 1663 XLOW /LOWER -15203 1705 XTEMP /TEMP -15204 1121 XDEV /DEVICE -15205 1612 XDMODE /DMODE (DUMP MODE) -15206 1666 XMODE /MODE -15207 1701 XFILL /FILLER -15210 1636 XMASK /MASK -15211 1636 XMASK - - /'XEMODE' COMMAND LIST -15212 2310 XELST, TEXT "SHS@LOL@" -15213 2300 -15214 1417 -15215 1400 -15216 0000 - - /'XEMODE' BRANCH LIST -15217 1655 XEOPS, XEMOD1 /SHORT -15220 1655 XEMOD1 -15221 1656 XEMOD1+1 /LONG -15222 1656 XEMOD1+1 - - /'XOUTS' LISTS -15223 0620 XOLST, TEXT "FPF@PDP@OCO@" -15224 0600 -15225 2004 -15226 2000 -15227 1703 -15230 1700 -15231 0000 - -15232 1632 XOOPS, XOUTS1-1 /FPP SYMBOLIC - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 46-2 - -15233 1632 XOUTS1-1 -15234 1633 XOUTS1 /PDP SYMBOLIC -15235 1633 XOUTS1 -15236 1634 XOUTS1+1 /OCTAL -15237 1634 XOUTS1+1 - - /'XMODE' COMMAND LIST -15240 1706 MODLST, TEXT "OFO@SAS@LOL@NON@" -15241 1700 -15242 2301 -15243 2300 -15244 1417 -15245 1400 -15246 1617 -15247 1600 -15250 0000 - - /'XMODE' JUMP LIST -15251 1674 MODOPS, XMODS-1 /OFFSET -15252 1674 XMODS-1 -15253 1676 XMODS+1 /SAVE FILE -15254 1676 XMODS+1 -15255 1675 XMODS /LOAD MODULE -15256 1675 XMODS -15257 1677 XMODS+2 /NORMAL -15260 1677 XMODS+2 - - /'XDMODE' LISTS -15261 0114 XDMLST, TEXT "ALPANO" -15262 2001 -15263 1617 -15264 0000 - -15265 1620 XDMOPS, XDMODS-1 /ALL -15266 1621 XDMODS /PART -15267 1622 XDMODS+1 /NONE - - - /LIST OF DESCRIPTOR ADDRESSES FOR "SHOW MODE" - -15270 4354 MS27 /-1 = "OFFSET" -15271 4363 MODELS, MS29 / 0 = "NORMAL" -15272 4360 MS28 /+1 = "SAVE" -15273 4405 MS34 /+2 = "LOAD" - - - /LIST OF DESCRIPTOR ADDRESSES FOR "SHOW OUTPUT" - -15274 4306 MS16 /-1 = "FPP (SYMBOLIC)" -15275 4351 OUTLS, MS26 / 0 = "OCTAL" -15276 4374 MS31 /+1 = "PDP (SYMBOLIC)" - - - /'XWORD' COMMAND LIST -15277 2516 XWORCL, TEXT "UNU@" - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 46-3 - -15300 2500 -15301 0000 - 5301 *.-1 - /'XSTRIN' COMMAND LIST -15301 0622 STRLST, TEXT "FRF@TOT@ABA@MAM@ME" -15302 0600 -15303 2417 -15304 2400 -15305 0102 -15306 0100 -15307 1501 -15310 1500 -15311 1505 -15312 0000 - - - /'XWORD' JUMP LIST -15313 2004 XWOROP, XWOR2 /UNEQUAL -15314 2004 XWOR2 -15315 2071 XWSFRM /FROM -15316 2071 XWSFRM -15317 2074 XWSTO /TO -15320 2074 XWSTO -15321 2066 XWSABS /ABSOLUTE -15322 2066 XWSABS -15323 2015 ERCH /MASKED--NO! -15324 2016 XWOR7 /MEMREF -15325 2016 XWOR7 - - /'XSTRIN' JUMP LIST -15326 2071 STROPS, XWSFRM /FROM -15327 2071 XWSFRM -15330 2074 XWSTO /TO -15331 2074 XWSTO -15332 2066 XWSABS /ABSOLUTE -15333 2066 XWSABS -15334 2220 XSTR0 /MASKED -15335 2220 XSTR0 -15336 2015 ERCH /MEMREF--NO! - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 47 - - /LIST OF TERMINATORS, IN ORDER, FOR 'EVAL' -15337 0241 TERMS, "! /1 -15340 0246 "& /2 -15341 0253 "+ /3 -15342 0255 "- /4 -15343 0257 "/ /5 -15344 0252 "* /6 -15345 0250 "( /7 -15346 0251 ") /10 -15347 0215 215 /CR: 11 -15350 0000 0 - - /'GWORD' & 'ACCEPT' COMMAND LISTS -15351 0271 GWLST1, "9 -15352 0270 "8 -15353 0267 "7 -15354 0266 "6 -15355 0265 "5 -15356 0264 "4 -15357 0263 "3 -15360 0262 "2 -15361 0261 "1 -15362 0260 "0 -15363 0204 204 /^D -15364 0213 213 /^K -15365 0242 "" -15366 0247 "' -15367 0250 "( -15370 0240 GWLST2, 240 /SPACE -15371 0215 215 /CR -15372 0000 0 - - /'GWORD' JUMP LISTS -15373 3154 GWOPS1, GWD4 / 9 - A NUMBER -15374 3154 GWD4 / 8 - A NUMBER -15375 3154 GWD4 / 7 - A NUMBER -15376 3154 GWD4 / 6 - A NUMBER -15377 3154 GWD4 / 5 - A NUMBER -15400 3154 GWD4 / 4 - A NUMBER -15401 3154 GWD4 / 3 - A NUMBER -15402 3154 GWD4 / 2 - A NUMBER -15403 3154 GWD4 / 1 - A NUMBER -15404 3154 GWD4 / 0 - A NUMBER -15405 3154 GWD4 /^D - A NUMBER -15406 3154 GWD4 /^K - A NUMBER -15407 3154 GWD4 / " - A NUMBER -15410 3154 GWD4 / ' - A NUMBER -15411 3154 GWD4 / ( - A NUMBER -15412 3150 GWOPS2, GWD2 /SPACE - TERMINATOR -15413 3151 GWD3 / CR - " - - /'ACCEPT' JUMP LIST -15414 5213 ACOPS, ACCNUM / 9 - A DIGIT -15415 5213 ACCNUM / 8 - A DIGIT -15416 5213 ACCNUM / 7 - A DIGIT - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 47-1 - -15417 5213 ACCNUM / 6 - A DIGIT -15420 5213 ACCNUM / 5 - A DIGIT -15421 5213 ACCNUM / 4 - A DIGIT -15422 5213 ACCNUM / 3 - A DIGIT -15423 5213 ACCNUM / 2 - A DIGIT -15424 5213 ACCNUM / 1 - A DIGIT -15425 5213 ACCNUM / 0 - A DIGIT -15426 5256 CTRLD / ^D SWITCH -15427 5257 CTRLK / ^K SWITCH -15430 5243 DQUOTE / " - SINGLE ASCII -15431 5246 SQUOTE / ' - PACKED ASCII -15432 5240 ERCR / ( - ILLEGAL HERE -15433 5234 ACCPT3-2 /SPACE - END -15434 5235 ACCPT3-1 /CR - END - - /'GARGS' JUMP LIST - TERMINATORS -15435 5317 GAROPS, GAR5 /- -15436 5323 GAR6 /, -15437 5307 ERCS /:, SHOULDN'T SEE, WILL DO ERROR -15440 5314 GAR4 /. -15441 5307 ERCS /SPACE, SHOULDN'T SEE, WILL DO 'ERROR' -15442 5310 GAR3 /CR - - /'GARGS' & 'ARG' COMMAND LISTS -15443 0255 GARLST, "- -15444 0254 ", -15445 0272 GETLST, ": -15446 0256 ARGLST, ". -15447 0240 240 /SPACE -15450 0215 215 /CR -15451 0000 0 - - /'GETNT' LISTS -15452 3723 GETOPS, GETCOL -15453 3730 GETPER -15454 3736 GETEND -15455 3737 GETEND+1 - - /'ARG' JUMP LIST -15456 5723 ARGOPS, ARG2 -15457 5726 ARG3 -15460 5726 ARG3 - - /'WCHEK' LISTS -15461 0250 WCKLST, "( -15462 0251 ") -15463 0242 "" -15464 0247 "' -15465 0215 215 -15466 0000 0 - -15467 6227 WCKOPS, WCHEK5+1 -15470 6226 WCHEK5 -15471 6233 WCHEK6+1 -15472 6232 WCHEK6 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 47-2 - -15473 6222 WCHEK4 - - /'EVAL' JUMP LIST 1 -15474 5470 EVOPS1, EVNEXT /+ -15475 5415 EVMIN /- -15476 5537 EVLPAR /( - - /'EVAL' COMMAND LISTS -15477 0253 EVLST1, "+ -15500 0255 "- -15501 0250 "( -15502 0000 0 - -15503 0314 EVLST2, "L -15504 0302 "B -15505 0323 "S -15506 0303 "C -15507 0306 "F -15510 0322 "R -15511 0324 "T -15512 0304 "D -15513 0000 0 - - /'EVAL' JUMP LIST 2 -15514 5527 EVOPS2, EVLOC /L (LOC) -15515 5533 EVBLK /B (BLK) -15516 5522 EVSR /S (S.R.) -15517 5523 EVSR+1 /C (CONTENTS) -15520 5525 EVFIL /F (FILLER) -15521 5512 EVREM /R (REMAINDER) -15522 5516 EVTEMP /T (TEMP) -15523 5506 EVDATE /D (DATE) - - /ACTION CHARS FOR "READLN" SUBROUTINE -15524 0222 REACTL, "R-100 /CTRL-R = RE-ECHO -15525 0225 "U-100 /CTRL-U = ERASE LINE -15526 0000 0 - -15527 4063 REACTS, RECHO -15530 4100 RERASE - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 48 - - /ERROR ROUTINE ADDRESS LIST: - -15531 0233 ERLIST, ERCA -15532 0227 ERCB -15533 0402 ERCC -15534 0605 ERC14 -15535 0735 ERCD -15536 0755 ERCE -15537 1215 ERCG -15540 2015 ERCH -15541 2011 ERCI -15542 1605 ERCK -15543 1673 ERCJ -15544 1611 XSET1 -15545 1631 ERCL -15546 1654 ERCZ -15547 2430 ERCO -15550 1617 ERC11 -15551 2642 ERC04 -15552 2473 ERCP -15553 5722 ERCQ -15554 5240 ERCR -15555 5222 ERC09 -15556 5736 ERC08 -15557 5267 ERC13 -15560 5307 ERCS -15561 5412 ERCT -15562 5414 ERCU -15563 5541 ERCV -15564 5547 ERCW -15565 6047 ERCX -15566 1156 ERCY -15567 3731 ERCM -15570 2214 ERC00 -15571 2215 ERC01 -15572 2415 ERC02 -15573 2416 ERC03 -15574 2342 ERC10 -15575 2116 ERCF -15576 2022 GCCERR -15577 2101 HDRERR -15600 3103 ERC05 -15601 2502 ERC07 -15602 2254 ERC18 -15603 2312 ERC19 -15604 2351 ERC20 -15605 0545 ERC15 -15606 0564 ERC16 -15607 4116 ERC17 -15610 0000 0 - - - DECIMAL - -15611 7777 SMASKB, -1 /STRING SEARCH MASK BUFFER - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 48-1 - - /L(SMASKB)=66(10) - 5713 COMB= SMASKB+66 /COMMAND INPUT BUFFER - /L(COMB)= 140(10) - 6127 PDLB= COMB+140 /PUSH-DOWN-LIST BUFFER - /**** ALSO REWIND BUFFER! **** -15612 0251 CCBB-PDLB /SHOW PDL SPACE - - OCTAL - - - 6400 CCBB= 16400 /CORE-CONTROL-BLOCK BUFFER AND HEADER - / BUFFER FOR LOAD MODULES, 1 PAGE FIELD 1 - - 6600 DMPBUF= 16600 /DUMP OUTPUT BUFFER, 2 PAGES FIELD 1 - - 7200 IOBUF= 17200 /DEVICE I/O DUFFER, 2 PAGES FIELD 1 - - - $$$$ - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 49 - -ABKLOC 1741 CCHDST 1553 DEVHAN 7200 ERCH 2015 -ABK1 1747 CGET 2546 DEVNO 0101 ERCI 2011 -ABK2 1753 CGTEST 2552 DICAD 6163 ERCJ 1673 -ABSSW 0051 CHAR 0035 DIGIT 4531 ERCK 1605 -ACBASE 5242 CHARSW 0045 DIOR 5677 ERCL 1631 -ACCEPT 5200 CLANAM 2726 DIRDMP 3155 ERCM 3731 -ACCMUL 5223 CLOSE 0361 DIROUT 3163 ERCO 2430 -ACCNUM 5213 CNOP 2036 DLOOP1 0427 ERCP 2473 -ACCPT1 5206 CNT 0036 DLOOP2 0445 ERCQ 5722 -ACCPT3 5236 CNTR 0037 DMODE 0053 ERCR 5240 -ACCX1 0027 CNTRA 0040 DMPADR 2340 ERCS 5307 -ACCX2 0030 COMB 5713 DMPBLK 2341 ERCT 5412 -ACC1 0025 COMIR 0015 DMPBUF 6600 ERCU 5414 -ACC2 0026 COMOUT 0016 DMPCHR 2352 ERCV 5541 -ACOPS 5414 COMST 0174 DMPHAN 6600 ERCW 5547 -ADFLD 7000 CONDIT 6265 DMPIT 2335 ERCX 6047 -ALTMOD 0253 COPSL 4543 DMPNUL 2321 ERCY 1156 -ALTM1 0261 CRCR 0216 DMPOUT 2315 ERCZ 1654 -ARG 5713 CRCRC 0235 DMPPTR 2353 ERC00 2214 -ARGI 0160 CRCRN 0234 DMUL 6000 ERC01 2215 -ARGLST 5446 CRCR1 0230 DMUL1 6004 ERC02 2415 -ARGOPS 5456 CRLF 5044 DMUL2 6021 ERC03 2416 -ARG1 5715 CRLFI 0130 DMUL3 6031 ERC04 2642 -ARG2 5723 CRSWT 0046 DMUL4 6014 ERC05 3103 -ARG3 5726 CTRL 5125 DNAM 2266 ERC07 2502 -ASCII 2163 CTRLC 5160 DODIG 4161 ERC08 5736 -BACKAR 0271 CTRLCI 5162 DOFLD 4742 ERC09 5222 -BASE 4622 CTRLD 5256 DO1SP 2561 ERC10 2342 -BATINI 4051 CTRLI 0134 DO2SP 2565 ERC11 1617 -BATLS 6657 CTRLK 5257 DPNEG 6141 ERC13 5267 -BATLUP 6621 CTRLQS 5167 DPNT 0010 ERC14 0605 -BATMOV 6615 CTRLX 5163 DPRT 3436 ERC15 0545 -BATPAT 6624 CTRL0 5127 DPSGN 0001 ERC16 0564 -BATSET 6600 CTRL1 5143 DQUOTE 5243 ERC17 4116 -BCTRLC 5135 CTRL2 5150 DSUB 5662 ERC18 2254 -BITPNT 4471 CWORDL 4603 DSWIT 0052 ERC19 2312 -BITS 4456 CWORL2 4664 EAE 4311 ERC20 2351 -BITVAL 4522 C100 5124 EAELST 2664 ERLIST 5531 -BKLOC 3105 DADD 5650 EAETMP 4332 ERMODE 0020 -BKLOCI 0146 DAND 5667 EBLK 2104 ERMSA 0062 -BLK 0057 DBLPGS 3063 ECLOSE 0353 ERMSB 0100 -BLKTST 6154 DCAICA 4555 ELOCH 2105 ERMSC 0116 -BPRT 3415 DDCWPT 2265 ELOCL 2106 ERMSD 0125 -BTEST 4103 DDEVAD 2263 EMSEND 0060 ERMSE 0137 -BUFST 3041 DDEVNO 2264 ENDC 4141 ERMSF 0150 -BYTEO 3517 DDEVS 2430 ENDCI 0170 ERMSG 0227 -CAD 0056 DDIV 6040 ENUM 5472 ERMSGC 0171 -CALUSR 4552 DDIV1 6051 ENUMX 5501 ERMSH 0242 -CBATE 6736 DDIV2 6064 ERCA 0233 ERMSHD 0207 -CBATI 6707 DDIV3 6072 ERCB 0227 ERMSI 0256 -CBATO 6746 DECI 0137 ERCC 0402 ERMSJ 0267 -CBLK 0054 DEC2 3445 ERCD 0735 ERMSK 0276 -CCBB 6400 DEC2I 0141 ERCE 0755 ERMSL 0341 -CCBHDR 2106 DEVAD 0100 ERCF 2116 ERMSM 0361 -CCHARL 4473 DEVADX 2140 ERCG 1215 ERMSO 0404 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 49-1 - -ERMSP 0417 EVREM 5512 GET 3000 INSLST 2600 -ERMSQ 0435 EVSR 5522 GETCOL 3723 IOBUF 7200 -ERMSR 0456 EVTAB 5566 GETCW 3360 IOPNT 4544 -ERMSS 0501 EVTEMP 5516 GETEND 3736 IOPRNT 4523 -ERMST 0523 EXCL 0312 GETI 0161 IOPRN1 4525 -ERMSU 0543 EXCL1 0317 GETIO 3027 IOPRN2 4542 -ERMSV 0564 EXCL2 0336 GETIO1 3044 IOTS 4257 -ERMSW 0604 EXPRIN 5727 GETIO2 3061 IOTTAB 2732 -ERMSX 0622 EXPRI1 5735 GETLST 5445 LASTOP 0002 -ERMSXO 0322 FBKLEN 1036 GETL1 3300 LBLK 0065 -ERMSY 0636 FCNT 0042 GETL2 3302 LCHEK 2147 -ERMSZ 0651 FILLER 0074 GETL3 3345 LFLF 0311 -ERMS00 0673 FLD 7026 GETL4 3351 LIMITI 0165 -ERMS01 0671 FLDOUT 6277 GETN 5362 LIMITS 2752 -ERMS02 0706 FMTLS 5000 GETNI 0163 LISTPT 0725 -ERMS03 0704 FOPSL 4734 GETNT 3741 LLIST 0661 -ERMS04 0717 FOP134 4067 GETNTC 3746 LLIS1 0664 -ERMS05 0742 FORML 4703 GETOP 6243 LLIS2 0702 -ERMS07 0764 FPCOND 4111 GETOPS 5452 LLIS3 0712 -ERMS08 1003 FPLEA 4611 GETORG 3357 LLIS4 0717 -ERMS09 1030 FPOP00 4015 GETPER 3730 LLIS5 0722 -ERMS10 1037 FPPDMP 4400 GETPNT 0014 LLOCH 0066 -ERMS11 1051 FPPINS 3757 GETSCN 3717 LLOCL 0067 -ERMS13 1071 FPPMOJ 4132 GETSWX 2141 LOCH 0060 -ERMS14 1104 FPPMO0 4122 GETS1 3214 LOCL 0061 -ERMS15 1124 FPPOPJ 4161 GETS2 3261 LONG 4640 -ERMS16 1135 FPPOP0 4141 GETX 3026 LOUTSW 0726 -ERMS17 1151 FPPOUT 4600 GET0 3010 LPAR 5616 -ERMS18 1163 FPRNT 1363 GET1 3013 LPARI 5564 -ERMS19 1172 FPRNTX 7011 GET4 3200 LSETL 2127 -ERMS20 1201 FPXR1S 4050 GET678 6251 LSETUP 2107 -ERMS99 1212 FPXR2S 4057 GHDR 2050 MAIN1 0204 -ERROR 4573 FSTBLK 1035 GHDR1 2102 MAIN2 0212 -ERROR1 2433 FTABLE 4764 GNAME 3676 MASK 0075 -EVAL 5400 F0END 6572 GPAIR 3751 MASKBS 0176 -EVALI 0147 GARGI 0157 GPUT 5326 MCHARO 5063 -EVALX 5557 GARGS 5272 GPUT1 5335 MDCOM 6112 -EVAL1 5407 GARLST 5443 GWD1 3143 MINUS 0345 -EVAL2 5413 GAROPS 5435 GWD2 3150 MODADS 5035 -EVAL3 5423 GAR1 5276 GWD3 3151 MODDLS 5046 -EVBLK 5533 GAR2 5302 GWD4 3154 MODELS 5271 -EVDATE 5506 GAR3 5310 GWLST1 5351 MODIF 0050 -EVFIL 5525 GAR4 5314 GWLST2 5370 MODIFL 5014 -EVLOC 5527 GAR5 5317 GWOPS1 5373 MODIFO 5025 -EVLPAR 5537 GAR6 5323 GWOPS2 5412 MODLST 5240 -EVLST1 5477 GCCB 2000 GWORD 3122 MODOPS 5251 -EVLST2 5503 GCCBLK 2130 GWORDI 0156 MODSW 0044 -EVMIN 5415 GCCB1 2026 HDRERR 2101 MODTMP 2477 -EVNEXT 5470 GCCB2 2042 IFSKPO 5065 MONTHS 2521 -EVOP 5446 GCCCDF 2046 INC 3557 MSBAD 2145 -EVOPN 5554 GCCERR 2022 INCI 0166 MSBASE 3743 -EVOPS1 5474 GDEVIC 1140 INDIR 4631 MSDDEV 2450 -EVOPS2 5514 GDEV1 1153 INIDAT 6322 MSDEV 2457 -EVPAR 5456 GDEV2 1154 INIMSG 6306 MSERR 2500 -EVPAR2 5542 GDEV3 1155 INISCO 6315 MSINDI 3746 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 49-2 - -MSJNX 3751 M400 0103 OUTLS 5275 R2 4053 -MSMOD 2142 NAM1 0025 OUTPNT 0043 SBLK 0070 -MSVER 2512 NAM2 0026 OUTSW 0765 SCANER 5744 -MS01 4200 NAM3 0027 OVLFLG 0000 SCANX1 0012 -MS02 4204 NAM4 0030 PACK 2704 SCANX2 0013 -MS03 4210 NCNT 0041 PACK1 2716 SCOPLS 6630 -MS04 4216 NUMB 3500 PACOUT 3621 SEGCNT 3361 -MS05 4223 NUMDGT 3501 PATCH 0001 SEGNI 2127 -MS06 4230 NUMOPS 5067 PDATE 5000 SEMIC 0310 -MS07 4203 NUMOUT 3453 PDATEI 0142 SETJMP 5171 -MS08 4235 NUMO1 3455 PDLB 6127 SETLST 5111 -MS09 4242 NUMO2 3466 PDLPT 0007 SGNDP 3423 -MS10 4247 NXTIOT 3542 PDPDMP 4214 SHOWL 5074 -MS11 4253 NXTOCT 1766 PDPOUT 4221 SHOWOP 5133 -MS12 4256 N15 0114 PLUS 0344 SHUT 0047 -MS13 4264 N177 0117 PNAME 2731 SLASH 0237 -MS14 4267 N20 0115 PNAME1 2744 SLA1 0244 -MS15 4277 N200 0120 POP 4551 SLOCH 0071 -MS16 4306 N377 0121 POPX 5606 SLOCL 0072 -MS17 4310 N7 0113 PUSH 4550 SLO1 0245 -MS18 4313 N7000 0122 PUSHX 5600 SLO2 0246 -MS19 4317 N7400 0103 QUOTEC 5265 SMASKB 5611 -MS20 4324 N77 0116 RBLK 3057 SMASKL 0076 -MS21 4332 OCTI 0140 RBLK1 0077 SMSKSW 2360 -MS22 4336 OCTSET 5261 RDERX 2136 SOCTI 0145 -MS23 4341 OCT3 3407 REACTL 5524 SORTEM 3675 -MS24 4344 ODGET 3073 REACTS 5527 SORTI 0167 -MS25 4345 ODGETI 0162 READ 4000 SORTJ 3643 -MS26 4351 ODTOL 4212 READLN 4523 SORT1 3652 -MS27 4354 ODTOPT 4204 RECHO 4063 SORT2 3673 -MS28 4360 ODTOUT 4200 RECHO1 4070 SPACE1 4532 -MS29 4363 OFFSET 0073 RECRLF 0171 SPACE2 4533 -MS30 4367 OMODES 0255 REFS1 4244 SPCOP0 4660 -MS31 4374 OMODPT 0270 REFS2 4255 SPCOP1 4717 -MS32 4376 ONECHR 3631 REKEY 4011 SPCOP2 4744 -MS33 4403 OPEND 4446 RENEXT 4007 SPCOP3 4731 -MS34 4405 OPER1 0031 RERASE 4100 SPCOP4 4732 -MS35 4410 OPER2 0032 RERROR 2213 SPCOP5 4747 -MS36 4412 OPRMES 2730 RESPC 4024 SPCOP6 4757 -MS37 4415 OPRS 4262 RESTAR 0172 SPCOP7 4756 -MS38 4422 OPRS1 4275 RETERM 4020 SPECIA 4654 -MS39 4426 OPRT 3400 RKEY 4112 SPNT 0011 -MS40 4436 OPRTST 4547 RKEY0 4126 SPNUSE 4677 -MS41 4443 OPRTYP 4467 RKEY1 4137 SPOP00 4665 -MS42 4452 OPR1A 4333 RLAST 4054 SPOP04 4670 -MS43 4470 OPR2A 4405 RM214 4052 SPOP05 4675 -MULNEG 6126 OPR2B 4424 RTL6 3762 SPOP1J 4737 -MULT3 6257 OPR2T 4515 RTL6I 0143 SPOP10 4707 -M1 0112 OP1LST 2620 RTR6 3767 SPOP11 4710 -M10 0111 OP2LST 2642 RTR6I 0144 SPO123 4701 -M100 0107 OSRETN 3535 RUBO 4031 SQUOTE 5246 -M20 0110 OSSET 3527 RUBOE 4057 SSET 2047 -M200 0106 OSTYPE 3511 RUBOF 4061 SSKIP 3502 -M215 0105 OSUNPK 3540 RUBO1 4035 SSKIPI 0164 -M240 0104 OTABLE 4526 RUBO2 4047 START 6400 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 49-3 - -STCDF 6211 TYPEOP 4575 XDMLST 5261 XOCEX 2261 -STDEV 6426 TYPES 3600 XDMODE 1612 XOFFS 1642 -STERR 6551 TYPEX 5042 XDMODS 1621 XOLST 5223 -STJMP 5757 TYPE1 2400 XDMOPS 5265 XOOPS 5232 -STRLST 5301 TYPE2 2412 XDNAM 2464 XOPEN 1000 -STRMSK 2357 TYPE3 2431 XDUMP 0603 XOPEN1 2222 -STROPS 5326 TYPSI 0125 XDUM0 0610 XOPEN2 2237 -STSWEX 6532 TYPSTI 0124 XDUM1 0611 XOPS1 2634 -STSWIT 6471 TYPSTR 3605 XDUM2 0617 XOPS2 2643 -STSWO 6507 TYPSW 0017 XELST 5212 XOPS3 2655 -STSWS 6520 TYPTAB 5106 XEMODE 1647 XOPS4 2673 -STTLS 6536 UBLK 0062 XEMOD1 1655 XOPS5 2675 -SYMEND 4256 UCDF0 0525 XEOPS 5217 XOSIZ 2253 -SYMLIM 4433 ULOCH 0063 XERROR 0454 XOUTS 1624 -SYMNXT 4504 ULOCL 0064 XERR1 0465 XOUTS1 1633 -SYMPNT 4514 UPARR 0274 XERR2 0475 XPAC0 2620 -SYMS 4226 UPARR1 0306 XERR3 0505 XPAC1 2621 -SYMTYI 6276 UPCBLK 3362 XERR4 0515 XPAC2 2627 -SYMTYP 4475 USEUSR 0520 XEXIT 5160 XREWIN 2200 -TADICA 4554 USRAD 0102 XFCHR 0740 XROUT 4713 -TADIDP 4553 USRCDF 0541 XFICHN 1026 XRPLUS 4643 -TCHAR 5077 USRIN 0536 XFIERR 1006 XRSET 2343 -TEMP 0021 USROUT 0544 XFILE 1024 XSCAN 0600 -TEMPL 6306 USRSAV 0544 XFILEN 1021 XSET 1602 -TEMPST 0175 VERONE 0010 XFILL 1701 XSETN 1600 -TEMPV1 0033 VERSIO 0010 XFIOUT 1016 XSET1 1611 -TEMPV2 0034 VERTEN 0000 XFNUM 0737 XSHABS 1250 -TEMP1 0022 WBLK 3042 XFORM 0754 XSHBKS 1257 -TEMP2 0023 WCHEK 6200 XFSYM 0736 XSHBLK 1200 -TEMP3 0024 WCHEK1 6203 XGET 2500 XSHCCB 1400 -TERMS 5337 WCHEK2 6211 XGFORM 0727 XSHCC1 1414 -TERMT 5624 WCHEK3 6215 XIF 1713 XSHCC2 1416 -TERMTE 5646 WCHEK4 6222 XIFCR 1731 XSHCC4 1445 -TERMTI 5565 WCHEK5 6226 XIFSKP 1723 XSHCR 1204 -TERMT1 5633 WCHEK6 6232 XLIST0 0632 XSHDDE 1360 -THISOP 0003 WCHONE 6235 XLIS1 0633 XSHDEV 1347 -TICAD 6170 WCKLST 5461 XLIS2 0645 XSHERR 1530 -TIDPNT 2156 WCKOPS 5467 XLOCH 2365 XSHER1 1537 -TTAGN 3607 WERROR 2414 XLOCL 2366 XSHFIL 1232 -TWOCI 0127 WOPSL 4634 XLOW 1663 XSHFM 1303 -TWOCS 1761 WOPSLL 4674 XMASK 1636 XSHFMT 1277 -TWOT 0135 XASC1 2537 XMODCR 2465 XSHHDR 1455 -TYPALT 5101 XBLK 2364 XMODDN 2474 XSHHD1 1477 -TYPC 5076 XCLNAM 2310 XMODE 1666 XSHHD2 1502 -TYPCR 5104 XCLOSE 1004 XMODEF 2431 XSHLOW 1272 -TYPCTL 5120 XCLOS1 2272 XMODIF 2417 XSHMOD 1307 -TYPE 5061 XCLSIZ 2311 XMODS 1675 XSHMSK 1221 -TYPEA 5033 XCTLZ 2277 XMOD0 2436 XSHODL 1236 -TYPEAI 4056 XDDEV 1134 XMOD1 2441 XSHOFF 1225 -TYPEB 2405 XDDEV1 2200 XMOD2 2451 XSHOUT 1314 -TYPEC 5054 XDDEV2 2441 XNUM0 2506 XSHOW 1210 -TYPECI 0126 XDDNAM 2454 XNUM1 2512 XSHREL 1243 -TYPEI 0136 XDEV 1121 XNUM2 2514 XSHSMS 1321 -TYPEL 4517 XDEVM 2467 XNUM3 2524 XSHSM1 1332 -TYPEM 4523 XDLCOM 0647 XOBLK 2252 XSHSM2 1342 - /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 49-4 - -XSHUPP 1265 -XSHVER 1216 -XSMASK 2600 -XSMAS1 2605 -XSTRIN 2216 -XSTR0 2220 -XSTR1 2232 -XSTR10 2333 -XSTR11 2336 -XSTR2 2240 -XSTR3 2246 -XSTR4 2260 -XSTR5 2277 -XSTR6 2302 -XSTR7 2306 -XSTR8 2321 -XSTR9 2324 -XSTYPE 1203 -XS240O 5352 -XTEMP 1705 -XUPP 1660 -XVAL 0400 -XWBLK 2410 -XWORC 2033 -XWORCL 5277 -XWORD 2000 -XWOROP 5313 -XWOR1 2006 -XWOR2 2004 -XWOR3 2021 -XWOR4 2027 -XWOR5 2045 -XWOR7 2016 -XWRARG 2400 -XWRITE 2403 -XWSABS 2066 -XWSFRM 2071 -XWSRET 2100 -XWSTO 2074 -XXS20 2617 -YRBASE 5032 -YRTEST 5031 - - -ERRORS DETECTED: 0 -LINKS GENERATED: 165 - - DELETED src/os8-v3f/OS8.PA Index: src/os8-v3f/OS8.PA ================================================================== --- src/os8-v3f/OS8.PA +++ /dev/null @@ -1,4143 +0,0 @@ -/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 -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 - -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 - -0401; DATE - 0 - JMP I .+1 -CCLSW, PRQMRK /MODIFIED FOR CCL TO 'GETCCL' - IFNZRO CCLSW-435 - -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 - ZBLOCK 1 /A FREE LOCATION! - - IFNZRO .-1362 - -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 - *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) - 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 - -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 -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 /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 - - - *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 - $ - DELETED src/os8-v3f/RESORC.BI Index: src/os8-v3f/RESORC.BI ================================================================== --- src/os8-v3f/RESORC.BI +++ /dev/null @@ -1,12 +0,0 @@ -$JOB ASSEMBLE AND LINK RESORC.MA -.MAC OUT:RESORC 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 + 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= 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 + 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 Index: src/os8/v3f/CCL.BI ================================================================== --- /dev/null +++ src/os8/v3f/CCL.BI @@ -0,0 +1,45 @@ +$JOB ASSEMBLE AND LINK CCL.MA +.MAC OUT:CCLPS + ZBLOCK 1 /A FREE LOCATION! + + IFNZRO .-1362 + +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 + *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) - 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 + +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 +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 /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 + + + *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 Index: src/os8/v3f/RESORC.BI ================================================================== --- /dev/null +++ src/os8/v3f/RESORC.BI @@ -0,0 +1,12 @@ +$JOB ASSEMBLE AND LINK RESORC.MA +.MAC OUT:RESORC