Index: bin/os8-cp ================================================================== --- bin/os8-cp +++ bin/os8-cp @@ -55,10 +55,15 @@ progmsg = True DEBUG = False VERBOSE = False QUIET = False + +# Default RK05 system image to attach if no sys specified. +_default_sys_image = "os8v3d-patched.rk05" +_default_sys_path = dirs.os8mo + _default_sys_image +_default_att_spec = ["rk", "0", _default_sys_path] # Regex for parsing an argument string into a sys device _dev_arg_regex_str = "-(rk|td|dt|rx)(\d?)(s)?" _dev_arg_re = re.compile(_dev_arg_regex_str) @@ -363,17 +368,21 @@ If you give only one file name argument, the program always errors out: it requires at least one source and one destination. The -a, -b, -i, -y, and -z flags correspond to the OS/8 PIP options: + /A ASCII format. OS/8 and POSIX newlines are translated. Such transfers are lossless if line endings are well-formed. /B Binary OS/8 ABSLDR format with leader/trailer and other specific formatting that is detected and enforced by PIP. /I Image mode. Files are copied byte for byte verbatim. /Z ZERO directory of destination OS/8 device. /Y Yank system area from source to destination. + + If no format flag is set, the default transfer format is /I. + (This priogram currently uses PIP as its primary handler for the OS/8 side of the work.) They must be followed by at least one source file name, and they affect all subsequent source file names until another such option is found. For example: @@ -454,11 +463,11 @@ idx = 1 numargs = len(sys.argv) filespec_seen = 0 - mode_opt = "b" # start of with default of binary. + mode_opt = "i" # start of with default of binary. first_mode = mode_opt source = "" destination = "" # Keep file_list and mode_list in sync. file_and_mode_list = [] @@ -607,10 +616,11 @@ # s.set_logfile (os.fdopen (sys.stdout.fileno (), 'w', 0)) s.set_logfile (open ("logfile.txt", 'w')) # Perform sys attach att_spec = action_plan["sys"] + if att_spec == None: att_spec = _default_att_spec simh_boot_dev = att_spec[0] + att_spec[1] # Compose simh dev from name and unit. imagename = att_spec[2] if not os.path.exists (imagename): abort_prog ("Requested boot image file: " + imagename + " not found.") if VERBOSE or DEBUG: Index: lib/simh.py ================================================================== --- lib/simh.py +++ lib/simh.py @@ -161,12 +161,11 @@ def __init__ (self, basedir, ignore_gpio_lock = False): # Start the simulator instance self._child = pexpect.spawn(basedir + '/bin/pidp8i-sim') self._valid_pip_options = ["/A", "/B", "/I"] - self._os8_file_regex_str = "(\S+):(\S+)?" - self._os8_file_re = re.compile(self._os8_file_regex_str) + self._os8_file_re = re.compile("(\S+):(\S+)?") self._os8_error_match_strings = [] self._os8_fatal_check = [] # Parse our OS/8 Errors table into actionable chunks for error_spec in self._os8_errors: Index: libexec/mkos8 ================================================================== --- libexec/mkos8 +++ libexec/mkos8 @@ -58,10 +58,11 @@ # Name of the RK05 disk image files we create _bin_rk05 = "os8v3d-bin.rk05" _src_rk05 = "os8v3d-src.rk05" _patched_rk05 = "os8v3d-patched.rk05" +_v3f_build_rk05 = "os8-v3f-build.rk05" # Parser regexps used in patcher _com_os8_parse_str = "^\.([a-zA-Z]+)\s?(.*)$" _com_os8_parse = re.compile(_com_os8_parse_str) _com_split_str = "^([a-zA-Z]+)\s?(.*)$" @@ -69,15 +70,26 @@ _odt_parse_str = "^([0-7]+)\s?/\s?(\S+)\s+([0-7;]+)" _odt_parse = re.compile(_odt_parse_str) #### mkos8_abort ###################################################### # Fatal error. Abort mkos8 +# Assumes we are in SIMH context. Quit SIMH def mkos8_abort (s): print "Fatal Error. Cannot proceed." s.quit () exit (-1) + +#### mkos8_abort_os8 ################################################## +# Fatal error. Abort mkos8 +# Assumes we are in os8 context. Exit to SIMH, then quit SIMH. + +def mkos8_abort_os8 (s): + print "Fatal Error. Cannot proceed." + s.back_to_cmd("\\.") + s.quit () + exit (-1) #### check_exists ###################################################### # Check existence of all files needed @@ -785,17 +797,111 @@ s.os8_squish ("SYS") s.os8_squish ("DSK") s.back_to_cmd("\\.") s.send_cmd ("detach rk0") +#### make_system_tape ################################################## +# Make and install new OS/8 System Head. +# ISSUE: Doing this will probably break the LC/UC batch scripts. + +#### call_pal8 ######################################################### +# Generic call out to PAL8 with error recovery. +# We rely on the caller to have good specifications for source, +# binary and optional listing files. + +def call_pal8 (s, source, binary): + pal8_replies = ["ERRORS DETECTED: ", "BE\s+\S+", "CF\s+\S+", "DE\s+\S+", "DF", "IC\s+\S+", "ID\s+\S+", + "IE\s+\S+", "II\s+\S+", "IP\s+\S+", "IZ\s+\S+", "LD\s+\S+", "LG\s+\S+", "PE\s+\S+", + "PH\s+\S+", "RD\s+\S+", "SE\s+\S+", "UO\s+\S+", "US\s+\S+", "ZE\s+\S+", "\S+ NOT FOUND"] + + # Build OS/8 System head by using PAL-8 to assemble OS8.PA and CD.PA + if progmsg: print "Assembling " + source + com_line = binary + "<" + source + s.os8_send_cmd ("\\.", "R PAL8") + s.os8_send_cmd ("\\*", com_line) + err_count = 0 + reply = s._child.expect (pal8_replies) + executed_line = s._child.before.strip() + reply_str = s._child.after.strip() + if reply == 0: + s._child.expect("\d+") + err_count = int(s._child.after.strip()) + reply_str += " " + s._child.after.strip() + if reply > 0 or err_count > 0: + print "PAL8 Error: " + print "\t*" + executed_line + print "\t" + reply_str + s.os8_send_ctrl ('c') # exit PAL8 Just in case. + # We could do something better than just dying, I expect. + mkos8_abort_os8(s) + # s.os8_send_ctrl ('[') # exit PAL8 + + +#### make_v3f ########################################################## +# Create an RK05 image containing the OS/8 v3f sources on partition A. +# Build binaries for them into partition B. + +def make_v3f (s, args): + sys_path = dirs.os8mo + _patched_rk05 + build_path = dirs.os8mo + _v3f_build_rk05 + + if not os.path.isfile(sys_path): + print "System pack: " + sys_path + " not found." + mkos8_abort(s) + if not os.path.isfile(build_path): + print "OS/8 V3F build image: " + build_path + " not found." + mkos8_abort(s) + + s.send_cmd ("attach rk0 " + sys_path) + s.send_cmd ("attach rk1 " + build_path) + s.send_cmd ("boot rk0") # We're running OS/8. Let's build! + + # Build BUILD + if progmsg: print "Building BUILD." + call_pal8(s, "RKA1:BUILD.PA","RKB1:BUILD.BN") + if progmsg: print "Loading and savinging BUILD.SV to RKB1:" + s.os8_send_cmd ("\\.", "R ABSLDR") + s.os8_send_cmd ("\*", "RKB1:BUILD.BN") + s.os8_send_ctrl ('[') + s.os8_send_cmd ("\\.", "SAVE RKB1:BUILD.SV") + + call_pal8(s, "RKA1:OS8.PA", "RKB1:OS8.BN") + call_pal8(s, "RKA1:CD.PA", "RKB1:CD.BN") + + # Build RESORC and CCL + if progmsg: print "Preparing to build CCL and RESORC with BATCH scripts." + + s.os8_send_cmd ("\\.", "ASSIGN RKA1 IN") + s.os8_send_cmd ("\\.", "ASSIGN RKB1 OUT") + + # BATCH scripts must be on the SYSTEM device. DSK: will work. + s.os8_send_cmd ("\\.", "COPY DSK:1 HERE + SNA CLA + ISZ TEMP + TAD TEMP + CLL CMA + TAD HIFLD + SNL CLA /WHICH HAS MORE CORE? + JMP .+3 /TARGET MACHINE: TOUGH + TAD TEMP /HOST MACHINE + DCA HIFLD /FAKE OUT LOADER + TAD HIFLD + CIA + DCA I (FLDCNT /INIT CI BUILDER + TAD I (FLDCNT + DCA I (MYCORE /AND CI STARTER + CDF 10 + DCA I (7646 /CLEAR =N BITS + DCA I (7643 /AND EARLY OPTIONS + TAD I (7644 /GET OPTION BITS + CDF + RTL + SZL CLA /HAVE N SWITCH? + JMP NOTDSY /NEVER SEES TD8E SYSTEM + TAD HIFLD + CLL RAR + SNA CLA /HAVE OVER 8K CORE? + JMP NOTDSY + TAD (NOP + DCA I (GOTTD /YES: FORCE SYS=TD8E + CLA IAC +NOTDSY, DCA I (TDFLAG /NOT 0 MEANS HAVE TD8E + CMA + DCA I (ERMSG /FORCE LOAD ABORT +LSTART, TAD (BLDCI-1 /MOVE CI BUILDER + DCA X10 /INTO LOW CORE + TAD (MAKECI-1 + DCA X11 + TAD I X11 + DCA I X10 + ISZ ICTR + JMP .-3 + TAD HIFLD /START OF BLOAD V1 + DCA FREEHI + JMP I IMAGE /RETURN TO LOADER + +ICTR, -200 +CCLIST, 0 /1ST 4 WORDS OF CCB + 6203 + CISTRT + 1000 /JOB STATUS WORD + + PAGE + CCB=1000 /LOC TO START BUILDING CCB + +MAKECI, 0 /THIS PAGE GETS MOVED! + TSF + JMP .-1 /SEE TAG "ABORT" IN BLOAD V1 + ISZ I (ERMSG /WHY ARE WE HERE? + JMP BOSFIX /GENUINE ABORTION + TAD (CCB-1 + DCA X10 + TAD (CCLIST-1 + DCA X11 + TAD I X11 /1ST FOUR WORDS OF CCB + DCA I X10 + ISZ MKCCNT + JMP .-3 +CCSEGS, TAD FLDCNT + CLL CIA RAL + RTL /THIS FIELD + DCA TEMP + TAD (70 + AND CODCDF /LOWEST FIELD USED + CLL CIA + TAD TEMP + SNL /THIS FIELD USED? + JMP NOCODE /NO: BYPASS IT + SZA CLA /IS IT FULL? + JMP ALLCODE /YES + TAD CODBGN /PROBABLY NOT + AND (7400 + DCA TEMP2 + TAD TEMP2 + CIA + CLL RAR + TAD TEMP + DCA TEMP + TAD TEMP2 +ALLCODE,DCA I X10 + TAD FLDCNT + IAC + TAD TDFLAG + SMA CLA /NEED TOP PAGE? + TAD (3700 /NO: 37 PAGES + TAD TEMP /YES: 40 PAGES + AND K3777 + DCA I X10 + ISZ I (CCB +NOCODE, CLA CLL + ISZ FLDCNT /NEXT FIELD ZERO? + JMP CCSEGS /NO: LOOP + TAD FLGRTS + SZA CLA /NEED BRTS? + TAD (CISTRT + DCA I X10 + TAD FLGRTS + SZA CLA + TAD (300-3700 + TAD (3700 + DCA I X10 + TAD I (CCB + CMA + DCA I (CCB /NEGATE SEG COUNT + JMS I (7607 /READ CI STARTER + 300 /FROM END OF BLOAD.SV + CISTRT /INTO HI CORE +LDRBLK, 0 /INIT BY "IMAGE" +BOSPT1, 7600 /CAN'T GET THIS ERROR + JMS I JCIP + TAD TDFLAG /PASS TD8E FLAG + DCA I (FLAGTD + TAD FLGRTS + DCA I (RTSFLG /AND BRTS FLAG + TAD MYCORE + DCA I (NOCORE /AND CORE LIMIT + TAD (17 /SAVE 10 KEY LOCATIONS + DCA X10 + TAD (KEYLOC-1 + DCA X11 + TAD I X10 + DCA I X11 + ISZ MCICNT + JMP .-3 + JMS I (7607 /CALL SYS HANDLER + 4200 /TO WRITE CCB + CCB-200 /(AND PRECEDING PG) + 37 /INTO SCRATCH BLOCK +K3777, 3777 /CAN'T GET THIS ERROR + JMP I (EXEUIT + +MKCCNT, -4 +MCICNT, -12 +FLDCNT, -7 +TDFLAG, 1 /0 MEANS TD8E IS DEATH AT RT +FLGRTS, -1 /0 MEANS INCL BRTS IN CI + +BOSFIX, TAD I (BIPCCL + RAL + SMA CLA + JMP I MAKECI /BATCH NOT RUNNING + TAD I (7777 + AND (70 + TAD CDFZRO + DCA BOSCDF /CDF TO BATCH FIELD +BOSLUP, CDF 10 + TAD I BOSPT1 /GET BATCH WRDS +BOSCDF, CDF 10 + DCA I BOSPT2 /BACK INTO POSITION +CDFZRO, CDF + ISZ BOSPT1 + ISZ BOSPT2 + JMP BOSLUP + JMP I MAKECI + +BOSPT2, 7774 +MYCORE, 0 +JCIP, CIPAT + + PAGE + VERNUM, 0 + TAD (VTEXT + DCA TEMP +MOREV, TAD I TEMP + SNA + JMP VOUT + CLL RTR + RTR + RTR + JMS I (TTY + TAD I TEMP + JMS I (TTY + ISZ TEMP + JMP MOREV +VOUT, TAD (215 + JMS I (TTX + TAD (212 + JMS I (TTX + JMP I VERNUM + +VTEXT, TEXT /BLOAD V/ + *.-1 +VERLOC, 100^VERSON+6001 + 0 + + PAGE + *7000 + BSTART=200 /START ADDR FOR BRTS +CISTRT, SKP /RUNNED + JMP CHAIN /CHAINED + TAD (7603 + DCA X10 + TAD (NAMLST-1 + DCA X11 + CDF 10 + DCA I X10 /ZERO EDITOR + DCA I X10 /COMPILER + DCA I X10 /AND LOADER BLOCK #S + CDF + CIF 10 + JMS I (7700 + 10 /USRIN +FINDSV, TAD I X11 /LOOKUP SOME SAVE FILES + SNA + JMP LUBUF /GO LOOK FOR BASIC.UF + DCA XXXXSV /SAVE POINTER TO NAME + CLA IAC /THEY'RE ON SYS + CIF 10 + JMS I (200 + 2 +XXXXSV, 0 + 0 + JMS I (ERRORX /ERROR + TAD XXXXSV /GET STARTING BLOCK + IAC /PLUS 1 + CDF 10 + DCA I X10 /INTO INFO AREA + CDF + JMP FINDSV /LOOP +LUBUF, CLA IAC + CIF 10 + JMS I (200 /LOOKUP BASIC.UF + 2 + BUFN /(USER DEFINED FUNCTIONS) + 0 + JMP .+3 /OK IF NOT THERE + TAD .-3 /GET STARTING BLOCK +1 + IAC + CDF 10 + DCA I X10 /INTO INFO BLOCK + CDF 0 + CIF 10 + JMS I (200 + 11 /USR OUT +CHAIN, CDF 10 + TAD I (7607 /GET BRTS STARTING BLK + CDF + DCA I (BRTSST /INTO RTS READER + JMP I (BINIT + +NAMLST, BRTSN + BAFN + BSFN + BFFN + 0 +BRTSN, FILENAME BRTS.SV +BAFN, FILENAME BASIC.AF +BSFN, FILENAME BASIC.SF +BFFN, FILENAME BASIC.FF +BUFN, FILENAME BASIC.UF + CORE, 0 + TAD I (BIPCCL + AND COR70 + CLL RAR + RTR + SZA /IS THERE A SYSTEM VALUE? + JMP I CORE /YES: USE IT +COR0, CDF + TAD CORSIZ + RTL + RAL + AND COR70 + TAD COREX + DCA .+1 +COR1, CDF + 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 + CLA CMA /HI FIELD IS #FIELDS-1 + TAD CORSIZ + JMP I CORE +CORLOC, CORX +CORV, 1400 +CORSIZ, 1 + + PAGE + GETRTS, 0 /READ BRTS INTO 0-6777 + TAD BRTS + DCA BRTSBB + JMS I (7607 + BRTSIZ + 0 +BRTSBB, 0 +NOCORE, -1 /CAN'T GET THIS ERROR + JMP I GETRTS +BINIT, ISZ RTSFLG /NEED BRTS? + JMP BRTSIN /GOT IT: START IT + JMS I (7607 + BRTSIZ + 0 +BRTSST, 0 +SR2, 20 /CAN'T GET THIS ERROR +BRTSIN, AC7775 /TEST IF GENUINE 2 PAGE SYSTEM HANDLER + TAD I (7612 + SZA CLA /SKP IF YES + JMP PSADJ /ELSE SKIP CDF ADJUSTMENT + TAD FLAGTD + SNA CLA /IMAGE OK ON TD8E? + JMS ERRORX /NO: DONT RUN IT + TAD KEYLOC /GET NEW FIELD BITS + AND (70 + DCA CDFTOP +PTCHLP, TAD I PTCHPT /RANGE CHECK A WORD + TAD (-6300 + CLL + TAD (70 + SNL CLA /SKP IF CDF N0 + JMP NOPTCH + TAD I PTCHPT /ISOLATE CDF INSTR + AND (7707 + TAD CDFTOP + DCA I PTCHPT /STORE IT BACK +NOPTCH, ISZ PTCHPT + JMP PTCHLP + TAD KEYLOC + DCA CDFTOP +SWPLOOP,CDF 20 + TAD I TDCTR + DCA GETRTS +CDFTOP, CDF 70 + TAD I TDCTR + DCA ERRORX + TAD GETRTS + DCA I TDCTR + CDF 20 + TAD ERRORX + DCA I TDCTR + ISZ TDCTR + JMP SWPLOOP + CDF +CCHEK, ISZ EKOUNT + JMS I (CORE /HOW MUCH CORE DO WE HAVE? + TAD NOCORE /HOW MUCH DO WE NEED? + SPA CLA + JMS ERRORX /INSUFFICIENT CORE + TAD I SR1 /RESTORE KEY LOCATIONS + DCA I SR2 + ISZ SR1 + ISZ SR2 + ISZ SR3 + JMP .-5 + TAD (JMP I FSTOP1 /PATCH CTRL/C LOCS + DCA I (7600 + TAD (JMP I FSTOP1 + DCA I (7605 + TAD SWPINF /TELL BRTS OS/8 PG 17600 OUT NOW + RAR + STL RAL + DCA SWPINF + JMP I (BSTART /START BRTS +PTCHPT, 7635 + +ERRORX, 0 + CIF 10 + JMS I (7700 + 7 +EKOUNT, 1 + JMP I (7605 + +EXEUIT, TAD RTSFLG + SNA CLA /NEED BRTS? + JMS GETRTS /YES: READ IT + TAD (4207 /RESTORE ^C HOOKS + DCA I (7600 + TAD (6213 + DCA I (7605 + JMP I (7600 /BACK TO OS8 +KEYLOC, ZBLOCK 12 +SR1, KEYLOC +SR3, -12 +RTSFLG, -1 /0 MEANS BRTS IS IN CORE +FLAGTD, 1 /1 IF TD8E IS OK AT RUNTIME +PSADJ, TAD (4001 + AND KEYLOC+11 + TAD (2000 + DCA KEYLOC+11 + JMP CCHEK +TDCTR, 7600 + + PAGE + $$$$$ + ADDED src/os8-v3f/BOOT.PA Index: src/os8-v3f/BOOT.PA ================================================================== --- /dev/null +++ src/os8-v3f/BOOT.PA @@ -0,0 +1,847 @@ +/BOOT.PA 17 +/OS/8 V3D WITH RL01,RX02 AND VXA0 DEVICES +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /SR + +/FIXES MADE FOR MAINTENANCE RELEASE: + +/1. ADDED RX01 (FLOPPY BOOTSTRAP) +/2. LEFT PATCH SPACE IN NAME TABLE + +/ 26-DEC-77 + +/1. ADDED RL BOOTSTRAP (S.R.) + + + *1 + HLT + JMP I (7600 + *100 + +INNER, 0 +OUTR, -20 +CODE, 0 +LENGTH, 0 + *200 + +START, CLA /ALLOW BEING CHAINED TO + TAD I (7600 + SPA CLA + JMP OS8IN + ISZ INNER + JMP .-1 + ISZ OUTR + JMP .-3 + JMS I (TESTRK +COSIN, TAD I (7776 +COMN, CIA + DCA CODE + TAD (TABLE + DCA PTR +LOOP, TAD I PTR + SNA + JMP I (OS8 + TAD CODE + SZA CLA + JMP NXT + IOF + ISZ PTR + TAD I PTR + DCA OLDLOC + ISZ PTR + TAD I PTR + DCA NEWLOC + ISZ PTR + TAD I PTR + CIA + DCA LENGTH +XXLUP, TAD I OLDLOC + DCA I NEWLOC + ISZ OLDLOC + ISZ NEWLOC + ISZ LENGTH + JMP XXLUP + ISZ PTR + TAD I PTR + DCA TEMP + TAD HLTSWT + SNA CLA + HLT + CLL + JMP I TEMP +HLTSWT, 1 + +NXT, TAD PTR + TAD (5 + DCA PTR + JMP LOOP + +OLDLOC, 0 +NEWLOC, 0 +PTR, 0 +SCAN, 0 +OS8IN, TAD I (7600 + TAD (-4207 + SZA CLA + JMP I (RETRY + TAD I (1000 + TAD (777 + SNA CLA + TAD (600 + TAD (1000-1 + DCA SCAN +SKAN, ISZ SCAN + TAD I SCAN + SNA + JMP I (RETRY + AND (177 + TAD (-"/!7600 + SZA CLA + JMP SKAN + ISZ SCAN + TAD I SCAN + AND (77 + CLL RTL + RTL + RTL + DCA TEMP + ISZ SCAN + TAD I SCAN + AND (77 + TAD TEMP + DCA TEMP + ISZ SCAN + TAD I SCAN + AND (177 + TAD (-".!7600 + DCA HLTSWT + TAD TEMP + JMP COMN + +TEMP, 0 + PAGE +TABLE, 2403 /TC + DECTAP + 7554 + 25 + 7554 + + 2213 /RK +RKADR, RK8 + 21 + 11 + 21 + + 2404 /TD + TD8E + 7277 + 34 + 7277 + + 1424 /LT + LINCTP + 4400 + 7 + 4400 + + 2206 /RF + RF08 + 7746 + 7 + 7746 + + 2024 /PT + BINLDR + 7626 + 152 + 7700 + + 3205 /ZE + ZERO + 4 + 6 + 4 + + 2431 /TY + TYPSET + 7730 + 42 + 7730 + + 0414 /DL + DIAL + 4012 + 6 + 4012 + + 0301 /CA + CAS + 4000 + 40 + 4000 + + 0415 /DM + DSKMON + 171 + 16 + 174 + + 2605 /VE + VERS + VERS + 1 + VERS + + 0424 /DT + TAPE + TAPE + 1 + TAPE + + 0413 /DK + DISK + DISK + 1 + DISK + + 2205 /RE + RK8E + 21 + 11 + 21 + + 2523 /US + 1 + 1 + 1 + RETRY + + 2230 /RX + RX01 + RX8E + 42 + RXSTRT + + 2214 /RL + RL01 + 1 + 35 + 1 + + 2630 /VX + VXA0 + 0 + 7 + 0 + ZBLOCK 3^5 /PATCH SPACE + + 0 + +/FORMAT: + +/SIXBIT OF 2-CHARACTER NAME +/ADDRESS OF BOOTSTRAP CODE IN BOOT +/ADDRESS WHERE BOOTSTRAP CODE IS TO BE MOVED TO +/LENGTH OF BOOTSTRAP IN WORDS +/STARTING ADDRESS OF BOOTSTRAP +DECTAP, 7600 + 6774 + 1374 + 6766 + 6771 + 5360 + 7240 + 1354 + 3773 + 1354 + 3772 + 1375 + 6766 + 5376 + 7754 + 7755 + 0600 + 0220 + 6771 + 5376 + RK8, 6732 + 6751 + 6745 + 5023 + 6742 + 6753 + 6755 + 6733 + 5031 + +RK8E, 7000 + 7000 + 7000 + 7000 + 7201 + 6742 + 6742 + 6743 + 5031 +TD8E, 6007 + 1312 + 4312 + 4312 + 6773 + 5303 + 6777 + 3726 + 2326 + 5303 + 5732 + 2000 + 1300 + 6774 + 6771 + 5315 + 6776 + 0331 + 1327 + 7640 + 5315 + 2321 + 5712 + 7354 + 7756 + 7747 + 0077 + 7400 +LINCTP, 6141 + 1020 + 0020 + 0004 + 0700 + 0000 + 6020 +RF08, 6643 + 6615 + 7600 + 6603 + 6622 + 5352 + 5752 +/ 1000 IS OS/8 LINE BUUFFER +/ 1600 IS PS/8 LINE BUFFERE + + *2000 + +BINLDR, 0000 + 3212 + 4260 + 1300 + 7750 + 5237 + 2212 + 7040 + 5227 + 1212 + 7640 + 5230 + 1214 + 0274 + 1341 + 7510 + 2226 + 7750 + 5626 + 1214 + 0256 + 1257 + 3213 + 5230 + 0070 + 6201 + 0000 + 0000 + 6031 + 5262 + 6036 + 3214 + 1214 + 5660 + 6011 + 5270 + 6016 + 5265 + 0300 + 4343 + 7041 + 1215 + 7402 + 6032 + 6014 + 6214 + 1257 + 3213 + 7604 + 7700 + 1353 + 1352 + 3261 + 4226 + 5313 + 3215 + 1213 + 3336 + 1214 + 3376 + 4260 + 3355 + 4226 + 5275 + 4343 + 7420 + 5336 + 3216 + 1376 + 1355 + 1215 + 5315 + 0000 + 3616 + 2216 + 7600 + 5332 + 0000 + 1376 + 7106 + 7006 + 7006 + 1355 + 5743 + 5262 + 0006 + 0000 + 0000 + 6014 + 6011 + 5357 + 6016 + 7106 + 7006 + 7510 + 5374 + 7006 + 6011 + 5367 + 6016 + 7420 + 3776 + 3376 + 5357 + 0000 + 5301 +ZERO, 1005 + 3410 + 5004 + 5404 + 0011 + 2010 +DIAL, 6141 + 1020 + 0020 + 0004 + 0701 + 7300 +/ 7300 +/ 6002 +/ 6042 +/ 6022 +/ 6012 +/ 6032 +/ 6601 +/ 6764 +/ 1221 +/ 3010 +/ 1622 +/ 2222 +/ 7450 +/ 5620 +/ 3410 +/ 5212 +/ 7730 +/ 7727 +/ 0223 +TYPSET, 6774 + 1347 + 4341 + 7240 + 1353 + 3355 + 1352 + 4341 + 5753 + 7777 + 6766 + 3354 + 6771 + 5344 + 5741 + 4600 + 7777 + 7777 + 4220 + 7400 + 7777 + 7777 + 7777 + 6014 + 6011 + 5360 + 7106 + 6012 + 7420 + 5357 + 5756 + 4356 + 3373 + 4356 +VXA0, 7200 +1206 + 6200 + 6207 + 5605 + 0000 + 7000 +PTCLEV, "A +L3, "5 +LV, "V +VERS, TAD LV + JMS I (PUT + TAD L3 + JMS I (PUT + TAD PTCLEV + JMS I (PUT + JMP I PRETRY +PRETRY, RETRY + DSKMON, 7577 + 7750 + 7751 + 1171 + 3572 + 1172 + 3573 + 6643 + 6615 + 6603 + 6602 + 5203 + 5606 + 7600 +CAS, 1237 + 1206 + 6704 + 6706 + 6703 + 5204 + 7264 + 6702 + 7610 + 3211 + 3636 + 1205 + 6704 + 6706 + 6701 + 5216 + 7002 + 7430 + 1636 + 7022 + 3636 + 7420 + 2236 + 2235 + 5215 + 7346 + 7002 + 3235 + 5201 + 7737 + 3557 + 7730 + LCD=6751 + SDN=6755 + SER=6754 + STR=6753 + XDR=6752 + +RX01, RELOC 20 +RX8E, +/ DEVICE IOT SYMBOLIC EQUATES +/ +LCD=6751 /LOAD COMMAND +XDR=6752 /TRANSFER DATA +STR=6753 /SKIP IF READY TO TRANSFER +SER=6754 /SKIP ON ERROR +SDN=6755 /SKIP ON DONE +/ +/ +/ +/ +READ, TAD UNIT /TRY NEXT COMBINATION OF DENSITY AND UNIT + TAD CON360 /ADDING IN 360 + AND CON420 /KEEPING ONLY 420 BITS + DCA UNIT /CYCLES 400,420,0,20,400,,,,,,,, + CLL CLA CML IAC RTL /COMMAND TO READ DISK - MUST BE ON OMNIBUS! + TAD UNIT /UNIT AND DENSITY + LCD /COMMAND TO CONTROLLER + CLL CLA IAC /TO SET SECTOR AND TRACK TO 1 + JMS LOAD /SECTOR TO CONTROLLER, LEAVES AC ALONE + JMS LOAD /AND TRACK +LITRAL, 7004 /LEAVING A 2 IN AC; SERVES AS LITERAL +/ +/ FOLLOWING IS PART OF WAIT LOOP, SAME SECONDARY BOOTS, OLD PRIMARY BOOT +/ +RXSTRT, +XSTRT, SDN /HAS DONE COME UP; CODE STARTS HERE! + JMP LOAD+1 /NO, GO CHECK FOR READY TO TRANSFER +/ +/ NOW, DONE OR ERROR +/ + SER /SKIP ON AN ERROR, TRY ANOTHER DENSITY ETC. + SNA /NASTY, AC=2 FOR ABOUT TO DO SILO, 0 ON START-UP + JMP READ /START-UP, GO SET UP UNIT, THEN READ TO SILO + TAD UNIT /AC ALREADY 2, PUT IN UNIT, DENSITY + LCD /TO EMPTY THE SILO + TAD UNIT /SET UP LOC 60 FOR OLD SECONDARY BOOT + AND CON360 /KEEPING UNLY DENSITY BIT + TAD LITRAL /ADDING IN 7004, BECAUSE THAT'S WHAT SYS WANTS + DCA RX1SAV /OLD SECONDARY BOOT MOVES IT TO HANDLER +CON360, 360 /LITERAL; EXECUTES IN LINE AS A NO-OP +/ /FALLS THRU TO NEXT PAGE OF LISTING +/ +/ +/ FOLLOWING CODE SAME AS OLD PRIMARY BOOT +/ + JMS LOAD /GRAB NEXT ITEM FROM SILO + DCA 2 /TRADITION; SECONDARY BOOT STARTS LOADING AT 2 ! + ISZ 50 /INCREMENT LOAD ADDRESS + JMP 47 /GO BACK FOR ANOTHER +/ +/ SECONDARY BOOT LOADS OVER PRIMARY BOOT UNIT LOCATION 47 IS LOADED, +/ THEN CONTROL PASSES TO SECONDARY BOOT +/ +LOAD, 0 /SUBROUTINE TO GIVE AND TAKE DATA FROM CONTROLLER + STR /IS HE READY TO TALK TO US? + JMP XSTRT /NO, IS HE PERHAPS DONE WITH SILO, OR IN ERROR? + XDR /YES, DATA IN OR OUT;IF DATA TO CONTROLLER, AC UNCHANGED + JMP I LOAD /NO MAGIC, JUST EXIT FROM SUBROUTINE +/ +/ 60 GOES TO OLD SECONDARY BOOT +/ 61 HAS DENSITY AND UNIT THAT BOOTED SUCCESSFULLY +/ +/ +CON420, /USE IT TO HOLD 420 LITERAL TO START OUT +RX1SAV, 420 /UNIT^20+7004 TO GO TO SYS HANDLER +UNIT, 20 /+ THAT BOOTED OK +/ + + RELOC + PAGE +L2213, 2213 + DIML=6615 +DISK, CLA IAC + DIML + SNA CLA + JMP GOTRF + TAD (70 + 6732 + SNA CLA + JMP GOTRK8 + CLA IAC + 6744 + SZA CLA + JMP I PRETR + STA /RE +GOTRF, TAD L2206 /RF + JMP I PCOMN +L2206, 2206 +GOTRK8, TAD L2213 /RK + JMP I PCOMN +PRETR, RETRY +TAPE, 6141 /LINC + 17 /COMPL AC + 2 /PDP + IAC + SNA CLA + JMP GOTLTA + TAD (70 + 6774 + CLA + 6772 + NOP + TAD M70 + SNA CLA + JMP GOTTC + STL CLA RAR + 6774 + CLA + 6776 + SMA CLA + JMP I PRETR +GOTTD, CLA IAC +GOTTC, TAD L2403 /TC + JMP I PCOMN +GOTLTA, TAD L1424 /LT + JMP I PCOMN +L1424, 1424 +L2403, 2403 +PCOMN, COMN +M70, -70 +/ 0000 +CRLF, 0 + TAD L215 + JMS PUT + TAD L212 + JMS PUT + JMP I CRLF + +L215, 215 +L212, 212 + +PUT, 0 + TLS + TSF + JMP .-1 + CLA + JMP I PUT + +GET, 0 + KSF + JMP .-1 + KRB + AND (177 + TLS + TSF + JMP .-1 + TAD (-003 + SNA + JMP I (7605 + TAD (003-177 + SNA + JMP I (RETRY + TAD (177-015 + SNA + ISZ GET + TAD (015 + AND (77 + JMP I GET + +TESTRK, 0 + TAD (70 + 6732 + SNA CLA + JMP I TESTRK +RK05, TAD (RK8E + DCA I (RKADR + JMP I TESTRK + PAGE +OS8, TAD ("N + JMS I (PUT + TAD ("O + JMS I (PUT + CLA IAC + DCA I (HLTSWT +RETRY, JMS I (CRLF + TAD ("/ + JMS I (PUT + JMS I (GET + SKP + JMP RETRY + CLL RTL + RTL + RTL + DCA I (TEMP + JMS I (GET + SKP + JMP RETRY + TAD I (TEMP + DCA I (TEMP + JMS I (GET + JMP .-1 + CLA + JMS I (CRLF + TAD I (TEMP + JMP I (COMN +RL01, 6600 + 7201 + 4027 + 1004 + 4027 + 6615 + 7002 + 7012 + 6615 + 0025 + 7004 + 6603 + 7325 + 4027 + 7332 + 6605 + 1026 + 6607 + 7327 + 4027 + 0377 + 7600 + 0000 + 6604 + 6601 + 5031 + 6617 + 5427 + 5001 + PAGE + FIELD 0 + *200 + $ + ADDED src/os8-v3f/BPAT.PA Index: src/os8-v3f/BPAT.PA ================================================================== --- /dev/null +++ src/os8-v3f/BPAT.PA @@ -0,0 +1,35 @@ +/1 RL01 PATCH FOR BRTS + + *1345 +HFIX, 0 + CLL STA RTL /AC7775 + TAD I H7612 + SZA CLA /SKP IF 2 PAGE HANDLER + JMP I HFIX /ELSE EXIT NOW +FIXLUP, TAD I FIXPTR /GET A WORD FROM HANDLER + TAD M6300 + CLL /RANGE CHECK FOR CIF/CDF N0 + TAD H70 + SNL CLA /SKP IF CDF OR CIF + JMP NOFIX /ELSE DON'T FIX IT + TAD I FIXPTR /GET INSTRUCTION + AND H7707 /ZERO FIELD BITS + TAD H20 /PUT BACK FIELD 2 + DCA I FIXPTR /STORE INSTRUCTION BACK +NOFIX, ISZ FIXPTR + JMP FIXLUP + JMP I HFIX /--RETURN-- +FIXPTR, 7635 +H20, 20 +H70, 70 +H7612, 7612 +H7707, 7707 +M6300, -6300 + + FIELD 1 + *4526 +PSWP2P, 0 + *4543 + JMS I PHFIX + JMP I PSWP2P +PHFIX, HFIX ADDED src/os8-v3f/BUILD.PA Index: src/os8-v3f/BUILD.PA ================================================================== --- /dev/null +++ src/os8-v3f/BUILD.PA @@ -0,0 +1,3751 @@ +/33 OS/8 V3D BUILD +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1971,1972,1973,1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ +/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE +/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT +/CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY +/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. +/ +/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER +/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED +/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH +/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. +/ +/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE +/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY +/DIGITAL. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /ABSTRACT-- +/BUILD IS THE SYSTEM CONFIGURATOR FOR THE OS/8 PROGRAMMING +/SYSTEM. WITH BUILD, THE DEVICES WITHIN A PARTICULAR +/SYSTEM CAN BE RAPIDLY AND EASILY CHANGED. BUILD ALSO +/PROVIDES THE FACILITY FOR CREATING AN INITIAL OS/8 SYSTEM +/FROM BINARY PAPER TAPES OR CASSETTES. + +/V3 CHANGES + +/0. MADE BUILD SUPPORTABLE +/1. ADDED VE COMMAND (CURRENT VERSION # IS 3X WHERE X IS PATCH LEVEL) +/2. FIXED PROBLEM WITH Z'S AND 9'S IN FILENAMES +/3. CHANGED LENGTH OF DF32 +/4. FIXED PROBLEM WITH RK8 BOOTSTRAP RECORD. +/5. ON LOAD, NULL EXTENSION FIRST SEARCHES FOR .BN +/6. CR TO $ DOESN'T GIVE ERROR +/7. FIXED BUG WITH BUILDING ROM SYS +/8. RUBOUTS TO BOL GIVE $ +/9. ^U RETYPES $ +/10. ASSUME DSK: IF NO DEV GIVEN WITH LOAD +/11. NO DOT IS PRINTED IF NO EXTENSION +/12. ^O STUFF NEW +/13. ALLOW PARITY ^C +/14. ADDED EXAMINE COMMAND +/15. FIXED BUG RE ACCESSING USR TABLE VIA POINTER +/16. CLEANED UP MOVE ROUTINE +/17. CLEANED UP NUMBER TOO BIG CHECKER +/18. OVERFLOW ERROR MESSAGE CHANGED TO 'BAD ORIGIN' +/19. DON'T ALLOW NAMES OVER 6 CHARS TO SPILL INTO EXTENSION; +/ DON'T ALLOW MULTIPLE EXTENSIONS +/20. INCREASED NUMBER OF ALLOWABLE ENTRY PTS/HANDLER TO 16 (DEC) +/21. CLEANED UP SYMBOL PRINT ROUTINE +/22. GOT NAMES IN TABLE TO LINE UP. +/23. INSERT GRPNAME 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 + + FIELD 1 + + FAKBM=404 /PLACE TO FAKE OUT KBM + +START, JMP .+3 /START FROM MONITOR + JMP MONF /START FROM .RUN COMMAND + JMP MONCHN /START WHEN CHAINED TO + CLA + CDF 0 /READ IN REST OF CCL + TAD I (CCLBLC /GET BLOCK OF START + DCA I (SOFSET /ALLOW LINKER OVERLAY DRIVER TO WORK + TAD (7607 + DCA I (7756 + TAD I (SOFSET + CDF 10 + TAD CCLREM + DCA CCLREM /GET BLOCK OF REST + CIF 0 + JMS I (7607 + 1300 /READ 11 MORE PAGES + REST +WFL, +CCLREM, 1+5+1 /SKIP CCB AND *400 STUFF + JMP I (ERR2 + JMS FIXX + JMS TWAIT + CDF 0 + TAD I LVNO + CDF 10 + TAD (-CCLTAB /DO VERSION #'S AGREE? + SZA CLA + JMP I (BADVNO + JMS I (AT + TAD (BEGLN-1 + DCA XR +L$: CDF 0 + TAD I XR + CDF 10 + SNA + JMP 2$ + TAD (-"; + SZA CLA + JMP L$ +/ JMS I (SEMI + NOP +2$: STA + DCA I (REMD /ALLOW RECURSIVE U'S + CDF 0 + TAD I KENTRY /GET ENTRY # + CIF CDF 10 + TAD (PTBL /GET ADDRESS OF PTR TO START OF ENTRY + DCA PTR + CDF TABLES + TAD I PTR /GET PTR TO START OF ENTRY + CDF 10 + DCA PTR + TAD PTR +BASPTR, DCA BASPTR + JMP I (GO + +FIXX, 0 + DCA I (XFERV /SET UP STUFF FOR OVERLAY DRIVER + TAD (SWAPER + DCA I (XFERV+1 + JMP I FIXX + +MONF, JMS FIXX + JMP I (MONFIX + MONCHN, + CIF 0 + JMS I (7607 /READ IN KBM + 1000 /4 BLOCKS + 0 /0-1777 + 7 /BLOCK 7 ON SYS: + HLT /NO WAY TO RECOVER (EVEN 7605 DOES THIS) + TAD (-44 + JMS I (MOVE /ASSUME COMMAND LINE IS IN + CDF 10 /17600-17643 + 7600 + CDF 0 + 1000 /MOVE TO OS/8 LINE BUFFER + CIF CDF 0 +YAT, JMP I KFAKBM /@ DESTROYS THIS CODE (MUST BE ONE BEFORE 'REGO') + TAD I (SAVL /'YAT' IS JMS'ED TO + SNA CLA /BY INITIAL @ COMMAND + JMP I (LEAVE /DO NOTHING IF NO @ GOT EXPANDED (NULL LINE) +REGO, CIF 0 + JMS I (7607 + 200 /READ ONE BLOCK + 400 /400-777 + 10 /RESTORE PART OF KBM WHICH WAS DESTROYED BY OVERLAY + HLT + JMP I (FAKE + +/REGO, TAD KCIDF +/ CDF 0 +/ DCA I (RETCIF /ALLOW 'FINDIT' TO RETURN TO FIELD 1 +/ CIF CDF 0 +/ STA +/ DCA I (HALF +/ DCA I (ENTRY +/ TAD (KEYWRD +/ DCA I (KPTR +/ JMS I (FINDIT /LOOK UP KEYWORD +/ SMA CLA +/ JMP PREGO /FOUND IT +/CMDERR, JMS I (PRMESG /NOT A LEGAL KEYWORD +/ ERRCMD + + .START START+1,1 + TWAIT, 0 + DCA WFL + JMS I (BATCH + JMP TW /BATCH NOT RUNNING + CLA /WE'RE RUNNING UNDER BATCH + JMP I TWAIT +TW, TSF + SKP /WAIT FOR THINGS TO QUIET DOWN + JMP I TWAIT +LVNO, AND I 0 /WASTE SOME TIME +KFAKBM, AND I 4 +KENTRY, 600 + ISZ WFL + JMP TW + JMP I TWAIT /CAN'T WAIT TOO LONG +FILDMY, FILENAME DUMMY.SV + 0 /EXTRA EXTENSION WORD + PAGE + BADVNO, JMS I (PRINT + BADVMS + JMS I (VERTN + JMP I (LEAVE /GO AWAY + /THIS ROUTINE DETERMINES IF THE CHARACTER IN THE AC IS A LETTER OR DIGIT +/IF LETTER, RETURNS TO RET+1 WITH LETTER-"A IN AC AND LINK=0 +/IF DIGIT, RETURNS TO RET+1 WITH DIGIT-"0 IN AC AND LINK=1 +/IF NEITHER, RETURNS TO RET WITH CHAR-"A IN AC. +DECODE, 0 + TAD (-"9-1 /MIGHT BE CALLED WITH ANY DF + CLL + TAD ("9+1-"0 + SZL + JMP YES$ + TAD ("0-"Z-1 + CLL CML + TAD ("Z-"A+1 + SNL +YES$: ISZ DECODE + JMP I DECODE + LBEGIN, 0 /PTS TO 1 CHAR BEFORE COMMAND KEYWORD ARGUMENT + +SCAN, 0 + TAD (BEGLN + DCA T + CDF 0 + JMS BLSCAN /IGNORE INITIAL SPACES + JMP 2$ +1$: CLA + ISZ T + TAD I T +2$: SNA + JMP 3$ + JMS I (DECODE + SKP CLA + JMP 1$ + JMS BLSCAN +3$: DCA DELIM + STA + TAD T + CDF 10 + DCA I (LBEGIN + JMP I SCAN + +BLSCAN, 0 + TAD I T + TAD (-240 + SZA + JMP 1$ + ISZ T + JMP BLSCAN+1 +1$: TAD (240 + JMP I BLSCAN /LEAVE CHAR IN AC + SETLPT, 0 /COULD BE ONCE ONLY + TAD (LPTDEV + JMS I (SETDEV + JMP I SETLPT + +SETTTY, 0 + TAD (TTYDEV + JMS I (SETDEV + JMP I SETTTY + +SETPTP, 0 + TAD (PTPDEV + JMS I (SETDEV + JMP I SETPTP + +FAKE, CIF CDF 0 + TAD (MSOVL2 + DCA I (OV /RESTORE LOC SO DATE CMD W ARGS WILL WORK + JMP I (FAKBM + SYSER, TEXT \#I/O ERROR ON SYS:\ + GO, JMS I (SCAN /ADVANCE SCAN UNTIL AFTER SPACES +GO2, CDF TABLES + TAD I PTR /GET FLAG + CDF 10 + DCA FLAG /SAVE IT + TAD DELIM + SNA CLA /IS TYPED LINE EMPTY AFTER KEYWORD? + TAD FLAG /AND IS SPECIAL REMEMBERING BITS ON? + CLL RTR + RAR /AND HAS GOD WILLED US TO REMEMBER? + AND (7 /AND ARE THE ZODIAK SIGNS FAVORABLE? + SNA + JMP I (NORM /NO + TAD REMD /YES, GET REM-LINE (SUBTRACT 1) + DCA REMD + CDF 0 + TAD I (BEGLN + CDF 10 + DCA I (NMPTR + JMS I (RECALL /RECALL LINE +REMD, -1 /-1 MEANS DIDN'T RETRIEVE A REMEMBER LINE + DCA DEPN /SAVE DEPENDENT INFO + TAD I (NMPTR + SZA CLA /EG COMMAND? + JMP I (NORM /NO + ISZ DELIM /YES + TAD DEPN + DCA PTR /RESET PTR FROM CMD DEPENDENT WORD + JMP GO2 + +DEPN, 0 /REM LINE DEPENDENT INFORMATION + PAGE + COLWRD /NEEDED FOR SET TTY COL +NORM, TAD FLAG +L7700, SMA CLA + JMP CHAINN /SKIP ENTRIES IF NO CD + ISZ PTR /POINT TO DEFAULT INPUT EXTENSION + CDF TABLES + TAD I PTR /GET DEFAULT INPUT EXTENSION PTR + CDF 10 + DCA DEFALT /SAVE IT + TAD (7641 + DCA XR + TAD FLAG + CDF 0 + TAD I PAMFLAG /COMBINE ALTMODE BITS + CDF 10 + RAR /IN POSITION 11 + CLA RAR /PUT NEW ALTMODE BIT ALONE IN BIT 0 + DCA I XR /STORE AWAY IN C.D. OPTION TABLE + DCA I XR /V3D ZERO OPTION WORDS + DCA I XR + DCA I XR + DCA I XR /ZERO L.O. = +L$: ISZ PTR + CDF TABLES + TAD I PTR + SNA + JMP 2$ + DCA NTEMP + ISZ PTR + TAD I PTR /GET VALUE + CDF 10 + TAD I NTEMP + DCA I NTEMP /STORE IN SPECIFIED LOCATION + JMP L$ +2$: CDF 10 + TAD FLAG + AND (400 + SZA CLA + JMS I (INSARR /INSERT BACK ARROW IF FLAG BIT SET + JMS I (CD /PERFORM COMMAND DECODE IF FLAG BIT + /0 SET + TAD FLAG + RAL + SMA CLA /IS SPOOLING PROHIBITED? + JMS I (SPOOLIT /NO +CHAINN, ISZ PTR /POINT TO AFTER CD SUBR + CDF TABLES + TAD I PTR /GET SUBR ADDRESS + CDF 10 + JMS I (JMSUB + TAD I (DEFILE + SZA /IS THERE A FILENAME SET TO CHAIN TO? + JMP ZOW /YES + ISZ PTR /NO, POINT TO FILENAME + CDF TABLES + TAD I PTR + CDF 10 + SNA + JMP I (LEAVE /NO FILE TO CHAIN TO +ZOW, DCA NMPTR + JMS LOOK /LOOKUP FILE +NMPTR, 0 + JMP I (CCER1 /NOT FOUND +CHAIN, JMS I (200 /CHAIN TO IT + 6 /CHAIN + +BLK, 0 +/ ----- +PAMFLAG,AMFLAG + /LOOK, LOOKS UP FILE ON DEVICE . POINTER IS IN ARG1 +/ ARG2 IS ERROR RETURN IF NOT FOUND +/DEVICE NUMBER IS IN AC. IF 0, USE SYS: + +LOOK, 0 + SNA + IAC + DCA DEV + TAD I LOOK /GET PTR TO FILE NAME IN FIELD 0 + DCA HISFIL + TAD HISFIL + AND L7700 + SNA CLA + JMP FLD1 /PTR LT 100 MEANS IN FIELD 1 + TAD (-3 + JMS I (MOVE /MOVE IT UP + CDF 0 +BWORD, +HISFIL, 0 + CDF 10 +PFILDMY,FILDMY + TAD PFILDMY +SETN, DCA NAMPTR /STORE AWAY PTR TO FILENAME + ISZ LOOK /POINT TO ERROR RETURN + TAD DEV /GET DEVICE NUMBER + JMS I (200 + 2 /LOOKUP +NTEMP, +NAMPTR, 0 + 0 + JMP I LOOK /TAKE ERROR RETURN IF NOT FOUND + TAD NAMPTR /STORE STARTING BLOCK # IN 'BLK' + DCA BLK + ISZ LOOK /POINT TO NORMAL RETURN + JMP I LOOK /RETURN + FLAG, 0 +DEV, 0 + +FLD1, TAD HISFIL + JMP SETN + +/SKIP IF BATCH IS RUNNING AND PUT CIF BATCH FIELD IN AC + +BATCH, 0 + CDF 0 + TAD I (7777 + CDF 10 + DCA BWORD + TAD BWORD + RTL + SNL CLA /IS BATCH RUNNING? + JMP I BATCH /NO + TAD BWORD /YES + AND (70 /ISOLATE FIELD OF BATCH + TAD (CIF /FORM CIF TO THE HIGHEST FIELD + ISZ BATCH /AND TAKE SKIP RETURN WITH IT IN AC + JMP I BATCH + PAGE + DEFILE, 0 /PTR TO FILENAME TO CHAIN TO + +TEMP, +RDMON, 0 + CDF 10 + CIF 0 + CLA + JMS I (7607 + 0400 /READ 2 RECORD + 2000 /LOCATION 2000 FIELD 0 + 7 /BLOCK 7,10 + JMP IOERR + JMP I RDMON + +ERR2, CIF CDF 0 + JMP I (NOCCL + EXSUB, 0 + TAD BASPTR /PUSH PTR BACK TO BEGIN OF ENTRIES + JMS I (REMEM /REMEMBER THIS IN DEPENDENT WORD + 2 + JMP I EXSUB + +JMSUB, 0 + SNA + JMP I JMSUB + DCA TEMP + JMS I (CCSUB /LOAD OVERLAY + JMS I TEMP + JMP I JMSUB + +SPOOLIT,0 + JMS I (BATCH /IS BATCH RUNNING? + JMP I SPOOLIT /NO + DCA CB /YES + CDF 0 + TAD I DEFALT + TAD (-5200 + SNA CLA + TAD I DEFALT /LEAVE 5200 IN AC IF SPECIAL MODE + CDF 10 +CB, HLT /CIF TO FIELD OF BATCH + JMS I (BATSPL /ALLOW BATCH TO SPOOL STUFF + JMP I SPOOLIT + INSARR, 0 + TAD (BEGLN + DCA XR + CDF 0 + TAD I XR + SZA CLA + JMP .-2 + STA + TAD XR + DCA XR + TAD ("< + DCA I XR + DCA I XR + CDF 10 + STA + TAD XR + DCA I (ARLOC /REMEMBER WHERE WE INSERTED A "_" + JMP I INSARR + / TAD (-# OF LOCS TO MOVE +/ JMS MOVE +/ FROM CDF +/ FROM LOC +/ TO CDF +/ TO LOC + +MOVE, 0 + DCA T + TAD I MOVE /GET FROM CDF + DCA FRCDF + ISZ MOVE + STA + TAD I MOVE /GET FROM LOC-1 + DCA XR + ISZ MOVE + TAD I MOVE /GET TO CDF + DCA TOCDF + ISZ MOVE + STA + TAD I MOVE /GET TO LOC-1 + DCA XR2 + ISZ MOVE /POINT TO RETURN + TAD T + SNA CLA + JMP I MOVE /V1A IGNORE 0 MOVE +FRCDF, HLT + TAD I XR +TOCDF, HLT + DCA I XR2 + ISZ T + JMP FRCDF + CDF 10 + JMP I MOVE + OUTSW, -1 /-1 MEANS ON OUTPUT SIDE, 0 ON INPUT SIDE + +OUTLIM, 1-MIFILE + IOERR, JMS I (PRMESG + SYSER +BADVMS, TEXT /#CCL 3X OVERLAY AND CCL INCOMPATIBLE/ + AAAA=. + *BADVMS+3 + CCLTAB&77^100+40 + *AAAA +COLWRD, 1 + +COLSET, 0 +/ JMS I (CCSUB + JMS I (SETTTY + TAD I (7646 + SNA + TAD COLWRD + DCA I (7646 + JMP I COLSET + PAGE + .ASECT CCLMOR + FIELD 0 + *6740 +YCCL, FILENAME CCL.SV + *.-1 +YFORT, FILENAME FORT.SV + *.-1 +YF4, FILENAME F4.SV + *.-1 +YLOADER,FILENAME LOADER.SV + *.-1 +YLOAD, FILENAME LOAD.SV + *.-1 +LPTDEV, DEVICE LPT +TVDEV, DEVICE TV +TTYDEV, DEVICE TTY +PTPDEV, DEVICE PTP +DMPDEV, DEVICE DUMP +NULDEV, DEVICE NULL +FNAME1, ZBLOCK 5 + ADDED src/os8-v3f/CCLAT.MA Index: src/os8-v3f/CCLAT.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLAT.MA @@ -0,0 +1,212 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /2 CCL INDIRECT COMMAND FILE PROCESSOR + + .GLOBAL AT,FUDG,DONB + + .EXTERNAL BEGLN,GETSPC,ASSIGN,SETEXT,EXTCM + .GLOBAL SAVL + .EXTERNAL DEFALT,LOOKUP,ASADR,LNAME + .EXTERNAL PRMESG,MOVE + .EXTERNAL OUTSW,OUTLIM + + XR=16 + CLXR=35 + T=20 + LXR=34 + BFR=3000 + + .RSECT AT1 + FIELD 1 + +AT, 0 +ATMORE, TAD (BEGLN-1 + DCA LXR +ATLOOP, JMS I (GLXR + SNA + JMP I AT + TAD (-300 + SZA CLA + JMP ATLOOP + TAD LXR + DCA I (SAVL + JMS FUDG + JMS I (GETSPC + JMS I (ASSIGN + DCA I (SETEXT + TAD (EXTCM + DCA I (DEFALT + JMS I (LOOKUP + SZA CLA /V3C + TAD I (ASADR + SNA + JMP I (ATERR /IF NO FILESPEC AFTER @, ERROR + DCA T + TAD I (LNAME /GET BLOCK NUMBER + DCA BLN + CIF 0 + JMS I T + 200 /READ 2 PAGES +NWB, BFR+200 /INTO BUFFER +COUNT, +BLN, 0 /FROM THIS BLOCK + JMP I (ATERR / I/O ERROR + TAD (-200 + DCA COUNT + TAD (BFR-1 + DCA XR + TAD NWB + DCA T + CDF 0 +L$: TAD I T + JMS I (P + CLL RTR + RTR + DCA TEMP$ + ISZ T + TAD I T + JMS I (P + CLL RTL + RTL + RAL + TAD TEMP$ + JMS I (P + CLA + ISZ T + ISZ COUNT + JMP L$ + JMP I (ATOVER + +TEMP$: 0 + +/ATFIN, TAD LXR +/ TAD (-BEGLN +/ SZA CLA +/ JMP I AT /LEAVE +/ JMP I (LEAVE /LEAVE BECAUSE LINE NOW EMPTY + FUDG, 0 + DCA I (OUTSW /LOAD HANDLER + TAD I (OUTLIM + CIA + DCA CLXR + JMP I FUDG + +GLXR, 0 + CDF 0 + ISZ LXR + TAD I LXR + CDF 10 + JMP I GLXR + +DONB, 0 /USED AS A FLAG + JMP I DONB + PAGE + P, 0 + AND (177 + SNA + JMP CTZ /END AT 0 OR ^Z + TAD (-32 + SNA + JMP CTZ + TAD (32-16 /IGNORE CR,LF,FF,VT + CLL + TAD (16-12 + SZL + JMP 1$ + TAD (212 /FORCE 8-BIT + DCA I XR +1$: CLA + TAD I T + AND (7400 + JMP I P + CTZ, CDF 10 + TAD LXR + DCA ATEND + STA + TAD LXR + DCA LXR /INCASE @ GOES TO EOL + JMS I (GLXR /SEARCH FOR EOL + SZA CLA + JMP .-2 + TAD LXR + CMA + TAD ATEND + DCA ENDLEN + TAD XR + CMA + TAD (BFR /GET LENGTH OF INSERTED STUFF + DCA NEWLEN + CDF 0 + TAD I ATEND /GET NEXT CHAR AFTER FILESPEC + CDF 10 /V3C + TAD (-"' + SZA CLA /IS IT AN APOSTROPHE? + JMP .+3 /NO + ISZ ENDLEN /YES + ISZ ATEND /MAKE IT GO AWAY + TAD ENDLEN + JMS I (MOVE /MOVE REST OF LINE UP + CDF 0 +ATEND, 0 /FIRST CHAR POSITION AFTER @ SPEC + CDF 0 + BEGLN+1000 + TAD NEWLEN /IF 0, 'MOVE' WILL IGNORE IT + JMS I (MOVE /MOVE IN NEW STUFF + CDF 0 + BFR + CDF 0 +SAVL, 0 /POINTS TO @ + TAD NEWLEN + CIA + TAD SAVL + DCA NEWEND + CLL + TAD NEWEND + TAD MB + SZL CLA + JMP ATOVER + TAD ENDLEN + JMS I (MOVE /MOVE BACK END + CDF 0 + BEGLN+1000 + CDF 0 +NEWEND, 0 /FIRST POSITION AFTER NEW STUFF + JMP I (ATMORE /LOOK FOR MORE + +MB, -BEGLN-1000 + ATOVER, JMS I (PRMESG + OVFLOW +ENDLEN, 0 /- NO. OF CHARS AT END INCLUDING 0 +NEWLEN, 0 /- NO. OF CHARS BEING INSERTED + +ATERR, CDF 10 + CLA + JMS I (PRMESG + ATIO + ATIO, TEXT /#BAD FILENAME OR ERROR READING INDIRECT FILE/ +OVFLOW, TEXT /#COMMAND LINE OVERFLOW/ + PAGE ADDED src/os8-v3f/CCLCD.MA Index: src/os8-v3f/CCLCD.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLCD.MA @@ -0,0 +1,1009 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /4 CCL'S COMMAND DECODER + .EXTERNAL TABLES,FNAME1 + .EXTERNAL SWTCHS + .ENTRY GETSPC +/THE FOLLOWING DON'T HAVE TO BE ENTRY'S BECAUSE THEY ARE LINKED TO +/FROM THE EXTENSION MODULE (CCLCDX) THAT KNOWS CCLCD IS IN MEMORY + .GLOBAL LV + .EXTERNAL EQLPRM,POUND,DNUMB + MULTI=1 /SET TO 0 TO GET RID OF MULTIPLE CHARACTER SWITCHES + PTR=36 + .GLOBAL BADEV,CDER2,DVICE /****** + .GLOBAL ASADR,LNAME /***** + .ENTRY CCER1 + .RSECT CCLCD + .GLOBAL UNKN + .EXTERNAL FLAG,MOVE,PRMESG + .EXTERNAL PRNAME,PRWD + .EXTERNAL LBEGIN,DECODE + .EXTERNAL ARLOC + .EXTERNAL DEFILE + .ENTRY CD,ASSIGN,LOOKUP,ZEROCD,GLXR + .EXTERNAL OUTSW,OUTLIM + .ENTRY GCH,SETDEV,SETEXT + .ENTRY NMOVE + .EXTERNAL DONB + .EXTERNAL NAMPTR + FIELD 1 + MOFILE=7600 + MIFILE=7617 + MPARAM=7643 + + XR2=15 + XR=16 + T=20 + TT=21 + DEF=22 + NAME1=23 + NAME2=24 + NAME3=25 + NAME4=26 + NAME5=27 + NMBASE=37 + DEV1=30 + DEV2=31 + DELIM=32 + DEFALT=33 /POINTS TO DEFAULT EXTENSION LIST + LXR=34 + CLXR=35 + BEGLN=1000 + HNDLR=4400 + CD, 0 + JMS I (CDINIT +BEGGRP, TAD I (OUTSW + SNA CLA + TAD I (BEGDIF /DIFF BETWEEN INPUT & OUTPUT AREAS + TAD (MOFILE-1 + DCA CLXR + JMS I (GETSPC /FAKE-OUT TO GETSPC CAN CAUSE EFFECTIVE BRANCH HERE + JMS I (ASSIGN + TAD I (OUTSW + SNA CLA + TAD I (LIMDIF /DIFF BETWEEN END OF OUTPUT & INPUT AREAS + TAD I (OUTLIM /END OF OUTPUT AREA + TAD CLXR + SMA CLA + JMP I (CDER1 + TAD I (OUTSW + SNA CLA +LKUPSW, JMP IN$ /ZEROED IF IN "SPECIAL DECODE" MODE + TAD I (DVICE + JMS PCLXR + TAD NAME1 + JMS PCLXR + TAD NAME2 + JMS PCLXR + TAD NAME3 + JMS PCLXR + TAD NAME4 + JMP 2$ +IN$: JMS I (LOOKUP + JMS PCLXR /STORE LENGTH AND DEV NUMBER + TAD I (LNAME /GET BLOCK +2$: JMS PCLXR + JMS I (CCLSWT + TAD I (OUTSW + SNA CLA + TAD I (FLAG + CLL RTL + SPA CLA /FEATURE ENABLED? + TAD LKUPSW + SNA CLA + JMP DLOOK /IN SPECIAL MODE OR ON OUTPUT SIDE + TAD DELIM + TAD (-"+ + SNA CLA + JMP NBS + TAD DONB + SZA CLA + JMP NBS + TAD (7600 /V1A NOW TAKES ARG IN AC + JMS I (NMOVE /MOVE NAME TO OUTPUT FILE NAMES + JMP DLOOK + NBS, JMS I (ZERR +DLOOK, STA + DCA I (DVFLAG + TAD DELIM + SNA + JMP I CD + TAD (-"[ + SNA + JMP I (OLENGT + TAD ("[-"+ + SZA + TAD ("+-", + SNA + JMP I (FILLP /**** JUMPING INTO ROUTINE (IS THIS A BUG?) + TAD (",-"< + SZA + TAD ("<-"_ + SNA + JMP 5$ /BACK-ARROW (UNDERSCORE) MEANS SAME AS "<" + TAD ("_-"= + SZA CLA /SKIP ON AN EQUAL SIGN (=) + JMP I (CDER2 /BAD CHAR + JMS I (GLXR + JMS I (DECODE + CLL + STA /LINK=0 MEANS LETTER + TAD LXR /NOW LINK=1 MEANS LETTER + DCA LXR + SZL + JMP 5$ /= MEANS "<" + JMS I (EQLPRM /= MEANS = (NUMERIC PARAMETER) +DL2: JMS I (CCLSWT + JMP DLOOK +5$: ISZ I (OUTSW /FOUND BACK-ARROW (<) + JMP I (CDER2 /TWO BACK-ARROWS + TAD LXR /GET PTR TO ARROW + DCA I (ARLOC /SAVE IT ('EDIT' MIGHT NEED IT) + JMP BEGGRP + +PCLXR, 0 + ISZ CLXR + DCA I CLXR + JMP I PCLXR + PAGE + ZERR, 0 + DCA I (DONB /ZERO 1ST OUTPUT FILE + TAD (7577 + DCA XR2 + DCA I XR2 + DCA I XR2 + DCA I XR2 + DCA I XR2 + DCA I XR2 + JMP I ZERR + ASSIGN, 0 + TAD CLXR + AND I (DVFLAG + TAD I (OUTLIM + SMA SZA CLA /CHECK FOR OUTPUT OR FIRST INPUT + JMP ASNORM /IF DEVICE WAS SPECIFIC, + /OR IF WE ARE ON THE INPUT SIDE, + /PROCEED NORMALLY + TAD NAME1 + SNA CLA + JMP ASGNST + TAD DFLTNM+1 + DCA DEV2 + TAD DFLTNM + DCA DEV1 +ASNORM, TAD DEV1 + DCA AS+1 + TAD DEV2 + DCA AS+2 + TAD I (OUTSW + SNA CLA /DON'T LOAD HANDLER + /IF WE ARE ON OUTPUT SIDE OF "_" + TAD NAME1 +SPKLG1, SNA CLA /OR THERE IS NO FILE NAME TO LOOK UP + TAD GETHND /GETHND=11 NORMALLY, + /0 IF IN "SPECIAL DECODE" MODE + IAC + DCA AS + TAD (HNDLR+1 /ALLOW TWO PAGE HANDLERS + DCA ASADR + CIF 10 + JMS I (200 +AS, 0 + 0 + 0 +ASADR, HNDLR+1 + JMP I (CDER0 + TAD AS+2 +ASGNST, DCA I (DVICE + JMP I ASSIGN + DFLTNM, DEVICE DSK +GETHND, 11 /1+11=12 (1=FETCH, 12=INQUIRE) + GETL, 0 + JMS I (GCH + DCA DELIM + TAD DELIM + JMS I (DECODE + JMP I GETL /NON-ALPHANUM IN CCL SWITCH + CLA + TAD DELIM + AND (77 + ISZ GETL + JMP I GETL + CCLSWT, 0 + TAD DELIM + TAD (-"/ + SNA + JMP I (SLASH + TAD ("/-"- + SZA CLA + JMP I CCLSWT + TAD I (OUTSW + SZA CLA + JMP I (CDER4 /CCL EXT ON OUTPUT FILE + TAD (SWTCHS + DCA DEF + JMS GETL + JMP I (CDER44 /NON-ALPHANUMERIC CCL SWITCH + JMS I (ROTL + DCA TN$ + JMS GETL + JMP 1$ /ONE CHAR CCL SWITCH + TAD TN$ + DCA TN$ + JMS GETL +1$: SKP CLA /2 CHAR CCL SWITCH + JMP I (CDER44 /3 CHAR CCL-SWITCH + TAD TN$ + JMS I (EXTLUK + CLA + ISZ DEF + CDF 0 + TAD I DEF + DCA G$ /GET PTR TO ARGUMENT PAIR + TAD I G$ /GET SUBROUTINE + DCA H$ + ISZ G$ + TAD I G$ /GET ARGUMENT + CDF 10 + JMS I H$ /CALL SUBR, ARG IN AC + JMP CCLSWT+1 +G$: 0 +H$: 0 +TN$: 0 + PAGE + /GETS A NAME FROM FIELD ZERO BUFFER VIA LXR +/RETURNS WITH DELIMETER IN AC +/GIVES ERROR MESSAGE IF NAME IS BAD + +GNAME, 0 + DCA NAME1 + DCA NAME2 + DCA NAME3 + DCA NAME4 + DCA NAME5 + TAD (NAME1 + DCA NMBASE + CLA CMA + DCA PERDSW + DCA NAMECT + JMS I (GCH + TAD (-"# + SNA + JMS I (NUMC /BUG IF MAKE COMMAND USES A # (OVERLAYS LOOP) + TAD ("# + SKP +GTNMLP, JMS I (GCH +P2, DCA DELIM + TAD DELIM + TAD (-"% + SNA + JMP PER + TAD ("%-"? + SZA + TAD ("?-"* + SNA +STARSW, JMP I (CDER6 /"JMP STARNM" + /IF "SPECIAL DECODE" MODE + TAD ("*-". + SNA CLA + JMP PERIOD + TAD DELIM + JMS I (DECODE + JMP LV +STARNM, CLA /THIS CODE HANDLES *'S AND ?'S CORRECTLY + TAD DELIM + AND (77 + DCA DELIM + TAD NAMECT + TAD (-6 + SMA CLA + JMP GTNMLP + TAD NAMECT + CLL RAR + TAD NMBASE + DCA TT + TAD DELIM + SNL + JMS I (ROTL + TAD I TT + DCA I TT + ISZ NAMECT + JMP GTNMLP +PERIOD, TAD NAME1 + SZA CLA + ISZ PERDSW + JMP I (CDER7 /NULL NAME OR DOUBLE EXTENSION + ISZ NMBASE + ISZ NMBASE + STL CLA RTL /2 (ALLOW 4 CHARACTER EXTENSION) + DCA NAMECT + JMP GTNMLP +LV, CLA + TAD DELIM + JMP I GNAME + +PER, TAD ("? + JMP P2 + PERDSW, 0 +NAMECT, 0 + SOFSET=7747 + +CDER6, CDF 0 + TAD I (7777 + CDF 10 + RAL + SPA CLA + JMP CD6E /ERROR IF BATCH IS RUNNING + TAD I (FLAG + RTL + SMA CLA + JMP CD6E /ONLY IF -LS WORKS + TAD (-12 + JMS I (MOVE + CDF 10 + MUNGC + CDF 10 + 7600 + TAD (-34 + JMS I (MOVE + CDF 0 + 1000 + CDF 10 + 7612 + DCA I (7646 /SAFETY + CDF 0 + TAD I (SOFSET + CDF 10 + DCA BLK + JMS I (200 + 6 /CHAIN TO CCL.SV +BLK, 0 + + +CD6E, JMS I (PRMESG + BADSTR + + PAGE + LOOKUP, 0 + DCA LNAME + TAD NAME1 + SNA CLA + JMP LKUPST + TAD I (PERDSW + TAD NAME4 + SNA CLA + CLA IAC /FORCE NAMERM NON-0 IF . AND NO EXT + TAD NAME4 + DCA NAMERM /REMEMBER TYPED EXTENSION + TAD DEFALT + DCA DEF + TAD I (SETEXT + SNA /HAS AN EXTENSION BEEN SET? + TAD NAMERM /NO + SNA /DOES FILE HAVE EXTENSION? + JMP EXT2 /NO EXTENSION TYPED OR SET, DO SUCCESSIVE LOOK-UPS + JMS EXTLUK /LOOK FOR EXTENSION + SNA CLA /DID WE FIND IT? + JMP EXT3 /NO, FORCE NULL EXTENSION TO MATCH +EXT2, CDF 0 + TAD I DEF + IAC + SNA CLA + JMP NEXTEXT /IGNORE -1'S + TAD NAMERM + SZA CLA + JMP EXT3 + TAD I DEF + DCA NAME4 /SET NEW EXTENSION +EXT3, CDF 10 + TAD (NAME1 + DCA LNAME + TAD I (AS+2 + JMS I (200 + 2 +LNAME, 0 /NAME1 +LENGTH, 0 + JMP LFAILD + TAD NAME4 + DCA I (SETEXT + ISZ DEF /POINT TO ASSOCIATED CUSP NAME + CDF 0 + TAD I DEF + CDF 10 + DCA I (DEFILE /SAVE IT AWAY + TAD LENGTH + CLL + TAD (400 + SNL +CLACON, 7600 /CLA + CLL RTL + RTL + AND (7760 +LKUPST, TAD DVICE + JMP I LOOKUP + LFAILD, TAD NAMERM + CDF 0 + SNA CLA /WAS THERE AN EXPLICIT EXTENSION? + TAD I DEF /NO - WAS THERE A DEFAULT EXTENSION? + SNA CLA + JMP XYZ +NEXTEXT,CDF 10 + ISZ DEF /NO EXPLICIT EXT AND YES DEFAULT EXT + ISZ DEF /POINT TO NEXT POSSIBLE DEFAULT EXTENSION + JMP EXT2 /AND TRY FOR IT + +NAMERM, 0 +DVICE, 0 + +EXTLUK, 0 + CIA + DCA T +1$: CDF 0 + TAD I DEF + CDF 10 + SNA /AT NULL? + JMP I EXTLUK /YES + TAD T /NO + SNA CLA /MATCH? + JMP 2$ /YES + ISZ DEF /NO + ISZ DEF /POINT TO NEXT ENTRY + JMP 1$ /TRY AGAIN +2$: TAD T /RETURN WITH IT IN AC + CIA + JMP I EXTLUK +XYZ, CDF 10 + JMP I (CDER3 /NO DEFALT EXTENSION OR YES EXPLICIT EXTENSION + BADSYN, TEXT /#ILLEGAL SYNTAX/ +TOOMAN, TEXT /#TOO MANY FILES/ +/AMBIGY, TEXT /#AMBIGUOUS SWITCH/ +CDER1, JMS I (PRMESG + TOOMAN + NFOU, TAD NAME1 + AND (77 + SNA CLA + JMP I (ONE /ONE-CHARACTER SWITCH + JMS I (PRNAME + JMS I (PRMESG + SWNF + PAGE + /TAKES A LETTER OR A DIGIT IN AC +/AND TURNS ON APPROPRIATE BIT IN OPTION TABLE + +SLSHCH, 0 + DCA DELIM + TAD (MPARAM-1 + DCA T + TAD DELIM + JMS I (DECODE + JMP CDER8 + SZL + TAD (32 + CMA STL /THE FOLLOWING TURNS + /ON THE CORRECT OPTION BIT + DCA TT +L$: SZL + ISZ T + RAR + SNL + ISZ TT + JMP L$ + DCA TT + TAD TT + CMA + AND I T + TAD TT + DCA I T + JMP I SLSHCH + +CDER8, CLA + JMS I (PRMESG + BADOPT + ZEROCD, 0 + TAD (-42 /AC MAY BE NON-0 + DCA T + TAD (MOFILE-1 + DCA XR + DCA I XR /ZERO THE COMMAND DECODER OUTPUT AREA + ISZ T + JMP .-2 + JMP I ZEROCD + +GCH, 0 + JMS GLXR + TAD (-240 + SNA + JMP GCH+1 /IGNORE SPACES + TAD (240-"( + SNA + JMP OPENP$ + TAD ("( + JMP I GCH + JMP GCH+1 +OPENP$: JMS GLXR + TAD (-") + SNA + JMP GCH+1 + TAD (") + JMS SLSHCH + JMP OPENP$ + +GLXR, 0 + CDF 0 + ISZ LXR + TAD I LXR + CDF 10 + JMP I GLXR + + IFZERO MULTI < +SLASH, JMS GLXR + JMS SLSHCH + JMS GLXR + DCA DELIM + JMP I (CCLSWT+1 + > + + IFNZRO MULTI < +SLASH, CDF TABLES /POINT TO SWITCH TABLE POINTER + TAD I PTR /GET PTR TO SWITCH TABLE + CDF 10 + JMS I (TRANSL + JMP I (CCLSWT+1 + > + OLENGT, TAD I (OUTSW + AND NAME1 /[N] IS ONLY LEGAL + /ON THE OUTPUT SIDE OF THE "_" + SNA CLA /AND ONLY AFTER A FILE NAME + JMP I (CDER2 + TAD (-4 + TAD CLXR + DCA NMBASE + JMS I (DNUMB + CLL RTL + RTL + AND (7760 + TAD I NMBASE + DCA I NMBASE + CDF 0 + TAD DELIM + TAD (-"] /IS THERE A CLOSING BRACKET? + SNA /IF NOT, + /"DLOOK" ROUTINE WILL DETECT IT + JMS GCH + DCA DELIM + JMP I (DL2 + SETDSK, 0 + TAD DSKDEV + SZA + JMP I SETDSK + JMS I (200 + 12 /INQUIRE + 5723 /PACKED ENCODING FOR 'DSK:' +DSKDEV, 0 /SET TO DEVICE NUMBER + 0 + HLT /NO 'DSK' ! + TAD DSKDEV + JMP I SETDSK + .ENABLE ASCII + .DISABLE FILL +MUNGC, TEXT /MUNG WILD,/ + .ENABLE SIXBIT + .ENABLE FILL + PAGE + CCER1, TAD I (NAMPTR + DCA X$ + TAD (-5 + JMS I (MOVE + CDF 10 +X$: 0 + CDF 10 + NAME1 +CDER3, TAD (4300 + JMS I (PRWD /# + JMS I (PRNAME + JMS I (PRMESG + NF + +CCER2, TAD I (DVNM1 + DCA DEV1 + TAD I (DVNM2 + DCA DEV2 +CDER0, TAD DEV1 + SNA CLA + JMP I (CDER2 /B DOES NOT EXIST + TAD (4300 /# + JMS I (PRWD + TAD DEV1 + JMS I (PRWD + TAD DEV2 + JMS I (PRWD + JMS I (PRMESG + DNE + NF, TEXT / NOT FOUND/ +DNE, TEXT / DOES NOT EXIST/ +BADSW, TEXT /#SWITCH NOT ALLOWED HERE/ +BADSW2, TEXT /#BAD CCL SWITCH/ +CONTRA, TEXT /#CONTRADICTORY SWITCHES/ + BKA, 0 + TAD I (LBEGIN + DCA CLXR +1$: CDF 0 + ISZ CLXR + TAD I CLXR + CDF 10 + SNA + JMP NOBKR$ + TAD (-"< + SNA + JMP I BKA + TAD ("<-"_ + SNA + JMP I BKA + TAD ("_-"= + SZA CLA + JMP 1$ + ISZ CLXR /= MEANS _ IF NOT FOLLOWED BY A DIGIT + CDF 0 + TAD I CLXR + CDF 10 + JMS I (DECODE + SKP CLA /NOT A DIGIT + SNL CLA /MAYBE A DIGIT + JMP I BKA /= FOLLOWED BY A NON-DIGIT MEANS _ + JMP 1$ /IT'S AN =NNNN + +NOBKR$: ISZ BKA + JMP I BKA +BADEV, TEXT /#BAD DEVICE/ + PAGE + CDINIT, 0 + ISZ PTR /POINT TO SWITCH TABLE + JMS I (200 + 13 /RESET ALL HANDLERS + CDF 0 + TAD I DEFALT + CDF 10 + TAD (-5200 + SZA CLA /IS THIS A REQUEST FOR A + /"SPECIAL DECODE"? + JMP CDCONT /NO + TAD ALTLIM + DCA I (OUTLIM /YES, SET UP THE PROPER LOCATIONS + TAD ALTDF1 + DCA LIMDIF /TO GET 1 OUTPUT AND 5 INPUT FILES + TAD ALTDF2 + DCA BEGDIF /ALL OF WHICH ARE + /5-WORD ENTRIES + DCA I PLKUPS + TAD STARJM + DCA I PSTARS /AND ALLOW * + /AS A FILE OR EXTENSION NAME + TAD L7600 /STOPS FETCHES IN SPECIAL MODE + DCA I PSPKG1 /NO HANDLER FETCHES NECESSARY EITHER + /SINCE NO LOOKUPS +CDCONT, JMS I (BKA /SCAN AHEAD FOR < + STA /SKIP RETURN IF NOT FOUND + DCA I (OUTSW + JMS I (ZEROCD + TAD I (LBEGIN + DCA LXR + JMP I CDINIT +/CONSTANTS NECESSARY TO SUPPORT "SPECIAL DECODE" MODE +ALTLIM, 1-MOFILE-5 +ALTDF1, MOFILE+5-MPARAM+5 +ALTDF2, 5 +PLKUPS, LKUPSW +PSTARS, STARSW +PSPKG1, SPKLG1 + +BEGDIF, MIFILE-MOFILE +LIMDIF, MIFILE-MPARAM+2 + /STARJM, RELOC STARNM /DUMP LITERALS AT LAST POSSIBLE MOMENT +/ JMP STARNM +/ RELOC +STARJM, 5200+ + SETDEV, 0 /V1A ARG NOW IN AC + DCA 1$ + CLL STA RAL /-2 + JMS I (MOVE + CDF 0 +1$: 0 /PTS TO DEVICE NAME + CDF 10 + DVNM1 + JMS I (SETOUT + JMP I SETDEV + +UNKN, 0 + TAD SETEXT + SZA + TAD T /NEG OF SWITCH REQUEST + SZA CLA + JMP CCERA /CAN'T HAVE 2ND DEFAULT EXTENSION + TAD T + CIA + DCA SETEXT /SET DEFAULT EXTENSION + TAD DEFALT /SEE IF IT'S IN COMMAND'S SEARCH LIST + DCA DEF + TAD SETEXT + JMS I (EXTLUK + SNA CLA /DID WE FIND IT? + JMP CDER4 /NO + ISZ DEF /YES +/ TAD I (JMSUB /ALLOW RECURSIVE CALL +/ DCA HOLD + CDF 0 + TAD I DEF + CDF 10 + JMS I (JMSUB /CALL ITS SUBR +/ TAD HOLD +/V1A RECURSIVE CALL NO LONGER THREATENS +/ DCA I (JMSUB + JMP I UNKN + +SETEXT, 0 /EXT WHICH HAS BEEN SET BY A CCL SWITCH + CCERA, JMS I (PRMESG + CONTRA +CDER2, JMS PRMESG + BADSYN + +L7600, +CCERB, +CDER4, 7600 /CLA + JMS I (PRMESG + BADSW +CDER44, CLA + JMS I (PRMESG + BADSW2 +CDER7, JMS I (PRMESG + BADX + BADSTR, TEXT /#ILLEGAL * OR ?/ +SWNF, TEXT / OPTION UNKNOWN/ +BADOPT, TEXT /#BAD SWITCH OPTION/ + PAGE + BADX, TEXT /#BAD EXTENSION/ + +/THIS GETS A DEV:NAME.EXT SPECIFICATION (USING LXR) +/PUTTING RESULT IN DEV1,DEV2, NAME1-4. +/IT GIVES A FATAL ERROR MESSAGE IF BAD. +GETSPC, 0 + STA + DCA DVFLAG + DCA DEV1 +FILLP1, DCA DEV2 +FILLP, JMS I (GNAME + TAD (-": /AC CONTAINED DELIM + SNA CLA + JMP 3$ /IT'S A DEVICE NAME + DCA NUMC + TAD (-4 + JMS I (MOVE + CDF 10 + NAME1 + CDF 0 + FNAME1 /SAVE AWAY FILE NAME + JMP I GETSPC +3$: CLA IAC /PARSE FILENAME AFTER DEV: + TAD I (PERDSW + TAD NUMC + SZA CLA + JMP CDERA /. OR # IN DEVICE NAME + TAD NAME1 + DCA DEV1 + ISZ DVFLAG + JMP CDERA /CATCHES A:B: + TAD NAME2 + JMP FILLP1 + +DVFLAG, 0 +CDERA, JMS I (PRMESG + BADEV + +NUMC, 0 /USED AS FLAG INDICATING SAW # + JMS I (POUND + JMP I NUMC + NMOVE, 0 + DCA 2$ /V1A ARG IN AC + TAD I (FLAG + RTL + SMA CLA /FEATURE ENABLED? + JMP I (CCERB /NO + TAD I (OUTSW + SZA CLA + JMP I (CCERB /ON OUTPUT SIDE + TAD I (MOFILE /V3C + SNA CLA /DON'T CHANGE OUT DEV IF SPECIFIED + TAD I (FLAG /LOOK AT 'COPY EXT' BIT + AND (200 + SNA CLA + JMP 1$ /IT WASN'T SET + TAD I (MIFILE /GET FIRST INPUT DEVICE + AND (17 /ISOLATE DEVICE BITS + DCA I (MOFILE /FORCE THIS TO BE FIRST OUTPUT DEVICE +1$: TAD I 2$ + SNA + JMS I (SETDSK /CHANGE TO 'IAC' TO ALWAYS USE SYS: + DCA I 2$ /SET DEVICE TO SYS IF NONE + ISZ 2$ + TAD I 2$ /WAS THERE A SPECIFICATION THERE? + SZA CLA + JMP I NMOVE /YES, DO NOTHING + TAD I (FLAG + AND (200 /GET 'COPY EXTENSION' BIT + SMA SZA CLA /'SMA' IS UNNECESSARY + STA /COPY 4 WORDS IF BIT 4 WAS ON + TAD (-3 /OTHERWISE ONLY COPY 3 WORDS + JMS I (MOVE + CDF 0 + FNAME1 + CDF 10 +2$: 0 + JMP I NMOVE + ROTL, 0 + CLL RTL + RTL + RTL + JMP I ROTL + +JMSUB, 0 + SNA + JMP I JMSUB + DCA T$ + JMS I T$ + JMP I JMSUB +T$: 0 + AMBIG, TAD NAME1 + AND (77 + SNA CLA + JMP I (ONE + JMS I (PRNAME + JMS I (PRMESG + AMBIGY +AMBIGY, TEXT / OPTION AMBIGUOUS/ + PAGE + SETOUT, 0 + TAD I (FLAG + RTR + SZL CLA + TAD (5 + TAD (7600 + DCA OLOC + TAD I OLOC + SZA CLA + JMP I SETOUT /HE'S SPECIFIED SOMETHING + JMS I (200 + 12 /INQUIRE +DVNM1, 0 +DVNM2, 0 + 0 + JMP I (CCER2 /NO SUCH DEVICE + TAD DVNM2 + DCA I OLOC + TAD OLOC + AND (5 + SNA CLA /USING 2ND OUT DEV? + JMP I SETOUT /NO + ISZ OLOC /YES + TAD (-4 + JMS I (MOVE + CDF 0 + FNAME1 + CDF 10 +OLOC, 7600 /INITIALLY 7600 OR 7605 + JMP I SETOUT + / TAD (PTR TO SWITCH TABLE ENTRY (IN FIELD 0) +/ JMS TRANSL +/ IT PARSES SWITCH, SETS BIT +/ PARSES :VALUE, SETS = OPTION +/ LEAVES DELIMETER IN DELIM + +TRANSL, 0 + DCA SPTR /POINT INTO A SWITCH TABLE + JMS I (GNAME /GET A NAME + DCA DEL +/ TAD NAME4 +/ SZA CLA +/ HLT /EXTENSION ON A SWITCH + JMS SRCH + JMP I (NFOU /SWITCH NOT FOUND + STA + TAD SRPTR + DCA SSPTR /SAVE PTR INTO LONG NAME + JMS SRCH /SEARCH SOME MORE + SKP /SHOULDN'T FIND ANYTHING + JMP I (AMBIG /AMBIGUOUS SWITCH + CDF 0 +L$: TAD I SSPTR /SCAN PAST END OF LONG NAME + ISZ SSPTR + AND (77 +X240: SZA CLA + JMP L$ + TAD I SSPTR + CDF 10 +SL, AND (377 /ISOLATE CORRESPONDING ONE-CHARACTER SWITCH + SZA + JMS I (SLSHCH /SET APPROPRIATE BIT + TAD DEL + DCA DELIM + TAD DELIM + TAD (-": + SNA CLA + JMS I (EQLPRM + JMP I TRANSL + +ONE, TAD NAME1 + CLL RTR + RTR + RTR + TAD X240 + AND (77 + TAD X240 + JMP SL + +SPTR, 0 +SSPTR, 0 +DEL, 0 + /RETURN 1 IF NAME NOT FOUND +/RETURN 2 IF NAME FOUND + +SRCH, 0 +1$: TAD (NAME1 + DCA NPTR + CLL STA RTL /-3 + DCA NCNT + CDF 0 + TAD I SPTR + CDF 10 + ISZ SPTR + SNA + JMP I SRCH /NOT FOUND + DCA SRPTR +2$: TAD I NPTR + SNA + JMP 3$ + AND (77 + SZA CLA + TAD (77 /MUST MATCH BOTH BYTES + TAD (7700 /NEED ONLY MATCH LEFT BYTE + CDF 0 + AND I SRPTR + CDF 10 + CIA + TAD I NPTR + SZA CLA + JMP 1$ /THIS SWITCH AIN'T IT + ISZ SRPTR + ISZ NPTR + ISZ NCNT + JMP 2$ +3$: ISZ SRCH + JMP I SRCH + +SRPTR, 0 /POINTS INTO LONG NAME TABLE +NCNT, 0 +NPTR, 0 /POINTS INTO NAME1-3 + PAGE + ADDED src/os8-v3f/CCLCDX.MA Index: src/os8-v3f/CCLCDX.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLCDX.MA @@ -0,0 +1,134 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /1 CCL CD EXTENSION + .ENTRY POUND,NUMBER,EQLPRM,DNUMB + .EXTERNAL GCH + .EXTERNAL LV + MPARAM=7643 + T=20 + DELIM=32 + NAME1=23 + NAME2=24 + NAME3=25 + NAME4=26 + LXR=34 + .EXTERNAL PRMESG + .RSECT CCLCDX + FIELD 1 + +BADNUM, TEXT /#BAD NUMBER/ + +EQLPRM, 0 + DCA NUMFUJ + JMS NUMBER + DCA I (MPARAM+3 + CLA CLL CML RAR + AND I (MPARAM-1 /PRESERVE ALTMODE + TAD HIORD + DCA I (MPARAM-1 + JMP I EQLPRM + NUMBER, 0 + SZA CLA + TAD (-SKP + TAD (SKP + DCA NUMADD /SET NUMADD TO EITHER "SKP" OR "TAD NUM" + DCA HIORD +NUMLP, DCA NUM + JMS I (GCH + ISZ NUMKNT + SKP + JMP EONUM2 + CMA + TAD NUMFUJ + TAD ("8 /TEST INPUT CHARACTER FOR RANGE + CLL CMA /0-7 IF NUMFUJ=0 + TAD (10 /0-9 IF NUMFUJ=2 + TAD NUMFUJ + SNL + JMP EONUM + DCA T + CLA CLL CMA RTL + DCA DELIM + TAD NUM +ROTLP, CLL RAL + DCA NUMX + TAD HIORD + RAL +NUMSKP, SPA /MODIFIED BY # + JMP CDER5 + DCA HIORD + TAD NUMX + ISZ DELIM + JMP ROTLP +NUMADD, TAD NUM /SKP IF OCTAL + TAD NUM + TAD T + JMP NUMLP +EONUM, TAD ("0 +EONUM2, DCA DELIM + TAD NUMKNT + SPA CLA + JMP CDER5 /FEWER THAN CORRECT NUMBER OF DIGITS + TAD NUM + JMP I NUMBER + +NUM, 0 +NUMFUJ, 0 +NUMKNT, 0 /SET TO -N-1 TO FORCE N DIGITS +HIORD, 0 +NUMX, 0 + DNUMB, 0 + CLA CLL CML RTL + DCA NUMFUJ /SET "NUMBER" TO ACCEPT + /DIGITS 8 AND 9 + STA /ALLOW DECIMAL + JMS NUMBER + JMP I DNUMB + CDER5, JMS I (PRMESG + BADNUM +POUND, 0 /USED AS FLAG INDICATING SAW # + TAD (SKP + DCA NUMSKP + TAD (-11 + DCA NUMKNT + JMS NUMBER + DCA NAME2 + TAD HIORD + DCA NAME1 + STA + TAD LXR + DCA LXR + TAD (-11 + DCA NUMKNT + JMS NUMBER + DCA NAME4 + TAD HIORD + DCA NAME3 + TAD (SPA + DCA NUMSKP + JMP I (LV + PAGE ADDED src/os8-v3f/CCLCOR.MA Index: src/os8-v3f/CCLCOR.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLCOR.MA @@ -0,0 +1,184 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /1 CCL CORE (MEMORY) ROUTINES + + .ENTRY DETCOR,OTOD + .EXTERNAL CORE,CORSIZ + .EXTERNAL PRINT,LBEGIN,PRWD,CMDERR + BATCCL=7777 + + .RSECT CORF1 + FIELD 1 +HISIZ, 0 /HIGHEST MEMORY BANK +NEWCOR, 0 /PROPOSED NEW MEMORY BANK + +DETCOR, 0 + CIF 0 + JMS I (CORE + SNA + JMS K8 + TAD (-30 + SMA + JMS I (K32 + TAD (40 + JMS I (OTOD + DCA CORMES+1 + TAD I (LBEGIN + DCA XRL + CDF 0 + STA + TAD I (CORSIZ + DCA HISIZ + ISZ XRL + TAD I XRL /GET NEXT CHAR + SNA + JMP COREQ /NOT SETTING CORE SIZE + TAD (-260 + DCA NEWCOR + TAD NEWCOR + AND (7770 + SZA CLA + JMP DETER /TRIED TO SET CORE SIZE GT 7 + ISZ XRL /SHOULD ONLY BE ONE FIELD NUMBER + TAD I XRL /IF MORE, THEN ERROR RETURN + SZA CLA + JMP DETER + TAD NEWCOR + CIA + TAD HISIZ + SPA CLA + JMP BADCOR /TRIED TO SET SOFTWARE CORE SIZE GT REAL CORE SIZE + TAD I (BATCCL + RTL /BATCH BIT TO LINK + SZL CLA + JMP WRSCOR /CAN'T CHANGE CORE SIZE UNDER BATCH + TAD NEWCOR + CLL RTL + RAL + DCA NEWCOR + TAD I (BATCCL + AND (7707 + TAD NEWCOR + DCA I (BATCCL +COREQ, CDF 0 + TAD I (BATCCL + AND (70 + SNA + JMP ABSCOR + TAD (10 + CLL RAR + JMS I (OTOD + CDF 10 + DCA SCRMES + TAD SCRMES + CIA + TAD CORMES+1 + SNA CLA + JMP ABSCOR /DON'T PRINT SOFT IF = REAL + JMP I (SCRM + +DETER, CDF 10 + JMP I (CMDERR + JMP I DETCOR + +XRL, 0 + +BADCOR, CDF 10 + JMS I (PRINT + NOCORE + JMP COREQ + +ABSCOR, CDF 10 + JMS I (PRINT + CORMES + JMP I DETCOR + +WRSCOR, CDF 10 + JMS I (PRINT + BATCOR + JMP COREQ + + +K8, 0 + TAD (1716 + JMS I (PRWD + TAD (1431 + JMS I (PRWD + CIF CDF 0 + JMP I K8 + SCRMES, TEXT \00K OF\ + *.-1 +CORMES, TEXT / 00K MEMORY/ + +K32, 0 + DCA TMP + TAD (4100 + DCA I (CORMES+6 + TAD TMP + JMP I K32 +TMP, 0 + PAGE + OTOD, 0 + DCA 2$ + DCA 1$ + TAD 2$ + TAD (-12 + ISZ 1$ + SMA + JMP .-3 + TAD (72 + DCA 3$ + TAD 1$ /IS THE 'TENS' DIGIT > 9? + TAD (-13 + SPA CLA /IF IT IS 9 OR LESS + JMP .+4 /JMP OVER ADJUSTMENT + TAD (4061 /OTHERWISE SET 'HUNDREDS' INDICATOR BIT + DCA I (CORMES + TAD (-12 /ADJUST 'TENS' BIT + TAD (-1 + + TAD 1$ + SNA + TAD (40-60 + TAD (60 + CLL RTL + RTL + RTL + TAD 3$ + JMP I OTOD + +1$: 0 +2$: 0 +3$: 0 + SCRM, CDF 10 + JMS I (PRINT + SCRMES + JMP I (DETER+2 +NOCORE, TEXT /# NOT ENOUGH MEMORY/ +BATCOR, TEXT /#CANNOT CHANGE MEMORY LIMIT WHILE RUNNING BATCH/ + PAGE + ADDED src/os8-v3f/CCLDAT.MA Index: src/os8-v3f/CCLDAT.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLDAT.MA @@ -0,0 +1,187 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /3 CCL DATE COMMAND + + .ENTRY DATE + .EXTERNAL PRINT,OTOD,PRWD,PRMESG + .EXTERNAL CRLF,LOOK,CHAIN + .EXTERNAL YDATE + + DATWD=7666 + BATCCL=7777 + + .RSECT CCLDAT + FIELD 1 + +DATE, 0 + TAD I (DATWD + SNA + JMP NODATE + DCA DATEM + TAD DATEM + CLL RTL + RTL + RAL + AND (17 + DCA TM1 + TAD TM1 + TAD (MONLST-1 + DCA TM2 + TAD I TM2 + DCA 4$ + TAD DATEM + AND (7 + DCA T$ + CDF 0 + TAD I (BATCCL + CDF 10 + CLL RTR + RTR + AND (30 + TAD T$ + DCA TM2 + TAD TM2 + TAD (70. + JMS I (OTOD + DCA YEAR + TAD DATEM + CLL RTR + RAR + AND (37 + DCA DATEM + TAD DATEM + JMS I (OTOD + DCA DAY + STL CLA RTL /2 + TAD TM2 + CLL RTR + SNL SMA + JMP 1$ + ISZ I (JAN + ISZ I (FEB +1$: AND (37 + TAD TM2 + TAD (3 + TAD DATEM + DCA DATEM + TAD TM1 + TAD (JAN-1 + DCA TM1 + TAD I TM1 + TAD DATEM +2$: CLL + TAD (-7 + SZL + JMP 2$ + TAD (7 + TAD (WEEKLST + DCA TM2 + TAD I TM2 + DCA 3$ + STA /DON'T CRLF AND PRINT IN LOWER CASE + JMS I (PRINT +3$: 0 + STA + JMS I (PRINT + DAYDAY + CLA IAC + JMS I (PRINT +4$: 0 + STL CLA RAR + JMS I (PRWD /SPACE + TAD DAY + JMS I (PRWD + CLA IAC + JMS I (PRINT + COM19 + TAD YEAR + JMS I (PRWD + JMS I (CRLF + JMS I (LOOK /LOOKUP SYS:DATE.SV + YDATE + JMP I DATE /DO NOTHING IF IT'S NOT THERE + JMP I (CHAIN /CHAIN TO IT, IF IT'S THERE +T$: 0 + NODATE, JMS I (PRMESG + NONE +TM1, 0 +TM2, 0 +DATEM, 0 +DAY, 0 +YEAR, 0 + +NONE, TEXT /NONE/ + PAGE + MONLST, MON1 + MON2 + MON3 + MON4 + MON5 + MON6 + MON7 + MON8 + MON9 + MON10 + MON11 + MON12 + MON1, TEXT /JANUARY/ +MON2, TEXT /FEBRUARY/ +MON3, TEXT /MARCH/ +MON4, TEXT /APRIL/ +MON5, TEXT /MAY/ +MON6, TEXT /JUNE/ +MON7, TEXT /JULY/ +MON8, TEXT /AUGUST/ +MON9, TEXT /SEPTEMBER/ +MON10, TEXT /OCTOBER/ +MON11, TEXT /NOVEMBER/ +MON12, TEXT /DECEMBER/ + COM19, TEXT /, 19/ + +WEEKLST,DAY1 + DAY2 + DAY3 + DAY4 + DAY5 + DAY6 + DAY7 + + .ENABLE ASCII +DAY1, TEXT /Satur/ +DAY2, TEXT /Sun/ +DAY3, TEXT /Mon/ +DAY4, TEXT /Tues/ +DAY5, TEXT /Wednes/ +DAY6, TEXT /Thurs/ +DAY7, TEXT /Fri/ +DAYDAY, TEXT /day / + .ENABLE SIXBIT + +JAN, 0 +FEB, 3 + 4;0;2;5;0;3;6;1;4;6 + ADDED src/os8-v3f/CCLDRV.MA Index: src/os8-v3f/CCLDRV.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLDRV.MA @@ -0,0 +1,267 @@ +/OVRDRV - OVERLAY DRIVER FOR CCL +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1977,1978 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + +/OVERLAY DRIVER +/FOR LINKER PROGRAM MODULES +/VERSION=V3A + + +/THIS SECT IS TWO LOCATIONS AND CONTAINS THE TRANSFER VECTOR TO SWAPER +/AND A FLAG THAT INDICATES WHETHER A JMP (1) OR JMS (0) WAS PERFORMED +/TO THE TRANSFER VECTOR + +/ .SECT XFERV,Z +/ 0 /FLAG, 1=JMP, 0=JMS +/ SWAPER /TRANSFER VECTOR TO SWAP ROUTINE + +/THIS IS THE MAIN DRIVER SECTION + + .SECT SWAPER,R + .GLOBAL SWPTAB,TRANVC + + .ZTERNAL XFERV + FIELD 1 + +SWAP, 6102 /VERSION NUMBER + DCA AC /SAVE CALLING AC + RAL + DCA LINK /AND LINK + RDF /GET CALLING DF + TAD (CDF /FORM CDF +SWAP0, JMP ONCE /DO ONCE ONLY CODE - REPLACED BY DCA EXIT + CDF . /CHANGE TO THIS DATA FIELD + TAD I SWAP /GET OVERLAY,LEVEL,FIELD + DCA BINDAT /SAVE + ISZ SWAP /BUMP POINTER + TAD I SWAP /GET SUBROUTINE ADDRESS + DCA XITLOC /SAVE + TAD BINDAT /FORM CDF TO CALLED SUBROUTINE + AND (7 + RAL CLL + RTL + TAD (CDF + DCA SWAP1A /SAVE + TAD SWAP1A /FORM CIF TO CALLED SUBROUTINE + IAC + DCA EXIT+1 /SAVE FOR EXIT + /LOAD OVERLAY OF CALLED SUBROUTINE + +LOAD, TAD BINDAT + AND (1600 /EXTRACT LEVEL OF CALLED SUBROUTINE + RTR CLL /5 RIGHT + RTR + RAR + DCA PNTR /SAVE + TAD PNTR + TAD (SWPTAB /COMPUTE ENTRY INTO SWAP TABLE + DCA FLD /POINTS TO FIELD OF OVERLAY + TAD PNTR /COMPUTE ENTRY INTO CURRENT OVERLAY TABLE + RTR CLL + TAD (CURTAB + DCA PNTR + TAD BINDAT /EXTRACT DESIRED OVERLAY NUMBER + AND (170 + RTR CLL /RIGHT 3 + RAR + CIA /NEGATE + DCA TEMP + TAD TEMP + TAD I PNTR /COMPARE WITH CURRENT OVERLAY NUMBER FOR LEVEL + SNA CLA /SAME? + JMP SWAP1 /YES, NO READING NEEDED +LOAD1, TAD TEMP /NO, SET TO NEW + CIA + DCA I PNTR /OVERLAY NUMBER + TAD FLD /SET UP POINTERS TO + IAC + DCA ADDRES /ADDRESS + TAD ADDRES + IAC + DCA RELBLK /RELATIVE BLOCK NUMBER + TAD RELBLK + IAC + DCA LENGTH /LENGTH OF OVERLAY + TAD TEMP /TEST OVERLAY NUMBER + SNA CLA /0? + JMP LOAD2 /YES, NO MULTIPLICATION NEEDED + TAD I LENGTH /BLOCK NUMBER = (LENGTH OF OVERLAY) + JMP I .+1 /TIMES (THE NUMBER OF THE OVERLAY) + PATCH +LOAD2, TAD I RELBLK /PLUS (RELATIVE BLOCK OF LEVEL) + TAD STRBLK /PLUS (STARTING BLOCK OF PROGRAM) + DCA REDBLK /SAVE IN CALL LOCATION + TAD I ADDRES /GET ADDRESS TO LOAD + DCA REDADD /SAVE IN CALL LOCATION + TAD I FLD /GET FIELD + AND (7 /MASK + RTR CLL + RAR /POSITION + TAD I LENGTH /GET LENGTH + RTL + RTL + RTL + DCA REDCNT /FORM CONTROL WORD + CIF 0 + JMS I (7607 /CALL SYSTEM HANDLER TO READ IN OVERLAY +REDCNT, 7756 /FUNCTION CONTROL WORD (POINTS TO MREAD-1 FOR "ONCE" +REDADD, -7607 /BUFFER ADDRESS (CONTAINS SYS: ENTRY POINT FOR "ONCE" +REDBLK, 0 /STARTING BLOCK NUMBER + HLT /ERROR RETURN ADDRESS + +SWAP1, TAD XFERV /GET JMP-JMS FLAG + SZA CLA /SET? + JMP SWAP2 /YES, EXECUTE A JMP + CLA CLL CMA RTL /-3 + TAD SWAP /BACK UP TO CALLER'S PC + DCA SWAP + TAD I SWAP +SWAP1A, 0 /CDF TO CALLED SUBROUTINE + DCA I XITLOC /SAVE IN CALLED SUBROUTINE + ISZ XITLOC /BUMP TRANSFER ADDRESS + CDF . + TAD (ISZ XFERV + DCA I SWAP /SET BACK UP ENTRY IN XFER VECTOR TABLE +SWAP2, DCA XFERV /CLEAR FLAG + TAD LINK /RESTORE LINK AND AC + RAR CLL + TAD AC +EXIT, 0 /SET DF TO CALLING FIELD + 0 /SET IF TO CALLED FIELD + JMP I XITLOC /GO TO CALLED SUBROUTINE + + /VARIABLE LOCATIONS +/SOME OF THE FOLLOWING LOCATIONS CONTAIN +/ONCE ONLY CODE TO SET UP STARTING BLOCK +/AND CHECK THAT FILE CAME FROM SYS: +CURTAB=. /CURRENT OVERLAY IN LEVEL TABLE (8 ENTRIES) +STRBLK=. /ENTRY 0 IS USED TO HOLD STARTING BLOCK OF FILE +ONCE, DCA EXIT /SAVE CALLING FIELD + /ALSO ENTRY 0 + TAD .-1 /SET UP SO WON'T BE EXECUTED AGAIN + /ALSO ENTRY 1 + DCA SWAP0 + /ALSO ENTRY 2 + CDF 0 + /ALSO ENTRY 3 + TAD I FLD /GET STARTING BLOCK FROM "SOFSET" + /ALSO ENTRY 4 + SNA + /ALSO ENTRY 5 + HLT /ERROR, K.M. PATCHES NOT IN + /ALSO ENTRY 6 + DCA STRBLK /SAVE + /ALSO ENTRY 7 + TAD I REDCNT /CHECK FILE CAME FROM SYS: + TAD REDADD + +BINDAT, /CONTAINS OVERLAY,LEVEL,FIELD OF DESIRED SUBROUTINE + SNA CLA /FROM SYS: ? +XITLOC, /CONTAINS LOCATION TO GO TO IN DESIRED SUBROUTINE + JMP SWAP0+1 /YES, OK +PNTR, /POINTS INTO CURTAB + HLT /NO, ERROR +TEMP, /TEMP STORAGE + JMP .-1 /DON'T ALLOW CONTINUE +FLD, /POINTS TO FIELD WORD IN SWPTAB + 7747 /POINTER TO "SOFSET" + +ADDRES=REDADD /POINTS TO ADDRESS WORD IN SWPTAB +RELBLK=REDBLK /POINTS TO RELATIVE BLOCK WORD IN SWPTAB +LENGTH=REDCNT /POINTS TO LENGTH WORD IN SWPTAB + +AC, 0 /SAVED AC +LINK, 0 /SAVED LINK + + PAGE + +/PATCH TO FIX BLOCK POSITION CALCULATION +PATCH, IAC /CONVERT PAGES TO BLOCKS + CLL RAR + DCA PTEMP + TAD PTEMP /MULTIPLY BLOCK LENGTH + ISZ I PPNT /BY OVERLAY NUMBER + JMP .-2 + JMP I .+1 + LOAD2 +PPNT, TEMP +PTEMP, 0 + + + +/THIS AREA CONTAINS OVERLAY DATA FOR MAIN AND THE 7 LEVELS +/THE FORMAT OF EACH ENTRY IS: +/WORD1: FIELD OF LEVEL +/WORD2: ADDRESS OF LEVEL +/WORD3: RELATIVE BLOCK OF 1ST OVERLAY IN LEVEL +/WORD4: LENGTH OF THE LEVEL (ANY AND ALL OVERLAYS-EACH) +/ (ALL OVERLAYS IN A LEVEL ARE THE SAME LENGTH) + +SWPTAB, + + *.+40 + +/THIS AREA CONTAINS THE TRANSFER VECTORS FOR EACH ENTRY POINT +/IN ALL THE OVERLAYS IN ALL THE LEVELS +/ITS SIZE SHOULD BE MODIFIED BY THE USER +/TO FIT THE MAXIMUM NUMBER OF TRANSFER VECTORS NEEDED +/EACH TRANSFER VECTOR OCCUPIES 4 LOCATIONS +/THE TABLE IS INITIALLY SET UP FOR 24(DEC) (30(OCT)) VECTORS +/THE MAXIMUM SIZE THIS TABLE CAN BE IS 3774 (OCT) LOCATIONS FOR +/511 (DEC) (777 (OCT)) VECTORS +/THE FORMAT OF EACH VECTOR ENTRY IS: +/WORD1: ISZ XFERV +/WORD2: JMS I XFERV+1 +/WORD3: LEVEL/OVERLAY/FIELD +/WORD4: ADDRESS + +TRANVC, + + SIZE=53. /MODIFY THIS LINE TO CHANGE THE SIZE OF THE TABLE + /SET FOR 24(DEC) + + *SIZE^4+. + + + ADDED src/os8-v3f/CCLMSG.MA Index: src/os8-v3f/CCLMSG.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLMSG.MA @@ -0,0 +1,170 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /2 CCL MESSAGE PRINTER + .EXTERNAL TWAIT,BATCH + + T=20 + BATOUT=7400 /JMS HERE TO PRINT ON BATCH LOG + BATERR=7000 /JMP HERE TO ABORT BATCH + NAME1=23 + NAME2=24 + NAME3=25 + NAME4=26 + NAME5=27 + + .GLOBAL PRMESG,PRWD,PRNAME,PRINT,CRLF + .GLOBAL LEAVE + .RSECT CCLMSG + + FIELD 1 + +PRMESG, 0 + CLA + TAD I PRMESG + DCA TE2 + JMS PRINT +TE2, HLT +LEAVE, JMS I (TWAIT +/V3D TCF + CIF CDF 0 + TAD FATALFLG + SNA CLA + JMP I (7605 +FATALFLG,0 /CIF CDF BATCH FIELD IF WANT TO ABORT + JMP I (BATERR + +PRWD, 0 + DCA T + TAD T +TTY212, RTR + RTR + RTR + JMS PCHAR + TAD T + JMS PCHAR + JMP I PRWD + +PCHAR, 0 + AND (77 +TNOP, SNA + JMP I PCHAR /IGNORE NULLS + TAD (240 + AND (77 + TAD (240 /CAN'T USE 'TTY240' + JMS TYPE + JMP I PCHAR + TE, +PRNAME, 0 + TAD NAME1 + JMS PRWD + TAD NAME2 + JMS PRWD + TAD NAME3 + JMS PRWD + TAD NAME4 + SNA CLA + JMP I PRNAME + TAD (256 + JMS PCHAR + TAD NAME4 + JMS PRWD +/ TAD NAME5 +/ SZA +/ JMS PRWD + JMP I PRNAME + TYPE, 0 +/ SNA +/ JMP I TYPE /CAN REMOVE IF NEED ROOM + DCA TE2 + JMS I (BATCH + JMP TTYOUT + DCA CIFB +CIFB, HLT /REPLACED BY CIF BATCH FIELD + TAD TE2 + JMS I (BATOUT + TAD TE2 + TAD (-"# + SZA CLA + JMP I TYPE + TAD CIFB + IAC /CONVERT CIF TO CIF CDF + DCA FATALFLG + JMP I TYPE + +TTYOUT, TAD TE2 + TAD (-"# /DON'T TYPE #'S + SNA CLA + JMP I TYPE + TAD T7600 + KRS + TAD (-7603 + SNA + JMP LEAVE + TAD (203-217 + SNA CLA + JMP I TYPE + TAD TE2 +TJUMP, JMP .+3 + TSF + JMP .-1 + TLS +T7600, 7600 + TAD TNOP + DCA TJUMP + JMP I TYPE + PRINT, 0 + DCA CRLF /AC NON-0 MEANS DON'T CRLF + TAD I PRINT + ISZ PRINT + DCA TE + TAD CRLF + SPA CLA + TAD (TYPE-PRWD + TAD (PRWD + DCA PROUT +1$: TAD I TE + JMS I PROUT + TAD I TE + ISZ TE + AND (77 + SZA CLA + JMP 1$ + CLA IAC + AND CRLF + SNA CLA + JMS CRLF + JMP I PRINT + +PROUT, PRWD + CRLF, 0 + TAD (215 + JMS TYPE + TAD TTY212 + JMS TYPE + JMP I CRLF + PAGE + ADDED src/os8-v3f/CCLPS.MA Index: src/os8-v3f/CCLPS.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLPS.MA @@ -0,0 +1,63 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /1 + .ASECT MORTBL + FIELD 0 + *7130 + .EXTERNAL NMOVE,DONB,UNKN + .EXTERNAL SETDEV,LPTDEV,TTYDEV,TVDEV,PTPDEV,DMPDEV,NULDEV + .GLOBAL SWTCHS +SWTCHS, 1423; P1 /LS + 1602; P2 /NB + 1520; P3 /MP + 1400; P4 /L + 2400; P5 /T + 2300; P6 /S + 2000; P7 /P + 0400; P8 /D + 1600; P9 /N + 0000; P10 /UNKNOWN + P1, NMOVE + 7605 +P2, DONB + 0 +P3, NMOVE + 7612 +P4, SETDEV + LPTDEV +P5, SETDEV + TTYDEV +P6, SETDEV + TVDEV +P7, SETDEV + PTPDEV +P8, SETDEV + DMPDEV +P9, SETDEV + NULDEV +P10, UNKN + 0 ADDED src/os8-v3f/CCLREM.MA Index: src/os8-v3f/CCLREM.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLREM.MA @@ -0,0 +1,270 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /1 CCL RECOLLECTION ROUTINES + + .EXTERNAL REMD,SCAN,LBEGIN,BEGLN,PRMESG,PRINT + + DATWD=7666 + CLXR=35 + XR=16 + + .ENTRY REMEM,FOREVER,RECALL + .RSECT CCLREM + FIELD 1 + +/CCL REMEMBERS UP TO 8 COMMAND LINES (EACH UP TO 55 DECIMAL +/SIXBIT CHARACTERS LONG) IN BLOCK 65 ON THE SYSTEM DEVICE. +/THIS BLOCK WHEN READ INTO 04000-04377 HAS THE FOLLOWING FORMAT: + +/4000-4037 REM-LINE 0 +/4040-4177 REM-LINE 1 +/4100-4137 REM-LINE 2 +/4140-4177 REM-LINE 3 +/4200-4237 REM-LINE 4 +/4240-4277 REM-LINE 5 +/4300-4337 REM-LINE 6 +/4340-4377 REM-LINE 7 + +/EACH REM-LINE HAS THE FOLLOWING FORMAT: + +/WORD 0: IN-USE FLAG, MUST BE '1234' TO INDICATE LINE WAS REMEMBERED HERE +/WORD 1: DATE LINE WAS REMEMBERED +/WORD 2: COMMAND DEPENDENT INFORMATION +/WORD 3: RESERVED FOR FUTURE EXPANSION +/WORDS 4-37 COMMAND LINE NOT INCLUDING KEYWORD OR FOLLOWING SPACES +/ PACKED IN 6-BIT AND TERMINATED BY A 6-BIT 0. + +/ROUTINES: + +/ TAD (DEP +/ JMS REMEM +/ N + +/REMEMBERS CURRENT LINE IN REM-LINE N. AC IS LINE DEPENDENT INFORMATION. +/IF LINE IS TOO BIG, THIS PRINTS A WARNING MESSAGE AND RETURNS AS IF OK. + +/ JMS RECALL +/ N + +/RECALLS REM-LINE N INTO BUFFER +/IF NOTHING THERE, PRINTS A BAD SYNTAX MESSAGE AND RETURNS TO OS/8. +/UPON RETURN, LINE-DEPENDENT INFO IS IN AC. +/IF DATES DON'T MATCH, IT'S NOT THERE UNLESS DATE = -1 + +/0 USED BY TECO, MAKE COMMANDS +/1 USED BY EDIT, CREATE COMMANDS +/2 USED BY COMPILE, EXECUTE COMMANDS & PAL. +/ DEPENDENT WORD IS PTR TO FIRST ENTRY IN MAIN TABLE + +/3 USED BY 'UA' COMMAND +/4 USED BY UB +/5 USED BY UC + +/ JMS FOREVER + +/CAUSES NEXT CALL TO REMEM TO INSERT -1 AS DATE + REMSPACE=4000 + REMBLOCK=65 + +REMEM, 0 + DCA DEP + TAD I (REMD + SMA CLA + JMP I REMEM /DON'T REMEMBER IF JUST RECALLED + JMS I (RDREM + JMP I (MEMBIG + TAD I REMEM + ISZ REMEM + CLL RTL + RTL + RAL /MULTIPLY BY 40 + TAD (REMSPACE + DCA LPTR + TAD (1234 + CDF 0 + DCA I LPTR + CDF 10 + ISZ LPTR +FORVR, TAD I (DATWD /REPLACED BY CMA IF WANT NO DATE + JMS LPUT /STORE DATE + TAD DEP + JMS LPUT /STORE DEPENDENT INFO + JMS LPUT /RESERVED + JMS I (SCAN /GO PAST KEYWORD AND BLANKS + TAD I (LBEGIN + DCA XR +L$: JMS I (GETF + JMP 3$ + JMS I (ROTL + DCA TML + JMS I (GETF + JMP 2$ + TAD TML + JMS LPUT + JMP L$ +2$: TAD TML +3$: JMS LPUT + JMS I (WRREM + JMP I (MEMBIG +REMGO, JMP I REMEM + DEP, 0 +LPTR, 0 /PTS TO REM-LINE +TML, 0 /TEMP + +/PUT INTO REM-LINE + +LPUT, 0 + DCA TML + TAD LPTR + AND (37 + SNA CLA + JMP I (MEMBIG + TAD TML + CDF 0 + DCA I LPTR + CDF 10 + ISZ LPTR + JMP I LPUT + +FOREVER,0 + TAD LCMA + DCA FORVR + JMP I FOREVER /NON-ZERO MEANS SET DATE TO -1 + RECALL, 0 + JMS I (RDREM + JMP I (REMERR + TAD I RECALL + ISZ RECALL + JMS I (ROTL + RAR + TAD (REMSPACE + DCA LPTR + JMS LGET + TAD (-1234 + SZA CLA + JMP I (REMER2 + JMS LGET + SNA + JMP I (REMER2 +LCMA, CMA + SNA + JMP 1$ + IAC + TAD I (DATWD /SAME DAY? + SZA CLA + JMP I (REMER2 +1$: JMS LGET + DCA DEP + JMS LGET /IGNORE RESERVED WORD + CLA + TAD (BEGLN-1 + DCA XR + TAD (BEGLN-1 + DCA I (LBEGIN +L$: JMS LGET + DCA TML + TAD TML + JMS I (ROTL + RAL + JMS I (PUTF + JMP LV$ + TAD TML + JMS I (PUTF + JMP LV$ + JMP L$ + +LV$: TAD DEP + JMP I RECALL + LGET, 0 + CDF 0 + TAD I LPTR + CDF 10 + ISZ LPTR + JMP I LGET + PAGE + PUTF, 0 + AND (77 + SNA + JMP PUTZ + ISZ PUTF + TAD (240 + AND (77 + TAD (240 +PUTZ, CDF 0 + DCA I XR + CDF 10 + JMP I PUTF + +REMERR, JMS I (PRMESG + REMBAD +REMER2, JMS I (PRMESG + BADREM + MEMBIG, CLA + JMS I (PRINT + MEMWARN + JMP I (REMGO + +RDREM, 0 + CIF 0 + JMS I (7607 + 200 /READ 2 PAGES INTO FIELD 0 + 4000 /LOCATION 4000 + REMBLOCK + SKP CLA + ISZ RDREM + JMP I RDREM + +WRREM, 0 + CIF 0 + JMS I (7607 + 4200 /WRITE 2 PAGES FROM FIELD 0 + 4000 /LOCATION 4000 + REMBLOCK + SKP CLA + ISZ WRREM + JMP I WRREM + /GET FROM INPUT LINE VIA XR + +GETF, 0 + CDF 0 + TAD I XR + CDF 10 + SZA + ISZ GETF + AND (77 + JMP I GETF + ROTL, 0 + CLL RTL + RTL + RTL + JMP I ROTL + +MEMWARN,TEXT /%CAN'T REMEMBER/ +REMBAD, TEXT \#I/O ERROR TRYING TO RECALL\ +BADREM, TEXT /#BAD RECOLLECTION/ + PAGE + ADDED src/os8-v3f/CCLRUN.MA Index: src/os8-v3f/CCLRUN.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLRUN.MA @@ -0,0 +1,150 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /1 CCL RUN COMMAND + + .RSECT CCLRUN + FIELD 1 + + .ENTRY MONFIX,MONRES + .EXTERNAL RDMON,PRMESG + .EXTERNAL F1,F2,LO1,LO2 + .EXTERNAL YLOAD,YLOADER,YF4,YFORT + .EXTERNAL LOOK + .EXTERNAL BLK,IOERR + PRQMRK==1357 + CCLBLK=67 + DEASADR=427 + CCLSW=435 + GETCCL=1362 + .EXTERNAL YCCL + OS78BIT=7771 + +MONFIX, JMS I (RDMON + CDF 0 + TAD I ZERO + TAD (-7607 + SNA CLA + JMP I (CCER3 /ALWAYS WRITE OUT CCL BLOCK + CDF 10 + CIF 0 + JMS I L7607 + 4200 /WRITE 1 RECORD FROM FIELD 0 + 400 /LOCATIONS 400-777 + CCLBLK /INTO THE SYSTEM'S CCL BLOCK + JMP I (IOERR + CDF 0 + TAD I (2000+CCLSW + TAD XXX + SNA + JMP OK$ + TAD XXX2 + SZA CLA + JMP I (CCER3 +/ CIF CDF 0 +/ JMP I L7605 +OK$: TAD (GETCCL + DCA I (2000+CCLSW + STA + DCA I (2000+DEASADR /DELETE DEASSIGN + JMS WRMON + IFZERO 1 < + JMS I (LOOK + YFORT /LOOK FOR FORT.SV + TAD XXX3 /NOT FOUND, USE F4 + TAD (YFORT /FOUND USE IT + DCA I (F1 + TAD I (F1 + DCA I (F2 + TAD I (F1 + TAD MYFORT + SZA CLA + TAD XXX4 + TAD (YLOADER + DCA I (LO1 + TAD I (LO1 + DCA I (LO2 + JMS I (LOOK + YCCL + JMP I (IOERR /CCL.SV NOT FOUND + TAD I (BLK + TAD (4 /*3400 IS 4TH BLOCK OF CCL NOT COUNTING CCB + DCA B$ + CDF 10 + CIF 0 + JMS I (7607 + 4210 /WRITE 1 RECORD FROM FIELD 1 + 3400 /LOCS 3400-3777 +B$: 0 + JMP I (IOERR + > + CIF CDF 0 + JMP I (7605 + +XXX, -PRQMRK +XXX2, PRQMRK-GETCCL + IFZERO 1 < +MYFORT, -YFORT +XXX3, YF4-YFORT +XXX4, YLOAD-YLOADER + > + WRMON, 0 + CDF 10 + CIF 0 + JMS I L7607 + 4200 + 2400 + 10 + JMP I (IOERR + JMP I WRMON + +ZERO, 0 +L7607, 7607 + MONRES, 0 + CDF 0 + TAD I (OS78BIT + CDF 10 + AND (200 + SZA CLA + JMP ERR + JMS I (RDMON + CDF 0 + TAD (PRQMRK + DCA I (2000+CCLSW + TAD (-405 + DCA I (2000+DEASADR + JMS WRMON + JMP I MONRES + +ERR, JMS I (PRMESG + .+1 + TEXT "#CCL IS THE CONCISE COMMAND LANGUAGE FOR OS/78" + CCER3, CDF 10 + JMS I (PRMESG + BADMON +BADMON, TEXT /#BAD MONITOR/ + PAGE + ADDED src/os8-v3f/CCLSB2.MA Index: src/os8-v3f/CCLSB2.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLSB2.MA @@ -0,0 +1,155 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /2 CCL SUBROUTINES PART 2 + .ENTRY TRMSUB,REQSUB,CANSUB + OS78BIT=7771 + .EXTERNAL PRMESG,LOOK,CHAIN,YTERMIN,PRINT,LEAVE + + .RSECT CCLSB2 + FIELD 1 + .SBTTL TERMINATE COMMAND + +TRMSUB, 0 + CDF 0 + TAD I (OS78BIT + CDF 10 + AND (200 + SNA CLA + JMP I TRMSUB /BACKSPACE, NOT TERMINATE + JMS I (LOOK /LOOKUP TERMIN.SV + YTERMIN + SKP CLA + JMP I (CHAIN + 6073 + 6002 + CLA STL RAR /JUST IN CASE WE'RE NOT ON A VT-78 + JMS I (PRINT + BADEV + JMP I (LEAVE + CANSUB, 0 + TAD I (7726 + AND (4 + SNA CLA + JMP FOO4 + TAD I (7726 + AND (7773 + DCA I (7726 /TURN OFF SYMBIONT BIT + CDF 0 + TAD I (7777 + RTL + SZL CLA + JMP 3$ + TAD I (7777 + AND (7707 + DCA I (7777 +3$: CDF 10 + STL CLA RAR + JMS I (PRINT + OFFMSG + STL CLA RAR + JMS I (PRINT + ME2MSG + CIF CDF 30 + JMP I (3 /GO TO MAGIC SPOT IN SYMBIONT LAND + +FOO3, STL CLA RAR + JMS I (PRINT + ALRACT + JMP I (LEAVE +FOO4, STL CLA RAR + JMS I (PRINT + NOTACT + JMP I (LEAVE + PAGE + .SBTTL REQUEST COMMAND + +REQSUB, 0 + TAD I (7617 + AND (17 + TAD (7647-1 + DCA T + TAD I T + TAD (-7607 + SZA CLA + JMP FOO /*** FILE NOT ON SYS: + TAD I (7620 + DCA BLK + CDF 0 + TAD I (7777 + AND (70 + TAD (-20 + SNA CLA + JMP 1$ + RTL + SZL CLA + JMP FOO2 + TAD I (7777 + AND (7707 + TAD (20 + DCA I (7777 +1$: CDF 10 + TAD I (7726 + AND (4 + SZA CLA + JMP FOO3 + TAD I (7726 + AND (7773 + TAD (4 + DCA I (7726 + STL CLA RAR + JMS I (PRINT + ONMSG + STL CLA RAR + JMS I (PRINT + MEMMSG + JMS I (200 /CHAIN TO IT + 6 +BLK, 0 + +T, 0 + FOO, STL CLA RAR + JMS I (PRINT + SYSMSG + JMP I (LEAVE + +FOO2, CDF 10 + STL CLA RAR + JMS I (PRINT + BATMSG + JMP I (LEAVE + PAGE + .ENABLE ASCII +SYSMSG, TEXT "#Symbiont must be on SYS:" +BATMSG, TEXT "#Cannot start symbiont from BATCH" +ONMSG, TEXT "[Starting symbiont]" +BADEV, TEXT "#Illegal OS/8 command" +OFFMSG, TEXT "[Shutting down symbiont]" +NOTACT, TEXT "%No symbiont is active" +ALRACT, TEXT "#Request denied - symbiont already running" +MEMMSG, TEXT "[12K Memory]" +ME2MSG, TEXT "[16K Memory] + .ENABLE SIXBIT ADDED src/os8-v3f/CCLSEM.MA Index: src/os8-v3f/CCLSEM.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLSEM.MA @@ -0,0 +1,199 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /1 CCL SEMICOLON CODE + + .ENTRY SEMI + + .EXTERNAL PRMESG,YBATCH,ZOW,BEGLN + MOFILE=7600 + XR=16 + + .RSECT SEM1 + FIELD 1 + +ENGOA, TAD (-5 + JMS I (ZEROCD + TAD I (BLKNO + DCA I (7620 + CLA IAC + DCA I (7617 /'CCBTCH' IS ON SYS: + TAD (20 / /T OPTION + DCA I (7644 + TAD (20 / ALSO /H (HUSH) OPTION + DCA I (7643 + TAD (YBATCH + JMP I (ZOW /CHAIN TO BATCH + +ZEROCD, 0 + TAD (-42 /AC MAY BE NON-0 + DCA T$ + TAD (MOFILE-1 + DCA XR + DCA I XR /ZERO THE COMMAND DECODER OUTPUT AREA + ISZ T$ + JMP .-2 + JMP I ZEROCD +T$: 0 + SEMSG1, TEXT /? ENTER ERROR/ +SEMSG2, TEXT \?I/O ERROR\ +SEMSG3, TEXT /?DEVICE FULL/ +SEMSG4, TEXT /?CLOSE ERROR/ + PAGE + BATBUF=4400 /LOCATION OF ONE BLOCK BATCH TEMP BUFFER + USR=200 + GLINE=1200 /LOCATION FROM KBM + CTRLCK=1241 /LOC FROM KBM, PTS TO PLACE TO BRANCH ON ^C +BATPTR, BATBUF-1 +LCHAR, 0 + +SEMGO, CIF CDF 10 + JMP I SEMI + +SEMI, 0 + CLA IAC /SYS + JMS I (USR + 3 /ENTER +BLKNO, TEMNAM +BLKLEN, 0 /NEG OF LENGTH + JMP SEMER1 /ENTER ERROR + TAD BLKNO + DCA BATBLK + TAD (BEGLN-1 + DCA XR + TAD (7600 + DCA I (CTRLCK /FORCE ^C TO GLINE TO GO TO 7600 + JMS BATLST + BATHED +S2, CDF 0 + TAD I XR + CDF 10 + SNA + JMP LINEND + DCA LCHAR /SAVE CHAR + TAD LCHAR + TAD (-"; + SNA CLA + JMP GOTSEM + TAD LCHAR +S3, JMS BATPUT + JMP S2 + LINEND, TAD LCHAR + TAD (-"; /LOOK AT LAST CHAR + SZA CLA /WAS IT SEMICOLON? + JMP BATEND /NO, END OF TEMP BATCH STREAM + CIF CDF 0 + JMS I (GLIN /YES, READ NEW LINE FROM KEYBOARD +/**** WHAT IF WE'RE RUNNING UNDER BATCH **** + TAD (BEGLN-1 + DCA XR + JMP S2 + +GOTSEM, JMS KRLF + TAD (". + JMP S3 + +KRLF, 0 + TAD (215 + JMS BATPUT + TAD (212 + JMS BATPUT + JMP I KRLF + +BATPUT, 0 + ISZ BATPTR + CDF BATBUF + DCA I BATPTR + CDF 10 + TAD BATPTR + TAD (-BATBUF-377 + SNA CLA + JMS BATWRIT /WRITE OUT BUFFER IF FULL + JMP I BATPUT + BATWRIT,0 + CIF 0 + JMS I (7607 + 4200 /WRITE 1 BLOCK + BATBUF +BATBLK, 0 + JMP SEMER2 / I/O ERROR + ISZ BATBLK /POINT TO NEXT BLOCK + ISZ BATLEN /BUMP LENGTH + ISZ BLKLEN + SKP + JMP SEMER3 /DEVICE FULL + TAD (BATBUF-1 + DCA BATPTR + JMP I BATWRIT + +BATEND, JMS KRLF + JMS BATLST + BATAIL + JMS BATWRIT + CLA IAC /SYS + JMS I (USR + 4 /CLOSE + TEMNAM +BATLEN, 0 /LENGTH OF TEMPORARY FILE + JMP SEMER4 /CLOSE ERROR + JMP I (ENGOA + BATLST, 0 + TAD I BATLST + DCA T$ + ISZ BATLST +L$: TAD I T$ + SNA + JMP I BATLST + JMS BATPUT + ISZ T$ + JMP L$ + +T$: 0 + +SEMER1, JMS I (PRMESG + SEMSG1 +SEMER2, JMS I (PRMESG + SEMSG2 +SEMER3, JMS I (PRMESG + SEMSG3 +SEMER4, JMS I (PRMESG + SEMSG4 + PAGE + .FSECT GLYN + FIELD 0 + +GLIN, 0 + JMS I PGLINE + CIF CDF 10 + JMP I GLIN +PGLINE, GLINE + .ASECT SEMSGS + .ENABLE ASCII + FIELD 0 + *7400 +BATHED, TEXT "$JOB"<215><212>"." +BATAIL, TEXT ".R FOTP"<215><212>"*SYS:CCBTCH.TM/D$"<215><212>"$END"<215><212><32> +TEMNAM, FILENAME CCBTCH.TM ADDED src/os8-v3f/CCLSIZ.MA Index: src/os8-v3f/CCLSIZ.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLSIZ.MA @@ -0,0 +1,78 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /1 + .GLOBAL CORE,CORSIZ + .ASECT CORF0 + LXM=6200 + FIELD 0 + *7200 +CORLOC, CORX +CORV, 1400 +CORSIZ, 1 + +CORE, 0 + TAD T7000 /SETS KT8A IF PRESENT + LXM /LXM INSTRUCTION + CLA /LXM ACTS AS NOP IF NO KT8A +CORE2, CDF 0 + TAD CORSIZ /ADJUST FIELDS FOR CDF + CLL RTR + RTR + BSW + SZL + TAD T4 + AND COR174 + TAD COREX + DCA .+1 +COR1, CDF + TAD I CORLOC +COR2, NOP + DCA COR1 + TAD COR2 + DCA I CORLOC +COR174, 174 + TAD I CORLOC +CORX, 7400 + TAD CORX + TAD CORV + SZA CLA + JMP COREX + TAD COR1 + DCA I CORLOC + ISZ CORSIZ + JMP CORE2 +COREX, CDF 0 + LXM /NEUTRALIZES KT8A + TAD CORSIZ + CLL RTL + TAD M10 + CIF CDF 10 + JMP I CORE /RETURN +M10, -10 +T4, 4 +T7000, 7000 + ADDED src/os8-v3f/CCLSUB.MA Index: src/os8-v3f/CCLSUB.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLSUB.MA @@ -0,0 +1,454 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /3 CCL SIMPLE COMMAND SUBROUTINES + + .EXTERNAL REMD,REGO,FLAG,FOREVER,REMEM,PRMESG + .EXTERNAL RDMON,BATCH + .GLOBAL USRSUB,BASUB,DEASSIGN + .EXTERNAL ASSIGN,FUDG,DVICE,LOOK,PRINT + .ENTRY VERTN /CALLED INDEPENDENTLY BY CCL + .GLOBAL CRSUB,EDSUB,ZERSUB + .GLOBAL TECSUB,MAKSUB,MNGSUB + .GLOBAL SQSUB,KILRT,RENRT,MOVRT + .EXTERNAL CDER2,GETSPC,GCH,ZEROCD,LBEGIN + .ENTRY CMDERR + .ENTRY CCSUB + .GLOBAL ARLOC /**** + MOFILE=7600 + MPARAM=7643 + + XR2=15 + XR=16 + NAME1=23 + NAME2=24 + NAME3=25 + NAME4=26 + DELIM=32 + LXR=34 + OS78BIT=7771 + CCLNUM="3 + CCLVER="A + .SBTTL UA,UB,UC COMMANDS + .RSECT CCLSUB + FIELD 1 + +/TEST END OF TABLE + +USRSUB, 0 + TAD I (REMD + SMA CLA + JMP I (REGO /REMEMBERED A NEW LINE + TAD I (FLAG /WANT TO + AND (70 + CLL RTR + RAR + TAD (-1 /IN THIS REM-LINE + DCA U$ + JMS I (FOREVER /NO DATE + JMS I (REMEM +U$: 0 + JMP I USRSUB + .SBTTL BASIC COMMAND + +BASUB, 0 + TAD (200 /SET /Q SWITCH + DCA I (MPARAM+1 + JMP I BASUB + .SBTTL VERSION COMMAND + +VERTN, 0 + JMS I (RDMON /READ MONITOR + CDF 0 + TAD I (2031 /GET PATCH LEVEL + SNA + TAD ("! + AND (77 + DCA TEM$ + TAD I (2000 /GET VERSION # + CDF 10 + SPA +KK7600: 7600 /"0" MEANS OLD + TAD (60 + CLL RTL + RTL + RTL + TAD TEM$ + DCA I (VLOC + CDF 0 + TAD I (OS78BIT + AND (200 / 78 + SZA CLA / OR + TAD (1000 / /8 + TAD (5770 + CDF 10 + DCA I (LOC78 + JMS I (PRMESG + VMES +TEM$: 0 + .SBTTL DEASSIGN COMMAND + +/ALLOW DEASSIGN FOO ? + +DEASSIGN,0 + TAD (7740 + DCA XR + TAD (-17 + DCA T$ + DCA I XR + ISZ T$ + JMP .-2 + CDF 0 + TAD I (7746 + AND (6777 + TAD (1000 + DCA I (7746 + CDF 10 + JMP I DEASSIGN + +T$: 0 + CHKSUP, 0 + JMS I (FUDG + JMS I (ASSIGN + TAD NAME1 + SNA CLA + JMP I CHKSUP /CAN'T SUP IF NO FILENAME + TAD I (DVICE + JMS I (LOOK /LOOK UP FILE + NAME1 + JMP I CHKSUP /NOT FOUND (GOOD) + JMS I (PRINT + SUP + JMP I CHKSUP + .SBTTL ZERO COMMAND +ZERSUB, 0 + TAD I (7601 + SNA CLA /WAS FILENAME SPECIFIED ON ZERO CMD? + TAD I KK7600 /OR WAS NO OUT DEVICE SPECIFIED? + SNA CLA + JMP I (CDER2 /YES... ERROR + JMP I ZERSUB /NO, OKAY. + +CMDERR, JMS I (PRMESG /NOT A LEGAL KEYWORD + ERRCMD + +RENMES, TEXT /FILES RENAMED:/ + PAGE + .SBTTL PUT MACRO + .NOLIST ME + + .MACRO PUT TXT + JMS TECPUT + + .IF IDN TXT[1],$< + .ENABLE ASCII + ;TEXT "TXT[2:0]" + .ENABLE SIXBIT + > + + .IF DIF TXT[1],$< + .ENABLE ASCII + ;TEXT /TXT/ + .ENABLE SIXBIT + > + + .ENDM + .SBTTL MAKE COMMAND + + ALTMODE=233 + +SETPA, 0 + JMS I (SETX + "P;"A /KEEP HERE TO MAKE EASY TO PATCH + JMP I SETPA + +MAKSUB, 0 + TAD DELIM + SNA CLA + JMP I (CMDERR /DON'T ALLOW MAKE + JMS SETLXR + JMS I (GETSPC + JMS I (LOVE + PUT "EW" + JMS TECMOV + JMS SETPA + PUT "$" + JMS I (CHKSUP + JMS I (REMEM + 0 + JMP I MAKSUB + +SETLXR, 0 + TAD I (LBEGIN + DCA LXR + TAD (MOFILE-1 + DCA I (TYR + TAD (-5 /ZERO OPTION TABLE TOO + JMS I (ZEROCD + TAD LXR + DCA SAVLXR + JMP I SETLXR + +/PUT FOLLOWING CHARS INTO TECO BUFFER VIA TXR + +TECPUT, 0 +/ TAD NAME1 +/ SNA CLA +/ JMP I (CDER2 + TAD I TECPUT + ISZ TECPUT + SNA + JMP I TECPUT + JMS I (TPUT + JMP TECPUT+1 + /MOVE CHARS FROM FIELD 0 LINE BUFFER +/FROM SAVLXR+1 TO LXR-1 INCLUSIVE +/INTO TECO LINE BUFFER AT 17600 + +TECMOV, 0 + TAD SAVLXR + DCA XR2 + TAD SAVLXR + CMA + TAD LXR + SNA CLA + JMP I (CDER2 /NO FILE SPEC +L$: CDF 0 + TAD I XR2 + CDF 10 + JMS I (TPUT + TAD XR2 + CMA + TAD LXR + SNA CLA + JMP I TECMOV + JMP L$ + .SBTTL TECO COMMAND + +TECSUB, 0 + JMS SETLXR + JMS I (GETSPC + TAD DELIM + SNA + JMP TECNORM + TAD (-"< /ALLOW "_" AS WELL AS "<" + SZA + TAD ("<-"= + SZA + TAD ("=-"_ + SZA CLA + JMP I (CDER2 +1$: CDF 0 + DCA I LXR /CHANGE < TO 0 + CDF 10 + PUT "EW" + JMS TECMOV + JMS SETPA + TAD LXR + DCA SAVLXR + JMS I (CHKSUP + JMS I (GETSPC + PUT "$ER" + JMS TECMOV + JMS SETPA + PUT "$Y" + JMP TECLV + TECNORM,PUT "EB" + JMS TECMOV + JMS SETPA + PUT "$Y" +TECLV, JMS I (REMEM + 0 + JMP I TECSUB +SAVLXR, 0 + PAGE + .SBTTL MUNG COMMAND + +TPUT, 0 + AND (177 /TECO LIKES 7-BIT + ISZ TYR + DCA I TYR + TAD TYR + TAD (-7646 /CHECK FOR OVERFLOW OF CD AREA + SZA CLA + JMP I TPUT + JMS I (PRMESG + TOOLNG + +MNGSUB, 0 + JMS I (SETLXR + JMS I (GETSPC + PUT "ER" + JMS I (TECMOV + JMS SETX + "T;"E + PUT "$YHXYHKI" + TAD DELIM + SNA + JMP F$ + TAD (-", + SZA CLA + JMP I (CDER2 +L$: STL CLA RAR /PREVENT 'GCH' FROM HANDLING SPACE AND / + JMS I (GCH + AND (177 /GET RID OF HIGH ORDER BIT + SNA + JMP F$ + JMS TPUT + JMP L$ +F$: PUT "$MY" /MACRO GETS CALLED WITH POINTER PAST CHARS + JMP I MNGSUB +TYR, 0 + /SET DEFAULT EXTENSION + +SETX, 0 + TAD I SETX + DCA 1$ + ISZ SETX + TAD I SETX + DCA 2$ /FALL THRU 2ND EXT + TAD NAME4 + SNA CLA + TAD NAME1 + SNA CLA + JMP I SETX + TAD I TYR /GET LAST CHAR (NO EXT) + TAD (-56 /WAS IT A DOT? + SNA CLA + JMP I SETX /YES + JMS I (TECPUT /NO, USE DEFAULT EXTENSION + ". +1$: 0 +2$: 0 + 0 + TAD 1$ + AND (77 + CLL RTL + RTL + RTL + DCA 1$ + TAD 2$ + AND (77 + TAD 1$ + DCA NAME4 + JMP I SETX + LOVE, 0 + TAD NAME1 + TAD (-'LO + SZA CLA + JMP I LOVE + TAD NAME2 + TAD (-'VE + SZA CLA + JMP I LOVE + TAD NAME3 + TAD NAME4 + SZA CLA + JMP I LOVE + JMS I (PRINT + LOVMES + JMP I LOVE + +TOOLNG, TEXT /#COMMAND TOO LONG/ + CCSUB, 0 /USED TO FORCE THIS OVERLAY IN + JMP I CCSUB + PAGE + .SBTTL CREATE COMMAND + +CRSUB, 0 + TAD I (7617 + SNA CLA /BETTER BE NO INPUT + TAD I K7600 /ANYTHING THERE? + SNA CLA + JMP I (CDER2 /NO OUTPUT OR YES INPUT + JMS EDSUB /REMOVE BACK-ARROW AND REMEMBER CREATE LINE + JMP I CRSUB + .SBTTL EDIT COMMAND + +EDSUB, 0 + CDF 0 + DCA I ARLOC /REPLACE ARROW BY NULL + CDF 10 + JMS I (REMEM /REMEMBER NEW COMMAND LINE + 1 + JMP I EDSUB + +ARLOC, . /LOCATION OF BACK-ARROW IN COMMAND LINE + /'.' IS HARMLESS POINTER IN CASE NO ARROW + .SBTTL SQUISH COMMAND + +SQSUB, 0 + TAD I K7600 + SZA CLA + JMP I SQSUB + TAD I (7617 + DCA I K7600 + JMS I (BATCH /IS BATCH RUNNING? + JMP I SQSUB /NO +K7600, 7600 /YES (CLEAR AC) + TAD I K7600 + TAD (7647-1 /POINT INTO DEVICE HANDLER RESIDENCY TABLE + DCA T$ + TAD I T$ /GET HANDLER STARTING ADDRESS + TAD (-7607 + SZA CLA /IS SQUISHED DEVICE SYS:? + JMP I SQSUB /NO + JMS I (PRINT + SQWARN /YES, WARN USER + JMP I SQSUB +T$: 0 + .SBTTL COPY, MOVE, AND DELETE COMMANDS + +KILRT, 0 + STL CLA RAR /4000 MEANS NOT PACKED + JMS I (PRINT + KILMES + JMP I KILRT + +RENRT, 0 + JMS I (PRINT + RENMES + JMP I RENRT + +MOVRT, 0 + JMS I (PRINT + MOVMES + JMP I MOVRT + VMES, TEXT \OS/8 - KBM V3A - CCL V1A\ + LOC78=VMES+1 + VLOC=VMES+6 + *.-2 + CCLNUM&77^100+ + *.+2 +LOVMES, TEXT /NOT WAR?/ +SUP, TEXT /%SUPERSEDING/ +ERRCMD, TEXT /#ERROR IN COMMAND/ +SQWARN, TEXT /%BATCH SQUISHING SYS:!/ +MOVMES, TEXT /FILES COPIED:/ + .ENABLE ASCII +KILMES, TEXT /Files deleted:/ + .ENABLE SIXBIT + PAGE ADDED src/os8-v3f/CCLTAB.MA Index: src/os8-v3f/CCLTAB.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLTAB.MA @@ -0,0 +1,350 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /1 CCL OVERLAY TABLE + + .EXTERNAL BEGLN,PRQMRK + .GLOBAL CCLBLC,NOCCL + CCLTAB="H + +/CCL.SV (THE IMPORTANT PART) MUST BE A SINGLE CORE-LOAD +/CONTIGUOUS LOAD, BECAUSE OF THE WAY THE MONITOR LOADS IT. +/FORTUNATELY, FIELD 0 STUFF OCCURS AFTER FIELD 1 STUFF IN THE +/OS/8 CORE-IMAGE FORMAT. +/FOR VERSION OF THE MONITOR BEFORE LEVEL A, +/THE TOTAL LENGTH OF CCL.SV MUST BE LESS THAN14 BLOCKS +/OR IT READS OVER 7600. +/BUT NOW CCL COMES IN AND READS THE REMAINDER OF ITSELF +/INTO FIELD 0. 400-777 IS IGNORED BY SKIPPING A BLOCK, +/THEN THER REST OF CCL (7 PAGES) IS READ IN. + + .ASECT TABLE0 + FIELD 0 + + *400 + +/IT LOADS OVER THE SAVE, DATE OVERLAY +/AND STARTS AT LOCATION 600 + +/KEYWORD TABLE IN 400- + +/CONSISTS OF COMMANDS 2 CHARS PER LOCATION +/IN 5-BIT ASCII (ONLY LETTERS ARE LEGAL) +/SEPARATED FROM EACH OTHER BY 6-BIT 00'S. +/EACH ENTRY STARTS ON A WORD BOUNDARY, BUT IF YOU +/NEED THE ROOM, THEY NEED NOT WITH A SIMPLE FIX +/BIT 40 ON MEANS THAT THE CHARACTER ISN'T REQUIRED +/BUT IF THE USER DOES TYPE A LETTER, IT MUST MATCH. + VNO, CCLTAB +KEYWRD, +0530 /EX ECUT +4543 +6564 +0002 /BA CKSP OR TER MIN +0143 +5363 +6000 +0201 /BAS IC +2351 +4300 +0425 /DU PLICATE +6054 +5143 +4164 +4500 +0217 /BO OT +5764 +0003 /CCL +0314 +0003 /COMPA R +1715 +2001 +6200 +0317 /COM PIL +1560 +5154 +0003 /COP Y +1720 +7100 +1505 /MEM ORY +1557 +6271 +0003 /CREA TE +2205 +0164 +4500 +0322 /CREF +0506 +0004 /DA TE +0164 +4500 +0405 /DEL ETE +1445 +6445 +0004 /DE A +0541 +0004 /DIR ECT +1122 +4543 +6400 +0504 /ED IT +5164 +/0005 /EO F +/1746 +0010 /HE LP +0554 +6000 +1411 /LIN K +1653 +0015 /MAC R +0103 +6200 +1411 /LI ST +6364 +0014 /LO AD +1741 +4400 +1501 /MAK E +1345 +0015 /MAP +0120 +0015 /MUNG +2516 +0700 +2001 /PAL +1400 +2022 /PRI NT +1156 +6400 +2025 /PU NCH +5643 +5000 +2205 /REN AME +1641 +5545 +0022 /RES +0523 +/0022 /REW IND +/0527 +/5156 +/4400 +0003 /CA NCEL +0156 +4345 +5400 +2305 /SET +2400 +2313 /SK IP +5160 +0023 /SQ UISH +2165 +5163 +5000 +2325 /SU BMIT +4255 +5164 +0024 /TE CO +0543 +5700 +2431 /TY PE +6045 +/0025 /UN LOAD +/1654 +/5741 +/4400 +0022 /REQ U +0521 +6500 +2165 /Q UEUE +4565 +4500 +2501 /UA +0025 /UB +0200 +2503 /UC +0026 /VE R +0562 +0032 /ZERO +0522 +1700 +4000 /@ + ZBLOCK 600-. + IFDEF XYZMCR < + +THIS IS THE TECO MACRO WHICH WAS USED TO CREATE THE ABOVE TABLE: + + +HKGYJ2SR0,.KHXAHKMA +TYPE COMMANDS, SPACE SEPARATES MANDATORY PART FROM +OPTIONAL PART, CR TERMINATES COMMANDS, ^Z TERMINATES ALL. +** NO EDITING ** +HKHXYHXN0UO0UB0UN +!CHLP!^TULQL-32"EOBLANK'QL-13"EOCR'QL-26"EOEND' +!CHLP0!QL&63+QBUT QT/8UXQX+48IQT-(8*QX)+48I +QL"NZJ.UZGNQLIQZJXNK%N' +%O&1"NOCHLP' QN-3"LZUH'I +OCHLP +!BLANK! 32UBZJ.UZGNQLIQZJXNK%NOCHLP +!CR!  +QHJ /GNZJXN0UN0UB0ULOCHLP0 +!END!I00 + + + + > + *600 + + JSBITS=7746 + SYSTEM=22 + PRMES=330 + ERRET=33 /THESE ARE LOCATIONS FROM OS/8 MONITOR + +/RUNS IN FIELD 0 ONLY. + +ENTRY, 0 /INITIALLY 0 MEANS 'EX' COMMAND +LINPTR, JMP ENTREE /OS/8 JUMPS HERE (ACTUALLY TO 600) +TEMM, +TEKLDG, ISZ CCLNHR /TECO 'EG' JUMPS HERE + DCA I (BEGLN /ZERO COMMAND LINE + JMP TEGO /FIRST WE DISABLE CALLS TO MONITOR +ENTREE, TAD (7605 + DCA ERRET + TAD SYSTEM + DCA MYSYS + JMS FINDIT + SPA CLA /WAS IT A LEGAL COMMAND? + JMP I (PRQMRK /NO +TEGO, TAD (6003 /YES + DCA I (JSBITS + CIF 10 + JMS I MYSYS /CALL USR AND LOCK IN CORE + 10 + CLA IAC + CIF 10 + JMS I (200 + 2 +CCLBLC, CCLSV +CCLEN, 0 +CCLNHR, JMP NOCCL /ISZ'ED IF KBM NOT IN MEMORY + CLA IAC + TAD CCLBLC + DCA CCLRDB + JMS I (7607 +CCLCCW, 2711 /READ 27 PAGES OF CCL.SV +CCLSTR, 2000 +MYSYS, +CCLRDB, 7700 /INITIALLY POINTS TO USR + JMP NOCCL + CIF CDF 10 + JMP I CCLSTR + CCLSV, FILENAME CCL.SV + +NOCCL, CLA SKP + JMP I (7605 /GO BACK TO MON IF CCL NOT FOUND ON TECO EG COMMAND + JMS I (PRMES /PRINT ERROR MESSAGE OTHERWISE + TEXT /NO CCL!/ + 0 + /FINDS IF INPUT LINE STARTS WITH A COMMAND +/LEAVES ENTRY # IN AC, -1 IF NOT FOUND +/ENTRIES START AT ENTRY 0. +/CALLABLE FROM ANY FIELD + +FINDIT, 0 +MORE, TAD (BEGLN-1 + DCA LINPTR + ISZ LINPTR + TAD I LINPTR + TAD (-240 + SNA CLA + JMP .-4 + JMS GETKAR + JMP ENDOFT /NO MATCH + JMP INTO +FNLUP, TAD I LINPTR + TAD (-301 + STL + TAD (-32 + SNL CLA + JMP NOLET /NOT A LETTER + JMS GETKAR + JMP MATCH +INTO, CIA + TAD I LINPTR + AND (37 /5-BIT ASCII + ISZ LINPTR + SNA CLA /DO THEY MATCH? + JMP FNLUP /YES +NOMT, JMS GETKAR + SKP + JMP .-2 /SCAN TO NEXT ENTRY + ISZ ENTRY + JMP MORE + +NOLET, JMS GETKAR + JMP MATCH + CLA + ISZ SIGNIF + JMP NOMT +MATCH, TAD ENTRY + SKP +ENDOFT, STA +RETCIF, CDF 0 /RETURN TO CALLING FIELD (MAY BE OVERLAID) + JMP I FINDIT +KPTR, KEYWRD + HALF, -1 /0 MEANS LEFT HALF +SIGNIF, 0 /1 MEANS 40 BIT ON WHICH MEANS CHAR IS SIGNIF ONLY IF PRESENT + +/GETKAR GETS NEXT 5-BIT CHAR, LEAVES IT IN AC +/SETS SIGNIF TO -1 IF 40 BIT WAS PRESENT +/TAKES RETURN 1 IF CHAR IS 0 +/TAKES RETURN 2 OTHERWISE + +GETKAR, 0 + ISZ HALF + JMP RTHALF + TAD I KPTR + RTR + RTR + RTR + JMP INSIDE +RTHALF, STA + DCA HALF + TAD I KPTR + ISZ KPTR +INSIDE, AND (77 + DCA TEMM + TAD TEMM + AND X40 +X40, SZA CLA + STA + DCA SIGNIF + TAD TEMM + SZA + ISZ GETKAR + AND (37 + JMP I GETKAR + PAGE + ADDED src/os8-v3f/CCLTBL.MA Index: src/os8-v3f/CCLTBL.MA ================================================================== --- /dev/null +++ src/os8-v3f/CCLTBL.MA @@ -0,0 +1,571 @@ +/ +/ +/ +/COPYRIGHT (C) 1979 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. +/ +/ +/ + + +/VERSION=V3A (D.H.) + /10 CCL INTERNAL TABLES FOR OS/78 + + .NOLIST ME + .GLOBAL EXTCM + .GLOBAL YBATCH,YDATE,YTERMIN + .GLOBAL F1,F2,LO1,LO2 + .EXTERNAL SETLPT,SETTTY,SETPTP,COLSET + .EXTERNAL TECSUB,MAKSUB,MNGSUB + .EXTERNAL YF4,YLOAD + .EXTERNAL USRSUB,REQSUB,CANSUB + .EXTERNAL MOVRT,KILRT,RENRT + .EXTERNAL EXSUB + .EXTERNAL TRMSUB,BASUB,MONRES,DETCOR,DATE,DEASSIGN,SQSUB,VERTN,ZERSUB + .EXTERNAL YAT + .EXTERNAL CRSUB,EDSUB + .DSECT PTBL + FIELD 0 + .ASECT SWS + *7300 + .ASECT LONGS + *5000 + + .MACRO .BOX COM,SPACES,STARS + LEN=.NCHARS COM + .PUSH .LISTWD + L1=LEN+4 + L2=LEN+2 + ;.LIST ME + +/ STARS[1:L1] +/ *SPACES[1:L2]* +/ * COM * +/ *SPACES[1:L2]* +/ STARS[1:L1] + .POP .LISTWD + EJECT CCL COMMANDS + .ENDM .BOX + + .MACRO .EXT + .ENDM + .MACRO .CMD COMAND,ABBREV,CODE,EXTEN,SWITCH,SUBR,PROGRM,LABEL + .BOX COMAND," ","****************" + .SBTTL COMAND + ..=. + .DSECT PTBL + ;.. + .SECT * +X'ABBREV, CODE + IFNZRO CODE&4000 < + ;EXTEN + .IF NBL SWITCH[1]< + XX="SWITCH[1]&77;YY=%12.;7643+YY;ZZ=XX- + QQ=1 + .REPT 12.-ZZ&17 + QQ=QQ^2 + .ENDR + ;QQ> + .IF NBL SWITCH[2]< + XX="SWITCH[2]&77;YY=%12.;7643+YY;ZZ=XX- + QQ=1 + .REPT 12.-ZZ&17 + QQ=QQ^2 + .ENDR + ;QQ> + ;0 + .ASECT SWS + ..=. + .SECT * + .IF BL LABEL <;.. > /REMOVE IF DON'T WANT MULTIPLE CHARACTER SWITCHES + .IF NB LABEL <;LABEL> + ;SUBR + .IF NB PROGRM< + ;Y'PROGRM> + .IF BL PROGRM< + ;0> + > + IFZERO CODE&4000 < + ;EXTEN + .IF NB SWITCH< + ;Y'SWITCH> + .IF BL SWITCH< + ;0> + > + .ENDM + .MACRO .QUAL LONG,SHORT,NAME + .ASECT LONGS + ..=. + ;TEXT "LONG[1:6]";"SHORT + .SECT * + .ASECT SWS + .IF NB NAME + ;.. + .SECT * + .ENDM + .MACRO .ENDQ + .ASECT SWS + ;0 + .SECT * + EJECT CCL COMMANDS + .ENDM + .ASECT TABLES + FIELD 0 + *6200 + .CMD EXECUTE,EX,5033, EXTEXE, G, EXSUB, PAL8 /MUST BE FIRST FOR TECO EG + .ENDQ + .CMD BACKSPACE,BA,0, TRMSUB, CAMP + .ENDQ + .CMD BASIC,BAS,0, BASUB, BASIC + .ENDQ + .CMD DUPLIC,DU,4001, STAR, , 0, RXCOP + .QUAL NOCOPY,M + .QUAL NOMATCH,N + .QUAL PAUSE,P + .QUAL READONLY,R + .QUAL VERSION,V + .ENDQ + .CMD BOOT,BO,0, 0, BOOT + .ENDQ + .CMD CCL,CCL,0, MONRES, + .ENDQ + .CMD COMPARE,COMPA,4001, EXTNUL, , SETTTY, SRCCOM + .QUAL NOCOMMENTS,C + .QUAL NOSPACES,S + .QUAL TABS,T + .QUAL BLANKS,B + .QUAL NOPRINTCOMMENTS,X + .ENDQ + .CMD COM,COM,5033, EXTCOM, , EXSUB, PAL8 + .QUAL NOISN,N + .QUAL OPTIMIZE,Q + .QUAL GO,G + .ENDQ + .CMD COPY,COP,4001, STAR, L, MOVRT, FOTP + .QUAL NOCOPY,D + .QUAL NOPREDELETE,N + .QUAL RENAME,R + .QUAL FAILSAFE,F + .QUAL CURRENT,C,LSTOPT + .QUAL LOG,L + .QUAL OTHER,O + .QUAL QUERY,Q + .QUAL INQUIRE,Q + .QUAL INSPECT,Q + .QUAL TODAY,T + .QUAL UGLY,U + .QUAL INDEPENDENTLY,U + .QUAL INVERT,V + .QUAL EXCEPT,V + .QUAL VERSION,W + .QUAL V,V + .ENDQ + .CMD MEMORY,MEM,0, DETCOR, + .ENDQ + .CMD CREATE,CREA,4400, EXTNUL, , CRSUB, EDIT + .QUAL SPACES,B + .ENDQ + .CMD CREF,CREF,4002, EXTCF, C, 0, PAL8 + .QUAL NOLIST,P + .QUAL NOSYMTAB,U + .QUAL RALF,R + .QUAL SABR,S + .QUAL NOLITERALS,X + .QUAL KEEP,E + .QUAL MAMMOTH,M + .QUAL MOBY,M + .ENDQ + .CMD DATE,DA,0, DATE, + .ENDQ + .CMD DELETE,DEL,4001, STAR, LD, KILRT, FOTP,LSTOPT + .CMD DEASSIGN,DE,0, DEASSIG, + .ENDQ + .CMD DIRECT,DIR,4001, STAR, ,COLSET, DIRECT + .QUAL BLOCKS,B + .QUAL CURRENT,C + .QUAL EXTENDED,E + .QUAL FAST,F + .QUAL BRIEF,F + .QUAL ADDITIONAL,I + .QUAL EMPTIES,M + .QUAL FREE,M +/ .QUAL INDEPENDENTLY,U + .QUAL OTHER,O + .QUAL REMAINDER,R + .QUAL UGLY,U + .QUAL INVERT,V + .QUAL EXCEPT,V + .QUAL VERSION,W + .QUAL V,V + .QUAL COLUMNS,Z /DUMMY + .ENDQ + .CMD EDIT,ED,5220, EXTNUL, , EDSUB, EDIT + .QUAL SPACES,B + .QUAL PREDELETE,D + .QUAL DELETE,D + .ENDQ + / .CMD EOF,EO,0, 0, CAMP +/ .ENDQ + .CMD HELP,HE,4001, STAR, T, SETTTY, HELP + .ENDQ + .CMD LINK,LIN,5033, EXTLI, , EXSUB, LINK + .QUAL GO,G + .QUAL HALTS,H + .QUAL JUMPS,J + .QUAL JMPS,J + .QUAL CORE,K + .QUAL MEMORY,K + .QUAL VERSION,V + .QUAL START,S + .QUAL JSW,W + .QUAL M,M + .ENDQ + .CMD MAC,MAC,5033, EXTMA, , EXSUB, MACREL + .QUAL BLOCK,B + .QUAL HEADING,B + .QUAL HDR,B + .QUAL CREF,C + .QUAL KREF,C + .QUAL GO,G + .QUAL NOCONDITIONALS,J + .QUAL LINK,L + .QUAL PERM,M + .QUAL NOLIST,N + .QUAL OMIT,O + .QUAL NOMACROS,O + .QUAL RESET,P + .QUAL EAE,Q + .QUAL REMOVE,R + .QUAL REDUNDANT,R + .QUAL DESTROY,Z + .QUAL NOBATCH,Z + .QUAL EXTENDED,X + .QUAL K,K + .QUAL P,P + .ENDQ + .CMD LIST,LI,4001, STAR, U, SETLPT, FOTP,LSTOPT + .CMD LOAD,LO,5031, EXTLO, , EXSUB, ABSLDR + .QUAL IMAGE,I + .QUAL MULTIPLE,S + .QUAL SLURP,S + .QUAL GO,G +/ /8 /9 /START:N /FIELD:F /P + .ENDQ + .CMD MAKE,MAK,0, MAKSUB, TECO + .ENDQ + .CMD MAP,MAP,4001, EXTBN, , SETTTY, BITMAP + .QUAL MULTIPLE,S + .QUAL SLURP,S + .QUAL INVERT,T +/ FIELD:N + .ENDQ + .CMD MUNG,MUNG,0, MNGSUB, TECO + .ENDQ + .CMD PAL,PAL,5033, EXTPA, , EXSUB, PAL8 + .QUAL SHIFT,B + .QUAL CREF,C + .QUAL DDT,D + .QUAL NOLINKS,E + .QUAL NOFILL,F + .QUAL GO,G + .QUAL NONPAGINATED,H + .QUAL NOCONDITIONALS,J + .QUAL LOAD,L + .QUAL NOLIST,N + .QUAL NOORIG,O + .QUAL NOSYMTAB,S + .QUAL NOREMEMBERLITERALS,W + .QUAL WIDE,7 + .QUAL W,W + .ENDQ +/ /K /T + .CMD PRINT,PRI,4000, STAR, , SETLPT, LPTSPL + .ENDQ + .CMD PUNCH,PU,4001, EXTNUL, , SETPTP, PIP +/ .QUAL ASCII,A +/ .QUAL BINARY,B +/ .QUAL ELIMINATE,C +/ .QUAL PREDELETE,D +/ .QUAL DELETE,D +/ .QUAL IGNORE,G +/ .QUAL IMAGE,I +/ .QUAL TABS,T +/ .QUAL VERSION,V +/ .QUAL V,V + .ENDQ + .CMD RENAME,REN,4001, STAR, LR,RENRT,FOTP,LSTOPT + .CMD RESOURCES,RES,4001, EXTSY, , SETTTY, RESORC + .QUAL DETAILED,E + .QUAL EXTENDED,E + .QUAL BRIEF,F + .QUAL FAST,F + .ENDQ +/ .CMD REWIND,REW,0, 0, CAMP +/ .ENDQ + .CMD CANCEL,CA,0,CANSUB, + .ENDQ + .CMD SET,SET,0, 0, SET + .ENDQ + .CMD SKIP,SK,0, 0, CAMP + .ENDQ + .CMD SQUISH,SQ,4001, EXTNUL, S, SQSUB, PIP + .QUAL OK,O + .QUAL NOCONFIRM,O + .ENDQ + .CMD SUBMIT,SU,4000, EXTBI, , 0, BATCH + .QUAL CARDS,C + .QUAL NONFATAL,E + .QUAL PAPERTAPE,P + .QUAL QUIET,Q + .QUAL HUSH,H + .QUAL TERMINAL,T + .QUAL TTY,T + .QUAL UNATTENDED,U + .QUAL VERSION,V + .QUAL 026,6 + .ENDQ + .CMD TECO,TE,10, TECSUB, TECO + .ENDQ + .CMD TYPE,TY,4001, STAR, U, SETTTY, FOTP,LSTOPT +/ .CMD UNLOAD,UN,0, 0, CAMP +/ .ENDQ + .CMD REQUEST,REQ,4000,EXTSV,,REQSUB, + .ENDQ + .CMD QUEUE,Q,4000,STAR,,0,QUEUE + .QUAL LIST,L + .QUAL KILL,K + .QUAL STOP,S + .QUAL GO,G + .QUAL START,G + .QUAL NOH,H + .QUAL DELETE,D + .QUAL COPIES,C + .ENDQ + .CMD UA,UA,40, USRSUB, + .ENDQ + .CMD UB,UB,50, USRSUB, + .ENDQ + .CMD UC,UC,60, USRSUB, + .ENDQ + .CMD VERSION,VE,0, VERTN, + .ENDQ + .CMD ZERO,ZERO,4401, EXTNUL, Z, ZERSUB, PIP + .ENDQ +/ .CMD @,@,0, YAT, +/ .ENDQ + ..=. + 0;YAT;0 + .DSECT PTBL + .. + 0;0 + /PTBL, XEXE +/ XBAC +/ XBAS +/ XDUPL +/ XBOO +/ XCCL +/ XCOMPA +/ XCOMPI +/ XCOP +/ XCOR +/ XCREA +/ XCREF +/ XDAT +/ XDEL +/ XDEA +/ XDIR +/ XEDI +/ XEOF +/ XHEL +/ XLINK +/ XMAC +/ XLIS +/ XLOA +/ XMAK +/ XMAP +/ XMUN +/ XPAL +/ XPRI +/ XPUN +/ XREN +/ XRES +/ XREW +/ XSET +/ XSKI +/ XSQU +/ XSUB +/ XTEC +/ XTYP +/ XUNL +/ XUA +/ XUB +/ XUC +/ XVER +/ XZER +/ XAT + .EXT ALG=AL + .EXT BAK=BK + .EXT BAS=BA + .EXT BIN=BN + .EXT BUG=BG + .EXT CMD=CM + .EXT COM=CM + .EXT CRF=CF + .EXT CTL=CM + .EXT DAT=DA + .EXT DIR=DI + .EXT DOC=DC + .EXT HLP=HL + .EXT INI=IN + .EXT LOG=LG + .EXT LPT=LP + .EXT LST=LS + .EXT MAC=MA + .EXT MAN=MN + .EXT MAP=MP + .EXT MEM=ME + .EXT OLD=OL + .EXT PAL=PA + .EXT REL=RL + .EXT RIM=RM + .EXT RNO=RO + .EXT SAV=SV + .EXT EXE=SV + .EXT SNO=SN + .EXT SRC=SR + .EXT SYS=SY + .EXT TEC=TE + .EXT TEM=TM + .EXT TMP=TM + .EXT TXT=TX + .EXT BAT=BI + .EXT FOR=FT + .EXT RLF=RA + .EXT OBJ=RB + .EXT SBR=SB + .EXT FTN=FT + .ASECT EXTNS + FIELD 0 + *6600 +STAR, 5200; 0 + 0; 0 + + +EXTSY, 'SY; 0 + 0; 0 +EXTBI, 'BI; 0 + 0; 0 +EXTCF, 'PA; YPAL8 + 0; YPAL8 +EXTMA, 'MA; YMACREL + 0; YMACREL +EXTPA, 'PA; YPAL8 + 0; YPAL8 +EXTBN, 'BN; 0 + 0; YABSLDR +EXTNUL, 0; 0 +EXTLO, 'BN; YABSLDR + 'RL; LO1,YLOAD /**** +EXTLI, 'RB; YLINK + 0; 0 +EXTCM, 'CM; 0 + 0; 0 +EXTSV, 'SM; 0 + 'SV; 0 + 0; 0 + EXTEXE, 'PA; YPAL8 + 'FT; F1,YF4 /**** + 'BA; YBCOMP + 'MA; YMACREL + 'BN; YABSLDR + 'RL; LO2,YLOAD /**** + 'RA; YRALF + 'SB; YSABR + 'RB; YLINK + 'LD; YFRTS + 'BI; YBATCH + 0; 0 + ZBLOCK 4 +EXTCOM, 'PA; YPAL8 + 'FT; F2,YF4 /**** + 'MA; YMACREL + 'BA; YBCOMP + 'RA; YRALF + 'SB; YSABR + 0; 0 + ZBLOCK 4 + .ASECT FNAMES + FIELD 0 + *7000 +YEDIT, FILENAME EDIT.SV + *.-1 +YBOOT, FILENAME BOOT.SV + *.-1 +YBITMAP,FILENAME BITMAP.SV + *.-1 +YSRCCOM,FILENAME SRCCOM.SV + *.-1 +YBCOMP, FILENAME BCOMP.SV + *.-1 +YPAL8, FILENAME PAL8.SV + *.-1 +YFOTP, FILENAME FOTP.SV + *.-1 +YDIRECT,FILENAME DIRECT.SV + *.-1 + YPIP, FILENAME PIP.SV + *.-1 +YABSLDR,FILENAME ABSLDR.SV + *.-1 +YTECO, FILENAME TECO.SV + *.-1 +YLPTSPL,FILENAME LPTSPL.SV + *.-1 +YCAMP, FILENAME CAMP.SV + *.-1 +YSET, FILENAME SET.SV + *.-1 +YBASIC, FILENAME BASIC.SV + *.-1 +YRXCOP, FILENAME RXCOPY.SV + *.-1 +YRESORC,FILENAME RESORC.SV + *.-1 +YBATCH, FILENAME BATCH.SV + *.-1 +YRALF, FILENAME RALF.SV + *.-1 +YSABR, FILENAME SABR.SV + *.-1 +YFRTS, FILENAME FRTS.SV + *.-1 +YHELP, FILENAME HELP.SV + *.-1 +YMACREL,FILENAME MACREL.SV + *.-1 +YLINK, FILENAME LINK.SV + *.-1 +YDATE, FILENAME DATE.SV + *.-1 +YTERMIN,FILENAME TERMIN.SV + *.-1 +YQUEUE, FILENAME QUEUE.SV + *.-1 +YCANCEL,FILENAME CANCEL.SV + *.-1 + ADDED src/os8-v3f/CD.PA Index: src/os8-v3f/CD.PA ================================================================== --- /dev/null +++ src/os8-v3f/CD.PA @@ -0,0 +1,1688 @@ + XLIST +/8 COMMAND DECODER FOR OS/8 MONITOR +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /APRIL 1977 RL/EF/HJ/SR + +/ABSTRACT-- +/COMMAND DECODER (CD) ACCEPTS TTY INPUT AND INTERPRETS +/THAT INPUT AS A LIST OF OPTIONS AND FILE SPECIFICATIONS +/FOR OS/8 CUSPS. TABLES ARE SETUP INDICATING THE SPECIFIED +/FILES AND OPTIONS. +/THIS VERSION OF CD IS CAPABLE OF RUNNING OS/8 BATCH. +/MODIFICATIONS TO INITIALIZATION CODE HAVE BEEN MADE TO +/ALLOW THIS. + + + DCB=7760 + SHNDLR=7607 + USERFG=40 /LOCATION IN MAIN OS/8 ASSEMBLY - VOLATILE + T1=41 /DITTO + MCDREC=51 /ALSO PRETTY VOLATILE + MOFILE=7600 + MIFILE=7617 + MPARAM=7643 + FIELD 0 /JUSTINCASE + + CDVERSION=6501 /5A + ODTVERSION=6601 /6A + /V3 CHANGES TO CD: + +/1. FIXED LOTS OF BUGS +/ A:B:C IS ILLEGAL +/ 15-BIT = OPTION DOESN'T DESTROY ALTMODE BIT +/2. ADDED ? SUPPORT IN SPECIAL MODE +/3. ALLOWED SPECIAL MODE UNDER BATCH +/4. REMOVED DCC CODE +/5. ^U, RO TO BOL, AND LF ALL REPRINT * +/6. VERSION # AT LOC ZERO +/7. DON'T LOAD HANDLERS FOR OUTPUT DEVICE +/8. CHANGED _ TO < STANDARD + +/V3 CHANGES TO ODT + +/1. REMOVED DCC CODE +/2. FIXED CORE SIZE ROUTINE +/3. ALLOWED SOFTWARE CORE SIZE +/4. MODIFIED 'GO' COMMAND SO THAT IT DOESN'T RESTORE TRAP +/ LOCATION TO UNMODIFIED VALUE +/5. FIXED BUG RE: JMS'S OUT OF FIELD WITH MAGIC LOCATION SET +/6. TURN OFF INTERRUPTS ON BREAKPOINT + +/CHANGES AFTER FIELD TEST RELEASE: + +/1. FIXED BUG RE FILE LENGTHS GT 2047 BLOCKS + +/MAINTENANCE RELEASE: + +/ NO CHANGES + +/V3D CHANGES: + +/CHANGED FORMAT OF VERSION NUMBERS + *200 +CD, JMP I NUMBER /EXECUTED IN SYSGEN +NUM, JMP I T +ANALYZ, TAD [BEGLN-1 + DCA XR + TAD I XR + SNA + JMP NOBKAR + TAD [-"< + SZA CLA + JMP .-5 + CLA CMA +NOBKAR, DCA OUTSW + TAD [BEGLN-1 + DCA LXR +BEGGRP, TAD OUTSW + SNA CLA + TAD BEGDIF /DIFF BETWEEN INPUT & OUTPUT AREAS + TAD [MOFILE-1 + DCA CLXR + STA + DCA DVFLAG + DCA DEV1 +FILLP1, DCA DEV2 +FILLP, JMS I [GNAME + TAD ["A-": /AC CONTAINED DELIM - "A + SNA CLA + JMP DEVNAM + JMS I [ASSIGN + TAD OUTSW + SNA CLA + TAD LIMDIF /DIFF BETWWEN END OF OUTPUT & INPUT AREAS + TAD OUTLIM /END OF OUTPUT AREA + TAD CLXR + SMA CLA + JMP CDER1 + TAD OUTSW + SNA CLA +LKUPSW, JMP INFILE /ZEROED IF IN "SPECIAL DECODE" MODE + CDF 10 + TAD DVICE + DCA I CLXR + TAD NAME1 + DCA I CLXR + TAD NAME2 + DCA I CLXR + TAD NAME3 + DCA I CLXR + TAD NAME4 +CDSKP, SKP +INFILE, JMS I [LOOKUP + DCA I CLXR +DLOOK, CDF 0 + STA + DCA DVFLAG + TAD DELIM + SNA + JMP CDOVER + TAD [-"[ + SNA + JMP I [OLENGT + TAD ["[-", + SNA + JMP FILLP + TAD [",-"< + SNA + JMP BKAROW + TAD ["<-"= + SZA CLA + JMP I [CDER2 +EQUAL, DCA NUMFUJ + JMS NUMBER + DCA I [MPARAM+3 + CLA CLL CML RAR + AND I [MPARAM-1 /PRESERVE ALTMODE + TAD HIORD + DCA I [MPARAM-1 + JMP DLOOK + BKAROW, ISZ OUTSW + JMP I [CDER2 + JMP BEGGRP +DEVNAM, TAD NAME1 + DCA DEV1 + ISZ DVFLAG + JMP I [CDER2 /CATCHES A:B: + TAD NAME2 + JMP FILLP1 +CDOVER, TSF + JMP .-1 /LET PRINTER QUIET DOWN + TCF /AND CLEAR FLAG + CDF CIF 10 + TAD TMONIT + DCA I [200 /RESTORE "MONITO" + TAD TUSRFG + DCA I [USERFG /RESTORE "USER FLAG" + TAD TFPUTX /LOAD "USER CALLING FIELD" INTO AC + JMP I CD /RETURN - MONITOR RESTORES CORE IF NECESSARY +NUMBER, 4000 /USED BY SYSGEN + TAD CDSKP + DCA NUMADD /SET NUMADD TO EITHER "SKP" OR "TAD NUM" + DCA HIORD +NUMLP, DCA NUM + JMS NUMTST /INTO PAGE 0 FOR RANGE TEST + SNL + JMP EONUM + DCA T + CLA CLL CMA RTL + DCA DELIM + TAD NUM +ROTLP, CLL RAL + DCA NUMX + TAD HIORD + RAL + SPA + JMP I [CDER2 + DCA HIORD + TAD NUMX + ISZ DELIM + JMP ROTLP +NUMADD, TAD NUM /SKP IF OCTAL + TAD NUM + TAD T + JMP NUMLP +EONUM, TAD ["0 + DCA DELIM + TAD NUM + CDF 10 + JMP I NUMBER + CDER1, JMS I [PRMESG + TEXT /TOO MANY FILES/ + IFZERO .&400 <*400> +ASSIGN, 0 + TAD CLXR + AND DVFLAG + TAD OUTLIM + SMA SZA CLA /CHECK FOR OUTPUT OR FIRST INPUT + JMP ASNORM /IF DEVICE WAS SPECIFIC, OR IF WE ARE ON THE INPUT SIDE, + /PROCEED NORMALLY + TAD NAME1 + SNA CLA + JMP ASGNST + TAD DFLTNM+1 + DCA DEV2 + TAD DFLTNM + DCA DEV1 +ASNORM, TAD DEV1 + DCA AS+1 + TAD DEV2 + DCA AS+2 + TAD OUTSW + SNA CLA /DON'T LOAD HANDLER IF WE ARE ON OUTPUT SIDE OF "_" + TAD NAME1 +SPKLG1, SNA CLA /OR IF THERE IS NO FILE NAME TO LOOK UP + TAD GETHND /GETHND=11 NORMALLY, 0 IF IN "SPECIAL DECODE" MODE + IAC + DCA AS + TAD [1401 /ALLOW TWO PAGE HANDLERS + DCA ASADR + CIF 10 + JMS I [200 +AS, 0 + 0 + 0 +ASADR, 1401 + JMP I [CDER0 + TAD AS+2 +ASGNST, DCA DVICE + JMP I ASSIGN +GNAME, 0 + DCA NAME1 + DCA NAME2 + DCA NAME3 + DCA NAME4 + TAD [NAME1 + DCA NMBASE + CLA CMA + DCA PERDSW + DCA NAMECT +GTNMLP, JMS I [GCH + DCA DELIM + TAD DELIM + TAD [-"? + SZA + TAD ["?-"* + SNA +STARSW, JMP I [CDER2 /"JMP STARNM" IF "SPECIAL DECODE" MODE + TAD ["*-". + SNA CLA + JMP PERIOD + JMS I [DECODE + JMP I GNAME + STARNM, CLA /THIS CODE HANDLES *'S AND ?'S CORRECTLY + TAD DELIM + AND [77 + DCA DELIM + TAD NAMECT + TAD [-6 + SMA CLA + JMP GTNMLP + TAD NAMECT + CLL RAR + TAD NMBASE + DCA TT + TAD DELIM + SZL + JMP .+4 + RTL + RTL + RTL + TAD I TT + DCA I TT + ISZ NAMECT + JMP GTNMLP +PERIOD, TAD NAME1 + SZA CLA + ISZ PERDSW + JMP I [CDER2 + ISZ NMBASE + TAD [4 + JMP GTNMLP-1 +LOOKUP, 0 + DCA LNAME + TAD NAME1 + SNA CLA + JMP LKUPST + JMP EXT1 +LKUPLP, DCA LNAME + TAD AS+2 + CIF 10 + JMS I [200 + 2 +LNAME, 0 /NAME1 +LENGTH, 0 + JMP LFAILD + TAD LENGTH + CLL + TAD [400 + SNL + CLA + CLL RTL + RTL + AND [7760 +LKUPST, CDF 10 + TAD DVICE + DCA I CLXR + TAD LNAME + JMP I LOOKUP + LFAILD, TAD NAMECT + SNA CLA /WAS THERE AN EXPLICIT EXTENSION? + TAD DEFALT /NO - WAS THERE A DEFAULT EXTENSION? + SNA CLA + JMP I [CDER3 /YES OR NO - FILE NOT FOUND + ISZ NAMECT /NO AND YES - SET FLAG TO FAIL NEXT TIME + JMP EXT2 /ZERO OUT THE EXTENSION AND TRY AGAIN +CDER3, JMS I [PRNAME + JMS I [PRMESG + TEXT / NOT FOUND/ + IFZERO .+200&1000 <*600> + 0 /V3 [FREE LOC] +SLSHCH, 0 +/V3 SNA +/V3 JMP I [CDER2 + DCA DELIM + TAD [MPARAM-1 + DCA T + JMS I [DECODE + JMP I [CDER2 + SZL + TAD [32 + CMA STL /THE FOLLOWING TURNS ON THE CORRECT OPTION BIT + DCA TT +SLSHLP, SZL + ISZ T + RAR + SNL + ISZ TT + JMP SLSHLP + DCA TT + CDF 10 + TAD TT + CMA + AND I T + TAD TT + DCA I T + CDF 0 + JMP I SLSHCH +DECODE, 0 + TAD DELIM + TAD [-"9-1 + CLL + TAD ["9+1-"0 + SZL + JMP DCDYES + TAD ["0-"Z-1 + CLL CML + TAD ["Z-"A+1 + SNL +DCDYES, ISZ DECODE + JMP I DECODE +CDER0, TAD DEV1 + JMS I [PRWD + TAD DEV2 + JMS I [PRWD + JMS I [PRMESG + TEXT / DOES NOT EXIST/ + +RESTRT, JMS I [CRLF + CDF 10 + TAD [MOFILE-1 + DCA XR + TAD [-47 + DCA T + DCA I XR /ZERO OUT THE COMMAND DECODER OUTPUT AREA + ISZ T + JMP .-2 + CDF 0 + JMP I [GLINE +GCH, 0 + TAD I LXR + TAD [-240 + SNA + JMP GCH+1 + TAD [240-"/ + SNA + JMP SLASH + TAD ["/-"( + SNA + JMP OPENP + TAD ["( + JMP I GCH +SLASH, TAD I LXR + JMS I [SLSHCH + JMP GCH+1 +OPENP, TAD I LXR + TAD [-") + SNA + JMP GCH+1 + TAD [") + JMS I [SLSHCH + JMP OPENP +OLENGT, TAD OUTSW + AND NAME1 /[N] IS ONLY LEGAL ON THE OUTPUT SIDE OF THE "_" + SNA CLA /AND ONLY AFTER A FILE NAME + JMP I [CDER2 + TAD [-4 + TAD CLXR + DCA NMBASE + CLA CLL CML RTL + DCA NUMFUJ /SET "NUMBER" TO ACCEPT DIGITS 8 AND 9 + TAD OLFUDJ /LOAD FUDGE SO THAT "NUMBER" WILL BE DECIMAL + JMS I [NUMBER + CLL RTL + RTL + AND [7760 + TAD I NMBASE + DCA I NMBASE + CDF 0 + TAD DELIM + TAD [-"] /IS THERE A CLOSING BRACKET? + SNA /IF NOT, "DLOOK" ROUTINE WILL DETECT IT + JMS I [GCH + DCA DELIM + JMP I [DLOOK +OLFUDJ, NUM&177+1570 + +CDER2, CLA + JMS I [PRMESG + TEXT /ILLEGAL SYNTAX/ + IFZERO .&1000 <*1000> + /TELETYPE INPUT ROUTINE FOR COMMAND DECODER +GLINE, TAD (252 /SETS 1177=252 FOR * IN MESSAGE + JMS I PRINT + DCA RBFLAG + TAD [BEGLN-1 + DCA LXR +CHLOOP, 6031 /KSF + JMP CHLOOP + TAD [200 + 6034 /KRS + DCA NAME1 + 6032 /KCC + TAD [SPADR-1 + DCA XR +DSPCHL, TAD I XR + SZA + TAD NAME1 + SNA CLA + JMP I XR + JMP DSPCHL +SPADR, -225;JMP CTRLU + -215;JMP CARRET + -377;JMP RUBOUT + -375;JMP ALTMOD /V3D MODIFIED BY SET + -376;JMP ALTMOD /V3D MODIFIED BY SET + -233;JMP ALTMOD + -200;JMP CHLOOP + -217;JMP CHLOOP /^O + -"_;JMP LESSTN + -212;JMP LFEED + -203;JMP CTRLC /MUST BE LAST - SEE CLRLIN CODE + 0 + JMS PRNT +CINSRT, TAD NAME1 + DCA I LXR + TAD LXR + TAD [-EOBUFR+2 + SPA CLA + JMP CHLOOP + JMS CRLF + JMP I [CDER2 + CARRET, JMS CRLF +CLFINI, DCA I LXR + JMP I [ANALYZ +LESSTN, JMS PRNT + TAD ["< + JMP CINSRT+1 +CTRLC, +CTRLU, TAD [336 + JMS I PRINT + TAD NAME1 + TAD [100 +CLRLIN, JMS I PRINT + JMS CRLF + TAD I XR + SZA CLA + JMP GLINE + CDF 10 + CLA CMA + DCA I [7700 + TSF + JMP .-1 + JMP I [7605 /7605=CDF CIF 10 +CRLF, 0 + TAD [215 + DCA NAME1 + JMS PRNT + TAD [212 + JMS I PRINT + JMP I CRLF +ALTMOD, TAD [244 + DCA NAME1 + CLA CLL CML RAR + CDF 10 + DCA I [MPARAM-1 + CDF 0 + JMS PRNT + JMP CLFINI + /*** LOCATIONS ON THIS PAGE ARE MODIFIED BY SET +/SEE SET FOR DETAILS. DO NOT CHANGE. + +RUBOUT, TAD LXR + TAD [1-BEGLN + SNA CLA + JMP RBSPCL + TAD [334 + ISZ RBFLAG + JMS I PRINT + CLA CMA + DCA RBFLAG + TAD LXR + DCA T + TAD I T + JMS I PRINT +LBCKUP, CLA CMA + TAD LXR + JMP CHLOOP-1 +RBSPCL, ISZ RBFLAG + JMP CLRLIN+1 + TAD [334 + JMP CLRLIN +PRNT, 0 + ISZ RBFLAG + JMP .+3 + TAD [334 + JMS I PRINT + DCA RBFLAG + TAD NAME1 + JMS I PRINT + JMP I PRNT +LFEED, JMS CRLF + DCA I LXR + TAD [BEGLN-2 + DCA XR + TAD I XR + SNA + JMP LBCKUP + JMS I PRINT + JMP .-4 + + IFNZRO RUBOUT-1131 <_ERROR_> + *1200 /INITIALIZATION - STORED OVER BY LINE BUFFER + BEGLN=. /LINE BUFFER +CDINIT, DCA TFPUTX + CDF 10 + CLA IAC + TAD I [200 + DCA TMONIT /SAVE AWAY MONITOR CALL ADDRESS SINCE WE CALL + TAD I [USERFG /THE MONITOR RECURSIVELY, LIKEWISE SAVE + DCA TUSRFG /THE "USER FLAG" AND THE FIELD WE WERE CALLED FROM + TAD I [T1 /FETCH THE USERS ARGUMENT + DCA DEFALT /STORE IN THE DEFAULT EXTENSION WORD + DCA I [7 /ZERO "DIRECTORY SEGMENT IN CORE" KEY + CDF 0 + CIF 10 + JMS I [200 + 13 /RESET ALL HANDLERS + 0 /BUT NOT OUTPUT FILES + TAD DEFALT + TAD M5200 + SZA CLA /IS THIS A REQUEST FOR A "SPECIAL DECODE"? + JMP CDCONT /NO + TAD ALTLIM + DCA OUTLIM /YES - SET UP ALL THE PROPER LOCATIONS + TAD ALTDF1 + DCA LIMDIF /TO YIELD 1 OUTPUT FILE AND 5 INPUT FILES + TAD ALTDF2 + DCA BEGDIF /ALL OF WHICH ARE 5-WORD ENTRIES + DCA I PLKUPS + TAD STARJM + DCA I PSTARS /AND ALLOW * AS A FILE OR EXTENSION NAME + DCA DEFALT /NO DEFAULT EXTENSION IN "SPECIAL" MODE + TAD CCLA /STOPS FETCHES IN SPECIAL MODE + DCA I PSPKG1 /NO HANDLER FETCHES NECESSARY EITHER SINCE NO LOOKUPS +CDCONT, TAD I PRWD /SEE IF BATCH FLAG IS UP + RAL + SPA CLA /IF YES, GO TO PAGE0 CODE + JMP TT /TT ETC. IS ONCE-ONLY CODE + JMP I CDRST + CDRST, RESTRT+1 + /CONSTANTS NECESSARY TO SUPPORT "SPECIAL DECODE" MODE +M5200, -5200 +ALTLIM, 1-MOFILE-5 +ALTDF1, MOFILE+5-MPARAM+5 +ALTDF2, 5 +PLKUPS, LKUPSW +STARJM, STARNM&177+5200 /"JMP STARNM" +PSTARS, STARSW +CCLA, CLA +PSPKG1, SPKLG1 + *1314 + EOBUFR=. +PRMESG, 0 + TAD I PRMESG + JMS PRWD + TAD I PRMESG + ISZ PRMESG + AND [77 + SZA CLA + JMP PRMESG+1 + JMP I [RESTRT +PRWD, 7777 + DCA T + TAD T + RTR + RTR + RTR + JMS PCHAR + TAD T + JMS PCHAR + JMP I PRWD +PCHAR, 0 + AND [77 + SNA + JMP I PCHAR /IGNORE NULLS + TAD [240 + AND [77 + TAD [240 + JMS TYPE + JMP I PCHAR +PRNAME, 0 + TAD NAME1 +/ SNA /WOULD LIKE TO FIND ROOM FOR THESE 2 LOCS +/ JMP I [CDER2 + JMS PRWD + TAD NAME2 + JMS PRWD + TAD NAME3 + JMS PRWD + TAD NAME4 + SNA CLA + JMP I PRNAME + TAD [256 + JMS PCHAR + TAD NAME4 + JMS PRWD + JMP I PRNAME +TYPE, 0 + JMP .+3 + TSF + JMP .-1 + TLS + CLA + TAD [7000 + DCA TYPE+1 +TYPRET, JMP I TYPE + IFNZRO TYPRET-1377 + *4001 /PROG TO WRITE CD AND ODT ONTO NEW SYSTEM DEVICE + /4000=JMS SYSSWP TO SWAP PGS 6600 AND 7600 + TAD I (7777 /SET TO PROPER RECORD FOR FIELD 1 STUFF + DCA F1STUF + JMS I SYSHND + 4600 + 0 + MCDREC + JMP CERR + JMS I SYSHND + 5011 + 0 + ODTREC + JMP CERR + JMS I SYSHND + 0110 /READ IN UPPER PG 7600 + 7600 +F1STUF, 0 + JMP CERR + JMP I .+1 + 7605 /START HER UP +CERR, TAD .+3 + DCA 4001 + JMP 4000 /RESWAP AND HALT + HLT +SYSHND, 7607 + PAGE + *0 + CDVERSION + HLT /POWER FAIL RESTART PROTECTION +NUMTST, 7777 + JMS I [GCH + CMA + TAD NUMFUJ + TAD ["8 /TEST INPUT CHARACTER FOR RANGE + CLL CMA /0-7 IF NUMFUJ=0 + TAD [10 /0-9 IF NUMFUJ=2 + TAD NUMFUJ + JMP I NUMTST + *15 +LXR, 0 +XR, 0 +CLXR, 0 +T, CDINIT +TT, CDF 0 /***GETS SET TO CDF BATCH +HIORD, TAD I DVICE /CHECK TO SEE IF BOS IS REALLY THERE +NUMX, TAD OUTSW /IF NOT, SIGNAL ERROR +RBFLAG, SNA CLA +NAME1, JMP NAMECT /IT'S O.K.....PROBABLY! +NAME2, CDF 0 /BAD. SIGNAL ERROR TO MONITOR +NAME3, ISZ I NUMTST +NAME4, JMP I [7605 /AND RESTART BATCH MONITOR +NAMECT, CIF CDF 0 /*****GETS ALTERED****** +NMBASE, JMP I .+1 /START UP IN CD AREA OF BATCH +DEV1, RESTRT+1 /***GETS ADDRESS OF CD AREA +DEV2, 0 +PERDSW, 0 +NUMFUJ, 0 +DVFLAG, 0 +DELIM, 0 +OUTSW, 0 +DEFALT, 0 +DVICE, 0 +DFLTNM, 0423;1300 /DSK +BEGDIF, MIFILE-MOFILE +LIMDIF, MIFILE-MPARAM+2 +OUTLIM, 1-MIFILE +GETHND, 11 +TMONIT, 0 +TUSRFG, 0 +TFPUTX, 0 +EXT1, TAD NAME4 + DCA NAMECT /REMEMBER TYPED EXTENSION + TAD NAMECT + SNA + TAD DEFALT /SUBSTITUTE DEFAULT IF ZERO +EXT2, DCA NAME4 + TAD [NAME1 + JMP I .+1 + LKUPLP +PRINT, TYPE + FIELD 1 + XLIST + EJECT INVISIBLE ODT + /INVISIBLE ODT FOR OS/8 MONITOR + /LOADS INTO FIELD 1 NOW, BUT LOADS & EXECUTES IN FIELD 0 + /DEFINITIONS OF MONITOR SYMBOLS - VOLATILE! + ODTREC=60 + UDNAME=7741 + MREAD=7757 + MGET=7667 + KMREC=7 + MTEMP=27 + MARG1=7740 + JSBITS=7746 + LXM=6200 /EXTENDED MEMORY REGISTER LOAD + RXM=6230 /EXTENDED MEMORY REGISTER READ + RACA=6175 /EXTENDED MEMORY BIT MANIPULATION + RACB=6176 /" " + RACC=6177 /" " + *200 +READ, JMS I [OCRLF +READ5, DCA WORD + DCA WORD+1 + TAD [-7 / SET CHARACTER LIMIT + DCA TOTE +REA, KSF /CHARACTER INPUT + JMP .-1 + JMS I [CTCTST /CONTROL 'C' TEST + JMP CTRC + TAD (203 + DCA TEMP /STORE CHARACTERS + KCC + TAD TEMP + JMS I [TYPN /ECHO INPUT CHARACTERS + TAD TABL1A /SET UP COMMAND TABLE SEARCH + DCA 10 +CHFLP, TAD I 10 /CHARACTER I.D. + SPA + JMP SEX /NO COMMAND -NUMERIC INPUT + CIA + TAD TEMP + SZA CLA + JMP CHFLP /NOT THIS ONE-TRY NEXT ONE + TAD 10 /THIS IS THE COMMAND + TAD TABL2A /SET UP JUMP TO COMMAND SUBROUTINE + DCA TEMP + TAD I TEMP + DCA TEMP + TAD WORD + JMS I [XLODE /BANK AND FIELD ADJUSTMENT + DCA WORD + JMP FLDTST /SEE IF FIELD SETTING IS LEGAL +CTRC, JMS I [DUMP /CONTROL 'C' + LXM /DISABLE KT8A + JMP I [7605 + TABL1=. /COMMAND TABLE + 240 /SPACE + 212 /LINE FEED + 215 /CR + 257 /SLASH + 302 /B + 307 /G + 273 /; + 303 /C + 327 /W + 336 /^ + 315 /M + 301 /A + 314 /L + 304 /D + 337 /<-ARROW + 306 /F + 377 /RUBOUT + 253 /+ + 255 /- + -270 /USED - SEE "SEX" + EXAM, JMS TOTTST /SLASH SUBROUTINE-LOCATION EXAMINATION + JMP EX2 + TAD WORD /FIELD + DCA CAD + TAD WORD+1 /ADDRESS + DCA CAD+1 +EX2, JMS LOAD /GET LOCATION CONTENTS + CAD + JMS I [PNUM /ECHO CONTENTS + DCA SHUT + JMP READ5 +SEX, TAD TEMP /ADDRESS & FIELD ADJUSTMENT + CLL + TAD [10 /TEST FOR NUMBER + SNL + JMP NO + DCA TEMP + CLA CLL CMA RTL + DCA CRL +SROT, TAD WORD+1 /FIELD & ADDRESS PROCESSING + CLL RAL + DCA WORD+1 + TAD WORD + RAL + DCA WORD /FIELD AND BANK STORAGE + ISZ CRL + JMP SROT + TAD WORD+1 + TAD TEMP + DCA WORD+1 /ADDRESS STORAGE + ISZ TOTE /TEST FOR TOO MANY CHARACTERS + JMP REA +NO, CLA /UNACCEPTABLE INPUT ECHOS ? + TAD [277 + JMS I [TYPN + JMP READ + CRL, 0 + JMS TOTTST + JMP I CRL + TAD WORD+1 + ISZ SHUT + JMS I [STORE + CAD + CLA + JMP I CRL +CRL1, JMS CRL /CARRAIGE RETURN + JMP READ +CRL2, TAD [215 /LINE FEED + JMS I [TYPN + JMS CRL + JMS I [TYPN + ISZ CAD+1 +TABL1A, TABL1-1 +UPAR3, JMS I [TYPD + CAD + TAD [257 + JMS I [TYPN + JMP EX2 +OPIN, JMS CRL /BKARROW/UNDERLINE + JMS LOAD + CAD + DCA CAD+1 + TAD INDFLD + JMS I [XLODE + DCA CAD +UPAR2, JMS I [OCRLF + JMP UPAR3 +SEMI, JMS CRL /SEMI COLON + ISZ CAD+1 +TABL2A, TABL2-TABL1 + JMP READ5 + *400 +/NOTE THAT LOCATIONS BURP,BURP+1 GET ALTERED AFTER BRKTST +/IS EXECUTED. THEY BECOME: CDF 10; TAD I [MARG1 +BURP, JMP I .+1 /RETURN FROM BREAKPOINT -GO REDETERMINE CORE SIZE + BRKTST /TO MAKE ILLEGAL FIELD GIVE ? + DCA SAC + /IOF /COMMENTED OUT FOR HIGH GROUND SUPPORT + TAD I [MTRAD /RESTABLISH ADDRESS,FIELD,ETC. + DCA TRAD + TAD I [MTRAD1 /THESE ARE ALL + DCA TRAD+1 + TAD I [MKEEP /BREAKPOINT PARAMETERS + DCA KEEP + TAD I [MPUNN / + DCA PUNN + CLA IAC + AND I (7700 + DCA LINK + TAD I (7700 + CDF 0 + JMS I [T174 /BANK AND FIELD MANIPULATION + TAD DATFLD + DCA INDFLD + TAD [KMREC + CDF 10 + DCA I (MGET+4 + CLA CLL CMA RAL + AND I [MGET+2 + DCA I [MGET+2 /REMOVE LOW-ORDER BIT FROM CONTROL WORD + CDF 0 + TAD KEEP + JMS I [STORE + TRAD + TAD TRAD+1 + IAC + DCA GAME+1 /ESTABLISH CONTINUE PARAMETERS + TAD TRAD + DCA GAME + TAD KEEP + DCA INST + JMS IOTTST + SKP + JMP JMPLIP + TAD TRAD + DCA CAD /ESTABLISH EXAM PARAMETERS + TAD TRAD+1 + DCA CAD+1 + JMS I [EFFADR + TAD CAD + DCA FROG + TAD CAD+1 + DCA FROG+1 +JMPLIP, JMS I [CTCTST + JMP I [7605 + CLA + JMP I (LIP + CTCTST, 0 /CONTROL 'C' TEST + TAD [200 + KSF + STA + KRS + TAD (-203 + SZA + ISZ CTCTST + JMP I CTCTST + +OCRLF, 0 /CARRAIGE RETURN-LINE FEED + TAD [215 + JMS I [TYPN + TAD [212 + JMS I [TYPN + CLA CMA + DCA SHUT + JMP I OCRLF +TRAP, JMS TOTTST /ESTABLISHES BREAKPOINT + TAD [SHNDLR + TAD WORD+1 + DCA TRAD+1 /ADDRESS + TAD WORD + DCA TRAD /FIELD + TAD [7000 + DCA I [SHNDLR + TAD [4 + DCA WORD+1 + TAD [UDNAME-MPUNN-1 + DCA TEMP + TAD [BRKCOD-1 /MOVE UP RETURN CODE + DCA 10 + TAD [UDNAME-1 + DCA 11 + TAD I 10 + CDF 10 + DCA I 11 + CDF 0 + ISZ TEMP + JMP .-5 + TAD I [JSBITS + RTR + SZL CLA + TAD [5 + CDF 10 + TAD I [J7600 + DCA I [J7600 /CHANGE JMP 7600 TO JMP 7605 IF ODT AREA NOT USED + CDF 0 + TAD I [JSBITS + DCA JSTEMP /SAVE JSBITS BEFORE SETTING BRKPT + TAD [CIF 10 + JMS I [STORE + WORD + ISZ WORD+1 + TAD [JMP I 6 /STORE RETURN JMP + JMS I [STORE + WORD + ISZ WORD+1 + TAD DNAME + JMS I [STORE + WORD + TAD JSTEMP + DCA I [JSBITS /RESTORE JSBITS + JMP I [READ +SUBT, CML +ADD, TAD WORD+1 /MODIFY CURRENT LOCATION POINTER + SNA + IAC /1 IS DEFAULT VALUE + SZL /+ OR -? + CIA /- + TAD CAD+1 + DCA CAD+1 + JMP I [UPAR2 /AND DISPLAY LOC AND CONTENTS + *600 /MONITOR ENTERS ODT HERE +LIP, HLT /ERROR. AT INIT, THE CODE AT 600 + JMP I .+1 /IS CHANGED TO: ISZ PUNN; +TTYTST, INIT /JMP XCONT; TSF + JMP TTYOFF +LIPTYP, JMS I [TYPD + TRAD + TAD P250 + JMS I [TYPN + TAD LINK + TAD [260 + JMS I [TYPN + TAD [273 + JMS I [TYPN + TAD SAC + JMS I [PNUM + JMP I [READ +JUMP, JMS TOTTST /TEST FOR 'G' WITH NO ADDRESS + JMP I PNO + TAD WORD + DCA GAME + TAD WORD+1 + DCA GAME+1 + TAD WORD + JMS I [T174 /FIELD ADJUSTMENT -STORED IN DATFLD + TAD [7000 + DCA INST + DCA SAC + DCA LINK + JMP CONTX +CONTIN, + + TAD WORD+1 / 'C'-CONTINUE COMMAND + CIA + SNA +CONTX, CMA + DCA PUNN + DCA I [7607 /IN CASE THERE WAS NO BREAKPOINT + JMS LOAD /V3 + TRAD /V3 + DCA KEEP /V3 + JMS I [OCRLF +XCONT, TAD [JMP 4 + JMS I [STORE + TRAD + CDF 10 + TAD TRAD + DCA I [MTRAD + TAD TRAD+1 + DCA I [MTRAD1 + TAD KEEP + DCA I [MKEEP + TAD PUNN + DCA I [MPUNN + CDF 0 + TAD EXTEMP + LXM + JMS I [SIM /SIMULATE THE BRKPOINTED INST HERE + TAD LINK /SAVE LINK + DCA I [MLINK /ESTABLISH RETURN CODE---MXXXX'S + TAD SAC /SAVE AC + DCA I [MAC + TAD GAME /ESTABLISH START CDF + TAD [CIF 0 + DCA I [MSTCDF + TAD DATFLD /ESTABLISH 'B' CDF + JMS I [XLODE + TAD [CDF 0 + DCA I [MCDF + TAD GAME+1 /ESTABLISH START ADDRESS + DCA I [MSTADR + JMS I [DUMP + TAD I [JSBITS + RTR + SZL CLA + JMP I [MSWITC + JMP I [MREAD /EXECUTION TIME + UPAR1, JMS I [CRL /UP-ARROW COMMAND- CLOSE LOCATION + JMS I [EFFADR + JMP I [UPAR2 /PRINT REFERENCED LOCATION CONTENTS +EFFADR, 0 /USE CONTENTS AS MRI + JMS LOAD + CAD + AND [177 /ISOLATE LOCATION REFERENCED + DCA TEMP + JMS LOAD + CAD + AND [200 /IS IT 'THIS PAGE'? +P250, SNA CLA + JMP .+3 + TAD CAD+1 + AND [7600 + TAD TEMP + DCA TEMP + JMS LOAD + CAD + AND T400 /IS IT INDIRECT-TEST '400' BIT + SNA CLA + JMP NOIND + TAD TEMP + DCA CAD+1 + JMS LOAD + CAD + DCA TEMP + TAD CAD+1 + AND P7770 /IS IT AUTO-INDEXED? + TAD P7770 + SZA CLA + JMP NOAUTO + ISZ TEMP +P7770, 7770 /COVERS ISZ.... + TAD TEMP + JMS I [STORE + CAD +NOAUTO, TAD INDFLD /NO INDEXING + JMS I [XLODE + DCA CAD +NOIND, TAD TEMP /NOT INDIRECT + DCA CAD+1 + JMP I EFFADR +TTYOFF, /WASTE SOME TIME + JMS IOTTST +T400, AND I 0 + ISZ NOUGHT + JMP TTYTST + JMP LIPTYP /IF THE TTY FLAG ISN'T UP NOW, IT'LL NEVER GO UP + TABL2=. /COMMAND TABLE SUBROUTINE INFO + REA /IGNORE BLANKS + CRL2 + CRL1 + EXAM + TRAP + JUMP + SEMI + CONTIN + WSER + UPAR1 + MASKX + ACX + LINKX + DATF + OPIN + INDF + RBOUT + ADD + SUBT + IFZERO 1000&. <*1000> +PNUM, 0 /PRINTS CONTENTS OF ADDRESS LOCATION + DCA PUNN /OR ADDRESS...ITSELF + TAD [-4 + DCA TEMP +PN2, TAD PUNN + RTL + RAL + DCA PUNN + TAD PUNN + RAL + AND [7 + TAD [260 + JMS I [TYPN + ISZ TEMP + JMP PN2 + TAD [240 + JMS I [TYPN + JMP I PNUM +TYPD, 0 /PRINTS BANK AND FIELD OF ACCESSED LOC. + TAD I TYPD + DCA TEMP + TAD I TEMP + JMS I TYPDXX + JMS I [TYPN /TYPE BANK + TAD NWD + JMS I [TYPN /TYPE FIELD + TAD I TEMP + JMS I [PNUM /PRINT ADDRESS + ISZ TYPD + JMP I TYPD +TYPDXX, TYPDX +TYPN, 0 /PRINTS CHARACTERS PREPARED BY TYPD;PNUM,ETC. + TLS + TSF + JMP .-1 + CLA + JMS I [CTCTST + JMP I [CTRC + TAD [-14 /^O? + SZA CLA + JMP I TYPN /NO + KCC /YES + JMP I [READ +WSER, JMS I [OCRLF / 'W'---WORD SEARCH + TAD LIMLO + DCA CKT+1 /ESTABLISH LOWER LIMIT + TAD INDFLD + JMS I [XLODE /ADJUST WORD SEARCH BANK AND FIELD + DCA CKT +WSER1, JMS LOAD + CKT + AND MASK /SEARCH MASK + CIA + TAD WORD+1 + SZA CLA + JMP WSER2 + JMS I [TYPD /WORD FOUND GO TYPE IT + CKT + TAD [257 + JMS I [TYPN + JMS LOAD + CKT + JMS I [PNUM + JMS I [OCRLF +WSER2, TAD CKT+1 /TEST NEXT LOCATION + CIA + TAD LIMHI /IF IT ISN'T ABOVE THE LIMIT + SNA CLA + JMP I [READ /OVER LIMIT GO GET NEXT COMMAND + ISZ CKT+1 + JMP WSER1 /SEARCH NEXT LOCATION + +ACX, TAD [SAC-LINK / 'A' COMMAND +LINKX, TAD [LINK-MASK / 'L' COMMAND +MASKX, TAD [MASK-INDFLD / 'M' COMMAND +INDF, TAD [INDFLD-DATFLD /'F' COMMAND +DATF, TAD [DATFLD / 'D' COMMAND + DCA WORD+1 + CLA CMA + DCA WORD + DCA TOTE + TAD [257 + JMS I [TYPN + JMP I [EXAM + BRKCOD=. /RETURN CODE --- FROM 'G','C' COMMANDS + NOPUNC + *UDNAME /STORED IN UPPER FIELD ZERO + ENPUNC + + DCA MARG1 + RAL + RDF + DCA 7700 + TAD PODT + DCA MGET+4 + ISZ MGET+2 /DON'T REVERSE TAPE MOTION TO PICK UP ODT + CDF CIF 0 +J7600, JMP 7600 +PODT, ODTREC +P7603, 7603 +MTRAD, 0 +MTRAD1, 0 +MKEEP, 0 +MPUNN, 0 + + NOPUNC + *BRKCOD+MPUNN-UDNAME+1 + ENPUNC + +DUMP, 0 /SUBROUTINE TO STORE ADJUSTED CODE + TAD STOFLG /LT + SNA CLA + JMP I DUMP + JMS I [SHNDLR + 4200 + 1400 +GREC, 0 /SET BY GETADR + HLT + DCA STOFLG + JMP I DUMP + +RBOUT, TAD [277 /RUBOUT COMMAND + JMS I [TYPN + TAD [240 + JMS I [TYPN + JMP I REDE5 + IFNZRO .-1200&4000 <*1200> +SIM, 0 /SIMULATES BREAKPOINTED INST + JMS IOTTST + JMS LOAD + FROG + DCA TEMP + JMS I [DUMP + DCA I [GREC + JMS I [SHNDLR /DUE TO 128K CODE -SIM IS LOADED INTO 1600 + 0100 +SIMXT, 1600 + 64 + HLT + JMS I SIMXT + JMS I [STORE + FROG + JMP I SIM +XLODE, 0 /TRANSFORMS 'ABCDE' TO 'ACDEB0' FOR CDF + DCA NWD + TAD TEMP /TEST FOR GO COMMAND + CIA /A 'GO' ABOVE 32K REQUIRES SETTING EXTEMP + TAD TJUMP /FOR LXM ENABLE + SNA CLA + TAD (30 + AND NWD + SNA CLA + JMP LT32K + TAD [7000 + DCA EXTEMP +LT32K, TAD NWD /TRANFORMATION IS HERE + AND (17 + TAD (7770 + SPA + TAD (17 + TAD [7771 + TAD NWD + CLL RTL + JMP I XLODE + + T174, 0 /TRANSFORMS 174 TO 37 + CLL RTR + RAR + AND (17 + TAD [10 + AND [7767 /... 0027 ARE THE RELEVANT BITS IN 7767 + SZL + TAD [10 + DCA DATFLD + JMP I T174 +TYPDX, 0 /PROCESSES BANK & FIELD FOR PRINTING + SPA /ADJUSTMENT FOR LINE FEED AFTER + CLA /REFERENCE TO M,D,F,ETC. COMMANDS + CLL RTR + RAR + DCA T174 + TAD T174 + AND [7 + TAD [260 + DCA NWD + TAD T174 + AND [10 + SZL + TAD [4 + CLL RTR + TAD [260 + ISZ TEMP + JMP I TYPDX + + +STORE, 0 /SUBROUTINE TO ADJUST CODE + DCA LOAD + TAD I STORE + JMS I [GETADR + ISZ STOFLG /INDICATE THAT WE'RE CHANGING THIS RECORD + TAD LOAD + DCA I ADR + CDF 0 + ISZ STORE + JMP I STORE + GETADR, 0 /GETS ADDRESS.... + DCA ADR + TAD I ADR + DCA FADR + ISZ ADR + TAD I ADR + DCA ADR + TAD FADR + SNA /ONLY NEED TO FOOL WITH ADDRESS IF IT'S IN FIELD 0 + JMP CKADR + SPA + CLA + TAD [CDF 0 + DCA .+1 +FADR, 0 + ISZ GETADR + JMP I GETADR +CKADR, TAD ADR /MANIPULATES FIELD 0 OF ODT'D PROGRAM + RAL /ACCESSES IT IN LOCS 1400-1777 + SZL SPA CLA / + JMP FADR+1 + CLA CLL CMA RTL + AND I [JSBITS + DCA I [JSBITS /MODIFY THE JSW TO INDICATE ODT AREA VIOLATION + TAD ADR + CLL RTL + RTL + RAL + AND [7 /CALCULATE BLOCK OF STORAGE + TAD [MTEMP+4 + DCA GIREC + TAD I [GREC /MAYBE IT'S ALREADY IN CORE + CIA + TAD GIREC + SNA CLA + JMP NOREAD /IT IS!! + JMS I [DUMP /MAYBE... ...IT ISN'T + JMS I [SHNDLR /LOADS RELEVANT PROGRAM CODE + 0200 +G1400, 1400 +GIREC, 0 + HLT + TAD GIREC + DCA I [GREC +NOREAD, TAD ADR /ADJUST THE ADDRESS FOR PROPER ACCESS + AND (377 + TAD G1400 + DCA ADR + JMP I GETADR + + + *1400 + /INITIALIZATION CODE TO SET UP THE "MREAD" AREA IN FIELD 0 + /WITH THE ODT CODE TO START UP A PROGRAM + +INIT, TAD I 10 + DCA I 11 + ISZ TEMP + JMP .-3 + JMS CORE /DETERMINE CORE FIELD SIZE + TSF + JMP .-1 + JMP I [READ + +BRKTST, JMS CORE /GET CORE SIZE NOW THAT WE WERE + TAD KLIP + DCA I PLIP /SETUP LOCATIONS AT 600 + TAD KLIP+1 + DCA I PLIP+1 + TAD KLIP+2 + DCA I PLIP+2 + TAD KCDF10 /JUST BREAKPOINTED IN. THEN RESTORE + DCA I BURPO /LOCS AT BURP SO WE NEVER COME BACK + TAD KCDF10+1 /HERE AGAIN UNTIL WE'RE SWAPPED + DCA I BURP2 + JMP I BURPO +KCDF10, CDF 10 + TAD I [MARG1 /SIMULATE LOCS AT BURP +BURPO, BURP +BURP2, BURP+1 + RSTCOD=. /RESTORES ODT AFTER 'C','G' COMMANDS + NOPUNC + *MREAD-1 + ENPUNC + + SHNDLR + JMS I .-1 + 1000 + 0 + MTEMP+4 + HLT +MSWITC, TAD MLINK + CLL RAR + TAD MAC +MCDF, CDF 0 /CDF OF PREVIOUS BRKPOINTED INST + JMP MSTCDF +MAC, 0 /SAVED AC +MLINK, 0 /LIKEWISE LINK +MSTCDF, CIF 0 /START CDF + JMP I .+1 +MSTADR, 0 /START ADDRESS + + NOPUNC + *RSTCOD+MSTADR-MREAD+2 + ENPUNC + CORE, 0 /DETERMINES AVAILABLE CORE + RXM /READ AND STORE EXT MEM INFO + DCA EXTEMP + TAD [7000 + LXM /SETS LXM FOR ODT PURPOSES + CLA + CDF 0 + TAD I M1 /FIELD INFO STORED IN 7777(IF AVAILABLE) + AND COR70 + CLL RTR + RAR + SZA /HAS CORE SIZE BEEN SET? + JMP USERCR /VERILY +COR0, CDF 0 + TAD CORSIZ /GET FIELD TO TEST + JMS I [XLODE /EXTENDED MEMORY BANK&FIELD ADJUSTMENT + TAD COREX + DCA .+1 /SET UP CDF TO FIELD +COR1, CDF + TAD I CORLOC /SAVE CURRENT CONTENTS +COR2, NOP + DCA COR1 + TAD COR2 + DCA I CORLOC +COR70, 70 /ACTS AS NOP + TAD I CORLOC /TRY TO READ BACK 7000 +CORX, 7400 + TAD CORX + TAD CORV + SZA CLA + JMP COREX /NON-EXISTENT FIELD EXIT + TAD COR1 /RESTORES CONTENTS DESTROYED + DCA I CORLOC + ISZ CORSIZ /TRY NEXT HIGHER FIELD + JMP COR0 + +COREX, CDF 0 /STORE AWAY LAST REAL FIELD IN 'ZERO' + TAD CORSIZ + TAD M1 +USERCR, CIA + DCA ZERO + JMP I CORE +CORLOC, CORX +CORV, 1400 +M1, -1 + CORSIZ, 1 +KLIP, ISZ PUNN + XCONT&177+5200 + TSF +PLIP, LIP + LIP+1 + LIP+2 + + *1600 +SIMX, 0 /SIMULATES BREAKPOINTED INST + TAD TEMP + DCA 0 + JMS IOTTST /IS IT AN IOT? + TAD T777 + CMA + AND INST + RAL + CML + SNL SMA /IS IT A JMS OR A JMP? + JMP JMSJMP + CML RAR + DCA SOPR /STORE INST IN SOPR + TAD DATFLD /PREPARE CDF + JMS I [XLODE + TAD [CDF 0 + DCA .+1 + HLT + TAD LINK /AND LINK + CLL RAR + TAD SAC /AND AC +SOPR, HLT /EXECUTE INSTRUCTION + SKP + ISZ GAME+1 + DCA SAC /RESAVE AC,LINK,DATFLD + RAL + DCA LINK + RDF + JMS I [T174 + CDF CIF 0 +EOSIM, TAD 0 /PREPARE TO RETURN + CIA /HAS LOC 0 BEEN CHANGED?BY A TAD...DCA...ISZ... + TAD TEMP +EOTST, SNA CLA /IF SO,THEN... + JMP .+3 + TAD 0 /...DO A STORE(ON RETURN TO SIM) + JMP I SIMX + ISZ SIMX + JMP I SIMX +JMSJMP, RTL /PROCESS JMP,JMS + SZL CLA + JMP JMPX + TAD TRAD + DCA FROG + TAD GAME+1 + DCA 0 + CLA IAC CLL +JMPX, TAD FROG+1 + DCA GAME+1 + CML RAL /PUT -LINK IN AC (0 IF JMP, 1 IF JMS) + JMP EOTST +T777, 777 + + *0 +ZERO, ODTVERSION + /HLT /IN CASE BKPT WITH INTER ON + CIF 30 /SYMBIONT CODE + JMP .-1 +PUNN, 0 + *4 /PAGE 0 LITERALS AND CELLS + CIF 10 /PROTOTYPE BREAKPOINT + JMP I 6 /USED BY PROGRAMS WITH JSBITS(10)=1 +DNAME, UDNAME /WHEN ODT IS RELOADED ON A BREAKPOINT + + *7 +EXTEMP, 0 + RSTCOD-1 + MREAD-2 + *12 +TOTE, 0 +KEEP, 0 +INST, 0 +SHUT, -1 +TRAD, 0;SHNDLR +WORD, 0;0 +LINK, 0 +SAC, 0 +CAD, 0;0 +CKT, 0;0 +GAME, 0;0 +FROG, 0;0 +TEMP, MREAD-MSTADR-2 +JSTEMP, 0 +DATFLD, 0 +INDFLD, 0 +MASK, 7777 +LIMLO, 0 +LIMHI, 7577 +ADR, 0 +FLDTST, TAD ZERO /LOC. 0 HAS LAST REAL CORE FIELD + TAD NWD /IF USER TRIES TO ADDRESS NON- + SMA SZA CLA /EXISTENT CORE, A ? RETURNS + JMP I PNO + JMP I TEMP /HE'S OK. +PNO, NO +TOTTST, 0 /TEST FOR COMMAND WITHOUT ADDRESS + TAD TOTE + TAD [7 + SZA CLA + ISZ TOTTST + JMP I TOTTST +STOFLG, 0 +NWD, 0 +TJUMP, JUMP +NOUGHT, 0 +LOAD, 0 /SUBROUTINE TO LOAD PROGRAM CODE + TAD I LOAD + JMS I [GETADR +REDE5, READ5 + TAD I ADR /RETURNS ADDRESS CONTENTS IN AC + CDF 0 + ISZ LOAD + JMP I LOAD +IOTTST, 0 /TEST FOR ISOLATING I/O + CLA CLL CML RTR + TAD INST + SZL CLA + ISZ IOTTST + JMP I IOTTST + $ + ADDED src/os8-v3f/FPAT.PA Index: src/os8-v3f/FPAT.PA ================================================================== --- /dev/null +++ src/os8-v3f/FPAT.PA @@ -0,0 +1,53 @@ +/FRTS PATCH +/TO FIX LIMITATION INVOLVING 2-PAGE SYSTEM HANDLERS + +/16-JAN-78 SR/DS + + TEM=7507 + L7=7541 + + FIELD 1 + + *2675 + + 342 / = "AND (7770)" + + *2742 + + 7770 + + *7526 + +TDSET, 0 /SUBROUTINE TO RELOCATE ALL CIF/CDF'S + /TO FIELDS 1-7 IN SYSTEM HANDLER 1ST + /PAGE 07635 AND ABOVE. + DCA TEM + TAD L7635 + DCA P1 + JMP LOOP +L7635, 7635 +L1570, 1570 +L7710, 7710 + + *7546 + +LOOP, TAD I P1 + TAD L1570 + CLL + TAD L7710 + SZL CLA + JMP NOFIX /NOT A CIF/CDF TO FIELD>0 + TAD I P1 /OK: RELOCATE FIELD + AND L7 + TAD TEM /EITHER UP INITIALLY, OR BACK + /DOWN FINALLY + DCA I P1 +NOFIX, ISZ P1 /ON TO NEXT LOCATION + JMP LOOP + JMP I TDSET /DONE +P1, 0 /POINTER TO SYS HANDLER + + *7576 + + 6220 +$ ADDED src/os8-v3f/FUTIL.LS Index: src/os8-v3f/FUTIL.LS ================================================================== --- /dev/null +++ src/os8-v3f/FUTIL.LS @@ -0,0 +1,7926 @@ + /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 1 + + /FUTIL - FILE UTILITY - V08A + + DECIMAL + 0010 VERSION=08 + OCTAL + 0001 PATCH="A&77 + + / OS/8 FILE UTILITY PROGRAM. ALLOWS EXAMINATION AND + / MODIFICATION OF OS/8 MASS STORAGE DEVICES FROM THE CON- + / SOLE. DUMPING OF BLOCKS, LISTING OF WORDS AND MODIFICA- + / TION OF WORDS CAN BE DONE IN 7 FORMATS: OCTAL; SIGNED AND + / UNSIGNED DECIMAL; UNPACKED, 6-BIT PACKED, XS240 PACKED AND + / OS/8 PACKED ASCII. LISTING AND DUMPING CAN ALSO BE DONE + / IN 5 MORE FORMATS: BCD, BYTE (OCTAL CHARACTER), 2 PSEUDO- + / SYMBOLIC FORMATS [PDP-8 & FPP-12/8A], AND A COMBINATION + / FORMAT FOR DIRECTORY DUMPING. PROGRAM USES BOTH COMMAND + / WORDS AND COMMAND CHARACTERS (LIKE ODT) FOR DIRECTION. + + /BY: JIM CRAPUCHETTES + / MENLO COMPUTER ASSOCIATES, INC. + / (FORMERLY: FRELAN ASSOCIATES) + / P.O. BOX 298 + / MENLO PARK, CALIF. 94025 + / + / + /VERSIONS 1 THRU 4 - "XTAPE" FOR THE XSYSTEM, + / LAST REVISION--APRIL 1970. + / + /VERSION 5 - OS/8 OPERATION, JULY 1972 THRU JUNE 1976 + / "(...)", "C & 'CC AS NUMBERS, IOT DECODING, LIST + / & DUMP FORMATS, OUTPUT TO LPT:, FILE DATE & LOC + / IN DIRECTORY, "WORD MEMREF...", BCD OUTPUT, + / ADDITIONAL ODT OUTPUTS, "BYTE" OUTPUT. + /VERSION 6 - EXPANSION OF OS/8 OPERATION, JUNE 1976: + / "FILLER" FOR "MODIFY", SEARCH LIMITS CHANGE, "WRITE" + / WITH AN ARGUMENT, FPP INSTRUCTION DECODING, CHAINING + / SUPPORT (FOR CCL CALLS), LOAD MODULE HANDLING AND + / "SHOW HEADER", MULTIPLE DEFAULT EXTENSIONS, ^R FOR + / RETYPE, SET REPLACES OPTION, NEW OUTPUT ROUTINE FOR + / "DIRECTORY" FORMAT, LINK OVERLAY HANDLING, ODT CHANGES, + / EXIT, SCAN, WRITE LOCKED OPERATION, SPEED UP SEARCHES, + / XS240 FORMATS + /VERSION 6.17 - APR 1, 1977; BATCH OPERATION, COMMENT + /VERSION 6.20 - MAY 16, 1977; NEW DATE, FULL FILE OUTPUT + / (SET/SHOW DDEV, OPEN ..., CLOSE), OPT ":" ON DEVICES. + /VERSION 6.21 - JUN 4, 1977; NEW INPUT ROUTINE, TEMP STORAGE + /VERSION 6.22 - JUL 13, 1977; CRTL-Q & -S, SCOPE MODE, + / IF/END COMMANDS, ALPHA DATE. + / + /PREVIOUS VERSIONS HAVE BEEN AVAILABLE THROUGH DECUS, + / DEC SUPPORT BEGINS WITH VERSION 7 - 20-JUL-77. + / VERSION 7 PATCHES: + / 1.CTRL/U CRASH & OVERLAY MAPPING IN SAVE MODE(7A TO 7B) + / 2.FIXED SHOW CCB PROBLEM(7B TO 7C) + / 3.ODT MAPPING ON LD. MODULES(7C TO 7D) + /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 1-1 + + / 4.ADDED SHOW CCB SUPPORT FOR KT8A SAVE IMAGES(7D TO 7E) + /FUTIL - FILE UTILITY - V08A PAL8-V10D NO DATE PAGE 2 + + / SOME ROUTINES AND IDEAS USED IN THIS PROGRAM WERE + / DERIVED FROM EDIT-8 AND FOCAL, BY RICK MERRILL, DEC. + / THE ODT COMMAND SET IS NEARLY IDENTICAL TO THE OS/8 + / ODT COMMAND SET EXCEPT THAT 15 BIT ADDRESSES ARE USED + / EVERYWHERE AND THERE ARE NO COMMANDS FOR PROGRAM EXECU- + / TION. + / THE DOUBLE PRECISION ARITHMETIC ROUTINES ARE A MUCH + / MODIFIED VERSION OF DECUS 8-115A. + + + / ASSEMBLY INFORMATION: + / + / .R PAL8 [VERSION 9] + / *FUTIL 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 + + ADDED src/os8-v3f/FUTIL.PA Index: src/os8-v3f/FUTIL.PA ================================================================== --- /dev/null +++ src/os8-v3f/FUTIL.PA @@ -0,0 +1,5789 @@ +/FUTIL - FILE UTILITY - V08A + +DECIMAL +VERSION=08 +OCTAL +PATCH="A&77 + +/ OS/8 FILE UTILITY PROGRAM. ALLOWS EXAMINATION AND +/ MODIFICATION OF OS/8 MASS STORAGE DEVICES FROM THE CON- +/ SOLE. DUMPING OF BLOCKS, LISTING OF WORDS AND MODIFICA- +/ TION OF WORDS CAN BE DONE IN 7 FORMATS: OCTAL; SIGNED AND +/ UNSIGNED DECIMAL; UNPACKED, 6-BIT PACKED, XS240 PACKED AND +/ OS/8 PACKED ASCII. LISTING AND DUMPING CAN ALSO BE DONE +/ IN 5 MORE FORMATS: BCD, BYTE (OCTAL CHARACTER), 2 PSEUDO- +/ SYMBOLIC FORMATS [PDP-8 & FPP-12/8A], AND A COMBINATION +/ FORMAT FOR DIRECTORY DUMPING. PROGRAM USES BOTH COMMAND +/ WORDS AND COMMAND CHARACTERS (LIKE ODT) FOR DIRECTION. + +/BY: JIM CRAPUCHETTES +/ MENLO COMPUTER ASSOCIATES, INC. +/ (FORMERLY: FRELAN ASSOCIATES) +/ P.O. BOX 298 +/ MENLO PARK, CALIF. 94025 +/ +/ +/VERSIONS 1 THRU 4 - "XTAPE" FOR THE XSYSTEM, +/ LAST REVISION--APRIL 1970. +/ +/VERSION 5 - OS/8 OPERATION, JULY 1972 THRU JUNE 1976 +/ "(...)", "C & 'CC AS NUMBERS, IOT DECODING, LIST +/ & DUMP FORMATS, OUTPUT TO LPT:, FILE DATE & LOC +/ IN DIRECTORY, "WORD MEMREF...", BCD OUTPUT, +/ ADDITIONAL ODT OUTPUTS, "BYTE" OUTPUT. +/VERSION 6 - EXPANSION OF OS/8 OPERATION, JUNE 1976: +/ "FILLER" FOR "MODIFY", SEARCH LIMITS CHANGE, "WRITE" +/ WITH AN ARGUMENT, FPP INSTRUCTION DECODING, CHAINING +/ SUPPORT (FOR CCL CALLS), LOAD MODULE HANDLING AND +/ "SHOW HEADER", MULTIPLE DEFAULT EXTENSIONS, ^R FOR +/ RETYPE, SET REPLACES OPTION, NEW OUTPUT ROUTINE FOR +/ "DIRECTORY" FORMAT, LINK OVERLAY HANDLING, ODT CHANGES, +/ EXIT, SCAN, WRITE LOCKED OPERATION, SPEED UP SEARCHES, +/ XS240 FORMATS +/VERSION 6.17 - APR 1, 1977; BATCH OPERATION, COMMENT +/VERSION 6.20 - MAY 16, 1977; NEW DATE, FULL FILE OUTPUT +/ (SET/SHOW DDEV, OPEN ..., CLOSE), OPT ":" ON DEVICES. +/VERSION 6.21 - JUN 4, 1977; NEW INPUT ROUTINE, TEMP STORAGE +/VERSION 6.22 - JUL 13, 1977; CRTL-Q & -S, SCOPE MODE, +/ IF/END COMMANDS, ALPHA DATE. +/ +/PREVIOUS VERSIONS HAVE BEEN AVAILABLE THROUGH DECUS, +/ DEC SUPPORT BEGINS WITH VERSION 7 - 20-JUL-77. +/ VERSION 7 PATCHES: +/ 1.CTRL/U CRASH & OVERLAY MAPPING IN SAVE MODE(7A TO 7B) +/ 2.FIXED SHOW CCB PROBLEM(7B TO 7C) +/ 3.ODT MAPPING ON LD. MODULES(7C TO 7D) +/ 4.ADDED SHOW CCB SUPPORT FOR KT8A SAVE IMAGES(7D TO 7E) + / SOME ROUTINES AND IDEAS USED IN THIS PROGRAM WERE +/ DERIVED FROM EDIT-8 AND FOCAL, BY RICK MERRILL, DEC. +/ THE ODT COMMAND SET IS NEARLY IDENTICAL TO THE OS/8 +/ ODT COMMAND SET EXCEPT THAT 15 BIT ADDRESSES ARE USED +/ EVERYWHERE AND THERE ARE NO COMMANDS FOR PROGRAM EXECU- +/ TION. +/ THE DOUBLE PRECISION ARITHMETIC ROUTINES ARE A MUCH +/ MODIFIED VERSION OF DECUS 8-115A. + + +/ ASSEMBLY INFORMATION: +/ +/ .R PAL8 [VERSION 9] +/ *FUTIL 1 +DMODE, 0 /DUMP MODE: NONE=0,PART=1,ALL=4000 + +CBLK, 0 /= CURRENT BLOCK + 0 /DUMMY FOR "SHOW ABS" +CAD, 0 /= CURRENT ADDRESS (0 -> 377)+IOBUF +BLK, 0 /= "BLOCK" +LOCH, 0 +LOCL, 0 /= "LOCATION" (DISPLACEMENT) +UBLK, 0 /UPPER LIMIT FOR SEARCHES +ULOCH, 1 +ULOCL, 7577 +LBLK, 0 /LOWER LIMIT FOR SEARCHES +LLOCH, 0 +LLOCL, 200 +SBLK, 0 /"LOCATION" FOR "ODT" ROUTINES +SLOCH, 0 +SLOCL, 0 + +OFFSET, 0 /OFFSET +FILLER, 0 /FILLER CONSTANT FOR "MODIFY" +MASK, -1 /MASK FOR WORD SEARCH +SMASKL, -1 /= -(LENGTH OF SMASK) +RBLK1, 0 /START BLOCK OF FILE +DEVAD, 7607 /DEVICE ENTRY ADDR (INIT TO "SYS") +DEVNO, 1 /DEVICE NUMBER (INIT TO "SYS") +USRAD, 7700 /USR ADDRESS, INITIALIZED TO OUT + /7700=MSGS IN; 0=NONE IN; 200=USR IN + +/CONSTANTS +M400, -400 +M240, -240 +M215, -215 +M200, -200 +M100, -100 +M20, -20 +M10, -10 +M1, -1 +N7, 7 +N15, 15 +N20, 20 +N77, 77 +N177, 177 +N200, 200 +N377, 377 +N7000, 7000 +N7400= M400 + +/ADDRESSES +READLN= JMS I . /GET NEXT INPUT LINE, WITH + READ / SPECIAL TERMINATORS +TYPSTI, TYPSTR +TYPSI, TYPES +TYPECI, TYPEC +TWOCI, TWOCS +CRLFI, CRLF +DIGIT= JMS I . /OUTPUT AN ASCII DIGIT + DODIG +SPACE1= JMS I . /OUTPUT 1 SPACE OR ... + DO1SP +SPACE2= JMS I . /OUTPUT 2 SPACES + DO2SP +CTRLI, CTRL +TWOT, PACOUT +TYPEI, TYPE +DECI, DPRT +OCTI, OPRT +DEC2I, DEC2 +PDATEI, PDATE +RTL6I, RTL6 +RTR6I, RTR6 +SOCTI, OCTSET +BKLOCI, BKLOC +EVALI, EVAL + +PUSH= JMS I . /PUSH AC ON P.D.L. + PUSHX +POP= JMS I . /POP P.D.L. INTO AC + POPX +CALUSR= JMS I . /DO USR FUNCTION + USEUSR +TADIDP= JMS I . /"TAD I DPNT" IN FIELD 1 + TIDPNT +TADICAD= JMS I . /"TAD I CAD" IN FIELD 1 + TICAD +DCAICAD= JMS I . /"DCA I CAD" IN FIELD 1 + DICAD + +GWORDI, GWORD +GARGI, GARGS +ARGI, ARG +GETI, GET +ODGETI, ODGET +GETNI, GETN +SSKIPI, SSKIP +LIMITI, LIMITS +INCI, INC +SORTI, SORTJ +ENDCI, ENDC +RECRLF, MAIN1-1 +RESTAR, MAIN1 + +ERROR= JMS I . + XERROR + +COMST, COMB-1 +TEMPST, TEMPL-1 +MASKBS, SMASKB-1 + + +PAGE + /PROGRAM MAIN LOOP AND DRIVER. COLLECTS CHARACTERS +/INTO COMMAND BUFFER UNTIL END IS REACHED. + + DCA USRAD /CLEAR ON RESTART (NOTHING IN)! + TLS /RAISE TELETYPE FLAG + DCA SHUT /NOTHING IS OPEN + JMS I CRLFI /OUTPUT CR-LF. +MAIN1, JMS I SOCTI /SET INPUT TO OCTAL; EXEC 'COMMENT' + DCA DSWIT /RESET DUMP OUTPUT SWITCH + TAD COMST /INIT COMMAND BUFFER. + DCA COMIR + TAD (PDLB+1 /INIT PUSH-DOWN-LIST + DCA PDLPT +MAIN2, READLN /GET A LINE FROM INPUT. + CCHARL-1 /CR LF ; ! / ALT- + COPSL-CCHARL / MODES ETC... + JMP MAIN1 /BUFFER WAS EMPTIED. + + +/ROUTINE TO HANDLE CARRIAGE RETURN. +CRCR, JMS I ENDCI /PUT A CR IN BUFFER + JMP CRCRC /ONLY A CR IN BUFFER + JMS I GWORDI /GET COMMAND WORD + JMP CRCRN /BUFFER BEGINS WITH A # + ISZ CRSWT /WORD ENDED BY A CR? + JMP CRCR1 /YES, ONLY A FEW ARE OK + JMS I SORTI /NO, LOOK UP COMMAND + CWORDL-1 + WOPSL-CWORDL +ERCB, ERROR /NOT A LEGAL COMMAND +/ +CRCR1, JMS I SORTI /"WRITE","REWIND","EXIT" & "COMMENT" + CWORL2-1 + WOPSLL-CWORL2 +ERCA, ERROR /SOMETHING NOT LEGAL +/ +CRCRN, JMS CLOSE /CLOSE THE OPEN LOCATION IF OPEN +CRCRC, DCA SHUT / MARK LOCATION CLOSED + JMP MAIN1 + +/ROUTINE TO HANDLE SLASH +SLASH, JMS I ENDCI /END BUFFER WITH A CR + JMP SLA1 /OPEN LAST, CR ONLY + JMS WCHEK /DOES LINE START W. A WORD? + JMS I LIMITI /NO, GET ARG-- + SBLK / & SLOCH & SLOCL +SLA1, SPACE1 /OUTPUT SPACE +SLO1, JMS ODTOUT /GET THE WORD & OUTPUT +SLO2, SPACE1 /FOLLOWED BY 2 SPACES + SPACE1 /(FOR ";"--OUTPUT ONLY 1 SPACE AND + JMS I ODGETI / THEN FORCE ACTION & IGNORE VALUE) + STA + JMP CRCRC /GO MARK LOCATION OPEN + +/ROUTINE TO HANDLE ALT MODE & ESCAPE KEYS +ALTMOD, TAD OUTPNT /USE OUTPUT ROUTINE 'SET' BY + 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). +/ +OMODES, TAD SCANX1 /'SORTJ' POINTER TO CHAR LIST + TAD (OTABLE-1-CCHARL + DCA DPNT /POINT INTO ADDR TABLE, + TADIDP / GET OUTPUT ROUTINE ADDR, +ALTM1, DCA OMODPT / & SET POINTER TO ROUTINE. + JMS ECLOSE /CLOSE THIS LOCATION + SPACE1 /OUTPUT SPACE + DCA CHARSW /RESET UNPACK SWITCH + JMS I ODGETI /GET WORD + JMS I OMODPT /OUTPUT IN DESIRED FORMAT + JMP SLO2 /AND GO REOPEN. +OMODPT, 0 + +/ROUTINE TO HANDLE BACKARROW. +BACKAR, JMS ECLOSE /CLOSE THIS LOCATION + TADICAD /GET THE CONTENTS, + JMP UPARR1 /AND USE THEM AS THE ADDR + +/ROUTINE TO HANDLE UPARROW. +UPARR, JMS ECLOSE /CLOSE THIS LOCATION + TADICAD /IS THIS A 'PAGE 0' REF.? + AND N200 + SZA CLA + TAD SLOCL /YES, USE PAGE BITS + AND M200 / MASK PAGE OR 0 TO PAGE # + DCA SLOCL / & SAVE IT + TADICAD /GET THE CONTENTS, + AND N177 /AND USE THE ADDRESS BITS. + TAD SLOCL / ALONG WITH PAGE BITS +UPARR1, DCA SLOCL /THIS IS 12 BIT ADDR + JMP EXCL2 /NOW GO FINISH + /ROUTINE TO HANDLE SEMICOLON, LINE FEED & EXCLAMATION. + +SEMIC, DCA I TYPEI /SET NO-OUTPUT SWITCH-V7B +LFLF, STA /LINE-FEED - CLOSE,INCREMENT,OUTPUT +EXCL, DCA OMODPT /EXCLAMATION - CLOSE,DECREMENT,OUTPUT + JMS ECLOSE /CLOSE THIS LOCATION + IAC + DCA ACC1 /SET UP D.P. INCREMENT + DCA ACC2 +EXCL1, DCA DPSGN /(FOR SAFETY) + ISZ OMODPT /INCREMENT OR DECREMENT? + JMS DPNEG / DECREMENT, NEGATE VALUE + CLL + TAD ACC1 + TAD SLOCL /UPDATE LOCATION TO 15 BITS + DCA SLOCL + RAL + TAD ACC2 + TAD SLOCH + AND N7 / (BUT ONLY 15 BITS) + DCA SLOCH + TAD I TYPEI / ANY OUTPUT?-V7B + SNA CLA + JMP SLO2+1 / NO, WAS ";" DO ONE SPACE +EXCL2, JMS I CRLFI /GIVE CR/LF FOR NEXT LINE + JMS I BKLOCI /OUTPUT ADDRESS + SBLK-1 + JMS I TWOCI /OUTPUT "\ " + 3440 + JMP SLO1 /NOW GO OPEN NEXT LOCATION + +/ROUTINE TO HANDLE PLUS & MINUS. +PLUS, STA /"+", SET SWITCH +MINUS, DCA OMODPT /"-", CLEAR SWITCH + JMS I ENDCI /END BUFFER, TEST + JMP EXCL2 /NO ARG, DO SAME AGAIN + JMS WCHEK /LINE START WITH A COMMAND? + JMS I ARGI /NO, GET AN ARG + JMP EXCL1 /UPDATE LOC & GO OPEN + + +ECLOSE, 0 /SUB. TO CLOSE THE LOCATION IF ARG. + JMS I ENDCI /END BUFFER WITH A CR. + JMP I ECLOSE /ONLY A CR IN BUFFER, DONE + JMS WCHEK /DOES LINE START W. A WORD? + JMS CLOSE /ARG IN BUFFER, USE IT + JMP I ECLOSE /DONE + +CLOSE, 0 /SUBROUTINE TO CLOSE A LOCATION + JMS I ARGI /GET ONE ARG + ISZ SHUT /ANYTHING OPEN? + JMP I CLOSE /NO, RETURN + JMS I ODGETI /YES, SET UP THINGS RIGHT + STA + DCA MODIF /SET MODIFY FLAG + TAD ACC1 /USE "LOC" AS DATA + DCAICAD /STORE IT + JMP I CLOSE + + +PAGE + /ROUTINE TO 'EVALUATE' A SIGNED DOUBLE PRECISION ARITHMETIC +/ EXPRESSION & OUTPUT THE RESULTS IN OCTAL & D.P. SIGNED +/ DECIMAL. +XVAL, JMS I EVALI /GO EVALUATE + SKP /TERMINATED BY A CR +ERCC, ERROR / SORRY!--TOO MANY ")"S + JMS I TWOCI /"= " + 7540 + TAD ACC2 + JMS I OCTI /OUTPUT HIGH ORDER IN OCTAL + TAD ACC1 + JMS I OCTI /OUTPUT LOW ORDER IN OCTAL + TAD ACCX1 /SAVE REMAINDER FOR LATER + DCA COMIR + TAD ACCX2 + DCA COMOUT + TAD (-7 + DCA XERROR /MUST DEVELOP 7 DIGITS + JMS I TWOCI /OUTPUT " (" + 4050 + TAD ACC2 /IS DPAC NEG? + SMA CLA + JMP DLOOP1-1 /NO, OUTPUT " " + JMS DPNEG /YES, MAKE IT POSITIVE + TAD N15 / AND OUTPUT "-". + SPACE1 +DLOOP1, TAD (12 /RESET DIVISOR TO 10(10) + DCA OPER1 + DCA OPER2 + JMS DDIV /GO DIVIDE DPAC BY 10(10) + TAD ACCX1 / GET REMAINDER + PUSH /PUT IT ON PUSH-DOWN-LIST + ISZ XERROR /DONE YET? + JMP DLOOP1 + TAD COMOUT /YES, RESTORE REMAINDER + DCA ACCX2 + TAD COMIR + DCA ACCX1 + TAD (-7 + DCA XERROR /NOW SET UP TO OUTPUT 7 DIGITS +DLOOP2, POP / IN REVERSE ORDER! + DIGIT /MAKE REMAIN A DIGIT + ISZ XERROR /DONE? + JMP DLOOP2 + JMS I TYPECI /YES, OUTPUT ")" + ") + JMP I RECRLF / AND CR/LF + + +/ERROR ROUTINE +XERROR, 0 + CLA /CLEAR POSSIBLE JUNK FROM AC + DCA DSWIT /RESET IN CASE DUMP MODE + CDF 0 + JMS I TYPECI /OUTPUT "?" + "? + TAD (ERLIST-1 /INIT LIST POINTER + DCA DPNT + DCA TEMP /SET CODE TO 0 +XERR1, ISZ TEMP /BUMP ERROR CODE + TADIDP /GET AN ADDRESS + SNA + JMP XERR2 /(FOR DEBUGGING) + CMA /= -(ADDR+1) + TAD XERROR /DOES IT MATCH THE CALL? + SZA CLA + JMP XERR1 /NO +XERR2, TAD TEMP /YES, OUTPUT ERROR CODE + JMS I DEC2I / AS 2 DECIMAL DIGITS + JMS I TYPSI /NOW OUTPUT " AT " + MS17 + TAD (-COMB+1 /CALCULATE POSITION IN + TAD COMOUT / COMMAND BUFFER, + JMS I DEC2I / & OUTPUT AS 2 DIGITS. + TAD ERMODE /LONG/SHORT MESSAGES? [NOTE: THIS -> +XERR3, SZA CLA / "7600" (A CLA) IF 'USROUT' ERROR!] + JMP XERR4 /SHORT, GO DO CR/LF + JMS USROUT /LONG, BE SURE MESSAGES ARE IN + SPACE2 /OUTPUT 2 SPACES + TAD TEMP /CODE = ADDRESS-1 OF ADDRESS + DCA DPNT / OF MESSAGE + TADIDP /GET MESSAGE ADDR + JMS I TYPSTI / OUTPUT MESSAGE +XERR4, JMS I CRLFI /OUTPUT A CR,LF PAIR + JMP I .+1 /*** CIF BAT /BATCH OPER. + MAIN1 /*** JMP I N7000 /'BATABT'! + + +USEUSR, 0 /USR CALLER SUBROUTINE (FROM EITHER FIELD!) + DCA USRSAV /SAVE CONTENTS OF AC + RDF + TAD UCDF0 /SET UP RETURN FIELD (FOR 2ND USR CALL) + DCA USRCDF +UCDF0, CDF 0 /SET TO HERE FOR 1ST CALL + TAD USRAD /IS USR IN OR OUT? + SMA SZA CLA + JMP USRIN /IN, GO TO IT + CIF 10 + JMS I M100 /OUT, DO "USRIN" FUNCTION + 10 + TAD N200 + DCA USRAD / & SO INDICATE +USRIN, CDF CIF 10 + TAD USEUSR /MOVE RETURN ADDRESS TO THE + DCA I N200 / USR ENTRY POINT +USRCDF, CDF /SET UP D.F. FOR RETURN + TAD USRSAV /RESTORE AC CONTENTS + JMP I (201 / & FAKE A CALL TO IT +USRSAV, + +USROUT, 0 /SUBROUTINE TO REMOVE USR BY RECALLING +ERC15, TAD USRAD / ERROR MESSAGES FROM SCRATCH + SPA CLA / BLOCKS ON SYS. + JMP I USROUT /JUST EXIT IF PRESENT... + TAD M100 + DCA USRAD /SET USR TO "OUT" + JMS I (7607 /READ IN THE MESSAGES + 610 / 6 PAGES TO FIELD 1 + 0 / STARTING AT LOC 10000 + 27 / FROM SCRATCH BLKS + SKP CLA /!!! ERROR !!! + JMP I USROUT /OK, JUST EXIT + TAD M200 + DCA XERR3 /NO MORE MESSAGES ON ERROR! + TAD ERC16 + DCA ERC15 /AND NO MORE "SHOW ERROR"! +ERC16, ERROR /TELL THE HORRIBLE STORY! + + +PAGE + /ROUTINE TO EXECUTE THE BLOCK 'SCAN' COMMAND +XSCAN, JMS I GARGI /GET ARGS CONVERTED + TAD (SCANER / & SET UP FOR SCANNING + JMP XDUM0 + +/ROUTINE TO EXECUTE THE BLOCK 'DUMP' COMMAND +XDUMP, TAD MODSW /MAPPED MODE? + SMA SZA CLA +ERC14, ERROR /YES, DUMP IS MEANINGLESS! + JMS XDLCOM /DO COMMON STUFF + TAD (LLIST / & SET UP FOR DUMPING +XDUM0, DCA XGFORM /SET OUTPUT ROUTINE--DUMP/SCAN +XDUM1, ISZ DPNT /SKIP FIRST WORD + ISZ DPNT /SKIP A WORD + TAD I DPNT /GET NEXT START BLOCK. + JMS BLKTST + TAD I DPNT /GET NEXT -(# BLOCKS) + DCA TEMP1 +XDUM2, JMS I CTRLI /TEST HERE FOR 'SCAN' TERMINATE + DCA LOCL /SET LOC TO 0 + DCA LOCH + TAD M400 /SET TO -400(8) [1 BLOCK] + JMS I XGFORM /DUMP OR SCAN A BLOCK + ISZ BLK /INCREMENT BLOCK NUMBER + ISZ TEMP1 /DONE? + JMP XDUM2 /NO, DO NEXT BLOCK + ISZ TEMP /YES, ARE ALL ARGS DONE? + JMP XDUM1 /NO, DO NEXT + JMP XLIS2 /YES, DONE--RESET SWITCH + +/ROUTINE TO EXECUTE THE LOCATION 'LIST' COMMAND +XLIST0, JMS XDLCOM /DO COMMON STUFF +XLIS1, TAD I DPNT /GET BLOCK # + JMS BLKTST /TEST & SET BLK + TAD I DPNT /GET & SET LOCATION + DCA LOCH + TAD I DPNT + DCA LOCL + TAD I DPNT /GET -(# WORDS) + JMS LLIST /NOW GO DO IT + ISZ TEMP /ARE ALL ARGS USED? + JMP XLIS1 /NO, CONTINUE +XLIS2, DCA DSWIT /RESET DUMP SWITCH + JMP I RECRLF / DO CR/LF & CONTINUE + +/COMMON SUBROUTINE FOR 'XDUMP'&'XLIST0' +XDLCOM, 0 + TAD OUTPNT /INITIALIZE DEFAULTS + DCA LISTPT + TAD OUTSW + DCA LOUTSW + JMS XGFORM /GET FORMAT, IF ANY + NOP /RETURN FOR NO FORMAT + JMS I GARGI /GET ARGS + ISZ DSWIT /SET DUMP SWITCH + JMP I XDLCOM + +/SUBROUTINE TO OUTPUT -[C(AC)] WORDS FROM THE DEVICE +/BEGINNING AT BLK.LOC IN THE SPECIFIED FORMAT +LLIST, 0 + DCA CNTRA /SET UP -# WORDS TO LIST + DCA CHARSW /RESET UNPACK SWITCH +LLIS1, JMS I CRLFI + TAD LOCL + AND N7 /SET UP # ON THIS LINE + DCA CNTR + TAD LOUTSW /IF CHARACTER OUTPUT, + SNA CLA + TAD M10 / DOUBLE # WORDS/LINE + TAD CNTR + TAD M10 + DCA CNTR + JMS I BKLOCI /OUTPUT LOCATION + BLK-1 + JMS I TYPSI /OUTPUT ": " + MS13 +LLIS2, JMS I GETI /GET A WORD + JMP LLIS3 /FILE MODE, NO SUCH ADDR.. + JMS I LISTPT /OUTPUT IT + TAD LOUTSW /TEST MODE SWITCH + SPA + JMP LLIS5 /"SYMBOLIC", CR/LF NOW + SZA CLA /CHARACTERS, NO SPACES + SPACE2 /NUMBERS, TWO SPACES +LLIS3, JMS I INCI /INCREMENT LOC + ISZ CNTRA /ALL WORDS DONE? + JMP LLIS4 /NO + JMS I CRLFI + JMP I LLIST /YES, RETURN +/ +LLIS4, ISZ CNTR /ALL DONE WITH THIS LINE? + JMP LLIS2 /NOT YET + JMP LLIS1 /YES, OUTPUT CR/LF & CONTINUE +/ +LLIS5, STA + DCA CNTR /FORCE A CR/LF + JMP LLIS3 +LISTPT, 0 +LOUTSW, 0 + + +/SUBROUTINE TO GET A FORMAT FOR 'XFORM' & 'XDLCOM' +XGFORM, 0 + JMS I GWORDI /GET A WORD + JMP I XGFORM /NOT FOLLOWED BY A WORD + JMS I SORTI /LOOK UP WORD + FORML-1 + FOPSL-FORML +ERCD, ERROR /WORD NOT RECOGNIZED +/ +XFSYM, STL RAR /"SYMBOLIC"; SWITCH NEG +XFNUM, IAC /NUMERIC; SWITCH POS +XFCHR, DCA LOUTSW /CHARACTER; SWITCH 0 + TAD SCANX1 /'SORTJ' POINTER TO CHAR + TAD (-FORML /CALCULATE FORMAT # + CLL RAR /(DIVIDE BY 2) + DCA TEMP1 / & SAVE IT. + TAD TEMP1 + TAD (FTABLE-1 + DCA DPNT + TADIDP + DCA LISTPT /SET UP OUTPUT POINTER + ISZ XGFORM /BUMP RETURN ADDRESS + JMP I XGFORM + +/ROUTINE TO 'SET' THE 'FORMAT' OPTION +XFORM, JMS XGFORM /GET FORMAT WORD +ERCE, ERROR /NUMBER?! SORRY ABOUT THAT! + TAD LOUTSW /OK, SET UP DEFAULTS: + DCA OUTSW / SWITCH, + TAD LISTPT + DCA OUTPNT / ROUTINE POINTER, + TAD TEMP1 + DCA FCNT / & FORMAT # + JMP XSETN +OUTSW, 0 /MODE:0=NOTHING,+=SPACES,-=CR/LF + + +PAGE + /ROUTINE TO EXECUTE THE 'OPEN' COMMAND. +XOPEN, STA /"." LEGAL IN FILE NAME + JMS GNAME /GET FILE NAME FOR OUTPUT + CIF 10 + JMP XOPEN1 /NOW GO TO FIELD 1 TO HANDLE + + +/ROUTINE TO EXECUTE THE 'CLOSE' COMMAND. +XCLOSE, CDF CIF 10 + JMP XCLOS1 /ALL CODE IS IN FIELD 1 + + +/ROUTINE TO EXECUTE THE 'FILE' COMMAND. +XFIERR, TAD TEMP1 /MADE ALL POSSIBLE ATTEMPTS + SMA CLA / AT EXTENSION RETRIES? + JMP XFIOUT / YES, ALL TRIES DONE! + ISZ DPSGN /THIS WILL SKIP ON 1ST FAIL + ISZ TEMP1 /THIS WILL SKIP ON 2ND FAIL + TAD (1404 / 2ND TRY--USE "LD" EXTEN + DCA NAM4 / 3RD TRY--USE NULL EXTEN + JMP XFICHN+2 / 3RD TRY IS FINAL FAILURE +/ +XFIOUT, JMS PNAME /OUTPUT FILE NAME & + JMS I TYPSI /"LOOKUP FAILED" + MS15 +/ +XFILEN, JMS I CRLFI /OUTPUT CR/LF + ISZ CRSWT /WAS LAST ENDED BY A CR? + JMP I RESTAR /YES, DONE +XFILE, STA /"." LEGAL IN FILE NAME + JMS GNAME /GET NEXT FILE NAME +XFICHN, STA + DCA DPSGN /SET TRY AGAIN SWITCH + TAD (NAM1 /INIT POINTER TO NAME + DCA FSTBLK + TAD DEVNO /GET DEVICE # + CALUSR + 2 /LOOKUP +FSTBLK, 0 /NAME PNTR, BECOMES ST BLK +FBKLEN, 0 / BECOMES -(FILE LENGTH) + JMP XFIERR /LOOKUP FAILED + TAD FSTBLK + DCA RBLK1 /SET UP PAGE 0 ST BLK + CDF 10 + DCA I (CCBB / & RESET CCBB + TAD I (1404 /GET # ADD'L INFO WORDS + DCA GDEV2 / (NEGATIVE) & SAVE IT + TAD GDEV2 + TAD I (17 /POINT TO FIRST OF THEM + DCA GDEV3 / (THE DATE, IF PRESENT) + TAD I N7 /GET THE NUMBER OF THE + AND N7 / DIRECTORY SEGMENT IN + DCA CNTR / CORE & SAVE IT. + TAD GDEV2 /WAS # OF ADD'L WRDS = 0? + SZA CLA + TAD I GDEV3 / NO, GET THE DATE WORD + CDF 0 + DCA GDEV1 /STORE DATE OR 0 (NO DATE) + JMS PNAME /OUTPUT FILE NAME + TAD FSTBLK + JMS I OCTI /OUTPUT ST. BLK. IN OCTAL + JMS I TYPECI + "- + TAD FBKLEN /CALCULATE LAST BLK # + CMA + TAD FSTBLK + JMS I OCTI / & OUTPUT IN OCTAL + SPACE2 /OUTPUT 2 SPACES + TAD FBKLEN + CIA + JMS I OCTI /OUTPUT LENGTH IN OCTAL + JMS I TWOCI /" (" + 4050 + TAD FBKLEN + CIA + JMS I DECI / & AGAIN IN DECIMAL + JMS I TYPSI /") " + MS33 + TAD CNTR /GET SEGMENT # + JMS I RTL6I / & PUT IN BITS 3-5 + JMS I TWOCI / TO OUTPUT IT & "." + 6056 + TAD GDEV3 /GET ADDR OF 1ST ADD'L WRD + TAD (-1400-4 / FOR OFFSET OF NAME START + JMS OCT3 /OUTPUT LOCATION IN SEG + SPACE2 / & TWO SPACES + TAD GDEV1 /GET DATE WORD + SZA /IS IT = 0? + JMS I PDATEI /NO, OUTPUT DATE + JMP XFILEN /NOW OUTPUT CR/LF & CONTINUE + + +/ROUTINE TO 'SET' THE 'DEVICE' OPTION +XDEV, JMS GDEVICE /GET & FETCH DEVICE HANDLER + DEVHAN+1 / (2 PAGE HANDLER IS OK) + DCA DEVAD /SET UP HANDLER ADDRESS + TAD GDEV2 /SAVE DEVICE # + DCA DEVNO + DCA RBLK1 / & NO FILE KNOWN + DCA SHUT / & NOTHING OPENED + DCA MODIF / & NOTHING MODIFIED + TAD NAM1 + CIF 10 + JMP XDEVM /GO FINISH SETUP IN FIELD 1 + + +/ROUTINE TO 'SET' THE 'DDEV' OPTION +XDDEV, JMS GDEVICE /GET & FETCH DEVICE HANDLER + DMPHAN+1 / (2 PAGE HANDLER IS OK) + CIF 10 + JMP XDDEV1 /GO TO FIELD 1 TO FINISH SETUP + +GDEVICE,0 /SUBROUTINE TO GET DEVICE NAME & FETCH HANDLER + JMS GNAME /GET DEV NAME ("." ILLEGAL) + TAD NAM1 /MOVE NAME TO CALL + DCA GDEV1 + TAD NAM2 + DCA GDEV2 + TAD I GDEVICE /GET HANDLER SPACE ADDRESS + ISZ GDEVICE + DCA GDEV3 + CALUSR + 1 /FETCH HANDLER +GDEV1, 0 +GDEV2, 0 +GDEV3, 0 +ERCY, ERROR /NO SUCH HANDLER + TAD GDEV3 /RETURN HANDLER ADDRESS + JMP I GDEVICE + + +PAGE + /ROUTINE TO EXECUTE THE 'SHOW' COMMAND +XSHBLK, JMS I TYPSI /"BLOCK = " + MS32 + TAD RBLK1 /OUTPUT BLOCK IN OCTAL +XSTYPE, JMS I OCTI +XSHCR, JMS I CRLFI /GIVE A CR & LF + DCA DSWIT /BE SURE SWITCH IS RESET + ISZ CRSWT /LAST WORD ENDED BY CR? + JMP I RESTAR /YES, DONE +XSHOW, JMS I GWORDI /GET A WORD + JMP ERCG /NUMBERS NOT RECOGNIZED + JMS I SORTI /LOOK IT UP + SHOWL-1 + SHOWOP-SHOWL +ERCG, ERROR /NOT FOLLOWED BY LEGAL WORD + +XSHVER, JMS I TYPSI /"VERSION = " + MSVER + JMP XSHCR + +XSHMSK, JMS I TYPSI /"MASK = " + MS02 + TAD MASK + JMP XSTYPE + +XSHOFF, JMS I TYPSI /"OFFSET = " + MS09 + TAD OFFSET + CIA + JMP XSTYPE + +XSHFIL, JMS I TYPSI /"FILLER = " + MS37 + TAD FILLER + JMP XSTYPE + +XSHODL, JMS I TYPSI /"ODT LOC = " + MS12 + JMS I BKLOCI /OUTPUT IT + SBLK-1 + JMP XSHBKS + +XSHREL, JMS I TYPSI /"REL. LOC = " + MS20 + JMS I BKLOCI / & OUTPUT IT + BLK-1 + JMP XSHBKS + +XSHABS, JMS I TYPSI /"ABS. LOC = " + MS03 + TAD CAD /OUTPUT LOCATION IN BLOCK + TAD (-IOBUF + DCA CAD + JMS I BKLOCI + CBLK-1 +XSHBKS, TAD MODIF /HAS BLOCK BEEN MODIFIED? + SMA CLA + JMP XSHCR / NO, SAY NOTHING! + JMS I TYPSI / YES, SAY " MOD" + MSMOD + JMP XSHCR + +XSHUPP, JMS I TYPSI /"UPPER = " + MS04 + JMS I BKLOCI /OUTPUT IN BLOCK.LOC FORM + UBLK-1 + JMP XSHCR + +XSHLOW, JMS I TYPSI /"LOWER = " + MS05 + JMS I BKLOCI + LBLK-1 + JMP XSHCR + +XSHFMT, JMS I TYPSI /"FORMAT = " + MS06 + TAD FCNT + TAD (FMTLS-1 /SET UP FOR CORRECT TITLE +XSHFM, DCA DPNT + TADIDP /GET MESSAGE ADDRESS + JMS I TYPSTI /OUTPUT DESCRIPTOR + JMP XSHCR + +XSHMOD, JMS I TYPSI /"MODE = " + MS10 + TAD MODSW /GET CORRECT MESSAGE + TAD (MODELS-1 /(OFFSET INTO TABLE) + JMP XSHFM /GET ADDRESS & OUTPUT + +XSHOUT, JMS I TYPSI /"OUTPUT = " + MS30 + TAD TYPSW /SET UP MESSAGE ADDRESS + TAD (OUTLS-1 /(OFFSET INTO TABLE) + JMP XSHFM + +XSHSMS, JMS I TYPSI /"SMASK = " + MS07 + TAD SMASKL + DCA TEMP /-# TO OUTPUT + TAD MASKBS + DCA DPNT /SET UP TO OUTPUT + TAD M10 /SET LINE LENGTH + DCA TEMP1 + JMP XSHSM2 +XSHSM1, JMS I TWOCI /OUTPUT ", " + 5440 + ISZ TEMP1 /ENOUGH ON THIS LINE? + JMP XSHSM2 /NO, OK + JMS I CRLFI /YES, OUTPUT CR-LF + SPACE2 / & 2 SPACES + STA /MAKE LINE 1 LONGER + JMP XSHSM1-3 /AND RESET LENGTH +/ +XSHSM2, TADIDP /GET NEXT VALUE + JMS I OCTI / & OUTPUT IT + ISZ TEMP /ENOUGH? + JMP XSHSM1 + JMP XSHCR /OK, GET NEXT WORD + +XSHDEV, JMS I TYPSI /"DEVICE = XXXX" + MSDEV + JMS I TWOCI /NOW OUTPUT " (" + 4050 + TAD DEVNO /GET THE DEVICE # + JMS I DEC2I / & OUTPUT AS 2 DIGITS + JMS I TYPECI /FINALLY OUTPUT ")" + ") + JMP XSHCR + +XSHDDEV,JMS I TYPSI /"DDEV = XXXX" + MSDDEV + JMP XSHCR + + +FPRNT, 0 /PRINT FIELD DIGIT FROM BITS 6-8 + JMS I (FPRNTX /FIRST PRINT BANK BITS + RTR /MOVE TO BITS 9-11 + RAR + AND N7 /MASK TO 1 DIGIT + DIGIT / & OUTPUT IN ASCII + JMP I FPRNT + + +PAGE + /CONTINUATION OF 'SHOW' COMMAND + +/SHOW 'CCB' HANDLER +XSHCCB, CDF CIF 10 + JMS GCCB /SET UP CCB FOR FILE + DCA DPSGN / & SET UP SEGMENTS + JMS I TYPSI /"CCB:" + MS11 + JMS CCHDST /DO SETUP, OUTPUT START + JMS I TYPSI /", JSW = " + MS19 + JMS NXTOCT /OUTPUT J.S.W. IN OCTAL + JMS I CRLFI + JMS I TYPSI /" CORE SEGS: " + MS14 +XSHCC1, TAD (-4 + DCA CNTR /-#/LINE +XSHCC2, TADIDP /GET ORIGIN WORD + DCA TEMP1 + TADIDP / & COUNT WORD + DCA TEMP2 +/ TAD TEMP2 /GO OUTPUT START FIELD +/ JMS FPRNT + JMS I (ADFLD /ADJUST BANK AND FIELD FOR 128K + TAD TEMP1 / & START ADDR + JMS I OCTI + JMS I TYPECI / & A "-" + "- +/ TAD TEMP2 /OUTPUT FIELD AGAIN +/ JMS FPRNT + JMS I (ADFLD /ADJUST BANK AND FIELD (128K) + TAD TEMP2 / PAGE COUNT -> PAGES + CLL RAL + AND M200 /MASK OFF FIELD DATA + TAD TEMP1 /ADD ORIGIN ADDR + TAD M1 / & SUBTRACT 1 FOR END + JMS I OCTI /OUTPUT END ADDR IN OCTAL + ISZ DPSGN /DONE? + JMP XSHCC4 /NO + TAD OVLFLG /YES, OVERLAYS? (LINK OUTPUT) + SNA + JMP XSHCR / NO, DONE + DCA DPNT / YES, RESET POINTER + JMP XSHHD1 / & CONTINUE +/ +XSHCC4, JMS I TWOCI /OUTPUT SEPARATOR + 5440 + ISZ CNTR /DONE ON THIS LINE? + JMP XSHCC2 /NO + JMS I CRLFI /YES + SPACE2 /ADD 2 SPACES + STA /AND 1 MORE ITEM PER LINE + JMP XSHCC1 + +/SHOW 'HEADER' HANDLER +XSHHDR, CDF CIF 10 + JMS GHDR /SET UP HEADER FOR MODULE + JMS I TYPSI /"HEADER:" + MS38 + JMS CCHDST /DO SETUP, OUTPUT START + JMS I TYPSI /", NEXT WORD = " + MS39 + TADIDP /GET FIELD DIGIT + DIGIT / & OUTPUT + JMS NXTOCT /FOLLOWED BY ADDRESS + JMS I TYPSI /", LOAD VER = " + MS40 + JMS NXTOCT / & OUTPUT VERSION + TADIDP /GET E.P. FLAG + SNA CLA + JMP XSHHD1 / NO E.P. + JMS I TYPSI /", EP REQ'D" + MS41 +XSHHD1, JMS I CRLFI /TO THE NEXT LINE + JMS I TYPSI /" OVLYS START... + MS42 +XSHHD2, TADIDP /GET NUMBER OF OVERLAYS + SNA / FOR THIS LEVEL + JMP XSHCR / 0 = END, DONE + DCA TEMP1 /SAVE IT + JMS I CRLFI /OUTPUT A CR/LF + SPACE2 / AND 4 SPACES + SPACE2 + TAD TEMP1 + JMS I DEC2I /# OVLYS IN DECIMAL + SPACE2 + TADIDP /GET MEMORY START WORD + DCA TEMP2 + TAD TEMP2 + JMS FPRNT /OUTPUT START FIELD + TAD TEMP2 + AND M400 / & DOUBLE-PAGE + JMS I OCTI + SPACE2 + JMS NXTOCT /OUTPUT RELATIVE BLOCK + SPACE2 + JMS NXTOCT /OUTPUT OVERLAY LENGTH + JMP XSHHD2 /AND DO ANOTHER ROUND! + +/SHOW 'ERRORS' HANDLER +XSHERR, JMS USROUT /BE SURE MESSAGES ARE IN + ISZ DSWIT /SET DUMP SWITCH + JMS I TYPSI /"ERRORS: FUTIL VERSION ..." + MSERR + JMS I CRLFI + CLA IAC + DCA DPNT /SET POINTER & CODE +XSHER1, JMS I CRLFI /DO ANOTHER CR/LF + TAD DPNT /TEST FOR LAST REAL MESSAGE + TAD (-EMSEND /(NOT DEBUG MESSAGE!) + SNA CLA + JMP XSHCR + TAD DPNT /OUTPUT ERROR CODE + JMS I DEC2I / AS 2 DIGITS + JMS I TYPSI /THEN " = " + MS01 + TADIDP /GET ADDR OF MESSAGE AND + JMS I TYPSTI / OUTPUT IT + JMP XSHER1 + + +CCHDST, 0 + JMS I CRLFI + JMS I TYPSI /" SA = " + MS18 + TAD (CCBB + DCA DPNT /SET UP POINTER TO DATA + TADIDP /GET 2ND WORD FROM CCB/HDR + JMS FPRNT /IT HAS START FIELD SO OUTPUT + JMS NXTOCT / FOLLOWED BY START ADDR + JMP I CCHDST + + +PAGE + /ROUTINE TO EXECUTE THE 'SET' COMMAND +XSETN, ISZ CRSWT /WAS LAST INFO ENDED BY CR? + JMP I RESTAR /YES, DONE +XSET, JMS I GWORDI /GET OPTION WORD + JMP XSET1 /NO NUMBERS PLEASE! + ISZ CRSWT /WAS WORD ENDED BY A CR? +ERCK, ERROR /YES, ILLEGAL HERE + JMS I SORTI /LOOK UP WORD + SETLST-1 + SETJMP-SETLST +XSET1, ERROR /WHAT??? + + +/ROUTINE TO 'SET' THE 'DMODE' (DUMP MODE) +XDMODE, JMS I GWORDI /GET A WORD + JMP ERC11 /NO NUMBERS HERE! + JMS I SORTI /LOOK IT UP + XDMLST-1 + XDMOPS-XDMLST +ERC11, ERROR /NO LIKEE!! +/ + CLL STA RAR /4000: 'ALL' (ECHO TO TTY & FILE) +XDMODS, IAC / 1: 'PART' (ONLY DUMP,LIST,ETC) + DCA DMODE / 0: 'NONE' (TTY ONLY) + JMP XSETN + + +/ROUTINE TO 'SET' THE 'OUTPUT' OPTION +XOUTS, JMS I GWORDI /GET OPTION WORD + JMP ERCL / # IN THE BUFFER + JMS I SORTI /LOOK IT UP + XOLST-1 + XOOPS-XOLST +ERCL, ERROR /NOT FOLLOWED BY LEGAL WORD +/ + CLL STA RAL /-1: 'FPP' (SYMBOLIC) +XOUTS1, IAC /+1: 'PDP' (SYMBOLIC) + DCA TYPSW / 0: 'OCTAL' + JMP XSETN + + +/ROUTINE TO 'SET' THE 'MASK' OPTION +XMASK, JMS I ARGI /GET ONE ARG + TAD ACC1 /GET 'LOC' + DCA MASK / & SET MASK + JMP XSETN + + +/ROUTINE TO 'SET' THE 'OFFSET' OPTION +XOFFS, JMS I ARGI /GET ONE ARG + TAD ACC1 /GET # + CIA + DCA OFFSET /SET IT + JMP XSETN + + +/ROUTINE TO 'SET' THE 'ERROR' (MODE) OPTION +XEMODE, JMS I GWORDI /GET WORD + JMP ERCZ /NO NUMBERS ALLOWED!!! + JMS I SORTI /LOOK IT UP + XELST-1 + XEOPS-XELST +ERCZ, ERROR /ILLEGAL SOMETHING +/ +XEMOD1, IAC /'SHORT' + DCA ERMODE /'LONG' + JMP XSETN + + +/ROUTINE TO 'SET' THE 'UPPER' LIMITS OPTION +XUPP, JMS I LIMITI /UPPER, GET ARGS + UBLK + JMP XSETN + +/ROUTINE TO 'SET' THE 'LOWER' LIMITS OPTION +XLOW, JMS I LIMITI /LOWER, GET ARGS + LBLK + JMP XSETN + +/ROUTINE TO 'SET' THE 'MODE' OPTION +XMODE, JMS I GWORDI /GET OPTION WORD + JMP ERCJ /NUMBER IN BUFFER, BAIL OUT + JMS I SORTI /LOOK IT UP + MODLST-1 + MODOPS-MODLST +ERCJ, ERROR /NOT RECOGNIZED +/ + CLL STA RTL /-1: OFFSET +XMODS, IAC /+2: LOAD (MODULE) + IAC /+1: SAVE (FILE) + DCA MODSW / 0: NORMAL + JMP XSETN + +/ROUTINE TO 'SET' THE 'FILLER' OPTION +XFILL, JMS I ARGI /GET ONE ARG + TAD ACC1 + DCA FILLER / & SET AS FILLER + JMP XSETN + +/ROUTINE TO 'SET' THE 'TEMP' STORAGE +XTEMP, JMS I ARGI /GET THE 24 BIT ARG (EXPRESSION!) + TAD ACC1 /NOW SAVE THE 24 BITS FOR LATER + DCA TEMPV1 + TAD ACC2 /GET IT BACK WITH "EVAL T" + DCA TEMPV2 / (OR IN AN EXPRESSION) + JMP XSETN + + +/ROUTINE TO EXECUTE THE 'IF' COMMAND +XIF, JMS I EVALI /EVALUATE THE EXPRESSION + SKP / TERMIN = CR, OK + JMP ERCC / TOO MANY PARENS + TAD ACC1 /TEST THE 24-BIT VALUE FOR ZERO + SNA + TAD ACC2 + SNA CLA + JMP I RESTAR /OK, JUST CONTINUE +XIFSKP, TAD COMST /NOT ZERO, BEGIN SKIPPING FOR + DCA COMIR / LINE STARTING WITH "END" + READLN /GET A LINE FROM THE INPUT + TYPEM-1 / WITH THESE TERMINATORS + IFSKPO-TYPEM + JMP XIFSKP /BUFFER EMPTIED +/ +XIFCR, JMS I ENDCI /CR FOUND, TIDY THINGS UP + JMP XIFSKP / CR ONLY + JMS I GWORDI /GET 1ST WORD ON LINE + JMP XIFSKP / NO WORD + TAD (-0516 /IS THE WORD "EN..."? + SZA CLA + JMP XIFSKP / NO, KEEP LOOKING! + 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. +ABKLOC, 0 + TAD ABSSW /IS IT 0? + SZA CLA + JMP ABK2 /NO, OUTPUT AS ABSOLUTE + JMS I BKLOCI /OUTPUT LOCATION + BLK-1 +ABK1, JMS I TWOCI /OUTPUT ": " + 7240 + JMS I TWOT + JMP I ABKLOC +/ +ABK2, TAD LOCL /MAKE ABSOLUTE + AND N377 + DCA CAD + JMS I BKLOCI /NOW OUTPUT IT + CBLK-1 + JMP ABK1 + +TWOCS, 0 /OUTPUT 2-CHARACTER ARG + TAD I TWOCS /GET ARG + ISZ TWOCS /SKIP IT + JMS I TWOT /OUTPUT IT + JMP I TWOCS + +NXTOCT, 0 + TADIDP /GET NEXT WORD FROM BLOCK + JMS I OCTI / & OUTPUT IN OCTAL + JMP I NXTOCT + + +PAGE + /ROUTINE TO EXECUTE THE 'WORD' SEARCH COMMAND +XWORD, JMS SSET /INITIALIZE SEARCH + TAD CNOP /SET UP FOR NORMAL, + DCA CNOP+1 + TAD M10 / EQUAL SEARCH +XWOR2, TAD (SNA CLA /"UNEQUAL" WORD SEARCH + DCA XWORC +XWOR1, JMS I GWORDI /GET POSSIBLE WORD + JMP XWOR3 /NUMBERS IN BUFFER + ISZ CRSWT /WAS IT ENDED BY A CR? +ERCI, ERROR /YES, VELLY SOLLY! + JMS I SORTI /LOOK UP COMMAND: UN, ME, + XWORCL-1 / AB, FR, TO + XWOROP-XWORCL +ERCH, ERROR /COMMAND NOT RECOGNIZED +/ +XWOR7, TAD XWOR4+1 /"MEMREF", ONLY MEMORY- + DCA CNOP+1 / REFERENCE OP-CODES CAN + JMP XWOR1 / EVER BE OUTPUT. +/ +XWOR3, JMS I ARGI /GET AN ARG + TAD ACC1 /GET THE VALUE + AND MASK + CIA + DCA CNT /LOOK FOR THIS WORD + JMS LSETUP /SET UP COUNT OF WORDS TO DO +XWOR4, JMS I GETI /GET A WORD + JMP XWOR5 /FILE MODE, NO SUCH ADDRESS + AND MASK + TAD CNT +XWORC, HLT /WILL BE "SZA CLA" OR "SNA CLA" + JMP XWOR5 /DID NOT MATCH + JMS OPRTST /TEST FOR OP-CODES 6 & 7 +CNOP, NOP / 7--OPR + NOP / 6--IOT;"NOP" OR "JMP XWOR5" + JMS ABKLOC /DID MATCH, OUTPUT LOC + JMS I GETI /GET THAT WORD + JMP ERCP / OH I HOPE NOT!!! + JMS I OCTI /AND OUTPUT IT IN OCTAL + JMS I CRLFI +XWOR5, JMS LCHEK /DONE YET? + JMP XWOR4 /NO + +/SUBROUTINE TO INITIALIZE THE SEARCH COMMANDS +SSET, 0 + DCA ABSSW /RESET ABSOLUTE SWITCH + TAD LBLK /SET UP START BLK & LOC + DCA BLK + TAD LLOCH + DCA LOCH + TAD LLOCL + DCA LOCL + TAD UBLK /SET UP END BLK & LOC + DCA EBLK + TAD ULOCH + DCA ELOCH + TAD ULOCL + DCA ELOCL + JMP I SSET + +/COMMON OPTIONS FOR 'WORD' AND 'STRING' SEARCHES + +XWSABS, STA + DCA ABSSW /'ABSOLUTE'--SET SWITCH + JMP XWSRET +/ +XWSFRM, JMS I LIMITI /'FROM'--GET LOWER LIMITS + BLK + JMP XWSRET +/ +XWSTO, TAD UBLK /'TO'--SET UP IF NEEDED + DCA EBLK + JMS I LIMITI / & GET UPPER LIMITS + EBLK +XWSRET, STA CLL RAL /= -2, CALCULATE RETURN ADDRESS AS + TAD I GWORDI / LAST CALL TO "GWORD" TO ALLOW + DCA LCHEK / THESE TO BE COMMON TO BOTH + JMP I LCHEK / 'WORD' AND 'STRING' SEARCHES. +EBLK, 0 +ELOCH, 0 +ELOCL, 0 + + +LSETUP, 0 /SET SEARCH WORD-COUNTERS **** SEE NOTE **** + DCA ACC1 /INITIALIZE THESE TO 0 + DCA ACC2 + TAD MODSW /IN A MAPPED MODE? + SMA SZA CLA + JMP LSETL / YES, IGNORE BLOCK PARTS + TAD BLK / NO, SET UP FOR 24 BIT + DCA ACC1 + TAD EBLK / BLK-EBLK + DCA OPER1 + DCA OPER2 + JMS DSUB /DO THE SUBTRACTION + TAD (400 /NOW SET UP MULTIPLY BY 400 + DCA OPER1 + DCA OPER2 + JMS DMUL /GIVES: (BLK-EBLK)*400 +LSETL, CLL IAC + TAD ELOCL + DCA OPER1 /NOW SET UP ELOC+1 + RAL + TAD ELOCH + DCA OPER2 + JMS DSUB /AND SUBTRACT IT + TAD LOCL /NOW ADD LOC TO GIVE: + DCA OPER1 / (BLK-EBLK)*400+(LOC-ELOC-1) + TAD LOCH / WHICH IS 24-BIT COUNT OF + DCA OPER2 / WORDS TO SEARCH. + JMS DADD + TAD ACC2 /IF NOT NEGATIVE, ALREADY TOO + SMA CLA + JMP I RECRLF / FAR, SO JUST QUIT NOW! + JMP I LSETUP + +/**** NOTE: COUNT LEFT SET UP IN ACC1 & ACC2 **** + +LCHEK, 0 /CHECK IF SEARCH RANGE EXHAUSTED + JMS I INCI /INCREMENT LOC + ISZ ACC1 /COUNT WORDS TO DO + JMP I LCHEK + ISZ ACC2 / (24-BIT) + JMP I LCHEK + JMP I RECRLF /DO CR/LF & STOP! + + +TIDPNT, 0 /"TAD I DPNT" IN FIELD 1 + CDF 10 + TAD I DPNT + CDF 0 + JMP I TIDPNT + + +ASCII, 0 /ASCII OUTPUT FORMAT FROM DEVICE + AND N177 /MAKE CHARS INTO "STANDARD" + TAD N200 / FORM: 7 BITS + PARITY ON + JMS I TYPEI / TO CAUSE CORRECT PRINTING + JMP I ASCII + + +PAGE + /ROUTINE TO 'REWIND' THE DEVICE +XREWIN, CDF 10 + TAD USRAD /RESET DIRECTORY SEGMENT KEY + SMA CLA + DCA I N7 / IN USR IF IT IS IN MEMORY. + CDF 0 + JMS I DEVAD /CALL HANDLER + 0110 /READ, 1 PAGE, FIELD 1 + PDLB /DUMMY BUFFER (ZAP P.D.L.) + 1 /BLK 1 + JMP RERROR /READ ERROR! + JMP I RESTAR + +/READ ERROR--TEST TYPE & OUTPUT MESSAGE + +RERROR, SPA CLA /BIT 0 = 1 IF FATAL +ERC00, ERROR /FATAL +ERC01, ERROR /NON-FATAL + + +/ROUTINE TO EXECUTE THE 'STRING' SEARCH COMMAND +XSTRIN, JMS SSET /INITIALIZE + TAD (STJMP-STCDF /RESET MASKING SWITCH +XSTR0, TAD XREWIN / OR SET MASKING SWITCH + DCA SMSKSW + JMS I GWORDI /GET POSSIBLE WORD + JMP XSTR1 /NUMBERS ONLY + ISZ CRSWT /FOLLOWED BY A CR? + JMP ERCI / YES, KICK OUT***** + JMS I SORTI /LOOK UP OPTION: MA, + STRLST-1 / AB, FR, TO + STROPS-STRLST + JMP ERCH /NO LIKEE! +/ +XSTR1, JMS I GARGI /GET ARGS - THEN REPACK INTO BUFFER + TAD TEMP / MASKING THEM IF SPECIFIED + DCA CNTR /SET UP LENGTH + TAD TEMPST + DCA SCANX2 /STORING DONE IN NEG. FORM + JMP XSTR2+2 /GO SET UP MASK +/ +XSTR2, ISZ TEMP3 /MASK END? + JMP XSTR3 + TAD MASKBS /YES, RESET MASK + DCA SPNT + TAD SMASKL /SET UP LENGTH + DCA TEMP3 +XSTR3, ISZ DPNT /SKIP 2 EXTRA WORDS + ISZ DPNT + TAD I DPNT /GET A WORD + JMS STRMSK /TEST & MASK + CIA /NEGATE + DCA I SCANX2 /STORE + ISZ DPNT /BUMP POINTER + ISZ CNTR /DONE? + JMP XSTR2 + JMS LSETUP /YES, SET UP COUNT OF WORDS +XSTR4, TAD TEMPST /SET UP FOR SEARCH: + DCA DPNT / STRING, + TAD TEMP + DCA CNTR / & STRING LENGTH. + TAD LOCL + DCA XLOCL /SAVE CURRENT LOCATION + TAD LOCH + DCA XLOCH + TAD BLK + DCA XBLK + TAD ACC1 / & COUNT FOR RESET + DCA OPER1 + TAD ACC2 + DCA OPER2 + JMP XSTR6 /NOW SET UP MASK +/ +XSTR5, JMS LCHEK /DONE? + ISZ TEMP3 /NO, AT MASK END? + JMP XSTR7 +XSTR6, TAD MASKBS / YES, RESET MASK + DCA SPNT + TAD SMASKL + DCA TEMP3 +XSTR7, JMS I GETI /GET NEXT WORD + JMP XSTR10 /MAPPED MODE, NO SUCH ADDRESS + JMS STRMSK /TEST & MASK + TAD I DPNT /COMPARE? + SZA CLA + JMP XSTR10 /NO, GO RESET & CONTINUE + ISZ CNTR /MATCHED ENOUGH? + JMP XSTR5 /NOT YET + JMS XRSET /YES, RESET LOCATION & COUNT + TAD TEMP /AND LENGTH + DCA CNTR +XSTR8, TAD M10 + DCA ACCX1 / -(#/LINE) + JMS ABKLOC /OUTPUT THIS LOCATION +XSTR9, JMS I GETI /GET A WORD + JMP ERCP /BAD,BAD,BAD!!! + JMS I OCTI /AND OUTPUT IN OCTAL + JMS I INCI /INCREMENT LOC + ISZ CNTR /DONE? + JMP XSTR11 /NO, CONTINUE + JMS I CRLFI /YES, OUTPUT CR/LF +XSTR10, JMS XRSET /RESET LOCATION & COUNT + JMS LCHEK /DONE? + JMP XSTR4 /NO, LOC INC'D, TRY NEXT +/ +XSTR11, SPACE2 /OUTPUT " " + ISZ ACCX1 /DONE ON THIS LINE? + JMP XSTR9 /NO, NOT YET + JMS I CRLFI /YES + JMP XSTR8 + +XRSET, 0 /RESET BLK & LOC FROM XBLK & XLOC + TAD XLOCL /LOC + DCA LOCL + TAD XLOCH + DCA LOCH + TAD XBLK /BLK + DCA BLK + TAD OPER1 /WORDS LEFT TO SEARCH + DCA ACC1 + TAD OPER2 + DCA ACC2 + JMP I XRSET + +STRMSK, 0 /STRING MASKING *** NEXT WORD MODIFIED *** +SMSKSW, CDF 10 /"CDF 10" OR "JMP I STRMSK" + AND I SPNT /OK, MASK IN FIELD 1 + CDF 0 + JMP I STRMSK +STJMP= JMP I STRMSK +STCDF= CDF 10 + +XBLK, 0 +XLOCH, 0 +XLOCL, 0 + + +PAGE + /ROUTINE TO EXECUTE THE BLOCK 'WRITE' COMMAND +XWRARG, JMS I ARGI /GET ONE ARG + TAD ACC1 /USE IT AS THE BLOCK + SKP +XWRITE, TAD WBLK /SET BLOCK + DCA XWBLK + JMS I DEVAD /CALL HANDLER + 4210 /WRITE, 2 PAGES, FIELD 1 + IOBUF +XWBLK, 0 /[** COUNTER FOR MODIFY **] + JMP WERROR /WRITE ERROR + DCA MODIF /CLEAR SOMETHING-CHANGED FLAG + JMP I RESTAR + +/WRITE ERROR--TEST TYPE & OUTPUT MESSAGE + +WERROR, SPA CLA /BIT 0 = 1 IF FATAL +ERC02, ERROR /FATAL +ERC03, ERROR /NON-FATAL + + +/ROUTINE TO EXECUTE THE 'MODIFY' COMMAND +XMODIF, JMS I GWORDI /GET FORMAT WORD IF ONE + JMP XMODEF /NONE, GET DEFAULT + DCA MODTMP /SAVE FOR LATER + ISZ CRSWT /TERMINATED BY A CR? + JMP ERCO / YES, SAVE USER FROM HIMSELF! + TAD MODTMP /TEST FORMAT FOR RECOGNITION + JMS I SORTI + MODIFL-1 + MODADS-MODIFL +ERCO, ERROR / I THEENK YOU USE BAD WORD! +/ +/NO FORMAT DESCRIPTOR GIVEN, USE DEFAULT +XMODEF, TAD FCNT /USE CURRENT FORMAT, + TAD (MODDLS-1 / WITH A LITTLE DIFFERENCE + DCA DPNT + TADIDP /GET THE ONE TO USE + DCA MODTMP / AND SAVE IT +/ +XMOD0, JMS I GARGI /OK, NOW GET ARGS + TAD TEMP /MOVE COUNT TO A SAFE PLACE + DCA XWBLK +XMOD1, TAD I DPNT /GET BLOCK # + JMS BLKTST /TEST & SET BLK + TAD I DPNT /GET LOC + DCA LOCH + TAD I DPNT + DCA LOCL + TAD I DPNT /GET -(# LOCS) + DCA CNTR +XMOD2, TAD COMST /INIT COMM. BUFF. FOR MODS + DCA COMIR + DCA CHARSW /RESET HALF SWITCH + JMS I SOCTI /INITIALIZE INPUT TO OCTAL + JMS I BKLOCI /OUTPUT START LOC + BLK-1 + JMS I TWOCI /AND ": " + 7240 + READLN /GET A LINE (TEST: RUBOUT, ^U & ^R) + TYPEM-1 /IGNORE LF'S + MCHARO-TYPEM + JMP XMOD2 /BUFFER EMPTIED! + + +/CR TYPED, END +XMODCR, JMS I ENDCI /END BUFFER WITH A CR. + JMP XMOD2 /ONLY A CR IN BUFFER-RETRY! + TAD MODTMP /NOW LOOK UP FORMAT + JMS I SORTI + MODIFL-1 + MODIFO-MODIFL +ERCP, ERROR /ILLEGAL (EXTRA BAD IF HERE) + +XMODDN, ISZ XWBLK /RETURN HERE, ALL ARGS DONE? + JMP XMOD1 /NO + JMP I RESTAR /YES +MODTMP, 0 + +XGET, 0 /SUB. TO SET CURRENT LOC & FLAG + JMS I GETI /SET LOCATION +ERC07, ERROR /MAPPED MODE, NO SUCH ADDRESS + STA + DCA MODIF /SET FLAG + JMP I XGET + +/NUMERIC FORMATS HERE +XNUM0, JMS I SORTI /TEST TERMINATOR + GETLST-1-1 /SPACE, COMMA, CR + NUMOPS-GETLST+1 + JMP ERCQ /ILLEGAL TERMIN +/ +XNUM1, JMS I GETNI /COMMA, SKIP IT + JMS I SSKIPI / SPACE, IGNORE IT +XNUM2, JMS EXPRIN /GET NEXT ARG--EXPRESSION + JMS XGET /SET UP LOCATION + TAD ACC1 + DCAICAD / & STORE VALUE + JMS I INCI /INCREMENT LOCATION + ISZ CNTR /ALL MODS DONE? + JMP XNUM0 /NO, TEST TERMIN + JMP XMODDN /YES, TEST NEXT SET +/ +XNUM3, TAD CNTR /DONE? + SNA CLA + JMP XMODDN /YES + JMS XGET /NO, SET UP LOC + TAD FILLER + DCAICAD /AND FILL WITH 'FILLER' + JMS I INCI /INCREMENT LOC + ISZ CNTR /DONE? + JMP XNUM3 /NO + JMP XMODDN /YES + +/ASCII FORMAT HERE + JMS CGET /GET A CHAR & CHECK FOR CR +XASC1, JMS XGET /SET UP LOC & SET FLAG + TAD CHAR + DCAICAD /STORE THIS CHAR + JMS I INCI /INCREMENT LOC + ISZ CNTR /MODS DONE? + JMP XASC1-1 /NO + JMP XMODDN /YES + +CGET, 0 /GET NEXT CHAR. IF CR, MODS DONE + JMS CGTEST /GET & TEST NEXT + JMP XNUM3 /CR, FILL REST WITH 'FILLER' + JMP I CGET + +CGTEST, 0 /SUB. TO GET A CHAR & CHECK FOR CR + JMS I GETNI /GET NEXT CHARACTER + TAD CHAR /IS IT A CR? + TAD M215 + SZA CLA + ISZ CGTEST /RETURN TO CALL+2 IF NOT + JMP I CGTEST + + +DO1SP, 0 /OUTPUT " " + AC + JMS I TYPECI + " + JMP I DO1SP /ANOTHER TUFFIE + +DO2SP, 0 /OUTPUT " " + AC (PACKED ASCII) + JMS I TWOCI + 4040 + JMP I DO2SP /FAST & SWEET! + + +PAGE + /ROUTINE TO EXECUTE THE 'SMASK' (STRING MASK) COMMAND +XSMASK, JMS I GARGI /GET ARGS + TAD TEMP + DCA SMASKL /SAVE -(MASK LENGTH) + TAD MASKBS /SET UP TO STORE WORDS + DCA SPNT +XSMAS1, ISZ DPNT /SKIP 2 WORDS + ISZ DPNT + TAD I DPNT /GET & STORE ONE + CDF 10 + DCA I SPNT + CDF 0 + ISZ DPNT /SKIP 1 MORE + ISZ TEMP /DONE ? + JMP XSMAS1 /NO + JMP I RESTAR + + +/XS240 PACKED ASCII FORMAT HERE +XXS20, TAD M240 /SET OFFSET +/PACKED ASCII FORMAT HERE +XPAC0, DCA PNAME /CLEAR OFFSET +XPAC1, TAD M240 /IS CHAR < 240? + TAD CHAR + SMA CLA + JMP XPAC2 /NO, JUST PACK CHAR + CMA + JMS PACK /YES, PACK A FLAG (77) FIRST +XPAC2, TAD CHAR /NOW GO PACK CHAR + TAD PNAME /(WITH DESIRED OFFSET) + JMS PACK + JMS CGET /NOW GET & TEST NEXT + JMP XPAC1 / OK, CONTINUE + +/OS/8 ASCII HERE +XOPS1, TAD LOCL /TEST START & COUNT FOR EVEN + RAR /(LOW BIT TO LINK & + CLA / CLEAR AC) + TAD CNTR + RAR /(LOW TO LINK, LINK TO AC0) + SZL SPA CLA /BOTH L=0 & AC0=0 FOR OK +ERC04, ERROR /START OR COUNT NOT EVEN +XOPS2, TAD CHARSW /GET SWITCH + ISZ CHARSW / & BUMP IT + CLL RAR /ROTATE AC 11 INTO LINK + SZL SNA CLA /CHARACTER 3? + JMP XOPS5 /NO, CHAR 1 OR CHAR 2 + STA + TAD CAD /YES, BACK UP POINTER + DCA CAD + STA CLL RAL / & SET LOOP COUNT TO -2 + DCA CHARSW +XOPS3, TAD CHAR /GET REST OF CHAR + CLL RTL /4 BITS LEFT + RTL + DCA CHAR /SAVE IT + TAD CHAR /NOW MERGE 4 BITS WITH + AND N7400 / A PREVIOUS CHAR + TADICAD + DCAICAD /4 BITS OF 3RD + 1ST OR 2ND + ISZ CAD /BUMP POINTER + ISZ CHARSW /DONE? + JMP XOPS3 + TAD CNTR /YES, DONE ALL MODS? + SNA CLA + JMP XMODDN /YES, TEST FOR DONE +XOPS4, JMS CGET /GET & TEST NEXT CHAR + JMP XOPS2 /OK, DO NEXT +/ +XOPS5, JMS XGET /SET UP CURRENT LOC + TAD CHAR + DCAICAD /AND STORE CHARACTER + JMS I INCI /INCREMENT LOC + ISZ CNTR /BUMP COUNTER FOR LATER + JMP XOPS4 / SO IGNORE SKIP NOW + JMP XOPS4 + +PACK, 0 /SUB. TO PACK CHARACTERS + AND N77 /USE ONLY 6 BITS + ISZ CHARSW /CHECK HALF + JMP PACK1 + TADICAD /RIGHT HALF, ADD TO LEFT + DCAICAD + TAD CNTR /ALL MODS DONE? + SZA CLA + JMP I PACK /NO + JMP XMODDN /YES +/ +PACK1, JMS I RTL6I /LEFT HALF, ROTATE INTO IT + DCA CHARSW /SAVE IT + JMS XGET /SET UP CURRENT LOC + TAD CHARSW + DCAICAD /STORE WORD + JMS I INCI /INCREMENT LOC + ISZ CNTR /BUMP COUNTER FOR LATER + NOP / SO DON'T SKIP NOW + STA + DCA CHARSW /RESET SWITCH + JMP I PACK + + +PNAME, 0 /PRINT A FILE NAME, PADDED W. SPACES + TAD NAM1 + JMS I TWOT / OUTPUT UP TO + TAD NAM2 + JMS I TWOT / 6 CHARACTERS + TAD NAM3 + JMS I TWOT / OF FILE NAME, + JMS I TYPECI / A "." + ". + TAD NAM4 / & UP TO 2 CHARS + JMS I TWOT / OF EXTENSION. +PNAME1, SPACE1 /OUTPUT A " " + TAD NCNT /11(10) CHARS ON LINE YET? + TAD (-13 + SPA CLA + JMP PNAME1 /NO, OUTPUT ANOTHER SPACE + 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. + +LIMITS, 0 + TAD I LIMITS /GET ADDRESS OF 3 WORDS + ISZ LIMITS + DCA PNAME / & SAVE IT + JMS I ARGI /GET COMMAND DATA + TAD TEMP1 /GET BLOCK NUMBER PART + ISZ TEMP1 /WAS A BLOCK PART SPEC'D? + DCA I PNAME / YES, STORE IT + CLA /(CLEAR IN CASE NOT!) + ISZ PNAME /BUMP POINTER + TAD ACC2 + AND N7 + DCA I PNAME /STORE HIGH 3 BITS + ISZ PNAME + TAD ACC1 + DCA I PNAME / & LOW 12 BITS OF ADDR. + JMP I LIMITS + + +PAGE + /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. + + +/CALLING SEQUENCE: +/ +/ JMS I GETI +/ RETURN1 /MODE=MAPPED, NO SUCH ADDRESS +/ NORMAL RETURN /'CAD' SET, DATA IN AC + /SUBROUTINE 'GET'--PART OF THIS PAGE & ALL OF NEXT + +GET, 0 + JMS I CTRLI /GO TEST FOR CONTROL-CHARS + TAD MODSW /OK, TEST MODE + SNA + JMP GET0 /NORMAL MODE, NO CHANGES + SMA CLA + JMP GET4 /SAVE MODE, DO MAPPING + TAD OFFSET /OFFSET MODE, ADD IT +GET0, JMS DBLPGS /NOW ADD 'DOUBLE PAGES' + TAD BLK / OF LOC TO BLK TO SET + DCA CBLK /'CURRENT BLOCK' +GET1, JMS GETIO /OUTPUT CURREN (IF NEEDED), GET NEXT + JMP RERROR / READ ERROR, GO TELL ABOUT IT + TAD MODSW /TEST AGAIN FOR OFFSET + SPA CLA + TAD OFFSET /YES, ADD IT AGAIN + TAD LOCL /USE 8 ADDRESS BITS FROM LOC + AND N377 + TAD BUFST /INTO BUFFER, TO SET + DCA CAD /'CURRENT ADDRESS' + TADICAD /NOW GET THE WORD + ISZ GET /RETURN TO CALL+2 WITH IT +GETX, JMP I GET /[EXIT TO CALL+1 FOR MAP FAIL] + +GETIO, 0 /DO I/O FOR 'GET' & 'SCANER' + TAD CBLK /IS THIS SAME BLOCK AS IS IN + CIA /CORE CURRENTLY? + TAD RBLK + SNA CLA + JMP GETIO2 /YES, USE IT. + ISZ MODIF /NO, ANY CHANGES IN THIS BLK? + JMP GETIO1 /NO, DEVICE OK AS IS + JMS I DEVAD /CALL DEVICE HANDLER + 4210 /WRITE, 2 PAGES, FIELD 1 +BUFST, IOBUF +WBLK, 0 + JMP WERROR /WRITE ERROR +GETIO1, TAD CBLK /NOW UPDATE OUTPUT BLOCK + DCA WBLK + TAD CBLK / AND INPUT BLOCK # + DCA RBLK + DCA MODIF / AND RESET SWITCH + TAD CBLK /SHOW BLOCK NUMBER IN LIGHTS + MQL / (IF THERE ARE ANY!) + CLA + JMS I DEVAD /CALL DEVICE HANDLER + 0210 /READ, 2 PAGES, FIELD 1 + IOBUF +RBLK, -1 /(NOTHING IN CORE-ILLEGAL BLK #) + JMP I GETIO /READ ERROR +GETIO2, ISZ GETIO /OK, DO NORMAL RETURN + JMP I GETIO + + +DBLPGS, 0 /CONVERT LOCATION TO DOUBLE-PAGES + TAD LOCL + AND M400 /HIGH 4 BITS HERE + CLL RAL /BECOME LOW 4 BITS + TAD LOCH /FOR A 7 BIT VALUE + RTL + RTL + JMP I DBLPGS + + +/GET WORD ROUTINE FOR "ODT" COMMANDS + +ODGET, 0 + TAD SBLK /SET UP BLOCK + DCA BLK + TAD SLOCH + DCA LOCH + TAD SLOCL + DCA LOCL /SET UP LOCATION + JMS I GETI /NOW GET WORD +ERC05, ERROR /MAPPED MODE, NO SUCH ADDRESS + JMP I ODGET / & RETURN WITH IT + + +/OUTPUT 12 BIT BLOCK # & 15 BIT ADDRESS IN OCTAL + +BKLOC, 0 + TAD I BKLOC /GET ARGUMENT (ADDR-1) + ISZ BKLOC + DCA GETPNT / & SET UP A-XR + TAD I GETPNT /GET BLOCK PART + JMS I OCTI / & OUTPUT IT + TAD I GETPNT /GET FIELD + AND N7 + JMS I TWOCI / & OUTPUT "." & IT + 5660 / (".0") + TAD I GETPNT /GET ADDRESS + JMS I OCTI / & OUTPUT IT + 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 +GWORD, 0 + JMS I SSKIPI /GET NEXT NON-SPACE + TAD CHAR + AND N77 /USE THIS CHAR AS LEFT + JMS I RTL6I / 6 BITS. + DCA CHARSW /SAVE IT + JMS I SORTI /CHECK FOR ^K, ^D, (, ", ', + GWLST1-1 / DIGITS, SPACE & CR + GWOPS1-GWLST1 + JMS I GETNI /NONE, IS NEXT A SPACE + JMS I SORTI / OR A C.R.? + GWLST2-1 + GWOPS2-GWLST2 + TAD CHAR /NONE, USE AS LOWER 6 BITS + AND N77 + TAD CHARSW + DCA CHARSW /SAVE IT +GWD1, JMS I GETNI /LOOK FOR SPACE OR C.R. + JMS I SORTI + GWLST2-1 + GWOPS2-GWLST2 + JMP GWD1 /NEITHER, KEEP LOOKING +/ +GWD2, STA /SPACE FOUND, SET SWITCH +GWD3, DCA CRSWT /CR FOUND, RESET SWITCH + TAD CHARSW /RETURN WITH WORD + ISZ GWORD / TO CALL+2 +GWD4, JMP I GWORD +/EXIT TO CALL+1 IF ANY NUMERIC ITEM FOUND-- +/ ^K, ^D, (, ", ', DIGITS + + +/"DIRECTORY" FORMAT OUTPUT ROUTINE +DIRDMP, 0 + JMS I OCTI /OUTPUT IN OCTAL FIRST + SPACE2 + TADICAD + JMS DIROUT / THEN 3 OTHERS + JMP I DIRDMP + +/"?" ODT OUTPUT ROUTINE +DIROUT, 0 + CIA /ASSUME WAS NEGATIVE + JMS I DECI / & OUTPUT IN DECIMAL + SPACE2 + TADICAD + JMS I PDATEI /OUTPUT AGAIN AS DATE + SPACE2 + TADICAD + JMS I TWOT /OUTPUT LAST TIME AS PACKED ASCII + JMP I DIROUT + + +PAGE + /CONTINUATION OF 'GET' -- MAPPING FOR "SAVE" AND "LOAD" +/ MODES DONE HERE. + +GET4, JMS DBLPGS /GET # DOUBLE-PAGES + DCA CAD / & SAVE IT + STA + TAD MODSW /TEST FOR SAVE OR LOAD MODE + SZA CLA + JMP GETL1 / LOAD MODE + CDF CIF 10 + JMS GCCB /SAVE MODE, GET CCB + DCA SEGCNT / & SET UP # SEGMENTS + TAD RBLK1 /SET UP ACTUAL FIRST BLOCK + IAC + DCA CBLK / FOR MAPPING. +GETS1, CDF 10 + TAD I GETPNT /GET AN ORIGIN WORD + DCA GETORG + TAD I GETPNT / & A CONTROL WORD. + CDF 0 + DCA GETCW + TAD GETCW /TEST FOR FIELD MATCH + CLL RTR + RAR + AND N7 /(MASK OFF COUNT) + CIA + TAD LOCH /SAME? + SZA CLA + JMP GETS2 /NO, TRY NEXT SEGMENT + TAD LOCL /YES, NOW TEST ADDRESSES + AND M200 /(MASK TO PAGE) + STL CIA + TAD GETORG /[ORIG PAGE]-[ADDR PAGE] + SZA SNL /ABOVE THE ORIGIN? + JMP GETS2 /NO, TRY NEXT + RAR /OK, DIVIDE BY 2 (WITH SIGN) + DCA GETORG / & SAVE IT. + TAD GETCW /BEYOND TOP OF SEGMENT? + AND M100 /(MASK OFF FIELD AND MAKE) + SNA + STL RAR / 0 => 40, THEN SUBTRACT + TAD M100 / ONE PAGE) + TAD GETORG + SPA CLA + JMP GETS2 /NO, TRY NEXT + TAD GETORG /YES, UPDATE CBLK TO RIGHT + CIA + JMS UPCBLK / ACTUAL BLOCK + TAD BLK /MUST BE IN "LVL 0" OR + SZA CLA + JMP GETX / RETURN AS BAD + JMP GET1 /NOW GO GET THE DATA +/ +GETS2, CLA + TAD GETCW /UPDATE CBLK + AND M100 + SNA + STL RAR /(MAKING 0 => 40) + TAD (100 /(ROUND UP PAGE COUNT) + JMS UPCBLK + ISZ SEGCNT /ALL SEGMENTS DONE? + JMP GETS1 /NO, TRY NEXT + TAD OVLFLG /YES, OVERLAYS? (LINK OUTPUT) + SNA + JMP GETX / NO, RETURN TO CALL+1 + TAD (4 / YES, RESET POINTER + DCA GETPNT / TO SKIP OVER LVL 0 + JMP GETL2 / & CONTINUE +/ +GETL1, CDF CIF 10 + JMS GHDR /GET & TEST HEADER +GETL2, CDF 10 + TAD I GETPNT /GET NUMBER OF OVERLAYS + DCA SEGCNT + TAD I GETPNT /GET PAGE & FIELD + DCA GETCW + TAD I GETPNT /GET REL BLK NUMBER + TAD RBLK1 / + START BLOCK + DCA CBLK / = ABS START BLK, THIS LEVEL + TAD I GETPNT /GET LENGTH, THESE OVERLAYS + CDF 0 + DCA GETORG + TAD GETCW /GET DBL-PAGE & FIELD + SNA + JMP GETX / 0 = THE END!!! + AND M400 /CONVERT TO DBL-PAGE # + CLL RTL + RTL + TAD GETCW / IN BITS 5-11 + RAL + AND N177 + CIA /-(DBL-PG # OF OVLY START) + TAD CAD /+(DBL-PG # OF DESIRED) + SPA + JMP GETL3 / GONE TOO FAR, MISSED IT! + DCA GETCW /= RELATIVE BLOCK NUMBER + TAD GETCW /IS THIS WITHIN THIS OVLY? + CIA + TAD GETORG + SPA SNA CLA + JMP GETL2 / NO, TRY NEXT OVERLAY + TAD BLK /OK, SET UP -(#LVL +1) + CMA + DCA UPCBLK /V7B + TAD UPCBLK /V7B-ADDR IS OK, IS THERE A + TAD SEGCNT / LEVEL WANTED? +GETL3, SPA CLA + JMP GETX /ILLEGAL LEVEL; TOO FAR--EXIT + TAD GETCW /ALL OK! ADD RELATIVE BLK + SKP +GETL4, TAD GETORG / TO (LVLS-1)*LENGTH-V7B + TAD CBLK + DCA CBLK / TO OVERLAY START BLOCK + ISZ UPCBLK /[MULTIPLY BY ADDING]-V7B + JMP GETL4 + JMP GET1 +GETORG, 0 +GETCW, 0 +SEGCNT, 0 + +UPCBLK, 0 + JMS I RTR6I /MOVE COUNT TO BITS 6-11 + CLL RAR /DIVIDE FOR DOUBLE PAGES + TAD CBLK /UPDATE + DCA CBLK + JMP I UPCBLK + + + +PAGE + /NUMERIC OUTPUT SUBROUTINES, NO ZERO SUPPRESSION: + +OPRT, 0 /4-DIGIT OCTAL + JMS NUMOUT + -1000 + -100 + -10 + 0 + JMP I OPRT + +OCT3, 0 /3-DIGIT OCTAL + JMS NUMOUT + -100 + -10 + 0 + JMP I OCT3 + +BPRT, 0 /3-DIGIT BCD + JMS NUMOUT + -400 + -20 + 0 + JMP I BPRT + + +SGNDP, 0 /4-DIGIT DECIMAL, SIGNED + DCA NUMB + TAD NUMB + SPA CLA + TAD N15 + SPACE1 /OUTPUT "-" OR " " + TAD NUMB /NOW OUTPUT IN DECIMAL + SPA + CIA + JMS DPRT + JMP I SGNDP + +DECIMAL + +DPRT, 0 /4-DIGIT DECIMAL, UNSIGNED + JMS NUMOUT + -1000 + -100 + -10 + 0 + JMP I DPRT + +DEC2, 0 /2-DIGIT DECIMAL, UNSIGNED + AND N177 /MASK IT FIRST + JMS NUMOUT + -10 + 0 + JMP I DEC2 + +OCTAL + +NUMOUT, 0 /THE REAL OUTPUT SUBROUTINE + DCA NUMB /SAVE THE NUMBER +NUMO1, DCA NUMDGT /RESET "DIGIT" TO 0 + CLA CLL + TAD NUMB /GET CURRENT VALUE + TAD I NUMOUT /SUBTRACT DIGIT BASE + SNL /DID IT OVERFLOW? + JMP NUMO2 /NO, TOO FAR! + ISZ NUMDGT /YES, BUMP DIGIT + DCA NUMB / & UPDATE VALUE + JMP NUMO1+1 +/ +NUMO2, CLA CLL + TAD NUMDGT /OUTPUT THE "DIGIT" + DIGIT + ISZ NUMOUT /BUMP TO NEXT ARG + TAD I NUMOUT /DONE ENOUGH? + SZA CLA + JMP NUMO1 + TAD NUMB /YES, SO OUTPUT THE LAST + DIGIT / ONE. + JMP I NUMOUT /AND RETURN +NUMB, 0 +NUMDGT, 0 + +SSKIP, 0 /SKIP SPACES IN COMMAND BUFFER. + TAD CHAR + TAD M240 /IS THIS A SPACE? + SZA CLA + JMP I SSKIP /NO, DONE + JMS I GETNI /YES, GET NEXT CHAR + JMP SSKIP+1 / & GO TRY IT + + +/OS/8 ASCII OUTPUT SUBROUTINE. OUTPUTS 1 CHAR +/ FOR EVEN WORD & 2 CHARS FOR ODD WORD. + +OSTYPE, 0 + JMS OSSET /DO SETUP FOR UNPACKING + JMS I (ASCII /OUTPUT CHARS TO "STANDARD" + ISZ CHARSW /UNPACK 2ND CHARACTER? + JMP OSUNPK / YES, & RETURN TO OSSET CALL! + 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. + +BYTEO, 0 + JMS OSSET /DO SETUP FOR UNPACKING + JMS OCT3 /3 DIGIT OCTAL OUTPUT + ISZ CHARSW /UNPACK 2ND "CHAR"? + SKP + JMP I BYTEO / DONE, RETURN + SPACE2 /YES, BUT OUTPUT 2 SPACES + 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! + +OSSET, 0 /ENTER HERE TO INITIALIZE + DCA INC /SAVE AC + IAC + AND LOCL /AC = 0 OR 1 + CMA /AC = -1 OR -2 (-# TO DO) + DCA CHARSW /SET UP UNPACK COUNT +OSRETN, TAD INC /GET VALUE TO AC + AND N377 /MASK TO 8 BITS + JMP I OSSET +/ +OSUNPK, STA /JUMP HERE IF 2ND CHAR TO GET + TAD CAD + DCA SGNDP /POINT TO HIGH WORD + CDF 10 + TAD I CAD /GET LOW BITS OF "CHAR" + AND N7400 / MASK TO 4 BITS AND + JMS I RTR6I / MOVE TO BITS 8-11 + RTR + DCA INC /SAVING IT HERE FOR LATER! + TAD I SGNDP /NOW GET HIGH BITS OF "CHAR" + AND N7400 / MASK TO 4 BITS AND + CDF 0 + CLL RTR / MOVE TO BITS 4-7 + RTR + JMP OSRETN /GET OTHER BITS & RETURN! + + +/SUBROUTINE TO INCREMENT THE "CURRENT LOCATION" + +INC, 0 + ISZ LOCL /INCREMENT LOW 12 ADDR BITS + JMP I INC /OK AS IS + CLL + TAD LOCH /LOW OVERFLOW, INCR. HIGH + TAD (7771 / 3 ADDRESS BITS (& TEST) + AND N7 + DCA LOCH + SZL /DID HIGH OVERFLOW ALSO? + TAD N200 / YES, THEN BUMP BLK ALSO + TAD BLK + DCA BLK + JMP I INC + + +PAGE + /OUTPUT PACKED STRING, ADDRESS IN CALL+1, +/ TERMINATOR IS XX00. +TYPES, 0 + TAD I TYPES + ISZ TYPES + JMS TYPSTR + JMP I TYPES + +/OUTPUT PACKED STRING, ADDRESS IN AC, TERMIN IS XX00 +TYPSTR, 0 + DCA GETNT +TTAGN, CDF 10 + TAD I GETNT + CDF 0 + ISZ GETNT + JMS PACOUT + TAD GNAME + AND N77 + SNA CLA + JMP I TYPSTR + JMP TTAGN + +/PACKED ASCII OUTPUT ROUTINE +PACOUT, 0 + DCA GNAME + TAD GNAME /USE LEFT 6 BITS + JMS I RTR6I + JMS ONECHR + TAD GNAME /USE RIGHT 6 BITS + JMS ONECHR + JMP I PACOUT + +/OUTPUT TRIMMED OR UNTRIMMED ASCII IN THE AC +ONECHR, 0 /NO CODE FOR CR/LF + AND N77 + SNA + JMP I ONECHR /IGNORE "@" + TAD (-40 + SMA + TAD M100 + JMS I TYPECI + 340 + JMP I ONECHR + + +/SUBROUTINE TO MATCH CHAR AGAINST LIST1 AND JUMP +/THROUGH LIST2 WHEN MATCH FOUND. BOTH LISTS IN +/FIELD 1. + +SORTJ, 0 + SNA + TAD CHAR /USE CHAR IF AC = 0 + DCA SORTEM /ITEM TO LOOK UP + TAD I SORTJ + ISZ SORTJ /GET LIST1 ADDRESS + DCA SCANX1 +SORT1, CDF 10 + TAD I SCANX1 /COMPARE WITH SORTEM + CDF 0 + SNA /0 ? + JMP SORT2 /END OF LIST + CIA STL + TAD SORTEM + SZA CLA /DOES IT MATCH? + JMP SORT1 /NO, TRY NEXT + TAD SCANX1 /YES, GET ADDRESS... + TAD I SORTJ + DCA SORTJ /...OF JUMP ADDRESS + CDF 10 + TAD I SORTJ + DCA SORTJ + CDF 0 + JMP I SORTJ /GO TO ROUTINE +SORT2, ISZ SORTJ /MATCH NOT FOUND, + JMP I SORTJ /EXIT TO CALL+3 +SORTEM, 0 + + +/SUBROUTINE TO GET A NAME FOR 'XOPEN', 'XFILE', 'XDEV' & 'XDDEV' + +GNAME, 0 /GET A FILE OR DEVICE NAME + DCA TEMP1 /SET UP "." SWITCH AND + TAD TEMP1 / FILE/DEVICE SWITCH + DCA TEMP2 + DCA NAM1 + DCA NAM2 /CLEAR NAME AREA + DCA NAM3 + TAD (2326 / & INIT EXTENSION TO "SV" + DCA NAM4 + TAD (NAM1 / & INIT POINTER FOR NAME + DCA TEMP + JMS I SSKIPI /SKIP LEADING SPACES + STA + TAD COMOUT /BACK UP THE POINTER + DCA COMOUT + JMS GPAIR /1ST & 2ND CHAR + JMS GPAIR /3RD & 4TH +GETSCN, JMS GPAIR /5TH & 6TH OR 1ST & 2ND EXT. + JMS GETNT /SCAN FOR TERMINATOR + CLA + JMP .-2 +/ +GETCOL, TAD TEMP2 /":" SEEN, DEVICE OR FILE NAME? + SZA CLA + JMP GETNTC / FILE, JUST USE THE ":" + ISZ TEMP2 / DEVICE, FLAG ":" SEEN + JMP GETSCN+1 / AND SCAN TO TERMIN. +/ +GETPER, ISZ TEMP1 /"." FOUND, FIRST ONE? +ERCM, ERROR /NO, THE END... + DCA NAM4 /YES, RESET EXT, + TAD (NAM4 / SET POINTER + DCA TEMP + JMP GETSCN / & GO GET IT +/ +GETEND, STA /TERM = SPACE, SET SWITCH + DCA CRSWT /TERM = CR, RESET SWITCH + JMP I GNAME /..DONE.... + +GETNT, 0 /GET & TEST A CHAR + JMS I GETNI /GET NEXT CHAR + JMS I SORTI /TEST IT + GETLST-1 + GETOPS-GETLST +GETNTC, TAD CHAR /OK, USE CHAR + AND N77 /MASK TO 6 BITS + JMP I GETNT / & EXIT WITH IT + +GPAIR, 0 /GET RIGHT/LEFT-HALF-CHARS + JMS GETNT + JMS I RTL6I /TO LEFT HALF + DCA I TEMP / & STORE IT + JMS GETNT + TAD I TEMP /MERGE WITH LAST LEFT + DCA I TEMP + ISZ TEMP /BUMP POINTER + JMP I GPAIR + +RTL6, 0 /ROTATE AC 6 LEFT + CLL RTL + RTL + RTL + JMP I RTL6 + +RTR6, 0 /ROTATE AC 6 RIGHT + CLL RTR + RTR + RTR + JMP I RTR6 + + +PAGE + /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. + +READ, 0 /READ AND ECHO INPUT CHARACTER + TAD I READ /GET TWO LIST ADDRESS PARAMETERS + ISZ READ + DCA RETERM / FROM CALLER AND SET UP IN + TAD I READ / SORT ROUTINE CALL + ISZ READ + DCA RETERM+1 +RENEXT, JMS RKEY /GET A CHAR + JMP RUBO /RUBOUT, GO BEGIN DELETIONS +REKEY, DCA CHAR + JMS I SORTI /CHECK FOR CTRL-R & CTRL-U + REACTL-1 + REACTS-REACTL + TAD CHAR + JMS I TYPEI + JMS I SORTI /CHECK FOR CALLER TERMINATORS +RETERM, 0 / PARAMETERS HERE + 0 + TAD CHAR /NONE, JUST STORE IN BUFFER + SKP +RESPC, TAD (" /FOR CAMMAND INPUT, TAB -> SPACE! + CDF 10 + DCA I COMIR /COMMAND (LINE) INPUT BUFFER + CDF 0 + 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. +/ +RUBO, JMS BTEST /RUBOUT TYPED,TEST FOR EMPTY + JMP RUBOF / INPUT BUFFER EMPTY! + JMS I TYPECI /OK, OUTPUT 1ST "\" + "\ +RUBO1, JMS BTEST /NOW EMPTY? + JMP RUBOE / YES, LINE END + TAD COMIR /ECHO LAST CHAR IN BUFFER + DCA ENDC + CDF 10 + TAD I ENDC + CDF 0 + JMS I TYPEI + STA + TAD COMIR /NOW BACK UP POINTER + DCA COMIR + JMS RKEY /GET A CHAR + JMP RUBO1 /ANOTHER RUBOUT, GO HANDLE + DCA BTEST /SAVE THE CHAR + JMS I TYPECI / DO CLOSING "\" + "\ + TAD BTEST + JMP REKEY /& GO USE NEW CHAR +/ +RUBOE, JMS I TYPECI /BUFFER WAS EMPTIED, + "\ /OUTPUT CLOSING "\" +RUBOF, JMS I CRLFI / & A CR/LF + JMP I READ +/ +RECHO, JMS I TYPECI /ECHO "^R" & THEN + "R-100 + JMS I CRLFI /ECHO CURRENT LINE + TAD COMST /INIT AUTO-XR + DCA COMOUT +RECHO1, TAD COMOUT /DONE? + CIA + TAD COMIR + SNA CLA + JMP RENEXT /YES, MORE INPUT + JMS I GETNI /NO, GET NEXT CHAR + JMS I TYPEI / & OUTPUT IT + JMP RECHO1 / & CONTINUE +/ +RERASE, JMS I TYPECI /OUTPUT "^U" + "U-100 + JMP RUBOF /GO OUTPUT CR/LF & EXIT + +BTEST, 0 /TEST FOR COMM. BUFFER EMPTY + TAD COMIR + CIA + TAD COMST + SZA CLA /EMPTY? + ISZ BTEST /NO, STILL OK, TO CALL+2 + JMP I BTEST / OTHERWISE TO CALL+1 + RKEY, 0 /GET A NON-NULL CHAR, TEST & TRANSLATE + KSF /*** JMS I CTRLI /CHECK KEYBOARD + JMP .-1 /*** CIF BAT /BATCH OPER. + JMS I CTRLI /*** JMS I BATINI + KSF /*** ERROR /EOF!! + JMP RKEY+1 /*** NOP /MUST USE SPECIAL CARE + KRB /*** NOP / TO HANDLE CTRL-Q! + AND N177 /MASK OFF PARITY + SNA + JMP RKEY+1 /NULL CHAR + TAD (-177 /IS IT A RUBOUT? + SNA +RKEY0, JMP I RKEY /YES, EXIT TO CALL+1 /*** BATCH + ISZ RKEY /NO, EXIT TO CALL+2 /*** OPER. + TAD (2 /TEST FOR ALT-MODES + SMA + JMP RKEY1 / 375 OR 376 + TAD (35 /IS IT LOWER CASE? + SMA + TAD (-40 /YES, MAKE UPPER CASE + TAD (-35 +RKEY1, TAD (375 /RESTORE CHAR & ADD PARITY + 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. +ENDC, 0 + TAD (215 /PUT A CR IN BUFFER + CDF 10 + DCA I COMIR + CDF 0 + TAD COMST /INIT'L BUFFER UNLOAD + DCA COMOUT + TAD CHAR /SAVE CHAR FOR POSSIBLE + DCA TEMP / USE BY 'WCHEK' + JMS I GETNI /GET FIRST CHARACTER + JMS I SSKIPI /SKIP LEADING SPACES + TAD CHAR /GET 1ST NON-SPACE + TAD M215 /IS IT A CR? + SZA CLA /YES, NOTHING IN BUFFER + ISZ ENDC /OTHERWISE RETURN TO CALL+2 + JMP I ENDC + + +DODIG, 0 /OUTPUT AC AS AN ASCII DIGIT + JMS I TYPECI + "0 + JMP I DODIG + + +PAGE + /'FPP'/OCTAL/'PDP' OUTPUT ROUTINE FOR ODT +ODTOUT, 0 + TAD TYPSW /-1, 0, +1 + TAD (TAD ODTOL /GENERATE ADDRESS OF DESIRED + DCA ODTOPT / OUTPUT ROUTINE +ODTOPT, HLT /[USED TWICE!] + DCA ODTOPT + JMS I ODGETI /GET SPECIFIED WORD + JMS I ODTOPT / & OUTPUT IT + JMP I ODTOUT + + FPPDMP /-1 = OCTAL + FPP +ODTOL, OPRT / 0 = OCTAL + PDPDMP /+1 = OCTAL + PDP + + +/OCTAL & 'PDP' (SYMBOLIC) DUMP ROUTINE +PDPDMP, 0 + JMS I OCTI /FIRST OUTPUT IN OCTAL + SPACE2 /FOLLOWED BY 2 SPACES, + JMS PDPOUT / & THEN AS 'PDP' + JMP I PDPDMP + + +/'PDP' (SYMBOLIC) INSTRUCTION DECODING +PDPOUT, 0 + CLA + JMS OPRTST /TEST FOR OPR & IOT + JMP OPRS / OPR + JMS IOPRNT / IOT +SYMS, JMS GETOP /GET OP-CODE TO BITS 9-11 + RAL / * 2 + JMS SYMTYP /OUTPUT 3 CHAR SYMBOL & SPACE + INSLST /(TABLE FOR INDEXING) + -2 /(- # WORDS) + JMS OPRTST /TEST FOR OPR & IOT + JMP SYMEND / OPR, DONE + JMP IOTS / IOT + TADICAD /MEMORY REF., INDIRECT? + AND (400 + SNA CLA + JMP REFS1 /NO + JMS I TWOCI /YES, OUTPUT "I " + 1140 +REFS1, TADICAD /SET UP ADDR BITS + AND N177 + DCA BITVAL /SAVE THEM + TADICAD /IS THIS A 'PAGE 0 REF'? + AND N200 + SZA CLA + TAD LOCL /NO, USE PAGE BITS + AND M200 + TAD BITVAL /OK, NOW ADD ADDR BITS +REFS2, JMS I OCTI /OUTPUT IN OCTAL +SYMEND, JMP I PDPOUT /DONE, RETURN + +/ +IOTS, TADICAD /USE ONLY LAST 9 BITS + AND (777 + JMP REFS2 /AND OUTPUT IN OCTAL +/ +OPRS, TADICAD /IS THIS A NOP? + AND (777 + SNA + JMP SYMS /YES, OUTPUT "NOP " + AND N200 /IS THERE A CLA IN IT? + SNA CLA + JMP OPRS1 /NO, CONTINUE + JMS SYMTYP /YES, OUTPUT "CLA " + CLANAM + -2 + IAC +OPRS1, DCA CNT /SET ANYTHING OUTPUT SWITCH + TADICAD /SET UP WORD FOR DECODE + JMS I RTL6I + RAR + DCA BITVAL /SAVE IT + TADICAD /CHECK FOR OPR1, OPR2 OR EAE + CLL RAR + AND N200 + SNA + JMP OPR1A /OPR1 MICRO-INSTRUCTION + SNL CLA + JMP OPR2A /OPR2 MICRO-INSTRUCTION +/ +/DO THE DOCODING FOR THE EAE MICRO-INSTRUCTIONS +EAE, TAD (EAELST-2 /SET UP EAE LIST POINTER + DCA BITPNT + JMS BITS /SHIFT & CHECK BIT 5 + JMS OPRTYP /IF = 1, "MQA " + TAD BITVAL /CHECK BIT 6 + CLL RAL /("SCA" IN "A" MODE OF 8/E + DCA BITVAL / 'MODE BIT' IN "B" MODE) + SZL + TAD N20 /IF ON, USE OTHER WORDS + DCA EAETMP + JMS BITS /CHECK BIT 7 + JMS OPRTYP / "MQL " + TADICAD + AND (16 + TAD EAETMP /(ADD SWITCH WORD) + JMS SYMLIM /CHECK FOR & OUTPUT LAST INST. + -36 /UPPER LIMIT +EAETMP, 0 +/ +/DO THE DECODING FOR THE OPR1 MICRO-INSTRUCTIONS +OPR1A, TAD (OP1LST-2 /SET OPR1 LIST + DCA BITPNT + JMS BITS /SHIFT & CHECK BIT 5 + JMS OPRTYP /IF = 1, OUTPUT "CLL " + JMS BITS /CHECK BIT 6 + JMS OPRTYP / "CMA " + JMS BITS /CHECK BIT 7 + JMS OPRTYP / "CML " + ISZ BITPNT /BUMP POINTER + ISZ BITPNT + TADICAD /LOOK FOR IAC + RAR + SZL CLA + JMS OPRTYP /OUTPUT "IAC " + TADICAD /SET UP TO CHECK FOR ROTATES + AND (16 + JMS SYMLIM /CHECK & OUTPUT + -12 /UPPER LIMIT + + +PAGE + /OCTAL & 'FPP' (SYMBOLIC) DUMP ROUTINE +FPPDMP, 0 + JMS I OCTI /FIRST OUTPUT IN OCTAL + SPACE2 / THEN 2 SPACES + JMS FPPOUT / & THEN AS FPP + JMP I FPPDMP + +/THE FOLLOWING ROUTINES ARE USED BY 'PDPOUT' + +/DO THE DECODING FOR THE OPR2 MICROINSTRUCTIONS +OPR2A, TAD (OP2LST-2 /SET UP LIST POINTER + DCA BITPNT + JMS BITS /SHIFT & CHECK BIT 5 + JMS OPR2T /IF 1, OUTPUT "SMA " OR "SPA " + JMS BITS /CHECK BIT 6 + JMS OPR2T / "SZA " OR "SNA " + JMS BITS /CHECK BIT 7 + JMS OPR2T / "SNL " OR "SZL " + JMS BITS /CHECK BIT 8 + SKP + JMP OPR2B /IT WAS 0 + TADICAD /MUST CHECK FOR "SKP " + AND (160 + SNA CLA /ARE ALL SKIP SENSES = 0? + JMS OPRTYP /YES, SO OUTPUT "SKP " +OPR2B, TAD (OP2LST+14 /SET UP CHECK FOR OSR & HLT + DCA BITPNT + JMS BITS /CHECK BIT 9 + JMS OPRTYP / "OSR " + JMS BITS /CHECK BIT 10 + JMS OPRTYP / "HLT " + JMP OPEND /CHECK FOR ANY DONE + +SYMLIM, 0 /CHECK LAST SYMBOL AGAINST LIMIT + DCA CHAR /SAVE AC + TAD CHAR + SPA SNA /IS IT > 0? + JMP OPEND /NO, TEST IF ANY OUTPUT DONE + TAD I SYMLIM /IT IS > UPPER LIMIT? + SMA SZA CLA + JMP OPEND /NO, GO CHECK AGAIN + TAD CHAR /CALCULATE ADDRESS + JMS OPRTYP / & OUTPUT LAST + JMP SYMEND /...DONE +/ +OPEND, CLA + TAD CNT /ANYTHING OUTPUT? + SZA CLA + JMP SYMEND /YES, DONE WITH OUTPUT + JMS SYMTYP /NO, OUTPUT "OPR " + OPRMES + -2 + JMP IOTS /NOW GO OUTPUT LAST 9 BITS + +BITS, 0 /DECODE A WORD ONE BIT AT A TIME + TAD BITVAL /SHIFT A BIT INTO LINK + CLL RAL + DCA BITVAL /SAVE FOR LATER + ISZ BITPNT /BUMP SYMBOL POINTER + ISZ BITPNT + SNL + ISZ BITS /TO CALL+2 IF L = 0 + JMP I BITS + +OPRTYP, 0 /OUTPUT AN OPR SYMBOL + JMS SYMTYP /OUTPUT THE SYMBOL +BITPNT, 0 /ADDRESS + -2 + ISZ CNT /SET SWITCH + JMP I OPRTYP + +SYMTYP, 0 /OUTPUT A SYMBOL + TAD I SYMTYP /ADD TABLE ADDR TO ANY INDEX + ISZ SYMTYP + DCA SYMPNT /SAVE POINTER + TAD I SYMTYP /GET COUNT OF WORDS + ISZ SYMTYP + DCA BITS / & SAVE IT +SYMNXT, CDF 10 /"SYMBOL"S IN FIELD 1 + TAD I SYMPNT + CDF 0 + JMS I TWOT /OUTPUT A PAIR OF LETTERS + ISZ SYMPNT + ISZ BITS /DONE? + JMP SYMNXT + JMP I SYMTYP +SYMPNT, 0 + +OPR2T, 0 /OUTPUT AN OPR2 SYMBOL + TADICAD + AND (10 /IF BIT IS ON, REVERSE THE + JMS OPRTYP /SENSE OF THE SKIP + JMP I OPR2T + +BITVAL, 0 + + +IOPRNT, 0 /OUTPUT I/O NAMES + TAD (IOTTAB /SET UP POINTER +IOPRN1, DCA IOPNT /SET (OR UPDATE) POINTER + CDF 10 + TAD I IOPNT /GET NEXT IOT + CDF 0 + SNA /AT END OF TABLE? + JMP I IOPRNT /YES, CODE NOT FOUND + CIA + TADICAD /NO, DO THEY MATCH? + SNA CLA + JMP IOPRN2 /YES, OUTPUT NAME + TAD (4 /NO, UPDATE POINTER + TAD IOPNT + JMP IOPRN1 / & TRY AGAIN +/ +IOPRN2, IAC /WORD FOLLOWS CODE + JMS SYMTYP /OUTPUT THE MNEMONIC +IOPNT, 0 + -3 + JMP SYMEND / & RETURN + + +OPRTST, 0 /TEST "INSTRUCTION" FOR OPR & IOT + TADICAD /GET WORD + AND N7000 /MASK OFF OP CODE + TAD (1000 /IS IT AN OPR? + SNA + JMP I OPRTST /YES, EXIT TO CALL+1 + ISZ OPRTST + TAD (1000 /IS IT AN IOT? + SZA CLA + ISZ OPRTST /NO, EXIT TO CALL+3 + JMP I OPRTST / YES, TO CALL+2 + + +PAGE + /'FPP' (SYMBOLIC) INSTRUCTION DECODING +FPPOUT, 0 + CLA /HARD TO TELL WHAT MIGHT COME! + TADICAD /GET THE WORD + AND (600 /MASK OFF MODE BITS + SNA + JMP SPECIAL / NON-ARITHMETIC + TAD M400 /GIVES: -=BASE, 0=LONG, +=INDIR. + DCA TEMP2 + JMS GETOP /GET OP-CODE TO BITS 9-11 +FPLEA, JMS MULT3 /MULTIPLY BY 3 (WORDS/OP OUT) + JMS SYMTYP /OUTPUT 6 CHAR OPR SYMBOL + FPPINS /(INCLUDING "LEA") + -3 + TAD TEMP2 /NOW HANDLE MODE + SNA + JMP LONG / LONG INDEXED + SMA CLA + JMP INDIR / INDIRECT INDEXED +BASE, JMS I TYPSI / BASE - OUTPUT " B+" + MSBASE + TADICAD /GET WORD AGAIN + AND N177 / MASK OFF OFFSET + JMS MULT3 / MULTIPLY IT BY 3 + JMS OCT3 / & OUTPUT IN OCTAL + JMP I FPPOUT +/ +INDIR, JMS I TYPSI /OUTPUT "% B+" + MSINDI + TADICAD /GET WORD AGAIN + AND N7 / MASK OFF OFFSET + JMS MULT3 / MULTIPLY IT BY 3 + JMS OCT3 / & OUTPUT IT IN OCTAL + JMP XRPLUS /FINALLY DO XR OUTPUT +/ +LONG, JMS I TWOCI /OUTPUT "# " + 4340 + JMS FLDOUT /AND FIELD AND "*" +XRPLUS, JMS GET678 /GET XR FIELD + JMS I TWOCI / & OUTPUT ",X" WHERE + 5460 / "X" IS A DIGIT + TADICAD /GET WORD THE LAST TIME + AND (100 / AND CHECK "+" BIT + SZA CLA + JMS I TYPECI /OUTPUT "+" OR SKIP + "+ /[A NOP] + JMP I FPPOUT +/ +SPECIAL,JMS GETOP /GET OP-CODE + JMS I SORTI / & BRANCH ON IT + FPPMO0-1 + FPPMOJ-FPPMO0 +SPCOP0, TADICAD /FALLS THRU ON 0, GET + AND (170 / SUB-OP-CODE + JMS I SORTI / & BRANCH ON IT + FPPOP0-1 + FPPOPJ-FPPOP0 +SPOP00, TADICAD /FALLS THRU ON 0, USE AS + AND N7 / INDEX INTO LAST LIST + IAC +SPOP04, JMS MULT3 /THREE WORDS/SYMBOL + JMS SYMTYP /OUTPUT ONE OF SEVERAL + FPOP00 / SYMBOLS IN THIS LIST + -3 + JMP I FPPOUT +/ +SPOP05, CLL STA /= -1 + JMP SPOP04 /OUTPUT "STARTE" +/ +SPNUSE, CLL STA RAL /= -2 + JMP SPOP04 /OUTPUT "UNUSED" +/ +SPO123, JMS GET678 /"ALN X", "ATX X", "XTA X" + CLL RAL /(2 WORDS PER) + JMS SYMTYP /OUTPUT SYMBOL + FPXR1S-2 + -2 + JMP XROUT / & XR VALUE +/ +SPOP10, TAD (4 /"LDX *,X" +SPOP11, JMS SYMTYP /"ADDX *,X" + FPXR2S + -4 +XROUT, TADICAD /GET XR FIELD + AND N7 + DIGIT / & OUTPUT AS DIGIT + JMP I FPPOUT +/ +SPCOP1, TADICAD /GROUP 0 OR 1? + AND (100 + SNA CLA + JMP SPOP1J / 1 = CONDITIONAL JUMPS + JMS GET678 / 0 = SETS, ETC. + TAD (-4 /SUB-OP-CODES 0 THRU 3? + SMA CLA + JMP SPNUSE / NO, 4 THRU 7 = UN-USED + JMS GET678 /0 THRU 3: SETX,SETB,JSA,JSR + IAC / +1+1 => 2 THRU 5 +SPCOP3, IAC / 1: TRAP3 +SPCOP4, JMS MULT3 / 0: TRAP4 + JMS SYMTYP /GO DO ONE OF THESE + FOP134 + -3 + JMP DOFLD /FINISH WITH FIELD +/ +SPOP1J, JMS CONDIT /CONDITIONAL JUMPS + 1200 / "J--" + SPACE2 +DOFLD, JMS FLDOUT /OUTPUT FIELD & "*" + JMP I FPPOUT +/ +SPCOP2, JMS I TYPSI /OUTPUT "JNX " + MSJNX + JMP XRPLUS-1 / & HANDLE ADDRESS +/ +/ SPCOP3 & SPCOP4 +/ +SPCOP5, TADICAD /GET WORD AGAIN + AND (100 + SZA CLA + JMP SPNUSE /BIT 5 ON IS UNUSED OP + JMS CONDIT /LOAD TRUTH + 1424 / "LT--" + JMP I FPPOUT +/ +SPCOP7, IAC / "LEA" INDIRECT, SET SWITCH +SPCOP6, DCA TEMP2 / "LEA" LONG, SET SWITCH + CLL STA + JMP FPLEA / & GO DO OUTPUT + + +PAGE + PDATE, 0 /ROUTINE TO OUTPUT AN EXTENDED DATE WORD + DCA CRLF /SAVE IT + TAD CRLF /GET WORD & MASK + AND N377 + CLL RTR /DAY (4-8) TO 7-11 + RAR + JMS I DEC2I / OUTPUT AS 2 DIGITS (MASKED) + JMS I TYPECI / AND A SEPARATOR + "- + TAD CRLF /GET WORD A SECOND TIME + JMS I RTR6I /MONTH (0-3) TO 7-10 + RAR / FOR MONTH*2 + AND (36 / MASK IT AND USE AS AN INDEX + JMS I TYPSI / TO OUTPUT MONTH IN ALPHA + MONTHS / FORM (WITH SAFETY...) + JMS I TYPECI /FOLLOWED BY "-" + "- + TAD CRLF /GET LAST TIME + AND N7 / MASK OFF YEAR + TAD YRTEST / TEST IF .GT. THIS YEAR + SMA SZA + TAD (-10 / YES, SUBTRACT 8 + TAD YRBASE / ADD TO BASE YEAR + JMS I DEC2I / & OUTPUT IT + JMP I PDATE +YRTEST, 0 /-(THIS YEAR) FOR TESTING +YRBASE, 0 /BASE YEAR FOR DATE + THIS YEAR + + +TYPEA, 0 /OUTPUT ASCII CHARACTER IN THE AC + TAD I TYPEA /GET ARG, IF ANY + ISZ TYPEA + DCA I RTL6I /SAVE THE CHAR HERE FOR FIELD 1 + JMS I CTRLI + CIF 10 + JMP TYPE1 /GO TO FIELD 1 TO DO THE OUTPUT +/ +TYPEX, ISZ NCNT /BUMP LINE POSITION + JMP I TYPEA / & EXIT + +CRLF, 0 /OUTPUT CARRIAGE RETURN, LINE FEED + CLA + JMS TYPEA + 215 + JMS TYPEA + 212 + DCA NCNT /RESET LINE POSITION + JMP I CRLF + + +TYPEC, 0 /OUTPUT A SINGLE CHAR ARG + TAD I TYPEC /GET IT + ISZ TYPEC + JMS TYPE /OUTPUT IT + JMP I TYPEC + + +TYPE, 0 /CHARACTER OUTPUT ROUTINE + AND N377 /BE SURE ONLY 8 BITS + SNA + TAD CHAR /USE CHAR IF AC = 0 + DCA TCHAR /CHAR TO OUTPUT + TAD TCHAR + JMS I SORTI /CHECK FOR SPECIALS + TYPEL-1 + TYPEOP-TYPEL + TAD TCHAR /IS TCHAR < 240? + TAD M240 + SPA CLA + JMP TYPCTL /NO, OUTPUT AS CTRL-CHAR +TYPC, JMS TYPEA /NOW OUTPUT CHAR +TCHAR, 0 + JMP I TYPE +/ +TYPALT, JMS TYPEA /OUTPUT "$" FOR ALT-MODES + "$ + JMP I TYPE +/ +TYPCR, JMS CRLF /C.R. TO OUTPUT + JMP I TYPE +/ +TYPTAB, JMS TYPEA /SPACE OVER FOR TAB + " + TAD NCNT /TAB TO OUTPUT + TAD M10 + SNA + JMP I TYPE + SMA + JMP TYPTAB+3 /REDUCE BY TAB SIZE + CLA + JMP TYPTAB +/ +TYPCTL, JMS TYPEA /CONTROL-CHAR, OUTPUT AS + "^ + TAD C100 / "^","CHAR+100" + JMP TYPC +C100, 100 + + +CTRL, 0 /CHECK FOR CTRL-C, CTRL-S, CTRL-Q & CTRL-P + DCA CTRLQS /CLEAR HANG FLAG +CTRL0, KSF /HAS A KEY BEEN HIT? + JMP CTRLX /NO, TEST IF HANGING + KRS + AND N177 /YES, MASK OFF PARITY BIT + TAD (-"C+300 /IS IT A CTRL-C (ABORT PROGRAM)? + SNA +BCTRLC, JMP CTRLC /*** JMP I CTRLCI /== ABORT == + TAD M20 /IS IT A CTRL-S (STOP OUTPUT)? + SZA + JMP CTRL1 + ISZ CTRLQS / YES, SET HANG FLAG + KCC / & CLEAR HARDWARE FLAG +CTRL1, TAD (2 /IS IT A CTRL-Q (START OUTPUT)? + SZA + JMP CTRL2 + KCC / YES, CLEAR THE HARDWARE + JMP I CTRL / & JUST EXIT +/ +CTRL2, IAC /IS IT A CTRL-P (STOP PROGRAM)? + SZA CLA + JMP CTRLX /NO, TEST IF HANGING + KCC + DCA DSWIT /YES, RESET DUMP SWITCH + JMS I TYPECI /OUTPUT "^P" + "P-100 + JMP I RECRLF / THEN CR/LF & RESTART +/ +/ROUTINE TO EXECUTE THE 'EXIT' COMMAND +/ +XEXIT, +CTRLC, DCA DSWIT /RESET DUMP SWITCH + JMP I M200 / & GO TO SYSTEM +CTRLCI, XERR4+1 /*** CTRL-C ABORTS JOB STREAM! *** +/ +CTRLX, TAD CTRLQS /HANGING BECAUSE OF CTRL-S? + SZA CLA + JMP CTRL0 / YES, BACK FOR ANOTHER ROUND + JMP I CTRL / NO, OUT WE GO! + +CTRLQS, 0 /CTRL-S, CTRL-Q FLAG + + +PAGE + /INPUT AN UNSIGNED 24 BIT NUMBER +ACCEPT, 0 + DCA ACC1 /CLEAR LO + DCA ACC2 / & HI WORDS + DCA DADD / & LEGAL INPUT SWITCH + JMS I SSKIPI /GET FIRST NON-SPACE + SKP +ACCPT1, JMS I GETNI /DON'T IGNORE SPACES + JMS I SORTI /CHECK FOR ^D, ^K, (, ", ', + GWLST1-1 / DIGITS, SPACE + ACOPS-GWLST1 + JMP ACCPT3 /NONE OF THE ABOVE +/ +ACCNUM, TAD CHAR + TAD (-"0 /MAKE A DIGIT + DCA OCTSET + TAD OCTSET /IS DIGIT LEGAL? + CIA + TAD ACBASE + SPA SNA CLA +ERC09, ERROR / NO, ILLEGAL DIGIT! +ACCMUL, TAD ACBASE /SET UP MULTIPLY OF PREVIOUS + DCA OPER1 / BY BASE + DCA OPER2 + JMS DMUL / DO MULTIPLY + TAD OCTSET /SET UP ADD OF NEXT "DIGIT" + DCA OPER1 + DCA OPER2 + JMS DADD /OK, DO THE ADD (& SET SWITCH) + JMP ACCPT1 +/ + STA / SPACE HERE + DCA CRSWT /SET SWITCH: CR HERE +ACCPT3, TAD DADD /TERMINATING CHAR RECEIVED + SNA CLA /CHECK FOR LEGAL INPUT +ERCR, ERROR /YOU CAN'T OUT-SMART ME! + JMP I ACCEPT +ACBASE, 10 +/ +/ +DQUOTE, JMS QUOTEC / " - GET SINGLE CHAR + DCA OCTSET / SAVE VALUE + JMP ACCMUL / & USE IT AS A "DIGIT" +/ +SQUOTE, JMS QUOTEC / ' - PACKED ASCII, GET 1ST + AND N77 /MASK TO 6 BITS + JMS I RTL6I /MOVE TO LEFT HALF + DCA OCTSET / & SAVE IT + JMS QUOTEC /GET 2ND CHAR + AND N77 /MASK + TAD OCTSET /MERGE + JMP DQUOTE+1 / & USE THIS AS A "DIGIT" +/ +CTRLD, TAD (2 / ^D - SET RADIX TO DECIMAL +CTRLK, JMS OCTSET / ^K - SET RADIX TO OCTAL + JMP ACCPT1 + + +/SUB. TO SET UP FOR OCTAL/DECIMAL INPUT. CALLED FROM +/ COMMAND INPUT & MODIFY & IF AN "^K"/"^D" IN INPUT. +OCTSET, 0 /SET UP FOR OCTAL/DECIMAL INPUT + TAD (10 /ENTER WITH AC= 2 FOR DECIMAL + DCA ACBASE + JMP I OCTSET + +QUOTEC, 0 /GET A QUOTED CHARACTER + JMS CGTEST /GET & TEST FOR A CR +ERC13, ERROR / ILLEGAL USE OF " OR ' + TAD CHAR /OK, RETURN WITH IT + JMP I QUOTEC + + +/SUBROUTINE TO DEVELOP ARGUMENTS FROM THE COMMAND +/BUFFER, AND RETURN WITH -(#) OF ARGS IN 'TEMP'. +GARGS, 0 + TAD TEMPST /GET BUFFER ADDRESS + DCA DPNT + DCA TEMP /ZERO THE NUMBER OF ARGS +GAR1, STA + DCA TEMP1 /SET BLK TO -1 + STA + DCA CNT /RESET SWITCH +GAR2, JMS EXPRIN /GET NEXT ARG + JMS I SSKIPI /IGNORE TRAILING SPACES + JMS I SORTI /BRANCH ON TERMINATOR + GARLST-1 + GAROPS-GARLST +ERCS, ERROR /ILLEGAL TERMIN., FLAME OUT +/ +GAR3, JMS GPUT /CR FOUND, END + TAD TEMPST /SET UP POINTER FOR + DCA DPNT / GETTING RESULTS + JMP I GARGS +/ +GAR4, JMS I GETNI /SKIP OVER "." + TAD ACC1 /.= TERMIN (BLOCK PART) + JMP GAR1+1 /SET BLOCK & GET NEXT +/ +GAR5, TAD ACC1 /-= TERMIN (LOC PART) + DCA TEMP2 + JMS I GETNI /SKIP OVER "-" + JMP GAR2-1 /GO SET SWITCH +/ +GAR6, JMS GPUT /,= TERMIN + JMS I GETNI /SKIP OVER "," + JMP GAR1 + + +/SUBROUTINE TO PUT THE DEVELOPED ARGS IN THE ARG +/BUFFER. ALL ARGUMENTS ARE STORED IN 4 WORDS IN +/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] +GPUT, 0 + TAD TEMP1 + DCA I DPNT /SET BLOCK + ISZ CNT /WAS A LOC2 SPECIFIED? + JMP GPUT1 /YES, OK + TAD ACC1 + DCA TEMP2 /NO, MAKE ARGS SAME +GPUT1, TAD ACC2 /STORE HIGH ADDR + AND N7 /MASKED TO 3 BITS + DCA I DPNT + TAD TEMP2 /USE 1ST ARG + DCA I DPNT + TAD ACC1 + CMA + TAD TEMP2 + DCA I DPNT /DIFF= (TEMP2-ACC1-1) + STA + TAD TEMP /ANOTHER ENTRY + DCA TEMP + JMP I GPUT + + +XS240O, 0 /XS240 FORMAT PACKED ASCII + JMS I RTR6I /HIGH 6 BITS + AND N77 + SPACE1 / PLUS A SPACE + TADICAD /THEN LOW 6 BITS, + AND N77 + SPACE1 / PLUS A SPACE + JMP I XS240O + + +GETN, 0 /GET NEXT CHAR FROM COMM. BUFF. + CDF 10 + TAD I COMOUT + CDF 0 + DCA CHAR + JMP I GETN + + +PAGE + /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. + + +EVAL, 0 + DCA OPER2 /0 => D.P. TEMP (NEW NUMBER + DCA OPER1 / OR LAST RESULT). + DCA LASTOP /0 => LASTOP + JMS I TERMTI /GET NEXT & TEST FOR TERM. + JMP EVAL1 /TERM, CHECK IT + JMP ENUM / IT MUST BE A NUMBER + +EVAL1, JMS I SORTI /CHECK LEGAL TERMS + EVLST1-1 /"+","-" & "(" + EVOPS1-EVLST1 +ERCT, ERROR /SORRY ABOUT THAT + +EVAL2, JMS I LPARI /IS CHAR "("? +ERCU, ERROR /YES,ILLEGAL (NO OP FIRST) +EVMIN, TAD CNTRA /SEQN # OF TERMINATOR + DCA THISOP /SET UP THISOP + TAD CNTRA /IS IT ")" OR "CR"? + TAD M10 + SMA CLA + DCA THISOP /YES, 0 => THISOP +EVAL3, TAD THISOP /CHECK PRIORITIES + CIA + TAD LASTOP /IS LASTOP < THISOP? + SPA CLA + JMP EVPAR /YES, CONTINUE SCAN + TAD THISOP / IS THISOP+LASTOP=0? + TAD LASTOP + SNA CLA + JMP EVALX /YES, DONE + TAD LASTOP /NO, DO THIS OP NOW + TAD EVTAB + DCA EVOP /SET UP OPERATION + TAD LASTOP /IS THIS =0? + SNA CLA + JMP EVOP /YES, DO OP + POP /NO, POP LAST OFF LIST + DCA ACC2 / INTO D.P.AC. + POP + DCA ACC1 +EVOP, HLT /JMS TO OPERATION ROUTINE + TAD ACC2 + DCA OPER2 /DUPLICATE D.P.AC. INTO + TAD ACC1 + DCA OPER1 / D.P. TEMP + POP + DCA LASTOP /POP UP ANOTHER OLD OPERATOR + JMP EVAL3 /AND GO DO IT + +EVPAR, JMS I LPARI /IS CHAR A "("? + JMP EVLPAR /YES, GO DO A SUB-EXPRESSION + TAD LASTOP /NO, PUSH DOWN OLD OP + PUSH + TAD OPER1 / & D.P. TEMP (LAST + PUSH + TAD OPER2 / RESULT OR NEW NUMBER). + PUSH + TAD THISOP /UPDATE LASTOP + DCA LASTOP +EVNEXT, JMS I TERMTI /GET NEXT & TEST FOR TERM. + JMP EVLPAR /TERM, MUST BE A "(" +ENUM, JMS I SORTI /CHECK FOR "C","B", ETC... + EVLST2-1 + EVOPS2-EVLST2 + JMS ACCEPT /GET A # OR BOMB OUT! + STA + TAD COMOUT /BACK UP POINTER + DCA COMOUT +ENUMX, TAD ACC1 + DCA OPER1 /LO ORDER PART + TAD ACC2 + DCA OPER2 /HI ORDER PART + JMP EVOPN /GO CHECK TERMINATOR +/ +EVDATE, CDF 10 /"D" -- USE DATE WORD + TAD I (7666 /GET DATE WORD + CDF 0 + JMP EVBLK+1 +EVREM, TAD ACCX1 /"R" -- USE REMAINDER + DCA ACC1 + TAD ACCX2 / AS NEXT "INPUT". + JMP EVBLK+2 +EVTEMP, TAD TEMPV1 /"T" -- USE 'TEMP' STORAGE + DCA ACC1 + TAD TEMPV2 + JMP EVBLK+2 +EVSR, LAS SKP /"S" -- USE SWITCHES + TADICAD /"C" -- USE CONTENTS + JMP EVBLK+1 +EVFIL, TAD FILLER /"F" -- USE FILLER + JMP EVBLK+1 +EVLOC, TAD LOCL /"L" -- USE LOCATION + DCA ACC1 + TAD LOCH + JMP EVBLK+2 +EVBLK, TAD BLK /"B" -- USE BLOCK + DCA ACC1 /INTO LO ORDER PART + DCA ACC2 /0 HIGH ORDER PART + JMP ENUMX /CHECK NEXT CHARACTER + +EVLPAR, JMS I LPARI /IS CHAR "("? + SKP +ERCV, ERROR /NO, DIE! (ILLEGAL OPERATOR) +EVPAR2, TAD LASTOP /PUSH DOWN LASTOP + PUSH + TAD EVAL /PREPARE TO RE-CALL + PUSH + JMS EVAL /RECURSIVE CALL +ERCW, ERROR /TERM = CR, NOT ENOUGH PARENS + POP + DCA EVAL /RESTORE RETURN ADDR + POP + DCA LASTOP /RESTORE LASTOP +EVOPN, JMS I TERMTI /GET NEXT & TEST FOR TERM. + JMP EVAL2 /OK + JMP EVPAR2-1 /GARBAGE, GIVE SAME ERROR + +EVALX, TAD CNTRA /WAS CHAR CR OR ")"? + TAD M10 + SNA CLA + ISZ EVAL / ")", RETURN TO CALL+2 + JMP I EVAL / CR, RETURN TO CALL+1 + +LPARI, LPAR +TERMTI, TERMT + +EVTAB, JMS I . /JMS THRU TABLE TO OPERATIONS + + DIOR /INCLUSIVE OR + DAND /AND + DADD /ADD + DSUB /SUBTRACT + DDIV /DIVIDE + DMUL /MULTIPLY + + +PAGE + PUSHX, 0 /PUSH AC ONTO LIST + CDF 10 + DCA I PDLPT + CDF 0 + ISZ PDLPT /BUMP POINTER + JMP I PUSHX + +POPX, 0 /POP LIST INTO AC + STA STL /SET LINK SO IT WILL BE 0 + TAD PDLPT /BACK UP POINTER + DCA PDLPT + CDF 10 + TAD I PDLPT + CDF 0 + JMP I POPX + + +LPAR, 0 /CHECK IF CHAR = "(" + TAD CHAR + TAD (-"( + SZA CLA + ISZ LPAR /IF IT IS NOT, TO CALL+2 + 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. +TERMT, 0 + CLA CLL + JMS I GETNI /GET NEXT CHARACTER + JMS I SSKIPI /IGNORE SPACES + TAD (TERMS-1 /SET UP POINTER + DCA SPNT + DCA CNTRA /SET CNTRA TO 0 +TERMT1, CDF 10 + TAD I SPNT /GET AN ITEM + CDF 0 + ISZ CNTRA /ADD 1 TO ITEM # + SNA + JMP TERMTE /WAS 0, END + CIA + TAD CHAR /SAME AS THIS? + SNA CLA + JMP I TERMT /YES, TO CALL+1 + JMP TERMT1 +TERMTE, ISZ TERMT /DIDN'T FIND IT, TO + JMP I TERMT / CALL+2 + +/DOUBLE-PRECISION ROUTINES + +DADD, 0 /D.P. ADD + CLL + TAD OPER1 + TAD ACC1 /ADD LOW ORDER PARTS + DCA ACC1 + RAL /GET CARRY TO AC11 + TAD OPER2 /ADD HIGH ORDER PARTS + TAD ACC2 + DCA ACC2 /STORE HIGH ORDER PART + JMP I DADD + +DSUB, 0 /D.P. SUBTRACT + DCA DPSGN /ZERO IT FOR SAFETY + JMS MULNEG /NEGATE OPERAND + JMS DADD / & ADD + JMP I DSUB + +DAND, 0 /D.P. LOGICAL AND + TAD ACC2 /AND HIGH ORDER PARTS + AND OPER2 + DCA ACC2 + TAD ACC1 /AND LOW ORDER PARTS + AND OPER1 + DCA ACC1 + JMP I DAND /RETURN + +DIOR, 0 /D.P. LOGICAL INCLUSIVE OR + TAD ACC2 /IOR HIGH ORDER PARTS + CMA + AND OPER2 + TAD ACC2 + DCA ACC2 + TAD ACC1 /IOR LOW ORDER PARTS + CMA + AND OPER1 + TAD ACC1 + DCA ACC1 + 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. +ARG, 0 + STA +ARG1, DCA TEMP1 /SET 'BLOK' [INIT TO -1] + JMS EXPRIN / GET AN ARG + JMS I SORTI /LOOK UP TERMINATOR + ARGLST-1 + ARGOPS-ARGLST +ERCQ, ERROR /ILLEGAL TERMINATOR +/ +ARG2, JMS I GETNI /SKIP OVER "." + TAD ACC1 /TERM = ".", SET 'BLOK' + JMP ARG1 +/ +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 +/ 'ACCEPT'. +EXPRIN, 0 + JMS I SSKIPI /IGNORE SPACES + JMS LPAR /IS CHAR A "("? + JMP EXPRI1 + JMS ACCEPT /NO, MUST BE A NUMBER + JMP I EXPRIN +/ +EXPRI1, JMS I EVALI /YES, GO EVALUATE EXPRESSION +ERC08, ERROR /CR = ILLEGAL TERMINATOR + JMS CGTEST /OK, SKIP OVER ")" & TEST FOR CR + SKP + STA /NO, SET SWITCH + DCA CRSWT /YES, RESET IT + JMP I EXPRIN / & LEAVE... + + +SCANER, 0 /EXECUTION SUBROUTINE FOR 'SCAN' COMMAND + CLA + TAD BLK /SET UP DESIRED BLOCK + DCA CBLK + JMS GETIO /DO NECESSARY I/O + SKP CLA / READ ERROR! + JMP I SCANER /THIS BLOCK IS OK! + TAD BLK + JMS I OCTI /OUTPUT BLOCK NUMBER + JMS I TYPSI / & TELL IT'S BAD + MSBAD + JMS I CRLFI / TO ANOTHER LINE + JMP I SCANER + + +PAGE + /SIGNED MULTIPLY AND DIVIDE ROUTINES + +DMUL, 0 + JMS MDCOM /MAKE DPAC POS, INITIALIZE + SPA CLA /MAKE SURE MULTIPLIER IS POSITIVE + JMS MULNEG / IT WAS NEG, MAKE POS & SET SIGN +DMUL1, TAD ACC2 /SHIFT RIGHT & OUT + RAR + DCA ACC2 /THRU HI OF LO + TAD ACC1 + RAR + DCA ACC1 /THRU LO OF LO INTO LINK + ISZ DPNEG /DONE YET? + JMP DMUL2 /NO, CONTINUE +DMUL4, TAD DPSGN /YES, CHECK SIGN OF RESULT + RAR + SZL CLA /SKIP IF SIGN OK + JMS DPNEG /NOT OK, NEGATE + JMP I DMUL +/ +DMUL2, SNL /ADD IN THIS TIME? + JMP DMUL3 /NO, BIT OUT WAS 0 + CLA CLL /YES, BIT WAS 1 + TAD OPER1 /START WITH LOW + TAD ACCX1 + DCA ACCX1 + CLA RAL /GET CARRY + TAD OPER2 /ADD HIGH PARTS +DMUL3, TAD ACCX2 /AND BEGIN SHIFTING OUT + RAR + DCA ACCX2 + TAD ACCX1 + RAR + DCA ACCX1 + JMP DMUL1 + +DDIV, 0 + TAD DDIV /MOVE RETURN ADDRESS + DCA DMUL + JMS MDCOM /MAKE DPAC POS, INITIALIZE + SMA CLA /IS DIVISOR NEGATIVE? + JMS MULNEG / NO, NEGATE IT & SET SIGN + SZL / IS IT 0? (CARRY OUT ON NEGATE) +ERCX, ERROR / YES, YOU LOST + ISZ DPSGN /CORRECT FOR SIGN DIF IN * & / +DDIV1, TAD ACCX1 /SUBTRACT LO OF LO + TAD OPER1 + DCA ACCX1 + CLA RAL /CARRY TO AC + TAD ACCX2 /SUBTRACT HI OF LO + TAD OPER2 + SPA /TOO FAR? + JMP DDIV2 /YES + CLL CML /NO, SET LINK + DCA ACCX2 + JMP DDIV3 +DDIV2, CLA + TAD OPER1 /RESET LO ORDER PART + CIA + TAD ACCX1 + DCA ACCX1 + CLL /RESET LINK +DDIV3, TAD ACC1 /BEGIN SHIFTING + RAL + DCA ACC1 + TAD ACC2 + RAL + DCA ACC2 + ISZ DPNEG /DONE YET? + SKP + JMP DMUL4 /YES, CHECK SIGN & RETURN + TAD ACCX1 /NO, KEEP SHIFTING + RAL + DCA ACCX1 + TAD ACCX2 + RAL + DCA ACCX2 + JMP DDIV1 + +MDCOM, 0 /COMMON ROUTINE FOR MULTIPLY & DIVIDE + DCA DPSGN /RESET SIGN + TAD ACC2 /IS DPAC POS? + SPA CLA + JMS DPNEG /NO, NEGATE + DCA ACCX2 / 0 => DPACX + DCA ACCX1 + TAD (-31 /INITIALIZE COUNTER + DCA DPNEG + CLL + TAD OPER2 /RETURN W. HIGH OPERAND + JMP I MDCOM + +MULNEG, 0 /NEGATE THE MULTIPLIER/DIVISOR + TAD OPER1 /DO LO-ORDER PART + CLL CIA + DCA OPER1 + TAD OPER2 /DO HI-ORDER PART + CMA + SZL /CARRY? + CLL IAC /YES, ADD IT IN + DCA OPER2 + ISZ DPSGN /SIGN CHANGE MADE + JMP I MULNEG + +DPNEG, 0 /NEGATE THE D.P.AC. + TAD ACC1 /DO LO-ORDER PART + CLL CIA + DCA ACC1 + TAD ACC2 /DO HI-ORDER PART + CMA + SZL /CARRY? + CLL IAC /YES, ADD IT IN + DCA ACC2 + ISZ DPSGN /SIGN CHANGE MADE + JMP I DPNEG + + +BLKTST, 0 /TEST & SET BLK + DCA DPNEG /SAVE DATA + TAD DPNEG /GET IT BACK AGAIN + ISZ DPNEG /LEGAL BLOCK NUMBER? + DCA BLK / YES IF NOT 7777 (-1) + CLA / IF NOT, CLEAR JUNK + JMP I BLKTST + + +DICAD, 0 /"DCA I CAD" IN FIELD 1 + CDF 10 + DCA I CAD + CDF 0 + JMP I DICAD + +TICAD, 0 /"TAD I CAD" IN FIELD 1 + CDF 10 + TAD I CAD + CDF 0 + JMP I TICAD + + +PAGE + /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. + +WCHEK, 0 + JMS I GWORDI /COM BUF BEGIN WITH A WORD? + JMP WCHEK2 /NO, TEST FOR PARENS, ETC. +WCHEK1, STA + TAD COMIR /YES, BACK UP COMIR + DCA COMIR + TAD TEMP /AND USE THE SPECIAL CHAR AS + JMP I .+1 / PART OF THE COMMAND STRING + RESPC+1 +/ +WCHEK2, STA + TAD COMOUT /SET UP ANOTHER A-XR + DCA DPNT + DCA CNT /RESET (OR SET) PAREN COUNT +WCHEK3, TADIDP /GET A CHAR FROM COMM. BUFF. + JMS I SORTI / & GO TEST IT + WCKLST-1 + WCKOPS-WCKLST + JMP WCHEK3 /NONE, CONTINUE SCAN +/ +WCHEK4, TAD CNT /CR, DO PARENS MATCH? + SZA CLA + JMP WCHEK1 /NO, CONTINUE COMMAND INPUT + JMP I WCHEK /YES, INPUT IS DONE +/ +WCHEK5, STA CLL RAL /SET TO -2 + IAC /AC = +1 OR -1 + TAD CNT / UPDATE PAREN COUNT + JMP WCHEK3-1 / & CONTINUE SCAN +/ +WCHEK6, JMS WCHONE / ' -- 2 CHARACTERS + JMS WCHONE / " -- 1 CHARACTER + JMP WCHEK3 /OK, CONTINUE SCAN + +WCHONE, 0 + TADIDP /GET NEXT CHAR + TAD M215 /IS IT A CR? + SNA CLA + JMP WCHEK1 /YES, DON'T EXECUTE SPECIAL + JMP I WCHONE /NO, OK + /FPP INSTRUCTION DECODING SUPPORT SUBROUTINES + +GETOP, 0 /GET OP-CODE (BITS 0-3) TO BITS 9-11 + TADICAD + AND N7000 + CLL RTL + RTL + JMP I GETOP + +GET678, 0 /GET BITS 678 TO BITS 9-11 + TADICAD + CLL RTR + RAR + AND N7 + JMP I GET678 + +MULT3, 0 /MULTIPLY AC BY THREE + DCA GETOP + TAD GETOP + CLL RAL + TAD GETOP /WORKS FOR POS OR NEG! + JMP I MULT3 + +CONDIT, 0 /OUTPUT CONDITIONAL FPP INSTRUCTION + TAD I CONDIT /GET LEADING 1 OR 2 CHARS + ISZ CONDIT + JMS I TWOT / & OUTPUT THEM + JMS GET678 /GET CONDITION CODE + JMS I SYMTYI / AS INDEX TO TABLE + FPCOND + -1 + JMP I CONDIT +SYMTYI, SYMTYP + +FLDOUT, 0 /OUTPUT FIELD DIGIT & "*" + TADICAD + AND N7 /GET FIELD + JMS I RTL6I / TO BITS 3-5 + JMS I TWOCI / & OUTPUT "F*" + 6052 / WHERE "F" IS DIGIT + JMP I FLDOUT + + + + DECIMAL /SET RADIX TO DECIMAL + +TEMPL= . /ARGUMENT BUFFER + /L(TEMPL)=180(10) +F0END= TEMPL+180 + DMPHAN-F0END /(SHOW SPACE LEFT) + + OCTAL + +PAGE /****** MUST BE NO LITERALS! ****** + +DMPHAN= 06600 /DUMP HANDLER AREA, 2 FIELD 0 PAGES + +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. + + +*TEMPL /ADD INITIALIZATION CODE WHICH IS OVERLAID + +INIMSG, 0 /INITIALIZE ERROR MESSAGES ON SCRATCH BLKS + CDF 10 + TAD I (7726 /BUT FIRST CHECK FOR "SCOPE MODE" + CDF 0 + AND N200 / (BIT 4 OF 17726) + SNA CLA + JMP INIDAT / NOT SET, GO SET UP DATE +INISCO, TAD I SPNT /SET, CHANGE RUBOUT HANDLER TO + SNA + JMP INIDAT / ERASE CHARACTERS FROM SCREEN + DCA I DPNT / AND FROM BUFFER (MUCH EASIER + JMP INISCO / THAN ON HARD COPY!) +/ +INIDAT, CDF 10 /NOW INIT EXTENDED DATE + TAD I (7666 /GET SYSTEM DATE WORD + CDF 0 + AND N7 /PICK OFF THIS YEAR PART + CIA + DCA YRTEST / AND SET TEST YEAR (NEG) + TAD I M1 /NOW GET EXTENDED YEAR BITS + AND (600 / FROM "B.I.P." WORD AND + CLL RTR / MOVE TO BITS 7,8 (*8) + RTR + TAD (106 /ADD TO A STARTING BASE OF 70[10] + CIA + TAD YRTEST /AND ADD THIS YEAR ALSO + CIA + DCA YRBASE /= 70 + EXTEND*8 + THIS YEAR + TAD I (7746 /GET JSW + AND (6777 /CLEAR BIT 2 (CAN RESTART!) + CLL RAR + STL RAL /SET BIT 11 (DON'T SAVE FIELD 1) + DCA I (7746 /& PUT IT BACK + JMS I (7607 /WRITE ERROR MESSAGES + 4610 / 6 PAGES, FIELD 1 + 0 / FROM LOC 10000 + 27 / NORMAL SAVE AREA! + SKP CLA + JMP I INIMSG /OK, JUST EXIT + TAD M200 + DCA XERR3 /FAILED, ASSUME WRITE LOCKED + TAD (ERROR / SO NO ERROR MESSAGES ON + DCA ERC15 / ERROR OR "SHOW ERRORS" + JMP I INIMSG + + +PAGE /LITERALS HERE ARE OK! + /INITIALIZATION CODE--RESIDES IN BUFFER AREA AND IS WIPED +/ OUT DURING EXECUTION. HANDLES CHAINED AND NORMAL STARTS. + +START, CLA SKP /NORMAL + STA /CHAINED (FROM CCL!) + DCA TEMP + CDF 10 + DCA I (CCBB /ZAP CCB SWITCH + CDF 0 + TAD N200 + DCA I (7745 /RESET START ADDRESS + JMS INIMSG /INIT SCOPE, DATE & ERROR MESSAGES + JMS BATSET /TEST & SET UP FOR BATCH + ISZ TEMP /CHAINED? + JMP I (201 / NO, START IT UP! + CDF 10 + TAD I M200 /YES, 1ST OUTPUT DEVICE? + CDF 0 + AND (17 /(IGNORE LENGTH SPEC) + SNA + JMP STSWIT / NO, LEAVE AS SYS + DCA DEVNO /YES, SET DEVICE NUMBER + TAD DEVNO + CALUSR /NOW DO HANDLER FETCH BY + 1 / NUMBER (PAINTING?) +STDEV, DEVHAN+1 /--2 PAGES-- + JMP STERR /ARGGGG! FAILED!!! + TAD STDEV + DCA DEVAD /SET UP HANDLER ENTRY + TAD M200 + DCA DPNT /SET UP FIELD 1 POINTER + TADIDP /GET NAME OF FILE + DCA NAM1 + TADIDP + DCA NAM2 + TADIDP + DCA NAM3 + TADIDP /GET EXTENSION + DCA NAM4 + TAD NAM1 /WAS THERE REALLY A NAME? + SZA CLA + STA / YES, SET NAME SWITCH + DCA TEMP / NO, RESET + CDF 10 + DCA I (XDNAM /CLEAR DEVICE NAME WORDS + DCA I (XDNAM+1 + TAD I DPNT /GET NEXT WORD & TEST FOR ZERO + SZA CLA + JMP STSWIT / SOMETHING NOT RIGHT! + TAD I DPNT /OK, ASSUME CCL CHAIN & SET + DCA I (XDNAM / UP DEVICE NAME + TAD I DPNT + DCA I (XDNAM+1 + TAD I (XDNAM /EMPTY? + SZA CLA + JMP STSWIT + TAD (0423 /YES, MUST BE DEFAULT NAME-- + DCA I (XDNAM / "DSK" + TAD (1300 + DCA I (XDNAM+1 +STSWIT, CDF 10 + TAD I (7643 /TEST SWITCHES + AND N200 / "/E"? + DCA ERMODE / 0= LONG, NON-0= SHORT + IAC + AND I (7643 / "/L"? [LOAD] + SNA CLA + JMP STSWO /NO, CHECK NEXT + TAD NAM4 /YES, SET DEFAULT EXTENSION + SNA + TAD (1404 / TO ".LD" + DCA NAM4 + IAC + JMP STSWEX-2 / & GO SET MODE +/ +STSWO, TAD I (7644 + AND (1000 / "/O"? [OFFSET] + SNA CLA + JMP STSWS /NO, GO CHECK LAST + TAD I (7646 /YES, GET LOW 12 BITS OF + CIA / "=NNNN" AS OFFSET AND + DCA OFFSET / IT UP + STA + JMP STSWEX-1 / & GO SET MODE +/ +STSWS, TAD I (7644 / "/S"? [SAVE] + AND (40 + SNA CLA + JMP STSWEX /NO, WAS NOT ANY THAT COUNT + TAD NAM4 /YES, SET DEFAULT EXTENSION + SNA + TAD (2326 / TO ".SV" + DCA NAM4 + IAC / & SET MODE + DCA MODSW /-1=OFF,0=NOR,+1=SV,+2=LD +STSWEX, CDF 0 + ISZ TEMP /FILE NAME SPECIFIED? + JMP I (201 / NO, JUST START + DCA CRSWT /YES, SET SWITCH TO CR, +STTLS, TLS / START TTY *** BATCH OPER. + JMS I CRLFI / & DO CR/LF + TAD NAM4 /ANY EXTENSION SPECIFIED? + SNA CLA + STA / NO--ALLOW 3 TRIES: SV, LD, NULL + DCA TEMP1 / ELSE ALLOW ONLY 1 TRY + TAD NAM4 /IF NO EXTENSION SET YET, + SNA + TAD (2326 / SET TO START DEFAULTS WITH SV + DCA NAM4 + JMP XFICHN /NOW GO DO FILE LOOKUP +/ +STERR, TLS /START UP OUTPUT *** BATCH OPER. + JMP ERCY / & GIVE ERROR! + + +PAGE + /INITIALIZATION CODE FOR BATCH OPERATION + +BATSET, 0 + TAD I M1 /TEST BIT 1 OF 07777 FOR "BIP" + RAL / (BATCH-IN-PROGRESS) + SMA CLA + JMP I BATSET / NO, INTERACTIVE MODE + TAD I M1 / YES, GET FIELD BITS OF BATCH + AND (70 / TO GENERATE A "CIF BAT" + TAD (CIF / AND SET UP 3 CALLS: + DCA CBATI / INPUT, + TAD CBATI + DCA CBATO / OUTPUT AND + TAD CBATI + DCA CBATE / ERROR. +BATMOV, TAD I SCANX1 /GET NEXT STORAGE ADDRESS + SNA + JMP I BATSET / 0 = ALL DONE! + DCA DPNT /SET UP POINTER +BATLUP, TAD I SCANX1 /GET A PATCH WORD + SNA + JMP BATMOV / 0 = GROUP END +BATPAT, CDF 0 /CHANGED FOR "TYPEB"!! + DCA I DPNT /PATCH THE WORD + CDF 0 + 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! + +SCOPLS, RELOC RUBO + JMS BTEST /BUFFER NOW EMPTY? + JMP RENEXT / YES, JUST IGNORE RUBOUT + STA + TAD COMIR /NO, BACK UP POINTER + DCA COMIR + TAD COMIR /SET UP POINTER FOR TESTING, ALSO + DCA COMOUT + JMS RUBO2 /OUTPUT BACKSPACE, SPACE, BACKSPACE + JMS I GETNI /GET RUBBED OUT CHAR AND TEST + TAD CHAR + TAD M240 / FOR A CONTROL CHAR + SPA CLA + JMS RUBO2 /YES, ERASE "^" ALSO! + JMP RENEXT /TRY FOR ANOTHER CHAR + +RUBO2, HLT /MUST BE NON-ZERO!!! + JMS I TYPEAI /OUTPUT A BACKSPACE, + "H-100 /(CTRL-H) + SPACE1 / SPACE, + JMS I TYPEAI / BACKSPACE SEQUENCE TO + "H-100 / CLEAR OFF SCREEN CHAR + JMP I RUBO2 +TYPEAI, TYPEA + 0 + + RELOC + + +BATLS, /PATCHES--ADDRESS-1, CODE, 0 WITH EXTRA 0 FOR END. + + RUBO-1 /==== INPUT PATCHES ==== + RELOC RUBO + DCA CHAR /SAVE NEW CHAR INPUT + TAD CHAR /IS THIS A FORM-FEED? + TAD RM214 + SNA + JMP RKEY+1 / YES, JUST IGNORE IT! + TAD R2 /NO, THEN IS IT A LINE-FEED? + SNA CLA + TAD RLAST / YES, WAS LAST A CARRIAGE-RETURN? + TAD M215 + SZA CLA + TAD CHAR /NO TO ONE OR OTHER, USE CHAR. + DCA RLAST / YES TO BOTH, SET TO 0! + TAD RLAST /OK, WAS IT A CR-LF PAIR? + SNA CLA + JMP RKEY+1 / YES, JUST IGNORE LF! + JMP REKEY+1 / NO, GO USE THIS CHAR + +BATINI, 5400 /IN THE BATCH FIELD +RM214, -214 +R2, 2 +RLAST, 215 /!!! CR OF ".R FUTIL" HAS AN LF !! + 0 + + RKEY+1-1 + RELOC /TO PUT 'CBATI' ON THIS PAGE +CBATI= .+1 /REALLY ON "CIF BAT" + RELOC RKEY+1 + JMS I CTRLI /CHECK FOR CONTROL KEYS + CIF /*** CIF BAT + JMS I BATINI /GET A BATCH CHARACTER +ERC17, ERROR /!!! EOF ON INPUT !!! + NOP /FILLER FOR INTERACTIVE CTRL-Q + NOP + 0 + + RKEY0-1 + RELOC RKEY0 + JMP RKEY+1 /IGNORE RUBOUT UNDER BATCH + NOP / & RETURN TO CALL+1! + 0 + + BCTRLC-1 + RELOC BCTRLC + JMP I CTRLCI /CTRL-C, ABORT JOB STREAM! + 0 + + RELOC /==== OUTPUT PATCHES ==== + 201-1 + NOP + 0 + + STTLS-1 + NOP /ZAP 3 "TLS"S USED FOR STARTUP + 0 + + STERR-1 + NOP + 0 + + RELOC /==== ERROR PATCH ==== + + XERR4-1 +CBATE= . /REALLY ON "CIF BAT" + RELOC XERR4 + CIF /*** CIF BAT + JMP I N7000 /ABORT TO BATCH FIELD! + 0 + + RELOC + + BATPAT-1 + CDF 10 /*** NEXT CODE IN FIELD 1 *** + 0 + + TYPEB-1 + RELOC +CBATO= .+1 /REALLY ON "CIF BAT" + IFDEF TYPEB + CDF 10 /*** SET UP RETURN D.F. + CIF /*** CIF BAT + JMS I .+1 /OUTPUT A CHARACTER TO LOG + 7400 /BATOUT, IN THE BATCH FIELD + CDF 0 /*** RESET D.F. + 0 + + RELOC + + 0 + PAGE + + + + + *7000 + /NEW CODE TO HANDLE 128K SUPPORT +ADFLD, 0 /ADJUSTS BANK AND FIELD FOR CCB PRINTING + TAD TEMP2 + AND (76 + CLL RTR + SZL + TAD (20 + CLL RTL + JMS I (FPRNT + JMP I ADFLD +FPRNTX, 0 /ROUTINE TO PRINT BANK BITS + AND (174 /ISOLATE BANK AND FIELD BITS + DCA FLD + TAD FLD + AND (104 /ISOLATE BANK BITS + CLL RTR /SSWITCH THEM AROUND + RAR + SZL + TAD (4 + CLL RTR + DIGIT /PRINT BANK BITS + TAD FLD + JMP I FPRNTX +FLD, 0 + +FIELD 1 /THE END OF FIELD 0! + *10000 /PUT A POINTER HERE! + + 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. + +*10002 /MESSAGE ADDRESS AT ERROR CODE NUMBER +1 (AUTO-XR) + +/LIST OF ADDRESSES OF ERROR MESSAGES + + ERMSA + ERMSB + ERMSC + ERMS14 + ERMSD + ERMSE + ERMSG + ERMSH + ERMSI + ERMSK + ERMSJ + ERMSXO + ERMSL + ERMSZ + ERMSO + ERMS11 + ERMS04 + ERMSP + ERMSQ + ERMSR + ERMS09 + ERMS08 + ERMS13 + ERMSS + ERMST + ERMSU + ERMSV + ERMSW + ERMSX + ERMSY + ERMSM + ERMS00 + ERMS01 + ERMS02 + ERMS03 + ERMS10 + ERMSF + ERMSGC + ERMSHD + ERMS05 + ERMS07 + ERMS18 + ERMS19 + ERMS20 + ERMS15 + ERMS16 +EMSEND, ERMS17 + ERMS99 + + +/ERROR MESSAGES: + +ERMSA, TEXT &ILLEGAL SINGLE-WORD COMMAND& + +ERMSB, TEXT &ILLEGAL MULTI-WORD COMMAND& + +ERMSC, TEXT &TOO MANY ")"S& + +ERMSD, TEXT &ILLEGAL FORMAT WORD& + +ERMSE, TEXT &BAD FORMAT SYNTAX& + +ERMSF, TEXT &NO FILE FOR C.C.B./HEADER REQUEST& + +ERMSGC, TEXT &BAD C.C.B (NOT A SAVE FILE)& + +ERMSHD, TEXT &BAD HEADER (NOT A LOAD MODULE)& + +ERMSG, TEXT &ILLEGAL ITEM TO SHOW& + +ERMSH, TEXT &ILLEGAL SEARCH MODIFIER& + +ERMSI, TEXT &BAD SEARCH SYNTAX& + +ERMSJ, TEXT &ILLEGAL MODE& + +ERMSK, TEXT &SET OPTION FOLLOWED BY A CR, BAD SYNTAX& + +ERMSXO, TEXT &NUMBER OR ILLEGAL SET OPTION& + +ERMSL, TEXT &NUMBER OR ILLEGAL OUTPUT OPTION& + +ERMSM, TEXT &ILLEGAL "." IN NAME (FILE OR DEVICE)& + +ERMSO, TEXT &ILLEGAL MODIFY FORMAT& + +ERMSP, TEXT &PROGRAM OR HARDWARE PROBLEM& + +ERMSQ, TEXT &BAD TERMINATOR IN SINGLE ARGUMENT& + +ERMSR, TEXT &TERMINATOR BEFORE LEGAL NUMBER INPUT& + +ERMSS, TEXT &BAD TERMINATOR IN MULTIPLE ARGUMENT& + +ERMST, TEXT &ILLEGAL CHARACTER IN EXPRESSION& + +ERMSU, TEXT &ILLEGAL USE OF "(" IN EXPRESSION& + +ERMSV, TEXT &ILLEGAL OPERATOR IN EXPRESSION& + +ERMSW, TEXT &TOO FEW ")"S IN EXPRESSION& + +ERMSX, TEXT &DIVISION BY 0 ATTEMPTED& + +ERMSY, TEXT &UNKNOWN HANDLER NAME& + +ERMSZ, TEXT &NUMBER OR ILLEGAL ERROR OPTION& + +ERMS01, TEXT &NON-& + *.-1 + +ERMS00, TEXT &FATAL READ ERROR& + +ERMS03, TEXT &NON-& + *.-1 + +ERMS02, TEXT &FATAL WRITE ERROR& + +ERMS04, TEXT &ODD START LOC OR COUNT IN OS/8 MODIFY& + +ERMS05, TEXT &BAD ADDRESS/OVERLAY (ODT COMMANDS)& + +/ERMS06, + +ERMS07, TEXT &BAD ADDRESS/OVERLAY (MODIFY)& + +ERMS08, TEXT &ARGUMENT EXPRESSION NOT TERMINATED BY ")"& + +ERMS09, TEXT &ILLEGAL DIGIT& + +ERMS10, TEXT &DUMP HANDLER ERROR& + +ERMS11, TEXT &NUMBER OR ILLEGAL DMODE OPTION& + +/ERMS12, + +ERMS13, TEXT &ILLEGAL USE OF ' OR "& + +ERMS14, TEXT &MAPPED MODE--USE LIST, NOT DUMP& + +ERMS15, TEXT &NO ERROR MESSAGES& + +ERMS16, TEXT &INPUT ERROR ON MESSAGES& + +ERMS17, TEXT &EOF ON BATCH INPUT& + +ERMS18, TEXT &ENTER FAILED& + +ERMS19, TEXT &CLOSE FAILED& + +ERMS20, TEXT &DUMP FILE OVERRUN& + +ERMS99, TEXT &DEBUG& + *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. + +GCCB, 0 /GET CORE-CONTROL-BLOCK + JMS CCBHDR /DO COMMON TEST & READ-IN + CLL RAL /ADJUSTS FOR 128K INDICATOR BIT + STL RAR + SMA CLA /1ST WORD (-# SEGS) NEG? + JMP GCCERR / NO, CAN'T BE CCB + TAD I (CCBB+3 /GET JOB STATUS WORD + AND (200 /OVERLAY BIT SET (LINK)? + SZA CLA / 0 = NO + TAD (CCBB+140-1 / 1 = YES, START ADDR-1 + CDF 0 + DCA I (OVLFLG /NO = 0; YES = ADDR-1 + CDF 10 + TAD I (CCBB+1 /2ND WORD A "CDF CIF X0"? + AND (7603 +CIA + TAD GCCCDF + SZA CLA +GCCERR, JMS ERROR1 /LOOKS BAD, JUST EXIT NOW! + ISZ GETSWX /LOOKS OK, 1ST TIME SINCE READ? + JMP GCCB2 /NO, DON'T CHANGE THINGS AGAIN + TAD (CCBB+140+3 /YES, POINT TO LENGTH WORDS +GCCB1, DCA GHDR / TO CHANGE PAGES TO BLOCKS + TAD GHDR /GET A WORD - PAGES-V7C + TAD (-6603 /V7C + SNA CLA /V7C + JMP GCCB2 / 0 = DONE + TAD I GHDR /V7C + IAC /ROUND DOWN IN 2 STEPS FOR PDP-8 + CLL RAR + DCA I GHDR /STORE A WORD - BLOCKS + TAD GHDR /UPDATE POINTER TO NEXT + TAD (4 + JMP GCCB1 +/ +GCCB2, DCA GETSWX /BE SURE SWITCH STAYS CLEAR + TAD I SEGNI /GET -# SEGMENTS + CLL RAL + STL RAR /ADJUSTS FOR 128K INDICATOR BIT +GCCCDF, CDF CIF 0 + JMP I GCCB /OK, RETURN VALUE + +GHDR, 0 /GET HEADER BLOCK (FORTRAN IV) + TAD (3 /TO SET UP CCBB+6 + JMS CCBHDR /DO COMMON TEST & READ-IN + TAD (-2 /1ST WORD MUST BE EXACTLY 2 + SZA CLA + JMP HDRERR / NO, CAN'T BE A HEADER + ISZ GETSWX /1ST TIME THRU SINCE READ? + JMP GHDR1 / NO, DON'T CHANGE ANYTHING + DCA I (CCBB+47 /YES, BE SURE THESE WORDS + DCA I (CCBB+50 / ARE 0 FOR USERS + TAD I (CCBB+1 /GET START FIELD WORD + SNA + JMP HDRERR / SHOULD BE 1 THRU 7 + CLL RTL /LOOKS OK, MOVE FIELD TO BITS + RAL / 6-8 TO HELP "SHOW HEAD" + DCA I (CCBB+1 + TAD I (CCBB+1 /ARE THESE ONLY BITS SET? + AND (7707 + SZA CLA + JMP HDRERR / NO, SOMETHING MUST BE BAD + TAD I (CCBB+3 /OK, TEST FIELD OF NEXT FREE + SNA + JMP HDRERR / SHOULD BE 1 THRU 7 + AND (7770 + SZA CLA +HDRERR, JMS ERROR1 +GHDR1, DCA GETSWX /MAKE SURE THIS IS 0 + NOP /AC NON-ZERO FOR OK-V7C + CDF CIF 0 + JMP I GHDR /OK, BACK TO USER + +CCBHDR, 0 + TAD (CCBB+3 /CCBB+6 FOR GHDR + CDF 0 + DCA I (GETPNT /SET UP POINTER FOR 'GET' + TAD I (DEVAD /GET ADDR OF DEVICE + DCA DEVADX / HANDLER & SAVE HERE + TAD I (RBLK1 /GET START BLOCK NUMBER + SNA +ERCF, JMS ERROR1 / NO FILE!!! GIVE ERROR + CDF 10 + DCA GCCBLK /OK, SET UP 1ST BLOCK + TAD I SEGNI /IS SOMETHING IN MEMORY? + SZA + JMP I CCBHDR / YES, RETURN 1ST WORD + CIF 0 + JMS I DEVADX /NO, READ 1ST BLOCK OF FILE + 0110 /READ; 1 PAGE; FIELD 1 +SEGNI, CCBB /BUFFER IS HERE +GCCBLK, 0 /BLOCK NUMBER + JMP RDERX /...BAD NEWS... + STA + DCA GETSWX /OK, SET "JUST READ" SWITCH + TAD I SEGNI /AND GET 1ST WORD + JMP I CCBHDR +/ +RDERX, CDF CIF 0 /RETURN TO FIELD 0 + JMP I (RERROR / FOR READ ERROR + +DEVADX, 0 +GETSWX, 0 + + +MSMOD, TEXT " MOD" + +MSBAD, TEXT " BAD BLOCK" + + +PAGE + /CONTINUATION OF OUTPUT COMMANDS AND ROUTINES FROM FIELD 0 + +/CONTINUATION OF 'SET' 'DDEV' HANDLER + +XDDEV1, DCA DDEVAD /SET UP HANDLER ADDRESS + TAD I (GDEV2 + DCA DDEVNO / AND DEVICE NUMBER + CDF 10 + TAD DDEVNO /LOOK AT DCW FOR SPECIFIED + TAD (7760-1 / DEVICE TO SEE IF FILE + DCA DDCWPT / STRUCTURED. + TAD I DDCWPT /BIT 0 = 1 FOR FILES + SMA CLA + TAD (212 / NO, LINE-AT-A-TIME + DCA DDEVS / YES, BLOCK-AT-A-TIME + TAD DMPADR /OK, INITIALIZE OUTPUT POINTER + DCA DMPPTR + DCA XOSIZ / AND ZERO BLOCK COUNTER + DCA DNAM / AND CLEAR ANY FILE NAME + IAC + DCA DMPBLK / AND SET BLOCK NUMBER TO 1 + JMP XDDEV2 /LAST, GO SET UP NAME FOR OUTPUT + + +/CONTINUATION OF EXECUTION OF 'OPEN' COMMAND + +XOPEN1, TAD (NAM1-1 /SET UP POINTER TO FIELD 0 FILE + DCA DPNT / NAME (NOTE: XR IN FIELD 1!!!) + TAD I DPNT /MOVE THE FILE NAME UP HERE + DCA DNAM + TAD I DPNT + DCA DNAM+1 + TAD I DPNT + DCA DNAM+2 + TAD I DPNT /GET THE EXTENSION PART + ISZ I (TEMP1 / WAS ANYTHING REALLY SPECIFIED? + JMP XOPEN2 + CLA + TAD (0425 / NO, DEFAULT TO ".DU" +XOPEN2, DCA DNAM+3 + TAD XCLNAM /SET UP POINTER TO NAME FOR USR + DCA XOBLK + CDF 10 /SET UP RETURN FIELD + TAD I DDCWPT /CLEAR ANY OPEN FILE ON + AND (7770 / THIS DEVICE SO "OPEN" + DCA I DDCWPT / CAN BE DONE WHENEVER! + CIF 0 /SET UP SUBROUTINE FIELD + TAD DDEVNO /GET DUMP DEVICE NUMBER + JMS USEUSR / AND GO GET USR & CALL IT. + 3 /ENTER +XOBLK, 0 /NAME POINTER, BECOMES START BLK +XOSIZ, 0 / BECOMES -# BLOCKS CAN USE +ERC18, JMS ERROR1 /THE ENTER FAILED! + TAD XOBLK /OK! SET UP FILE START BLOCK + DCA DMPBLK + TAD DMPADR /INITIALIZE POINTER + DCA DMPPTR +XOCEX, CDF CIF 0 + JMP MAIN1 /TRY NEXT COMMAND + +DDEVAD, 7607 /INIT ADDRESS TO "SYS:" (SEE ABOVE) +DDEVNO, 1 /INIT THIS TO "SYS:" ALSO. +DDCWPT, 7760 / THIS ALSO + +DNAM, 0 /DUMP FILE NAME, INIT TO NULL + 0 + 0 + 0 /(EXTENSION HERE) + + +/CONTINUATION OF EXECUTION OF 'CLOSE' COMMAND + +XCLOS1, TAD DNAM /IS ANY FILE OPEN? + SNA CLA + JMP XOCEX / NO, IGNORE COMMAND + TAD XCTLZ / YES, OUTPUT A CTRL-Z + JMS DMPOUT / AND FILL TO END +XCTLZ, "Z-100 + TAD XOBLK /OK, CALCULATE FILE SIZE + CIA + TAD DMPBLK /= NEXT - START + DCA XCLSIZ /= FILE SIZE IN BLOCKS + TAD DDEVNO /GET DUMP DEVICE NUMBER + CIF 0 + JMS USEUSR /GET USR AND CALL IT + 4 /CLOSE +XCLNAM, DNAM /POINTER TO FILE NAME +XCLSIZ, 0 /SIZE OF NEW FILE +ERC19, JMS ERROR1 /OH NO! CLOSE FAILED! + DCA DNAM /OK, ZAP KNOWLEDGE OF FILE + JMP XOCEX + + +DMPOUT, 0 /DUMP FILE CHARACTER OUTPUT ROUTINE + DCA DMPCHR /SAVE THE CHARACTER + TAD DMPCHR /PUT IT INTO FILE BUFFER + CDF 10 /(MUST BE SURE!) +DMPNUL, DCA I DMPPTR /INSERT AN 8 BIT CHAR + ISZ DMPPTR + TAD DMPPTR /NOW AT END OF BUFFER? + TAD (-DMPBUF-400 + SNA CLA + JMP DMPIT / YES, DUMP BUFFER NOW + TAD DMPCHR /NO, FILL FOLLOWING THIS CHAR? + CIA + TAD I DMPOUT /(THE TEST CHAR @ CALL+1) + SNA CLA + JMP DMPNUL / YES, FILL WITH NULLS! + JMP I DMPOUT / NO, EXECUTE FILL CHAR +/ +DMPIT, CIF 0 + JMS I DDEVAD /CALL DUMP FILE HANDLER + 4210 /WRITE, 2 PAGES, FIELD 1 +DMPADR, DMPBUF +DMPBLK, 1 /BLOCK NUMBER +ERC10, JMS ERROR1 /ERROR ON OUTPUT FILE! + TAD DMPADR /NOW RESET OUTPUT POINTER + DCA DMPPTR + ISZ DMPBLK /INCREMENT BLOCK NUMBER + ISZ XOSIZ /ANY MORE SPACE LEFT? + JMP I DMPOUT / YES, EXIT NOW + DCA DNAM / NO! ZAP DUMP FILE +ERC20, JMS ERROR1 / AND DIE! +DMPCHR, 0 +DMPPTR, 0 /CHARACTER OUTPUT POINTER + + +PAGE + /CONTINUATION OF ROUTINE TO OUTPUT A CHAR TO A DEVICE + +TYPE1, TAD I (DMODE /TTY= NONE, PART&-DSWIT, ALL + AND I (DSWIT / SO TEST FOR PART&DSWIT + SZA CLA + JMP TYPE2 /NO OUTPUT TO TTY + TAD I (RTL6 /GET CHARACTER TO OUTPUT +TYPEB, NOP /*** CDF 10 /*** BATCH + TSF /*** CIF BAT /*** CHANGES + JMP .-1 /*** JMS I .+1 /*** LOG + TLS /*** 7400 /*** OUTPUT + CLA /*** CDF 0 +TYPE2, STL CLA RAR /=4000 (SET AC BIT 0 FOR TEST) + TAD I (DSWIT /=4000 OR 4001 (DSWIT=1) + AND I (DMODE /FILE= PART&DSWIT OR ALL + SNA CLA + JMP TYPE3 / OUTPUT TO TTY ONLY + TAD DDEVS /FILE STRUCTURED OUTPUT? + CDF 10 + SNA + TAD I (DNAM / YES, FILE OPEN? + CDF 0 + SNA CLA + JMP TYPE3 / NO TO EITHER + TAD I (RTL6 /OK, GET CHARACTER TO OUTPUT + JMS DMPOUT /OUTPUT IT & TEST FOR END +DDEVS, 0 /TEST: 0=FILE, 212= NON-FILE +TYPE3, CDF CIF 0 + JMP TYPEX /BACK AND OUT + + +ERROR1, 0 /FIELD 1 ERROR ROUTINE HEAD + CLA /CLEAR POSSIBLE JUNK IN AC + TAD ERROR1 /MOVE RETURN ADDR TO FIELD 0 + CDF CIF 0 + DCA I (XERROR + JMP I (XERROR+1 + + +XDDEV2, CDF 0 /NAME IS OVER THERE + TAD I (NAM1 /MOVE DEVICE NAME INTO STRING + DCA XDDNAM / IN THIS FIELD FOR "SHOW DDEV" + TAD I (NAM2 + DCA XDDNAM+1 + CDF CIF 0 + JMP XSETN /BACK TO 'SET' + +MSDDEV, TEXT "@DDEV = SYS@" +XDDNAM= .-3 + +MSDEV, TEXT "@DEVICE = SYS@" + +XDNAM= .-3 /ADDR OF 1ST WORD OF DEVICE NAME + +/CONTINUATION OF CODE FROM FIELD 0 + +XDEVM, DCA XDNAM /SET 4 DEVICE NAME CHARS IN + TAD I (NAM2 / OUTPUT MESSAGE + DCA XDNAM+1 + CDF 10 + DCA I (CCBB /NO C.C.B. OR HEADER PRESENT + CDF CIF 0 + STA + DCA I (RBLK /RESET BLOCK NUMBER + JMP XSETN /GO DO NEXT OPTION + + +MSERR, TEXT " ERROR CODES: FUTIL " + *.-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. + +MSVER, TEXT "VERSION = ???" /VERS = 2 DIGITS, PATCH = 1 + *.-2 +VERTEN= VERSION%12 /TENS DIGIT +VERONE= -VERTEN^12+VERSION /ONES DIGIT + VERTEN^100+VERONE+6060 /INSERT TWO DIGITS + PATCH^100 /INSERT PATCH + NULL TERM + +/ALPHA MONTH NAMES PLUS DUMMIES FOR PDATE SUBROUTINE + +MONTHS, TEXT " 00@JAN@FEB@MAR@APR@MAY@JUN@JUL" + TEXT "AUG@SEP@OCT@NOV@DEC@ 13@ 14@ 15" + + +PAGE + /SYMBOLICS FOR PDP-8 INSTRUCTIONS: +INSLST, TEXT "AND TAD ISZ DCA JMS JMP IOT NOP " + *.-1 + +/ GROUP 1 MICRO-INSTS.: +OP1LST, TEXT "CLL CMA CML IAC BSW RAL RTL RAR RTR " + *.-1 + + +/ GROUP 2 MICRO-INST'S: +OP2LST, TEXT "SMA SZA SNL SKP SPA SNA SZL OSR HLT " + *.-1 + +/ EAE MICRO-INST'S: +EAELST, TEXT "MQA MQL SCL MUY DVI NMI SHL ASR LSR SCA " + *.-1 + TEXT "DAD DST SWBADPSZDPICDCM SAM " + *.-1 + +CLANAM, 0314 /"CLA " + 0140 + +OPRMES, 1720 /"OPR " + 2240 + / IOT INSTRUCTIONS: + +IOTTAB, 6000 + TEXT "SKON" + 6001 + TEXT "ION@" + 6002 + TEXT "IOF@" + 6003 + TEXT "SRQ@" + 6004 + TEXT "GTF@" + 6005 + TEXT "RTF@" + 6006 + TEXT "SGT@" + 6007 + TEXT "CAF@" + 6010 + TEXT "RPE@" + 6011 + TEXT "RSF@" + 6012 + TEXT "RRB@" + 6014 + TEXT "RCF@" + 6016 + TEXT "RCC@" + 6020 + TEXT "PCE@" + 6021 + TEXT "PSF@" + 6022 + TEXT "PCF@" + 6024 + TEXT "PPC@" + 6026 + TEXT "PLS@" + 6030 + TEXT "KCF@" + 6031 + TEXT "KSF@" + 6032 + TEXT "KCC@" + 6034 + TEXT "KRS@" + 6035 + TEXT "KIE@" + 6036 + TEXT "KRB@" + 6040 + TEXT "TFL@" + 6041 + TEXT "TSF@" + 6042 + TEXT "TCF@" + 6044 + TEXT "TPC@" + 6045 + TEXT "TSK@" + 6046 + TEXT "TLS@" + 6100 + TEXT "DPI@" + 6101 + TEXT "SMP@" + 6102 + TEXT "SPL@" + 6103 + TEXT "EPI@" + 6104 + TEXT "CMP@" + 6105 + TEXT "S,CMP" + 6106 + TEXT "CEP@" + 6107 + TEXT "SPO@" + 6110 + TEXT "RCTV" + 6111 + TEXT "RCRL" + 6112 + TEXT "RCRH" + 6113 + TEXT "RCCV" + 6114 + TEXT "RCGB" + 6115 + TEXT "RCLC" + 6116 + TEXT "RCCB" + 6130 + TEXT "CLZE" + 6131 + TEXT "CLSK" + 6132 + TEXT "CLOE" + 6133 + TEXT "CLAB" + 6134 + TEXT "CLEN" + 6135 + TEXT "CLSA" + 6136 + TEXT "CLBA" + 6137 + TEXT "CLCA" + 6201 + TEXT "CDF 00" + *.-1 + 6211 + TEXT "CDF 10" + *.-1 + 6221 + TEXT "CDF 20" + *.-1 + 6231 + TEXT "CDF 30" + *.-1 + 6241 + TEXT "CDF 40" + *.-1 + 6251 + TEXT "CDF 50" + *.-1 + 6261 + TEXT "CDF 60" + *.-1 + 6271 + TEXT "CDF 70" + *.-1 + 6202 + TEXT "CIF 00" + *.-1 + 6212 + TEXT "CIF 10" + *.-1 + 6222 + TEXT "CIF 20" + *.-1 + 6232 + TEXT "CIF 30" + *.-1 + 6242 + TEXT "CIF 40" + *.-1 + 6252 + TEXT "CIF 50" + *.-1 + 6262 + TEXT "CIF 60" + *.-1 + 6272 + TEXT "CIF 70" + *.-1 + 6203 + TEXT "CDIF00" + *.-1 + 6213 + TEXT "CDIF10" + *.-1 + 6223 + TEXT "CDIF20" + *.-1 + 6233 + TEXT "CDIF30" + *.-1 + 6243 + TEXT "CDIF40" + *.-1 + 6253 + TEXT "CDIF50" + *.-1 + 6263 + TEXT "CDIF60" + *.-1 + 6273 + TEXT "CDIF70" + *.-1 + 6204 + TEXT "CINT" + 6214 + TEXT "RDF@" + 6224 + TEXT "RIF@" + 6234 + TEXT "RIB@" + 6244 + TEXT "RMF@" + 6254 + TEXT "SINT" + 6264 + TEXT "CUF@" + 6274 + TEXT "SUF@" + 6550 + TEXT "FFST" + 6551 + TEXT "FPINT" + 6552 + TEXT "FPICL" + 6553 + TEXT "FPCOM" + 6554 + TEXT "FPHLT" + 6555 + TEXT "FPST" + 6556 + TEXT "FPRST" + 6557 + TEXT "FPIST" + 6561 + TEXT "FMODE" + 6563 + TEXT "FMRB" + 6564 + TEXT "FMRP" + 6565 + TEXT "FMDO" + 6567 + TEXT "FPEP" + + +NXTIOT, ZBLOCK 200 /LEAVE ROOM FOR EXPANSION + + 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. **** + /SYMBOLICS FOR FPP-12/8A INSTRUCTIONS + +MSBASE, TEXT " B+" + +MSINDI, TEXT "% B+" + +MSJNX, TEXT "JNX " + +/THE FOLLOWING STRINGS ARE PADDED WITH "@"S IN PROPER +/ PLACES TO FORCE WORD ALIGNMENT AS NEEDED. + + TEXT "LEA@" /+1 WORD 0000 +FPPINS, TEXT "FLDA@@FADD@@FSUB@@FDIV" + TEXT "FMUL@@FADDM@FSTA@@FMULM" + + TEXT "UNUSEDSTARTE" + *.-1 +FPOP00, TEXT "FNOP@@FEXIT@FPAUSEFCLA@@FNEG" + TEXT "FNORM@STARTFSTARTDJAC@@" + +FPXR1S, TEXT "ALN ATX XTA " + +FPXR2S, TEXT "ADDX *,@LDX *,@" + +FOP134, TEXT "TRAP4 TRAP3 SETX SETB JSA @JSR " + +FPCOND, TEXT "EQGELEA@NELTGTAL" + + +/CONTROL TABLES FOR FPP INSTRUCTION DECODING + +FPPMO0, 7 /MAJOR SUB-OP-CODE OF SPECIALS + 6 + 5 + 4 + 3 + 2 + 1 + 0 /END & FALL-OUT POINT + +FPPMOJ, SPCOP7 + SPCOP6 + SPCOP5 + SPCOP4 + SPCOP3 + SPCOP2 + SPCOP1 + +FPPOP0, 170 /MINOR SUB-OP-CODE OF SUB-OP-CODE + 160 / 0 SPECIALS + 150 + 140 + 130 + 120 + 110 + 100 + 70 + 60 + 50 + 40 + 30 + 20 + 10 + 00 + +FPPOPJ, SPNUSE /ALL UNUSED POSSIBILITIES + SPNUSE + SPNUSE + SPNUSE + SPNUSE + SPNUSE + SPOP11 + SPOP10 + SPNUSE + SPNUSE + SPOP05 + SPOP04 + SPO123 + SPO123 + SPO123 + /MESSAGES: + +MS01, TEXT " = " + +MS07, 0023 /"SMASK = " +MS02, TEXT "MASK = " + +MS03, TEXT "ABS. LOC = " + +MS04, TEXT "UPPER = " + +MS05, TEXT "LOWER = " + +MS06, TEXT "FORMAT = " + +MS08, TEXT "DIRECTORY" + +MS09, TEXT "OFFSET = " + +MS10, TEXT "MODE = " + +MS11, TEXT "CCB:" + +MS12, TEXT "ODT LOC = " + +MS13, TEXT ": " + +MS14, TEXT " CORE SEGS: " + +MS15, TEXT "LOOKUP FAILED" + +MS16, TEXT "FPP" + +MS17, TEXT " AT " + +MS18, TEXT " SA = " + +MS19, TEXT ", JSW = " + +MS20, TEXT "REL. LOC = " + +MS21, TEXT "PACKED" + +MS22, TEXT "ASCII" + +MS23, TEXT "OS/8" + +MS24, 2516 /"UNSIGNED" + +MS25, TEXT "SIGNED" + +MS26, TEXT "OCTAL" + +MS27, TEXT "OFFSET" + +MS28, TEXT "SAVE" + +MS29, TEXT "NORMAL" + +MS30, TEXT "OUTPUT = " + +MS31, TEXT "PDP" + +MS32, TEXT "BLOCK = " + +MS33, TEXT ") " + +MS34, TEXT "LOAD" + +MS35, TEXT "BCD" + +MS36, TEXT "BYTE" + +MS37, TEXT "FILLER = " + +MS38, TEXT "HEADER:" + +MS39, TEXT ", NEXT WORD = " + +MS40, TEXT ", LOAD V " + +MS41, TEXT ", E.P. REQ'D" + +MS42, TEXT " OVLYS START BLOCK LENGTH" + +MS43, TEXT "XS240" + /MAIN LOOP CHARACTER LIST +CCHARL, "# + "$ + "% + "& + ": + "< + "= + "> + "? + "@ + "[ + "\ + "] + "/ + "! + "+ + "- + "; + "^ + "_ +/'TYPE' COMMAND LIST +TYPEL, 211 /TAB + 233 /ALT MODES + 375 + 376 +/'XMODIF' CHECK LIST +TYPEM, 215 /CR + 212 /LF + 0 + +/ADDRESSES FOR 'OMODES' +OTABLE, BPRT /# + OSTYPE /$ + BYTEO /% + XS240O /& + SGNDP /: + OPRT /< + DPRT /= + PDPOUT /> + DIROUT /? + PDATE /@ + ASCII /[ + FPPOUT /\ + PACOUT /] + +/MAIN LOOP JUMP LIST - RESPOND TO SPECIAL CHAR +COPSL, OMODES + OMODES + OMODES + OMODES + OMODES + OMODES + OMODES /SEE ABOVE LIST + OMODES + OMODES + OMODES + OMODES + OMODES + OMODES + SLASH + EXCL + PLUS + MINUS + SEMIC + UPARR + BACKAR + RESPC + ALTMOD + ALTMOD + ALTMOD + CRCR + LFLF + +/'TYPE' JUMP LIST +TYPEOP, TYPTAB + TYPALT + TYPALT + TYPALT + TYPCR + TYPCR+1 + +/COMMAND WORD LIST FOR COMMANDS NOT FOLLOWED BY CR +CWORDL, TEXT "EVE@DUD@LIL@FIF@OPSCSTSMWOW@MOM@SHSES@WRIFEXCOC@" + +/MAIN LOOP JUMP LIST - EXECUTE A COMMAND +WOPSL, XVAL + XVAL + XDUMP + XDUMP + XLIST0 + XLIST0 + XFILE + XFILE + XOPEN + XSCAN + XSTRIN + XSMASK + XWORD + XWORD + XMODIF + XMODIF + XSHOW + XSET + XSET + XWRARG + XIF + XEXIT + MAIN1 /COMMENT + MAIN1 + +/LISTS FOR COMMANDS FOLLOWED BY A CR. +CWORL2, TEXT "REWRENEXCLCOC@" + +WOPSLL, XREWIN /REWIND + XWRITE /WRITE + MAIN1 /END + XEXIT /EXIT + XCLOSE /CLOSE + MAIN1 /COMMENT + MAIN1 + /'XFORM' LISTS ----ORDER IS CRITICAL---- +FORML, TEXT "PAP@ASA@OSOSXSX@UNU@SIS@OCO@BCB@BYBYPDPDFPF@DID@" + +FOPSL, XFCHR /PACKED (ASCII) + XFCHR + XFCHR /ASCII + XFCHR + XFCHR /OS/8 (ASCII, PACKED) + XFCHR + XFCHR /XS240 (ASCII, PACKED) + XFCHR + XFNUM /UNSIGNED (DECIMAL) + XFNUM + XFNUM /SIGNED (DECIMAL) + XFNUM + XFNUM /OCTAL + XFNUM + XFNUM /BCD + XFNUM + XFNUM /BYTE (OCTAL) + XFNUM + XFSYM /PDP (SYMBOLIC) + XFSYM + XFSYM /FPP (SYMBOLIC) + XFSYM + XFSYM /DIRECTORY + XFSYM + +/ ROUTINE ADDRESS LIST + +FTABLE, PACOUT + ASCII + OSTYPE + XS240O + DPRT + SGNDP + OPRT + BPRT + BYTEO + PDPDMP + FPPDMP + DIRDMP + +/'XSHFMT' DESCRIPTOR ADDRESS LIST +FMTLS, MS21 /PACKED ASCII + MS22 /ASCII + MS23 /OS/8 ASCII + MS43 /XS240 ASCII + MS24 /UNSIGNED DECIMAL + MS25 /SIGNED DECIMAL + MS26 /OCTAL + MS35 /BCD + MS36 /BYTE + MS31 /PDP SYMBOLIC + MS16 /FPP SYMBOLIC + MS08 /DIRECTORY + + +/'XMODIF' COMMAND LIST +MODIFL, TEXT "PAP@ASA@OSXSNUN@" + +/'XMODIF' JUMP LIST +MODIFO, XPAC0 /PACKED + XPAC0 + XASC1 /ASCII + XASC1 + XOPS1 /OS/8 + XXS20 /XS240 + XNUM2 /NUMERIC + XNUM2 + +MODADS, XMOD0 /MODIFL TEST LIST + XMOD0 + XMOD0 + XMOD0 + XMOD0 + XMOD0 + XMOD0 + XMOD0 + XMOD0 + +MODDLS, TEXT "PAASOSXSNUNUNUNUNUNUNUNU" /DEFAULT LIST + +/'XMODIF' CHARACTER JUMP LIST +MCHARO, XMODCR /CR, END + RENEXT /LF, IGNORE + +/'XIF' CHARACTER JUMP LIST +IFSKPO, XIFCR /CR, END OF LINE + RENEXT /LF, IGNORE + +/XNUM JUMP LIST +NUMOPS, XNUM1 /, + ERCQ /: + ERCQ /. + XNUM1+1 /SPACE + XNUM3 /CR + /'XSHOW' COMMAND LIST +SHOWL, TEXT "BLB@ODCCC@HEH@ABA@RER@SMVE" + *.-1 +/'XSET' COMMAND LIST +SETLST, TEXT "DDFOF@OUO@ERE@OFUPLOTEDEDMMOFIMAM@ + +/'XSHOW' JUMP LIST +SHOWOP, XSHBLK /BLOCK + XSHBLK + XSHODL /ODT LOC + XSHCCB /CCB (CORE CONTROL BLOCK) + XSHCCB + XSHHDR /HEADER (F4 LOAD MODULE) + XSHHDR + XSHABS /ABS. LOC + XSHABS + XSHREL /REL. LOC + XSHREL + XSHSMS /SMASK + XSHVER /VERSION + XSHDDEV /DDEV + XSHFMT /FORMAT + XSHFMT + XSHOUT /OUTPUT + XSHOUT + XSHERR /ERRORS + XSHERR + XSHOFF /OFFSET + XSHUPP /UPPER + XSHLOW /LOWER + ERCG /TEMP--NOT ALLOWED FOR SHOW + XSHDEV /DEVICE + ERCG /DMODE--NOT ALLOWED FOR SHOW + XSHMOD /MODE + XSHFIL /FILLER + XSHMSK /MASK + XSHMSK + +/'XSET' JUMP LIST +SETJMP, XDDEV /DDEV (DUMP DEVICE) + XFORM /FORMAT + XFORM + XOUTS /OUTPUT + XOUTS + XEMODE /ERROR (MODE) + XEMODE + XOFFS /OFFSET + XUPP /UPPER + XLOW /LOWER + XTEMP /TEMP + XDEV /DEVICE + XDMODE /DMODE (DUMP MODE) + XMODE /MODE + XFILL /FILLER + XMASK /MASK + XMASK + +/'XEMODE' COMMAND LIST +XELST, TEXT "SHS@LOL@" + +/'XEMODE' BRANCH LIST +XEOPS, XEMOD1 /SHORT + XEMOD1 + XEMOD1+1 /LONG + XEMOD1+1 + +/'XOUTS' LISTS +XOLST, TEXT "FPF@PDP@OCO@" + +XOOPS, XOUTS1-1 /FPP SYMBOLIC + XOUTS1-1 + XOUTS1 /PDP SYMBOLIC + XOUTS1 + XOUTS1+1 /OCTAL + XOUTS1+1 + +/'XMODE' COMMAND LIST +MODLST, TEXT "OFO@SAS@LOL@NON@" + +/'XMODE' JUMP LIST +MODOPS, XMODS-1 /OFFSET + XMODS-1 + XMODS+1 /SAVE FILE + XMODS+1 + XMODS /LOAD MODULE + XMODS + XMODS+2 /NORMAL + XMODS+2 + +/'XDMODE' LISTS +XDMLST, TEXT "ALPANO" + +XDMOPS, XDMODS-1 /ALL + XDMODS /PART + XDMODS+1 /NONE + + +/LIST OF DESCRIPTOR ADDRESSES FOR "SHOW MODE" + + MS27 /-1 = "OFFSET" +MODELS, MS29 / 0 = "NORMAL" + MS28 /+1 = "SAVE" + MS34 /+2 = "LOAD" + + +/LIST OF DESCRIPTOR ADDRESSES FOR "SHOW OUTPUT" + + MS16 /-1 = "FPP (SYMBOLIC)" +OUTLS, MS26 / 0 = "OCTAL" + MS31 /+1 = "PDP (SYMBOLIC)" + + +/'XWORD' COMMAND LIST +XWORCL, TEXT "UNU@" + *.-1 +/'XSTRIN' COMMAND LIST +STRLST, TEXT "FRF@TOT@ABA@MAM@ME" + + +/'XWORD' JUMP LIST +XWOROP, XWOR2 /UNEQUAL + XWOR2 + XWSFRM /FROM + XWSFRM + XWSTO /TO + XWSTO + XWSABS /ABSOLUTE + XWSABS + ERCH /MASKED--NO! + XWOR7 /MEMREF + XWOR7 + +/'XSTRIN' JUMP LIST +STROPS, XWSFRM /FROM + XWSFRM + XWSTO /TO + XWSTO + XWSABS /ABSOLUTE + XWSABS + XSTR0 /MASKED + XSTR0 + ERCH /MEMREF--NO! + /LIST OF TERMINATORS, IN ORDER, FOR 'EVAL' +TERMS, "! /1 + "& /2 + "+ /3 + "- /4 + "/ /5 + "* /6 + "( /7 + ") /10 + 215 /CR: 11 + 0 + +/'GWORD' & 'ACCEPT' COMMAND LISTS +GWLST1, "9 + "8 + "7 + "6 + "5 + "4 + "3 + "2 + "1 + "0 + 204 /^D + 213 /^K + "" + "' + "( +GWLST2, 240 /SPACE + 215 /CR + 0 + +/'GWORD' JUMP LISTS +GWOPS1, GWD4 / 9 - A NUMBER + GWD4 / 8 - A NUMBER + GWD4 / 7 - A NUMBER + GWD4 / 6 - A NUMBER + GWD4 / 5 - A NUMBER + GWD4 / 4 - A NUMBER + GWD4 / 3 - A NUMBER + GWD4 / 2 - A NUMBER + GWD4 / 1 - A NUMBER + GWD4 / 0 - A NUMBER + GWD4 /^D - A NUMBER + GWD4 /^K - A NUMBER + GWD4 / " - A NUMBER + GWD4 / ' - A NUMBER + GWD4 / ( - A NUMBER +GWOPS2, GWD2 /SPACE - TERMINATOR + GWD3 / CR - " + +/'ACCEPT' JUMP LIST +ACOPS, ACCNUM / 9 - A DIGIT + ACCNUM / 8 - A DIGIT + ACCNUM / 7 - A DIGIT + ACCNUM / 6 - A DIGIT + ACCNUM / 5 - A DIGIT + ACCNUM / 4 - A DIGIT + ACCNUM / 3 - A DIGIT + ACCNUM / 2 - A DIGIT + ACCNUM / 1 - A DIGIT + ACCNUM / 0 - A DIGIT + CTRLD / ^D SWITCH + CTRLK / ^K SWITCH + DQUOTE / " - SINGLE ASCII + SQUOTE / ' - PACKED ASCII + ERCR / ( - ILLEGAL HERE + ACCPT3-2 /SPACE - END + ACCPT3-1 /CR - END + +/'GARGS' JUMP LIST - TERMINATORS +GAROPS, GAR5 /- + GAR6 /, + ERCS /:, SHOULDN'T SEE, WILL DO ERROR + GAR4 /. + ERCS /SPACE, SHOULDN'T SEE, WILL DO 'ERROR' + GAR3 /CR + +/'GARGS' & 'ARG' COMMAND LISTS +GARLST, "- + ", +GETLST, ": +ARGLST, ". + 240 /SPACE + 215 /CR + 0 + +/'GETNT' LISTS +GETOPS, GETCOL + GETPER + GETEND + GETEND+1 + +/'ARG' JUMP LIST +ARGOPS, ARG2 + ARG3 + ARG3 + +/'WCHEK' LISTS +WCKLST, "( + ") + "" + "' + 215 + 0 + +WCKOPS, WCHEK5+1 + WCHEK5 + WCHEK6+1 + WCHEK6 + WCHEK4 + +/'EVAL' JUMP LIST 1 +EVOPS1, EVNEXT /+ + EVMIN /- + EVLPAR /( + +/'EVAL' COMMAND LISTS +EVLST1, "+ + "- + "( + 0 + +EVLST2, "L + "B + "S + "C + "F + "R + "T + "D + 0 + +/'EVAL' JUMP LIST 2 +EVOPS2, EVLOC /L (LOC) + EVBLK /B (BLK) + EVSR /S (S.R.) + EVSR+1 /C (CONTENTS) + EVFIL /F (FILLER) + EVREM /R (REMAINDER) + EVTEMP /T (TEMP) + EVDATE /D (DATE) + +/ACTION CHARS FOR "READLN" SUBROUTINE +REACTL, "R-100 /CTRL-R = RE-ECHO + "U-100 /CTRL-U = ERASE LINE + 0 + +REACTS, RECHO + RERASE + /ERROR ROUTINE ADDRESS LIST: + +ERLIST, ERCA + ERCB + ERCC + ERC14 + ERCD + ERCE + ERCG + ERCH + ERCI + ERCK + ERCJ + XSET1 + ERCL + ERCZ + ERCO + ERC11 + ERC04 + ERCP + ERCQ + ERCR + ERC09 + ERC08 + ERC13 + ERCS + ERCT + ERCU + ERCV + ERCW + ERCX + ERCY + ERCM + ERC00 + ERC01 + ERC02 + ERC03 + ERC10 + ERCF + GCCERR + HDRERR + ERC05 + ERC07 + ERC18 + ERC19 + ERC20 + ERC15 + ERC16 + ERC17 + 0 + + + DECIMAL + +SMASKB, -1 /STRING SEARCH MASK BUFFER + /L(SMASKB)=66(10) +COMB= SMASKB+66 /COMMAND INPUT BUFFER + /L(COMB)= 140(10) +PDLB= COMB+140 /PUSH-DOWN-LIST BUFFER + /**** ALSO REWIND BUFFER! **** + CCBB-PDLB /SHOW PDL SPACE + + OCTAL + + +CCBB= 16400 /CORE-CONTROL-BLOCK BUFFER AND HEADER + / BUFFER FOR LOAD MODULES, 1 PAGE FIELD 1 + +DMPBUF= 16600 /DUMP OUTPUT BUFFER, 2 PAGES FIELD 1 + +IOBUF= 17200 /DEVICE I/O DUFFER, 2 PAGES FIELD 1 + + +$$$$ + ADDED src/os8-v3f/KL8E.PA Index: src/os8-v3f/KL8E.PA ================================================================== --- /dev/null +++ src/os8-v3f/KL8E.PA @@ -0,0 +1,805 @@ +/19 SUPER TTY HANDLER FOR OS/8 +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1974,1975,1977,1978 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + +/S.W.,S.R.,H.J.,R.L.,S.R. + + *0 + + -1 + IFNDEF SLU + IFZERO SLU + IFZERO SLU-2 + IFZERO SLU-3 + +/TWO-PAGE TELETYPE HANDLER FOR OS/8 V3. +/ON INPUT, RECOGNIZES ^Z, ^C, ^U, RUBOUT +/^Z MEANS END OF INPUT, INSERT ^Z IN BUFFER, +/ PAD WITH ZEROES, AND ECHO "^Z" +/^C MEANS ABORT JOB, RETURN TO OS/8 VIA LOC 7600 TO SAVE CORE AND PRINT "^C" +/^U MEANS DELETE THE LAST LINE, ALLOW OPERATOR TO RETYPE +/ (LINE STARTS AT BEGIN OF BUFFER AND IS TERMINATED BY A CR) +/ A CR GETS ENTERED INTO BUFFER, CAUSES A LF TO ALSO ECHO +/ AND GET ENTERED INTO BUFFER, BUFFER IS THEN PADDED WITH NULLS. +/ CONVERTS LC TO UC + +/ON OUTPUT RECOGNIZES ^C, ^O, ^S, ^Q FROM KEYBOARD +/^C CAUSES JOB TO ABORT, RETURN TO OS/8 VIA LOCATION 7600 +/ TO SAVE CORE AND PRINT "^C" +/^O CAUSES ECHOING BY THE HANDLER TO CEASE +/ TYPING ANY OTHER CHARACTER RESUMES ECHOING. +/^S CAUSES THE HANDLER TO STOP SENDING TO TERMINAL +/^Q RESUMES HANDLER SENDING +/ ^S AND ^Q ARE IGNORED IN OTHER CASES + +/WHENEVER PRINTING CHARACTERS (EITHER ON OUTPUT OR WHEN ECHOING), +/ IGNORES NULLS +/ FLAGS LC WITH AN APOSTROPHE +/ HANDLES TABS CORRECTLY (SEVERAL WAYS) +/ PRINTS ESCAPE AS $ +/ DELAYS 16 MS AFTER LINEFEEDS +/ PRINTS CONTROL CHARACTERS AS "^K" + +/DOES AUTOMATIC CR/LF AT END OF LINE WIDTH. + +/MAINTENANCE RELEASE CHANGES: + +/1. ADDED KCC FOR NON-CONSOLE TELETYPES + +/V3D CHANGES: (VERSION E) + +/1. ADDED DELAY OPTION FOR VT78 +/2. ADDED SCOPE RUBOUTS +/3. CHANGED VT78 DEFAULTS +/4. REARRANGED CODE FOR SET TTY ESC AND ARROW + +/CHANGES FOR OS/78 V2 + +/1. CHANGED KSF TO KKSF, ETC. +/ (DID NOT BUMP VERSION LETTER) +/2. MADE CONDITIONALS FOR SLU2 + IFNDEF INDVC + IFNDEF OUTDVC + + KKSF=10^INDVC+6001 + KKCC=10^INDVC+6002 + KKRS=10^INDVC+6004 + KKRB=KKCC KKRS + TTSF=10^OUTDVC+6001 + TTCF=10^OUTDVC+6002 + TTPC=10^OUTDVC+6004 + TTLS=TTCF TTPC + + TTYVERSION="E&77 + /BUILD YOUR OWN TELETYPE HANDLER: + +/THIS SOURCE HAS MUMBLE LOCATIONS LEFT. + +/THE FOLLOWING CONDITIONALS ALLOW YOU TO INCLUDE OPTIONAL FEATURES. +/YOU MAY INCLUDE AS MANY OR AS FEW AS YOU DESIRE PROVIDED THERE +/IS ROOM LEFT. + +/CONDITIONAL LOCATIONS LOCATIONS INCLUDED +/VARIABLE PAGE 1 PAGE 2 FEATURES + +/ DELAY 0 7 DELAY AFTER GIVEN CHAR +/ CTRL 0 3 PRINT CONTROL CHARS AS ^K +/ RUB 0 0 PRINT CHAR RUBBED OUT ON RUBOUTS +/ SIMTAB 0 10 SIMULATE TABS AS SPACES +/ SLOTAB 0 6 PUT OUT 2 RUBOUTS AFTER A TAB +/ ESC 0 10 PRINT ESCAPE AS $ +/ FLAGLC 0 12 FLAG LOWER CASE CHARS ON OUTPUT +/ CNVLC 0 7 CONVERT LOWER CASE ON INPUT TO UPPER CASE +/ ALTMOD 0 11 CONVERT ALTMODES (175,176) TO ESCAPE (33) +/ PAUS 0 20 PAUSE BETWEEN PAGES +/ FREE LOCS: 2 33 + + VT78=1 /SET TO 0 TO ALLOW OTHER PARAMETERS + /SET TO 1 TO FORCE OTHER PARAMETERS TO VT78 COMPATIBLE + + DELAY=0 /SET NON-ZERO TO ALLOW DELAY AFTER ANY CHAR (12=CR) + /TYPICALLY AFTER LF FOR HIGH SPEED VT05 + /SET VALUE OF DELAY = 7-BIT CHAR TO DELAY AFTER + + CTRL=1 /SET TO 1 TO ECHO CONTROL CHARS AS ^K + /SET TO 0 TO ACCEPT CONTROL CHARACTERS AND PUT + /IN BUFFER, BUT NOT ECHO THEM (EXCEPT THE USUAL) + RUB=1 /SET TO 0 TO ECHO EACH RUBOUT BY TYPING A BACK SLASH + /SET TO 1 TO ECHO CHARS RUBBED OUT UPON RUB-OUT + /SET TO 4000 TO PERFORM SCOPE TYPE RUBOUTS + SIMTAB=1 /SET TO 1 TO SIMULATE TABS AS THE CORRECT NUMBER OF SPACES + /SET TO 0 TO TYPE TABS AS TABS + SLOTAB=0 /SET TO 1 TO TYPE 2 RUBOUTS AFTER A TAB + /ONLY IS APPLICABLE IF SIMTAB=0 + ALTMOD=0 /SET TO 1 TO CONVERT 175,176 TO 33 + /(UPPER CASE TERMINALS ONLY) + ESC=1 /SET TO 1 TO ECHO ESCAPE AS $ + /SET TO 0 TO ECHO ESCAPE AS A CONTROL CHAR (^[) + FLAGLC=1 /SET TO 1 TO FLAG LOWER CASE CHARS ON OUTPUT + /THIS IS FOR PEOPLE NOT PRIVELIDGED ENOUGH TO + /OWN A LOWER CASE TERMINAL + /SET TO 0 TO PRINT LOWER CASE CHARS AS IS + CNVLC=0 /SET TO 1 TO CONVERT LOWER CASE CHARS ON INPUT TO UPPER CASE + /SET TO 0 TO ACCEPT INPUTTED LOWER CASE CHARS AS IS + /THIS IS FOR PEOPLE WHO ARE HANDICAPPED BY A LOWER CASE + /TERMINAL AND ONLY WANT UPPER CASE + PAUS=200 /NON-0 PAUSES BETWEEN SCOPE PAGES + HEIGHT=30 /NUMBER OF LINES PER SCREEN + +/SOME OF THE ABOVE OPTIONS SHOULD ACTUALLY BE IMPLEMENTED +/IN SUCH A MANNER THAT THE USER CAN CHANGE THEM VIA AN ALTER +/RATHER THAN HAVE TO REASSEMBLE. + + IFNZRO VT78 < + DELAY=0 + CTRL=1 + RUB=4000 + SIMTAB=0 + SLOTAB=0 + ALTMOD=0 + ESC=1 + FLAGLC=0 + CNVLC=0 + IFNZRO INDVC-3 + > + /CROSS PAGE LINKAGE: + +/THIS CODE MUST BE ABLE TO LOAD INTO ANY TWO PAGES OF CORE +/THE ENTRY POINT IS AT THE NEXT LOCATION TO THE END OF THE FIRST PAGE +/AT THE END OF THE FIRST PAGE WE JMS TO PLINK, +/THIS LEAVES THE ADDRESS OF THE FIRST LOCATION OF THE NEXT PAGE +/IN LOCATION 'PLINK' . THIS JUST HAPPENS TO BE THE ADDRESS +/OF BOTH TTYPCH AND TTYGCH. + +/TTYPCH AND TTYGCH SHARE THE SAME ENTRY POINT. +/IF IT IS CALLED WITH A 0 AC, IT IS A CALL TO TTYGCH, +/IF IT IS CALLED WITH A NON-ZERO AC, IT IS A CALL TO TTYPCH. + +/RETURN 1 MEANS GOT RUBOUT +/TTYGCH TAKES RETURN 2 IF IT GOT A ^Z. +/OTHERWISE IT TAKES RETURN 3 WITH CHARACTER GOTTEN IN AC. + +/TTYPCH TAKES RETURN 1 IF IT WANTS THE HANDLER TO GO AWAY, +/I.E IF IT SAW A ^Z. +/AC IS NORMALLY NON-ZERO UPON RETURN +/AC IS POSITIVE MEANS DO A CRLF + +/WHEN ECHOING WE WANT TO CALL TTYPRT +/BUT OTHERWISE WE WANT TO CALL TTYPCH (WHICH DOES ADDITIONAL +/STUFF LIKE CHECK ^O, ^Q, ETC. +/WE TELL BY WHETHER OR NOT TTYGCH HAD BEEN PREVIOUSLY CALLED. + *200 + +PLINK, 0 /GETS ADDRESS OF TTYPCH AND TTYGCH (START OF NEXT PAGE) + STL CLA RAR /4000 + TAD I TTY /RETRIEVE FUNCTION WORD, BUT PUT R/W BIT IN LINK + AND L3700 /EXTRACT NUMBER OF DOUBLE-WORDS TO TRANSFER + CMA /GET COUNT+1 + DCA BUFSIZ /STORE AWAY + RDF /FIND OUT THE USER'S DATA FIELD + TAD CIFCDF /FORM OUR EXIT CIF CDF + DCA TTYXIT /STORE AWAY FOR EXIT ROUTINE + TAD TTY70 /GET FUNCTION WORD +L776, AND I TTY /ISOLATE FIELD OF BUFFER + TAD TTYCDF /FORM CDF TO FIELD OF BUFFER + DCA TTCDBF /STORE WHERE IT WILL BE USEFUL + /AT SAME TIME, INITIALIZE TTYEOF + ISZ TTY /POINT TO BUFFER ADDRESS + TAD I TTY /AND GET IT + DCA BUFSTRT /AND SAVE IT + ISZ TTY /POINT TO BLOCK # +TTY376, ISZ TTY /POINT TO ERROR RETURN +SHIFT, /OUTPUT SHIFT REGISTER +TTYEOF, /0 IF SAW CR OR ^Z AND WISH TO PAD BUFFER WITH 0'S +TTCDBF, HLT /CDF BUFFER FIELD + JMP TTYKLG +TTYLP, SNL CLA /LINK=1 MEANS OUTPUT + JMP TTYGET /INPUT IS FROM TTY: + /LINK MUST BE SET FIRST TIME THROUGH HERE. +/IT ACTS AS A GUARD BIT IN THE SHIFT REGISTER +ROTL, RTL + RTL + SPA /DO WE HAVE 8 BITS SHIFTED IN? + JMP TELP + DCA SHIFT /SAVE SHIFT REGISTER + TAD I BUFSTRT + SZA + JMS PUNCH /PRINT A CHARACTER + TAD I BUFSTRT + ISZ BUFSTRT /BUMP INPUT POINTER +TT7400, 7400 /PROTECT ISZ + AND TT7400 + CLL RAL + TAD SHIFT /SHIFT HIGH ORDER 4 BITS INTO + JMP ROTL /SHIFT REGISTER +TELP, JMS PUNCH /PRINT 3RD CHARACTER OF DOUBLE-WORD + STL /***KLUDGE +TTYKLG, ISZ BUFSIZ /DONE? + JMP TTYLP /NOT YET +TTYX, TAD TTYEOF /IF INPUT AND WE WERE PADDING WITH 0'S + SZA CLA /TAKE SOFT ERROR EXIT +TTYRTN, ISZ TTY /POINT TO NORMAL RETURN + /CAN'T GET ERROR OR END-OF-FILE ON OUTPUT +TTYXIT, HLT /RETURN TO USER'S FIELD + JMP I TTY /RETURN TO USER +TTYCA, 0 +TTYWC, 0 +BUFSIZ, 0 +BUFSTRT,0 +TTY70, 70 + +PUNCH, 0 /NEVER CALL TTYPCH WITH ZERO AC + JMS I PLINK /CALL TTYPCH + JMP TTYRTN /GO AWAY, WE SAW A ^Z +L7700, SMA CLA /DID WE REACH END OF TTY LINE? + JMS CRLF /YES, PERFORM CR/LF + JMP I PUNCH /RETURN + +TMP, +CRLF, 0 + TAD L215 + JMS I PLINK /CALL TTYPCH TO PRINT CR +L215, 215 /CAN'T RETURN HERE + CLA /**** + TAD L212 + JMS I PLINK /CALL TTYPCH TO PRINT LF +L212, 212 /CAN'T RETURN HERE + CLA /**** + JMP I CRLF /RETURN + CTRLU, JMS CRLF /PERFORM A CR/LF +TTYGET, TAD BUFSTRT + DCA TTYCA /POINT TO START OF BUFFER + TAD BUFSIZ + CLL RAL /CONVERT DOUBLE-WORDS TO WORDS +DCAWC, DCA TTYWC /SET SIZE OF BUFFER +TSTEND, TAD TTYEOF + SNA CLA + JMP ZERO + JMS I PLINK /CALL TTYGCH TO GET A CHARACTER + JMP RUBOUT /RETURN 1 MEANS SAW RUBOUT +ZERO, DCA I TTYCA /RETURN 2 MEANS GOT CHARACTER + /STORE AWAY TEMPORARILY + /USING USER'S BUFFER AS A TEMP LOCATION + TAD I TTYCA /GET BACK CHARACTER + IFNZRO .-320 <_ERROR> + SZA + JMS PUNCH /ECHO IT + TAD I TTYCA /GET IT AGAIN + TAD M32 /-^Z + SNA + JMP CTRLZ + TAD L5 /^Z-^U + SNA /IS IT ^U? + JMP CTRLU /YES + TAD L7 +GRUDGE, DCA TMP + ISZ TTYCA /NO +L7, 7 + ISZ TTYWC /IS BUFFER FULL? +TT10, SKP + JMP TTYX + ISZ TMP /WAS LAST CHAR A CR? + JMP TSTEND /NO + DCA TTYEOF /YES, SET "PAD WITH 0'S" FLAG + ISZ TTY /POINT TO NORMAL RETURN + /CR IS NOT AN ERROR OR END-OF-FILE + TAD L212 /IF LAST CHAR INPUT WAS CR, NOW PRETEND LF WAS INPUT + JMP ZERO /REJOIN PROCESSING + +CTRLZ, DCA TTYEOF + JMS CRLF + JMP GRUDGE + +M32, -32 +L5, 5 +L3700, 3700 +CIFCDF, CIF CDF 0 +TTYCDF, CDF 0 + +/TTYEOF IS ZERO MEANS PAD BUFFER WITH ZEROES + /DON'T DO YET: +/RUBOUT, AND TTYWC /177 IN AC +/ SNA CLA +/ JMP CTRLU + +RUBOUT, KKCC /TTYGCH DOESN'T CLEAR RO FROM BUFFER + TAD TTYCA + CIA + TAD BUFSTRT + SNA CLA /ARE WE AT BEGIN OF BUFFER? + JMP CTRLU /YES + STA + TAD TTYCA + DCA TTYCA + IFZERO RUB < +LSLASH, "\ + TAD LSLASH /PRINT A BACK SLASH FOR EACH RUBBED OUT CHAR + > + IFNZRO RUB&4000+RUB /PRINT CHAR JUST DELETED + IFNZRO RUB&4000 /BACKSPACE-SPACE-BACKSPACE + JMS PUNCH + STA + TAD TTYWC + JMP DCAWC /BUMP BACK WC AND GET ANOTHER CHAR + + ZBLOCK 376-. +TTY, TTYVERSION /ENTRY POINT TO HANDLER + JMS PLINK /SET UP CROSS PAGE LINKAGE + IFNZRO TTY-376 + PAGE + /INTERLUDE: + +/USA STANDARD CODE FOR INFORMATION INTERCHANGE: + +/ 000 001 010 011 100 101 110 111 +/ +/ 0000 NUL DLE SP 0 @ P ' 'P +/ +/ 0001 SOH DC1 ! 1 A Q 'A 'Q +/ +/ 0010 STX DC2 " 2 B R 'B 'R +/ +/ 0011 ETX DC3 # 3 C S 'C 'S +/ +/ 0100 EOT DC4 $ 4 D T 'D 'T +/ +/ 0101 ENQ NAK % 5 E U 'E 'U +/ +/ 0110 ACK SYN & 6 F V 'F 'V +/ +/ 0111 BEL ETB ' 7 G W 'G 'W +/ +/ 1000 BS CAN ( 8 H X 'H 'X +/ +/ 1001 HT EM ) 9 I Y 'I 'Y +/ +/ 1010 LF SUB * : J Z 'J 'Z +/ +/ 1011 VT ESC + ; K [ 'K '[ +/ +/ 1100 FF FS , < L \ 'L '\ +/ +/ 1101 CR GS - = M ] 'M '] +/ +/ 1110 SO RS . > N ^ 'N '^ +/ +/ 1111 SI US / ? O _ 'O '_ +/ + /TTYGCH: GETS A CHAR FROM KBD +/ IF GOT ^Z, IT SETS TTYEOF FLAG +/ LEAVES IT IN AC IN 7-BIT + +/TTYPRT: PRINTS CHAR IN AC ON TTY +/ IGNORES NULLS +/ PRINTS ^X ON CONTROL CHARS (EXCEPT CR, LF, FF, VT, TAB) +/ PRINTS 'X ON LOWER CASE + +/HANDLES TABS CORRECTLY +/ AND AUTOMATICALLY PRINTS CR/LF AT EOL +/ PRINTS ESCAPE AS $ + +/TTYTLS: USED TO ACTUALLY PRINT CHAR +/ IT HANDLES TABS AUTOMATICALLY +/ AND CR/LF'S AT END OF LINE + +/TTYPCH: IT USES TTYPRT TO PRINT CHAR BUT ALSO RESPONDS TO +/ ^C, ^O, ^S, ^Q. +/ IF ^Z IS BEING PRINTED, IT THEN STOPS FURTHER PRINTING + /MUST BE AT TOP OF PAGE +TTYPCH, /ENTRY POINT TO TTY PUNCH ROUTINE + /OR TTY PRINT ROUTINE +TTYGCH, 0 /ENTRY POINT TO TTY GET CHAR ROUTINE + SNA + JMS TGCH /ZERO AC-MEANT CALL TO TTYGCH +PCH, AND (177 /FORCE TO 7-BIT + DCA TCHAR + TAD TGCH +M140, SZA CLA /ARE WE ECHOING? + JMP ECHO /YES, IGNORE ^S AND STUFF +K5, 5 /MUST BE AT REL 10 + TAD TCHAR + TAD (-32 + IFZERO PAUS < + SNA CLA + JMP I TTYPCH + > + IFNZRO PAUS < + SNA + JMP I TTYPCH + TAD L15 /32-15 + SNA CLA /LOOK FOR CR + ISZ LINCNT /AT END OF PAGE? + JMP NOPAUS /NOT AT CR, OR AT CR BUT NOT AT END OF PAGE +L15, 15 /MUST BE HERE FOR SET + TAD PAUSN + DCA TTYTLS /SET COUNT FOR OUTER LOOP + ISZ LINCNT + JMP .-1 + ISZ TTYTLS + JMP .-3 + TAD LINSYZ + DCA LINCNT + > +NOPAUS, JMS TTYTST + TAD (203-217 /NO + SNA /^O? + DCA TCHAR /YES, SET TO NULL SO IT WILL BE IGNORED + TAD (217-223 /NO + SZA CLA /^S? + JMP ECHO /NO, IGNORE CHAR +TTCTLQ, JMS TTYTST + TAD (203-221 /NO, NOTHING ELSE MATTERS UNTIL ^Q + SZA CLA /^Q? + JMP TTCTLQ /NO, SUSPEND OUTPUTTING +TTY32, KKCC /YES, REMOVE ^Q FROM BUFFER +/HAD NO ROOM FOR: +/ TAD LINSYZ +/ DCA LINCNT +ECHO, DCA TGCH + ISZ TTYPCH + IFNZRO ESC < + TAD TCHAR + TAD (-33 + SZA CLA + JMP .+3 + TAD L44 + DCA TCHAR +L44, 44 + > + TAD TCHAR + SNA + JMP TTYCTO /IGNORE NULLS + IFNZRO RUB&4000 < + TAD (-10 + SNA + JMP RUBO + TAD (10-16 + > + IFZERO RUB&4000 < + TAD (-16 + > +TTY100, CLL +TTY10, TAD K5 +TTY240, SZA /TAB? + JMP NOTAB + IFNZRO SIMTAB < +TTYTAB, TAD TTY240 + JMS TTYTLS +TTY7, 7 /HERE FOR NO SPECIAL REASON + TAD TABCTR + AND TTY7 + SZA CLA + JMP TTYTAB + JMP TTYCTO + > + IFNZRO SLOTAB < + TAD TCHAR + JMS TTYTLS + TAD (177 + JMS TTYTLS + TAD (177 + JMP PRIN+1 + > + IFZERO SIMTAB+SLOTAB + +/BUG: IF HARDWARE TABS, DON'T COUNT COLUMNS CORRECTLY + + IFNZRO RUB&4000 < +RUBO, TAD TTY10 /OUTPUT BACKSPACE-RUBOUT-BACKSPACE + JMS TTYTLS + TAD TTY240 + JMS TTYTLS + TAD (-4 + TAD TABCTR + JMP PREPRN + > + NOTAB, SZL CLA + JMP SPCHR /DON'T UPARROW CHARS LF,CR,TAB,VT,FF + IFNZRO FLAGLC < + TAD TCHAR + AND TTY140 + TAD M140 + SZA CLA /IS IT LC? + JMP NOLC /NO +TTYQUO, "' + TAD TTYQUO /YES + JMS TTYTLS /PRINT QUOTE + TAD M40 + JMP PRIN /PRINT UPPER CASE OF CHAR + > +NOLC, TAD TCHAR /NO, GET BACK CHAR + AND TTY140 /HIGH ORDER BITS IRRELEVANT + IFNZRO CTRL < +M40, SMA SZA CLA /CAN'T BE NEGATIVE + JMP PRIN /NOT A CONTROL CHARACTER + TAD TTYUPA /ECHO 201-237 AS ^X (EXCEPT 211-215) + JMS TTYTLS + TAD TTY100 /ADD X100 TO ^K TO GET K + > + IFZERO CTRL < + SNA CLA /IS CHAR A CONTROL CHAR? + JMP TTYCTO /YES, DON'T ECHO CONTROL CHARACTERS EXCEPT FOR 211-215 + > +PRIN, TAD TCHAR + JMS TTYTLS +TTYCTO, TAD TABCTR /RETURN TABCNT IN AC + JMP I TTYPCH + + IFZERO CTRL < +M40, -40 + > + +TTY140, +SPCHR, STA CLL + TAD LINSIZ +PREPRN, DCA TABCTR /THESE CHARS RESET COLUMN COUNTER + JMP PRIN + TGCH, 0 /NON-ZERO MEANS TTYGCH WAS CALLED + KKSF + JMP .-1 /WAIT FOR CHAR TO BE TYPED + JMS TTYTST +/WILD: (DON'T PUT IN) SZA CLA /FALL THRU AND RETURN R.O. +/ ISZ TTYGCH + TAD (203-377 + SNA CLA /TAKE RETURN 1 ON RUB OUT + JMP I TTYGCH /"CLUMSY" - R.L. (9/18/73) + ISZ TTYGCH + KKRB /GET CHARACTER +TTYAND, AND (177 /MUST RETURN CHAR IN 7-BIT + IFNZRO CNVLC < + DCA TCHAR + TAD TCHAR + AND TTY140 + TAD M140 + SNA CLA /IS IT LC? + TAD M40 /YES + TAD TCHAR /NO + > + IFNZRO ALTMOD < + TAD (-175 /IS IT 175 OR 176? + SMA + JMP CONV /YES, CONVERT ALTMODE TO ESCAPE + TAD (175 /NO, RESTORE CHAR + > + JMP I TTYGCH /TAKE RETURN 3 + +/SHOULDN'T TABCTR BE INITIALIZED TO C(LINSIZ) UPON ENTRY? + +TABCTR, -110 + +TTYTLS, 0 + TTLS + IFNZRO DELAY < + TAD (-DELAY + SZA CLA + STA + > +TTYTSF, TTSF + JMP .-1 + IFNZRO DELAY < + IAC + SZA /19.66 MS IS G.T. 1/60 SEC + JMP TTYTSF + > + ISZ TABCTR +TTYUPA, "^ +TT7600, 7600 + JMP I TTYTLS +LINSIZ, -110 + + IFNZRO PAUS < +LINSYZ, -HEIGHT +LINCNT, -HEIGHT +PAUSN, -PAUS + > + + IFNZRO ALTMOD < + IFNZRO KKCC-6032 < +CONV, CLA + TAD (33 + JMP I TTYGCH + > + IFZERO KKCC-6032 < +CONV, CLA IAC + TAD TTY32 /DEVICE DEPENDENT + JMP TTYAND + > + > + TCHAR, 0 + +/TTYTST: READS KEYBOARD STATICALLY AND RESPONDS TO ^C +/ OTHERWISE RETURNS CHAR (8-BIT) MINUS 203 IN AC. +/ IF FLAG IS NOT UP, IT RETURNS A 1. + +TTYTST, 0 + TAD TT7600 /OR CHAR IN + KKRS + TAD (-7603 /-7603=175 + KKSF + CLA IAC /STUFF IN BUFFER IS UNRELIABLE IF FLAG ISN'T UP + SZA + JMP I TTYTST + IFNZRO INDVC-3 + CIF CDF 0 /BRANCH TO OS/8 MONITOR AT 07600 + JMP I TT7600 /IT WILL PRINT "^C" FOR CHAR IN BUFFER + PAGE + / DYNAMICALLY MODIFYING THE KL8E HANDLER + +/ *** I M P O R T A N T *** + +/ THIS HANDLER CAN BE DYNAMICALLY CHANGED VIA SET COMMANDS. +/ CONSEQUENTLY, IT IS EXTREMELY IMPORTANT THAT PEOPLE +/ WHO MODIFY THIS SOURCE DO NOT AFFECT THE ALGORITHMS +/ NECESSARY TO PERFORM SUCH MODIFICATIONS. + +/ THIS ALGORITHM IS EXPLAINED BELOW. + +/ SET TTY WIDTH=N + +/ SEARCH LOCATIONS 200-377 FOR A 7600. CALL ITS ADDRESS X. +/ LET Y BE THE INSTRUCTION AT LOCATION X+1. +/ FORM THE (RELATIVE) ADDRESS T=Y&177+200-1. +/ THEN LOCATIONS T AND X+2 CONTAIN MINUS THE TTY WIDTH. +/ THE WIDTH MUST BE A MULTIPLE OF 10 AND MUST NOT BE 200. +/ (BECAUSE -200 IS THE MAGIC 7600) + +/ SET TTY CODE XX + +/ SEARCH ENTIRE HANDLER FOR INSTRUCTIONS OF THE FORM 6XXY +/ WHERE XX IS NOT 20 OR 21, +/ AND FURTHERMORE DON'T INCLUDE A 6031 IF 2 LOCATIONS +/ FOLLOWING IS A 7650 +/ AND DON'T INCLUDE A 6034 IF 4 LOCATIONS FOLLOWING IS A 7650. + + +/ SET TTY [NO] ECHO + +/ THE WORD INVOLVED IS AT (RELATIVE) LOCATION 120. +/ SET TO 7440 TO ECHO. +/ SET TO 7610 TO SUPPRESS ECHOING. + + +/ SET TTY LC + +/ SEARCH LOCATIONS 200-377 FOR A 377. CALL ITS ADDRESS X. +/ LOOK AT LOCATION X+5. +/ IF THIS LOCATION IS NOT A 7650, THEN LC TO UC CONVERSION +/ WAS NOT ENABLED AT ASSEMBLY TIME. +/ IF THE FEATURE IS ENABLED, CHANGE LOCATION X+5 TO A 7610 +/ TO PREVENT THE CONVERSION. TO ALLOW CONVERSION, SET +/ LOCATION X+5 BACK TO 7650. + +/ SET TTY PAGE + +/ SEARCH LOCATIONS 215-300 FOR A 7450. CALL ITS ADDRESS X. +/ SET X+3 TO 7640 TO ENABLE ^S, ^Q. +/ SET X+3 TO 7200 TO DISABLE ^S, ^Q. + / SET TTY TAB + +/ SEARCH LOCATIONS 200-300 FOR A 7. +/ IF NOT FOUND, SIMULATED TABS WAS NOT ENABLED AT ASSEMBLY TIME. +/ IF FOUND, CALL ITS ADDRESS X. +/ TO PATCH OUT SIMULATED TABS: +/ MOVE C(X-12) TO LOCATION X-2 +/ CHANGE LOCATION X+3 TO A 7610 +/ TO RESTORE SIMULATED TABS: +/ SET LOCATION X-2 TO X-4&77+1200 +/ CHANGE LOCATION X+3 TO A 7640 + +/ SET TTY FILL + +/ THE LITERAL 177 MUST REMAIN AT THE END OF PAGE 2 +/ SEARCH LOCATIONS 200-300 FOR A 1377. +/ IF NOT FOUND, THEN FILL CHARACTERS WERE NOT ENABLED AT ASSEMBLY +/ TIME. IF FOUND, CALL ITS ADDRESS X. +/ TO PATCH OUT FILL CHARACTERS, MOVE C(X+3) TO LOCATION X-1. +/ TO RESTORE FILL CHARACTERS, MOVE C(X+1) TO LOCATION X-1. + +/ SET TTY FLAGLC + +/ SEARCH LOCATIONS 200-377 FOR A 247. +/ IF NOT FOUND, LOWER CASE FLAGGING WAS NOT ENABLED AT ASSEMBLY TIME. +/ IF FOUND, CALL ITS ADDRESS X. +/ TO DISABLE FLAGGING, SET LOCATION X-2 TO A 7200. +/ TO RE-ENABLE FLAGGING, SET LOCATION X-2 TO A 7640. + +/ SET TTY PAUSE [N] + +/ SEARCH LOCATIONS 200-300 FOR A 15. +/ IF NOT FOUND, PAUSING WAS NOT ENABLED AT ASSEMBLY TIME. +/ IF FOUND, CALL ITS ADDRESS X. +/ TO DISABLE PAUSING AFTER A FULL SCREEN, +/ SET LOCATION X-3 TO A 7610. +/ TO RE-ENABLE PAUSING, SET LOCATION X-3 TO A 7650. +/ TO SET PAUSE DURATION, SEARCH LOCATIONS 300-377 FOR A 7600, +/ CALLING ITS ADDRESS X. THEN (MINUS THE) PAUSE DURATION IS AT +/ LOCATION X+5. + +/ SET TTY HEIGHT + +/ THIS IS ONLY APPLICABLE IF SET TTY PAUSE HAS BEEN ASSEMBLED IN +/ (A 15 CAN BE FOUND ON SECOND PAGE). +/ NEGATIVE OF HEIGHT MUST BE SET IN BOTH LOCATIONS X+3 AND X+4 +/ WHERE X IS THE ADDRESS OF A 7600 AS IN ABOVE. + / SET TTY ESCAPE + +/ SEARCH LOCATIONS 200-377 FOR A 44. +/ IF NOT FOUND, THEN $ WAS NOT ASSEMBLED INTO TTY HANDLER. +/ IF FOUND, CALL ITS ADDRESS X. +/ TO DISABLE PRINTING ESCAPE AS $, SET LOCATION X-4 TO A 'CLA'. +/ TO CAUSE ESCAPE TO PRINT AS AN ESCAPE, SET LOCATION X-4 TO SZA CLA. + +/ SET TTY ARROW + +/ SEARCH LOCATIONS 200-377 FOR 7740. + +/ IF NOT FOUND, USING OLD HANDLER. +/ CALL ITS ADDRESS X. +/ IF LOCATION X+1 IS MORE THAN 7000, +/ THEN UPARROW MODE WAS NOT ASSEMBLED INTO KL8E. +/ OTHERWISE, TO ALLOW ARROWS, SET LOCATION X+3 TO THE +/ CONTENTS OF LOCATION X+6. +/ TO CAUSE CONTROL CHARACTERS TO ECHO AS IS, SET +/ LOCATION X+3 TO 'SKP CLA'. +/ NOTE THAT THIS IS A DIFFERENT OPTION THAN ASSEMBLING CTRL=0. + IFDEF TEST < + *600 + +/TEST ROUTINE FOR KL8E HANDLER + +GO, JMS I (TTY /CALL HANDLER + 0600 /READ SIX PAGES + 1000 /BUFFER AT 01000 + 0001 /BLOCK 1 + HLT /ERROR RETURN + JMS I (TTY /CALL HANDLER AGAIN + 4600 /OUTPUT SIX PAGES + 1000 + 0001 + HLT + CLA + JMP GO + > + $ + ADDED src/os8-v3f/OS78.BI Index: src/os8-v3f/OS78.BI ================================================================== --- /dev/null +++ src/os8-v3f/OS78.BI @@ -0,0 +1,40 @@ +$JOB UPDATE OS/78 V2 TO RX02 FLOPPIES +.R PIP +*FUTIL.SV,RESORC.SV,BUILD.SV + 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/PAL8.PA Index: src/os8-v3f/PAL8.PA ================================================================== --- /dev/null +++ src/os8-v3f/PAL8.PA @@ -0,0 +1,5398 @@ +/2 PAL8 ASSEMBLER FOR OS/8 MONITOR VERSION 13 +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1970,1971,1972,1973,1974,1975 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /1-OCT-75 MB/MB/SM/MB/RL/JR/SR + +DECIMAL + +VERSION= 13 +SUBVERSION= "A + +OCTAL + +/PAL8 IS AN 8K THREE PASS ASSEMBLER DESIGNED +/TO BE COMPATIBLE WITH THE OS/8 SYSTEM. + +/PASS 1 READS THE INPUT (SOURCE) FILE AND CONSTRUCTS +/THE SYMBOL TABLE. + +/PASS 2 GENERATES THE BINARY (OBJECT) FILE, WHICH +/MAY BE LOADED WITH THE ABSOLUTE (BINARY) LOADER. + +/PASS 3 GENERATES THE OCTAL SYMBOLIC ASSEMBLY +/LISTING. + +/PAL8 IS COMPATIBLE IN MOST RESPECTS WITH PAL III, MACRO-8 +/4K PAL-D, AND 8K PAL-D, AS WELL AS THE CROSS-ASSEMBLER PAL10. + + IFNDEF HASH /DEFINE FOR HASH SYMBOL TABLE +/SET HASH=0 TO GET OLD PAL8 WAY OF HANDLING SYMBOL TABLE + +/MAINTENANCE RELEASE CHANGES: + +/1. INCLUDED JIM ROTH'S HASH TABLE MODIFICATIONS +/2. ALLOWED /B TO WORK PROPERLY [SEQ #2 PATCH FROM AUG '74 DSN] +/3. PUT CREFLS.TM ON SYS: NOT DSK: [PATCH SEQ #3, SEP '74 DSN] +/4. FIXED 7TH LEVEL CHECKSUM BIT [PATCH SEQ #7, MARCH '75 DSN] +/5. ALLOWED PAL8 TO RESTART BEFORE CD EXECUTED [DSN APR '75, SEQ #8] +/6. FIXED /F SO IT WORKS [PATCH SEQ #9, DSN APRIL 1975] +/7. FIXED /W SO IT DOESN'T REMEMBER TOP OF PAGE [DSN OCT '75] +/8. FIXED BUG RE MULTIPLE NON-RES INPUT HANDLERS +/9. CHANGED VERSION # TO V10, EDIT 1, 1975 COPYRIGHT +/10. ADDED DOCUMENTATION ON LOCATION OF HANDLERS AND BUFFERS +/11. CORE ALLOCATION: +/ WITHOUT /K, ALL CORE BUT 10000-11777 USED FOR SYMBOLS +/ WITH /K, USES ALL CORE (AND SWAPS USR BETWEEN PASSES) +/ UNDER BATCH, N5000-N7777 IS RESERVED FOR BATCH RESIDENT AS WELL +/12. /7 WITH HASH FEATURES PRINTS 7 COLUMN SYMBOL TABLE +/13. 14-DEC-75 JR: FIXED TYPO IN /W CODE IN LITERAL DUMP ROUTINE + +/JR 14-APR-77 ADDED STANDARD DATE FORMAT TO HEADING + /COMMAND DECODER RULES: + +/*BINARY(.BN),LISTING(.LS),CREF(.LS) + IFNZRO HASH +LAST4, IFZERO HASH + IFNZRO HASH + +*20 +TAG1, 0 /TAG STORAGE +TAG2, 0 +TAG3, 0 + +LITPTR, 200 /LITERAL POINTER + +RADIX, 0 /7777 IF DECIMAL MODE +PUNCHX, 0 /NON-ZERO IF NO PUNCHING +XLISTX, 0 /NON-ZERO IF NO LISTING +/*NOTE* PUNCHX AND XLISTX MUST BE TOGETHER +/AND IN THIS ORDER + +LOC, 200 /CURRENT LOCATION +OFFSET, 0 /LOCATION COUNTER OFFSET FROM "LOC" +OFSBUF, 0 /LOCATION COUNTER OFFSET BUFFER +STARSW, 0 /-1 IF NEXT ORIGIN SHOULD BE INHIBITED + +OP, 0 /LAST OPERATOR CODE (0-6) +VALUE, 0 /EXPRESSION VALUE +VALUE2, 0 /EXPRESSION OPERAND + +TXTSWT, 0 /SPACE SWITCH +TXTPTR, LINBUF+120 /TEXT POINTER +CHAR, 0 /CURRENT CHARACTER + +THISPG, 0 /OVERFLOW PAGE +EDITPG, 0 /EDITOR PAGE + TEMP, 0 /TEMPORARY REGISTERS +TEMP1, 0 +TEMP2, 0 +TEMP3, 0 + +OCHAR, OUTPUT /OUTPUT ROUTINE +OERROR, OTYPEO /PASS 1=OTYPEO; 2=OTYPEO; 3=LISOUT +PASS, -2 /-1 IF PASS 1, 0 IF PASS 2, 1 IF PASS 3 +IOMON, 200 /USER SERVICE ROUTINES +CONDSW, 0 /NUMBER OF NESTED CONDITIONALS +EXPIND, 0 /0 IF MRI OK HERE + /NOT 0 IF MRI NOT OK HERE +CHKSUM, 0 /BINARY CHECK SUM +IZIND, 0 /"I" AND "Z" INDICATOR + /IF I, LEFT 6 BITS ARE NON-ZERO + /IF Z, RIGHT 6 BITS ARE NON-ZERO +THISTG, 0 /ASSIGNED NUMBER OF CURRENT TAG +HIGHTG, SYME-SYMS%4-1 /ASSIGNED NUMBER OF LAST TAG +LINCNT, 0 /LINE COUNT +ALPHAI, 0 /UNDEFINED TAG INDICATOR + /-1 IF UNDEFINED +GETCI, 0 /NOT=0 IF ONLY CARRIAGE RETURN ENDS LINE + /OTHERWISE /,;, OR CARRIAGE RETURN ENDS +LSTCNT, 0 /TAB COUNTER +UNDFSW, 0 /UNDEFINED SWITCH +INCTL, 601 /CONTROL WORD - FOR OS/8 I/O +LINKSW, 0 /OFF-PAGE LINK SWITCH + /0 IF NO LINK GENERATED, 0700 IF LINK +LININD, 0 /BACK-UP FOR LINKSW +PERROR, PERRO1 /DUMMY ERROR ROUTINE TO SUPPRESS CERTAIN + /MESSAGES DURING PASS 1 +FLDIND, "0 /CURRENT FIELD IN ASCII DIGIT FORM +VALUEX, 0 /XCODE +ERROR5, 0 /USED BY PACKED ASCII PRINT ROUTINE +BINSRT, 0 /BINARY OR LISTING STARTING +ERCNT, 0 /ERROR COUNTER +LINK, 0 /LINK COUNTER + IFNZRO HASH< +TAGMAX, 0 /SET TO PRIME # EQ TO MAX # SYMS + > + PAGE + /STARTING ADDRESS OF PAL8 (0200) +/CHAINING ADDRESS (0201) + +NAME1, JMP I NAME3 /NAME1-NAME3 USED LATER +NAME2, JMP I GETTA2 /TO STORE TAGS AS THEY ARE BUILT +NAME3, BEGIN /V3C +GETTA2, NOCD /BUILDING SWITCH AND OVERFLOW PROTECT + + +/HANDLERS FOR NOPUNCH AND ENPUNCH PSEUDO-OPS + +NOPUNX, CLA IAC /NON-ZERO FOR NO PUNCHING +ENPUNX, DCA PUNCHX /ZERO FOR PUNCHING + JMP I [LOOKEX /--EXIT TO MAIN-- + + +/HANDLERS FOR DECIMAL AND OCTAL PSEUDO-OPS + +DECIMX, STA /7777 FOR DECIMAL RADIX +OCTALX, DCA RADIX /ZERO FOR OCTAL RADIX + JMP I [LOOKEX /--EXIT TO MAIN-- + /GET A TAG ROUTINE +/PICKS UP A TAG AND SEARCHES FOR IT +/"THISTG" HAS NUMBER OF TAG +/"VALUE2" HAS VALUE +/AC=7777 ON RETURN IF TAG NOT FOUND, 0 IF FOUND + +GETTAG, 0 + DCA NAME1 /CLEAR BUILD AREA + DCA NAME2 + DCA NAME3 + TAD [NAME1 + DCA GETTA4 /SET POINTER FOR BUILDING + DCA GETTA2 /ZERO SWITCH +GETTG1, TAD CHAR /GET THE CHARACTER + AND [77 /MAKE IT 01-32 OR 60-71 + TAD (-32 /WAS IT A TO Z? + SMA SZA + TAD (-25 /NO - MAKE 60-71 INTO 33-44 + TAD (32 /YES - IT IS NOW 01-32 OR 33-44 + ISZ GETTA2 /LEFT SIDE? + JMP GETTA3 /YES + TAD I GETTA4 /NO - RIGHT SIDE + DCA I GETTA4 /BUILD THE WORD + ISZ GETTA4 /BUMP TO NEXT WORD +GETTA1, JMS I [GETC /GET NEXT CHARACTER + JMS I (TSTALN /IS IT ALPHANUMERIC? + JMP GETTG1 /YES - KEEP BUILDING + IFZERO HASH< + TAD HIGHTG /NO - GET NUMBER OF HIGHEST TAG + CLL RAR /DIVIDE BY 2 + DCA TEMP2 /SAVE DIFFERENCE + DCA THISTG /START AT TAG ZERO + CLL CML /LINK MUST BE ON INITIALLY + DCA TEMP1 + + +/GETTA4 IS POINTER TO NAME1-NAME3 +/FOR DEPOSITING TAG AS IT IS BUILT + +/TEMP2 IS # OF TAGS TO SKIP BETWEEN CHECKS FOR MATCH +/DURING BINARY SEARCHING + GETTG2, SZL /IS THISTG HIGHER THAN TAG? + JMP GETTG3 /NO-LOWER +GETTG4, DCA TEMP1 /CLEAR LAST TIME SWITCH + SNL + ISZ TEMP1 /SET LAST TIME SWITCH TO 1 + TAD TEMP2 /GET # OF TAGS TO SKIP + SNL + CIA + TAD THISTG /INCREASE OR DECREASE TAG NUMBER + DCA THISTG + TAD TEMP2 /GET NUMBER + CLL RAR /DIVIDE BY 2 + SNA /IS RESULT 0? + ISZ TEMP1 /YES-BUMP LAST TIME SWITCH + SNA + IAC /IF RESULT WAS 1, MAKE IT 2 + DCA TEMP2 /SAVE IT FOR NEXT TIME + JMS I [FINDTG /GET THE TAG + TAD [1777 /MASK + AND TAG1 /GET WORD 1 + CLL CIA + TAD NAME1 /DOES IT MATCH? + SZA CLA + JMP GETTG2 /NO - TRY NEXT TAG + AC3777 + AND TAG2 /YES - GET WORD 2 + CLL CIA + TAD NAME2 /DOES IT MATCH? + SZA CLA + JMP GETTG2 /NO - TRY NEXT TAG + AC3777 + AND TAG3 /YES - DOES IT MATCH? + CLL CIA + TAD NAME3 + SZA CLA + JMP GETTG2 /NO - TRY NEXT TAG + JMP I GETTAG /YES--RETURN-- + GETTG3, AC7776 + TAD TEMP1 /LAST TIME SWITCH = 2? + SZA CLA + JMP GETTG4 /NO-KEEP TRYING + ISZ THISTG /YES-QUIT SEARCHING + DCA VALUE2 + DCA TAG1 + DCA TAG2 + DCA TAG3 /TAG NOT FOUND + STA /AC=7777 MEANS NOT FOUND + JMP I GETTAG /--RETURN-- + > + IFNZRO HASH< + PRIME=TAGMAX + +GETTGH,/JMS I [TLYREF /HACK ONLY + TAD NAME1 /HASH OUR NAME + CLL RTL + TAD NAME2 + RTL + TAD NAME3 + RTL + TAD NAME1 + JMS PROBE /NOW PROBE THE TABLE + TAD NAME1 /RE HASH THE NAME FOR A STEPSIZE + CLL RAL + RTL + TAD NAME2 + CLL /CALC MODULO PRIME INLINE + TAD MPRIME + SZL + JMP .-3 + TAD PRIME + SNA + IAC /STEPSIZE MUST BE NON ZERO! + DCA CRPDEL +PRBLUP, CLL + TAD THISTG /BUMP THE POINTER RANDOMLY + TAD CRPDEL + SZL /PROTECT AGAINST WRAP AROUND + TAD MPRIME /PROBABLY UNOPTIMAL SOLUTION + JMS PROBE + JMP PRBLUP + +PROBE, 0 + CLL + TAD MPRIME + SZL + JMP .-3 + TAD PRIME + DCA THISTG /THISTG MODULO PRIME +/ JMS I [TLYPRB /HACK ONLY + JMS I [FINDTG /GO GET IT + TAD [1777 /MASK THE TYPE BITS OUT + AND TAG1 /IS THERE ONE? + SNA + JMP NOTFND /NO EXIT POINTING AT IT + CIA /YES, DO A COMPARE + TAD NAME1 + SZA CLA + JMP I PROBE + AC3777 + AND TAG2 + CIA + TAD NAME2 + SZA CLA + JMP I PROBE + AC3777 + AND TAG3 + CIA + TAD NAME3 + SZA CLA + JMP I PROBE /FOUND EXIT WITH AC CLEAR + JMP I GETTAG +NOTFND, STA /NOT FOUND EXIT WITH AC SET + JMP I GETTAG + +CRPDEL, 0 +MPRIME, 0 /INITIALIZED BY ONCE ONLY CODE FOR MACHINE AT HAND + > + + +GETTA3, DCA GETTA2 /SAVE CHAR + TAD GETTA2 + CLL RTL /*4 + RAL /*10 + TAD GETTA2 /*11 + RTL /*44 + TAD GETTA2 /*45 + DCA I GETTA4 /SET LEFT SIDE + TAD GETTA4 + TAD (-GETTA2 + SZA CLA /IS THIS AN OVERFLOW (>6) CHAR? + STA /NO - SET SWITCH TO RIGHT HALF + DCA GETTA2 /YES - LEAVE SWITCH AT LEFT HALF + JMP GETTA1 + +GETTA4, NAME1 + /IGNORE SPACES ROUTINE + +SPNOR, 0 + TAD CHAR /GET THE CHARACTER + TAD [-240 /IS IT A SPACE? + SZA CLA + JMP I SPNOR /NO --RETURN-- + JMS I [GETC /YES - GET NEXT CHARACTER + JMP SPNOR+1 /LOOP + + +/HANDLER FOR PAUSE PSEUDO-OP +/END-OF-TAPE OR END-OF-FILE + +PAUSEX, AC4000 + DCA CHAR /SET END-OF-LINE CHARACTER + TAD [LINBUF+120 /REINITIALIZE TEXT POINTER + DCA TXTPTR + CLA CMA + DCA I (INCHCT /INDICATE EMPTY BUFFER + ISZ I (INEOF /SET END-OF-FILE + JMP I [LOOKEX /--EXIT TO MAIN-- + PAGE + /OUTPUT 2 CHARACTER ERROR CODE + +ERROR1, 0 + DCA ERROR5 + TAD ERROR5 + JMS I [RTL6 + RAL + AND [77 + TAD [240 /CONVERT SIXBIT TO ASCII + JMS I OERROR /OUTPUT FIRST CHAR + TAD ERROR5 + AND [77 + TAD [240 + JMS I OERROR /OUTPUT SECOND CHAR + JMP I ERROR1 /--RETURN-- + +/HANDLER FOR FIELD PSEUDO-OP + +FIELDX,JMS I [SPNOR /IGNORE SPACES + JMS I [DUMPS /DUMP CURRENT PAGE LITERALS + JMS I [DUMPZ /DUMP PAGE ZERO LITERALS + JMS I [EXP /GET EXPRESSION + TAD VALUE /TRIM TO RIGHT 3 BITS + AND [7 + DCA FLDIND /STORE FOR LISTING + TAD VALUE + AND [30 + DCA VALUEX + TAD PASS /IS THIS PASS 2? + SZA CLA + JMP FIELDY /NO - PREPARE TO EXIT + JMS I [XCHANG /XCODE + TAD FLDIND /YES - GET FIELD NUMBER + CLL RTL + RAL /AND CHANNELS 7 AND 8 + TAD [7700 + JMS I OCHAR /OUTPUT FIELD SETTING +FIELDY, JMS I [CLEAN /CLEAN UP THINGS + TAD [200 /RESET ORIGIN TO 200 + JMP STAR1 + +/CHANGE LAST 2 LOCATIONS TO: +/ CLA +/ JMP STAR1+1 +/FOR INDAC GROUP TO OMIT RE-ORIGIN +/HANDLER FOR PAGE PSEUDO-OP + +PAGEX, JMS I [DUMPS /DUMP SAME PAGE LITERALS + JMS I (XLISTZ /ANY EXPRESSION? + JMP PAGEY /NO + JMS I [EXP /YES - GET EXPRESSION + TAD VALUE + JMS I [RTL6 + RAL /GET PAGE NUMBER + JMP STAR3-1 + +PAGEY, TAD LOC /NO ARGUMENT - FIND NEXT PAGE + TAD [177 + AND [7600 +STAR3, DCA VALUE + TAD VALUE /GET START OF PAGE +STAR1, JMS I [PUNORG /PUNCH ORIGIN + JMS I [FINDSP + TAD [LITBUF /RESET POINTERS + DCA TEMP + TAD I TEMP + DCA LITPTR /INITIALIZE LITERAL POINTER FOR NEW PAGE + DCA LAST1 + DCA LININD + JMP I [PUNVAL /SEE ABOUT DUMPING SOURCE CODE + +/HANDLER FOR FIXMRI PSEUDO-OP + +FIXMRX, JMS I [SPNOR /IGNORE SPACES + JMS I [TSTALP /IS CHARACTER ALPHABETIC? + JMP FIXMR1 /YES-CONTINUE + JMS I [ICMESG /NO - GENERATE IC MESSAGE, GET NEXT CHAR + JMP FIXMRX+1 /KEEP LOOKING FOR ALPHABETIC CH. OR END OF LINE +FIXMR1, JMS I [GETTAG /PICK UP TAG + DCA ALPHAI /STORE UNDEFINED SWITCH + SKP +FIXMR2, JMS I [ICMESG + JMS I [SPNOR /IGNORE SPACES + TAD CHAR /WAS CHARACTER = ? + TAD (-"= + SZA CLA + JMP FIXMR2 /NO - PRINT IC MESSAGE AND KEEP LOOKING + /FALL INTO EQUALS PROCESSOR + /HANDLER FOR = + + AC4000 /FALL INTO HERE FROM FIXMRI +EQUAL, JMS I [PUSHA /PUSH FIXMRI FLAG + JMS I [GETC /GET NEXT CHARACTER + TAD I [NAME1 /STORE THE SYMBOL NAME + JMS I [PUSHA /ON THE PUSH DOWN LIST + TAD I (NAME2 + JMS I [PUSHA + TAD I (NAME3 + JMS I [PUSHA + TAD THISTG /AND ITS PRESENT (OR FUTURE) + JMS I [PUSHA /POSITION IN THE SYMTAB + TAD ALPHAI + JMS I [PUSHA /STORE UNDEFINED INDICATOR + JMS I [SPNOR /IGNORE SPACES + JMS I [EXP /GET EXPRESSION TO RIGHT OF = + TAD I PDLXR + DCA ALPHAI /RESTORE UNDEFINED INDICATOR + TAD I PDLXR + DCA THISTG /RESTORE SYMBOL TABLE POSITION + TAD I PDLXR /RESTORE TAG NAME + DCA I (NAME3 + TAD I PDLXR + DCA I (NAME2 + TAD I PDLXR + DCA I [NAME1 + ISZ UNDFSW /WAS ANY PART OF DEFINITION UNDEFINED? + JMP EQUAL3 /NO + JMS I PERROR /YES - GENERATE IE ERROR MESSAGE + IE + ISZ PDLXR /CLEAR EXTRA WORD FROM PDL + JMP I [PUNVAL /FORGET ABOUT DEFINING TAG + /MORE = PROCESSING + +EQUAL3, ISZ ALPHAI /WAS TAG DEFINED BEFORE? + JMP .+3 /YES - CHECK FOR ILLEGAL REDEFINITION + JMS I [INSRTG /NO - INSERT TAG INTO SYMBOL TABLE + JMP EQUAL2 /AND BYPASS ILLEGAL REDEF CHECK + JMS I [FINDTG /PUT TAG IN TAG1-TAGE AND VALUE2 + TAD VALUE + CIA + TAD VALUE2 + SZA CLA /WERE DEFINITIONS THE SAME? + TAD TAG1 /NO - IS IT A PERMANENT SYMBOL? + SMA CLA + JMP EQUAL2 /NO - OK TO REDEFINE + JMS I [ERROR /YES - GENERATE RD ERROR MESSAGE FIRST + RD +EQUAL2, TAD VALUE /DEFINE OR REDEFINE + DCA VALUE2 + AC3777 + AND TAG2 /CLEAR OLD FIXMRI BIT + TAD I PDLXR /INSERT NEW ONE + DCA TAG2 + JMS I [PUTTAG /STORE TAG + JMP I [PUNVAL /SEE ABOUT DUMPING SOURCE CODE + PAGE + /ROTATE AC 6 LEFT + +RTL6, 0 + CLL RTL + RTL + RTL + JMP I RTL6 /--RETURN-- + + +/GET NEXT CHARACTER ROUTINE +/READS FROM THE INPUT FILES AND PASSES THE MODIFIED CHARACTERS +/TO THE PROGRAM +/IT ALSO PRINTS THE LATEST LINE IF IT HAS NOT BEEN PRINTED + +GETC, 0 + ISZ TXTPTR /POINT TO NEXT CHARACTER +GETC7, TAD I TXTPTR /GET NEXT CHARACTER + SZA /IS IT 0? + JMP GETC8 /NO - MORE ARE IN THIS LINE + TAD PASS /IS THIS PASS 3? + SPA SNA CLA + JMP GETC1 /NO + TAD [LINBUF /YES + DCA TXTPTR /RESET POINTER TO BEGINNING + TAD I TXTPTR /GET 1ST CHARACTER + SNA /IS IT 0? + JMP GETC1 /YES - LINE HAS BEEN PRINTED + TAD [-215 /IS IT 215? + SNA CLA + JMP GETC2 /YES - DO NOT PRINT THE SPACES + TAD [211 /NO-OUTPUT 2 TABS + JMS I OERROR + TAD [211 + JMS I OERROR +GETC2, JMS LINPRT /NOW PRINT THE LINE +GETC1, TAD (-121 + DCA TXTSWT + TAD (LINBUF-1 + DCA TXTPTR /RESET POINTER + ISZ TXTPTR +GETC6, JMS I (INPUT /GET NEXT CHARACTER + JMP GETC4 /215 + DCA I TXTPTR /STORE THE CHARACTER + ISZ TXTSWT /TOO MANY? + JMP GETC6-1 /NO + CLA CMA /YES + DCA TXTSWT + JMP GETC6 + GETC4, DCA I TXTPTR /SET END + ISZ TXTPTR + DCA I TXTPTR /SET END OF LINE + TAD [LINBUF + DCA TXTPTR /RESET POINTER + CLA CMA + DCA TXTSWT /RESET SWITCH + JMP GETC7 /GET THAT CHARACTER + +GETC8, TAD [-215 /IS IT A CARRIAGE RETURN? + SNA + JMP GETC12 /YES-END OF LINE + TAD GETCI /NO- + TAD (215-"/ /IS IT A /? + SNA /YES- + JMP GETC13 /"/" IS END + TAD ("/-"; /IS IT A ;? + SNA /YES- + JMP GETC12 /";" IS END + TAD (";-211 /IS IT A TAB? + SZA + TAD (211-240 /OR A SPACE? + SZA CLA + JMP GETC9 /NO-NOT ANYTHING SPECIAL + ISZ TXTSWT /YES-2ND OCCURANCE? + JMP GETC+1 /YES - IGNORE + TAD [240 + DCA CHAR /NO - GIVE A SPACE + JMP I GETC /--RETURN-- + +GETC16, ISZ CONDSW /DECREMENT CONDITIONAL COUNTER + JMP GETC15 +GETC17, TAD [LINBUF+120 + DCA TXTPTR +GETC12, AC4000 +GETC9, TAD I TXTPTR + DCA CHAR /STORE CHARACTER + CLA CMA + DCA TXTSWT /SET THE SWITCH + JMP I GETC /--RETURN-- + GETC13, TAD CONDSW /CURRENTLY IN CONDITIONALS? + SNA + JMP GETC17 /NO + DCA CONDSW /STORE UPDATED CONDITIONAL LEVEL +GETC15, ISZ TXTPTR /YES-SCAN LINE FOR < AND > + TAD I TXTPTR + TAD [-215 /IS CHARACTER A CARRIAGE RETURN? + SNA + JMP GETC17 /YES + TAD (215-"> /NO IS IT A >? + SNA + JMP GETC16 /YES + TAD (">-"< /NO-IS IT + IFNZRO HASH< + +SYMPRT, 0 + ISZ EDITPG + DCA THISPG + JMS I [FORMFD /OUTPUT A HEADING + JMS I SYMHND /NOW READ THE SYMBOL TABLE SORT OVERLAY + 0200 /2 PAGES +SYMSRT, OUDEVH+400 /TO HERE + ASWAP+1 /FROM HERE + JMP I SYMERR /UGH + JMS I SYMSRT /SORT THEM AND SET LINK +SYMNWP, DCA SYMTAG /POINT TO SYMBOL + SZL /LINK OFF IF ANY SYMBOLS TO LIST + JMP I SYMPRT /NONE --RETURN-- + TAD SMIN67 /SET LINE/PAGE COUNT + DCA SYMLCT +SYMPAG, TAD HIGHTG + CLL CIA + TAD SYMTAG + SZL CLA + JMP I SYMPRT /NO MORE IF AT HIGHTAG NOW + TAD SYMTAG + DCA THISTG /PREPARE TO PRINT LEFTMOST SYMBOL + TAD SYMNCL /4 PER LINE (DEFAULT) + DCA SYMCCT /TO COLLUMS/LINE CNTR + JMP SYMGO +SYMLIN, JMS I [ERROR1 + JMS I [ERROR1 + JMS I [ERROR1 + TAD HIGHTG + CLL CIA + TAD THISTG + SZL CLA + JMP SYMNXL /SKIP TO NEXT LINE IF OFF TABLE + SYMGO, JMS I [FINDTG /OK, GET IT + TAD TAG1 + JMS I SDIV45 + TAD TAG2 + JMS I SDIV45 + TAD TAG3 + JMS I SDIV45 + TAD [240 + JMS I OERROR + TAD VALUE2 /PRINT VALUE NOW + JMS OCTPRT +SYMDDT, TAD SMIN67 + CLL CIA + TAD THISTG + DCA THISTG + SZL + JMP SYMNXL /SKIP IF WRAP AROUND + ISZ SYMCCT /ELSE DO NEXT COLUMN + JMP SYMLIN +SYMNXL, TAD [215 + JMS I OERROR /CR/LF + ISZ SYMTAG /POINT TO NEXT SYMBOL + ISZ SYMLCT + JMP SYMPAG +HSWIT2, JMS I [FORMFD + TAD SYMTAG + CLL + TAD SYMOFS /OFFSET TO NEXT SYMBOL + JMP SYMNWP /DO THE NEXT PAGE + +SDIV45, DIV45 +SMIN67, -67 +SYMERR, SYSERR +SYMHND, 7607 +SYMOFS, 245 /DEFAULT +SYMNCL, -4 + SYMTAG= LINKSW + SYMLCT= UNDFSW + SYMCCT= ALPHAI + ZBLOCK 4 /WASTE SOME SPACE + > + + +/END OF AREA WHICH MAY BE SWAPPED OUT +/DURING PASSES 1 AND 2 +/********************************************************************** + + ENDOVL= . + /OCTAL PRINT ROUTINE +/ENTER WITH # TO BE OUTPUT IN AC +/** DO NOT USE TEMPS BELOW THIS LOC! + +OCTPRT, 0 + DCA OCTPR1 + TAD [-4 + DCA OCTPR3 +OCTPR2, TAD OCTPR1 /GET EACH DIGIT SEPARATELY + CLL RTL + RAL + DCA OCTPR1 + TAD OCTPR1 + RAL + AND [7 + TAD ["0 /MAKE IT INTO AN ASCII CHARACTER + JMS I OERROR /OUTPUT IT + ISZ OCTPR3 + JMP OCTPR2 + JMP I OCTPRT /--RETURN-- + + /OUTPUT ONE REGISTER + +PUNONE, 0 + TAD PASS /WHICH PASS IS THIS? + SNA + JMP PUNON2 /PASS 2--OUTPUT BINARY + SPA CLA + JMP PUNON3 /PASS 1--EXIT + TAD VALUEX /THE BANK BIT IS + CLL RTR /ADJUSTED TO ASCII + RAR + TAD ["0 + JMS I OERROR /THEN PRINTED + TAD FLDIND /GET FIELD NUMBER + TAD ["0 /CONVERT TO ASCII + JMS I OERROR /PRINT IT + TAD LOC /GET LOW ORDER 4 DIGITS (LOC CTR) + JMS OCTPRT /PRINT IT TOO + TAD OFFSET /IF THIS CODE IS IN A RELOC SECTION, + SZA CLA / + TAD [1200 /FLAG THE LOCATION COUNTER WITH A * +DTORG1, JMS I [ERROR1 /OUTPUT 2 SPACES + TAD VALUE + JMS OCTPRT /OUTPUT CONTENTS + TAD I [LINBUF /IS THERE SOURCE CODE TO DUMP? + SNA CLA + JMP PUNON1 /NO-OUTPUT CARRIAGE RETURN + TAD LINKSW /YES-DUMP LINK SWITCH (' ) OR ( ) + JMS I [ERROR1 + JMS I [LINPRT /DUMP SOURCE CODE + JMP PUNON3 /AND EXIT + +PUNON1, TAD LINKSW /NO LINE - OUTPUT LINK SWITCH ANYWAY + SZA /IF THERE IS ONE + JMS I [ERROR1 + TAD [215 /OUTPUT CARRIAGE RETURN + JMS I OERROR +PUNON3, DCA LINKSW /CLEAR LINK SWITCH + JMP I PUNONE /--RETURN-- + +/PASS 2-OUTPUT ONE REGISTER + +PUNON2, TAD VALUE /GET CONTENTS + CLL + JMS I [PUNOUT /OUTPUT AS 2 FRAMES + JMP PUNON3 /AND EXIT + PAGE + /**CURRENT PAGE LITERALS ON THIS PAGE WILL BE LOST** +/***WHEN OVERLAYED BY PUSHDOWN LIST** + +/ARRANGE TO OUTPUT ONE REGISTER + +PUNBIN, 0 + DCA VALUE + JMS I [FINDSP /FIND CURRENT PAGE NUMBER + TAD [LITBUF + DCA TEMP2 /POINT TO NUMBER OR LITERALS + TAD LOC + AND [177 + DCA TEMP + TAD I TEMP2 /IS PAGE FULL? + CIA + TAD TEMP + ISZ TEMP + SPA CLA + JMP ONEOK /NO-OK TO ADD ONE MORE REGISTER + TAD TEMP /YES- + DCA I TEMP2 + JMS I [FINDSP /FIND CURRENT PAGE NUMBER + JMS I PPEZE /GENERATE PE OR ZE ERROR +ONEOK, JMS I [FINDSP /FIND CURRENT PAGE NUMBER + TAD [TPINST + DCA TEMP2 + TAD TEMP /IS THIS ADDRESS HIGHER THAN PREVIOUS + CIA /HIGH INSTRUCTION PAGE? + TAD I TEMP2 + SMA CLA + JMP PUNMOD /NO + TAD TEMP /YES-THIS IS NEW HIGH INSTRUCTION + DCA I TEMP2 + +PUNMOD, JMS I [PUNONE /OUTPUT THIS REGISTER + ISZ LOC /GET NEXT LOCATION + TAD LOC /IF THE "ISZ" SKIPS IT IS O.K. (A 0) + AND [177 /IS THIS FIRST INSTRUCTION ON NEXT PAGE? + SZA CLA + JMP I PUNBIN /NO--RETURN-- + JMS I [FINDSP /YES-FIND CURRENT PAGE NUMBER + TAD [LITBUF /RESET POINTERS + DCA TEMP2 + TAD I TEMP2 + DCA LITPTR + JMP I PUNBIN /--RETURN-- + +PPEZE, PEZE + HEADER, "S;"Y;"M;"B;"O;"L;"S + 211;211;211;211;211 /FOR /N HEADER + +/************************************************************ +/CODE OVERLAYED ON PASS 3 +/BY USER HEADER BUFFER + +/CONTINUATION OF EXPUNGE HANDLER +/ENTER ON PASS 1 ONLY + +EXPUNW, IFZERO HASH< + DCA TEMP1 + DCA EXPUN2 /CLEAR NEW HIGH TAG COUNTER + TAD HIGHTG + CMA + DCA TEMP3 /SAVE NUMBER OF SYM TBL ENTRIES +EXPUNY, TAD TEMP1 + DCA THISTG + JMS I [FINDTG /GET A SYMBOL + TAD TAG1 /ONLY SAVE THE SYMBOL IF + RTL + CLA /IT WAS A PSEUDO-OP, OR + TAD TAG3 /THE SYMBOLS I OR Z + SNL SMA CLA + JMP EXPUA4 /NO-FORGET TAG + TAD EXPUN2 /YES-RETURN TAG TO SYMBOL TABLE + DCA THISTG + JMS I [PUTTAG + ISZ EXPUN2 +EXPUA4, ISZ TEMP1 + ISZ TEMP3 /DONE YET? + JMP EXPUNY /NO- TRY NEXT TAG + CLA CMA /YES + TAD EXPUN2 /RESET HIGH TAG + DCA HIGHTG + JMP I [LOOKEX /--EXIT TO MAIN-- + +EXPUN2, 0 + > + IFNZRO HASH< + /HASH TABLE EXPUNGE - DEPENDS ON PSEUDO OPS + /BEING HASHED FIRST. SCANS WHOLE TABLE (SLOW AS HELL!) + + DCA THISTG /POINT TO FIRST ENTRY + TAD TAGMAX /SET THE COUNT + CIA + DCA TEMP1 +EXPUNL, JMS I [FINDTG /GO GET ONE + TAD TAG1 + RTL + CLA + TAD TAG3 + SPA SZL CLA /PSEUDO OP? + JMP EXPUNS /YES, SKIP DELETION + DCA TAG1 /NO, WIPE IT + DCA TAG2 + DCA TAG3 + JMS I [PUTTAG /AND PUT IT BACK + STA + TAD HIGHTG + DCA HIGHTG /DECREMENT SYMBOL COUNT +EXPUNS, ISZ THISTG /POINT TO NEXT ENTRY + ISZ TEMP1 /TALLY COUNT + JMP EXPUNL /GET ANOTHER + JMP I [LOOKEX /DONE --RETURN-- + > + +/*************************************************************** + /ASSEMBLER HEADER BUFFER + + ZBLOCK HEADER+HEDLEN-. + + " ;" ;"P;"A;"L;"8;"- + "V;"1;VERSION-12+"0;SUBVERSION + " +DATE, "N;"O;" ;"D;"A;"T;"E;" /GETS SET TO DD-MMM-YY IF DATE PRESENT + " ;" ;"P;"A;"G;"E;" ;0 + /PUSHDOWN LIST +/OCCUPIES NEXT 43(8) LOCATIONS +PDLND=. + + + +/********************************************************* +/ONCE ONLY CODE FOR /D OPTION +/PUT INTO SYMLST FOR DDT COMPATIBLE SYMBOL TABLE +/OVERLAYED DURING ASSEMBLY BY PUSHDOWN LIST + +DSWIT1, IFZERO HASH< + RELOC SYMPRT+4 + + DCA I SYMPRF + JMS SYMPRC + TAD [377 + JMS I OERROR + CLA CMA + DCA THISTG +SYMPRE, TAD [215 + JMS I OERROR + JMS SYMPPP + JMP SYMPRD + JMP SYMPR1 +SYMPRF, HSWIT1 +SYM204, 204 + RELOC + + > + IFNZRO HASH< + RELOC SYMNWP + DCA THISTG + DCA I SYMHSW + JMS DDTLDR + TAD [377 + JMS I OERROR +SYMLUP, TAD [215 + JMS I OERROR + TAD HIGHTG + CLL CIA + TAD THISTG + SZL CLA + JMP SYMXIT + JMP SYMGO +SYMHSW, HSWIT1 + RELOC + > +DSWITA= . + +/********************************************************** + PAGE + /************************************************************* + +/PAL8 TABLES - LOAD OVER INITIALIZATION CODE + +PDLST= PDLND+42 /PUSHDOWN LIST 43(8) LOCS LONG + + +LINBUF= PDLST+1 /LINE BUFFER OCCUPIES 122(8) LOCATIONS + +LITBUF= LINBUF+122 /LITERAL TABLE IS 40(8) LOCATIONS (ONE PER PAGE) + / SHOWING LOWEST PAGE ADDRESS USED FOR LITERALS + +TPINST= LITBUF+40 /TOP INSTRUCTION TABLE IS 40(8) LOCTIONS + / SHOWING HIGHEST PAGE ADDRESS USED FOR INSTRUCTIONS + +LITBF2= TPINST+40-17 /LITERAL BUFFER 2 CONTAINS UP TO 160(8) + /PAGE 0 LITERALS, SUBSCRIPTS 20-177 + +LITBF1= LITBF2+200-100 /LITERAL BUFFER 1 CONTAINS UP TO 100(8) + /CURRENT PAGE LITERALS, SUBSCRIPTS 100-177 + +/************************************************************* + /ONCE ONLY CODE FOR ASSEMBLER START UP +/OVERLAYED BY BUFFERS + +/HANDLES SWITCH OPTIONS + +BEGIN, CIF 10 + JMS I IOMON /CALL USER SERVICE ROUTINES + 5 /*COMMAND DECODER* + 2001 /DEFAULT INPUT EXTENSION IS .PA +NOCD, CDF 10 /RETURN + TAD I (7604 /IS THERE A BINARY FILE EXTENSION? + SNA + TAD (216 /NO - DEFAULT EXTENSION IS .BN + DCA I (7604 /YES + TAD I (7611 /IS THERE A LISTING FILE EXTENSION? + SNA + TAD (1423 /NO - DEFAULT EXTENSION IS .LS + DCA I (7611 + TAD I (MPARAM+1 /WAS THE /T OPTION SELECTED? + CDF + AND (20 +ZT7640, SNA CLA + JMP BEGINA /NO +BEGIAA, DCA I (HSWITC /YES - GENERATE CR/LF IN PLACE OF F/F + JMP BEGIN2 + +BEGINA, TAD [7605 /WAS TTY THE PASS 3 DEVICE? + JMS I (OTYPE + AND (770 + SNA CLA + JMP BEGIAA /YES - GENERATE CR/LF IN PLACE OF F/F + DCA I (BEGIAB /NOT /T OR TTY: + +BEGIN2, CDF 10 + TAD I (MPARAM+1 /WAS THE /S OPTION SELECTED? + CDF + AND (40 + SZA CLA + DCA I (SSWITC /YES -OMIT SYMBOL TABLE + CDF 10 + AC2000 + AND I (MPARAM+1 + CDF + SNA CLA /WAS THE /N OPTION SELECTED? + JMP BEGIN4 /NO + TAD BEGSKP /SET SWITCH + DCA I (NSWITC /YES -SYMBOL TABLE BUT NO LISTING + BEGIN4, CDF 10 + TAD I (MPARAM /WAS THE /H OPTION SELECTED? + CDF + AND (20 +ZH7640, SNA CLA + JMP BEGINB /NO +BEGHSW, TAD I (FORM21 /YES -SUPPRESS LISTING PAGE FORMAT + DCA I (HSWITC + DCA I (HSWIT1 +BEGSKP, CLA SKP +BEGINB, DCA I (HSWIT2 + CDF 10 + TAD I (MPARAM /WAS THE /D OPTION SELECTED? + CDF + AND [400 +ZD7640, SNA CLA + JMP BEGIN1 /NO + TAD I XREG1 /YES -DDT COMPATIBLE SYMBOL TABLE + DCA I LAST3 /SUBSTITUTE ALTERNATE CODE + ISZ DSWIT3 /INTO SYMBOL TABLE OUTPUT ROUTINE + JMP .-3 + TAD I XREG2 + DCA I LAST4 + ISZ DSWIT4 + JMP .-3 + +BEGIN1, TAD I (JSBITS /RESET JOB STATUS WORD TO + AND (6777 /INDICATE PAL8 NOT RESTARTABLE + TAD (1000 + DCA I (JSBITS + CIF CDF 10 + JMS I (FMTDAT /CALL ROUTINE IN FIELD 1 TO SETUP DATE + JMP I (BEGINZ /CONTINUE ON + +DSWIT3, DSWIT1-DSWITA +DSWIT4, DSWIT2-DSWITB + PAGE + /ONCE ONLY CODE CONTINUED +/ASSEMBLER INITIALIZATION PROCEDURES + + +BEGINZ, TAD [7600 /WHAT DEVICE FOR BINARY OUTPUT? + JMS I (OTYPE + SMA CLA + TAD (-70 /STAND-ALONE + TAD (-10 /DIRECTORY + DCA I (SWAPR2+LEADER /SET AMOUNT OF LEADER TRAILER + DCA LAST1 /NO DEFINED TAG +BEGIN5, IFZERO HASH< + CDF + TAD I BLK1 /MOVE SYMBOL TABLE TO FIELD 1 + CDF 10 + DCA I BLK2 + ISZ BLK1 + ISZ BLK2 + ISZ BLK3 + JMP BEGIN5 + > + CDF + DCA I [LINBUF+120 /SET BUFFER POINTERS + DCA I (LINBUF+121 + TAD [7600 /IS PTP BINARY OUTPUT DEVICE? + JMS I (OTYPE + DCA BLK1 + TAD BLK1 + AND (770 + TAD (-20 + SNA CLA + DCA I (PTPSW /YES - SET PTP SWITCH + TAD BLK1 /NO - IS IT A DIRECTORY DEVICE? + SPA CLA + JMP .+3 /NO + TAD (TAD [77 /YES - SET DIRECTORY SWITCH + DCA I (DIRSW + TAD [7605 /IS PTP GETTING LISTING OUTPUT? + JMS I (OTYPE + AND (770 + TAD (-20 + SNA CLA + DCA I (SWAPR2+PTPSW1 /YES - SET PASS 3 PTP SWITCH + TAD [7605 /NO - IS DIRECTORY DEVICE GETTING + JMS I (OTYPE /LISTING OUTPUT? + SPA CLA + JMP .+3 /NO + TAD (TAD [77 /YES - SET PASS 3 DIRECTORY SWITCH + DCA I (SWAPR2+DIRSW1 + JMP I (BEGINF + MONLST, TEXT /JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC/ + *.-1 + +/CONTINUED CHECK OF COMMAND DECODER OPTIONS + +BEGINH, CDF 10 + TAD I (MPARAM /WAS THE /G OR /L OPTION CHOSEN? + CDF + AND (41 + SNA CLA + JMP I (BEGISW /NO + CDF 10 /YES + TAD I [7600 + SZA CLA /WAS THERE A BINARY OUTPUT FILE? + JMP YESBIN /YES +BINLOP, TAD PALBIN /NO - CREATE FILE PAL8BN.TM + DCA I PALBIX /ON SYSTEM DEVICE + ISZ BINLOP + ISZ PALBIX + ISZ BINCNT + JMP BINLOP + CDF + TAD (-10 /SET AMOUNT OF LEADER TRAILER + DCA I (SWAPR2+LEADER + /SET UP FOR LOAD OR LOAD AND GO + +YESBIN, CDF + CIF 10 + CLA IAC + JMS I IOMON /CALL USER SERVICE ROUTINES + 2 /* LOOKUP PERMANENT FILE * +LOAD, PLOAD /FILENAME ABSLDR.SV +BINCNT, -5 /FILE LENGTH + JMP NOLOAD /ABSLDR.SV NOT FOUND + TAD LOAD /NORMAL RETURN + DCA I (CHAIN /SET STARTING BLOCK NUMBER + DCA I (LSWITC /FOR CHAIN CALL + JMP I (BEGISW + +NOLOAD, JMS I [ERROR /GENERATE LD ERROR MESSAGE + LD + JMP I (BEGISW /ASSEMBLE BUT DO NOT CHAIN TO LOADER + +BLK1, SYMS +BLK2, 7600+SYMS-SYME +BLK3, SYMS-SYME + +PALBIX, 7600 +PALBIN, 1 + FILENAME PAL8BN.TM + PAGE + CCC, TAD I CC231 /FINAL PIECE OF STARTUP ONCE-ONLY CODE + SNA + TAD CC23 + DCA I CC231 /"HSWITC"=JMP FORMF1 IF WAS 0 +BEGISW, CDF 10 + TAD I CCJWD + CDF 0 + AND CCJBIT +ZJ7640, SNA CLA /WAS /J OPTION SPECIFIED? + DCA I CCJLOC /NO - PRINT UNASSEMBLED CONDITIONAL CODE + CDF 10 + TAD I CCWWD + CDF 0 + AND CCWBIT +ZW7640, SNA CLA /WAS /W OPTION SPECIFIED? + JMP D4 /V3C +D5, TAD I CC231 + CIA + TAD CC23 + SZA CLA /ARE WE OUTPUTTING FF'S IN LISTING? + JMP BEGIS3 /NO + TAD CC24 /YES - SUBSTITUTE SOME CODE + DCA I CC25 + TAD CC26 + DCA I CC27 + TAD CC24 + DCA I CC28 +BEGIS3, JMS I OVLL7 /CALL SYSTEM DEVICE + 4200 /WRITE 2 PAGES + SWAP1 /FORM SWAP1 + ASWAP /INTO TEMP AREA + JMP I OVLL8 /ERROR?! + TAD I LAST2 /MOVE PASS 1&2 ONLY CODE + DCA I TAGXR /OVER PASS3 SWAPPED OUT CODE + ISZ CC29 + JMP .-3 + IFNZRO HASH< + JMS I CCHSH /FINALLY HASH OUT THE TABLE + > + + JMP I .+1 + START2-1 /OK - NOW GO DO SOME ASSEMBLING! +D4, DCA I CCWLOC /NO - DON'T WIPE LITERALS AS YOU DUMP THEM + DCA I (D3 + JMP D5 /V3C + OVLL7, 7607 +OVLL8, SYSER3 + +CC231, HSWITC +CC23, FORMF1&177+5200 +CC24, STA +CC25, FORMF1 +CC26, DCA LINCNT +CC27, FORMF1+1 +CC28, FORMF1+2 +CC29, SWAPB2-SWAPE2 + + IFNZRO HASH< +CCHSH, HSHSMS + > +CCJWD, MPARAM +CCJBIT, 4 +CCJLOC, IFTST4 +CCWWD, MPARAM+1 +CCWBIT, 2 +CCWLOC, LITHAK +PLOAD, FILENAME ABSLDR.SV + +CKBAT, TAD I CC7777 /GET BATCH FLAG WORD + CLL RTL + SNL CLA /BATCH RUNNING? + JMP I CCOPTM /NO, GO WITH LINK OFF + TAD I CC7777 + AND CC0070 /GET BATCH FIELD + TAD CCCIF0 /FORM CIF TO BATCH FIELD + DCA OTYPB1 /MODIFY TTY OUTPUT ROUTINE TO GO TO BATCH + TAD CCJMSB /LOG INSTEAD + DCA OTYPB2 + TAD OTYPTD + DCA OTYPB3 + JMP I CCOPTM /RETURN TO CORE DETERMINER, LINK SET + +CC7777, 7777 +CCOPTM, OPTIM4 +CC0070, 70 +CCCIF0, CIF 0 +CCJMSB, JMS I [BATOUT + /THIS CODE SITS AFTER THE END OF THE LITERAL TABLE + + IFNZRO .-LITBF1-200&4000 <*LITBF1+200> + +OTYPEO, 0 /TYPE A CHARACTER, CHECKING FOR ^O AND ^C + DCA OTYPEC /SAVE CHAR + JMS CTCCHK /CHECK FOR ^C - RETURN CHAR-203 IN AC + TAD (-14 + SNA CLA /^O? + JMP I OTYPEO /YES +OTYPTD, TAD OTYPEC +OTYPB1, TLS +OTYPB2, TSF +OTYPB3, JMP .-1 /WAIT FOR TTY + TAD [-215 +OTYPCR, SZA CLA /SET TO CLA DURING "ERRORS DETECTED" STUFF + JMP I OTYPEO + TAD [212 /IF CHAR WAS CR, TYPE LF + JMP OTYPEO+1 +OTYPEC, 0 + +CTCCHK, 0 /CHECK FOR ^C + TAD [200 + KRS /OR IN KEYBOARD CHAR + TAD (-203 + SNA + KSF /3B BUT WAS CHAR REALLY THERE? + JMP I CTCCHK /NO ^C - RETURN + JMP I [7600 /RETURN TO OS/8 + +TTLMSG, "E-240^100+"R-240 /ERRORS DETECTED: + "R-240^100+"O-240 + "R-240^100+"S-240 + "D-240 + "E-240^100+"T-240 + "E-240^100+"C-240 + "T-240^100+"E-240 + "D-240^100+":-240 + 0 + + "L-240^100+"I-240 /LINKS GENERATED: + "N-240^100+"K-240 + "S-240^100 + "G-240^100+"E-240 + "N-240^100+"E-240 + "R-240^100+"A-240 + "T-240^100+"E-240 + "D-240^100+":-240 + 0 + PAGE + /OUTPUT A CHARACTER TO OUTPUT DEVICE +/CALLED BY JMS I OCHAR +/WITH CHARACTER IN 8-BIT ASCII IN AC + +OUTPT1, PUNCHX /PASS 2=PUNCHX; 3=XLISTX + +OUTPUT, 0 + AND [377 /MASK OUT LEFT 4 BITS + DCA OUTPT2 /STORE + TAD I OUTPT1 /IS THIS PASS 3 AND + SNA + TAD OUTINH /IS THIS COVERED BY XLIST? + SZA CLA + JMP I OUTPUT /YES--RETURN-- + TAD OUTPT2 /NO - GET CHARACTER + AND [200 + SNA CLA + TAD OUTPT2 /IF LESS THAN 200, THEN + TAD CHKSUM /ADD IT TO CHECKSUM + DCA CHKSUM + TAD OUTPT2 /GET CHARACTER + TAD (-211 /IS IT A TAB? + SNA CLA + JMP OUTPT3 /YES - OUTPUT SPACES + JMS OUTPUX /NO - OUTPUT CHARACTER + TAD OUTPT2 /IS IT LINE FEED? + TAD (-212 + SZA CLA + JMP I OUTPUT /NO--RETURN-- + TAD [7773 /YES - RESET LSTCNT + DCA LSTCNT + JMP I OUTPUT /--RETURN-- + + /OUTPUT SPACES INSTEAD OF TAB + +OUTPT3, TAD [240 + DCA OUTPT2 + JMS OUTPUX /OUTPUT SPACE + TAD LSTCNT /TAB STOPS ARE EVERY 8 SPACES + AND [7 + SZA CLA + JMP .-4 + JMP I OUTPUT /--RETURN-- + +/OUTPUT THE CHARACTER +/PACKS CHARACTERS IN STANDARD OS/8 FORMAT + +OUTPUX, 0 + ISZ OUJMP /BUMP 3-WAY SWITCH +OUJMP, HLT /WILL BE CHANGED - SHOULD NEVER HALT + JMP OCHAR1 /CHARACTER #1 + JMP OCHAR2 /CHARACTER #2 +OCHAR3, TAD OUTPT2 /CHARACTER #3 + CLL RTL + RTL + AND [7400 + TAD I OUPOLD /ADD 4 BITS TO WORD 1 + DCA I OUPOLD + TAD OUTPT2 + CLL RTR + RTR + RAR + AND [7400 + TAD I OUPTR /ADD 4 BITS TO WORD 2 + DCA I OUPTR + TAD OUJMPE + DCA OUJMP /RESET SWITCH + ISZ OUPTR + ISZ OUDWCT /BUFFER FULL? + JMP OUCHLV /NO + TAD [200 /YES + JMS I (OUTDMP /DUMP BUFFER + JMS OUSETP /RESET POINTERS + JMP OUCHLV + + OCHAR2, TAD OUPTR /SAVE POINTER + DCA OUPOLD + ISZ OUPTR +OCHAR1, TAD OUTPT2 + DCA I OUPTR /SET 8 BIT WORD +OUCHLV, TAD OUTPT2 +/ TAD [40 +/ AND [100 /CHECK FOR PRINTABLE CHAR +/ SZA CLA /IF IT IS, + TAD [-240 + SMA CLA + ISZ LSTCNT /BUMP TAB COUNT +OUTINH, 0 /ALWAYS 0 OR 1! + JMP I OUTPUX /--RETURN-- + +OUPOLD, 0 +OUPTR, 0 +OUJMPE, JMP OUJMP +OUDWCT, 0 +OUTPT2, 0 + +OUSETP, 0 + TAD [7600 /SET OUTPUT WORD COUNT + DCA OUDWCT /TO 200 + TAD (OUBUF + DCA OUPTR /RESET POINTER + TAD OUJMPE + DCA OUJMP /RESET SWITCH + CLL /MUST CLEAR LINK!! + JMP I OUSETP /--RETURN-- + /HANDLER FOR DEVICE PSEUDO-OP + +DEVICX, JMS I [SPNOR /IGNORE TRAILING SPACES + TAD [-5 + JMP DEVIC1 /PACK 4 CHARACTERS + + +/HANDLER FOR FILENAME PSEUDO-OP + +FILENX, JMS I [SPNOR /IGNORE TRAILING SPACES + TAD (-7 + JMS FILE1 /PACK 6 CHARACTERS + TAD CHAR + TAD [-". /WAS CHARACTER . ? + SNA CLA + JMS I [GETC /YES-SKIP TO EXTENSION + AC7775 +DEVIC1, JMS FILE1 /PACK 2 CHARACTERS + JMP I [LOOKEX /--EXIT TO MAIN-- + +/PACK CHARACTERS +/NEGATIVE OF # OF CHARACTERS TO BE PACKED IN AC ON ENTRY + +FILE1, 0 + DCA FILE6 /SAVE # OF CHARACTERS TO PACK + DCA I (TEXT6 /RESET PACK SWITCH +FILE4, JMS I (TSTALN /IS CHARACTER IN CHAR ALPHANUMERIC? + SKP + JMP FILE5 /NO-DONE PACKING + ISZ FILE6 /YES-TOO MANY CHARACTERS? + JMP FILE3 /NO-O.K. + CLA CMA /YES + DCA FILE6 /RESET # OF CHARACTERS AND IGNORE + JMP FILE2 + +FILE3, TAD CHAR + JMS I (TEXT2 /PACK A CHARACTER +FILE2, JMS I [GETC /GET A CHARACTER + JMP FILE4 /TEST IT + + JMS I (TEXT2 /PACK A ZERO CHAR +FILE5, ISZ FILE6 /ARE WE DONE? + JMP .-2 /NO - PAD WITH ZEROES + JMP I FILE1 /YES--RETURN-- +FILE6, 0 + PAGE + /HANDLER FOR TEXT PSEUDO-OP +/SPACES ARE IGNORED TO DELIMITER +/DELIMITER IS FIRST PRINTING CHARACTER +/OTHER THAN SPACE +/NON-PRINTING CHARACTERS ARE ILLEGAL +/A PRINTING CHARACTER HAS EITHER BIT 5 +/OR BIT 6 SET, BUT NOT BOTH + +TEXT8, JMS I [GETC /GET NEXT CHARACTER +TEXTX, CLL CLA CML RAR /AC=4000 + DCA GETCI /; AND / ARE NOT END OF LINE + JMS TEXT1A /CHECK FOR PRINTING CHARACTER + JMP TEXT8 /NON PRINTING - IGNORE + TAD [-240 /IGNORE SPACES UNTIL DELIMITER + SNA /HAS BEEN FOUND + JMP TEXT8 + TAD [240 /RESTORE CHARACTER + CIA + DCA VALUE2 /STORE NEGATIVE DELIMITER + DCA TEXT6 /SET PACKING SWITCH +TEXT3, JMS I [GETC /GET NEXT CHARACTER + JMS TEXT1A /IS IT A PRINTING CHARACTER? + JMP TEXT9 /NO - IC + TAD VALUE2 /YES - IS IT DELIMITER? + SNA CLA + JMP TEXT4 /YES - TERMINATE + TAD CHAR /NO - PACK AND OUTPUT + JMS TEXT2 /PACK IT + JMP TEXT3 + +TEXT4, DCA GETCI /RESET GETCI TO CALL ; AND / END OF LINE + JMS I [GETC /SKIP DELIMITER +TEXT4X, JMS TEXT2 /OUTPUT 0 TO FILE + JMS TEXT2 +/CHANGE TEXT4X TO: +/ NOP +/FOR NO EXTRA WORD OF ZEROS + DCA GETCI /RESET GETCI IN CASE WE HIT CR + JMP I [LOOKEX /--EXIT TO MAIN-- + TEXT9, JMS I [ERROR /GENERATE IC ERROR MESSAGE + IC + JMP TEXT3 + +/SKIP ON PRINTING CHARACTER + +TEXT1A, 0 + TAD CHAR + SPA SNA CLA /IS CHARACTER - + JMP TEXT4X /YES + TAD CHAR + TAD [40 + AND [100 + SZA CLA /IS THE CHAR PRINTING? + ISZ TEXT1A /YES - INCREMENT RETURN + TAD CHAR /WITH CHARACTER IN AC + JMP I TEXT1A /--RETURN-- + +/OUTPUT 2 TEXT CHARACTERS (ONE REGISTER) +/ENTER WITH CHARACTERS IN AC + +TEXT2, 0 + AND [77 /GET RIGHT 6 BITS + ISZ TEXT6 /WHICH HALF OF WORD? + JMP TEXT5 /LEFT + TAD TEXT7 /RIGHT--ADD IN LEFT HALF + JMS I [PUNBIN /OUTPUT IT + JMP I TEXT2 /--RETURN-- + +TEXT5, JMS I [RTL6 /GET LEFT HALF OF WORD + DCA TEXT7 /SAVE IT + CLA CMA /SET SWITCH FOR RIGHT HALF + DCA TEXT6 + JMP I TEXT2 /--RETURN-- + +TEXT6, 0 +TEXT7, 0 + /HANDLER FOR EXPUNGE PSEUDO-OP + +EXPUNX, TAD PASS /IS THIS PASS 1 + SMA CLA + JMP I [LOOKEX /NO--EXIT TO MAIN-- + JMP I (EXPUNW /YES-CONTINUE AT EXPUNW + + + +/CLOSE OUTPUT FILE + +OCLOSE, 0 + TAD I (OUTINH /OUTPUT INHIBITED? + SZA CLA + JMP I OCLOSE /YES--RETURN-- +PTPSW, TAD [232 /NO-0 IF PTP: - OUTPUT ^Z + JMS I OCHAR + JMS I OCHAR /AND ZEROS +FILLLP, JMS I OCHAR +DIRSW, TAD [177 /TAD [77 IF NOT DIRECTORY + AND I (OUDWCT /FILL OUT BUFFER OR HALF BUFFER + SZA CLA /WITH ZEROS + JMP FILLLP + TAD I (OUDWCT /IS THERE OUTPUT TO BE DUMPED? + TAD [200 + SZA + JMS OUTDMP /YES - DUMP IT + TAD OUFILE /GET DEVICE NUMBER IN AC + CIF 10 + JMS I IOMON /CALL USER SERVICE ROUTINES + 4 /*CLOSE OUTPUT FILE* +OUCNAM, 0 /POINTER TO FILENAME TO BE DELETED +OUCCNT, 0 /LENGTH OF NEW PERMANENT FILE + JMP SYSER3 /DE**FATAL ERROR** + JMP I OCLOSE /--RETURN-- + +OUFILE, ZBLOCK 5 + /OUTPUT DUMP +/AC CONTAINS CONTROL WORD FOR DUMP + +OUTDMP, 0 + TAD [4000 /BE SURE CONTROL WORD IS + DCA OUCTLW /A WRITE OPERATION + TAD OUBLK /GET STARTING BLOCK NUMBER + TAD OUCCNT /ADD IN COUNT + DCA OUREC /SET THIS BLOCK NUMBER + TAD OUCTLW + TAD [100 /ROUND HALF-BLOCK, IF ANY + CLL RTL + RTL + RTL + AND [17 /GET THIS COUNT + TAD OUCCNT + DCA OUCCNT /ADD TO TOTAL COUNT + TAD OUCCNT /IS OUTPUT DEVICE FULL? + CLL CML + TAD OUELEN /CHECK AGAINST MAXIMUM LENGTH + SNL SZA CLA + JMP SYSER2 /DF**FATAL ERROR** + JMS I OUHNDL /CALL OUTPUT DEVICE HANDLER +OUCTLW, 0 /CONTROL WORD + OUBUF /BEGINNING OF OUTPUT BUFFER +OUREC, 0 /STARTING BLOCK NUMBER +SYSER3, CLA SKP /ERROR RETURN + JMP I OUTDMP /--RETURN-- +SYSERR, TAD (DE /DE **FATAL ERROR** + JMP I [MONERR + +OUHNDL, 0 +OUBLK, 0 +OUELEN, 0 + +SYSER2, TAD (DF /GENERATE DF ERROR MESSAGE + JMP I [MONERR /**FATAL ERROR** + PAGE + /MAINLINE CODE + +LOOKE2, 0 /WAS THIS END OF LINE + TAD CHAR / OR END OF CONDITIONAL? + TAD [-"> + SNA + JMP CONEND /END OF CONDITIONAL + TAD ("> + SMA CLA + JMP I LOOKE2 /NOT END OF LINE--RETURN-- +LOOKE1, JMS I [GETC /GET A CHARACTER +MAIN, JMS I (CTCCHK /CHECK FOR ^C + CLA /** CTCCHK RETURNS AC NON-ZERO! + JMS I [SPNOR /IGNORE SPACES + TAD CHAR + TAD (-"$ /WAS IT $ ? + SNA /YES-- + JMP I (ENDPAS /NO-END THIS PASS + TAD ("$-"* + SNA CLA /WAS IT * ? + JMP STAR /YES-HANDLE * + JMS I [TSTALP /NO-WAS IT ALPHABETIC? + JMP ALPHA /YES + JMS LOOKE2 /NO +TOEXP, JMS I [EXP /GET REST OF EXPRESSION + TAD LININD + DCA LINKSW /STORE LINK SWITCH + TAD VALUE + JMS I [PUNBIN /OUTPUT THE REGISTER +LOOKEX, JMS I [SPNOR /IGNORE TRAILING SPACES + JMS LOOKE2 /IS LINE ENDED? +ILCHAR, JMS I [ERROR /NO-GENERATE IC ERROR MESSAGE + IC + JMP CONEN1 + +CONEND, TAD CONDSW /ARE WE INTO CONDITIONALS? + SNA + JMP ILCHAR /NO - > IS ILLEGAL + IAC /ONE LESS CONDITIONAL + DCA CONDSW +CONEN1, JMS I [GETC /GET NEXT CHARACTER + JMP LOOKEX /AND TRY FOR END AGAIN + /HANDLER FOR * + +STAR, JMS I [GETC /GET NEXT CHARACTER AFTER * + JMS I [SPNOR /IGNORE SPACES + JMS I [EXP /GET REST OF EXPRESSION +STAR0, DCA STARSW /ENTER HERE FROM RELOC WITH AC = -1 + ISZ UNDFSW /WAS ANYTHING UNDEFINED? + JMP .+3 + JMS I [ERROR /YES-GENERATE UO ERROR MESSAGE + UO + TAD VALUE /NO + DCA OP + TAD LOC /IS THIS THE SAME PAGE AS + AND [7600 /THE PREVIOUS CODE? + CIA + TAD OP + AND [7600 + SNA CLA + JMP STAR2 /YES-PUNCH ORIGIN + JMS I [DUMPS /NO-DUMP LITERALS + TAD OFSBUF /SET OFFSET TO NEW VALUE + DCA OFFSET /AFTER LITERALS ARE DUMPED. + TAD OP /PUNCH NEW ORIGIN, SET "VALUE" + JMP I (STAR3 /FOR LISTING, AND SET UP IN NEW PAGE + +STAR2, TAD OFSBUF /SET OFFSET TO NEW VALUE + DCA OFFSET / + TAD OP + JMS I [PUNORG /PUNCH ORIGIN + DCA LAST1 /CLEAR LAST DEFINED SYMBOL + JMP I [PUNVAL + +ALPHA, JMS I [GETTAG /PICK UP TAG-IS IT IN TABLE? + DCA ALPHAI /STORE UNDEFINED TAG SWITCH + TAD TAG3 /IS IT A PSEUDO-OP? + SPA CLA + JMP I VALUE2 /YES-GO TO ITS HANDLER + TAD CHAR /NO + TAD (-", /WAS IT TERMINATED BY , ? + SNA + JMP COMMA /YES-DEFINE THE SYMBOL + TAD (",-"= /NO-WAS IT TERMINATED BY = ? + SNA CLA + JMP I (EQUAL /YES-EQUATE THE SYMBOL + AC4000 /NO + JMP TOEXP /TREAT AS AN EXPRESSION + /HANDLER FOR , + +COMMA, JMS I [GETC /GET NEXT CHARACTER + ISZ ALPHAI /WAS TAG DEFINED PREVIOUSLY? + JMP COMMA2 /YES + TAD LOC /NO-STORE CURRENT ADDRESS FOR DEFINITION + DCA VALUE2 + JMS I [INSRTG /PUT TAG IN SYMBOL TABLE +COMMA1, TAD TAG1 /STORE FOR ERROR MESSAGE OUTPUT + DCA LAST1 + TAD TAG2 + DCA LAST2 + TAD TAG3 + DCA LAST3 + TAD VALUE2 + DCA LAST4 + JMP MAIN /--EXIT TO MAIN-- + +COMMA2, TAD LOC /DO NEW AND OLD DEFINITIONS AGREE? + CIA + TAD VALUE2 + SNA CLA + JMP COMMA1 /YES-ALLOW REDEFINITION + JMS I [ERROR /NO-GENERATE ID ERROR MESSAGE + ID + JMP MAIN /--EXIT TO MAIN-- + OPTABL, OP0 /+ + OP1 /- + OP6 /% + OP2 /& + OP5 /(SPACE) +OPEXPL, OP5 /! - CHANGED TO OP3 IF /B ON + OP4 /^ +XCHANG, 0 + TAD VALUE + AND [30 + SNA + JMP .+3 + TAD [7700 + JMS I OCHAR + JMP I XCHANG + PAGE + /EXPRESSION PROCESSOR +/POSSIBLE RECURSIVE ENTRY +/ENTER WITH CHARACTER IN CHAR + +EXP, 0 + DCA EXPIND /SET INDICATOR (NOT 0 IF NO MRI FOUND) + DCA LININD /CLEAR LINK GENERATED SWITCH (' ) + DCA VALUE /START WITH "VALUE" = 0 + DCA UNDFSW /CLEAR UNDIFINED SWITCH + TAD EXP + JMS I [PUSHA /SAVE RETURN ADDRESS + DCA OP /OP=0; ADD + TAD EXPIND + SPA CLA + JMP I (EXPINT + TAD CHAR /IS CHARACTER A + ? + TAD (-"+ + CLL RTR /PUT THE 2 BIT IN THE LINK + SZA CLA /WAS CHAR 53(+) OR 55(-)? + JMP EXP1A /NO + RAL /YES - OP IS 0 OR 1, DEPENDING +EXP1, DCA OP + JMS I [GETC /GET NEXT CHARACTER + ISZ EXPIND /MRI NO LONGER LEGAL ON THIS LINE +EXP1A, TAD CHAR /IS CHARACTER A . ? + TAD [-". + SNA + JMP PERIOD /YES-GO TO . HANDLER + TAD (".-"" /NO-IS IT " ? + SNA + JMP QUOTE /YES-GO TO " HANDLER + TAD (""-"[ /NO-IS IT [ ? + CLL + SZA + TAD ("[-"( /OR (? + SNA CLA + JMP I (LIT /YES - LITERAL - LINK HOLDS WHICH KIND + JMS I [TSTALP /NO-IS IT ALPHABETIC? + JMP I (ALPHA1 /YES-HANDLE SYMBOL + JMS I [TSTNUM /NO-IS IT NUMERIC? + JMP NUMBER /YES-HANDLE NUMBER + +EXP2, JMS ENDCHK /NO-CHECK FOR END + JMP EXP1A /NOGO - TRY AGAIN + TAD OP + TAD [-4 /IS OP SPACE (4) + SNA CLA + JMP I (EXPXIT /YES-EXIT + JMS I [ERROR + IC /GIVE IC MESSAGE ON ILLEGAL OPERATOR + JMP I (EXPINT /EXIT ANYWAY + /END OF EXPRESSION CHECK +/SKIP IF OK + +ENDCHK, 0 + TAD CHAR + TAD (-"] /IS CHARACTER A ] ? + SZA /YES-SKIP A EXIT + TAD ("]-") /IS CHARACTER A ) ? + SZA /YES-SKIP A EXIT + TAD (")-"> /IS CHARACTER A > ? + SZA /YES-SKIP AND EXIT + TAD (">-"< /IS CHARACTER A < ? + SNA + JMP ENDCH1 /YES-SKIP AND EXIT + TAD ("< + SPA CLA /IS IT END-OF-LINE? + JMP ENDCH1 /YES-SKIP AND EXIT + JMS I [ICMESG /NO - GENERATE IC MESSAGE AND GET NEXT CHAR + JMP I ENDCHK /--RETURN-- + +ENDCH1, ISZ ENDCHK /INCREMENT RETURN ADDRESS + JMP I ENDCHK /--RETURN-- + +NUMBER, DCA TEMP +NUMBE2, TAD RADIX /IS THE CURRENT RADIX OCTAL? + SNA CLA + TAD CHAR /YES-IS THE DIGIT GREATER THAN 7? + TAD (-"8 + SMA CLA + JMP NUMBE3 /YES-ILLEGAL CHARACTER + TAD TEMP /NO-ADD IT TO THE PREVIOUS + CLL RAL /ACCUMULATED VALUE + CLL RAL + DCA TEMP2 + TAD RADIX /IS RADIX OCTAL? + AND TEMP /NO + TAD TEMP2 /YES + CLL RAL + TAD CHAR + TAD (-"0 + DCA TEMP + JMS I [GETC /GET NEXT CHARACTER +NUMBE4, JMS I [TSTNUM /IS IT NUMERIC? + JMP NUMBE2 /YES-CONTINUE ACCUMULATING NUMBER + TAD TEMP /NO-STORE NUMBER +NUMBE1, DCA VALUE2 +NUMBE5, TAD OP /GO COMBINE IT VIA LAST OPERATION + TAD (OPTABL + DCA TEMP /FIND THE OPERATOR HANDLER + TAD I TEMP + DCA TEMP + JMP I TEMP /GO TO THE HANDLER + /8 OR 9 FOUND DURING OCTAL RADIX + +NUMBE3, JMS I [ICMESG /GENERATE IC ERROR MESSAGE AND + JMP NUMBE4 /IGNORE CHARACTER + + +/HANDLER FOR . + +PERIOD, JMS I [GETC /GET NEXT CHARACTER + TAD LOC /MAKE CURRENT LOCATION + JMP NUMBE1 /INTO VALUE OF NUMBER + +/HANDLER FOR " + +QUOTE, ISZ TXTPTR + TAD I TXTPTR /GET CHARACTER FROM TEXT BUFFER + TAD [-215 /WAS IT CARRIAGE RETURN? + SNA CLA + JMP QUOTE1 /YES-IT IS IC-IGNORE " + TAD I TXTPTR /NO-PUT ASCII CODE INTO + DCA VALUE2 /VALUE WORD + JMS I [GETC /GET NEXT CHARACTER + JMP NUMBE5 /RETURN TO EXPRESSION PROCESSOR + +/CARRIAGE RETURN FOUND IN SINGLE CHARACTER TEXT + +QUOTE1, JMS I [ERROR /GENERATE IC ERROR MESSAGE + IC + CLA CMA + DCA CHAR + JMP I (EXPXIT + PAGE + /COME HERE IF FIRST THING IN EXPRESSION IS ALPHA CHARACTER + +ALPHA1, JMS I [GETTAG /PICK UP TAG + DCA ALPHAI /STORE UNDEFINED INDICATOR +ALPHA3, TAD TAG3 /IS IT A PSEUDO-OP? + SMA CLA + JMP .+3 + JMS I [ERROR /YES-GENERATE IP ERROR MESSAGE + IP + ISZ ALPHAI /NO-WAS IT UNDEFINED? + JMP ALPHA0 + ISZ UNDFSW /YES-SET UNDEFINED SWITCH + TAD PASS /IS THIS PASS 1? + SPA CLA + JMP ALPHA0 /YES-SUPPRESS ERROR MAESSAGE + JMS I [ERROR /NO-GENERATE US ERROR MESSAGE + US +ALPHA0, TAD TAG2 /NO-WAS IT A MEMORY REFERENCE INSTRUCTION? + SPA CLA + TAD CHAR /YES-GET TERMINATING CHARACTER + TAD [-240 /WAS IT SPACE? + SZA CLA + JMP I (NUMBE5 /NOT MEMREF FOLLOWED BY SPACE + JMS I [SPNOR /YES-IGNORE SPACES + TAD CHAR + SPA CLA + JMP I (NUMBE5 + TAD EXPIND /IS MEMORY REFERENCE INSTRUCTION OK? + SZA CLA + JMP I (NUMBE5 /NO- + DCA IZIND /YES-CLEAR I AND Z INDICATOR + TAD VALUE2 /STORE MRI ON PUSHDOWN LIST + JMS I [PUSHA + ALPHA6, TAD IZIND + JMS I [PUSHA /PUSH THE I AND Z INDICATOR + JMS I [TSTALP /WAS TERMINATING CHARACTER ALPHABETIC? + SKP + JMP ALPHA4 /NO- + JMS I [GETTAG /YES-PICK UP TAG + DCA ALPHAI /STORE UNDEFINED INDICATOR + AC2000 + AND TAG1 /WAS IT AN I OR Z? + SNA CLA + JMP ALPHA5 /NO + TAD VALUE2 /YES-WAS IT I? + SNA + IAC /NO - SET LOW ORDER + TAD I PDLXR /GET OLD IZIND FROM PDL + DCA IZIND /SET NEW IZIND + JMS I [SPNOR /IGNORE SPACES + JMP ALPHA6 + +EXPINT, TAD EXPIND + TAD [4000 + DCA EXPIND + JMP ALPHA3 + +ALPHA5, AC4000 +ALPHA4, IAC + JMS I [EXP /GET REST OF EXPRESSION + TAD I PDLXR /RETRIEVE MRI + DCA IZIND + TAD I PDLXR + DCA VALUE2 + /FALL INTO NEXT PAGE + /COMBINE ADDRESS WITH MEMORY REFERENCE INSTRUCTION + + TAD VALUE /GET ADDRESS + AND [7600 + SNA /IS IT PAGE 0? + JMP FIX4 /YES + CIA /NO-IS IT ON CURRENT PAGE? + TAD LOC + AND [7600 + SNA CLA + JMP FIX2 /YES + TAD VALUE /NO-SET UP LINK + JMS I (FINDS + DCA VALUE + TAD FIXMD0 /SET ' IN LISTING + DCA LININD + ISZ LINK /BUMP NUMBER OF LINKS GENERATED +FIXMD0, 0700 /PROTECTION FOR ISZ +LGERR, SKP /JMS I PERROR IF /E SPECIFIED + LG + JMS ADDIND /SET INDIRECT BIT IN INSTRUCTION +FIX2, TAD [200 /SET CURRENT PAGE BIT + TAD VALUE2 + DCA VALUE2 + TAD IZIND + AND [77 /WAS Z SPECIFIED? + SNA CLA + JMP FIX4 /NO + JMS I [ERROR /YES - ILLEGAL REFERENCE + IZ /TO PAGE 0 +FIX4, TAD IZIND /WAS THERE AN I? + AND [7700 + SZA CLA + JMS ADDIND /YES - ADD INDIRECT BIT TO INSTRUCTION + TAD VALUE /GET ADDRESS + AND [177 + TAD VALUE2 /GET OP CODE + DCA VALUE /STORE +POPJ, TAD I PDLXR + DCA TEMP /POP A WORD OFF THE STACK + JMP I TEMP /JUMP THROUGH IT. + ADDIND, 0 /ROUTINE TO ADD INDIRECT BIT TO AN INSTR + TAD VALUE2 + CMA + AND [400 + SZA /WAS THERE ONE ALREADY? + JMP .+3 /NO + JMS I [ERROR /YES - ILLEGAL INDIRECT + II + TAD VALUE2 + DCA VALUE2 + JMP I ADDIND + +/ ALLOWS MULTIPLE NON-RESIDENT INPUT HANDLERS TO NOT BOMB + +PTCH, 0 /RUNS IN DF 10 + TAD (7647 /POINT TO DEVICE + DCA PTR /HANDLER RESIDENCY TABLE + TAD [-17 /IT HAS 15 ENTRIES + DCA KNTR /V3C +KLOOP, TAD I PTR /GET HANDLER ENTRY POINT + AND [7600 /LOOK AT PAGE IT'S ON + TAD [-INDEVH /IS IT ON THE PAGE WE PUT BUFFER OVER? + SNA CLA /WELL? + DCA I PTR /YES IT IS, WIPE IT FROM RESIDENCY + ISZ PTR /LOOK AT NEXT ENTRY + ISZ KNTR /ANY MORE ENTRIES? + JMP KLOOP /YES, MIGHT HAVE TO WIPE SEVERAL GUYS + TAD [200 /INCREASE INPUT BUFFER SIZE + JMP I PTCH /V3C + PAGE + /COMBINE CURRENT VALUE WITH PREVIOUS VALUE +/ACCORDING TO LAST OPERATOR + +OP0, TAD VALUE2 /HANDLER FOR + + TAD VALUE /** OP0+1 AND OP0+2 JUMPED TO ** + DCA VALUE +EXP3, TAD CHAR /GET LAST OPERATOR + TAD (-"+ /WAS IT A + OR - ? + CLL RTR + SNA + JMP PLSMIN /YES - LINK=0 FOR +, 1 FOR - + RTL + TAD ("+-"% + CLL RAR + SNA /IS THE CHAR % OR &? + JMP DIVAND /YES - LINK=0 FOR %, 1 FOR & + RAL + TAD ("%-240 + CLL RAR + SNA /IS THE CHAR SPACE OR !? + JMP BLKEXP /YES - LINK=0 FOR SPACE, 1 FOR ! + RAL + TAD (240-"^ + SNA CLA /IS THE CHAR ^? + JMP MUL /YES - LINK IRRELEVANT + JMS I (ENDCHK /NO-SEE IF END OF LINE FOUND + JMP EXP3 /NO-TRY AGAIN +EXPXIT, TAD UNDFSW /EXIT FROM EXP + SNA CLA /RESTORE EXIT POINT + JMP I (POPJ /--EXIT VIA POPJ-- + CLA CMA + DCA UNDFSW /SET UNDEFINED SWITCH + DCA VALUE /RESULT IS 0 + JMP I (POPJ /--EXIT VIA POPJ-- + MUL, CLL IAC /LINK DOESN'T COUNT FOR ^ +BLKEXP, IAC /** BLANK ASSUMED TO BE 4 ELSEWHERE ** +DIVAND, IAC +PLSMIN, RAL + JMP I (EXP1 /GET REST OF EXPRESSION + +/HANDLER FOR & + +OP2, TAD VALUE + AND VALUE2 + JMP OP0+2 + + +/HANDLER FOR ^ +/MULTIPLY BY REPEATED ADDITION + +OP4, TAD VALUE + CIA + DCA TEMP + TAD VALUE2 + ISZ TEMP + JMP .-2 + JMP OP0+2 + +OP1, TAD VALUE2 /- OPERATOR + CIA + JMP I (OP0+1 /JUMP INTO ADD OPERATOR + +/OPTIONAL HANDLER FOR ! AS 6 BIT LEFT SHIFT AND THEN OR: + +OP3, TAD VALUE + JMS I [RTL6 + AND [7700 /ISOLATE 6 BITS AND FALL INTO "OR" + DCA VALUE /V3C + +/HANDLER FOR ! AND SPACE AS INCLUSIVE OR + +OP5, TAD VALUE + CMA + AND VALUE2 + JMP I (OP0+1 + /CHARACTER INPUT CHECK +/ENTER WITH CHARACTER IN AC + +LSTCH9, SZA /IGNORE NULL (0) + TAD (-177 + SZA /IGNORE RUBOUT (377) + TAD (177-13 + SZA /IGNORE VERTICAL TAB (213) + IAC + SNA + JMP I (INPUT+1 /IGNORE LINE FEED (212) + TAD [12-32 /WAS IT ^Z (END-OF-FILE=232)? + SNA + JMP I (ENDCHR /YES - GET NEXT FILE + TAD (32-15 /NO - WAS IT CARRIAGE RETURN? + SNA + JMP LSTCHR /YES - LAST CHARACTER OF LINE + IAC /NO + SNA /WAS IT FORM FEED (214)? + JMP FORCHR /YES - HANDLER FORM FEED + ISZ I (INPUT + TAD (14+200 + DCA LSTCH5 /STORE CHARACTER + TAD PASS /IS THIS PASS 3? + SPA SNA CLA + JMP LSTCH4 /NO - + ISZ LSTCH6 /YES - FILLING HEADER AREA? + JMP LSTCH3 /YES + CLA CMA /NO - RESET SWITCH + DCA LSTCH6 +LSTCH4, TAD I (INPUT + DCA TEMP + TAD LSTCH5 /GET CHARACTER IN AC + JMP I TEMP /-EXIT FROM INPUT- + +LSTCH3, ISZ LSTCH7 /FILLING HEADER + TAD LSTCH5 /STORE CHARACTER IN HEADER AREA + DCA I LSTCH7 + JMP LSTCH4 + +LSTCH5, 0 +LSTCH6, -HEDLEN +LSTCH7, HEADER-1 + LSTCHR, TAD FORMSW /CARRIAGE RETURN WAS FOUND + SNA CLA /HAS THERE BEEN A FORM FEED? + JMP LSTCH1 /NO - + DCA FORMSW /YES - CLEAR FORM FEED SWITCH + ISZ EDITPG /GO TO NEXT EDITOR PAGE + DCA THISPG /CLEAR OVERFLOW PAGE + TAD PASS /IS THIS PASS 3? + SMA SZA CLA + JMS I [FORMFD /YES - GENERATE FORM FEED +LSTCH1, TAD [215 /NO - CARRIAGE RETURN IS CHARACTER + DCA LSTCH5 + JMP LSTCH4-2 /EXIT + +FORCHR, ISZ FORMSW /SET FORM FEED SWITCH + JMP I (INPUT+1 /GET ANOTHER CHARACTER + +FORMSW, 1 + PAGE + /ERROR MESSAGE OUTPUT + +DUMPS1, +ERROR, 0 + CLA + ISZ ERCNT /COUNT THE ERRORS +ERPLUS, "+ /PROTECTION + TAD I ERROR /GET ERROR MESSAGE + ISZ ERROR /INCREMENT RETURN ADDRESS + JMS I [ERROR1 /OUTPUT 2 CHARACTER ERROR MESSAGE + TAD (JMP I [7600 /PUT EXIT TO MONITOR +CSWIT1, DCA I (LSWITC /IN SWITCH - "CLA" IF /C + TAD PASS /IS THIS PASS 3? + SMA SZA CLA + JMP ERROR4 /YES - CARRIAGE RETURN/LINE FEED + JMS I [ERROR1 /NO - OUTPUT 2 SPACES + TAD [1777 /IS THERE A TAG SAVED? + AND LAST1 + SNA + JMP ERROR3 /NO + JMS I (DIV45 /YES - OUTPUT FIRST 2 CHARACTERS + TAD LAST2 /OUTPUT SECOND 2 CHARACTERS + JMS I (DIV45 + TAD LAST3 + JMS I (DIV45 /OUTPUT THIRD 2 CHARACTERS + TAD LAST4 /IS ERROR LOCATION SAME AS LAST TAG? + CIA + TAD LOC + SNA CLA + JMP ERROR4 /YES - CARRIAGE RETURN + TAD ERPLUS + JMS I OERROR + TAD LAST4 + CIA +ERROR3, TAD LOC /OUTPUT 4 DIGIT ADDRESS OR INCREMENT + JMS I (OCTPRT +ERROR4, TAD [215 /OUTPUT CARRIAGE RETURN/LINE FEED + JMS I OERROR + JMP I ERROR /--RETURN-- + /RESET LITERAL TABLES AND POINTERS + +DUMPS5, +CLEAN, 0 + TAD (LITBUF-1 + DCA XREG1 /SET LITERAL TABLE POINTER + TAD (TPINST-1 + DCA XREG2 /SET TOP INST. TABLE POINTER + TAD (-40 + DCA TEMP + TAD [200 + DCA I XREG1 /SET LITERAL TABLE ENTRIES TO 200 + DCA I XREG2 /SET TOP INST. TABLE ENTRIES TO 0 + ISZ TEMP + JMP .-4 + DCA LAST1 /CLEAR LAST DEFINED TAG + JMP I CLEAN /--RETURN-- + +/DUMP CURRENT PAGE LITERALS + +DUMPS, 0 + JMS I [FINDSP + SNA /IF THIS IS PAGE 0, + JMP I DUMPS /--RETURN-- + TAD [LITBUF + DCA DUMPS1 + TAD LITPTR + CIA CLL + TAD I DUMPS1 + DCA DUMPS2 /STORE NUMBER OF LITERALS ON THIS PAGE + SZL /ARE THERE ANY? + JMP D2 /V3C + DCA STARSW /FORCE ORIGIN PUNCH IF RELOC JUST INVOKED + TAD LOC + AND [7600 + TAD I DUMPS1 + JMS I [PUNORG /OUTPUT ORIGIN + TAD I DUMPS1 + TAD (LITBF1 +DUMPS3, DCA DUMPS5 + TAD I [LINBUF /SAVE LINBUF + JMS I [PUSHA + DCA I [LINBUF +DUMPS6, TAD I DUMPS5 + DCA VALUE +JMSPUN, JMS I [PUNONE /OUTPUT ONE REGISTER + ISZ LOC + ISZ DUMPS5 +LITHAK, ISZ I DUMPS1 /DESTROY RECORD OF CURRENT PAGE LITERALS - + /ZEROED IF NO /W OPTION SPECIFIED + ISZ DUMPS2 + JMP DUMPS6 + TAD I PDLXR + DCA I [LINBUF /RESTORE LINBUF +D2, TAD DUMPS1 /WIPE REMEMBRANCE OF TOP OF PAGE (JR) + TAD (40 /V3C + DCA DUMPS5 +D3, DCA I DUMPS5 + JMP I DUMPS /--RETURN-- + /HANDLER FOR ZBLOCK PSEUDO-OP +/RESERVES AS MANY WORDS OF ZERO +/AS VALUE OF EXPRESSION + +ZBLOCX, JMS I [SPNOR /IGNORE SPACES + JMS I [EXP /GET THE EXPRESSION + TAD VALUE + CMA /PROTECT AGAINST ZERO CASE + DCA TEMP3 /STORE NEGATIVE AS COUNTER + JMP ZBLOCZ /JUMP INTO LOOP +ZBLOCY, JMS I [PUNBIN /OUTPUT ONE WORD OF ZERO + TAD PASS /IS THIS PASS 3? + SMA SZA CLA + DCA I (PUNMOD /YES - PREVENT OUTPUT +ZBLOCZ, ISZ TEMP3 /NO - DONE YET? + JMP ZBLOCY /NO - CONTINUE + TAD JMSPUN /YES - RESTORE PUNMOD + DCA I (PUNMOD + JMP I [LOOKEX /--EXIT TO MAIN-- + +/DUMP PAGE 0 LITERALS + +DUMPS2, +DUMPZ, 0 + TAD DUMPZ /RESET EXIT FROM DUMPS + DCA DUMPS + TAD [200 + CIA CLL + TAD I [LITBUF /STORE THE NUMBER OF LITERALS ON PAGE 0 + DCA DUMPS2 + SZL /ARE THERE ANY? + JMP I DUMPS /NO - ** DUMPZ IS DESTROYED ** + TAD I [LITBUF + JMS I [PUNORG /OUTPUT ORIGIN + TAD I [LITBUF /SET VALUES FOR DUMPS + TAD (LITBF2 + JMP DUMPS3 + PAGE + /ENTER A TAG INTO SYMBOL TABLE + + IFZERO HASH< +INSRTG, 0 + TAD VALUE2 /SAVE VALUE 2 + JMS I [PUSHA + ISZ HIGHTG /COUNT IN THIS TAG + TAD TAGMAX + CLL CIA /GET LIMIT OF SYMBOL STORAGE + TAD HIGHTG /IS THERE ROOM FOR ONE MORE? + SZL + JMP I (SYMOFL /NO - SE**FATAL ERROR** + TAD TAGMAX /YES - IS USR IN CORE? + TAD (-1340 + SZL CLA + JMP GETTG5 /YES + TAD [7700 /NO - RESET ADDRESS TO + DCA IOMON /USR NON-RESIDENT + AC7776 + AND I (JSBITS /RESET JOB STATUS WORD TO + DCA I (JSBITS /SAVE CORE WHEN USR CALLED +GETTG5, TAD THISTG /SEARCH SYMBOL TABLE + DCA TEMP2 + TAD HIGHTG + IAC + DCA THISTG +GETTG8, AC7776 + TAD THISTG + DCA THISTG + JMS I [FINDTG /GET NEXT TAG FROM SYMBOL TABLE + ISZ THISTG + TAD THISTG + CIA + TAD TEMP2 /DOES NEW TAG GO WHERE PREVIOUS TAG WAS? + SNA CLA + JMP GETTG9 /YES-PUT IT THERE AND EXIT + JMS I [PUTTAG /NO-REPLACE RETRIEVED TAG WHERE PREVIOUS TAG WAS + JMP GETTG8 + +/THE ABOVE CODE WILL BE OPTIMIZED AT INITIALIZATION +/IF THE ASSEMBLER IS TO BE RESTRICTED TO 8K OF CORE + +GETTG9, TAD I (NAME1 /GET CURRENT TAG + DCA TAG1 /PUT IT IN TAG1-TAG3 + TAD I (NAME2 + DCA TAG2 + TAD I (NAME3 + DCA TAG3 + TAD I PDLXR /RESTORE VALUE 2 + DCA VALUE2 + JMS I [PUTTAG /PUT TAG1 - TAG3 INTO SYMBOL TABLE + JMP I INSRTG /--RETURN-- + +TAGMAX, 1740 /12K=3740, ... + > + +/ IFNZRO HASH< /***HACK ONLY*** +/TLYREF, 0 /TALLY REFS TO SYMBOL TABLE +/ ISZ NREFL +/ JMP I TLYREF +/ ISZ NREFH +/ JMP I TLYREF +/ JMP I TLYREF +/TLYPRB, 0 /TALLY PROBES INTO TABLE +/ JMS I [FINDTG /FUDGE, OUT OF ROOM +/ ISZ NPROBL +/ JMP I TLYPRB +/ ISZ NPROBH +/ JMP I TLYPRB +/ JMP I TLYPRB +/NREFH, 0 +/NREFL, 0 +/NPROBH, 0 +/NPROBL, 0 +/ > /***HACK ONLY*** + IFNZRO HASH< + + /INSERT A TAG INTO THE HASH TABLE + +INSRTG, 0 + ISZ HIGHTG /BUMP SYM NUM (SKIPS ON 0) + TAD HIGHTG + STL CMA + TAD TAGMAX + SNA SZL CLA /STILL ROOM FOR AT LEAST 2 MORE? + JMP I (SYMOFL /NO SE** FATAL ERROR** + TAD I (NAME1 + DCA TAG1 + TAD I (NAME2 + DCA TAG2 + TAD I (NAME3 + DCA TAG3 + JMS I [PUTTAG /NOW ACTUALLY INSERT IT + JMP I INSRTG + > + /OUTPUT 2 CHARACTER WORD +/FROM SYMBOL TABLE FORMAT +/DIVIDE BY 45(8) + +DIV45, 0 + RAL + CLL RAR /CLEAR SIGN BIT +DIV45A, ISZ DIV45C + TAD (-45 + SMA + JMP DIV45A + TAD (45 + JMS DIV45E + DCA DIV45B + STA + TAD DIV45C + JMS DIV45E + JMS I [RTL6 + TAD DIV45B + JMS I [ERROR1 /OUTPUT 2 CHARACTERS + DCA DIV45C /CLEAR DIV45C FOR NEXT GO-ROUND + JMP I DIV45 /--RETURN-- + +DIV45B, 0 +DIV45C, 0 /** MUST BE 0 WHEN DIV45 IS ENTERED ** + +DIV45E, 0 + SNA + JMP I DIV45E + TAD (-33 + SMA + TAD (20-40-33 + TAD (33+40 + JMP I DIV45E /--RETURN-- + /HANDLER FOR FIXTAB PSEUDO-OP + +FIXTBX, TAD PASS /IS THIS PASS 1? + SMA CLA + JMP I [LOOKEX /NO--EXIT TO MAIN-- + JMP I (FIXTAY /YES--DO FIXTAB + +/SET FIELD + +SETFLD, 0 + CLA CLL /SETFLD CALLED WITH AC RANDOM + DCA SETFL1 /INITIALIZE FIELD + IFNZRO HASH< + TAD USROFS /FUDGE FOR KEEPING USR AROUND + > + TAD THISTG +SETFLP, ISZ SETFL1 + CML + TAD (-1740 /PUT 1740 SYMBOLS IN EACH FIELD + SNL /IS THE DIVIDE THROUGH? + JMP SETFLP /NO - CONTINUE + IFZERO HASH< + CLL CMA RTL /AC CONTAINED REM-1740; THIS MAKES IT INTO + TAD (-1 /7573-4*REM WHICH IS THE ADDRESS WE WANT + > + IFNZRO HASH< + CLL RTL /AC GETS 0201 TO 7775 + TAD (-202 /AC GETS 7777 TO 7573 FOR TAGXR + > + DCA TAGXR /TO STICK INTO AN AUTO-XR + TAD SETFL1 + CLL RTL + RAL + TAD SETFL2 + DCA SETFL1 +SETFL1, HLT + JMP I SETFLD /--RETURN-- + IFNZRO HASH< +USROFS, 0 /GETS 400 IF KEEPING USR + > + /FIND TAG +/GET TAG FROM SYMBOL TABLE +/PUT IT INTO TAG1-TAG3 +/WITH ITS VALUE IN VALUE2 + +FINDTG, 0 + TAD THISTG + JMS SETFLD + TAD I TAGXR + DCA TAG1 + TAD I TAGXR + DCA TAG2 + TAD I TAGXR + DCA TAG3 + TAD I TAGXR + DCA VALUE2 +SETFL2, CDF + JMP I FINDTG /--RETURN-- + +/OPTIMIZATION MAY CHANGE SETFLD TO +/REMOVE CLA ON ENTRY + PAGE + /BEGINNING OF PASS CODE + + JMS I (IOPEN /SET INPUT ROUTINE TO OPEN FILE +START2, ISZ PASS /SET UP COUNTERS AND POINTERS + DCA XLISTX /CLEAR XLIST SWITCH + DCA FLDIND /SET FIELD TO 0 + DCA VALUEX /SET BANK TO ZERO(128K) + DCA CONDSW + DCA EDITPG + DCA LINK + DCA RADIX + DCA ERCNT + DCA GETCI + DCA PUNCHX + DCA I [LINBUF + TAD (PDLST + DCA PDLXR + JMS I [CLEAN + TAD [200 + DCA LITPTR + TAD [200 + JMS I [PUNORG + JMP I (LOOKE1 /--EXIT TO MAIN-- + +/HANDLER FOR $ + +ENDPAS, JMS I [DUMPS /DUMP CURRENT PAGE LITERALS + DCA OFSBUF /CLEAR OFFSET FOR NEXT PASS + TAD PASS /WHAT PASS IS ENDING? + SNA + JMP I (ENDPA2 /PASS 2 + SPA CLA + JMP I (START1 /PASS 1 + TAD I [LINBUF /PASS 3 + SNA CLA /ANYTHING TO PRINT? + JMP ENDPA1-1 /NO + TAD [211 /YES - TAB OVER TWICE + JMS I OERROR + TAD [211 + JMS I OERROR + JMS I [LINPRT /PRINT LINE + JMS I [DUMPZ /DUMP PAGE 0 LITERALS +ENDPA1, DCA XLISTX +/OUTPUT SYMBOL TABLE +SSWITC, JMS I (SYMPRT /(0 IF /S) + TAD I (FORM21 + DCA I (FORM22 + JMS I [FORMFD /OUTPUT FORM FEED +ERMSGS, TAD ERCNT + JMS OUTTTL /PRINT "ERRORS DETECTED: N" + TAD LINK + JMS OUTTTL /PRINT "LINKS GENERATED: N" +FINLFF, JMS I [FORMFD /PRINT FINAL FF (ZEROED IF NO PASS 3) + JMS I (OCLOSE /AND CLOSE THE OUTPUT FILE + /CREF AND LOAD-AND-GO OPTIONS +/****FINAL EXIT TO MONITOR**** +LSWITC, JMP I [7605 /0 IF /L OR /G OR /C + TAD (7616 + DCA XREG1 + CDF 10 +CSWITC, TAD I [7600 /"TAD I [7605" IF /C + AND [17 + DCA I XREG1 /SET BINARY DEVICE + TAD BINSRT + +/EXIT FROM PAL8 BY CHAINING +/TO NEXT PROGRAM +/SHOULD BE ABSLDR OR CREF + + DCA I XREG1 /SET STARTING BLOCK + DCA I XREG1 /SET 0 TERMINATOR + CDF + TAD I (JSBITS /SET BIT 11 OF JOB STATUS WORD + RAR /SO 10000-11777 IS NOT SAVED + CLL CML RAL + DCA I (JSBITS + CIF 10 + JMS I IOMON /CALL USER SERVICE ROUTINES + 6 /*CHAIN TO NEXT PROGRAM* +CHAIN, 0 /STARTING BLOCK OF NEXT PROGRAM + +OUTTTL, 0 + DCA LAST1 /SAVE NUMBER TO BE PRINTED +OUTTLL, TAD I TTLPTR /GET A WORD OF MESSAGE + ISZ TTLPTR + SNA /END? + JMP PRTTTL /YES + JMS I [ERROR1 /NO - PRINT IT + JMP OUTTLL /AND LOOP +PRTTTL, TAD [240 /PRINT A SPACE + JMS I OCHAR + TAD LAST1 + JMS I (FORMF4 /PRINT NUMBER IN DECIMAL + JMS I (CRLF /PRINT CR AND 2 LF'S (1 IF PASS 3) + JMP I OUTTTL /AND RETURN + +TTLPTR, TTLMSG + /COME HERE TO LOAD THE PASS 3 OVERLAY AT THE END OF PASS 2 + +LOADOV, JMS I (7607 /CALL SYSTEM DEVICE HANDLER + 0200 /SWAP IN CODE UNIQUE TO PASS 3 + SWAP1 /BUFFER ADDRESS + ASWAP /STARTING BLOCK NUMBER + JMP I (SYSER3 /DE**FATAL ERROR** +NSWITC, JMP START2 /(0 IF NO LIST FILE, SKP IF /N) START PASS3 + JMP ERMSG1 + JMP ENDPA1 + +ERMSG1, TAD (OTYPEO /COME HERE IF NO PASS 3 OUTPUT FILE + DCA OCHAR + TAD (OTYPEO + DCA OERROR + TAD [7600 + DCA I (OTYPCR /INHIBIT AUTO-LF ON CARRIAGE RETURN + DCA FINLFF /KILL LAST FORM FEED + JMP ERMSGS + +/ADD BITS TO PUNCH ORIGIN + +PUNORG, 0 + DCA LOC + TAD PASS /IS THIS PASS 2? + SZA CLA + JMP I PUNORG /NO--RETURN-- + TAD LOC /YES - OUTPUT ORIGIN SETTING + TAD OFFSET /"LOC" MAY BE FICTITIOUS - MAKE IT REAL + CLL CML + ISZ STARSW /INHIBIT PUNCHING ORIGIN IF NECESSARY + JMS I [PUNOUT + CLA + DCA STARSW /RESET SWITCH + JMP I PUNORG /--RETURN-- + PAGE + /EVALUATE LITERAL + +LIT, STA RAL /-2 IF PAGE 0 LITERAL, -1 IF CUR PAGE + DCA FINDS1 /SAVE FLAG + JMS I [GETC /GET NEXT CHARACTER + JMS I [SPNOR /IGNORE SPACES + TAD EXPIND /STORE IMPORTANT VALUES PRIOR TO + JMS I [PUSHA /ENTRANCE INTO EXP + TAD OP + JMS I [PUSHA + TAD VALUE + JMS I [PUSHA + TAD FINDS1 + JMS I [PUSHA + JMS I [EXP /GET EXPRESSION + TAD VALUE /FIND LITERAL IN TABLE + ISZ I PDLXR /PAGE 0? + JMP .+3 + JMS FINDS /NO + SKP + JMS FIND0 /YES + DCA VALUE2 /STORE ADDRESS + TAD I PDLXR + DCA VALUE + TAD I PDLXR /RESTORE SAVED VALUES + DCA OP + TAD I PDLXR + DCA EXPIND + TAD CHAR /IGNORE ) OR ] + TAD (-") + SZA + TAD (")-"] + SNA CLA + JMS I [GETC /GET NEXT CHARACTER + JMP I (NUMBE5 /RETURN TO EXPRESSION PROCESSOR + + +PEZE, 0 /SUBR TO ISSUE PE OR ZE MESSAGE + SNA CLA /WHICH ONE? + JMP .+4 /PAGE 0 + JMS I PERROR + PE + JMP I PEZE + JMS I PERROR + ZE + JMP I PEZE + /FIND LITERAL ON CURRENT PAGE + +FINDS, 0 + DCA FINDS1 + TAD LOC + AND [7600 + SNA /IS THIS PAGE 0? + JMP FIND01 /YES + DCA FINDS2 /NO - SAVE PAGE NUMBER + TAD (LITBF1 + DCA FIND0 + TAD [7700 /ALLOW 100(8) CURRENT PAGE LITERALS + DCA FORMF6 + TAD LITPTR /GET PG ADDR OF 1ST LITERAL IN BUFFER +FIND02, DCA FINDS3 + TAD FINDS2 + JMS I [RTL6 + TAD [LITBUF + DCA TEMP + TAD FIND0 /COMPUTE ACTUAL CORE ADDRESS OF LITERAL + TAD I TEMP + DCA TEMP2 + TAD FINDS3 /COMPUTE THE NUMBER OF ENTRIES + CIA + TAD I TEMP /IN THE LITERAL BUFFER + SNA + JMP FINDS6 /NONE + DCA FINDS3 +FINDS4, TAD I TEMP2 /GET LITERAL FROM TABLE + CIA + TAD FINDS1 /AND CURRENT LITERAL + SNA CLA /DO THEY MATCH? + JMP FINDS5 /YES + ISZ TEMP2 /NO - BUMP COUNTERS + ISZ FINDS3 + JMP FINDS4 /TRY AGAIN +FINDS6, TAD FINDS2 + JMS I [RTL6 + TAD [TPINST + DCA FINDS3 + TAD I TEMP /DOES THIS OVERFLOW PAGE? + CIA + TAD I FINDS3 + SPA CLA + JMP FINDS7 /NO + + FIND03, TAD FINDS2 /PAGE FULL - WHICH PAGE? + JMS PEZE /GENERATE PE OR ZE MESSAGE + CLA CMA + JMP FINDS9 +FINDS7, CLA CMA + TAD I TEMP /IS PAGE FULL? + AND FORMF6 + SNA CLA + JMP FIND03 /YES - OUTPUT ERROR MESSAGE + CLA CMA + TAD I TEMP /NO + DCA I TEMP +FINDS9, TAD I TEMP + TAD FIND0 + DCA TEMP2 + TAD FINDS1 + DCA I TEMP2 +FINDS5, TAD FIND0 /GET ADDRESS OF LITERAL + CIA + TAD TEMP2 + TAD FINDS2 + JMP I FINDS /--RETURN-- + + +/FIND LITERAL ON PAGE 0 + +FIND0, 0 + DCA FINDS1 + TAD FIND0 /RESET EXIT FROM FINDS + DCA FINDS +FIND01, DCA FINDS2 /SET POINTERS + TAD (LITBF2 + DCA FIND0 + TAD [7760 /ALLOW 160(8) PAGE 0 LITERALS + DCA FORMF6 + TAD [200 + JMP FIND02 + +FINDS1, 0 +FINDS2, 0 +FINDS3, 0 + PAGE + /HANDLER FOR IFZERO PSEUDO-OP + +IF0, TAD (10 /IFTST1, SNA CLA + +/HANDLER FOR IFNZERO PSEUDO-OP + +IFN0, TAD IFSZA /IFTST1, SZA CLA + DCA IFTST1 + JMS I [SPNOR /IGNORE SPACES + JMS I [EXP /GET EXPRESSION +IFTST3, TAD CHAR /GET LAST CHARACTER + TAD (-"< + SNA CLA /IS IT /NO - IS IT >? +IFSZA, SZA CLA + JMP IFTST4 /NO - FINISH THIS CONDITIONAL + AC7776 +IFTST6, CMA + TAD CONDSW + DCA CONDSW +IFTST4, DCA I [LINBUF /INHIBIT LISTING OF UNASSEMBLED CODE - + /ZEROED IF /J OPTION NOT SPECIFIED + JMS I [GETC /GET NEXT CHARACTER + JMP IFTST5 + /HANDLER FOR IFDEF PSEUDO-OP + +IFD, TAD (10 /IFTST1, SNA CLA + +/HANDLER FOR IFNDEF PSEUDO-OP + +IFND, TAD IFSZA /IFTST1, SZA CLA + DCA IFTST1 +IFTST7, JMS I [SPNOR /IGNORE SPACES + JMS I [TSTALP /IS NEXT CHARACTER ALPHABETIC + JMP IFTST8 /YES + JMS ICMESG /PRINT IC MESSAGE AND GET NEXT CHAR + JMP IFTST7 /KEEP TRYING + +IFTST8, JMS I [GETTAG /PICK UP TAG + DCA VALUE /STORE UNDEFINED INDICATOR + TAD TAG3 /WAS IT A PSEUDO-OP? + SMA CLA + JMP IFTST9 /NO + JMS I [ERROR /YES - GENERATE IP ERROR MESSAGE + IP + JMP IFTST9 + +ICMESG, 0 + JMS I [ERROR + IC /IC COMES OUT ON ALL PASSES + TAD CHAR + SPA CLA + JMP I [LOOKEX /END OF LINE - GO AWAY + JMS I [GETC /GET NEXT CHAR + JMP I ICMESG + CONDTM, + +/PUT TAG IN SYMBOL TABLE + +PUTTAG, 0 + TAD THISTG + JMS I (SETFLD /SET FIELD + TAD TAG1 + DCA I TAGXR + TAD TAG2 + DCA I TAGXR + TAD TAG3 + DCA I TAGXR + TAD VALUE2 + DCA I TAGXR + CDF + JMP I PUTTAG /--RETURN-- + + +/PUSHDOWN ROUTINE +/PUT NEW ENTRY ON PUSHDOWN STACK + +PUSHA, 0 + DCA TEMP + CLA CMA + TAD PDLXR + DCA PDLXR + TAD PDLXR + TAD (-PDLND + SPA CLA /IS LIST TOO FULL? + JMP PUSHA1 /BE**FATAL ERROR** + TAD TEMP /NO - MAKE ENTRY + DCA I PDLXR + CLA CMA + TAD PDLXR + DCA PDLXR + JMP I PUSHA /--RETURN-- + +PUSHA1, TAD (BE + JMP I [MONERR /PUSHDOWN OVERFLOW IS FATAL ERROR + /TEST NUMERIC ROUTINE +/CALL WITH CHARACTER TO TEST IN "CHAR" +/SKIPS IF THE CHARACTER IS NOT NUMERIC + +TSTNUM, 0 + TAD CHAR /GET THE CHARACTER + TAD (-"9-1 + CLL + TAD ("9-"0+1 + SNL CLA /CHECK FOR RANGE 0-9 + ISZ TSTNUM /OUT OF RANGE + JMP I TSTNUM /--RETURN-- + +/TEST ALPHANUMERIC ROUTINE +/CALL WITH CHARACTER IN "CHAR" +/SKIPS IF CHARACTER IS NOT ALPHANUMERIC + +TSTALN, 0 + JMS I [TSTNUM /IS IT NUMERIC + JMP I TSTALN /YES--RETURN-- + JMS I [TSTALP /IS IT ALPHABETIC + JMP I TSTALN /YES--RETURN-- + ISZ TSTALN /NEITHER + JMP I TSTALN /--RETURN-- + +/TEST ALPHABETIC ROUTINE +/CALL WITH CHARACTER IN "CHAR" +/SKIPS IF NOT ALPHABETIC + +TSTALP, 0 + TAD CHAR + TAD (-"Z-1 + CLL + TAD ("Z-"A+1 + SNL CLA /CHECK FOR RANGE A-Z + ISZ TSTALP /OUT OF RANGE + JMP I TSTALP /--RETURN-- + PAGE + /INPUT ROUTINE +/UNPACKS CHARACTERS FROM BUFFER + +INPUT, 0 + ISZ INCHCT /ARE THERE CHARACTERS LEFT IN BUFFER? + JMP I CHARLV /YES - FETCH ONE + TAD INEOF /NO - WAS OLD FILE ENDED? + SZA CLA + JMP ENDCHR /YES - START NEW FILE +INGBUF, TAD INCTLA /NO + AND [7600 + JMS I [RTL6 + TAD INCTR + SNL + DCA INCTR + SZL + ISZ INEOF + CLL CML CMA RTR /SET CONTROL WORD + RTR + RTR + TAD INCTLA + DCA INCTLW + JMS I INHNDL /CALL INPUT DEVICE HANDLER +INCTLW, 0 /CONTROL WORD +INBUFP, INBUF /INPUT BUFFER ADDRESS +INREC, 0 /STARTING BLOCK NUMBER + JMP INERRX /ERROR RETURN +INBREC, TAD INCTLA /NORMAL RETURN + AND [7600 + JMS I [RTL6 + TAD INREC + DCA INREC /RESET STARTING BLOCK NUMBER + TAD INCTLW + AND [7600 + CLL RAL + TAD INCTLW + AND [7600 + CIA + DCA INCHCT /SET CHARACTER COUNT + TAD INBUFP + DCA INPTR /SET BUFFER POINTER + /CHARACTERS ARE FOUND IN BUFFER +/IN STANDARD OS/8 PACKING +/WORD 1: AAA A11 111 111 +/WORD 2: BBB B22 222 222 +/WHICH REPRESENTS 3 CHARACTERS +/CHARACTER 1: 11 111 111 +/CHARACTER 2: 22 222 222 +/CHARACTER 3: AA AAB BBB + + +ICHAR1, TAD I INPTR /PICK UP CHARACTER WORD 1 + JMS CHARLV /CHECK RIGHT 8 BITS +ICHAR2, TAD I INPTR /PICK UP WORD 1 + ISZ INPTR /(INCREMENT POINTER TO WORD 2) + AND [7400 /WITH WORD 1 IN AC + DCA INCTLW /RETRIEVE LEFT 4 BITS AND SAVE + TAD I INPTR /PICK UP WORD 2 + JMS CHARLV /CHECK RIGHT 8 BITS +ICHAR3, TAD I INPTR /PICK UP WORD 2 + ISZ INPTR /(POINT TO NEXT WORD 1) + AND [7400 /WITH WORD 2 IN AC + CLL RTR /RETRIEVE LEFT 4 BITS + RTR + TAD INCTLW /PUT BOTH SETS OF 4 BITS TOGETHER + RTR + RTR + JMS CHARLV /CHECK CHARACTER + JMP ICHAR1 /TRY NEXT SET OF 2 WORDS + +INERRX, ISZ INEOF + SMA CLA /EOF OR FATAL ERROR? + JMP INBREC /EOF - UNPACK THIS BUFFER + JMP I (SYSERR /FATAL - GENERATE DE ERROR MESSAGE + +INCHCT, -1 +INEOF, 1 +INPTR, 0 +INCTR, 0 +INCTLA, 0 +INFPTR, 7617 + /START NEW FILE + +ENDCHR, ISZ I (FORMSW /^Z OR EOF SIMULATES FORM FEED + TAD PASS /IS THIS PASS 3? + SPA SNA CLA + JMP NXTFLE /NO + JMS I (HEDCLR /YES - CLEAR HEADING BUFFER + TAD [-HEDLEN + DCA I (LSTCH6 + TAD [HEADER-1 + DCA I (LSTCH7 + DCA LSTCNT +NXTFLE, TAD (INDEVH+1 /SET ADDRESS OF DEVICE HANDLER + DCA INHNDL + CDF 10 + TAD I INFPTR + CDF + SNA + JMP FAKDLR /END OF FILE - FAKE A $ + CIF 10 + JMS I IOMON /CALL USER SERVICE ROUTINES + 1 /*FETCH HANDLER* +INHNDL, 0 /LOADING ADDRESS OF HANDLER + HLT /ERROR RETURN + CDF 10 /V3C + TAD INHNDL /NORMAL RETURN - HANDLER IN CORE + AND [7600 + TAD [-INDEVH /SEE IF INPUT HANDLER IS IN 7200 + SZA CLA + JMS I (PTCH /IT IS - INCREASE SIZE OF BUFFER + /AND REMOVE FROM RESIDENCY ANY HANDLERS THERE + TAD INCTL + DCA INCTLA /DF=10 + TAD I INFPTR + AND [7760 + SZA + TAD [17 + CLL CML RTR + RTR + DCA INCTR + ISZ INFPTR + TAD I INFPTR + DCA INREC /RESET STARTING BLOCK NUMBER + ISZ INFPTR + DCA INEOF + CDF + JMP INGBUF + FAKDLR, TAD (244 + JMS CHARLV /CALL THE COROUTINE + TAD [215 /WITH $ AND CR + JMS CHARLV /TO END THE ASSEMBLY. + JMP I (PHASE /** DIDN'T WORK - MUST BE IN CONDITIONAL - FATAL + +CHARLV, 0 /CHARACTER IN AC + AND [177 /AND OFF LEFT 5 BITS + JMP I (LSTCH9 /RETURN TO LSTCH9 + PAGE + /HANDLER FOR DTORG PSEUDO-OP (TYPESETTING) +/PUNCHES 4 DIGIT BLOCK NUMBER IN 2 FRAMES +/FIRST FRAME HAS CHANNELS 7 AND 8 PUNCHED +/ADDED TO CHECKSUM + +DTORGX, JMS I [SPNOR /IGNORE SPACES + JMS I [EXP /GET EXPRESSION + TAD PASS /IS THIS PASS 2? + SNA + JMP DTORG2 /YES +PUNVA1, SPA SNA CLA /NO - IS THIS PASS 3? + JMP I [LOOKEX /NO--EXIT TO MAIN-- + TAD LININD /GET LINK SWITCH FROM "EXP" + DCA LINKSW /YES + TAD [LOOKEX /FIX PUNONE TO EXIT TO MAIN + DCA I (PUNONE + TAD [211 /OUTPUT TAB + JMS I OERROR + JMP I (DTORG1 + +DTORG2, TAD VALUE /PASS 2 - GET BLOCK NUMBER + JMS I [RTL6 + RAL + AND [77 + TAD (300 /PICK UP CHANNELS 7 AND 8 + DCA TEMP + TAD TEMP + TAD CHKSUM /ADD VALUE TO CHECKSUM + DCA CHKSUM + TAD TEMP + JMS I OCHAR /OUTPUT BLOCK NUMBER - FIRST FRAME + TAD VALUE + AND [77 + JMS I OCHAR /OUTPUT SECOND FRAME + JMP I [LOOKEX /--EXIT TO MAIN-- + +/HANDLER FOR % +/DIVIDE BY REPEATED SUBTRACTION + +OP6, DCA TEMP + TAD VALUE2 + CIA + DCA VALUE2 + TAD VALUE +OP6A, CLL + TAD VALUE2 /SUBTRACT DIVISOR FROM DIVIDEND + SNL /DONE YET? + JMP OP6B /YES - EXIT + ISZ TEMP /NO - COUNT ONE MORE SUBTRACTION + JMP OP6A /SUBTRACT AGAIN +OP6B, CLA + TAD TEMP /RESULT IS # OF SUBTRACTIONS + JMP I (OP0+2 + /HANDLER FOR XLIST PSEUDO-OP + +XLISTY, JMS XLISTZ /ANY EXPRESSION? + JMP XLIST1 /NO + JMS I [EXP /GET EXPRESSION + TAD VALUE /USE THE VALUE +XLIST2, DCA XLISTX /SET SWITCH + DCA I [LINBUF /XLIST NEVER LISTS! + JMP I [LOOKEX /--EXIT TO MAIN-- + +XLIST1, TAD XLISTX + SNA CLA + IAC /FLIP IT + JMP XLIST2 + +RELOCY, JMS XLISTZ /RELOCATE PSEUDO-OP - EXPRESSION? + JMP RELOC1 /NO + JMS I [EXP /GET IT + TAD VALUE + CIA /COMPUTE OFFSET OF REL LOC CTR + TAD LOC /FROM FAKE LOC CTR + TAD OFFSET /OFFSET IS CUMULATIVE! +RELOC2, DCA OFSBUF /SET NEW OFFSET - THIS TAKES EFFECT AFTER + STA /THE LITERALS (IF ANY) ARE DUMPED. + JMP I (STAR0 /FAKE ORIGIN TO NEW LOC, + /ACTUALLY A NO-OP BECAUSE OF OFFSET +RELOC1, TAD OFFSET /SET OFSBUF=0, LOC=LOC+OFFSET - + TAD LOC /THIS CANCELS ALL RELOCATION STUFF. + DCA VALUE + DCA UNDFSW /JUST IN CASE - "STAR0" CHECKS THIS + JMP RELOC2 /STILL MUST OUTPUT *. TO GET IN SYNCH + /HANDLER FOR EJECT PSEUDO-OP + +EJECTX, ISZ THISPG + TAD PASS /IS THIS PASS 3? + SMA SZA CLA + JMP EJECT2 /YES +EJECT1, TAD CHAR /NO - LOOK FOR NEXT NEGATIVE CHARACTER + SPA CLA + JMP I [LOOKEX /--EXIT TO MAIN-- + JMS I [GETC /GET NEXT CHARACTER + JMP EJECT1 + +EJECT2, JMS XLISTZ /PASS 3 - IS THERE AN EXPRESSION? + JMP EJECT3 /NO - EXIT + JMS I (HEDCLR /YES - CLEAR HEADING BUFFER + TAD [-HEDLEN + DCA EJECT7 /SET UP FOR 40 NEW CHARACTERS + TAD [HEADER-1 + DCA XREG1 /SET HEADER BUFFER POINTER + JMP EJECT4 + +EJECT6, ISZ EJECT7 /FILLED 40 CHARACTERS YET? + JMP EJECT4 /NO - KEEP FILLING + CLA CMA /YES - SKIP CHARACTERS TO + DCA EJECT7 /END OF LINE + JMP EJECT5 + +EJECT4, TAD CHAR /FILL HEADING BUFFER + DCA I XREG1 +EJECT5, CLA CMA + DCA TXTSWT + JMS I [GETC /GET NEXT CHARACTER + TAD CHAR /END OF LINE? + SMA CLA + JMP EJECT6 /NO - KEEP FILLING +EJECT3, JMS I [FORMFD /GENERATE FORM FEED + JMP I [LOOKEX /--EXIT TO MAIN-- + PUNVAL, TAD PASS /IS THIS PASS 3? + JMP PUNVA1 /IF SO, LIST STUFF + + +/SEE IF EXPRESSION FOLLOWS XLIST +/SKIP ON EXPRESSION + +EJECT7, +XLISTZ, 0 + JMS I [SPNOR /IGNORE TRAILING SPACES + TAD CHAR + TAD [-"> /IS THERE AN EXPRESSION? + SNA CLA + JMP I XLISTZ /NO--RETURN-- + TAD CHAR + SMA CLA + ISZ XLISTZ /YES - INCREMENT RETURN ADDRESS + JMP I XLISTZ /--RETURN-- + + +/DUMMY ERROR ROUTINE +/TO SUPPRESS CERTAIN ERROR MESSAGES +/ON PASS 1 + +PERRO1, 0 + ISZ PERRO1 /SKIP ERROR MESSAGE POINTER + JMP I PERRO1 /--RETURN-- + + +/CONSTANTS FOR DECIMAL PRINT + + DECIMAL +FORMF8, -1000 + -100 + -10 + 0 + OCTAL + PAGE + /********************************************************************* + +INBUF=. /INPUT BUFFER + +OUBUF=. /OUTPUT BUFFER + +OUDEVH=.+400 /OUTPUT DEVICE HANDLER + +INDEVH=7200 /INPUT DEVICE HANDLER + +/********************************************************************** + +/ EXPLANATION OF PAL8'S BUFFER ALLOCATION ALGORITHM + +/PASS1: + +/ THE INPUT BUFFER STARTS AT 5600 AND ENDS AT 7200 +/ THE INPUT HANDLER GOES IN 7200-7600. +/ THERE IS NO OUTPUT HANDLER. +/ HOWEVER, IF THE CURRENT INPUT HANDLER DOES NOT +/ LOAD INTO 7200, THEN THE BUFFER SIZE IS INCREASED +/ SO THAT THE INPUT BUFFER IS 5600-7600 + +/PASS2 AND PASS3: + +/ THE OUTPUT BUFFER IS ALWAYS 1 BLOCK LONG, LOCATED +/ AT 5600-6200. +/ THE OUTPUT HANDLER RESIDES IN 6200-6600. +/ THE INPUT HANDLER RESIDES IN 7200-7600. +/ THE INPUT BUFFER NORMALLY RESIDES IN 6600-7200 +/ BUT MAY GROW OVER EITHER THE INPUT HANDLER AREA OR +/ THE OUTPUT HANDLER AREA, IF EITHER OR BOTH OF THESE +/ DON'T EXIST. + +/WHENEVER A BUFFER GROWS OVER A HANDLER AREA, THE MONITOR +/HANDLER RESIDENCY TABLE IS SEARCHED TO SEE IF THERE +/WERE ANY HANDLERS THERE. IF ANY HANDLERS WERE THERE IN THE PAST, +/THEY ARE NOW MARKED AS BEING NON-RESIDENT. + /MORE ONCE ONLY CODE + +OTYPE, 0 + DCA TEMP + CDF 10 + TAD I TEMP + AND [17 /GET DEVICE NUMBER + TAD (DCB-1 + DCA TEMP + TAD I TEMP /GET DCB ENTRY + CDF + JMP I OTYPE /--RETURN-- + +/CHECK TO SEE HOW MUCH CORE EXISTS +/AND STORE SYMBOL TABLE ACCORDINGLY + + IFZERO HASH< +BEGINF, CDF 10 /WAS THE /K OPTION SELECTED TO + TAD I (MPARAM /CHECK FOR MORE THAN 8K? + CDF 0 + RTR +ZK7630, SNL CLA /YES + JMP I (CKBAT /NO - CHECK FOR BATCH, USE 8K ONLY + CDF 50 + JMS FLD2 /WHAT IS HIGHEST FIELD? + JMP FLD1-1 /5 + CDF 40 + JMS FLD2 + JMP FLD1 /4 + CDF 30 + JMS FLD2 + JMP FLD1+1 /3 + CDF 20 + JMS FLD2 + JMP FLD1+2 /2 + JMP OPTIM4 /1 + TAD [177 /IF FIELD 5, ALLOW 4095 SYMBOLS +FLD1, TAD (1740 /OTHERWISE ALLOW 1740*(NR OF FIELDS) + TAD (1740 + TAD (1740 +OPTIM0, TAD (1740 + DCA I (TAGMAX /SET HIGHEST ADDRESS FOR TAGS + JMP I (BEGING + +OPTIM4, TAD I OPTIM1 /OPTIMIZE SEARCH PATTERN + ISZ OPTIM1 /BY SUBSTITUTING CODE IN SEARCH + DCA I OPTIM2 /ROUTINE + ISZ OPTIM2 + ISZ OPTIM3 + JMP OPTIM4 +OPTIM8, TAD I OPTIM5 + ISZ OPTIM5 + DCA I OPTIM6 + ISZ OPTIM6 + ISZ OPTIM7 + JMP OPTIM8 + JMP OPTIM0 + > + + IFNZRO HASH< + /SIZE CHECK OUR MACHINE + +BEGINF, CDF 10 + TAD I (MPARAM + CDF + RTR /K TO LINK +ZK7630, SNL CLA /ALTER FOR COMPLEMENT OF K + TAD [400 /TAD TO KEEP USR + DCA I (USROFS + CDF 50 + JMS FLD2 + ISZ HIFLD + CDF 40 + JMS FLD2 + ISZ HIFLD + CDF 30 + JMS FLD2 + ISZ HIFLD + CDF 20 + JMS FLD2 + ISZ HIFLD + TAD I (7777 /CHECK SOFT CORE SIZE + AND (70 + SNA + JMP CKSEV /NOT THERE + CLL RTR + RAR + DCA HIFLD /THERE, SET HIFLD WITH IT + TAD HIFLD /TAKE MIN(HIFLD,5) + TAD (7772 + SMA CLA /SMA TO USE HIFLD + TAD (5 /ELSE USE 5 + SZA + DCA HIFLD /STORE 5 IF NECESSARY +CKSEV, CDF 10 + TAD I (MPARAM+2 /LOOK AT /7 + CDF + AND (4 + SNA CLA /SNA IF THERE + JMP I (CKBAT /ELSE CHECK FOR BATCH + TAD (-7 /SET TO PRINT 7 COLUMNS OF STAB + DCA I (SYMNCL + TAD (67^6 /SET OFFSET TO FIRST SYMBOL ON NEXT PAGE + DCA I (SYMOFS + JMP I (CKBAT /OK, CHECK FOR BATCH NOW +OPTIM4, SNL /SNL IF BATCH RUNNING + JMP I (BEGING /ELSE TAKE DEFAULT TABLE SIZE + TAD (BPRIME/SET ALTERNATE TABLE SIZE + DCA I (PRIMES /INTO THE ONCE ONLY CODE + JMP I (BEGING /NOW HIFLD=# OF HIGHEST USABLE FIELD +HIFLD, 1 /8K MINIMUM + > + +/SKIP IF CURRENT DATA FIELD DOES NOT EXIST +FLD2, 0 + TAD (FLD3 + DCA I FLD4 +FLD3, CLA + TAD I FLD4 + NOP + CDF + TAD (-FLD3 + SZA CLA + JMP FLD5 + TAD IOMON + TAD [-200 + SNA CLA /IS FIELD THERE? + JMP I FLD2 /YES--RETURN-- + TAD [200 + DCA IOMON +FLD5, ISZ FLD2 /NO-INCREMENT RETURN ADDRESS + JMP I FLD2 /--RETURN-- + +FLD4, IOMON + /OVERLAY CODE FOR OPTIMAL SYMBOL TABLE SEARCH +/IN 8K + IFZERO HASH< + +OPTIM1, OPTIMA +OPTIM2, SETFLD+1 +OPTIM3, -7 + +OPTIM5, OPTIMB +OPTIM6, GETTG5 +OPTIM7, -21 + +OPTIMA, RELOC SETFLD+1 + + CLL CMA RTL + TAD STM202 + DCA TAGXR + CDF 10 + JMP I SETFLD +STM202, -202 +SETFL4, 4 + RELOC + +OPTIMB, RELOC GETTG5 + + TAD HIGHTG + JMS SETFLD + TAD TAGXR + DCA XREG1 + TAD XREG1 + TAD SETFL4 + DCA XREG2 + TAD THISTG + JMS SETFLD +OPTIML, TAD I XREG2 + DCA I XREG1 + TAD XREG1 + CIA + TAD TAGXR + SZA CLA + JMP OPTIML + CDF + RELOC + > + /OVERLAY CODE FOR DDT SYMBOL TABLE PRINT + +DSWIT2, IFZERO HASH< + RELOC SYMPR9-2 + JMP SYMPRE +SYMPRD, TAD SYM204 + JMS I OERROR + TAD [377 + JMS I OERROR + JMS SYMPRC + DCA LINCNT + JMP I SYMPRT +SYMPRC, 0 + TAD [-200 + DCA SYMPR2 + TAD [200 + JMS I OERROR + ISZ SYMPR2 + JMP .-3 + JMP I SYMPRC + RELOC + > + IFNZRO HASH< + RELOC SYMDDT + ISZ THISTG + JMP SYMLUP +SYMXIT, TAD SYM204 + JMS I OERROR + TAD [377 + JMS I OERROR + JMS DDTLDR + DCA LINCNT + JMP I SYMPRT +DDTLDR, 0 + TAD [7600 + DCA SYMCCT + TAD [200 + JMS I OERROR + ISZ SYMCCT + JMP .-3 + JMP I DDTLDR +SYM204, 204 + RELOC + > +DSWITB= . + PAGE + BEGING, CIF 10 + JMS I IOMON /CALL THE USR + 12 /TO FIND OUT DSK: +BEGINJ, TEXT /DSK/ + 7201 /DUMMY + HLT /NEVER! +/V3C TAD BEGINJ+1 /GET DEVICE NUMBER OF DSK: +/V3C DCA CC7 /AND SET IT + TAD BEGINJ+1 + DCA I BEGINL /AND SET IT INTO "PALBIN" + CDF 10 + TAD I CC1 /GET PARAMETER WORD 1 + CDF + CLL RTL /OPTION /B INTO LINK + AND [400 /IS IT /F? +ZF7650, SZA CLA + DCA I CCX1 /YES: /F => NO 0 FILL +ZB7430, SNL /IS IT /B? + JMP .+3 + TAD CCX2 + DCA I CCX3 /YES: /B => ! IS SHIFT + CDF 10 + TAD I CC1 /GET WORD 1 AGAIN + CDF + AND [200 /IS IT /E? +ZE7640, SNA CLA + JMP .+3 + TAD CCX8 + DCA I CCX4 /YES: /E => SET 'LG' ERROR + CDF 10 + TAD I CCX5 /GET WORD 2 THIS TIME + CDF + RTL +ZO7710, SMA CLA /IS IT /O? + JMP .+3 + DCA I CCX6 /YES: /O => NO 200 ORG + ISZ I CCX7 + CDF 10 + TAD I CC1 /GET WORD 1 AGAIN + AND CC2 /IS IT /C? + SNA CLA + JMP I CC3 /NO: TRY FOR /L OR /G + TAD I CC4 /CREF FILE SPECIFIED? + SZA CLA + JMP CC5 /YES +CC6, TAD CC7 /NO: GIVE "CREFLS.TM" + DCA I CC4 + ISZ CC6 + ISZ CC4 + ISZ CC8 + JMP CC6 + CC5, CDF + CIF 10 + CLA IAC + JMS I IOMON /LOOKUP "CREF.SV" + 2 +CC13, CC9 /POINT TO NAME - BACK WITH START +CC8, -5 /LENGTH GOES HERE + JMP CC16 /NOT FOUND! + TAD CC30 + JMS I CC31 /CHECK TYPE FILE + SMA CLA + JMP CC16 /NOT DIRECTORY IS ERROR + TAD CC12 + DCA I CC121 /CSWITC=TAD I [7605 + TAD CC11 + DCA I CC111 /CSWIT1=CLA + TAD CC10 + DCA I CC101 /CSWIT2=DCA BINSRT + DCA I CC171 /CMOVE=0 + TAD CC13 + DCA I CC131 /CHAIN="CREF.SV" + DCA I CC141 /LSWITC=0 + TAD CC30 + DCA I CC301 /NOPA22=7612 + DCA I CC20 /"BEGIAB"=0 + TAD CC21 + DCA I CC211 /"DIRSW1"=TAD [177 + TAD CC22 + DCA I CC221 /"PTPSW1"=TAD [232 + JMP I .+1 + CCC /KEEP GOING (SIGH) + +CC16, JMS I [ERROR + CF /OPTION /C ERROR + JMP I CC3 /TRY FOR /L OR /G + CC171, SWAPR2+CMOVE +CC141, LSWITC +CC131, CHAIN +CC121, CSWITC +CC12, TAD I [7605 +CC111, CSWIT1 +CC11, CLA +CC101, SWAPR2+CSWIT2 +CC10, DCA BINSRT +CC301, SWAPR2+NOPA22 +CC30, 7612 +CC31, OTYPE +CC1, MPARAM +CC2, 1000 +CC3, BEGINH +CC4, 7612 + +CCX1, TEXT4X /V3C +CCX2, OP3 +CCX3, OPEXPL +CCX4, LGERR +CCX5, MPARAM+1 +CCX6, FIELDY+1 +CCX7, FIELDY+2 +CCX8, JMS I PERROR + +CC7, 1 + FILENAME CREFLS.TM +CC9, FILENAME CREF.SV + +CC20, BEGIAB +CC21, TAD [177 +CC211, SWAPR2+DIRSW1 +CC22, TAD [232 +CC221, SWAPR2+PTPSW1 + +BEGINL, PALBIN + PAGE + /*********************************************************************** +/SYMBOL TABLE +/MOVED BY ASSEMBLER TO FIELD 1 +/MUST REMAIN IN ALPHABETICAL ORDER +/*********************************************************************** + +SYMS, 5777 /TERMINATOR + 3777 /IMPOSSIBLE (LIMITING) SYMBOL + 5777 + 0000 + IFNZRO HASH< /PSEUDO OPS MUST GO FIRST FOR EXPUNGE + "I-300^45+4000+2000 /I + 0 + 0 + 0400 + + "P-300^45+"A-300+4000 /PAUSE + "U-300^45+"S-300 + "E-300^45+4000 + PAUSEX + + "P-300^45+"A-300+4000 /PAGE + "G-300^45+"E-300 + 4000 + PAGEX + + "T-300^45+"E-300+4000 /TEXT + "X-300^45+"T-300 + 4000 + TEXTX + + "R-300^45+"E-300+4000 /RELOC + "L-300^45+"O-300 + "C-300^45+4000 + RELOCY + + "O-300^45+"C-300+4000 /OCTAL + "T-300^45+"A-300 + "L-300^45+4000 + OCTALX + + "N-300^45+"O-300+4000 /NOPUNCH + "P-300^45+"U-300 + "N-300^45+"C-300+4000 + NOPUNX + + + "I-300^45+"F-300+4000 /IFZERO + "Z-300^45+"E-300 + "R-300^45+"O-300+4000 + IF0 + "I-300^45+"F-300+4000 /IFNZRO + "N-300^45+"Z-300 + "R-300^45+"O-300+4000 + IFN0 + + "I-300^45+"F-300+4000 /IFNDEF + "N-300^45+"D-300 + "E-300^45+"F-300+4000 + IFND + + "I-300^45+"F-300+4000 /IFDEF + "D-300^45+"E-300 + "F-300^45+4000 + IFD + + "F-300^45+"I-300+4000 /FIXTAB + "X-300^45+"T-300 + "A-300^45+"B-300+4000 + FIXTBX + + "F-300^45+"I-300+4000 /FIXMRI + "X-300^45+"M-300 + "R-300^45+"I-300+4000 + FIXMRX + + "F-300^45+"I-300+4000 /FILENAME + "L-300^45+"E-300 + "N-300^45+"A-300+4000 + FILENX + + "F-300^45+"I-300+4000 /FIELD + "E-300^45+"L-300 + "D-300^45+4000 + FIELDX + + "E-300^45+"X-300+4000 /EXPUNGE + "P-300^45+"U-300 + "N-300^45+"G-300+4000 + EXPUNX + + "E-300^45+"N-300+4000 /ENPUNCH + "P-300^45+"U-300 + "N-300^45+"C-300+4000 + ENPUNX + + "E-300^45+"J-300+4000 /EJECT + "E-300^45+"C-300 + "T-300^45+4000 + EJECTX + "D-300^45+"T-300+4000 /DTORG + "O-300^45+"R-300 + "G-300^45+4000 + DTORGX + + "D-300^45+"E-300+4000 /DEVICE + "V-300^45+"I-300 + "C-300^45+"E-300+4000 + DEVICX + + "D-300^45+"E-300+4000 /DECIMAL + "C-300^45+"I-300 + "M-300^45+"A-300+4000 + DECIMX + > + "Z-300^45+"B-300+4000 /ZBLOCK + "L-300^45+"O-300 + "C-300^45+"K-300+4000 + ZBLOCX + + "Z-300^45+4000+2000 /Z + 0 + 0 + 0000 + + "X-300^45+"L-300+4000 /XLIST + "I-300^45+"S-300 + "T-300^45+4000 + XLISTY + + "T-300^45+"S-300+4000 /TSK + "K-300^45 + 0 + 6045 + + "T-300^45+"S-300+4000 /TSF + "F-300^45 + 0 + TSF + + "T-300^45+"P-300+4000 /TPC + "C-300^45 + 0 + TPC + + "T-300^45+"L-300+4000 /TLS + "S-300^45 + 0 + TLS + + "T-300^45+"F-300+4000 /TFL + "L-300^45 + 0 + 6040 + IFZERO HASH< + "T-300^45+"E-300+4000 /TEXT + "X-300^45+"T-300 + 4000 + TEXTX + > + "T-300^45+"C-300+4000 /TCF + "F-300^45 + 0 + TCF + + "T-300^45+"A-300+4000 /TAD + "D-300^45+4000 + 0 + TAD 0 + + "S-300^45+"Z-300+4000 /SZL + "L-300^45 + 0 + SZL + + "S-300^45+"Z-300+4000 /SZA + "A-300^45 + 0 + SZA + + "S-300^45+"W-300+4000 /SWP + "P-300^45 + 0 + 7521 + + "S-300^45+"T-300+4000 /STL + "L-300^45 + 0 + STL + + "S-300^45+"T-300+4000 /STA + "A-300^45 + 0 + STA + + "S-300^45+"R-300+4000 /SRQ + "Q-300^45 + 0 + 6003 + + "S-300^45+"P-300+4000 /SPA + "A-300^45 + 0 + SPA + "S-300^45+"N-300+4000 /SNL + "L-300^45 + 0 + SNL + + "S-300^45+"N-300+4000 /SNA + "A-300^45 + 0 + SNA + + "S-300^45+"M-300+4000 /SMA + "A-300^45 + 0 + SMA + + "S-300^45+"K-300+4000 /SKP + "P-300^45 + 0 + SKP + + "S-300^45+"K-300+4000 /SKON + "O-300^45+"N-300 + 0 + 6000 + + "S-300^45+"G-300+4000 /SGT + "T-300^45 + 0 + 6006 + + "R-300^45+"T-300+4000 /RTR + "R-300^45 + 0 + RTR + + "R-300^45+"T-300+4000 /RTL + "L-300^45 + 0 + RTL + + "R-300^45+"T-300+4000 /RTF + "F-300^45 + 0 + 6005 + + "R-300^45+"S-300+4000 /RSF + "F-300^45 + 0 + RSF + "R-300^45+"R-300+4000 /RRB + "B-300^45 + 0 + RRB + + "R-300^45+"P-300+4000 /RPE + "E-300^45 + 0 + 6010 + + "R-300^45+"M-300+4000 /RMF + "F-300^45 + 0 + RMF + + "R-300^45+"I-300+4000 /RIF + "F-300^45 + 0 + RIF + + "R-300^45+"I-300+4000 /RIB + "B-300^45 + 0 + RIB + + "R-300^45+"F-300+4000 /RFC + "C-300^45 + 0 + RFC + IFZERO HASH< + "R-300^45+"E-300+4000 /RELOC + "L-300^45+"O-300 + "C-300^45+4000 + RELOCY + > + "R-300^45+"D-300+4000 /RDF + "F-300^45 + 0 + RDF + + "R-300^45+"A-300+4000 /RAR + "R-300^45 + 0 + RAR + + "R-300^45+"A-300+4000 /RAL + "L-300^45 + 0 + RAL + "P-300^45+"S-300+4000 /PSF + "F-300^45 + 0 + PSF + + "P-300^45+"P-300+4000 /PPC + "C-300^45 + 0 + PPC + + "P-300^45+"L-300+4000 /PLS + "S-300^45 + 0 + PLS + + "P-300^45+"C-300+4000 /PCF + "F-300^45 + 0 + PCF + + "P-300^45+"C-300+4000 /PCE + "E-300^45 + 0 + 6020 + IFZERO HASH< + "P-300^45+"A-300+4000 /PAUSE + "U-300^45+"S-300 + "E-300^45+4000 + PAUSEX + + "P-300^45+"A-300+4000 /PAGE + "G-300^45+"E-300 + 4000 + PAGEX + > + "O-300^45+"S-300+4000 /OSR + "R-300^45 + 0 + OSR + + "O-300^45+"P-300+4000 /OPR + "R-300^45 + 0 + OPR + IFZERO HASH< + "O-300^45+"C-300+4000 /OCTAL + "T-300^45+"A-300 + "L-300^45+4000 + OCTALX + > + IFZERO HASH< + "N-300^45+"O-300+4000 /NOPUNCH + "P-300^45+"U-300 + "N-300^45+"C-300+4000 + NOPUNX + > + "N-300^45+"O-300+4000 /NOP + "P-300^45 + 0 + NOP + + "M-300^45+"Q-300+4000 /MQL + "L-300^45 + 0 + 7421 + + "M-300^45+"Q-300+4000 /MQA + "A-300^45 + 0 + 7501 + + "L-300^45+"A-300+4000 /LAS + "S-300^45 + 0 + LAS + + "K-300^45+"S-300+4000 /KSF + "F-300^45 + 0 + KSF + + "K-300^45+"R-300+4000 /KRS + "S-300^45 + 0 + KRS + + "K-300^45+"R-300+4000 /KRB + "B-300^45 + 0 + KRB + + "K-300^45+"I-300+4000 /KIE + "E-300^45 + 0 + 6035 + + "K-300^45+"C-300+4000 /KCF + "F-300^45 + 0 + 6030 + "K-300^45+"C-300+4000 /KCC + "C-300^45 + 0 + KCC + + "J-300^45+"M-300+4000 /JMS + "S-300^45+4000 + 0 + JMS 0 + + "J-300^45+"M-300+4000 /JMP + "P-300^45+4000 + 0 + JMP 0 + + "I-300^45+"S-300+4000 /ISZ + "Z-300^45+4000 + 0 + ISZ 0 + + "I-300^45+"O-300+4000 /IOT + "T-300^45 + 0 + IOT + + "I-300^45+"O-300+4000 /ION + "N-300^45 + 0 + ION + + "I-300^45+"O-300+4000 /IOF + "F-300^45 + 0 + IOF + IFZERO HASH< + "I-300^45+"F-300+4000 /IFZERO + "Z-300^45+"E-300 + "R-300^45+"O-300+4000 + IF0 + + "I-300^45+"F-300+4000 /IFNZRO + "N-300^45+"Z-300 + "R-300^45+"O-300+4000 + IFN0 + + "I-300^45+"F-300+4000 /IFNDEF + "N-300^45+"D-300 + "E-300^45+"F-300+4000 + IFND + > + IFZERO HASH< + "I-300^45+"F-300+4000 /IFDEF + "D-300^45+"E-300 + "F-300^45+4000 + IFD + > + "I-300^45+"A-300+4000 /IAC + "C-300^45 + 0 + IAC + IFZERO HASH< + "I-300^45+4000+2000 /I + 0 + 0 + 0400 + > + "H-300^45+"L-300+4000 /HLT + "T-300^45 + 0 + HLT + + "G-300^45+"T-300+4000 /GTF + "F-300^45 + 0 + 6004 + + "G-300^45+"L-300+4000 /GLK + "K-300^45 + 0 + GLK + IFZERO HASH< + "F-300^45+"I-300+4000 /FIXTAB + "X-300^45+"T-300 + "A-300^45+"B-300+4000 + FIXTBX + + "F-300^45+"I-300+4000 /FIXMRI + "X-300^45+"M-300 + "R-300^45+"I-300+4000 + FIXMRX + + "F-300^45+"I-300+4000 /FILENAME + "L-300^45+"E-300 + "N-300^45+"A-300+4000 + FILENX + + "F-300^45+"I-300+4000 /FIELD + "E-300^45+"L-300 + "D-300^45+4000 + FIELDX + > + IFZERO HASH< + "E-300^45+"X-300+4000 /EXPUNGE + "P-300^45+"U-300 + "N-300^45+"G-300+4000 + EXPUNX + + "E-300^45+"N-300+4000 /ENPUNCH + "P-300^45+"U-300 + "N-300^45+"C-300+4000 + ENPUNX + + "E-300^45+"J-300+4000 /EJECT + "E-300^45+"C-300 + "T-300^45+4000 + EJECTX + + "D-300^45+"T-300+4000 /DTORG + "O-300^45+"R-300 + "G-300^45+4000 + DTORGX + + "D-300^45+"E-300+4000 /DEVICE + "V-300^45+"I-300 + "C-300^45+"E-300+4000 + DEVICX + + "D-300^45+"E-300+4000 /DECIMAL + "C-300^45+"I-300 + "M-300^45+"A-300+4000 + DECIMX + > + "D-300^45+"C-300+4000 /DCA + "A-300^45+4000 + 0 + DCA 0 + + "C-300^45+"M-300+4000 /CML + "L-300^45 + 0 + CML + + "C-300^45+"M-300+4000 /CMA + "A-300^45 + 0 + CMA + + "C-300^45+"L-300+4000 /CLL + "L-300^45 + 0 + CLL + "C-300^45+"L-300+4000 /CLA + "A-300^45 + 0 + CLA + + "C-300^45+"I-300+4000 /CIF + "F-300^45 + 0 + CIF + + "C-300^45+"I-300+4000 /CIA + "A-300^45 + 0 + CIA + + "C-300^45+"D-300+4000 /CDF + "F-300^45 + 0 + CDF + + "C-300^45+"A-300+4000 /CAF + "F-300^45 + 0 + 6007 + + "B-300^45+"S-300+4000 /BSW + "W-300^45 + 0 + 7002 + + "A-300^45+"N-300+4000 /AND + "D-300^45+4000 + 0 + AND 0 + + 4001 /TERMINATOR + 0000 /IMPOSSIBLE (LIMITING) SYMBOL + 4000 + 0000 + +SYME=. + +/********************************************************************** +/TOP OF SYMBOL TABLE +/********************************************************************** + SWAP2=. + +/********************************************************************** +/CODE UNIQUE TO PASSES 1 AND 2 +/SWAPPED IN FOR PASSES 1 AND 2 +/OVERLAYED DURING PASS 3 *** NO LITERALS *** + + RELOC 1000 /ASSEMBLED INTO 1000-1247 + + SWAPB2= . + SWAPR2= SWAP2-SWAPB2 /RELOCATION FACTOR FOR THIS CODE + +OOPEN, 0 + TAD OPEN01 /OPEN BINARY AND LISTING FILES + DCA XOUHND /SET ADDRESS OF DEVICE HANDLER + TAD OPEN02 + DCA XOUBLK + TAD [-5 + DCA XOUELE /SET NEW OUTPUT FILE LENGTH + CDF 10 + TAD I OUFPTR + CDF + DCA I XOUBLK + ISZ XOUBLK + ISZ OUFPTR + ISZ XOUELE /INCREMENT OUTPUT FILE LENGTH + JMP .-7 + TAD OPEN02 + IAC + DCA XOUBLK /SET POINTER TO NEW FILENAME + TAD XOUBLK + DCA I OPEN04 + CIF 10 + JMS I IOMON /CALL USER SERVICE ROUTINES + 13 /*RESET SYSTEM TABLES* + DCA I OPEN05 /DELETE UNCLOSED FILES AND + TAD I OPEN02 /DELETE HANDLERS + AND [17 /GET NEW DEVICE HANDLER # + SNA /OUTPUT INHIBIT? + JMP ONOFIL /YES + CIF 10 /NO + JMS I IOMON /CALL USER SERVICE ROUTINE + 1 /*FETCH DEVICE HANDLER* +XOUHND, 0 /LOADING ADDRESS + HLT /HANDLER NOT AVAILABLE +OUENTR, TAD I OPEN02 /NORMAL RETURN - GET OUTPUT + CIF 10 /DEVICE NUMBER AND FILE LENGTH + JMS I IOMON /CALL NEW SERVICE ROUTINES + 3 /*ENTER OUTUT FILE +XOUBLK, 0 /POINTER TO FILENAME +XOUELE, 0 /FILE LENGTH + JMP OEFAIL /ERROR RETURN + DCA I OPEN06 /NORMAL RETURN + JMS I OPEN07 + TAD XOUHND + TAD [200 /LINK IS CLEAR!! + SNL CLA + TAD [400 + TAD OUFDEV + DCA I OUFINP + TAD I OUFINP + CLL RAR + CIA + TAD OU3501 + DCA INCTL + ISZ OOPEN + TAD XOUHND + DCA I OPEN09 + TAD XOUBLK + DCA I OPEN10 + TAD XOUELE + DCA I OPEN11 + JMP I OOPEN /--RETURN-- + +OEFAIL, TAD I OPEN02 + AND [7760 + SNA CLA + JMP I OPEN12 /DE**FATAL ERROR** + TAD I OPEN02 + AND [17 + DCA I OPEN02 + JMP OUENTR + +ONOFIL, ISZ I OPEN05 /SET OUTPUT INHIBIT SWITCH + JMP I OOPEN /--RETURN-- + +OUFPTR, 7600 + +OPEN01, OUDEVH+1 +OPEN02, OUFILE +OPEN04, OUCNAM +OPEN05, OUTINH +OPEN06, OUCCNT +OPEN07, OUSETP +OPEN09, OUHNDL +OPEN10, OUBLK +OPEN11, OUELEN +OPEN12, SYSERR +OU3501, 3501 +OUFDEV, OUDEVH +OUFINP, INBUFP + /CONTINUATION OF FIXTAB HANDLER + +FIXTAY, IFZERO HASH< + TAD HIGHTG /SET POINTERS TO TABLE + CMA + > + IFNZRO HASH< + TAD TAGMAX + CIA + > + DCA TEMP3 + DCA THISTG +FIXTAX, JMS I [FINDTG /GET A TAG + AC3777 + AND TAG1 + IFNZRO HASH< + SZA + > + TAD [4000 /SET BIT 0 OF FIRST WORD TO 1 + DCA TAG1 /RETURN IT TO TABLE + JMS I [PUTTAG + ISZ THISTG + ISZ TEMP3 /DONE WITH TABLE YET? + JMP FIXTAX /NO + JMP I [LOOKEX /YES--EXIT TO MAIN-- + +/OUTPUT ONE REGISTER - BINARY +/ENTER WITH CONTENTS IN AC + +PUNOUT, 0 + DCA PUNOU1 + TAD PUNOU1 + RTR + RTR + RTR + AND [177 + JMS I OCHAR /OUTPUT FIRST FRAME + TAD PUNOU1 + AND [77 + JMS I OCHAR /OUTPUT SECOND FRAME + JMP I PUNOUT /--RETURN-- + +PUNOU1, +IOPEN, 0 /SET UP INPUT ROUTINE + CLA CMA /TO OPEN FILE + DCA I IOPEN1 + ISZ I IOPEN2 + TAD IOPEN3 + DCA I IOPEN4 + ISZ I IOPEN5 + TAD [LINBUF+120 + DCA TXTPTR + JMP I IOPEN /--RETURN-- + +IOPEN1, INCHCT +IOPEN2, INEOF +IOPEN3, 7617 +IOPEN4, INFPTR +IOPEN5, FORMSW + PAGE + /START PASS 2 *** NO LITERALS HERE EITHER *** + +START1, TAD [ERROR + DCA PERROR /RESET PREUDO-ERROR ROUTINE + JMS I ST1OPN /OPEN PASS 2 OUTPUT FILE + JMP NOPA21 /NO PASS 2 IF PASS 3 +NOPA23, TAD I ST1OBL + DCA BINSRT + DCA PUNCHX /CLEAR PUNCH INHIBIT + JMS START3 + JMP I .+1 + START2-1 + +NOPA21, CDF 10 + TAD I NOPA22 /IS THERE A PASS 3? + CDF + SNA CLA + JMP NOPA23 /NO - DO PASS 2 + ISZ PASS /SKIP PASS 2 + NOP + JMP NOPAS2 /CONTINUE TO PASS 3 + +NOPA22, 7605 + +START3, 0 /GENERATE LEADER/TRAILER + TAD LEADER + DCA TXTPTR + TAD [200 + JMS I OCHAR + ISZ TXTPTR + JMP .-3 + JMP I START3 /--RETURN-- + +LEADER, -10 + /END PASS 2 + +ENDPA2, JMS I [DUMPZ /DUMP PAGE 0 LITERALS + DCA PUNCHX + CLL /V3C + TAD CHKSUM /OUTPUT CHECKSUM + JMS I [PUNOUT /PUNCH THE CHECKSUM + JMS START3 /GENERATE LEADER/TRAILER + JMS I EN2CLS /CLOSE PASS 2 OUTPUT FILE +NOPAS2, TAD EN2LSO + DCA OERROR /SET NEW OUTPUT TO BE LISTING + ISZ I EN2OU1 +CMOVE, JMP CMOVA /ZEROED IF /C + CDF 10 /MOVE CODE FOR /C OPTION +CMOVB, TAD I CMOV1 + DCA I CMOV2 /MOVE OUTPUT FILE STORAGE + ISZ CMOV1 + ISZ CMOV2 + ISZ CMOV3 + JMP CMOVB /LOOP +CMOVA, CDF + JMS I ST1OPN /OPEN 3RD PASS FILE + DCA I CMOV4 /NO 3RD PASS + TAD I ST1OBL /GET FILE START +CSWIT2, CLA /"DCA BINSRT" IF /C + TAD PTPSW1 + DCA I EN2PTP /RESET PAPERTAPE SWITCH + TAD DIRSW1 + DCA I EN2DIR /RESET DIRECTORY SWITCH + JMS I PIOPEN + JMP I .+1 + LOADOV /OVERLAY THIS AREA WITH PASS3 CODE + +PIOPEN, IOPEN +DIRSW1, TAD [177 +PTPSW1, TAD [232 + +CMOV1, 7605 +CMOV2, 7600 +CMOV3, -12 +CMOV4, NSWITC +EN2CLS, OCLOSE +EN2LSO, LISOUT +EN2OU1, OUTPT1 +EN2PTP, PTPSW +EN2DIR, DIRSW +ST1OPN, OOPEN +ST1OBL, OUBLK +SWAPE2, RELOC + IFNZRO ENDOVL-SWAPE2&4000 + PAGE + IFNZRO HASH< + + /ONCE ONLY CODE TO HASH OUT THE PERMANENT SYMBOLS + +HSHSMS, 0 + JMS I (7607 /WRITE THE SYMBOL TABLE SORT OVERLAY + 4210 /2 PAGES FROM FIELD 1 + OUDEVH+400 /FROM HERE + ASWAP+1 /TO HERE + JMP I (SYSERR/WONDERFUL. + TAD I (USROFS + SZA CLA /SZA IF KICKING OUT USR + TAD (12 /ELSE FUDGE POINTER + TAD I (HIFLD /FIRST SET HASH TABLE SIZE + TAD PRIMES /ACCORDING TO CORE SIZE + DCA PRIME + TAD I PRIME + DCA PRIME + TAD PRIME + CIA + DCA I (MPRIME + TAD I (USROFS + SZA CLA + JMP KPUSR /JMP IF KEEPING USR + CDF 10 /SERVE NOTICE WE'RE OCCUPYING FIELD 1 + AC7776 + AND I (JSBITS + DCA I (JSBITS + TAD [7700 + DCA IOMON /AND POINT AT PROPER MONITOR E.P. +KPUSR, CDF + TAD I (MPRIME /HOW MANY SLOTS TO WIPE + DCA LAST3 /TO COUNTER + TAD I (USROFS + CLL RTL + TAD (7777 /FUDGE THE INITIAL AUTO XR + JMP CLRGO /INTO THE LOOP NOW +CLRLUP, TAD LAST1 + TAD (-7577 + SZA CLA /SZA IF NEED TO DO NEXT FIELD + JMP CLCDF0+1/ELSE CLEAR ANOTHER + TAD (10 + TAD CLCDF0 + DCA CLCDF0 /CDF INSTR GETS BUMPED + STA +CLRGO, DCA LAST1 /XRGETS SET +CLCDF0, CDF 10 /INITIALLY CDF 10 + DCA I LAST1 + DCA I LAST1 + DCA I LAST1 + DCA I LAST1 + ISZ LAST3 /SKP IF NO MORE + JMP CLRLUP /ELSE DO ANOTHER + CDF /THE TABLE IS CLEAN + TAD (HSHRTN + DCA I [GETTAG + STA + DCA HIGHTG /HIGHTG=CURRENT SYMBOL INDEX + TAD (SYMS+3 /USE THESE AUTO XR'S NOW + DCA LAST1 + TAD LAST1 + DCA LAST2 +HSHLP, TAD I LAST1 + AND [1777 /FIRST, STRIP THE TYPE BITS + DCA I (NAME1 + AC3777 + AND I LAST1 + DCA I (NAME2 + AC3777 + AND I LAST1 + DCA I (NAME3 + ISZ LAST1 /SKIP THE VALUE + JMP I (GETTGH /GO FIND IT'S PLACE +HSHRTN, CLA CLL + TAD I LAST2 + DCA I (NAME1 + TAD I LAST2 + DCA I (NAME2 + TAD I LAST2 + DCA I (NAME3 + TAD I LAST2 + DCA VALUE2 + JMS I (INSRTG /AND STORE IT + TAD LAST1 + TAD (1-SYME+4 + SZA CLA + JMP HSHLP /LOOP IF MORE TO GO + JMP I HSHSMS /--RETURN-- + +PRIMES, . + 1737 /1 FIELD + 3673 /2 FIELDS + 5633 /3 FIELDS + 7577 /4 FIELDS + 7775 /5 FIELDS (THE LAST MOSTELY WASTE) + BPRIMES=.-1 /ALTERNATE TABLE SIZE FOR BATCH COMPATABILITY + 1737 /1 FIELD (MEANS NO BATCH) + 3133 /2 FIELDS + 5075 /3 FIELDS + 7035 /4 FIELDS + 7775 /5 FIELDS (SOME OF WASTE FOR BATCH) + + 1335 /STILL ANOTHER ALTERNATE SET IF KEEPING USR + 3273 + 5237 + 7175 + 7775 + + 0 + 2535 + 4465 + 6437 + 7775 + + PAGE + > + /************************************************************** +/PAGE 0 LITERALS +/************************************************************** + IFNZRO HASH< + + /SYMBOL TABLE SORT OVERLAY + /ONLY SWAPPED IF TABLE WILL BE LISTED + + /FIRST, SOME EQUATES + + PPUTTAG= [PUTTAG + PFINDTG= [FINDTG + O1777= [1777 + O7774= [7774 + + SXR= XREG1 + TXR= XREG2 + SXR2= LAST1 + TXR2= LAST2 + UXR= LAST3 + DXR= LAST4 + + BEG= LOC + END= OFFSET + LO= OFSBUF + HI= STARSW + MED= OP + + FIELD 1 /SET THE FIELD NOW + *OUDEVH+400 /IT GOES HERE + +SORTAB, 0 /FIRST LOC IN PAGE + TAD TAGMAX + CIA + DCA TEMP /TEMP=#CELLS TO SCAN + + /DEFLATE TABLE PRIOR TO SORTING AND LISTING IT + /OUT WITH EMPTIES AND PERMANENTS + + DCA HIGHTG /TARGET POINTER + DCA TEMP2 /SOURCE POINTER +DEFLP, TAD TEMP2 + DCA THISTG + JMS I PFINDTG /GET THE NEXT STAB CELL + TAD TAG1 + CLL RAL + SNA SZL CLA /AND THERE BUT NOT FIXED? + JMP DEFNUL /NO, DON'T STORE IT + TAD O1777 /YES,DISCARD THE TYPE BITS NOW + AND TAG1 + DCA TAG1 + AC3777 + AND TAG2 + DCA TAG2 + AC3777 + AND TAG3 + DCA TAG3 + TAD HIGHTG + DCA THISTG + JMS I PPUTTAG + ISZ HIGHTG +DEFNUL, ISZ TEMP2 + ISZ TEMP /TRY AGAIN + JMP DEFLP + JMS I (SORT /NOW SORT THEM + JMP I SORTAB /EXIT TO PRTSTAB + /MOVE A SYMBOL THRU THE TABLE + +SMOV, 0 + TAD SXR2 /GET SOURCE DF+XREG + JMS GETFLD + DCA SMVCD1 + TAD TXR + DCA SXR + TAD TXR2 + JMS GETFLD + DCA SMVCD2 + TAD O7774 + DCA SSWT +SMVCD1, 0 + TAD I SXR +SMVCD2, 0 + DCA I TXR + ISZ SSWT + JMP SMVCD1 +SMVCD0, CDF + JMP I SMOV + + /AUXILLIARY FIELD+XREG SETTER + +GETFLD, 0 + CLL + TAD I (USROFS /IF KEEPING USR + DCA TXR /AC=SYM NUM + DCA SMVCD2 + TAD TXR + ISZ SMVCD2 + CML + TAD (-1740 + SNL + JMP .-4 + CLL RTL + TAD (-202 /SETS AS IN SETFLD... + DCA TXR /TENTATIVELY SET TXR + TAD SMVCD2 + CLL RTL + RAL + TAD SMVCD0 + JMP I GETFLD /EXIT WITH AC SET TO CDF INSTR + /ROUTINE TO EXCHANGE SYMBOLS LO AND HI + +SSWT, 0 + TAD HI + JMS GETFLD + DCA SWCDF1 + TAD SWCDF1 + DCA SWCDF3 + TAD TXR + DCA SXR + TAD SXR + DCA SXR2 /SXR'S FOR HIGH SYMBOL + TAD LO + JMS GETFLD + DCA SWCDF2 + TAD TXR + DCA TXR2 /TXR'S FOR LOW SYMBOL + TAD O7774 + DCA SMOV /COUNTER + +SWCDF1, 0 + TAD I SXR /GET HI SYM WORD + DCA GETFLD /HOLD IT +SWCDF2, 0 + TAD I TXR /GET LO + DCA SCOM /HOLD IT + TAD GETFLD + DCA I TXR2 /STORE HI IN LOW +SWCDF3, 0 + TAD SCOM /NOW STORE LO + DCA I SXR2 /IN HI + ISZ SMOV + JMP SWCDF1+1 + CDF + JMP I SSWT + /COMPARE SYMBOLS + SET LINK THEREBY + +SCOM, 0 + DCA THISTG /AC=TAG # + JMS I (SETFLD + TAD I TAGXR + CLL CIA + TAD TAG1 + SZA CLA + JMP SCOMRT + TAD I TAGXR + CLL CIA + TAD TAG2 + SZA CLA + JMP SCOMRT + TAD I TAGXR + CLL CIA + TAD TAG3 + SNA CLA + HLT /NEVER +SCOMRT, CDF + JMP I SCOM + + PAGE + + + + + + + + + /SORT ROUTINE HERE + +SORT, 0 + DCA BEG /INITIALIZE PARTITION BOUNDS + STA STL + TAD HIGHTG + DCA END /ARE THERE ANY SYMBOLS? + SZL + JMP I SORT /NO EXIT WITH LINK SET + TAD (LITBF1-1+26 /OK, SET STACK NOW + DCA DXR + TAD DXR + DCA UXR + +SLOOP, STA + TAD LEVEL + DCA LEVEL +SLOOP2, TAD BEG + STL CIA + TAD END + SNA SZL + JMP OKCOOL /END.LOS.BEG + CLL RAR + TAD BEG + DCA MED /MED=BEG+(END-BEG)/2 + TAD MED + DCA THISTG + JMS I PFINDTG /T=A(MED) + TAD BEG + DCA LO /LO=BEG + TAD END + DCA HI /HI=END + TAD MED + CIA + TAD BEG + SNA CLA + JMP JUSTWO /BEG.EQ.MED + TAD LO + DCA SXR2 + TAD MED + DCA TXR2 + JMS I (SMOV /A(MED)=A(LO) +BEGLP, ISZ LO + TAD LO + CLL CIA + TAD HI + SNL CLA + JMP DONE /HI.LOS.LO + TAD LO + JMS I (SCOM /T.GT.A(LO) TO LINK + SZL CLA + JMP BEGLP /T.GT.A(LO) + JMP ENDGO /T.LT.A(LO) +ENDLP, TAD LO + CLL CIA + TAD HI + SNL CLA + JMP DONE /IF HI.LO.LO +ENDGO, TAD HI + JMS I (SCOM + SZL CLA + JMP SWITCH + STA + TAD HI + DCA HI + JMP ENDLP +SWITCH, JMS I (SSWT + STA + TAD HI + DCA HI + JMP BEGLP + DONE, TAD HI + DCA SXR2 + TAD BEG + DCA TXR2 + JMS I (SMOV /A(BEG)=A(HI) + TAD HI + DCA THISTG + JMS I PPUTTAG /A(HI)=T + AC7776 + TAD UXR + DCA UXR + TAD UXR + DCA DXR + TAD HI + CLL CIA + TAD MED + SZL CLA + JMP HIBIGR /DEFER HIGH FOR LATER + TAD BEG + DCA I DXR /DEFER LO FOR LATER + STA + TAD HI + DCA I DXR + TAD HI + IAC + DCA BEG + JMP SLOOP +HIBIGR, TAD HI + IAC + DCA I DXR + TAD END + DCA I DXR + STA + TAD LEVEL /CLUMSY + DCA LEVEL + CLL STA + TAD HI + DCA END + SNL /PROTECT AGAINST WRAP AROUND + JMP OKCOOL + JMP SLOOP2 + +JUSTWO, TAD HI + JMS I (SCOM + SZL CLA + JMS I (SSWT /SWITCH IF T.GT.A(HI) +OKCOOL, CLA CLL /NOW CONSIDER PREV PARTITIONS + TAD I UXR + DCA BEG + TAD I UXR + DCA END + ISZ LEVEL + JMP SLOOP2 /REITERATE + JMP I SORT /DONE, RETURN WITH A CLEAR LINK +LEVEL, 0 + PAGE + > + /ROUTINE TO STORE THE DATE OF THE FORM DD-MMM-YY + /IN THE HEADING + + IFZERO HASH < + FIELD 1 + *OUDEVH+400 + > + +FMTDAT, 0 + TAD I (MDATE /PICK UP THE DATE WORD OF THE FORM MMM MDD DDD YYY + CDF /RUN WITH DF = 0 + SNA + JMP NODATE /EXIT IF NO DATE + DCA DATWD /ELSE STORE DATE WORD + TAD ("0-1 + DCA I DATPTR /SET FIRST DIGIT OF DAY + TAD DATWD /NOW GET DAY BITS + CLL RTR + RAR + AND (37 + JMS DIV10 /DO DAY DIGITS NOW + TAD ("- + DCA I DATPTR /STORE DASH + ISZ DATPTR + TAD DATWD /NOW GET MONTH BITS + TAD (7400 /REDUCE TO ORIGIN 0 + AND (7400 + CLL RTL + RTL + RAL + DCA DIV10 + TAD DIV10 + CLL RAR /GENERATE 1.5*MONTH INDEX + TAD DIV10 + TAD (MONLST /INDEX MONTH LIST (SIXBIT) + DCA MONPTR + TAD (-3 + DCA DIV10 /SET 3 TIMES THRU LOOP + SZL + JMP MONGO /IF EVEN START AT RIGHT HALF +MONLP, TAD I MONPTR + CLL RTR + RTR + RTR + JMS MONPUT /PUT LEFT CHAR +MONGO, TAD I MONPTR + JMS MONPUT /PUT RIGHT CHAR + ISZ MONPTR + JMP MONLP /LOOP FOR MORE +MONPUT, 0 + TAD (40 + AND (77 + TAD (40 /CONVERT TO 7BIT + DCA I DATPTR + ISZ DATPTR + ISZ DIV10 + JMP I MONPUT /RETURN TO UNPACK LOOP + TAD ("- + DCA I DATPTR /PUT ANOTHER DASH + ISZ DATPTR + TAD ("6 + DCA I DATPTR /SETUP YEAR TENS DIGIT FOR DIVIDE + TAD I (BIPCCL + AND (600 /GET YEAR EXTENSION FROM 600 BITS + CLL RTR + RTR + DCA DIV10 + TAD DATWD /NOW GET YEAR + AND (7 /ISOLATE IT + TAD DIV10 /ADD EXTENSION + JMS DIV10 /UNPACK IT +NODATE, CIF CDF /NOW RETURN + JMP I FMTDAT + +DIV10, 0 + ISZ I DATPTR + TAD (-12 + SMA + JMP .-3 /REDUCE MON 10. + TAD (12+"0 + ISZ DATPTR + DCA I DATPTR /STORE LOW DIGIT + ISZ DATPTR + JMP I DIV10 /--RETURN-- + +DATPTR, DATE +DATWD, 0 +MONPTR, 0 + + PAGE + + $$$$$ ADDED src/os8-v3f/PIP.PA Index: src/os8-v3f/PIP.PA ================================================================== --- /dev/null +++ src/os8-v3f/PIP.PA @@ -0,0 +1,2265 @@ +/3 PIP FOR OS/8 MONITOR +/ +/ +/ +/ +/ +/ +/ +/ +/ +/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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + / 4-MAY-1977 FILE: PIP.PA OS/8 VERSION 14A +/RL/EF/ET.AL./S.R./E.S. + + + +/ABSTRACT---- +/PIP (PERIPHERAL INTERCHANGE PROGRAM) IS A GENERAL FILE +/MANIPULATION PROGRAM FOR THE OS/8 PROGRAMMING SYSTEM. +/PIP ACCOMPLISHES DATA TRANSFERS BETWEEN ANY DEVICES IN THE OS/8 +/CONFIGURATION. + + +/VERSION 3 MODS: + +/FIXED PROBLEM WITH ONE-PAGE WRITE +/IN /S OR /Z, =OPTION IS TAKEN MODULO 100 (OCTAL) +/ WITH 100, 200, ETC. MEANING USE 0 ADDITIONAL WDS. +/DATES STILL DON'T LINE UP +/'0 FREE BLOCKS' +/ALLOW FILLING UP DEVICE TO VERY LAST BLOCK +/ALLOW 7-BIT ^C +/ALTMODE ON CD LINE RETURNS TO MONITOR WHEN DONE +/NO HALT ON /L IF NO TTY HANDLER (ACTS AS NOP) +/ /V PRINTS VERSION NUMBER FIRST TIME CALLED +/ /O AFFIRMS /Y ON ZERO SYS OR ARE YOU SURE +/=NNNN ON /I OPTION SPECIFIES LENGTH TO CLOSE FILE + + +/MAINTENANCE RELEASE CHANGES: + +/1. FIXED LENGTH OF ALL VARIETIES OF RF08 +/2. ADDED RX01 TO INTERNAL LENGTH TABLES +/3. CHANGED VERSION NUMBER TO V10 +/4. ADDED CHECK FOR 7-BIT CTRL/Z TO ASCII HANDLER + +/E.S. DISABLED /E,/F,/L +/E.S. FIXED /Y OPTION PER SPR + +/ DEVICE UPGRADE KIT CHANGES(V12C): +/ 1.ADDED RX02 SUPPORT +/ 2.ADDED /Y OPTION CHANGES TO SUPPORT NEW MONITOR + + /DETAILS OF PIP: + +/PIP RUNS WITH THE USR (USER SERVICE ROUTINES) ALWAYS IN CORE. +/THIS ELIMINATES SWAPPING THE MONITOR. IF ANY CHANGES ARE MADE +/TO PIP, CARE SHOULD BE TAKEN IN USING PAGE ZERO LOCATIONS, AS +/THEY MUST NOT DESTROY ANY MONITOR LOCATIONS. + +/CORE USED: +/FIELD 0 + +/00000-02777- OUTPUT BUFFER +/03000-06377- INPUT BUFFER +/06400-06577- USED FOR /Y COMMAND ONLY +/06600-07177- INPUT HANDLER +/07200-07577- OUTPUT HANDLER + +/FIELD 1 + +/10000-11777- OS/8 I/O MONITOR +/12000-16577- EXECUTABLE CODE +/16600-17177- HOLDS NEW DIRECTORY SEGMENT FOR /S OPTION +/17200-17577- HOLDS OLD DIRECTORY SEGMENT IN /S OPTION + + +/MAJOR PIECES OF CODE AND THEIR FUNCTION (BRIEFLY). +/THIS IS A LIST OF ROUTINES AS THEY APPEAR PHYSICALLY, AND +/NOT AS THEY ARE LOGICALLY CONNECTED. + +/ICHAR- GENERAL CHARACTER INPUT ROUTINE. ASSIGNS NEW +/ DEVICE HANDLERS AS NEEDED. + +/OOPEN- ENTERS A FILE ON A SPECIFIED DEVICE. + +/OUTDMP- WRITES OUTPUT BUFFER TO OUTPUT DEVICE. + +/OCLOSE- CLOSES FILE CREATED BY OOPEN + +/OCHAR- CHARACTER OUTPUT ROUTINE. WRITES CHARACTERS +/ TO OUTPUT BUFFER, CALLING OUTDMP WHEN FULL. + +/OTYPE- USES DEVICE NUMBER IN OUTPUT AREA OF CD TO +/ INSPECT THE DEVICE CONTROL BLOCK WORD. THIS +/ GIVES A CODE FOR THE TYPE OF DEVICE. + +/SLASHG- HANDLES I/O ERRORS. IF /G IS SET, HARD I/O +/ ERRORS ARE IGNORED. IF /S AND /G ARE ON, A +/ SPECIAL RETURN IS TAKEN. + +/IMAGE- IMAGE MODE PROCESSOR FOR PIP. + +/SQTRA- MAIN SUBROUTINE OF IMAGE MODE, AND /S OPTION. + +/PIP, PIP+1- MAIN ENTRANCES TO PIP. THE CODE ON THIS PAGE +/ INSPECTS CD OPTION WORDS AND BRANCHES TO PROPER +/ ROUTINES. + +/ASCII- THE DEFAULT TRANSFER MODE IN PIP IS ASCII. + +/DELETE- DELETES FILES ON OUTPUT SIDE OF CD LIST. + +/DZERO- ZEROES DIRECTORY OF FIRST OUTPUT DEVICE. + +/PIPERR- ERROR ROUTINR FOR PIP. + +/DIRPRE- DIRECTORY PRINTING ROUTINE. + +/BINARY- BINARY MODE PROCESSOR. HANDLES ABSOLUTE AND +/ RELOCATABLE BINARY FILES. + +/ERPRNT- ERROR PRINTOUT. + +/SQUISH- FILE COMPRESSION PROCESSOR. ELIMINATES 'HOLES' +/ IN DIRECTORY OF INPUT DEVICE. + +/SYSCOP- SYSTEM COPY PROCESSOR. ALLOWS TRANSFER OF THE +/ OS/8 SYSTEM AREA. + /OPTIONS AVAILABLE IN PIP: + +/A- ASCII TRANSFER; DEFAULT MODE +/B- BINARY MODE TANSFER +/C- DELETE TRAILING BLANKS. (ASCII MODE) +/D- DELETE FIRST OUTPUT FILE BEFORE PROCEEDING +/E- LIST INPUT DIRECTORY INCLUDING EMPTY FILES +/F- LIST INPUT DIRECTORY; ONLY FILE NAMES +/G- IGNORE ERRORS WHILE TRANSFERING +/I- IMAGE MODE TRANSFER +/L- LIST INPUT DIRECTORY; EXCLUDE EMPTY FILES +/O- OK TO PERFORM A SQUISH OR ZERO WITHOUT ASKING +/S- COMPRESS INPUT DEVICE ONTO OUTPUT DEVICE. ELIMINATES +/ 'HOLES' ON INPUT DEVICE. +/T- PROVIDE SIMPLE TTY FORMATTING. (ASCII ONLY) +/Y- COPY OS/8 SYSTEM AREA +/Z- ZERO OUTPUT DEVICE DIRECTORY BEFORE PROCEEDING +/=N- LEAVE N WORDS EXTRA PER DIRECTORY ENTR. VALID +/ ONLY WITH /S OR /Z. +/=N- WITH /I OPTION CLOSES OUTPUT FILE WITH THIS LENGTH +/V PRINTS VERSION # (FIRST TIME ONLY) + +/COMMENTS ON THE PROGRAM: + + /SINCE PIP RUNS WITH USR IN CORE, NO PAGE ZERO LITERALS + /CAN BE USED. THE LOCATIONS CURRENTLY USED IN + /FIELD 1 ON PAGE ZERO ARE: + + OUTXR=10 + INXR=11 + TEMP1=12 + IHNDLR=24 /HOLDS INPUT HANDLER ADDRESS + OHNDLR=25 /OUTPUT HANDLER ADDRESS + SQFLAG=26 /'SQUISH INDICATOR + OUWAST=27 /# WASTE WORDS ON OUTPUT + OUTBLK=30 + OUDLEN=31 + SAME=32 + INBLK=33 + RECCNT=34 + +/CONSTANTS USED BY THE DIRECTORY PRINTOUT ROUTINE (OVERLAPPING) ARE: + + FLENGT=24 + BLOKNO=25 + DTYPE=27 + DCOUNT=30 + DLINK=31 + WASTE=32 + DDATE=33 + ECOUNT=35 + /PIP FOR OS/8 MONITOR + /EQUIVALENCES FOR GENERAL CHARACTER I/O ROUTINES + + OUBUF=0 /MUST BE LOWER THAN INBUF + OUCTL=5400 /OUTPUT BUFFER OF 3000 WORDS + OUDEVH=7200 /PROVIDE ROOM FOR TWO-PAGE HANDLERS + INBUF=3000 + INCTL=1600 /INPUT BUFFER OF 3400 WORDS + INRECS=7 + INDEVH=6600 + + /PAGE 6400 IS FREE, EXCEPT DURING /Y COMMAND + + /EQUIVALENCES NECESSARY TO INTERFACE WITH MONITOR + DCB=7760 + MPARAM=7643 /CD PARAMETER AREA + OLDDIR=7 /POINTER TO MONITOR VARIABLE "OLDT9" + MTEMP=27 /MONITOR SCRATCH AREA ON "SYS" - ***VOLATILE*** + PTP=20 /INTERNAL TYPE CODE FOR PAPER TAPE PUNCH + XR=10 + TEMP=20 + CHAR=21 + INFPTR=22 + INEOF=23 + + ABUF=6601 /LINE BUFFER - 150 CHARACTERS LONG + SQBUF1=6600 /DIRECTORY BUFFER FOR "SQUISH" OPTION + SQBUF2=7200 /"" + + FIELD 1 + +/TO ENABLE /E,/F,/L SET +/OS78=0 + +/TO DISABLE /E,/F,/L +IFNDEF OS78 + + /GENERAL CHARACTER I/O ROUTINES FOR BLEEP + /CALLED AS FOLLOWS: + + /JMS I (IOPEN INITIALIZES THE INPUT ROUTINE + + /JMS I (ICHAR READS A CHARACTER + /ERROR RETURN /AC>0 IF END OF FILE, AC<0 IF READ ERROR + + /JMS I (OOPEN INITIALIZES THE OUTPUT ROUTINE + /ERROR RETURN AC>0 IF NO OUTPUT DEVICE/FILE, AC<0 IF ERROR + + /JMS I (OCHAR OUTPUTS A CHARACTER + /ERROR RETURN OUTPUT ERROR OR TOO MUCH OUTPUT + + /JMS I (OCLOSE CLOSES THE OUTPUT FILE + /ERROR RETURN FILE TOO LARGE TO BE CLOSED OR OUTPUT ERROR + + /JMS I (OTYPE RETURNS DCB WORD OF OUTPUT DEVICE IN AC + + + + /PARAMETERS NEEDED: + + /INBUF= ADDRESS OF INPUT BUFFER + /INCTL= INPUT BUFFER CONTROL WORD + /OUBUF= ADDRESS OF OUTPUT BUFFER + /OUCTL= OUTPUT BUFFER CONTROL WORD (MUST BE NEGATIVE) + /INRECS= [INCTL/256] + /INDEVH= ADDRESS OF PAGE FOR INPUT HANDLER + /OUDEVH= ADDRESS OF PAGE FOR OUTPUT HANDLER + + /ASSUMES I/O MONITOR IS RESIDENT IN CORE. + /CAN BE CALLED FROM ANY FIELD WITH BUFFERS IN ANY FIELD. + INFLD=INCTL&70 /GET FIELD OF INPUT BUFFER + OUFLD=OUCTL&70 /DITTO OUTPUT BUFFER + + *2000 + +IN7400, 7400 +IOPEN, 0 + CLA CMA + DCA INCHCT /SET INCHCT TO FORCE A READ + ISZ INEOF /SET END-OF-FILE FLAG TO FORCE A NEW FILE + TAD (7617 + DCA INFPTR /RESET FILE POINTER + RDF + TAD INCDIF + DCA .+1 +INPTR, HLT /RESTORE CALLING FIELDS + JMP I IOPEN + +ICHAR, 0 +IN7600, 7600 + RDF + TAD INCDIF + DCA INRTRN /SAVE CALLING FIELDS +INCHAR, CDF INFLD + ISZ INJMP /BUMP THREE-WAY UNPACK SWITCH + ISZ INCHCT +INJMPP, JMP INJMP + TAD INEOF + SNA CLA /DID LAST READ YIELD END-OF-FILE? + JMP INGBUF /NO - DO ANOTHER +GETNEW, JMS INNEWF /OPEN A NEW INPUT FILE + JMP EOFERR /NO FILE TO OPEN +INGBUF, TAD INCTR + CLL + TAD (INRECS + SNL + DCA INCTR /RESTORE INCTR IF IT HASN'T OVERFLOWED + SZL /IS THIS THE LAST READ? + ISZ INEOF /YES - SET END-OF-FILE FLAG + /NOT END-OF-FILE IF INPUT DEVICE + /IS NON-FILE STRUCTURED! + CLL CML CMA RTR /CONSTRUCT A CONTROL WORD FOR THE READ + RTR /FROM THE AMOUNT OF THE OVERFLOW + RTR /(IF ANY) AND THE STANDARD CONTROL WORD + TAD (INCTL+1 + DCA INCTLW +INCDIF, CDF CIF 0 + CDF 10 + JMS I INHNDL /CALL THE DEVICE HANDLER +INCTLW, 0 +INBUFP, INBUF +INREC, 0 + JMS I (SLASHG /A HANDLER ERROR - SHOULD WE IGNORE? + INERRX-. /ADDRESS IF NOT +INBREC, TAD INREC + TAD (INRECS + DCA INREC /UPDATE THE RECORD NUMBER + TAD INCTLW + AND IN7600 + CLL RAL + TAD INCTLW + AND IN7600 + CMA + DCA INCHCT /COMPUTE THE NEW CHARACTER COUNT + TAD INJMPP + DCA INJMP /RESET THE CHARACTER SWITCH + TAD INBUFP + DCA INPTR /AND THE WORD POINTER + JMP INCHAR /GO BACK AND MAKE BELIEVE THIS NEVER HAPPENED +INERRX, ISZ INEOF /EITHER AN END-OF-FILE OR A BADDIE + SMA CLA /WHICH TYPE WAS IT? + JMP INBREC /END OF FILE - RESUME THY PROCESSING +INERR, CLA CLL CML RAR /BADDIE - GIVE ERROR RETURN WITH NEGATIVE AC +EOFERR, JMP INRTRN +INJMP, HLT /THIS IS THE THREE - WAY CHARACTER SWITCH + JMP ICHAR1 + JMP ICHAR2 +ICHAR3, TAD INJMPP + DCA INJMP + TAD I INPTR +IN200, AND IN7400 + CLL RTR + RTR /COMBINE THE HIGH-ORDER FOUR BITS OF + TAD INCTLW + RTR /THE TWO WORD TO FORM THE THIRD CHARACTER + RTR + ISZ INPTR + JMP INCOMN +ICHAR2, TAD I INPTR + AND IN7400 + DCA INCTLW /SAVE THE HIGH-ORDER BITS FOR THE THIRD CHAR + ISZ INPTR /BUMP THE WORD POINTER +ICHAR1, TAD I INPTR +INCOMN, AND (377 + TAD (-232 +INCTZF, SNA /IS THE CHARACTER A ^Z? + JMP GETNEW /YES - GET A NEW FILE + TAD (232 /RESTORE THE CHARACTER + ISZ ICHAR /BUMP RETURN TO NORMAL RETURN +INRTRN, 0 /RESTORE CALLING FIELDS + JMP I ICHAR /AND RETURN + /IOPEN IS UNNECESSARY. + INNEWF, -1 /ROUTINE TO OPEN NEW INPUT FILE + INCHCT=INNEWF + CDF 10 + TAD (INDEVH+1 + DCA INHNDL /INITIALIZE HANDLER ADDRESS + TAD I INFPTR /GET NEXT CD INPUT FILE ENTRY + SNA /ANY MORE? + JMP I INNEWF /NO - OUT OF INPUT + JMS I IN200 + 1 /ASSIGN, FETCH HANDLER +INHNDL, 0 + HLT /HUH? + TAD I INFPTR + AND (7760 /GET LENGTH PART OF WORD + SZA /LENGTH OF 0 MEANS LENGTH >=256 + TAD (17 /ADD HIGH-ORDER BITS + CLL CML RTR + RTR + DCA INCTR /STORE LENGTH OF FILE + ISZ INFPTR + TAD I INFPTR + DCA INREC /STORE STARTING RECORD NUMBER OF FILE + ISZ INFPTR + DCA INEOF /ZERO END-OF-FILE FLAG + ISZ INNEWF + JMP I INNEWF + INCTR=IOPEN + PAGE + OOPEN, 0 /OPEN OUTPUT FILE +OU7600, 7600 +/ RDF +/ TAD OUCDIF +/ DCA OORETN + TAD OU7601 + DCA OUBLK + TAD (OUDEVH+1 + DCA OUHNDL + CDF 10 + TAD I OU7600 /GET DEVICE NUMBER WORD OF OUTPUT FILE ENTRY + AND (17 /STRIP OFF ANY LENGTH INFO + SNA /IS THERE AN OUTPUT DEVICE? + JMP ONOFIL /NO - INHIBIT OUTPUT + JMS I (200 + 1 /ASSIGN, FETCH HANDLER +OUHNDL, 0 /OUTPUT DEVICE HANDLER ENTRY + HLT /HUH? +OUENTR, TAD I OU7600 + JMS I (200 + 3 /ENTER OUTPUT FILE +OUBLK, 7601 /REPLACED WITH STARTING BLOCK +OUELEN, 0 /REPLACED WITH LENGTH OF HOLE + JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH + DCA OUCCNT + DCA I (OUTINH /ZERO OUTPUT INHIBIT FLAG + JMS I (OUSETP + ISZ OOPEN +OORETN, CDF CIF 10 /RESTORE CALLING FIELDS + JMP I OOPEN +OEFAIL, TAD I OU7600 + AND (7760 /GET REQUESTED LENGTH + SNA CLA /WAS IT AN INDEFINITE REQUEST + JMP ONTERR /YES - CANNOT ENTER THE FILE + TAD I OU7600 + AND (17 /MAKE THE REQUESTED LENGTH ZERO + DCA I OU7600 + JMP OUENTR /TRY, TRY AGAIN +ONTERR, CLA CLL CML RAR + JMP OORETN /TAKE THE ERROR RETURN WITH AC<0 +ONOFIL, ISZ I (OUTINH + JMP OORETN /TAKE THE ERROR RETURN WITH AC=0 + OUTDMP, 0 + DCA OUCTLW /STORE THE CONTROL WORD + CDF 10 + TAD I (OUTINH + SZA CLA + JMP OUNOWR + TAD OUCCNT + SNA + ISZ OUCTLW + TAD OUBLK + DCA OUREC /COMPUTE THE STARTING BLOCK NUMBER OF THIS TRANSFER + TAD OUCTLW + CLL RTL + RTL + RTL + AND (17 /COMPUTE THE NUMBER OF RECORDS + TAD OUCCNT /UPDATE THE NUMBER OF BLOCKS IN THE FILE + DCA OUCCNT + TAD OUCCNT + CLL CML + TAD OUELEN + SNL SZA CLA /DOES THE LENGTH EXCEED THE GIVEN LENGTH? + JMP I OUTDMP /YES - SIGNAL OUTPUT ERROR +OUCDIF, CDF CIF 0 + CDF 10 + JMS I OUHNDL +OUCTLW, 0 + OUBUF +OUREC, 0 + JMS I (SLASHG + .+2-. +OUNOWR, ISZ OUTDMP /BUMP OUTDMP TO NORMAL RETURN + JMP I OUTDMP + OCLOSE, 0 + CDF 10 + TAD I (OUTINH + SZA CLA /IS OUTPUT INHIBITED? + JMP OCISZ /YES - CLOSE IS A NOP + JMS I (OTYPE + AND (770 + TAD (-PTP /CHECK FOR PAPER TAPE PUNCH OUTPUT + SZA CLA /AND SKIP ^Z OUTPUT IF TRUE + TAD (232 /OUTPUT A ^Z + JMS I (OCHAR + JMP OCRET + JMS I (OCHAR + JMP OCRET +FILLLP, JMS I (OCHAR + JMP OCRET + JMS I (OTYPE /GET TYPE OF OUTPUT DEVICE + SPA CLA + TAD (100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD + TAD (77 /BOUNDARY - OTHERWISE A HALF-RECORD + AND I (OUDWCT + SZA CLA /UP TO THE BOUNDARY YET? + JMP FILLLP /NO - FILL WITH ZEROS + TAD I (OUDWCT /GET DOUBLEWORD COUNT LEFT + TAD (OUCTL&3700 + SNA /A FULL WRITE LEFT? + JMP NODUMP /YES - DON'T DO IT - THE ^Z IS ALREADY OUT + TAD (4000+OUFLD /PUT IN THE FIELD BITS AND THE WRITE BIT + JMS OUTDMP + JMP OCRET /AN ERROR OCCURRED WHILE DUMPING THE BUFFER +NODUMP, TAD I OU7600 /GET THE DEVICE NUMBER + JMS I (200 + 4 /CLOSE THE OUTPUT FILE +OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME +OUCCNT, 0 + SKP /ERROR WHILE CLOSING THE FILE - BAD! +OCISZ, ISZ OCLOSE +OCRET, CDF CIF 10 /RESTORE CALLING FIELDS + JMP I OCLOSE + PAGE + OUSETP, 0 /ROUTINE TO INITIALIZE CHARACTER POINTERS + TAD (OUCTL&3700 /GET SIZE OF BUFFER IN DOUBLEWORDS + CIA /PAL10 IS DEFINITELY NOT NICE + DCA OUDWCT +/ TAD (OUBUF + IFNZRO OUBUF /V3 + DCA OUPTR /INITIALIZE WORD POINTER + TAD OUJMPE + DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH + JMP I OUSETP + +OCHAR, 0 + AND (377 + DCA OUTEMP + RDF + TAD (CDF CIF 0 + DCA OUCRET + TAD OUTINH + SZA CLA /IS THERE AN OUTPUT FILE? + JMP OUCOMN /NO - EXIT +OUCHAR, CDF OUFLD /SET DATA FIELD TO BUFFER'S FIELD + ISZ OUJMP /BUMP THE CHARACTER SWITCH +OUJMP, HLT /THREE WAY CHARACTER SWITCH + JMP OCHAR1 + JMP OCHAR2 +OCHAR3, TAD OUTEMP + CLL RTL + RTL + AND (7400 + TAD I OUPOLD + DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH + /ORDER 4 BITS OF THIRD CHAR + TAD OUTEMP + CLL RTR + RTR + RAR + AND (7400 + TAD I OUPTR + DCA I OUPTR /UPDATE SECOND WORD FROM LOW ORDER 4 BITS + TAD OUJMPE + DCA OUJMP /RESET SWITCH + ISZ OUPTR + ISZ OUDWCT /BUMP DOUBLEWORD COUNTER EVERY 3 CHARS + JMP OUCOMN + TAD (OUCTL /LOAD CONTROL WORD FOR A FULL WRITE + JMS I (OUTDMP /DUMP THE BUFFER + JMP OUCRET /OUTPUT ERROR - GIVE ERROR RETURN + JMS OUSETP /RE-INITIALIZE THE POINTERS + JMP OUCOMN +OCHAR2, TAD OUPTR + DCA OUPOLD /SAVE POINTER TO FIRST WORD OF TWO + ISZ OUPTR /BUMP WORD POINTER TO SECOND WORD +OCHAR1, TAD OUTEMP + DCA I OUPTR +OUCOMN, ISZ OCHAR +OUCRET, HLT /RESTORE CALLING FIELDS + JMP I OCHAR +OUTEMP, 0 +OUPOLD, 0 +OUPTR, 0 +OUJMPE, JMP OUJMP +OUDWCT, 0 +OUTINH, 0 + OTYPE, 0 + RDF + TAD (CDF CIF 0 + DCA OTRTN + CDF 10 + TAD I (7600 + AND (17 + TAD (DCB-1 + DCA OUTEMP + TAD I OUTEMP +OTRTN, HLT + JMP I OTYPE +CTCTST, 0 + TAD (200 /V3 + KRS + TAD (-203 + SNA CLA /IS THE TELETYPE BUFFER A ^C + KSF /WITH THE TELETYPE FLAG ON? + JMP I CTCTST /NO +LEAVE, CDF CIF 0 /YES - GO TO MONITOR + JMP I (7600 /THROUGH THE "SAVE CORE" RETURN + +SLASHG, 0 + DCA CTCTST + TAD SQFLAG + SZA CLA /ARE WE SQUISHING? + JMP I (SQIOER /YES + TAD CTCTST + SPA CLA /ONLY IGNORE HARD ERRORS + TAD I (MPARAM + AND (40 + SZA CLA / "G" SWITCH +SLGRET, JMP I SLASHG /IGNORED! + TAD I SLASHG + TAD SLASHG + DCA SLASHG /SET UP NON-IGNORE ADDRESS + TAD CTCTST + JMP I SLASHG /RETURN WITH AC RESTORED + + + IFZERO OS78 < +DIR, DCA DTYPE /SAVE TYPE OF REQUEST + TAD I (7600 + SZA CLA /IS THERE AN OUTPUT FILE? + JMP I (DIRPRE /YES + DCA TTYDEV+1 + JMS I (200 + 12 /ASSIGN WITHOUT FETCH +TTYDEV, 5524 /COMPRESSED CODE FOR "TTY" + 0 + 0 + JMP I (PIP /V3 WHAT - NO TELETYPE! + TAD TTYDEV+1 + DCA I (7600 + JMP I (DIRPRE + > + + IFNZRO OS78 < +DIR, JMS I (PIPERR /TYPE OUT MESSAGE + 14 +DIRMSG, TEXT "USE DIRECT" + > + + PAGE + /PIP PROPER BEGINS HERE + /********************** + + /IMAGE MODE PROCESSOR FOR PIP + +IMAGE, JMS I (FIXLEN + JMS I (OUTOPN + JMS IMTRA +IMCLOS, TAD I (OUTINH + SZA CLA /WAS THERE AN OUTPUT FILE? + JMP I (PIPCLR /NO - DON'T CLOSE IT + JMS I (OUK /GET THE LENGTH OF THE OUTPUT FILE + DCA IMCCNT + TAD I IM7600 + JMS I (200 + 4 /CLOSE + 7601 /FILE NAME +IMCCNT, 0 + JMP I (AOUERR + JMP I (PIPCLR + +ENDFUJ, 0 /PART OF DIRECTORY PRINTING ROUTINE + JMS I (PRNUM + TAD (-6 + JMS I (PRWD /PRINT SIX WORDS + 0006 / F + 2205 /RE + 0500 /E + 0214 /BL + 1703 /OC + 1323 /KS + JMS I (PCRLF + JMS I (PCRLF /LEAVE A SPACE BETWEEN DIRECTORIES + ISZ INEOF /SIMULATE "END OF FILE" FOR INPUT ROUTINE + CLA CMA + DCA I (INCHCT /AS WELL AS "END OF BUFFER" + JMP I ENDFUJ + IMHNDL, /V3 +SQTRA, 0 + TAD SQTRA + DCA IMTRA /FAKE A CALL TO "IMTRA" + TAD RECCNT /SETTING UP THE ARGS TO DO THE SQUISHING FOR US + DCA I (INCTR + TAD IHNDLR + DCA IMHNDL + TAD INBLK + DCA IMREC + TAD OUTBLK + DCA I (OUCCNT + DCA INEOF + JMP IMRCLP + +IMTRA, 0 + JMS I (IOPEN /INITIALIZE INPUT ROUTINE +AGAIN, TAD INEOF /IOPEN ALWAYS SETS INEOF + SNA CLA /KEEP READING? + JMP IMRCLP /YES + /NO, OPEN NEXT FILE +IMFILP, JMS I (INNEWF /SET UP PARAMS FOR NEXT FILE + JMP I IMTRA /NO NEXT FILE + TAD I (INHNDL + DCA IMHNDL /GET DEVICE HANDLER ENTRY + TAD I (INREC + DCA IMREC /AND STARTING BLOCK NUMBER +IMRCLP, TAD I (INCTR + CLL + TAD (15 + SNL /IF LINK IS ON, THERE ARE LESS THAN 16 BLOCKS LEFT + DCA I (INCTR + SZL + ISZ INEOF + CLL CML CMA RTR + RTR + RTR + TAD (3201 /FORM A FULL OR PARTIAL READ CONTROL WORD + DCA IMCTLW + JMS I (CTCTST /CHECK FOR ^C + CIF 0 + JMS I IMHNDL +IMCTLW, 0 + OUBUF +IMREC, 0 + JMS I (SLASHG + IMERRX-. + TAD IMREC + TAD (15 + DCA IMREC /UPDATE BLOCK NUMBER + CLA CLL CML RAR + TAD IMCTLW +IMOUT, JMS I (OUTDMP /WRITE OUT WHAT WE JUST READ IN + JMP I (AOUERR /WRITE ERROR - BAD! + JMP AGAIN /V3 + IMERRX, ISZ INEOF /SIGNAL EOF OR WORSE + SPA CLA /WHICH ONE IS IT? + JMP IM7600 + TAD (6377 /MARCH DOWN THROUGH CORE +IMEFLP, DCA CHAR /LOOKING FOR THE FIRST NON-ZERO WORD + CDF 0 + TAD I CHAR + SZA CLA + JMP IMNZRO + CLA CMA CLL + TAD CHAR + SZL /IF WE GO THROUGH THE BUFFER WITHOUT A NON-ZERO WORD + JMP IMEFLP +IM7600, 7600 + JMS I (PIPERR /SOMETHING IS WRONG (HANDLER SHOULD HAVE INSERTED + 4 /A ^Z AT LEAST) +IMNZRO, CDF 10 + TAD CHAR + CLL CML RAR + AND IM7600 + TAD (200 /GET THE LENGTH OF THE USEFUL PART OF THE BUFFER + JMP IMOUT /AS AN OUTPUT CONTROL WORD AND GO OUTPUT IT + PAGE + /** PIP STARTS HERE (OR HERE+1 IF CHAINED TO) ** + +PIPSA, JMP PIPCD /NORMAL ENTRY/RE-ENTRY - CALL CD + JMP NOPCD /ENTRY FROM CHAIN COMMAND - ASSUME CD AREA SET UP + /PART OF ASCII PROCESSOR - CLEAN UP AT END OF LINE AND END OF FILE + +LFEED, TAD CHAR + DCA I XR /PUT THE LINE FEED IN THE LINE BUFFER +EOL, DCA I XR /MARK THE END OF USEFUL INFO + JMS I (CTCTST + TAD (ABUF-1 + DCA XR /RESET BUFFER POINTER +EOLLP, TAD I XR /GET A CHARACTER FROM THE LINE BUFFER +PIPSNA, SNA /ZERO MEANS NO MORE CHARS + JMP EOFTST + JMS I (OCHAR /OUTPUT THE CHARACTER + JMP I (AOUERR + JMP EOLLP +EOFTST, TAD AEOFFG + SNA CLA /END OF INPUT ENCOUNTERED? + JMP I (ASCIGO /NO - GET NEXT LINE +ACLOSE, JMS I (OCLOSE /YES - CLOSE THE OUTPUT FILE + JMP I (AOUERR /ERROR ON CLOSE +PIP, TAD I (MPARAM-1 /V3 + SMA CLA /ALTMODE TERMINATE LAST COMMAND STRING? + JMP PIPCD /NO + CDF CIF 0 /YES + JMP I (7605 /EXIT TO OS/8 WITHOUT SAVING CORE +PIPCD, JMS I (200 /OF COURSE THE MONITOR IS IN CORE! + 5 /COMMAND DECODE + 0 /NO ASSUMED EXTENSIONS ON INPUT +L20, /V3 +NOPCD, JMS I (ONCE /REPLACED BY '20' BY ONCE-ONLY CODE + JMS I (SRSTOR /CLEAR /S OR /Y;READ MONITOR + DCA SQFLAG /CLEAR /S INDICATOR + TAD PIPSNA + DCA I (INCTZF /RESET INPUT SWITCH TO DETECT "^Z"'S + TAD I (MPARAM+1 + AND (40 /"S" SWITCH + SZA CLA + JMP I (SQUISH /IT WAS ON - COMPRESS THE INDICATED DEVICES + TAD I (MPARAM+2 + RTL + SZL CLA /"Z" SWITCH IN THE LINK + JMS I (DZERO /ZERO DIRECTORY BEFORE PROCEEDING + TAD I (MPARAM + AND (400 /"D" SWITCH + SZA CLA + JMS I (DELETE /DELETE OUTPUT FILE + TAD I (MPARAM+2 /IS /Y ON? + SPA CLA + JMP I (SYSCOP /YEP..TRANSFER SYSTEM HEAD + TAD I (MPARAM + AND (301 /"E","F" AND "L" SWITCHES + SZA /ANY ONE OF THEM ON? + JMP I (DIR /YES - LIST A DIRECTORY + TAD I (MPARAM + RTL + AND (40 /"I" SWITCH ROTATED TWO LEFT + SZA CLA + JMP I (IMAGE /IMAGE MODE TRANSFER + TAD I (7617 /MUST PRESERVE THE LINK + SNA CLA /V3 IMAGE MODE ALLOWS NO INPUT FILE + JMP PIP /TERMINATE HERE IF NO INPUT SIDE + SZL CLA /"B" SWITCH IN LINK + JMP I (BINARY /BINARY MODE TRANSFER + + /DEFAULT MODE OF TRANSFER IS ASCII + +ASCII, TAD I (MPARAM+1 + AND L20 + DCA COPTSW + TAD COPTSW + JMS I (ASCI2 /TEST FOR OUTPUT DEVICE + JMS I (OUTOPN + JMS I (IOPEN /OPEN THE INPUT FILES + DCA AEOFFG /ZERO THE END-OF-FILE FLAG + JMS I (LEADER + JMP I (ASCIGO + + /ENTRY ON END OF INPUT +ASCEOF, SPA CLA /WAS IT END OF INPUT OR AN INPUT ERROR? +PER4, JMS I (PIPERR + 4 + ISZ AEOFFG /SET END-OF-INPUT FLAG + JMP EOL /PROCESS LAST LINE (IF ANY) +AEOFFG, 0 + /SUBROUTINE TO OUTPUT RUBOUTS AFTER FORM CONTROL CHARACTERS +RUBOUT, 0 /UNLESS OUTPUT IS TO A DIRECTORY DEVICE + DCA TEMP /STORE COUNT + JMS I (OTYPE /GET TYPE OF OUTPUT DEVICE + SPA CLA + JMP I RUBOUT /DIRECTORY DEVICE - DON'T BOTHER +RBTLP, TAD CHAR + TAD (-214 + SNA CLA /IS THE FORM CONTROL CHAR A FORM-FEED? + IAC /YES - OUTPUT BLANK TAPE INSTEAD + TAD (377 + DCA I XR /PUT IN BUFFER + ISZ TEMP + JMP RBTLP /LOOP FOR THE REQUISITE COUNT + JMP I RUBOUT +COPTSW, 0 + +DEND, SPA CLA + JMP PER4 + JMP ACLOSE + PAGE + *3200 + /ASCII PROCESSOR CONTINUED + +ASCIGO, TAD (ABUF-2 + DCA XR + DCA I XR /PROTECT AGAINST NULL LINE WITH "T" OPTION + DCA COLCT /ZERO COLUMN COUNTER FOR TAB CONVERSION +ACHLP, JMS I (ICHAR /GET A CHARACTER + JMP I (ASCEOF /END OF INPUT OR WORSE + AND (177 /MASK OUT PARITY BIT + SZA /IGNORE BLANK TAPE AND LEADER/TRAILER + TAD (-177 + SNA + JMP ACHLP /DITTO RUBOUTS + TAD (177-32 /V3C + SNA + JMP I (ASCPTCH /7-BIT ^Z CHECK + TAD (232 /FORCE COLUMN 8 ON + DCA CHAR + TAD CHAR + TAD (-216 + CLL + TAD ASCI5 + SNL /IS THE CHARACTER A FORM CONTROL CHARACTER? + JMP CINSRT /NO + TAD ASCJMP /YES - GO TO APPROPRIATE ROUTINE + DCA .+1 + HLT +ASCJMP, JMP I .+1 + TAB + LFEED + VTAB + FFEED + CARRET +CINSRT, 7600 /GRP 2 CLA + TAD CHAR +ADCAXR, DCA I XR /STORE THE CHARACTER IN THE LINE BUFFER + ISZ COLCT /ALWAYS BUMP THE COLUMN POINTER +TESTXR, TAD XR + TAD (-ABUF-226 + SPA CLA /HAS THE BUFFER OVERFLOWED? + JMP ACHLP /NO - GET NEXT CHARACTER + JMS I (PIPERR + 1 + TAB, TAD I (COPTSW + SNA CLA /DO WE WANT TO CONVERT? + JMP TABRBT /NO +TABLP, TAD (240 + DCA I XR /OUTPUT A SPACE + ISZ COLCT + TAD COLCT + AND (7 + SZA CLA /IS THE COLUMN COUNTER A MULTIPLE OF 8? + JMP TABLP /NOT YET + JMP TESTXR /YES - CHECK BUFFER OVERFLOW +TABRBT, TAD CHAR + DCA I XR + CLA CMA + JMS I (RUBOUT /TWO RUBOUTS FOLLOW A TAB + JMP TESTXR /CHECK FOR BUFFER OVERFLOW +VTAB, TAD I (COPTSW + SZA CLA /SHOULD WE CONVERT? + JMP VTLF /YES + TAD CHAR + DCA I XR + TAD (-4 + JMS I (RUBOUT /FOUR RUBOUTS AFTER A VERTICAL TAB + JMP I (EOL +FFLF, TAD (-4 /NINE LINE FEED SIMULATE A FORM FEED +VTLF, TAD (-5 /FIVE LINE FEEDS SIMULATE A VERTICAL TAB + DCA TEMP + TAD (212 + DCA I XR + ISZ TEMP + JMP .-3 + JMP I (EOL /FORM FEED AND VERTICAL TAB ARE LINE ENDERS + FFEED, TAD I (COPTSW + SZA CLA /SHOULD WE CONVERT? + JMP FFLF /YES + TAD CHAR + DCA I XR + TAD (-11 /NINE RUBOUTS AFTER A FORM FEED + JMS I (RUBOUT + JMP I (EOL +CARRET, TAD I (MPARAM + RTL + SMA CLA /"C" SWITCH MEANS DELETE TRAILING BLANKS FROM CARDS + JMP NOTOPT /IT WASN'T ON +TOPT, TAD XR + DCA TEMP + TAD I TEMP + TAD (-240 + SZA CLA /WAS THE LAST CHAR ON THE LINE A SPACE? + JMP NOTOPT /NO + CLA CMA + TAD XR /YES - BACK UP THE LINE POINTER + DCA XR + JMP TOPT +NOTOPT, TAD CHAR + DCA I XR /STORE THE CARRIAGE RETURN IN THE BUFFER + JMP TESTXR /CARRIAGE RETURN IS NOT A LINE TERMINATOR +COLCT, 0 + +OUTOPN, 0 + JMS I (OOPEN + SMA CLA + JMP I OUTOPN + JMS I (PIPERR +ASCI5, 5 + PAGE + /SUBROUTINES CALLED BY THE REST OF PIP + +K770, 770 /** DON'T MOVE THIS CONSTANT +DELETE, 0 + TAD P7600 + DCA DPFILE + CLA CLL CMA RTL + DCA CHAR /MAXIMUM OF THREE OUTPUT FILES +DELOOP, TAD (7201 + DCA DLHNDL + TAD I DPFILE + SNA /DOES THIS FILE EXIST? + JMP I DELETE /THAT'S ALL + JMS I C200 + 1 /ASSIGN HANDLER FOR THE DELETION +DLHNDL, 0 + HLT + TAD I DPFILE /RELOAD DEVICE NUMBER FOR DELETE + ISZ DPFILE /BUMP DPFILE TO POINT TO THE FILE NAME + JMS I C200 /DEVICE NUMBER IN AC +DP4, 4 /CLOSE - USED AS DELETE IN THIS CASE +DPFILE, 0 /POINTER TO FILE NAME + 0 /ZERO LENGTH FOR DELETE + JMS I (PIPERR /FILE WASN'T THERE TO BE DELETED + 3 + TAD DPFILE + TAD DP4 + DCA DPFILE + ISZ CHAR + JMP DELOOP /DELETE AS MANY FILES AS HE LISTED(UP TO 3) + JMP I DELETE + DZERO, 0 /SUBROUTINE TO ZERO THE DIRECTORY OF THE + /FIRST OUTPUT DEVICE + JMS I (OTYPE + CLL RTL + SZL /IS DEVICE READ-ONLY? + JMP OZERR /YES - ERROR + RTR + SMA /FILE-STRUCTURED DEVICES WILL HAVE 4000 BIT SET + JMP NONDIR /NON-DIRECTORY DEVICE + AND K770 /MASK OUT DEVICE TYPE + CLL RTR + RAR + TAD (DEVLEN /USE IT TO INDEX A TABLE OF DEVICE LENGTHS + DCA PIPERR + TAD (OUDEVH+1 + DCA OZHNDL + TAD I P7600 + JMS I C200 + 1 /ASSIGN DEVICE, FETCH HANDLER +OZHNDL, 0 + HLT + TAD I PIPERR + SNA /IS THE LENGTH ZERO? + JMS I (DVREDE /IF SO, GO "READ LENGTH" + DCA PIPERR /STORE LENGTH + TAD I (MPARAM+2 /IF /Y ON, DO SYSTEM ZERO + SPA CLA + JMP ZRO70 + TAD OZHNDL /BUT IF NOT, CHECK FOR SYSTEM ZERO + TAD (-7607 + SZA CLA + JMP ZRO70+1 /NOT SYSTEM FILES BEGIN AT 7 + JMS I (CONFRM /ASK IF HE'S SURE + SYSZRO /V3 +ZRO70, TAD (61 + TAD (7 + DCA I (DFORG + DCA I (SQFLAG /AND CLEAR OUT SQUISHES + TAD PIPERR + TAD I (DFORG + DCA I (DLENGT + JMS I (GETEQ + DCA I (DWASTE /DEFINE # OF WASTE WORDS + DCA I (MPARAM+3 /KILL = OPTION FOR FUTURE /I TRANSFERS + CIF 0 + JMS I OZHNDL + 5410 /V3 OUTPUT 6 BLOCKS FROM FIELD 1 + DIRECT + 1 /ALL DIRECTORIES ARE IN RECORD 1 +OZERR, JMS I (PIPERR /ERROR WHILE ZEROING DIRECTORY + 2 + DCA OLDDIR /ZERO DIRECTORY POINTER TO FORCE A NEW READ +NONDIR, CLA /NON DIRECTORY RETURN + JMP I DZERO + PIPERR, 0 +P7600, 7600 /V3 CLA + JMS I (SRSTOR /RESET 07600! + CDF 10 /JUST IN CASE + TAD I PIPERR /GET ARG + TAD (ERRTBL + DCA TEMP + TAD I TEMP + JMS I (ERPRNT + JMP I (PIP /RESTART PIP + +LEADER, 0 + JMS I (OTYPE +C200, AND K770 /GET THE TYPE OF THE OUTPUT DEVICE + TAD (-PTP /IS IT A PAPER TAPE PUNCH? + SZA CLA + JMP I LEADER /NO + TAD P7600 + DCA TEMP + JMS I (OCHAR /PUT OUT SOME LEADER + JMP I (AOUERR + ISZ TEMP + JMP .-3 + JMP I LEADER + PAGE + /TABLE OF DEVICE LENGTHS FOR /Z OPTION + +DEVLEN, 0;0;0;0;0;1520 /RK08 (1520= - DECIMAL 3248) + 6001;4001;2001;0001 /RF08 IN VARIOUS SIZES + /(CHEATS A BLOCK ON LARGEST TO KEEP IT NON-ZERO) + 7601;7401;7201;7001 /DF32 IN VARIOUS SIZES + /(CHEATS A BLOCK TO AVOID HARDWARE TROUBLE) + 6437;6437 /DECTAPE AND LINCTAPE + ZBLOCK 1 /20 MAGTAPE + 6437 /21 TD8E + 0 + 1520 / 1/2 OF AN RK8E IS 23 + 0 /24 + 7022 /25 RX01 FLOPPY DISK + 17 /26 RL DEVICE + 0 + 0 + 4027 /31 RL DEVICE + 0 /32 NEW RX MUST BE ZERO TO EXAMINE MEDIA + 7600 /33 VX EXT MEM - DF32 PSEUDO DEVICE + 7400;7200 /2ND AND 3RD PLATTERS + ZBLOCK 42 /ALL THE REST + + +FIXLEN, 0 /ROUTINE TO ESTIMATE OUTPUT FILE LENGTH + TAD I (7600 + AND (7760 + SZA CLA /DID THE USER PROVIDE AN ESTIMATE? + JMP I FIXLEN /YES - USE IT + DCA CHAR + TAD (7617 + DCA TEMP +FIXLP, TAD I TEMP /GET NEXT INPUT FILE + SNA + JMP FIXOVR /NO MORE INPUT FILES + AND (7760 + CIA CLL /GET LENGTH AS A POSITIVE NUMBER + /(LENGTH OF ZERO TURNS LINK ON) + TAD CHAR + DCA CHAR /UPDATE CUMULATIVE LENGTH + SZL CLA /DID CUMULATIVE LENGTH OVERFLOW 256 BLOCKS? + JMP I FIXLEN /YES - CAN'T ESTIMATE IT + ISZ TEMP + ISZ TEMP + JMP FIXLP +FIXOVR, TAD CHAR + TAD I (7600 + DCA I (7600 /STICK LENGTH IN OUTPUT FILE DESCRIPTOR + JMP I FIXLEN + NOYES, TEXT /NO/ + TEXT /YES/ + +CONFRM, 0 + TAD I (MPARAM+1 + RTL /'O' BIT TO SIGN + SPA CLA + JMP GOTCON /V3 'O' MEANS OK, ASSUME 'YES' + TAD I CONFRM /V3 + JMS I (ERPRNT + KSF + JMP .-1 + JMS I (CTCTST + KRB /LOOK AT HIS REPLY + AND (177 /IGNORE PARITY TTY + TAD (-"Y!7600 /V3 + SNA CLA /IS IT YES? + ISZ SQFLAG /SET SQFLAG TO 1 (NEEDED 1 LATER) + TAD SQFLAG /USE SQFLAG AS INDEX FOR MESSAGE + CLL RAL + TAD (NOYES + JMS I (ERPRNT + TAD SQFLAG + SNA CLA + JMP I (PIP +CNFMXT, ISZ CONFRM + JMP I CONFRM + +GOTCON, ISZ SQFLAG /SET SQFLAG + JMP CNFMXT /AND TAKE SKIP EXIT + PAGE + /DIRECTORY PRINTER FOR PIP + MDATE=7666 + +DIRPRE, JMS I (OUTOPN /OPEN THE OUTPUT FILE + TAD (ABUF + DCA CHAR /ABUF WILL BE A TEMPORARY ARRAY OF STARTING FILES + TAD (7617 + DCA TEMP + TAD I (7617 + SNA + JMS I (DSKNUM + DCA I (7617 /DEFAULT DIRECTORY IS DSK: +DFUJLP, TAD I TEMP + SNA /ARE WE THROUGH WITH THE INPUT DEVICES? + JMP GETDIR /YES + AND (17 + DCA I TEMP /ONLY THE DEVICE NUMBER IS IMPORTANT + TAD I TEMP + TAD (DCB-1 + DCA PRWD + CLA CLL CML RTL + TAD TEMP + DCA INFPTR /THIS SERVES NO FUNCTION EXCEPT IMPROVING ERROR MESSAGES + TAD I PRWD + SMA CLA /IS THE DEVICE A DIRECTORY DEVICE? + JMS I (PIPERR /NO + 6 + ISZ TEMP + TAD I TEMP + DCA I CHAR /SAVE THE STARTING BLOCK NUMBER + CLA IAC + DCA I TEMP /READ FROM THE DIRECTORY + ISZ TEMP + ISZ CHAR + JMP DFUJLP +GETDIR, TAD (ABUF + DCA CHAR + JMS PCRLF + TAD I (MDATE + JMS I (PDATE + JMS PCRLF + JMS I (IOPEN /RESET POINTERS - WERE GONNA FAKE OUT THOSE "GENERAL" + /ROUTINES + JMP I (NXTDIR + PRWD, 0 /ROUTINE TO PRINT SIXBIT TEXT + SNA /IS COUNT ZERO? + CMA /MAKE IT ONE + DCA PRCT /STORE COUNT +PRWDLP, TAD I PRWD +PR212, RTR + RTR + RTR + JMS PR6BIT + TAD I PRWD + JMS PR6BIT + ISZ PRWD + ISZ PRCT + JMP PRWDLP + JMP I PRWD +PRCT, 0 +PR6BIT, 0 + AND (77 + SZA + TAD (240 /V3 + AND (77 /V3 + TAD (240 /V3 + JMS I (OCHAR + JMP I (AOUERR + JMP I PR6BIT + PRNUM, 0 + DCA PRWD + DCA TEMP + TAD (PWRTEN + DCA PCRLF +PRNMLP, DCA PR6BIT + TAD I PCRLF + SNA + JMP PRLAST /V3 + CLL + TAD PRWD + SNL + JMP .+4 + DCA PRWD + ISZ PR6BIT + JMP PRNMLP+1 + CLA + TAD PR6BIT + TAD TEMP + SNA +PBLJMP, JMP PRBLNK /INCREMENTED BY PDATE TO KILL LEADING BLANKS + TAD (260 + JMS PR6BIT + CLA CLL CML RAR + DCA TEMP + ISZ PCRLF + JMP PRNMLP +PRBLNK, JMS PR6BIT + JMP .-3 +PRLAST, TAD PRWD /V3 + TAD (260 /V3 + JMS PR6BIT /V3 + JMP I PRNUM /V3 + PCRLF, 0 + TAD (215 + JMS I (OCHAR + JMP I (AOUERR + TAD PR212 + JMS I (OCHAR + JMP I (AOUERR + JMP I PCRLF + +PWRTEN, -1750;-144;-12;0 /V3 + PAGE + /MAIN DIRECTORY PRINTING LOOP + +NXTDIR, JMS I (ICHAR /FAKE, FAKE + JMP I (DEND + CLA /WE DON'T WANT THE CHARACTER + DCA ECOUNT + TAD (INBUF-1 /WE WANT THE BUFFER! +NEWSEG, DCA XR + CDF 0 + TAD I XR + DCA DCOUNT /NUMBER OF ENTRIES + TAD DCOUNT + CLL + TAD (100 + SNL CLA + JMS I (PIPERR + 11 + TAD I XR + DCA BLOKNO /FIRST BLOCK OF FILE STORAGE + TAD I XR + DCA DLINK /LINK TO NEXT SEGMENT + ISZ XR /BUMP XR PAST FLAG WORD + TAD I XR + DCA WASTE +NAMELP, CDF 0 + TAD I XR + SNA /WHAT TYPE OF ENTRY IS IT? + JMP DEMPTY /A FREE FILE + DCA NAME1 /A PERMENANT OR TENTATIVE FILE + TAD I XR + DCA NAME2 + TAD I XR + DCA NAME3 + TAD I XR + DCA NAME4 + TAD I XR + DCA DDATE + TAD WASTE /COMPENSATE FOR THE DATE INCREMENT + CMA /AND THE WASTE WORDS + TAD XR + DCA XR + TAD I XR + SNA /IS IT A TENTATIVE FILE? + JMP ADDLEN+1 /YES - TENTATIVE FILES ARE ALWAYS IGNORED + CIA + DCA FLENGT /NO - STORE THE LENGTH + CDF 10 + TAD I CHAR /GET THE STARTING FILE FOR THIS LISTING + CIA CLL + TAD BLOKNO + SNL CLA /ARE WE THERE YET? + JMP ADDLEN /NO - KEEP GOING + CLA CLL CMA RTL + JMS I (PRWD /PRINT THREE WORDS +NAME1, 0 +NAME2, 0 +NAME3, 0 + TAD NAME4 + SNA CLA /IS THERE AN EXTENSION? + TAD (-16 /NO - PRINT A BLANK + TAD (56 /YES - PRINT A PERIOD + JMS I (PR6BIT + JMS I (PRWD +NAME4, 0 /ZERO PRINTS AS TWO MORE BLANKS +PRLNGT, TAD DTYPE + AND (100 + SZA CLA /WAS THE LISTING SWITCH /F? + JMP PRTCRL /YES - DON'T PRINT LENGTH + TAD FLENGT + JMS I (PRNUM + TAD WASTE + SZA CLA + TAD DDATE + JMS I (PDATE /PRINT THE CREATION DATE OF THE FILE +PRTCRL, JMS I (PCRLF +ADDLEN, TAD FLENGT + TAD BLOKNO + DCA BLOKNO /UPDATE BLOCK NUMBER + ISZ DCOUNT + JMP NAMELP /LOOP UNTIL ALL FILES ARE PROCESSED + TAD DLINK + SNA CLA /MULTI-SEGMENT DIRECTORY? + JMP ENDDIR /NO - FINISH UP + TAD XR + AND (7400 + TAD (377 /BUMP XR TO NEXT BLOCK + JMP NEWSEG /PROCESS NEXT LINK + DEMPTY, TAD I XR + CIA + DCA FLENGT /STORE LENGTH OF FREE ENTRY + CDF 10 + TAD FLENGT + TAD ECOUNT + DCA ECOUNT /BUMP COUNT OF FREE BLOCKS + TAD DTYPE + AND (200 + SNA CLA /IS THE /E SWITCH ON? + JMP ADDLEN /NO - DON'T LIST FREE FILES + TAD (-4 + JMS I (PRWD + TEXT // + JMS I (PR6BIT + TAD FLENGT + JMS I (PRNUM + JMP PRTCRL +ENDDIR, ISZ CHAR /BUMP TEMP ARRAY TO NEXT ENTRY + TAD ECOUNT + JMS I (ENDFUJ + JMP NXTDIR + PAGE + /BINARY MODE PROCESSOR FOR PIP + +BIN360, 360 +BINARY, JMS I (FIXLEN + JMS I (OUTOPN + JMS I (IOPEN + JMS I (LEADER /PUT OUT BLANK TAPE IF HS PUNCH OUTPUT + JMS LTCODE +NEWTAP, JMS I (ICHAR + JMP BEOF /END OF FILE ON INPUT + SNA + JMP NEWTAP /BLANK TAPE - KEEP GOING + TAD BN7600 + SZA CLA + JMP NEWTAP + JMS I (ICHAR + JMP BEOF + TAD BN7600 + SNA + JMP .-4 + TAD BIN200 + DCA CHAR + TAD CHAR +BIN200, AND BIN360 + TAD (-240 /CHECK TYPE OF TAPE + SNA /IS IT RELOCATABLE? + JMP RELBIN /YES + TAD (-40 /IF A FIELD SETTING, IT'S ABSOLUTE + AND (7700 + SNA + JMP ABSLUT + TAD BIN200 /CHECK FOR ORIGIN ALSO + SZA CLA + JMP NEWTAP /NOTHING..NEXT FRAME +ABSLUT, CLA CMA + JMS LTCODE +ABSBIN, JMS RCOPY1 /COPY THIS FRAME AND READ NEXT + TAD BN7600 +BNM140, SZA CLA /IS IT TRAILER? + JMP ABSBIN /NO - KEEP GOING +BEOT, CLA CMA /END OF TAPE + JMS LTCODE /PUT OUT SHORT LEADER/TRAILER + JMP NEWTAP /GET NEXT TAPE + LTCODE, 0 /SUBROUTINE TO PUNCH 200 CODE + SMA /SHORT LEADER/TRAILER? + JMS I (OTYPE + SPA CLA /DIRECTORY DEVICE? + TAD (70 /YES + TAD (-100 + DCA TEMP +LTLOOP, TAD BIN200 + JMS I (OCHAR /OUTPUT 64 OR 8 FRAMES OF L/T CODE + JMP I (AOUERR + ISZ TEMP + JMP LTLOOP + JMP I LTCODE + +RELBIN, TAD (SKP + DCA I (INCTZF /DISABLE CONTROL-Z CHECKING ON INPUT + CLA CMA + JMS LTCODE /PUT OUT SHORT LEADER/TRAILER +RELLP, TAD CHAR + RTR + RTR + AND (17 + TAD (RELTBL + DCA TEMP + TAD I TEMP /GET DATA WORD FOR THIS FRAME + SMA SZA /POSITIVE MEANS SPECIAL OR ERROR + JMP RELERR +RELSNA, SNA + JMP RELEND /ZERO MEANS CHECKSUM FRAME + DCA TEMP /NEGATIVE MEANS COUNT OF NUMBER OF SLAVE FRAMES + JMS RCOPY1 +BN7600, 7600 + ISZ TEMP + JMP .-3 /COPY THIS FRAME AND ALL SLAVE FRAMES + JMP RELLP /GET NEXT CONTROL FRAME +RELEND, JMS RCOPY1 /COPY THE FIRST FRAME OF THE CHECKSUM + JMS I (OCHAR + JMP I (AOUERR /OUTPUT THE SECOND FRAME + JMP BEOT /END TAPE - START NEXT ONE +BEOF, JMS LTCODE + JMS I (OCLOSE + JMP I (AOUERR + JMP I (PIP + RCOPY1, 0 /ROUTINE TO ADVANCE "CHAR" TO NEXT INPUT CHARACTER + TAD CHAR + JMS I (OCHAR + JMP I (AOUERR + JMS I (ICHAR + JMP INEFER + DCA CHAR + TAD CHAR + JMP I RCOPY1 +INEFER, SMA CLA /DETECT FATALITIES + JMS I (PIPERR + 7 + JMS I (PIPERR /A REAL BAD READ + 4 + +RELERR, CLL RAR + SZA CLA /CODE OF 1 MEANS SPECIAL + JMS I (PIPERR /ILLEGAL RELOCATABLE INPUT + 10 + JMS RCOPY1 + CLL CML CMA RTL /MULTIPLY NAME COUNT BY -6 (APPROXIMATELY) + TAD CHAR + CLL CML RAL /(ACTUALLY THIS PRODUCES -6X-1 WHICH IS WHAT WE WANT) + JMP RELSNA + PAGE + ERPRNT, 0 /ERROR MESSAGE PRINTOUT ROUTINE + DCA TEMP +ERLP, TAD I TEMP + RTR + RTR + RTR + JMS ERPCH /PRINT HIGH-ORDER CHARACTER + TAD I TEMP + JMS ERPCH /PRINT LOW-ORDER CHARACTER + ISZ TEMP + JMP ERLP + +ERPCH, 0 + AND (77 + SNA + JMP ERCRLF /0 CHARACTER TERMINATES + JMS CHPRNT + JMP I ERPCH +FILENR, TAD ("# + JMS I (TTYOUT + TAD INFPTR /GET PTR TO CURRENT INPUT FILE + TAD (321 /MAGIC NUMBER + CLL RAR + JMP FILENR-2 + +CHPRNT, 0 + TAD (-37 /IS IT A _? + SNA + JMP FILENR /YES..PRINT FILE NUMBER + IAC + SNA /MAYBE ^? + JMP I (SQFILE /YEP..PRINT FILE NAME + SPA + TAD (100 + TAD (236 + JMS I (TTYOUT + JMP I CHPRNT + +ERCRLF, TAD (215 + JMS I (TTYOUT + TAD (212 + JMS I (TTYOUT + JMP I ERPRNT + PDATE, 0 /PRINTS THE DATE + SNA + JMP I PDATE /NO DATE TO PRINT + DCA ERPRNT + ISZ I (PBLJMP + JMS I (PR6BIT + TAD ERPRNT + CLL RTL + RTL + RAL + AND (17 + JMS I (PRNUM + TAD (57 + JMS I (PR6BIT + TAD ERPRNT + RTR + RAR + AND (37 + JMS I (PRNUM + TAD (57 + JMS I (PR6BIT + TAD ERPRNT + AND (7 + TAD (106 + JMS I (PRNUM + CLA CMA + TAD I (PBLJMP + DCA I (PBLJMP /RESET PRNUM TO PRINT LEADING SPACES + JMP I PDATE + +DSKNUM, 0 + DCA DSKNAM+1 + JMS I (200 + 12 +DSKNAM, 5723 + 0 + 0 + HLT + TAD DSKNAM+1 + JMP I DSKNUM + RELTBL, -2;-2;2;-10;-2;-2;-2;2;0;2;-2;2;2;2;2;1 + +ERRTBL, ERR0 + ERR1 + ERR2 + ERR3 + ERR4 + ERR5 + ERR6 + ERR7 + ERR8 + ERR9 + ERR10 + ERR11 + IFNZRO OS78 + + PAGE + /ERROR MESSAGE TEXT GOES HERE + + +ERR0, TEXT /NO ROOM FOR OUTPUT FILE/ +ERR1, TEXT /LINE TOO LONG IN FILE_/ +ERR3, TEXT /ERROR DELETING FILE/ +ERR4, TEXT /INPUT ERROR, FILE_/ +ERR5, TEXT /CAN'T OPEN OUTPUT FILE/ +ERR6, TEXT /DEVICE_ NOT A DIRECTORY DEVICE/ +ERR7, TEXT /PREMATURE END OF FILE, FILE_/ +ERR8, TEXT /ILLEGAL BINARY INPUT, FILE_/ +ERR9, TEXT /BAD DIRECTORY ON DEVICE_/ +ERR10, TEXT /DIRECTORY ERROR/ + + +TTYOUT, 0 + TLS + TSF + JMP .-1 + CLA + JMP I TTYOUT + PAGE + /SQUISH PROCESSOR + +SQUISH, JMS I (CONFRM + SURE /V3 +SQUISX, DCA I (OUELEN /INITIALIZE PARAMS TO FAKE OUT "IMTRA" + DCA I (OUBLK + DCA I (7621 /ZERO SECOND FILE FOR "INNEWF" + DCA I (CTCFLG + JMS I (IOPEN + JMS I (INNEWF + JMP I (PIP /NO INPUT + TAD (OUDEVH+1 + DCA SOHND + TAD I SQ7600 + SNA + JMP I (PIP /NO OUTPUTEE, NO SQUISHEE + JMS I (200 + 1 +SOHND, 0 + HLT + JMS INTEST + JMS I (OTYPE + CLL RTR + RAR + AND (77 + TAD (DEVLEN + DCA TEMP + TAD SOHND /SET UP OZHNDL + DCA I (OZHNDL /IN CASE OF JMP TO DVREDE + TAD I TEMP /GET ENTRY FROM DEVICE LENGTH TABLE + SNA /IS THE DEVICE LENGTH ZERO ? + JMS I (DVREDE /IF SO, READ THE LENGTH + DCA OUDLEN /SAVE OUTPUT DEVICE LENGTH + JMS I (GETEQ + DCA OUWAST + TAD SOHND + DCA OHNDLR + TAD OHNDLR + DCA I (OUHNDL + TAD I (INHNDL + DCA IHNDLR + JMS SETCTC + JMS I (CTCFLG + CIF 0 + JMS I IHNDLR + 1400 + 0 + 1 + JMP I (SQIDER+1 + CIF 0 + JMS I (7607 + 5400 + 0 + MTEMP /MOVE THE INPUT DIRECTORY TO SYS: + JMP I (SQIDER+1 + CLA IAC + DCA I (SQBUF2+2 + DCA I (CTCFLG + TAD SOHND /SETUP DIRECTORY START + JMS I (SQDTST + JMS I (SETSAM /IF IHNDLR=OHNDLR, SAME=1 + CLA CMA + DCA I (SQBUF2 + DCA I (OUTSEG + JMP I (NEWOUT + +INTEST, 0 /TEST IF INPUT IS DIRECTORY + TAD I (7617 + AND (17 + TAD (DCB-1 + DCA TEMP + TAD I TEMP + SMA CLA + JMS I (PIPERR + 6 + JMP I INTEST + +SETCTC, 0 /MODIFY 07600 TO RETURN TO SQCTLC + TAD CDIF10 + CDF 0 + DCA I SQ7600 + TAD (5602 /JMP I .+1 + DCA I (7601 + TAD (SQCTLC + DCA I (7602 +CDIF10, CIF CDF 10 + JMP I SETCTC + OUK, 0 /V3 ON IMAGE MODE TRANSFER + /CLOSE OUT FILE WITH = OPTION + /IF NOT TOO SMALL + TAD I (OUCCNT + CLL CIA + TAD I (MPARAM+3 + SNL /IS = OPTION LARGER? +SQ7600, 7600 /RETURN OUCCNT IF IT'S LARGER + TAD I (OUCCNT /RETURN LOW ORDER = OPTION IF IT'S LARGER + JMP I OUK + PAGE + NEWIN, TAD (MTEMP-1 + DCA INSEG + JMS I (CTCFLG + CIF 0 + JMS I (7607 + 0210 +S7200, SQBUF2 +INSEG, 0 + JMP I (SQIDER + DCA I (CTCFLG + TAD I (SQBUF2+1 + DCA INBLK + TAD (SQBUF2+4 + DCA INXR +SGETIN, TAD I INXR + SNA + JMP SEMPTY + DCA I OUTXR + TAD OUTXR + DCA OUSAVE + JMS I (CYWAST /COPY WASTE WORDS + TAD I INXR + DCA RECCNT + TAD RECCNT + SNA + JMP SNULL + CMA CLL /V3 + TAD OUTBLK + TAD OUDLEN + SZL CLA + JMP SNULER + TAD RECCNT + DCA I OUTXR + CLA CMA + TAD I (SQBUF1 + DCA I (SQBUF1 + TAD INBLK + CIA + TAD OUTBLK + SNA CLA + TAD SAME + SNA CLA +MOVFIL, JMS I (SQTRA /MOVE THE FILE DOWN + TAD RECCNT + CIA + TAD OUTBLK + DCA OUTBLK + TAD RECCNT +DMTX, CIA + TAD INBLK + DCA INBLK + TAD OUTXR + CIA + TAD OUWAST + TAD OUWAST + TAD (SQBUF1+365 + SMA CLA /DO WE HAVE ROOM FOR TWO MORE ENTRIES? + JMP NEXTIN + + /DIRECTORY SEGMENT OVERFLOW ON OUTPUT... + + ISZ I (OUTSEG + TAD I (OUTSEG + IAC + DCA I (SQBUF1+2 /STORE LINK TO NEXT SEGMENT + TAD I (SQBUF1+2 + TAD (-7 + SMA CLA + JMP I (SQIDER-1 /TOO MANY SEGMENTS + JMS I (OUTDIR /OUTPUT THIS SEGMENT +NEWOUT, TAD (SQBUF1-1 + DCA OUTXR /INITIALIZE XR FOR NEXT OUTPUT SEGMENT + DCA I (OUTINH /ZAP ANY OLD OUTPUT INHIBIT FLAG + DCA I OUTXR + TAD OUTBLK + DCA I OUTXR + DCA I OUTXR + DCA I OUTXR + TAD OUWAST + DCA I OUTXR +NEXTIN, ISZ I S7200 + JMP SGETIN + TAD I (SQBUF2+2 + SNA /ANY MORE INPUT SEGMENTS? + JMP I (SQOVER + JMP NEWIN +SNULER, TAD (NOROOM + JMS I (ERPRNT +SNULL, CLA CMA + TAD OUSAVE + DCA OUTXR + JMP DMTX-1 +SEMPTY, TAD I INXR + JMP DMTX +OUSAVE, 0 + SURE, TEXT /ARE YOU SURE?/ + +SETSAM, 0 + TAD IHNDLR + CIA + TAD OHNDLR + SNA CLA + IAC + DCA SAME + JMP I SETSAM + PAGE + SQOVER, DCA I OUTXR + TAD OUDLEN + TAD OUTBLK + SNA + JMP CKZERO + DCA I OUTXR + CLA CMA + TAD I (SQBUF1 + DCA I (SQBUF1 +CKZERO, TAD I (SQBUF1 + SZA CLA + JMP ZEROK + CLA CLL CML RAR + JMS OUTDIR /READ IN LAST DIRECTORY + DCA I (SQBUF1+2 /ZERO OUT LINK WORD + SKP +ZEROK, ISZ OUTSEG + JMS OUTDIR +ZEROKS, JMS SRSTOR + JMP I (PIP + + DCA I (SQBUF1+2 +SQIDER, JMS OUTDIR + JMS SRSTOR + JMS I (PIPERR + 12 +OUTDIR, 0 + TAD (4210 + DCA .+4 + JMS CTCFLG + CIF 0 + JMS I OHNDLR + 0 + SQBUF1 +OUTSEG, 0 + JMP SQIDER+1 + DCA CTCFLG + JMP I OUTDIR + +SQIOER, TAD (IOMSG + JMS I (ERPRNT + JMP I (SLGRET + SQCTLC, KCC /JUMPED TO BY CODE AT 07600 + JMS I (TSTSAM /TEST IF OPERATION IS TO ITSELF + TAD (CTCMSG + JMS I (ERPRNT + TAD CTCFLG + SZA CLA + JMP I CTCFLG + TAD I (MPARAM+1 /IS IT /S? + AND (40 + SNA CLA + JMP I (SYSCPY /NO../Y + JMP I (MOVFIL + +SRSTOR, 0 + JMS I (7700 /MAKE SURE MONITOR IS IN CORE + 10 + DCA .-2 /AND WIPE THE CALL AWAY + TAD (4207 + CDF 0 + DCA I (7600 + TAD (5000 + DCA I (7601 + DCA I (7602 + CDF 10 + JMP I SRSTOR + +CTCFLG, 0 + JMP I CTCFLG + CTCMSG, TEXT /SORRY - NO INTERRUPTIONS/ +IOMSG, TEXT /I-O ERROR IN ^ - CONTINUING/ +NOROOM, TEXT /NO ROOM IN ^ - CONTINUING/ + PAGE + K7760, 7760 +SYSCOP, TAD K7622 /SET INFPTR IN CASE OF /Y ERROR + DCA INFPTR /WILL FILE #1 + JMS I (SETCTC /KLUDGE UP 07600 +SYSCPY, TAD (INDEVH+1 + DCA YIHAND /SET TO ASSIGN INPUT HANDLER + TAD (OUDEVH+1 + DCA YOHAND + TAD (2000 + DCA K2000 /THIS MAY GET CLOBBERED READING IN DIRECT. + IAC /V12B + DCA OFSET + TAD I K7617 + SNA CLA /IS THERE AN INPUT DEVICE? + ISZ I K7617 /MAKE INPUT =SYS + JMS I (INTEST /SEE IF OPERATIONS ARE TO SAME DEVICE + TAD I K7617 + JMS I K200 /ASSIGN HANDLER + 1 +YIHAND, 0 +K7622, 7622 /THINLY DISGUISED HALT + TAD I K7617 +K200, AND K7760 /CHECK INPUT FILE LENGTH + SNA /IF BLANK,INPUT SYSTEM HEAD + JMP YSOUT + TAD (-6340 /CHECK FOR PROPER LENGTH + SZA CLA + JMP PER13 /ERROR..NOT SYSTEM HEAD + TAD I (7601 /IS THERE OUTPUT DEVICE? + SZA CLA /IF YES..WE CAN DO IMAGE XFER + JMP I (IMGTST + TAD I (7620 +YOUSYS, DCA YINREC /PICK UP STARTING RECORD + CIF 0 + JMS I YIHAND /READ IN FIRST INPUT RECORDS +K2000, 2000 /(0-15 IF SYSTEM HEAD,0-7 IF FILE) + OUBUF +YINREC, 0 + JMP I (PER4 /INPUT ERROR + TAD I (7620 /IF INPUT FROM A FILE, OPEN + SNA CLA /TEST LOC 605 + TAD (3000 /IF FROM HEAD, TEST 3605 + TAD (605 + DCA I (HDTST + JMS I (TSTHED /TEST FOR VALID SYSTEM HEAD + TAD YINREC + TAD OFSET /BUMP TO NEXT RECORD + DCA NXTRD + TAD I (7600 /IF NO OUTPUT, FORGET IT + SNA + JMP PIPCLR /RESET AND GO TO PIP + JMS I K200 + 1 +YOHAND, 0 + HLT /V3 + JMS I (FAKE + JMS I (SETSAM + JMS I (TSTIO /TEST OUTPUT. SEE IF DIRECT. DEV. + CIF 0 + JMS I YOHAND /READ OUTPUT DIRECTORY INTO PLACE + 1400 + 400 + 1 + JMP I (PER4 + CDF 0 + TAD I (401 /NOW TEST FOR VALID OUTPUT DEVICE + CDF 10 + TAD (-10 /IF LESS THAN 10, DON'T XFER + SPA CLA + JMS I (PIPERR + 11 + TAD (-10 /V12B + DCA YINREC /XFER COUNTER + + JMP YDUMP +YLOOP, CIF 0 + JMS I YIHAND /READ NEXT +K3400, 1600 /V12B 7 BLOCKS + OUBUF +NXTRD, 0 + JMP I (PER4 + TAD NXTRD + TAD (7 /V12B + DCA NXTRD +YDUMP, TAD (5600 /V12B + JMS I (OUTDMP /WRITE BUFFER + JMP I (AOUERR + ISZ YINREC /DONE YET? + JMP YLOOP /NOT YET..LOOP +PIPCLR, JMS I (SRSTOR /CLEAR OUT 07600 + JMP I (PIP + YSOUT, TAD I (7601 /HERE IF INPUT FROM SYSTEM HEAD + SZA CLA /IS THERE AN OUTPUT FILE? + JMP I (YTSOUT /YES, SET UP FOR IMAGE MODE +YNOOUT, + TAD (7 /AND RESTART READ AT RECORD 16 + DCA OFSET + JMP YOUSYS +OFSET, 0 + +PER13, JMS I (PIPERR + 13 +K7617, 7617 /V3 + PAGE + DIRECT, -1 +DFORG, 0 /FILE STORAGE + 0 + 0 +DWASTE, 0 /#WASTE WORDS + 0 +DLENGT, 0 + +MOVE, 0 +IMGTST, DCA SAME /V12B + TAD I (YIHAND /V12B + DCA IHNDLR /V12B + JMP I (IMAGE /V12B + TAD (6777 +MOVE1, DCA TSTSAM + CDF 0 + TAD I MWAST + DCA I TSTSAM + CMA + TAD MWAST + DCA MWAST + CMA + TAD TSTSAM + ISZ TEMP + JMP MOVE1 + CLA + CDF 10 + JMP I MOVE + +ERR11, TEXT /BAD SYSTEM HEAD/ + +YTSOUT, TAD I (7617 /O.K. SETUP CD AREA FOR IMAGE XFER + TAD (7760 /FROM SYSTEM AREA OF INPUT DEVICE + DCA I (7617 + TAD I (7617 + AND (17 + TAD (6360 + DCA I (7621 + TAD K7 + DCA I (7622 + DCA SAME /ALLOW ^C IF TO OUTPUT FILE + TAD I (YIHAND /TEST FOT VALID SYSTEM + DCA IHNDLR + CIF 0 + JMS I IHNDLR + 0200 + 3400 +K7, 7 + JMP I (PER4 + JMS I (TSTHED + JMP I (IMAGE + TSTSAM, 0 + TAD SAME /IF /Y IS TO SAME DEVICE AS INPUT (SYS) + SNA CLA /^C GIVES MESSAGE AND RETRIES OPERATION + JMP I (ZEROKS + JMP I TSTSAM + +ERR2, TEXT /OUTPUT ERROR/ + +SQFILE, DCA MWAST + TAD I (OUSAVE + DCA TSTSAM /IF ERROR DURING /S + DCA DWASTE + CLA CLL CMA RTL + DCA MOVE /-3 FOR FILE NAME +SQFIL3, TAD I TSTSAM /FIRST 2 CHARS. IN NAME + CLL RTR + RTR + RTR +SQFIL5, AND (77 + SZA /IF ZERO, DON'T BOTHER + JMS I (CHPRNT + ISZ DWASTE /RIGHT HALF OR NEW WORD? + JMP SQFIL4 /RIGHT HALF + ISZ TSTSAM + ISZ MOVE /EXHAUSTED ALL? + JMP SQFIL3 /NOPE + TAD MWAST /DONE WITH IT YET? + SZA CLA + JMP I (FILENR-1 /YES + TAD I TSTSAM /IS THERE AN EXTENSION? + SNA CLA + JMP I (FILENR-1 /NO..CONTINUE ORIGINAL MSG + TAD (256 + JMS I (TTYOUT + ISZ MWAST /SIGNAL END + CLA CMA + JMP SQFIL3-1 +SQFIL4, CLA CMA + DCA DWASTE + TAD I TSTSAM /GET RIGHT HALF + JMP SQFIL5 + MWAST, 0 + DCA TEMP + TAD I INXR + DCA I OUTXR /ROUTINE TO COPY WASTE WORDS + ISZ TEMP + JMP .-3 + JMP I MWAST + PAGE + FAKE, 0 + TAD I (YIHAND + DCA IHNDLR + TAD I (YOHAND + DCA OHNDLR + DCA I (OUCCNT + DCA I (OUBLK + DCA I (OUELEN + TAD I (YOHAND + DCA I (OUHNDL + JMP I FAKE + +CYWAST, 0 /ROUTINE TO COPY WASTE WORDS + CLA CLL CMA RTL /THREE MORE FOR FILE NAME + JMS I (MWAST /COPY THEM + TAD I (SQBUF2+4 /NOW ADJUST I/O WASTE WORDS + CIA + TAD OUWAST /DIFF. BETWEEN OUT AND IN WORDS + SMA /IF <0, MORE OUT THAN IN + JMP CGEWST /POS. MORE IN THAN OUT (OR SAME) + DCA TEMP1 + TAD I (SQBUF2+4 + SZA + JMS I (MWAST /COPY ALL INPUT WORDS + DCA I OUTXR /AND 0 ALL EXTRA OUTPUT WORDS + ISZ TEMP1 + JMP .-2 + JMP I CYWAST +CGEWST, DCA TEMP1 + TAD OUWAST /XFER ONLY ENOUGH OUTPUT WDS. + SZA + JMS I (MWAST + TAD INXR + TAD TEMP1 /POINT INPUT TO NEXT FILE + DCA INXR + JMP I CYWAST + +TSTHED, 0 /TESTS FOR KEYBOARD MONITOR + CDF 0 + TAD I HDTST /V12C + CDF 10 + TAD (-7200 + SZA CLA + JMP I (PER13 /IF NOT CLA, NOT VALID + JMP I TSTHED +HDTST, 3605 + TSTIO, 0 /SEE IF OUTPUT IS DIRECTORY DEVICE + JMS I (OTYPE /GET DCB WORD FOR OUTPUT + SMA CLA /IF NOT NEG., NOT DIRECT DEVICE + JMS I (PIPERR + 5 + TAD OHNDLR /IF OUTPUT=SYS, SET NO INTERRUPT + TAD (171 + SNA CLA + ISZ SAME + JMP I TSTIO + +ASCI2, 0 /SEE IF VALID ASCII OUTPUT + DCA TSTIO + TAD I (7600 + SNA CLA + JMP I (PIP /NO..BACK TO PIP + TAD TSTIO /SEE IF /C IS ON + SNA CLA + JMS I (FIXLEN /NO..TRY TO ESTIMATE OUTPUT + JMP I ASCI2 + +SQDTST, 0 /ROUTINE TO CHECK /S DIRECTORIES + DCA NOHND /PRESERVE POSSIBLE SYS ON OUTPUT + TAD (7 /DEFAULT TO BLOCK 7 + DCA OUTBLK /INITIAL GUESS + CDF 10 /NOW TRY TO READ DIRECTORY OF OUTPUT + JMS I (OTYPE /IF NON-FILE, DON'T READ IT + SMA CLA + JMP P1A + CIF 0 /COULD BE NON-FILE, HOWEVER. + JMS I NOHND + 0210 + 1400 +P1, 1 + JMP I (SQIDER+1 /ERROR IN READ +P1A, DCA OLDDIR /WIPES ANY DIRECT. SEGMENT + TAD I (1401 + TAD (-70 /IS OUTPUT A SYS DEVICE? + SNA CLA + JMP SYSDIR /YES. + TAD NOHND /IS OUTPUT THE SYSTEM DEVICE? + TAD (171 + SZA CLA + JMP .+3 +SYSDIR, TAD (70 + DCA OUTBLK + JMP I SQDTST + +NOHND=FAKE + +SYSZRO, TEXT /ZERO SYS?/ + AOUERR, SMA CLA /WAS IT A DEVICE ERROR OR ARE WE OUT OF SPACE? + JMP BOUERR /OUT OF SPACE +PER2, JMS I (PIPERR + 2 +BOUERR, JMS I (PIPERR + 0 + +ASCPTCH,TAD (ACHLP+1 /V3C FAKE OUT ICHAR + DCA I (ICHAR /SIMULATE CALL TO ICHAR FROM 'ACHLP' + JMP I (GETNEW /V3C SIMULATE OCCURRENCE OF 8-BIT ^Z IN ICHAR + PAGE + /THIS IS ONCE-ONLY CODE + +ONCE, 0 + STA + TAD ONCE + DCA ONCENF + TAD (20 + DCA I ONCENF /RESTORE L20, DON'T ALLOW REENTRY + TAD I (MPARAM+1 + AND (7 + SNA CLA /IS /V SET? + JMP I ONCE /NO, RETURN + TAD (VER /YES + JMS I (ERPRNT /PRINT VERSION NUMBER + JMP I ONCE /RETURN + +VER, TEXT \OS/8 PIP V14A\ +ONCENF, 0 +GETEQ, 0 /V3 + TAD I (MPARAM+3 + SNA + IAC + AND (77 /CONVERT 0 TO 1 AND 100 TO 0 + CIA + JMP I GETEQ + +DVREDE, 0 /READ DEVICE WITH BAD BLOCK REFERENCED + TAD I (OZHNDL /GET DEVICE ENTRY POINT + DCA NEWHL + CIF 0 + JMS I NEWHL /DO THE READ + 0011 + 0 + -111 /NEGATIVE BLOCK - RETURNS MINUS LENGTH + CIF 10 + JMP I DVREDE /ERROR RETURN FOR READ YIELDS DESIRED RESULTS +NEWHL, 0 + PAGE + $ + ADDED src/os8-v3f/README.V3F Index: src/os8-v3f/README.V3F ================================================================== --- /dev/null +++ src/os8-v3f/README.V3F @@ -0,0 +1,88 @@ +OS/8 Version 3F 27-Jul-1995 + + + +This archive directory contains the source files for the OS/8 +operating system version 3F that have been identified todate. +This is not the complete release and may have been released +as a maintenance update. The files listed below have been +updated from the base V3D release and are useful in tracking +the development of OS/8. + + The comments in OS8.PA denote this file as version 3F, +but this file is NOT the same as the OS/78 V2 source. OS/8 V3F +and OS/78 V2 seem to be parallel developments, since neither +refers to the other. It is not known just when these files +were released. The primary change to OS8 is adding access to +memory above 32K. + + Contained here is the last known release of RESORC, +which has been converted from the PAL to the MACREL +assembler. Also here are new handlers (not in V3D) for the +RL disks, RX02 floppies in several flavors, and VX virtual +memory. + + The OS8V3F.EXE file is a self extracting ZIP file of +the V3F sources included here. Simply run OS8V3F.EXE on a PC +to extract the V3F source files. + + + +BLOAD.PA +BOOT.PA +BPAT.PA +BUILD.PA +CCL.BI +CCL.MA +CCLAT.MA +CCLCD.MA +CCLCDX.MA +CCLCOR.MA +CCLDAT.MA +CCLDRV.MA +CCLMSG.MA +CCLPS.MA +CCLREM.MA +CCLRUN.MA +CCLSB2.MA +CCLSEM.MA +CCLSIZ.MA +CCLSUB.MA +CCLTAB.MA +CCLTBL.MA +CD.PA +FPAT.PA +FUTIL.PA +KL8E.PA +OS78.BI +OS8.PA +PAL8.PA +PIP.PA +README.V3F +RESORC.BI +RESORC.MA +RESOV0.MA +RESOV1.MA +RESOV2.MA +RESOVD.MA +RKA0.DI +RKB0.DI +RL0.PA +RL1.PA +RL2.PA +RL3.PA +RLC.PA +RLFRMT.PA +RLSY.PA +RTL.PA +RTS.PA +RX78C.PA +RXCOPY.PA +RXNS.PA +RXSY1.PA +RXSY2.PA +SAVECB.PA +TECO.PA +VXNS.PA +VXSY.PA + ADDED src/os8-v3f/README.md Index: src/os8-v3f/README.md ================================================================== --- /dev/null +++ src/os8-v3f/README.md @@ -0,0 +1,160 @@ +# OS/8 V3F + +This directory contains source files in `PAL-8` and `MACREL` labeled as OS/8 v3F. +It appears to be a nearly complete source distribution for the OS/8 V3D +Device Extensions Kit. + +See also: [our documentation on theOS/8 V3D Device Extensions][extensions-doc]. + +## Recent updates: + +### Cleanup newlines + +There were a couple places where, either in data transmission erorrs, or odd +formatting, an OS/8 newline was followed by an extra linefeed character. Because +we are going to be actively using these sources, copying them into and out of +OS/8, these files have been edited into canonical form. + +Files affected: `BUILD.PA`, `CCLTAB.MA`, `OS8.PA.` +This does subtly affect a `TECO` macro in `CCLTAB.MA`, but the change is +in a print message getting a `\r` changed to `\r\n`. It should be totally +benign. + +### Improved build batch files + +`CCL.BI` and `RESORC.BI` have been modified to name different devices +for input and output files. You still need to do the device assignments: + + ASSIGN RKA1 IN + ASSIGN RKB1 OUT + +`RESORC.BI` chained to a script, `MOVE.BI` that is supposed to move the +output from `LINK` from `DSK:` to `OUT:` but that script is not present. +So `COPY` and `DEL` commands to do that were added to the `RESORC.BI` and +`CCL.BI`. + +## Utilization: + +The file `actions.txt` is to be submitted to our os8-cp utility as follows: + + ../../bin/os8-cp --action-file actions.txt + +This will create the rk05 image file `os8-v3f-build.rk05` with the sources in +partition A. We expect a builder script to be written, which may live in +mkos8 will then build the components as they are validated. + +## History + +These sources were nearly lost. + +ibiblio.org has a file, `readme.v3f` describing a self extracting archive, +`OS8V3F.EXE` that contains the sources. But that file is not present. +However a [mirror site of Johnny Billquist's arcihve][rtk-mirror] had both readme and +the .exe. + +I believe the designation, "fromnichols" means that the collection was from +Lee Nichols, a steering committee member of the 12-Bit SIG special interest group +for 12 bit computers. + +The `readme.v3f` appears in this directory as `README.V3F`. We copy it into +the build RK05 image as `README.TX`. + +[rtk-mirror]:http://rtk.mirrors.pdp-11.ru/ftp.update.uu.se/pdp8/pdp-8/fromnichols/ +[extensions-doc]:https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-v3d-device-extensions.md + + +## Contents of readme.v3f + +OS/8 Version 3F 27-Jul-1995 + + + +This archive directory contains the source files for the OS/8 +operating system version 3F that have been identified todate. +This is not the complete release and may have been released +as a maintenance update. The files listed below have been +updated from the base V3D release and are useful in tracking +the development of OS/8. + + The comments in `OS8.PA` denote this file as version 3F, +but this file is NOT the same as the OS/78 V2 source. OS/8 V3F +and OS/78 V2 seem to be parallel developments, since neither +refers to the other. It is not known just when these files +were released. The primary change to OS8 is adding access to +memory above 32K. + + Contained here is the last known release of `RESORC`, +which has been converted from the `PAL` to the `MACREL` +assembler. Also here are new handlers (not in V3D) for the +RL disks, RX02 floppies in several flavors, and VX virtual +memory. + + The `OS8V3F.EXE` file is a self extracting ZIP file of +the V3F sources included here. Simply run `OS8V3F.EXE` on a PC +to extract the V3F source files. + + + +`BLOAD.PA` +`BOOT.PA` +`BPAT.PA` +`BUILD.PA` +`CCL.BI` +`CCL.MA` +`CCLAT.MA` +`CCLCD.MA` +`CCLCDX.MA` +`CCLCOR.MA` +`CCLDAT.MA` +`CCLDRV.MA` +`CCLMSG.MA` +`CCLPS.MA` +`CCLREM.MA` +`CCLRUN.MA` +`CCLSB2.MA` +`CCLSEM.MA` +`CCLSIZ.MA` +`CCLSUB.MA` +`CCLTAB.MA` +`CCLTBL.MA` +`CD.PA` +`FPAT.PA` +`FUTIL.PA` +`KL8E.PA` +`OS78.BI` +`OS8.PA` +`PAL8.PA` +`PIP.PA` +`README.V3F` +`RESORC.BI` +`RESORC.MA` +`RESOV0.MA` +`RESOV1.MA` +`RESOV2.MA` +`RESOVD.MA` +`RKA0.DI` +`RKB0.DI` +`RL0.PA` +`RL1.PA` +`RL2.PA` +`RL3.PA` +`RLC.PA` +`RLFRMT.PA` +`RLSY.PA` +`RTL.PA` +`RTS.PA` +`RX78C.PA` +`RXCOPY.PA` +`RXNS.PA` +`RXSY1.PA` +`RXSY2.PA` +`SAVECB.PA` +`TECO.PA` +`VXNS.PA` +`VXSY.PA` + + +### License + +Copyright © 2018 by Bill Cattey. Licensed under the terms of +[the SIMH license][sl]. 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 + +ARG, /ADDR OF ARG LIST +RL0C, VERSION /DRIVE 0 ENTRY POINT + CLA + JMP START +TADX, TAD ARG /A CONSTANT +RL1C, VERSION /DRIVE 1 ENTRY POINT + AC0001 + JMP START +A175, 175 +RL2C, VERSION /DRIVE 2 ENTRY POINT + AC0002 + JMP START +A3777, 3777 +RL3C, VERSION /DRIVE 3 ENTRY POINT + AC0003 + JMP START + GO, 0 /ONCE-ONLY CODE. + /ADDRESS OF 2ND PAGE STORED HERE. +BBL, TAD JMPX /NEXT 21 OCTAL LOCATIONS ARE + /REPLACED BY THE BAD BLOCK LIST + /WHEN IT IS READ IN + /FROM REQUESTED DRIVE. + /ONCE-ONLY CODE: PREVENT EXE- + /CUTION MORE THAN ONCE. + DCA ONCE +LOOP, TAD LIST /RELOCATE LOCATIONS CONTAINING + SNA /RELATIVE ADDRESSES TO MAKE THEM +JMPX, JMP BEGIN /ABSOLUTE. LOCATION LIST IS TERM- + /INATED BY ZERO. + TAD GO /RELOCATE VALUE IN LIST. + DCA ONLY /"ONLY" IS NOW TEMP STORAGE. + ISZ LOOP + TAD GO /RELOCATE ADDRESS(VALUE). + TAD I ONLY + DCA I ONLY + JMP LOOP /CONTINUE UNTIL DONE. +LIST, ABBL-MAIN /LIST OF RELATIVE ADDRESSES OF + /RELOCATABLE ADDRESSES. + ATRANS-MAIN + ACURTK-MAIN + BBLOCK-MAIN + BSECT-MAIN + BTRACK-MAIN + BHALF-MAIN + BDRIVE-MAIN + BASE-MAIN + BERROR-MAIN + 0 /TERMINATOR. + /PERFORM TRANSFER, READING IN BBL IF NECESSARY + +BEGIN, AC2000 + DCA I ACURTK /FORCE IGNORANCE OF CURRENT + /TRACK IN CASE OPERATION IS + /TO A DIFFERENT DRIVE. + /(2000 IS AN ILLEGAL TRACK) + TAD DRIVE /HAS DRIVE CHANGED FROM LAST CALL? + CIA + TAD CURDRV + SNA CLA + JMP I ATRANS /NO, DO TRANSFER. + TAD DRIVE /YES, REMEMBER CHANGE AND + DCA CURDRV /READ IN BAD BLOCK LIST. + JMS I GO /CALL TRANSFER SUBROUTINE + 0 /TRACK=0 + 16 /SECTOR=16 + -21 /WC=-LIST LENGTH +ABBL, BBL-MAIN /MA="BBL" +ARLRD, RLRD /FUNCTION=READ INTO FIELD 0 + TAD I ABBL /IS BBL VALID? + TAD CHECK /-ID. + SNA CLA + JMP I ATRANS /YES, DO TRANSFER. +ERROR, AC4000 /HANDLER ERROR RETURN. + SKP +DONE, ISZ ARG /NORMAL HANDLER RETURN. +RTN, CIF CDF /RETURN TO CALLING FIELD. + JMP I ARG + /SECTOR TRANSFER SUBROUTINE + +HALF, 0 /TRANSFER ONE PAGE. + JMS I GO /CALL TRANSFER SUBROUTINE +TRACK, 0 /TRACK +SECTOR, 0 /SECTOR +A7600, 7600 /-WORD COUNT +MA, 0 /MEMORY ADDRESS +FNC, 0 /FUNCTION WORD + TAD A200 /INCREMENT MEMORY ADDRESS. + TAD MA + DCA MA + ISZ SECTOR /INCREMENT SECTOR ADDRESS. + ISZ SECTOR /(2:1 INTERLEAVE) + TAD A7600 /DECREMENT PAGE COUNT. + TAD PAGES + SNA + JMP DONE /TAKE NORMAL HANDLER RETURN + /WHEN PAGE COUNT REACHES ZERO. + DCA PAGES /ELSE CONTINUE TRANSFER. + JMP I HALF + +/VARIABLES + +DRIVE, 0 +PAGES, 0 +BLOCK, 0 + + ZBLOCK 377-. /UNUSED: "ONLY" MUST BE AT 377! + +CURDRV, /CURRENT DRIVE (INITIALLY INVALID + /TO FORCE READ-IN OF BAD BLOCK LIST). +ONLY, JMS GO /ONCE-ONLY CODE TO PUT ADDRESS + /OF "MAIN" INTO "GO". + /REUSED AS CURRENT DRIVE. + *400 /SECOND PAGE + +MAIN, 0 /TRANSFER UP TO ONE PAGE. + AC7775 /INITIALIZE FOR 3 TRIES. + DCA ERRCNT + TAD MAIN /SAVE ADDRESS OF ARGS. + DCA MAINSV + TAD I MAIN /CALCULATE CYLINDER AND + /SURFACE FROM TRACK. + /1ST ARG=TRACK. + CLL RAR + DCA CYL + RTR + DCA SURF + JMS TRKCMP /IF ON TRACK, DO TRANSFER. +RETRY, TAD MAINSV /OFF TRACK: SEEK TO TRACK. + DCA MAIN /RESTORE ADDRESS OF ARGS. + RLDC /CLEAR CONTROLLER REGISTERS. +SEEK, IAC /AC=CLEAR DRIVE REGISTERS + /FUNCTION (AC=SEEK FUNCTION + /WHEN CALLED FROM BELOW). + JMS IO /DO RL01 FUNCTION. + TAD HEADER + JMS IO /READ NEXT HEADER FROM DISK. + RRSI /GET HEADER BYTE #1. + BSW +B377, AND B3 /THIS INSTRUCTION IS ALSO USED + /AS A CONSTANT. + DCA CURTRK /BITS [3] OF CURRENT TRACK. + RRSI /GET HEADER BYTE #2. + AND B377 /THIS SHOULD BE DONE BY HARDWARE! + CLL RTL /BITS [774] OF CURRENT TRACK. + TAD CURTRK + DCA CURTRK + JMS TRKCMP /IF ON TRACK, DO TRANSFER. + TAD CURTRK /OFF TRACK: CONSTRUCT DIFFERENCE + CLL RAR /WORD FOR SEEK. + CIA + TAD CYL + SMA + JMP AROUND + CIA + SKP +AROUND, TAD B4000 /SET DIRECTION BIT IF TO HIGHER + /CYLINDER ADDRESS. + TAD SURF + RLCA /LOAD DIFFERENCE WORD. + AC0002 /PREPARE AC FOR SEEK FUNCTION. + JMP SEEK /SEEK. + TRKCMP, 0 /IF ON TRACK, DO TRANSFER. + TAD CURTRK /COMPARE CURRENT TRACK AND + CIA /DESIRED TRACK. + TAD I MAIN /1ST ARG=TRACK. + SZA CLA + JMP I TRKCMP /DIFFERENT: SEEK. + ISZ MAIN /ON TRACK: DO TRANSFER. + TAD CYL + TAD SURF + RLCA /LOAD DISK ADDRESS OF TRACK. + TAD I MAIN /2ND ARG=SECTOR. + BSW + RLSA /LOAD SECTOR ADDRESS. + ISZ MAIN + TAD I MAIN /3RD ARG=WORD COUNT. + RLWC /LOAD WORD COUNT. + ISZ MAIN + TAD I MAIN /4TH ARG=MA. + RLMA /LOAD MA. + ISZ MAIN + TAD I MAIN /5TH ARG=FUNCTION. + JMS IO /DO RL01 FUNCTION. + ISZ MAIN + JMP I MAIN /RETURN FROM TRANSFER SUBROUTINE. + TRANS, TAD BASE /DO TRANSFER. + /INITIALIZE BAD BLOCK MAPPING. + DCA MAPPER +MAP, TAD I MAPPER /DO BAD BLOCK MAPPING. + /GET BAD BLOCK IF ANY. + SNA /DONE? (0 TERMINATES) + JMP MAPPED /YES. + STL CIA /NO, 13-BIT NEGATE. + TAD I BBLOCK /SUBTRACT FROM CURRENT BLOCK. + SZL CLA /IS BAD BLOCK GREATER (UNSIGNED)? + JMP MAPPED /YES, MAPPING IS DONE. + ISZ MAPPER /NO, MAP AROUND THIS BAD BLOCK + /AND TRY NEXT. +NEXT, ISZ I BBLOCK /WILL NEVER SKIP. + JMP MAP /CONTINUE MAPPING UNTIL DONE. + MAPPED, TAD I BBLOCK /CALCULATE SECTOR FROM BLOCK. + AND B3 + CLL RTL + DCA I BSECT + TAD I BBLOCK /TEST BLOCK FOR LEGALITY: LEGAL + TAD B4010 /BLOCKS ARE 0-3767. + SZL CLA + JMP I BERROR + TAD I BBLOCK /CALCULATE TRACK FROM BLOCK. + RTR + AND B777 + IAC + DCA I BTRACK + JMS I BHALF /TRANSFER 1ST HALF OF BLOCK. + JMS I BHALF /TRANSFER 2ND HALF OF BLOCK. + JMP NEXT /CONTINUE WITH NEXT BLOCK. + IO, 0 /DO RL01 FUNCTION. + BSW + TAD I BDRIVE + BSW /PUT DRIVE INTO BITS [300]. + RLCB /DO RL01 COMMAND. + RLSD /WAIT UNTIL DONE. + JMP .-1 + RLSE /ANY ERRORS? + JMP I IO /NO, RETURN. + ISZ ERRCNT /YES, TRY AGAIN? + JMP RETRY /YES. + JMP I BERROR /TAKE ERROR RETURN WHEN 3 + /TRIES HAVE BEEN DONE. + +/DATA +BBLOCK, BLOCK-MAIN +BSECT, SECTOR-MAIN +BTRACK, TRACK-MAIN +BHALF, HALF-MAIN +BDRIVE, DRIVE-MAIN +BERROR, ERROR-MAIN +BASE, BBL+1-MAIN /START OF BBL FOR MAPPING. +MAPPER, 0 +MAINSV, 0 /SAVED "MAIN" VALUE. +CURTRK, 0 +HEADER, BYTE RLRH +SURF, 0 +CYL, 0 +ERRCNT, 0 +B777, 777 +B4000, 4000 +B4010, 4010 + + ZBLOCK 577-. /UNUSED. + +B3, 3 /THIS CONSTANT MUST BE AT + /LAST LOC OF 2ND PAGE. + +$ ADDED src/os8-v3f/RLFRMT.PA Index: src/os8-v3f/RLFRMT.PA ================================================================== --- /dev/null +++ src/os8-v3f/RLFRMT.PA @@ -0,0 +1,1226 @@ +/RLFRMT: RL01 DISK PACK FORMATTER +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /RL01 DISK PACK FORMATTING PROGRAM + +VERSION=1 +PATCH="A&77 + +/NOTE: +/THIS SOFTWARE WILL RUN ONLY ON PDP-8A,E,F,M! + +/EDIT HISTORY: +/2-NOV-77 DAVID SPECTOR: CREATION + +/RLFRMT WRITES OS/8 BAD BLOCK LISTS +/ON RL01 DISK PACKS + +/BAD BLOCK LIST FORMATS: +/1. FACTORY-DETECTED BAD BLOCKS +/ CYLINDER 377 SURFACE 1 EVEN SECTORS 0-16 +/ BYTE CONTENTS COMMENTS +/ 0 22111000 SERIAL NUMBER: +/ 1 ?4443332 9876543210 (OCTAL) +/ 2 77666555 +/ 3 ?9998887 +/ 4 ? UNUSED +/ 5 ? +/ 6 ? +/ 7 ? +/ 10 CYLINDER BAD SECTOR ENTRY +/ 11 ???????D DOUBLE-DENSITY EXTENSION +/ 12 ??SECTOR +/ 13 ???????S SURFACE BIT +/ ... ... MORE BAD SECTOR ENTRIES +/ ??? ALL 1'S TERMINATOR ENTRY + +/ NOTE: "?" REPRESENTS UNUSED ITEMS (0) + /2. OS/8 BAD BLOCK LISTS + +/2A. DEVICES A AND B +/ CYLINDER 0 SURFACE 0 SECTOR 14 +/WORD CONTENTS +/ 0 IDENTIFICATION CODE (ID) +/ 1 BAD BLOCKS FOR DEVICE A IN ASCENDING ORDER +/... ... +/20 0 (TERMINATOR FOR LIST) +/21 BAD BLOCKS FOR DEVICE B IN ASCENDING ORDER +/... ... +/40 0 (TERMINATOR FOR LIST) + +/2B. DEVICE C +/ CYLINDER 0 SURFACE 0 SECTOR 16 +/WORD CONTENTS +/ 0 IDENTIFICATION CODE (ID) +/ 1 BAD BLOCKS FOR DEVICE C IN ASCENDING ORDER +/... ... +/20 0 (TERMINATOR FOR LIST) +/100-177 ID CODE + +/3. INTERNAL TRACK-SECTOR FORMAT: +/WORD 0: TRACK +/WORD 1: SECTOR +/TERMINATOR: NEGATIVE TRACK WORD + +/4. INTERNAL OS/8 FORMAT: +/WORD 0: DEVICE (0=A, 1=B, 2=C) +/WORD 1: BLOCK NUMBER +/TERMINATOR: NEGATIVE DEVICE WORD + +/ +-------------------------------+ +/ ! ! +/ ! NOTE ! +/ ! ! +/ ! REFER TO THE DOCUMENT "RL01 ! +/ ! SUPPORT UNDER OS/8" FOR ! +/ ! FURTHER INFORMATION. ! +/ ! ! +/ ! ! +/ +-------------------------------+ + /INSTRUCTIONS THAT GENERATE CONSTANTS + +AC0001=CLA IAC +AC0002=CLA CLL CML RTL +AC0003=CLA CLL CML IAC RAL /* +AC0004=CLA CLL IAC RTL /* +AC0006=CLA CLL CML IAC RTL /* +AC0100=CLA IAC BSW /* +AC2000=CLA CLL CML RTR +AC3777=CLA CLL CMA RAR +AC4000=CLA CLL CML RAR +AC5777=CLA CLL CMA RTR +AC6000=CLA CLL CML IAC RTR /* +AC7775=CLA CLL CMA RTL +AC7776=CLA CLL CMA RAL + +/* USE ONLY ON VT-78 AND PDP-8A,E,F,M + + +/PAGE 0 VARIABLES + AUTO1=10 + AUTO2=11 + AUTO3=12 + AUTO4=13 + TEMP=20 + KEY=21 + INT=22 /RESERVED + TMP1=23 + TMP2=24 + TMP3=25 + TMP4=26 + TMP5=27 + TMP6=30 + TMP7=31 + DIGIT=32 /DRIVE NUMBER + DRIVE=DIGIT /DRIVE VALUE + FMT=33 /7777 IF FORMATTED DISK + FAC=34 /7777 IF FACTORY LIST OK + +/LOCATIONS WITHIN OS/8 + MON=7605 /FAST MONITOR RETURN FROM RLFRMT + +/IDENTIFICATION CODE FOR BAD BLOCK LISTS + ID=123 + /BUFFERS + FACTRY=4000 /2 PAGES: FACTORY LIST + AANDB=FACTRY+400 /1 PAGE: OS/8 A&B LISTS + C=AANDB+200 /1 PAGE: OS/8 C LIST + X=C+200 /1 PAGE: "DON'T CARE" PAGE + /(FOR READ-CHECKING) + OLD=X /1 PAGE: OLD OS/8 A,B,C + NEW=X+200 /1 PAGE: NEWLY-FOUND BAD BLOCKS + /RL01 DEFINITIONS + +RLIOT=6600 +RLDC=RLIOT 0 /CLEAR DEVICE +RLSD=RLIOT 1 /SKIP IF DONE +RLMA=RLIOT 2 /LOAD MEM ADDR +RLCA=RLIOT 3 /LOAD REGISTER "A" +RLCB=RLIOT 4 /LOAD REG "B" AND EXECUTE +RLSA=RLIOT 5 /LOAD SECTOR ADDR + /RLIOT 6 UNUSED +RLWC=RLIOT 7 /LOAD WORD COUNT +RRER=RLIOT 10 /READ ERROR REG +RRWC=RLIOT 11 /READ WORD COUNT +RRCA=RLIOT 12 /READ REG "A" +RRCB=RLIOT 13 /READ REG "B" +RRSA=RLIOT 14 /READ SECTOR ADDR +RRSI=RLIOT 15 /READ SILO BYTE + /RLIOT 16 UNUSED +RLSE=RLIOT 17 /SKIP IF ERROR +/RLCB FUNCTION BITS: + RLMT=0 /MAINTENANCE MODE + RLRE=1 /RESET DRIVE ERRORS + RLST=2 /READ STATUS REGS INTO SILO + RLSK=3 /SEEK + RLRH=4 /READ HEADER + RLWR=5 /WRITE + RLRD=6 /READ + RLRN=7 /READ WITH NO HEADER CHECK +/BIT DEFINITIONS IN REGISTERS: +BYTE=1000 /BYTE TRANSFER MODE + *200 /STARTING ADDRESS + + TAD (IDMSG) /START HERE + JMS TYPE /IDENTIFY SELF +RE, TAD (MSG) /RESTART HERE. + JMS TYPE /ASK FOR DRIVE NUMBER +RE1, JMS GETKEY /WAIT FOR KEY + TAD (-60) /CONVERT TO DIGIT + DCA DIGIT + TAD DIGIT + AND (7774) /ALLOW ONLY DRIVES 0-3 + SNA CLA + JMP FA1 +BUIN, TAD (BDMSG) /BAD USER INPUT: ADVISE USER. + JMS TYPE + JMP RE +FA1, JMS GETKEY /WAIT FOR RETURN KEY + TAD (-15) + SZA CLA + JMP BUIN + TAD DIGIT /GOOD USER INPUT; + BSW /CHANGE DIGIT TO DRIVE NR. + DCA DIGIT + JMS CRLF + AC2000 /SET CURRENT TRACK TO ILLEGAL + DCA CURTRK /VALUE IN ORDER TO FORCE A 'READ + /HEADER' OPERATION THE FIRST + /TIME "RL01" IS CALLED, SO WE + /CAN FIND OUT WHERE THE HEAD IS. + JMS RL01 /READ OS/8 BAD BLOCK LIST + /(BBL) FOR DEVICES A&B + RLRD /FUNCTION + AANDB /MA + 0 /TRACK + 14 /SECTOR + JMP FATAL /ERROR RETURN + JMS RL01 /NORMAL RETURN: READ OS/8 + /BBL FOR DEVICE C + RLRD /FUNCTION + C /MA + 0 /TRACK + 16 /SECTOR + JMP FATAL /ERROR RETURN + DCA RCTRK /PERFORM READ-CHECK OF ENTIRE + /DISK + TAD (-1000) /NUMBER OF TRACKS + DCA TMP2 + TAD (NEW-1) + DCA AUTO3 /STORAGE FOR BAD ONES FOUND + TAD (-100) + DCA BADCNT /IN CASE ALL ARE "BAD" +RCNEXT, JMS RCSUB /READ NEXT TRACK + /EVEN SECTORS + CLA IAC + JMS RCSUB /ODD SECTORS + ISZ RCTRK + ISZ TMP2 + JMP RCNEXT + STA /TERMINATE NEW BAD LIST + DCA I AUTO3 + STA /READ BAD BLOCK LISTS FROM DISK + /START WITH FACTORY-DETECTED + /BAD BLOCK LIST + /TRY ALL BAD BLOCK LISTS ON LAST + /TRACK - SET "FAC" TO -1 IF LIST + /IS READ IN OK, ELSE 0. + /INITIALLY ASSUME OK. + DCA FAC + TAD (-10) /SET FOR 8 TRIES. + DCA TMP1 + DCA FACSEC /EVEN SECTORS, STARTING WITH 0. +FACRD, JMS RL01 /CALL RL01 TRANSFER SUBROUTINE + /TO TRY READING FACTORY BAD + /BLOCK LIST. + BYTE RLRD /FUNCTION WORD + FACTRY /MA + 777 /TRACK +FACSEC, 0 /SECTOR + JMP FACBAD /ERROR RETURN + TAD (FACCTL-1) /NORMAL RETURN: TEST LIST JUST + /READ FOR VALIDITY (4 ZEROS IN + /FACTRY+4, 4 377'S IN FACTRY+374). + DCA AUTO1 +FAC1, TAD I AUTO1 /LOC FOR VALIDITY TEST. + SNA /0 TERMINATES CONTROL LIST. + JMP FACOK /MUST BE VALID; CONTINUE. + DCA AUTO2 /LOC FOR VALIDITY TEST. + TAD I AUTO1 /VALUE FOR VALIDITY TEST. + DCA TMP2 + TAD (-4) /BYTES TO CHECK. + DCA TMP3 +FAC2, TAD I AUTO2 /CHECK NEXT BYTE. + AND (377) /HARDWARE SHOULD DO THIS! + CIA + TAD TMP2 + SZA CLA /VALUE CHECKS OK? + JMP FACBAD /NO. + ISZ TMP3 /YES, DONE? + JMP FAC2 /NO, CHECK NEXT BYTE. + JMP FAC1 /YES, DO NEXT TEST IF ANY. + +FACBAD, ISZ FACSEC /BAD LIST OR I/O ERROR: TRY + /READING NEXT COPY OF LIST. + ISZ FACSEC /INCREMENT SECTOR BY 2. + ISZ TMP1 /DONE 8 TRIES? + JMP FACRD /NO, TRY NEXT LIST. + DCA FAC /YES, DECLARE LIST BAD. +FACOK, JMP CC1 /CONTINUE ON NEXT PAGE + + PAGE + /CONTINUE FROM PREVIOUS PAGE +CC1, TAD (-100) /FIND OUT IF DISK IS ALREADY + DCA TMP1 /FORMATTED: SET FMT=0 IF NO, + TAD (C+77) /FMT=7777 IF YES. LAST 100 OCTAL + DCA AUTO1 /WORDS OF "C" LIST ARE EQUAL TO + /ID CODE. + STA /ASSUME IT IS FORMATTED + DCA FMT +PFCLP, TAD I AUTO1 /SCAN ID CODE LIST + TAD (-ID) + SZA CLA + DCA FMT /FMT=0 IF UNFORMATTED + ISZ TMP1 /DONE SCAN? + JMP PFCLP /NOT YET + TAD FMT /YES - TYPE SERIAL NR + SZA CLA /AND WHETHER DISK IS ALREADY + TAD (FRMMSG-UNFMSG) /FORMATTED + TAD (UNFMSG) /OR NOT. + JMS TYPE + TAD FAC /IF FACTORY LISTS ARE BAD, + SZA CLA /TYPE A SPECIAL MESSAGE. + JMP EE1 + TAD (BDFMSG) /"FACTORY LIST DESTROYED" + JMS TYPE + JMP EE2 /AND SKIP AROUND FACTORY BBL + /PROCESSING. +EE1, TAD (SERMSG) /IF FACTORY LISTS ARE GOOD, + /PRINT PACK SERIAL NUMBER + JMS TYPE + TAD (FACTRY+3) /ADDR OF MSB + DCA TMP1 + JMS DPSNH /DIGITS 9-5 + JMS DPSNH /DIGITS 4-0 + JMS CRLF + TAD (FACTRY+7) /CONVERT FACTORY-DETECTED + DCA AUTO1 /BAD BLOCK LIST FROM FACTORY + TAD (FACTRY+7) /FORMAT (DEC STANDARD 144) TO + DCA AUTO2 /TRACK/SECTOR FORMAT. + JMS CONV1 + TAD (FACTRY+7) /CONVERT FACTORY-DETECTED BAD + DCA AUTO1 /BLOCK LIST FROM TRACK/SECTOR + TAD (FACTRY+7) /FORMAT TO 2-WD OS/8 FORMAT. + DCA AUTO2 + JMS CONV2 + TAD (FACTRY+10) /PUT FACTORY-DETECTED BAD BLOCK + JMS ORDER /LIST INTO ASCENDING ORDER AND + /DELETE ANY DUPLICATE BLOCKS + /CAUSED BY BOTH SECTORS BEING + /BAD. + JMS REPORT /TYPE BAD BLOCK LIST + FACMSG /OF FACTORY-DETECTED + FACTRY+10 /BAD BLOCKS. +EE2, TAD FMT /IS DISK FORMATTED? + SNA CLA + JMP AA /NO - THERE ARE NO OLD OS/8 LISTS + TAD (OLD-1) /YES - TRANSFER OLD OS/8 BAD + DCA AUTO3 /BLOCK LISTS TO "OLD" LIST AND + TAD (BBCTL-1) /CONVERT TO 2-WD OS/8 FORMAT. + DCA AUTO2 +BBTRAN, TAD I AUTO2 /TRANSFER NEXT LIST (A,B,C) + SNA + JMP AB /DONE + DCA AUTO1 /LIST ADDRESS + TAD I AUTO2 /DEVICE CODE + DCA TMP1 +BBTRNA, TAD I AUTO1 /TRANSFER NEXT ENTRY + SNA /(0 IS OS/8 TERMINATOR) + JMP BBTRAN /TRY NEXT LIST + DCA TMP2 + TAD TMP1 + DCA I AUTO3 /STORE DEVICE CODE IN "OLD" + TAD TMP2 + DCA I AUTO3 /STORE BLOCK IN "OLD" + JMP BBTRNA /TRY NEXT ENTRY +AB, STA /TERMINATE "OLD" LIST + DCA I AUTO3 + TAD (OLD) /ORDER "OLD" LIST + JMS ORDER + JMS REPORT /TYPE BAD BLOCK LIST + OLDMSG /OF OLD OS/8 BLOCKS + OLD +AA, TAD (NEW-1) /CONVERT NEWLY-FOUND BAD + DCA AUTO1 /BLOCK LIST FROM TRACK/SECTOR + TAD (NEW-1) /FORMAT TO 2-WD OS/8 FORMAT. + DCA AUTO2 + JMS CONV2 + TAD (NEW) /ORDER "NEW" LIST + JMS ORDER + JMS REPORT /TYPE BAD BLOCK LIST + NEWMSG /OF NEWLY-FOUND + NEW /BAD BLOCKS. + TAD FMT /FORMATTED DISK? + SNA CLA + JMP AA1 /NO + TAD (NEW-1) /YES: FIND OUT IF THERE ARE + DCA AUTO1 /ANY NEW BAD BLOCKS NOT LISTED + /IN THE OLD LIST + JMP AA2 /CONTINUE ON NEXT PAGE + + PAGE + /CONTINUE FROM PREVIOUS PAGE +AA2, TAD (OLD-1) /EXAMINE NEXT ENTRY IN "NEW" + DCA AUTO2 + TAD I AUTO1 + SPA + JMP AA1 /NO MORE ENTRIES IN "NEW" + DCA TMP1 /DEVICE CODE + TAD I AUTO1 + DCA TMP2 /BLOCK + SKP +AA3, ISZ AUTO2 /SKIP REST OF "OLD" ENTRY +AA4, TAD I AUTO2 /SCAN "OLD" ENTRIES + /IS THERE ANOTHER ENTRY? + SPA + JMP NEWFND /NO - A NEW ENTRY WAS FOUND + /WHICH HAD NO CORRESPONDING OLD + /ENTRY - TYPE WARNING MESSAGE. + CIA /YES - DOES IT EQUAL THE NEW + TAD TMP1 /ENTRY? + SZA CLA + JMP AA3 /NO, CONTINUE SCAN + TAD I AUTO2 /TEST 2ND WORD OF ENTRY + CIA + TAD TMP2 + SZA CLA + JMP AA4 /NO, CONTINUE SCAN + JMP AA2 /YES - NEW BLOCK APPEARS IN + /OLD LIST; TRY NEXT NEW ENTRY. + +NEWFND, CLA /A REALLY NEW BAD BLOCK + TAD (ADDMSG) /HAS BEEN FOUND + JMS TYPE +AA1, CLA + TAD FMT /IS DISK UNFORMATTED AND ALSO + /WITHOUT A VALID FACTORY BBL? + TAD FAC + SNA CLA + JMP EE3 /YES TO BOTH - SKIP MERGE PRO- + /CEDURE SO THAT "NEW" WILL CON- + /SIST ONLY OF NEWLY-FOUND BAD + /BLOCKS. + TAD FMT /IS DISK FORMATTED? + SNA CLA + TAD (FACTRY+7-OLD+1) /NO: MERGE FACTORY- + /DETECTED BAD BLOCK LIST + /INTO NEWLY-FOUND BAD BLOCK + /LIST + TAD (OLD-1) /YES: MERGE OLD OS/8 BAD + /BLOCKS INTO NEW LIST + DCA AUTO1 + TAD (NEW-1) + DCA AUTO2 +AB1, TAD I AUTO2 /FIND END OF "NEW" LIST + SPA CLA + JMP AB2 /FOUND END + ISZ AUTO2 /NOT YET + JMP AB1 +AB2, STA /FOUND END; BACKUP POINTER + TAD AUTO2 /TO POINT TO JUST BEFORE + DCA AUTO2 /END OF "NEW" LIST +AB4, TAD I AUTO1 /GET NEXT INPUT ENTRY + SPA + JMP AB3 /NO MORE ENTRIES TO MERGE + DCA I AUTO2 /TACK INPUT ONTO END OF + TAD I AUTO1 /"NEW" LIST + DCA I AUTO2 + JMP AB4 /TRANSFER NEXT ENTRY +AB3, DCA I AUTO2 /DONE MERGE; TERMINATE "NEW" +EE3, TAD (NEW) /ORDER "NEW" AND DELETE + JMS ORDER /DUPLICATE ENTRIES IF ANY. + JMS REPORT /TYPE BAD BLOCK LIST + FINMSG /OF OS/8 BAD BLOCKS ABOUT + NEW /TO BE WRITTEN OUT. + TAD (AANDB-1) /NEW LIST IS NOW COMPLETE. + /PREPARE OS/8 LISTS FOR + /WRITING ONTO DISK. + /ZERO EACH LIST + JMS ZERO + TAD (C-1) + JMS ZERO + TAD (ID) /STORE ID CODES IN PROPER + DCA AANDB /PLACES. + TAD (ID) + DCA C + TAD (C+77) + DCA AUTO1 + TAD (-100) + DCA TMP1 + TAD (ID) + DCA I AUTO1 + ISZ TMP1 + JMP .-3 + TAD (NEW) /TRANSFER NEW LIST TO PROPER + DCA TMP3 /OS/8 LISTS PRIOR TO WRITING. + TAD (BBCTL-1) + DCA AUTO2 + JMP AD1A /TRANSFER FIRST LIST (A) +AD1, CLA /TRANSFER NEXT LIST (B,C) + DCA I AUTO3 /TERMINATE LAST LIST (A,B,C) +AD1A, TAD I AUTO2 + SNA + JMP ASK /DONE TRANSFER + DCA AUTO3 /OS/8 LIST ADDRESS + TAD I AUTO2 + DCA TMP1 /DEVICE CODE + TAD (-20) + DCA TMP2 /COUNTER - ONLY 15 BAD BLOCKS + /ARE ALLOWED PER DEVICE. + SKP /TRANSFER EACH ENTRY, THIS DEV. +AD2, ISZ TMP3 /LOCATE TO NEXT ENTRY IN "NEW". + TAD I TMP3 /GET DEV CODE - IS NEW ENTRY + /SAME DEVICE AS + /CURRENT OS/8 LIST BEING FILLED? + SPA + JMP AD1 /NO MORE ENTRIES IN "NEW" + CIA /COMPARE DEVICES + TAD TMP1 + SZA CLA + JMP AD1 /DIFFERENT DEVICE; TRANSFER TO + /NEXT OS/8 LIST. + JMP AD4 /SAME DEVICE. + /CONTINUE ON NEXT PAGE + + PAGE + /CONTINUE FROM PREVIOUS PAGE +AD4, ISZ TMP3 /LOCATE TO BLOCK NR. + TAD TMP1 /CHECK TO SEE IF BAD BLOCK IS + /IN THE RANGE 0-66 OCTAL ON + SZA CLA /DEVICE A; IF SO, WARN USER NOT + JMP AD3 /TO USE AS SYSTEM DEVICE. + TAD I TMP3 + STL CIA /13-BIT NEGATE + TAD (66) /13-BIT COMPARE + SZL CLA /IS BLOCK LE 66? + JMP AD3 /NO, IT'S OK + TAD (ZERMSG) /YES, WARN USER + JMS TYPE +AD3, TAD I TMP3 /IGNORE ANY BLOCK ZERO (BLOCK + /ZERO CANNOT BE REPRESENTED IN + /OS/8 BAD BLOCK LISTS.) + SNA + JMP AD2 /IGNORE ZERO BLOCK + DCA I AUTO3 /STORE IN OS/8 LIST A,B, OR C + /(NON-ZERO BLOCK NR) + ISZ TMP2 /16 BAD BLOCKS, THIS DEVICE? + JMP AD2 /NO, TRANSFER NEXT ENTRY + TAD (OVFMSG) /YES, WARN USER AND QUIT + JMP ERROR +ASK, TAD (FMTMSG) /WAIT FOR USER TO VERIFY + /GOING AHEAD AND WRITING + /OUT OS/8 BAD BLOCK LISTS. + /"FORMAT DISK PACK?" + JMS TYPE + JMS GETKEY /WAIT FOR KEY + DCA TMP1 + JMS GETKEY /WAIT FOR RETURN + TAD (-15) + SZA CLA + JMP ASK + JMS CRLF + TAD TMP1 + ZZ="Y&177 + TAD (-ZZ) /TEST FOR "Y" (YES) + SZA CLA + JMP RE + RLDC /GO-AHEAD RECEIVED: CHECK FOR WRITE-LOCK. + /CLEAR CONTROLLER. + TAD (BYTE RLST) + JMS IO /DO "GET STATUS" COMMAND. + JMP FATAL /ERROR: CANNOT HAPPEN. + RRSI /IGNORE BYTE #1. + RRSI /GET BYTE #2. + BSW /BIT [40] IS WRITE-LOCK BIT. + SPA CLA /IS WRITE-LOCK ENABLED? + JMS REMOVE /YES: ASK USER TO DISABLE. + JMS RL01 /NO: DO ACTUAL FORMATTING. + /ACTUAL FORMATTING: WRITE + /OUT ALL OS/8 BAD BLOCK + /LISTS. CALL INTERNAL HANDLER + /FOR EACH LIST WRITTEN. + RLWR /FUNCTION=WRITE + AANDB /A AND B LISTS + 0 /TRACK=0 + 14 /SECTOR=14 + JMP FATAL /ERROR RETURN + JMS RL01 + RLWR /FUNCTION=WRITE + C /C LIST + 0 /TRACK=0 + 16 /SECTOR=16 + JMP FATAL /ERROR RETURN + TAD (DNMSG) /TYPE "DONE" + JMS TYPE + JMP RE /AND ASK FOR NEXT PACK. + + + +/SUBROUTINE TO ASK USER TO DISABLE WRITE-LOCK +REMOVE, 0 +REMOV1, TAD (WRMSG) + JMS TYPE + JMS GETKEY + TAD (-15) /WAIT FOR RETURN. + SZA CLA + JMP REMOV1 /IGNORE ANY OTHER KEY. + JMP I REMOVE + /CONVERSION SUBROUTINES + +/SUBROUTINE TO CONVERT FROM FACTORY FORMAT (DEC STANDARD 144) +/TO TRACK/SECTOR FORMAT +/INPUT: AUTO1=INPUT LIST-1 +/ AUTO2=OUTPUT LIST-1 +CONV1, 0 +CONV1A, TAD I AUTO1 /CYLINDER BYTE + AND (377) /HARDWARE SHOULD DO THIS! + DCA TMP1 + TAD I AUTO1 /DOUBLE DENSITY BIT + AND (377) /HARDWARE SHOULD DO THIS! + CLA /IGNORE + TAD I AUTO1 /SECTOR BYTE + AND (377) /HARDWARE SHOULD DO THIS! + DCA TMP2 + TAD I AUTO1 /SURFACE BIT + AND (377) /HARDWARE SHOULD DO THIS! + CLL RAR + SZA CLA /TEST FOR END OF LIST + JMP CONV1B /DONE + TAD TMP1 /CONSTRUCT TRACK + RAL + DCA I AUTO2 /STORE TRACK + TAD TMP2 + AND (77) + DCA I AUTO2 /STORE SECTOR + JMP CONV1 +CONV1B, STA /TERMINATE OUTPUT LIST + DCA I AUTO2 + JMP I CONV1 + + PAGE + /SUBROUTINE TO CONVERT FROM TRACK/SECTOR FORMAT +/TO 2-WD OS/8 FORMAT +/INPUT: AUTO1=INPUT LIST-1 +/ AUTO2=OUTPUT LIST-1 +CONV2, 0 +CONV2C, TAD I AUTO1 + DCA TMP1 /TRACK + TAD I AUTO1 + DCA TMP2 /SECTOR + TAD TMP1 /TEST FOR END OF LIST + SPA CLA + JMP CONV2D /DONE + TAD TMP2 /TEST FOR DEVICE C + CLL RAR + SZL + JMP CONV2A /MUST BE A OR B + TAD (-10) + SMA CLA + JMP CONV2A /MUST BE A OR B + TAD TMP1 /MUST BE C; TEST FOR ILLEGAL + /BAD BLOCKS. + SNA CLA + JMP CONV2C /ILLEGAL: TRACK 0; IGNORE + TAD (-777) + SNA CLA + JMP CONV2C /ILLEGAL: TRACK 777; IGNORE + TAD TMP2 /CONVERT DEVICE C BLOCK + CLL RTR + DCA TMP2 /BITS [3] SO FAR + TAD TMP1 + AC0002 + DCA I AUTO2 /STORE DEVICE CODE FOR C + STA + TAD TMP1 + CLL RTL /BITS [3774] + TAD TMP2 /BITS [3777] +CONV2B, DCA I AUTO2 /STORE BLOCK NUMBER + JMP CONV2C /CONVERT NEXT ENTRY +CONV2A, CLA /PROCESS DEVICES A AND B + TAD TMP2 /CONVERT BLOCK NR + CLL RAR + SZL + TAD (24) + TAD (-10) + CLL RAR + DCA TMP2 /BITS [17] SO FAR + TAD TMP1 + CLL RTL + RTL /LINK=DEVICE NR (A=0, B=1) + /BITS [7760] + TAD TMP2 /BITS [7777] + DCA TMP1 + RAL /GET DEVICE CODE + DCA I AUTO2 /STORE DEVICE CODE FOR A OR B + TAD TMP1 + JMP CONV2B /STORE BLOCK NR + +CONV2D, STA /TERMINATE OUTPUT LIST + DCA I AUTO2 + JMP I CONV2 + +/SUBROUTINE TO ZERO A PAGE CONTAINING AN OS/8 BAD +/BLOCK LIST +/INPUT: AC=ADDRESS OF LIST-1 +ZERO, 0 + DCA AUTO1 + TAD (-200) + DCA TMP1 + DCA I AUTO1 + ISZ TMP1 + JMP .-2 + JMP I ZERO + +/SUBROUTINE TO ORDER A 2-WD OS/8 BAD BLOCK LIST AND +/DELETE DUPLICATE ENTRIES IF ANY +/INPUT: AC=ADDRESS OF LIST +ORDER, 0 + DCA TMP1 + AC7776 + TAD TMP1 + DCA TMP2 /FOR EACH TMP2, ALL TMP3 WILL + /BE COMPARED TO DETERMINE + /MINIMUM VALUE +ORDERA, AC0002 /FIND MINIMUM OF REMAINING + /ENTRIES IN LIST + TAD TMP2 + DCA TMP2 + TAD I TMP2 + SPA CLA + JMP DD /DONE; DELETE DUPLICATES + TAD TMP2 /START WITH CURRENT ENTRY + DCA TMP3 /AND COMPARE WITH REST +ORDERB, AC0002 /COMPARE WITH NEXT ENTRY + TAD TMP3 + DCA TMP3 + TAD I TMP3 + SPA CLA + JMP ORDERA /NO MORE REMAINING ENTRIES; + /ORDER NEXT ENTRY + TAD I TMP3 /COMPARE DEVICE CODES + CIA /12-BIT COMPARE + TAD I TMP2 + SPA SNA + JMP ORDERD /COMPARE 2ND WORD +ORDERC, CLA /DISORDERED; INTERCHANGE ENTRIES + TAD TMP2 + DCA TMP4 + TAD TMP3 + DCA TMP5 + JMS EXCH + ISZ TMP4 + ISZ TMP5 + JMS EXCH + JMP ORDERB /CONTINUE COMPARING TO FIND + /MINIMUM ENTRY + +/RETURN FROM "ORDER" +DD2, DCA I TMP2 /STORE TERMINATOR + JMP I ORDER /AND RETURN + +/SUBROUTINE TO INTERCHANGE TWO ENTRIES +EXCH, 0 + TAD I TMP4 + DCA TMP6 + TAD I TMP5 + DCA I TMP4 + TAD TMP6 + DCA I TMP5 + JMP I EXCH + + PAGE + /CONTINUATION OF ORDERING SUBROUTINE +ORDERD, SZA CLA /COMPARE DEVICE CODES + JMP ORDERB /ALREADY ORDERED OK + TAD TMP2 /PREPARE TO COMPARE 2ND WORD + DCA AUTO2 /(BLOCK NR) + TAD TMP3 + DCA AUTO3 + TAD I AUTO3 + STL CIA /13-BIT NEGATE + TAD I AUTO2 /13-BIT COMPARE + SNL SZA + JMP ORDERC /DISORDERED; INTERCHANGE + SZA CLA + JMP ORDERB /ALREADY ORDERED OK + AC2000 /DEVICE CODE AND BLOCK NR + /BOTH EQUAL: A DUPLICATE ENTRY! + /SET EARLIER COPY TO SPECIAL + /VALUE (2000); LATER IT WILL + /BE DELETED FROM LIST. + DCA I TMP2 + JMP ORDERA /CONSIDER IT ORDERED AND + /ORDER NEXT ENTRY. +DD, TAD TMP1 /LIST IS NOW ORDERED. SCAN + /LIST, COMPRESSING OUT ANY + /"2000" VALUES (DUPLICATE + /ENTRIES). + /INITIAL OUTPUT IS INPUT + DCA TMP2 +DD1, TAD I TMP1 /SCAN NEXT ENTRY + SPA + JMP DD2 /DONE + TAD (-2000) /TEST FOR DUPLICATE + SZA CLA + JMP DD3 /NO - COPY OVER + ISZ TMP1 /YES - IGNORE IT + ISZ TMP1 + JMP DD1 +DD3, TAD I TMP1 /COPY OVER INPUT TO OUTPUT + DCA I TMP2 /TO COMPRESS LIST. + ISZ TMP1 + ISZ TMP2 + TAD I TMP1 + DCA I TMP2 + ISZ TMP1 + ISZ TMP2 + JMP DD1 /SCAN NEXT ENTRY + /SUBROUTINE TO REPORT (TYPE) A BAD BLOCK LIST +REPORT, 0 + TAD (-4-1) /MAX ENTRIES ON FIRST LINE + DCA TMP2 + TAD I REPORT /ADDR OF HEADING MESSAGE + JMS TYPE + TAD (BBMSG) /"BAD BLOCKS:" + JMS TYPE + ISZ REPORT + TAD I REPORT /ADDRESS OF LIST + DCA TMP1 + ISZ REPORT + TAD I TMP1 /IS LIST NULL? + SMA CLA + JMP REP2 /NO + TAD (NNMSG) /YES - TYPE "NONE" + JMS TYPE +REP3, JMS CRLF /DONE + JMP I REPORT +REP2, TAD I TMP1 /TYPE NEXT ENTRY + SPA CLA + JMP REP3 /NONE - DONE + ISZ TMP2 /IS OUTPUT LINE FILLED? + JMP REP4 /NO + TAD (-10) /YES, PRINT CRLF + /MAX ENTRIES ON SUCCEEDING LINES + DCA TMP2 + JMS CRLF +REP4, TAD I TMP1 /VALID ENTRY: TYPE IT + TAD ("A) /CONVERT DEVICE CODE TO + /DEVICE LETTER AND TYPE IT. + JMS PRINT /"A","B","C" + JMS PRINTB /SPACE + ISZ TMP1 + TAD I TMP1 /BLOCK NR + JMS PRINTN /PRINT AS OCTAL NR + JMS PRINTB /2 SPACES + JMS PRINTB + ISZ TMP1 /NEXT ENTRY + JMP REP2 /TYPE NEXT ENTRY + /SUBROUTINE TO PRINT 5 DIGITS OF SERIAL NUMBER +DPSNH, 0 + TAD I TMP1 + RAR + JMS DPSNT /DIGITS 9-8, 4-3 + TAD I TMP1 + RAR /LINK=MSB OF DIGIT 7 OR 2 + STA CML /BACKUP BYTE POINTER AND + /CORRECT LINK FOR OVERFLOW. + TAD TMP1 + DCA TMP1 + RTL /LINK TO BIT [4]. + RAL + DCA TMP2 + TAD I TMP1 + BSW + AND (3) /BITS [3]. + TAD TMP2 /BITS [7]. + JMS DPSND /DIGIT 7, 2 + TAD I TMP1 + JMS DPSNT /DIGITS 6-5, 1-0 + STA + TAD TMP1 + DCA TMP1 + JMP I DPSNH + +/SUBROUTINE TO PRINT 2 DIGITS OF SERIAL NUMBER +DPSNT, 0 + DCA TMP2 + TAD TMP2 + RTR + RAR + JMS DPSND /2ND SIG. DIGIT + TAD TMP2 + JMS DPSND /1ST SIG. DIGIT + JMP I DPSNT + +/SUBROUTINE TO PRINT OCTAL DIGIT +DPSND, 0 + AND (7) + TAD ("0) + JMS PRINT + JMP I DPSND + + PAGE + /FATAL I/O ERROR ROUTINE +FATAL, TAD (FAMSG) + JMP ERROR /"FATAL I/O ERROR" AND QUIT. + +/SUBROUTINE TO READ-CHECK EVEN OR ODD SECTORS +/ON ONE TRACK +RCSUB, 0 + DCA RCSECT + TAD (-24) /NUMBER OF SECTORS + DCA TMP1 +RCLOOP, JMS RL01 /PERFORM READ + RLRD + X /MA (DON'T CARE) +RCTRK, 0 /TRACK +RCSECT, 0 /SECTOR + JMS RCBAD /ERROR RETURN: ADD BLOCK + /TO "NEW" BAD BLOCK LIST + ISZ RCSECT /NORMAL RETURN: INCREMENT + ISZ RCSECT /SECTOR + ISZ TMP1 + JMP RCLOOP + JMP I RCSUB /DONE + +/SAVE TRACK/SECTOR OF NEWLY-FOUND BAD BLOCK +RCBAD, 0 + TAD RCTRK + DCA I AUTO3 + TAD RCSECT + DCA I AUTO3 + ISZ BADCNT /ONLY ALLOW 64 + JMP I RCBAD + TAD (TOOMSG) /OVER 63 BAD BLOCKS +ERROR, JMS TYPE /SEVERE ERROR ENTRY POINT + TAD (ERRMSG) /"CANNOT FORMAT DISK" + JMS TYPE + JMP RE /RESTART ("DRIVE?") +BADCNT, 0 + /TERMINAL SUPPORT SUBROUTINES + +/FUNCTIONS: +/TYPE TYPE A STRING WHOSE ADDR IS IN AC (UNDERLINE +/ MEANS CRLF, 00 TERMINATES). +/GETKEY WAIT FOR A KEY, GET AND ECHO THE 7-BIT ASCII VALUE. +/PRINT PRINT ASCII CHAR. +/PRINTN PRINT OCTAL CONTENTS OF AC. +/CRLF PRINT RETURN/LINE FEED COMBINATION. +/PRINTB PRINT A BLANK CHAR. + +/INTERESTING LOCATIONS: +/TEMP TEMP STORAGE +/KEY LAST KEY TYPED + +TYPE, 0 + DCA TEMP + CLL +TY1, TAD I TEMP + SNL + BSW + AND (77) + SNA + JMP I TYPE + TAD (-37) /TEST FOR UNDERLINE CHAR + SZA + JMP TY2 + JMS CRLF + JMP TY3 +TY2, TAD (277) + AND (277) + TAD (240) + JMS PRINT +TY3, SNL CLA + ISZ TEMP + JMP TY1 + +GETKEY, 0 + KSF + JMP .-1 + JMS LOOK + JMS PRINT + TAD KEY + JMP I GETKEY + +LOOK, 0 + KRB + AND (177) + DCA KEY + TAD KEY + TAD (-3) + SNA CLA + JMP I (7605) + TAD KEY + JMP I LOOK + +PRINTN, 0 + DCA 0 + TAD (-4) + DCA TEMP +PR1, TAD 0 + RTL; RAL + DCA 0 + TAD 0 + RAL + AND (7) + TAD (260) + JMS PRINT + ISZ TEMP + JMP PR1 + JMP I PRINTN + +PRINT, 0 + TLS + TSF + JMP .-1 + CLA + KSF + JMP I PRINT + JMS LOOK + CLA + JMP I PRINT + +CRLF, 0 + TAD (215) + JMS PRINT + TAD (212) + JMS PRINT + JMP I CRLF + +PRINTB, 0 + TAD (240) + JMS PRINT + JMP I PRINTB + +/LITERALS + PAGE + /SUBROUTINE TO TRANSFER DATA TO/FROM RL01 DISK +/NOTE: ONLY ONE TRY IS ATTEMPTED! +RL01, 0 + TAD I RL01 /GET ARGUMENTS: FUNCTION + DCA FNC + ISZ RL01 + TAD I RL01 /MA + DCA MA + ISZ RL01 + TAD I RL01 /TRACK + DCA TRACK + ISZ RL01 + TAD I RL01 /SECTOR + BSW /CONVERT TO RL8A FORMAT + DCA SECTOR + ISZ RL01 + TAD TRACK /CALCULATE CYLINDER AND + CLL RAR /SURFACE FROM TRACK + DCA CYL + RTR + DCA SURF + JMS TRKCMP /COMPARE WITH CURRENT + /TRACK; IF SAME, DO THE + /TRANSFER +RETRY, RLDC /IF DIFFERENT, SEEK TO + /REQUESTED TRACK + /CLEAR CONTROLLER, AC +SEEK, IAC /SEEK WHEN CALLED FROM + /BELOW, ELSE RESET DRIVE + /REGISTERS (AC=1 TO RESET, + /AC=3 TO SEEK) + JMS IO /RESET DRIVE OR SEEK + JMP RETRY /ERROR RETURN + TAD (BYTE RLRH) /NORMAL RETURN: + /READ NEXT HEADER TO FIND + /CURRENT TRACK + JMS IO + JMP RETRY /ERROR RETURN + RRSI /NORMAL RETURN: + /GET HEADER BYTE #1 + BSW + AND (3) + DCA CURTRK /SAVE 2 LSB + RRSI /GET HEADER BYTE #2 + AND (377) /HARDWARE SHOULD DO THIS + CLL RTL + TAD CURTRK /ADD IN MSB + DCA CURTRK + JMS TRKCMP /COMPARE WITH CURRENT + /TRACK; IF SAME, DO THE + /TRANSFER + TAD CURTRK /OFF TRACK: SEEK TO TRACK. + CLL RAR /CONSTRUCT DIFFERENCE WORD FOR SEEK. + CIA + TAD CYL + SMA + JMP AROUND + CIA + SKP +AROUND, TAD (4000) /SET DIRECTION BIT IF TO HIGHER + /CYLINDER ADDRESS. + TAD SURF /ADD SURFACE BIT + RLCA /LOAD DIFFERENCE WORD + AC0002 /PREPARE FOR SEEK + JMP SEEK /LOOP BACK AND SEEK; THIS + /ENSURES THAT THE TRACK REACHED + /IS THE CORRECT ONE IN SPITE + /OF POSSIBLE RL01 SEEK + /UNRELIABILITY + /SUBROUTINE TO COMPARE REQUESTED TRACK WITH CURRENT +/(REMEMBERED) TRACK; IF SAME, DO TRANSFER. IF DIFFERENT, +/RETURN WITH AC=REQUESTED-CURRENT, LINK=1 +TRKCMP, 0 + TAD CURTRK + CIA + TAD TRACK + SZA CLA + JMP I TRKCMP /DIFFERENT; RETURN + TAD SECTOR /SAME: DO TRANSFER + /LOAD ALL REGISTERS + RLSA + TAD FNC /WC IS DOUBLED FOR BYTE MODE + AND (BYTE) + SZA CLA + TAD (-200) /2 PAGES + TAD (-200) /1 PAGE + RLWC + TAD SURF /HARDWARE SHOULD DO THIS + TAD CYL + RLCA + TAD MA + RLMA + TAD FNC + JMS IO /READ OR WRITE ONE SECTOR + JMP I RL01 /ERROR: TAKE ERROR RETURN + ISZ RL01 /TAKE NORMAL EXIT + JMP I RL01 + /SUBROUTINE TO DO RL01 I/O +IO, 0 + TAD DRIVE + RLCB /DO I/O OPERATION +WAIT, CLA /IN CASE NO RL01 PRESENT + KSF /WAIT UNTIL DONE + /RETURN TO MONITOR IF + /USER TYPES CTRL,C + JMP WAIT2 + TAD (7600) + KRS + TAD (-7603) + SNA CLA + JMP I (MON) +WAIT2, RLSD + JMP WAIT + RLSE + ISZ IO /NORMAL RETURN + JMP I IO /ERROR RETURN + /DATA +TRACK, 0 /REQUESTED TRACK +CURTRK, 2000 /CURRENT TRACK (INITIALLY + /ILLEGAL TO FORCE HEADER + /READ AND SEEK IF NECESSARY) +SECTOR, 0 +CYL, 0 +SURF, 0 +FNC, 0 +MA, 0 + + PAGE + /TEXT STRINGS + +IDMSG, TEXT "RLFRMT V??_" + *.-2 + VERSION+60^100+PATCH + *.+2 +MSG, TEXT "_DRIVE ? " +BDMSG, TEXT "_PLEASE SPECIFY DRIVE NUMBER (0-3) ON WHICH_" + *.-1 + TEXT "PACK TO BE FORMATTED IS MOUNTED._" +FAMSG, TEXT "_FATAL I/O ERROR" +SERMSG, TEXT " DISK PACK SERIAL NUMBER " +TOOMSG, TEXT "_OVER 63 NEWLY-FOUND BAD BLOCKS" +ERRMSG, TEXT "_CANNOT FORMAT DISK_" +ADDMSG, TEXT "_WARNING: AN ADDITIONAL BAD BLOCK FOUND." + *.-1 + TEXT "_ZERO DISK BEFORE USE!_" +OVFMSG, TEXT "_OVER 15 BAD BLOCKS ON ONE DEVICE" +ZERMSG, TEXT "_WARNING: BAD BLOCK IN SYSTEM AREA._DO NOT USE AS SYSTEM DISK!_" +UNFMSG, TEXT "_UNFORMATTED (NEW)" +FRMMSG, TEXT "_OS/8 (OLD)" +BDFMSG, TEXT " DISK._WARNING: ALL FACTORY-WRITTEN LISTS DESTROYED._" +FACMSG, TEXT "_FACTORY-DETECTED" +OLDMSG, TEXT "_PREVIOUS OS/8" +NEWMSG, TEXT "_NEWLY-FOUND" +FINMSG, TEXT "_NEW OS/8" +BBMSG, TEXT " BAD BLOCKS: " +NNMSG, TEXT "NONE" +FMTMSG, TEXT "_FORMAT PACK WITH THIS NEW LIST? " +DNMSG, TEXT "_DONE_" +WRMSG, TEXT "_PLEASE WRITE-ENABLE DRIVE, THEN HIT 'RETURN'._" + +/OTHER DATA +BBCTL, AANDB /OS/8 BAD BLOCK CONTROL LIST + /LIST ADDRESS + 0 /DEVICE CODE + AANDB+20 /LIST ADDRESS + 1 /DEVICE CODE + C /LIST ADDRESS + 2 /DEVICE CODE + 0 /TERMINATOR + +FACCTL, FACTRY+3 /CONTROL LIST TO CHECK VALIDITY + /OF FACTORY-WRITTEN BBLS. + /POINTER BEFORE 4 BYTES TO TEST. + 0 /VALUE TO TEST FOR. + FACTRY+373 /POINTER. + 377 /VALUE. + 0 /TERMINATOR. + +$ ADDED src/os8-v3f/RLSY.PA Index: src/os8-v3f/RLSY.PA ================================================================== --- /dev/null +++ src/os8-v3f/RLSY.PA @@ -0,0 +1,523 @@ +/RLSY: RL01 SYSTEM HANDLER +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /RL01 SYSTEM HANDLER + + VERSION="A&77 + +/NOTES: +/1. PRE-OMNIBUS COMPUTERS NOT SUPPORTED. + +/EDIT HISTORY: +/21-OCT-77 DAVID SPECTOR: CREATION + +/INSTRUCTIONS THAT GENERATE CONSTANTS + +AC0001=CLA IAC +AC0002=CLA CLL CML RTL +AC0003=CLA CLL CML IAC RAL /* +AC0004=CLA CLL IAC RTL /* +AC0006=CLA CLL CML IAC RTL /* +AC0100=CLA IAC BSW /* +AC2000=CLA CLL CML RTR +AC3777=CLA CLL CMA RAR +AC4000=CLA CLL CML RAR +AC5777=CLA CLL CMA RTR +AC6000=CLA CLL CML IAC RTR /* +AC7775=CLA CLL CMA RTL +AC7776=CLA CLL CMA RAL + +/* USE ONLY ON VT-78 AND PDP-8E,F,M,A + +/ID CODE AT START OF BAD BLOCK LIST (BBL) + ID=123 + /RL01 DEFINITIONS + +RLIOT=6600 +RLDC=RLIOT 0 /CLEAR DEVICE +RLSD=RLIOT 1 /SKIP IF DONE +RLMA=RLIOT 2 /LOAD MEM ADDR +RLCA=RLIOT 3 /LOAD REGISTER "A" +RLCB=RLIOT 4 /LOAD REG "B" AND EXECUTE +RLSA=RLIOT 5 /LOAD SECTOR ADDR + /RLIOT 6 UNUSED +RLWC=RLIOT 7 /LOAD WORD COUNT +RRER=RLIOT 10 /READ ERROR REG +RRWC=RLIOT 11 /READ WORD COUNT +RRCA=RLIOT 12 /READ REG "A" +RRCB=RLIOT 13 /READ REG "B" +RRSA=RLIOT 14 /READ SECTOR ADDR +RRSI=RLIOT 15 /READ SILO BYTE + /RLIOT 16 UNUSED +RLSE=RLIOT 17 /SKIP IF ERROR +/RLCB FUNCTION BITS: + RLMT=0 /MAINTENANCE MODE + RLRE=1 /RESET DRIVE ERRORS + RLST=2 /READ STATUS REGS INTO SILO + RLSK=3 /SEEK + RLRH=4 /READ HEADER + RLWR=5 /WRITE + RLRD=6 /READ + RLRN=7 /READ WITH NO HEADER CHECK +/BIT DEFINITIONS IN REGISTERS: +BYTE=1000 /BYTE TRANSFER MODE + /HEADER BLOCK FOR USE BY "BUILD" + + *0 + -2 /- NR. OF ENTRY POINTS + +/FORMAT OF ENTRIES IN HEADER BLOCK: +/WORD DESCRIPTION +/1 GROUP NAME (4 CHAR) +/3 DEVICE NAME (4 CHAR) +/5 DCB WORD FOR AN RL (TYPE 26) DIRECTORY DEVICE, +/ NO MULTIPLE PLATTERS +/6 2-PAGE/SYS/CORESIDENT INDICATOR, OFFSET +/7 0 (UNUSED WORD) +/10 NUMBER OF BLOCKS IN DEVICE + +DEVICE RLSY;DEVICE SYS;4260;SYS&177+6000;0;7761 +DEVICE RLSY;DEVICE RL0A;4260;SYS&177+5000;0;7761 +/DEVICE RLSY;DEVICE RL0B;4260;RL0B&177+5000;0;7761 + /RL01 SECONDARY BOOTSTRAP + +/SYSTEM MAP: +/BLOCK CYL. SURF. SECTOR CONTENTS +/0 0 0 20 SECONDARY BOOTSTRAP +/0 0 0 22 FIELD 0 RESIDENT +/66 1 1 1 FIELD 1 RESIDENT +/66 1 1 3 FIELD 2 RESIDENT + +/RESIDENT MONITOR CODE OCCUPIES LAST PAGE OF FIELD +/FIELD 0 PAGE IS MONITOR CODE AND SYSTEM HANDLER +/FIELD 1 PAGE IS MONITOR TABLES +/FIELD 2 PAGE IS SYSTEM HANDLER + + BOOTA-BOOTB /-LENGTH FOR "BUILD" + + RELOC 0 /WILL RUN AT 00000 + +BOOTA, /START OF BOOTSTRAP CODE + +/DATA +C16, 16 +C26, 26 +C300, 300 +C2001, 2001 +C6001, 6001 +C7600, 7600 +C7605, 7605 +SECT, 2200 /INITIAL BLOCK 0 VALUE +SURCYL, 0 /INITIAL BLOCK 0 VALUE + + ZBLOCK 31-2-. /LOCATE "IOSUB" (SEE BELOW) + +FUNC, /TEMPORARY STORAGE FOR RL01 + /FUNCTION WORD +IOSUB, BOOT /SUBROUTINE TO DO I/O; MATCHES + /SIMILAR SUBR IN PRIMARY BOOTSTRAP + /INITIAL VALUE WILL START SEC- + /ONDARY BOOTSTRAP WHEN IT HAS BEEN + /COMPLETELY READ IN. + RLCB /EXECUTE RL01 FUNCTION + RLSD /WAIT UNTIL DONE. NOTE: THIS WORD + /AND THE NEXT ONE MUST BE IN THE + /SAME LOCATIONS AS THEIR COUNTER- + /PARTS IN THE PRIMARY BOOTSTRAP. + JMP .-1 + RLSE + JMP I IOSUB /NO ERRORS: RETURN + JMP . /ERROR OCCURRED: LOOP IN PLACE AS + /A CLEAR INDICATION THAT BOOTSTRAP + /OPERATION FAILED. + +/START OF SECONDARY BOOTSTRAP OPERATIONS +BOOT, AC0006 /AC=READ FUNCTION + JMS READ /READ FIELD 0 RESIDENT + RLDC /CLEAR CONTROLLER REGISTERS IN + /PREPARATION FOR SEEK + TAD C6001 /DIFFERENCE WORD FOR CYL 1 SURF 1 + RLCA /LOAD "A" + AC0003 /AC=SEEK FUNCTION + JMS IOSUB /SEEK + AC0100 /AC=SECTOR 1 + DCA SECT + TAD C2001 /AC=CYL 1 SURF 1 + DCA SURCYL + TAD C16 /AC=READ FUNCTION + JMS READ /READ FIELD 1 RESIDENT + TAD C300 /AC=SECTOR 3 + DCA SECT + TAD C26 /AC=READ FUNCTION + JMS READ /READ FIELD 2 RESIDENT + CDF 00 /JUST IN CASE + JMP I C7605 /START KEYBOARD MONITOR + +/SUBROUTINE TO READ ONE SECTOR INTO ONE PAGE +READ, 0 + DCA FUNC /SAVE FUNCTION WORD + TAD SECT + RLSA /LOAD SECTOR ADDRESS + TAD C7600 + RLWC /LOAD WORD COUNT + TAD SURCYL + RLCA /LOAD REGISTER "A" + TAD C7600 + RLMA /LOAD MA (ALL READS ARE INTO + /LAST PAGE OF FIELDS) + TAD FUNC /RETRIEVE FUNCTION WORD + JMS IOSUB /DO THE READ + JMP I READ /NO ERROR: RETURN + +BOOTB, /END OF BOOTSTRAP CODE + + RELOC + /RL01 SYSTEM HANDLER CODE + + *200 + RELOC 7600 + + ZBLOCK 7 /REQUIRED BY BUILD + +/ENTRY POINT FOR SYS +SYS, VERSION + CLA +SWITCH, JMP START /CHANGED TO "JMP SET" + /BY ONCE-ONLY CODE AT "START" + 3 /THIS IS A FLAG TO OS/8 THAT + /THIS IS A 2-PAGE HANDLER. + +/----- BAD BLOCK LIST (BBL) STARTS HERE +/ AND CONTINUES FOR 21 OCTAL LOCATIONS + +BBL, + +/ONCE-ONLY DATA +JMPSET, JMP SET +COUNT, -10 +ADDR, BARG +ABRTN, BRTN +ACDIF, CIF CDF 00 + +/ONCE-ONLY PARAMETERS FOR 2ND PAGE TO READ IN +/THE BAD BLOCK LIST (BBL) FOR DEVICE RL0A +LIST, ARTN /BARG: RETURN TO SELF + 1400 /SECTOR: SECTOR 14 + 0 /TRACK: 0 + BBL /MA: MA + 200 /PAGES: 1 PAGE COUNT + RLRD /FNC: READ FUNCTION + -21 /WC: LENGTH OF READ + 2000 /CURTRK: FORCE HEADER READ + /ONCE-ONLY CODE TO READ IN BAD BLOCK LIST (BBL) + +START, RDF /ONCE-ONLY CODE. DESTROYED WHEN + /BBL IS READ IN ON TOP OF IT. + /FIRST, SAVE CALLING FIELD OVER + /THE READ-IN OF THE BBL. + TAD BACK /(INITIALLY CONTAINS A CDF) + DCA BACK + TAD JMPSET /NEXT, RESET "SWITCH" TO SKIP + /AROUND ONCE-ONLY CODE FROM + /NOW ON. + DCA SWITCH + CDF 20 +LOOP, TAD LIST /RESET ONCE-ONLY DATA IN 2ND PAGE + DCA I ADDR /(THIS IS REQUIRED BECAUSE "BUILD" + ISZ LOOP /DOESN'T ALLOW ONCE-ONLY CODE IN + ISZ ADDR /2ND PAGE OF 2-PAGE SYSTEM HANDLERS) + IFNZRO .-7642 + CDF 20 /******** MUST BE AT LOCATION 7642 + /******** FOR FRTS.SV! + ISZ COUNT + JMP LOOP + TAD ACDIF /ANOTHER ONCE-ONLY RESET + DCA I ABRTN + JMS GO /READ IN BBL +BACK, CDF /RESTORE CALLING FIELD + +/----- ONCE-ONLY CODE ENDS HERE + +/FALL THROUGH TO SET UP AND DO THE TRANSFER + /SET UP AND DO THE TRANSFER +SET, TAD BASE /INITIALIZE BAD BLOCK + /MAPPING + DCA MAP + TAD SYS /ADDR OF ARG LIST + JMS GO /CALL 2ND PAGE SETUP SUBROUTINE + /DATA FIELD IS 2 ON RETURN +MAP, TAD /MAP AROUND BAD BLOCKS, IF + /ANY. LOOK AT NEXT BAD BLOCK. + SNA /IF 0, TERMINATOR + JMP MAPPED + STL CIA /IF NOT, 13-BIT NEGATE + TAD I ABLOCK /SUBTRACT FROM CURRENT BLOCK + SZL CLA /SKIP IF BLOCK IS GREATER THAN + /OR EQUAL TO BAD BLOCK + JMP MAPPED /ELSE NO MAPPING TO DO + ISZ MAP +NEXT, ISZ I ABLOCK /INCREMENT CURRENT BLOCK, + /EITHER DURING TRANSFER OR + /TO MAP AROUND BAD BLOCK + JMP MAP /CONTINUE MAPPING UNTIL DONE + CIF 20 /IF BLOCK EVER OVERFLOWS TO 0, + JMP ERROR /TAKE ERROR RETURN. + +MAPPED, TAD I ABLOCK /CALCULATE TRACK AND SECTOR + /FROM BLOCK + RTR + RTR + AND A377 + DCA I ATRACK + TAD I ABLOCK + AND A17 + CLL RTL + TAD A7751 + SPA + TAD A47 + BSW + DCA I ASECT + JMS GO /TRANSFER 1ST PAGE OF BLOCK + TAD A200 /INCREMENT MA AND SECTOR + TAD I AMA + DCA I AMA + TAD A200 + TAD I ASECT + DCA I ASECT + JMS GO /TRANSFER 2ND PAGE OF BLOCK + TAD A200 /INCREMENT MA + TAD I AMA + DCA I AMA + JMP NEXT /CONTINUE WITH NEXT BLOCK, + /IF ANY + /SUBROUTINE TO CALL 2ND PAGE SUBR TO DO TRANSFER +GO, 0 + CIF 20 + JMS MAIN +ARTN, /ON BBL READ, RETURN HERE + /IF IO ERROR. + /(ERROR WILL BE DETECTED + /DURING 2ND PAGE VALIDITY + /CHECK.) + CDF 20 /DATA FIELD=2ND PAGE + JMP I GO + /DATA +ASECT, SECTOR +ATRACK, TRACK +ABLOCK, BLOCK +BASE, TAD BBL+1 /SKIP ID CODE WORD +AMA, MA +A17, 17 +A47, 47 +A200, 200 +A377, 377 +A7751, 7751 + + ZBLOCK 7744-. /UNUSED + /SECOND PAGE + + RELOC + *400 + RELOC 7600 + +/SUBROUTINE TO SETUP OR TRANSFER +MAIN, 0 + SNA /AC TELLS WHICH + JMP TRANS /NON-ZERO: TRANSFER +SETUP, DCA BARG /SAVE ADDRESS OF ARGUMENTS + AC2000 /SET FOR INITIAL HEADER READ + DCA CURTRK /(2000 IS AN ILLEGAL TRACK) + TAD B7600 /SET FOR FULL PAGE TRANSFERS + DCA WC + TAD I BARG /GET HANDLER FUNCTION WORD + AND B4070 /CONVERT TO RL01 FUNCTION + SPA + TAD B3777 + TAD BRLRD + DCA FNC + TAD I BARG + RAL /CONVERT TO PAGE COUNT + AND B7600 + DCA PAGES + ISZ BARG + TAD I BARG /GET MA + DCA MA + ISZ BARG + TAD I BARG /GET BLOCK + DCA BLOCK + ISZ BARG + RDF /SAVE CALLING FIELD + TAD BCDIF /FOR RETURN FROM HANDLER + DCA BRTN + CDF 00 /CHECK BBL FOR VALIDITY - + TAD I BBBL /A VALID BBL HAS AN ID + TAD CHECK /CODE IN ITS FIRST LOCATION + SZA CLA + JMP ERROR /INVALID BBL: TAKE ERROR + /RETURN FROM HANDLER +GOBACK, /RETURN TO 1ST PAGE +BCDIF, CIF CDF 00 + JMP I MAIN + /TRANSFER (READ OR WRITE) +TRANS, AC7775 /SET FOR 3 TRIES + DCA ERRCNT + TAD TRACK /CALCULATE CYLINDER AND + /SURFACE FROM TRACK + CLL RAR + DCA CYL + RTR + DCA SURF + JMS TRKCMP /COMPARE TRACK WITH LAST + /ONE TRANSFERRED; IF THE + /SAME, DO TRANSFER. +RETRY, RLDC /IF DIFFERENT, OR IF RE- + /TRYING, SEEK TO TRACK; + /CLEAR CONTROLLER REGISTERS + /FOR SEEK +SEEK, IAC /AC=1 FOR RESETTING DRIVE + /REGISTERS (ERRORS), AC=3 + /FOR DOING SEEK + JMS IO /DO A RESET OR A SEEK + TAD HEADER /AC=READ HEADER FUNCTION + JMS IO /READ NEXT HEADER + RRSI /GET HEADER BYTE #1 + BSW /CALCULATE TRACK + AND B3 + DCA CURTRK + RRSI /GET HEADER BYTE #2 + AND B377 + CLL RTL + TAD CURTRK + DCA CURTRK + JMS TRKCMP /COMPARE CURRENT AND REQUESTED + /TRACK; IF SAME, DO TRANSFER + SPA /IF DIFFERENT, SEEK: CALCULATE + CLL CIA /DIFFERENCE WORD + RAR + TAD SURF + RLCA /LOAD REGISTER "A" + AC0002 /PREPARE FOR SEEK + JMP SEEK /LOOP BACK TO ENSURE THAT TRACK + /REACHED IS REALLY THE DESIRED + /TRACK, IN CASE OF RL01 SEEK + /UNRELIABILITY. + /SUBROUTINE TO COMPARE CURRENT TRACK WITH REQUESTED +/TRACK AND DO TRANSFER IF THE SAME +TRKCMP, 0 + TAD CURTRK + CIA + TAD TRACK + STL /SET DIRECTION BIT IN + /DIFFERENCE WORD IF DIFF- + /ERENCE IS POSITIVE. + SZA /SAME? + JMP I TRKCMP /NO + TAD SECTOR /YES; LOAD DRIVE REGISTERS + RLSA + TAD WC + RLWC + TAD SURF + TAD CYL + RLCA + TAD MA + RLMA + TAD FNC + JMS IO /READ OR WRITE + TAD B7600 /COUNT PAGES TRANSFERRED + TAD PAGES + SNA + JMP DONE /NO MORE TO GO + DCA PAGES + JMP GOBACK /MORE TO GO; RETURN TO + /1ST PAGE + +/SUBROUTINE TO DO RL01 I/O +IO, 0 + RLCB /EXECUTE FUNCTION (DRIVE 0) + RLSD /WAIT UNTIL DONE + JMP .-1 + RLSE /ANY ERRORS? + JMP I IO /NO; RETURN + ISZ ERRCNT /YES; MORE RETRIES LEFT? + JMP RETRY /YES, RETRY IT. +ERROR, AC4000 /NO, TAKE HANDLER ERROR + SKP /RETURN. +DONE, ISZ BARG /NORMAL HANDLER RETURN +BRTN, CIF CDF 00 /RESTORE CALLING FIELD; + JMP I BARG /INITIALLY, RETURN TO 1ST PAGE + /AFTER BBL READ-IN. + /DATA +B3, 3 +B377, 377 +B3777, 3777 +B4070, 4070 +B7600, 7600 +HEADER, BYTE RLRH +BRLRD, RLRD +CHECK, -ID +BBBL, BBL +ERRCNT, 0 +BLOCK, 0 +SURF, 0 +CYL, 0 + +/VARIABLES INITIALIZED TO PERFORM INITIAL BBL READ-IN +BARG, ARTN /INITIALLY, RETURN TO 1ST PAGE + /AFTER BBL READ-IN. +SECTOR, 1400 /BBL: SECTOR 14 (TRACK 0) +TRACK, 0 +MA, BBL /INITIAL BBL READ +PAGES, 200 /INITIAL BBL READ +FNC, RLRD /INITIAL BBL READ +WC, -21 /INITIAL BBL READ +CURTRK, 2000 /INITIAL HEADER READ AND + /SEEK IF REQUIRED. + + ZBLOCK 7774-. /UNUSED + + ZBLOCK 4 /RESERVED FOR USE BY BATCH + /IN 12K SYSTEMS. + + RELOC +$ ADDED src/os8-v3f/RTL.PA Index: src/os8-v3f/RTL.PA ================================================================== --- /dev/null +++ src/os8-v3f/RTL.PA @@ -0,0 +1,1753 @@ +/FORTRN 4 RTS LOADER +/ +/ VERSION 5A PT 16-MAY-77 +/ +/ +/ +/ +/ +// +/ +/ +/ +/ +/COPYRIGHT (C) 1974, 1975 +/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. +/ +/ +/ +/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A +/SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- +/SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER +/COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE +/TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO +/AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE +/SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. +/ +/ +/THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT +/NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL +/EQUIPMRNT COROPATION. +/ +/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS +/SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. +/ +/ +/ +/ +/ +/ + /FORTRAN 4 RTS LOADER - RL +/WITH DOUBLE PRECSION - MKH +/AND RTS-8 SUPPORT - R. LARY + +/LAST EDITED 5/21/74 +/ +/ CHANGES FOR OS/78 AND OS/8 V3D BY P.T. 5/1/77 +/ .FIXED THE D AND B FORMAT (FPP) BUG +/ .FIXED FIELD OVERFLOW BUG(NO. OF ASTERISKS PRINTED) +/ + +/PAGE 0 LOCATIONS FOR RTS LOADER + +X0= 10 +X1= 11 +X2= 12 +X3= 13 + +HADR= 20 +UNIT= 21 +HCWORD= 22 +MXFLD= 23 +HLDADR= 24 +HGHFLD= 25 +HGHADR= 26 +RLTMP= 27 +HDIFF= 30 +CFLAG= 31 + +/DURING MOST OF THE LOAD OPERATION A SECTION OF FIELD 0 RTS +/IS MOVED UP INTO FIELD 1 AND THE VACATED AREA OF FIELD 0 IS USED +/TO RUN THE COMMAND DECODER AND TO ACCUMULATE DEVICE HANDLERS. + +/*K* THEREFORE, IF THE RTS LOADER IS TO MODIFY ANY CODE BETWEEN +/"F0HBEG" AND "F0HEND" IT MUST MODIFY IT IN FIELD 1 IN THE "F0TO" AREA. + +F0HBEG= 0 +F0HEND= 3000 +F0HSAV= 7000 /400 WORDS WHERE DEVICE HANDLERS ARE TEMPORARILY SAVED + /SO THAT THEY WON'T INITIALIZE THEMSELVES WRONG + /RTS LOADER TABLES + + *2000 + +IONTBL, ZBLOCK 100 /INTERRUPT ENABLE TABLE - LOW BIT ONLY +HCWTBL, ZBLOCK 14 /HANDLER CONTROL WORD - ONE PER PAGE (LOTSA WASTE) +TFTABL, ZBLOCK 45 /TENTATIVE FILE SAVE TABLE +DVTEMP, ZBLOCK 17 /HANDLER ENTRY TABLE SAVE AREA + + *IONTBL+5 /RK8 / RK8E + 1 + *IONTBL+16 /DTA + 1 + *IONTBL+6 /RF08 IN 4 FLAVORS + 1;1;1;1 + *IONTBL+0 /TTY + 2 /FORMS CONTROL ON TTY + *IONTBL+4 /LPT + 2 /FORMS CONTROL ON LPT + *IONTBL+23 + 1 + *IONTBL+25 + 1 + PAGE + /RTS LOADER + +RTSLDR, JMS I (RTINIT + JMS I (RTINIT /INITIALIZE WHETHER CHAINED TO OR NOT + JMP NOCD +LICD, JMS I (200 + 5 + 1404 /.LD DEFAULT EXTENSION +NOCD, JMS I (TSTSWS /TEST /E,/P,/V AND /H SWITCHES + TAD I (7617 + SNA + JMP LICD + AND (17 + JMS I (GETHAN /GET HANDLER TO LOAD WITH + 0 /DON'T PUT IT ANYWHERE + TAD I (7620 + DCA LIBLK + JMS I (SVHND /COPY HANDLER TO AVOID BAD INITIALIZATION + CIF 0 + JMS I HLDADR + 0100 +LHDR, QLHDR +LIBLK, 0 + JMP LDIOER + JMS I (RSTHND /RESTORE VIRGIN COPY OF HANDLER + CDF 0 + TAD HADR + DCA I (OVHND + TAD HCWORD + DCA I (OVHCDW + TAD (QUSRLV-1 + DCA X0 + AC7776 + TAD I LHDR + SZA CLA /VERIFY LOADER IMAGE INPUT + JMP NOTLI /GOOD THING WE CHECKED! + TAD DPFPP + TAD I (QDPFLG /CHECK IF TRYING TO USE D.P. WITHOUT OPTION + SMA CLA + JMP .+3 + JMS I (RLERR /YES - PRINT WARNING MESSAGE + NODPMS /BUT LET THE FOOL GO ON + /SET UP RTS TABLES FROM LOADER IMAGE + + CDF 0 + TAD (OVLYTB-1 + DCA X1 + TAD (-10 + DCA RLTMP +OVRELP, TAD I X0 + DCA I X1 /MOVE USER OVERLAY INFO INTO SWAP TABLE, + TAD I X0 + DCA I X1 + TAD I X0 + TAD LIBLK /RELOCATING THE BLOCK NUMBERS + DCA I X1 + TAD I X0 + DCA I X1 + ISZ RLTMP + JMP OVRELP + TAD I (QRTSWP + AND (7770 /TURN THE LOADER INITIAL SWAP WORD + DCA I (STSWAP+2 + TAD I (QRTSWP /INTO A DUMMY SWAP WORD AND A JUMP WORD + AND (7 /SO THAT WE CAN HALT BETWEEN + TAD (JA /LOADING AND STARTING USERS PROGRAM. + DCA I (STJUMP + TAD I (QRTSWP+1 + DCA I (STJUMP+1 + TAD I (QHGHAD + DCA HGHFLD + CLA IAC + TAD HGHFLD + CMA + DCA I (FCNT + TAD I (QHGHAD+1 + DCA HGHADR + JMS I (GETFIL /GET USER I/O FILES IF ANY + TAD I (OS8DAT /SALT AWAY OS/8 DATE WORD + DCA I (VDATE-F0HBEG+F0TO + STL CLA + 6141 /TEST IF WE ARE ON A PDP-12 + 0261 /ROL I 1 - PUTS LINK IN AC11 + 0002 /PDP + DCA I (V8OR12+1-F0HBEG+F0TO + JMS I (MOVE + CDF 10 + SPSTRT-1 /MOVE SPECIAL /P START CODE TO LOC 200 + CDF 10 + 200-F0HBEG+F0TO-1 /(RELOCATED 200, THAT IS) + -3 + JMP I (MOVCOR + +DPFPP, 3777 /0 IF D.P. FPP AVAILABLE + NOTLI, JMS I (RLERR + NOLI + JMP LICD + +LDIOER, JMS I (RLERR + LIOEMS + CDF CIF 0 + JMP I (7605 + PAGE + /FIGURE OUT CORE LIMITS AND WRITE OUT PG 17600 + +MOVCOR, TAD I (HTOP + TAD HDIFF /GET BOTTOM OF HANDLER AREA + CIA + CLL /LENGTH OF HANDLER AREA IN AC + TAD HGHADR + SZL /TRICKY CODE - IF (L,AC)=0, AC GETS -1 + STA /IF (L,AC) =0XXXX, AC GETS 0 + SNA CLA /IF (L,AC) =1XXXX, AC GETS 1 + STL STA /THERE OUGHTA BE A SHORTER WAY - + RAL /I'D APPRECIATE HEARING ONE. + TAD HGHFLD /USE MAGIC NUMBER TO ADJUST HGHFLD + CIA /BEFORE WE COMPARE IT TO TOP-OF-CORE + TAD MXFLD + SPA CLA + JMP TOOBIG /ALL THAT WORK FOR NOTHING! + TAD MXFLD + CLL RTL + RAL + TAD (CDF + DCA HCDF /PREPARE TO TRANSFER THE HANDLERS + JMS I (MOVE /BEFORE WE MOVE THE HANDLERS WE SHOULD WRITE + CDF 10 /OUT PAGE 17600 AND THE RTS CLEANUP CODE + TFTABL-1 /SINCE THE HANDLERS MAY OVERLAY THEM. + CDF 10 /SO FIRST MOVE THE TENTATIVE FILE TABLE + 7600-1 /INTO PAGE 17600 WHERE IT'S SAFE. + -45 + CIF 0 + JMS I (7607 + 4210 + 7400 + 37 /SUITABLE SCRATCH BLOCK + JMP SYSERR + TAD HDIFF + TAD (F0HEND /CHANGE HDIFF FROM AN OFFSET + DCA HDIFF /TO THE FIRST LOC ABOVE THE HANDLERS. + /SHUFFLE CORE AROUND AND START UP RTS + +HLOOP, STA + TAD HDIFF /WE HAVE TO MOVE THE HANDLERS IN A COCKEYED + DCA HDIFF /WAY SINCE WE MIGHT BE PARTIALLY SWAPPING + CDF 0 /CORE BETWEEN FIELD 0 (THE HANDLERS) AND + STA /FIELD 1 (WHERE WE SAVED FIELD 0) IN 8K SYSTEMS. + TAD HPTR1 + DCA HPTR1 + STA + TAD HPTR2 + DCA HPTR2 + TAD I HPTR1 +HCDF, HLT /MOVE A HANDLER WORD FROM FIELD 0 + DCA I HDIFF /TO FIELD N + CDF 10 + TAD I HPTR2 /MEANWHILE RESTORE FIELD 0 + CDF 0 + DCA I HPTR1 /FROM FIELD 1 + ISZ HMCT + JMP HLOOP /DO MORE THAN WE HAVE TO - IT CAN'T HURT + CDF CIF 0 + TAD (5606 + DCA I (7605 /SET UP OS/8 RETURN SEQUENCE TO TRAP TO RTS + TAD (PDPXIT + DCA I (7606 /AS RANDOM RESTARTS COULD BE FATAL. + FPICL /RE-INITIALIZE FPP (IF ANY) + FPCOM /CLEAR APT POINTER FIELD BITS (IF FPP) + CLA IAC + 6654 /LOAD PRINTER BUFFER ON ANALEX PRINTER + SZA CLA /IS ANALEX PRESENT? + JMP I (FPSTRT /NO - START UP + DCA I (LPTEST /IF ANALEX TAKE OUT LPT INTERNAL HANDLER +LP6652, 6652 /ALSO CLEAR ALL ANALEX FLAGS + DCA I (LPTSNA + 6662 /CLEAR BUFFER ON ANALEX + TAD (6651 + DCA I (LPTERR /REPLACE LP08 ERROR CODE BY ANALEX + TAD LP6652 /TO AVOID HANGING ON ANALEX POWER OFF. + DCA I (LPTERR+2 + JMP I (FPSTRT + +TOOBIG, JMS I (RLERR + TOOMCH +OS8RTN, CDF CIF 0 + JMP I (7605 + +SYSERR, JMS I (RLERR + SYSMSG + JMP OS8RTN + +HPTR1, F0HEND +HPTR2, F0TO+F0HEND-F0HBEG +HMCT, F0HBEG-F0HEND + /MOVE ROUTINE + +MOVE, 0 /GENERAL MOVE SUBROUTINE + CDF 10 + CLA + TAD MOVE + DCA X2 + TAD I MOVE + DCA FRMFLD + TAD I X2 + DCA X3 + TAD I X2 + DCA TOFLD + TAD I X2 + DCA X1 + TAD I X2 + DCA MVC +FRMFLD, HLT + TAD I X3 +TOFLD, HLT + DCA I X1 + ISZ MVC + JMP FRMFLD + CDF 10 + JMP I X2 +MVC, 0 + +HNDERR, JMS I (RLERR + TOMNYH + JMP OS8RTN + PAGE + /INITIALIZATION + +RTINIT, 0 + ISZ RTINIT /SKIP RETURN + JMS I (BAKTST /SEE IF WE'RE RUNNING IN BACKGROUND UNDER RTS-8 + CIF 0 + JMS I (CORE + DCA MXFLD + CLA IAC + JMS I (GETION /GET ION BIT FOR SYS HANDLER + DCA I (HCWTBL+13 /SAVE IT + SWAB /SET EAE MODE TO B (IF 8/E) + CLA IAC +EAEKIL, SHL /ZERO THIS LOCATION TO INHIBIT EAE + CLA IAC /LOW ORDER BITS 01 + TAD (-2 + SNA CLA /TEST FOR 8/E EAE + JMS I (MOVEAE /YES - SUBSTITUTE PACKAGES + TAD (APT + FPST /START FPP ON "STARTE;FEXIT" + JMP NOFPP /DIDN'T START + JMS I (MOVE + CDF 10 + FPPINT-1 /THE FPP HANDLER AND D.P. I/O PKG IS IN THE + CDF 0 /SAME LOCATIONS IN FIELD 1 AS THE + FPPINT-1 /FPP INTERPRETER IN FIELD 0. + -1000 /COUNT FOR DBL PREC SPACE + FPRST /FPP HAD BETTER BE DONE BY NOW!! + AND (4 /GET D.P. STATUS BIT + SNA CLA + JMP NOFPP /NO DOUBLE PRECISION + DCA I (DPFPP /SET FLAG TO INDICATE D.P. AVAILABLE + CDF 0 + TAD (DFMT + DCA I (DF /ENABLE D FORMAT + TAD (BFMT + DCA I (BF /AND B FORMAT + CDF 10 + NOFPP, JMS I (MOVE +RICDF0, CDF 0 + F0HBEG-1 + CDF 10 + F0TO-1 /MOVE LOWER F0 INTO F1 FOR SAFEKEEPING + F0HBEG-F0HEND + CDF 0 + TAD I (OSJSWD /GET OS/8 STATUS WORD + AND (6374 /FORCE BITS ON INDICATING NON-RESTARTABLE JOB + TAD (1003 /AND DESTRUCTIVE CALLS TO CD AND USR + DCA I (OSJSWD /MEANWHILE FORCING "BATCH SAVED" BIT OFF + TAD I (7612 + TAD (-3 /CHECK FOR IN-CORE TD8E'S + SZA CLA + JMP NOTDSY + TAD MXFLD + CLL RTL + RAL + TAD RICDF0 + DCA TD8EFG /SET TD8E FLAG WHICH IS ALSO CDF + TAD I (7642 + AND (70 + TAD RICDF0 /GET THE FIELD WE'RE COMING FROM + DCA TD8EFL + TAD TD8EFG + IAC + JMS I (TDSET /REDO THE CDF'S IN F0 + JMS I (MOVE +TD8EFL, CDF 20 + 7577 +TD8EFG, 0 + 7577 + -174 /SPARE BATCH PARAMETERS IN TOP FIELD + TAD MXFLD /SET FLAG IN CLEANUP ROUTINE + DCA I (TDEXFG /TO RESTORE TD8E HANDLER TO FIELD 2 +NOTDSY, CDF 10 + TAD MXFLD + TAD (-7 + SNA /32K? + JMP TAKCAR /YES - UNIQUE PROBLEMS + TAD (6 + SNA CLA /8K? + JMP ONLY8K /YES - IGNORE BATCH & TD8E CRAP + JMS I (GBFLG /GET BATCH FLAG + TAD TD8EFG + SNA CLA /IF NO BATCH OR TD8E'S, +ONLY8K, TAD (200 /USE ALL OF THE LAST FIELD. +STOHDF, TAD (-F0HEND-200 + DCA HDIFF /OTHERWISE USE ONLY UP TO 7600 + JMP I RTINIT + TAKCAR, JMS I (GBFLG /GET BATCH FLAG + SNA CLA + JMP NO32KB /NO BATCH - USE UP TO 77400 (TD8E ROM) + TAD (6 /BATCH - USE UP TO 67600 + DCA MXFLD + JMP STOHDF +NO32KB, TAD TD8EFG + SNA CLA /IF IN-CORE TD8E'S + TAD (7600 /LIMIT IS 77600 ELSE 77400 + JMP STOHDF + PAGE + GETHAN, 0 /GET HANDLER SUBROUTINE + AND (17 + DCA UNIT + DCA H1 + TAD UNIT + JMS I (200 + 12 /INQUIRE +H1, 0 + NOP /ERROR RETURN ALWAYS SKIPPED + TAD H1 + SNA + JMP NOTLDD /NOT IN CORE - MUST LOAD + JMS HCWTBA /IN CORE +GHEXIT, TAD I HCWPTR /GET CONTROL WORD FOR HANDLER PAGE + DCA HCWORD + TAD HLDADR + DCA HADR /ASSUME HANDLER PERMENANTLY RESIDENT + TAD (-4 + AND HCWORD + SNA CLA /WERE WE RASH? + JMP RESHAN /NO + TAD HADR + AND (177 + TAD (HPLACE /YES - I APOLOGIZE + DCA HADR +RESHAN, TAD I GETHAN /GET DSRN NUMBER + SNA + JMP I GETHAN /NO DSRN NUMBER + CLL RTL + RAL + TAD I GETHAN + TAD (DSRN-12 + DCA X0 /XR POINTS TO DSRN ENTRY + CDF 0 + TAD HADR + DCA I X0 /SEE PG 0, FLD 0 FOR DSRN FORMAT + TAD HCWORD + TAD CFLAG /THE C BIT REVERSES THE FORMS CTL BIT ON THIS FILE + AND (7773 /KILL ANY OVERFLOW + DCA I X0 + TAD HGHFLD + CLL RTL + RAL + TAD HGHADR + DCA I X0 /SAVE BUFFER ADDRESS, FIELD + TAD HGHADR + DCA I X0 /INITIALIZE WORD POINTER + TAD HGHADR + TAD (400 + SNA + ISZ HGHFLD /BUMP DOUBLEWORD BUFFER ADDRESS + DCA HGHADR + AC7775 + DCA I X0 /INITIALIZE CHAR CTR + CDF 10 + JMP I GETHAN /RETURN + /LOAD A NON-RESIDENT HANDLER + +NOTLDD, JMS GH + CLA IAC + JMS GH /TRY 1-PAGE AND THEN 2-PAGE ASSIGN + HLT /ARRRGHHHH!!! + +GH, 0 + DCA TPFLG + TAD HTOP + TAD (7600 /BUMP HANDLER CEILING DOWN + SNA + JMP I (HNDERR /CAN'T PUT HANDLER IN PAGE 0 + DCA HTOP + TAD TPFLG + TAD HTOP + DCA GHADR + TAD UNIT + JMS I (200 + 1 /FETCH HANDLER +GHADR, 0 + JMP I GH /FAILED! + TAD GHADR /SAVE ACTUAL LOAD ADDRESS + JMS HCWTBA /INDEX INTO HCW TABLE + TAD GHADR + AND (7600 + TAD HDIFF + DCA GHADR /SAVE RELOCATED HANDLER PAGE ADDRESS + TAD MXFLD /PUT ADDR IN BITS 0-3 AND FIELD IN BITS 6-8 + CLL RTL + RAL + TAD GHADR + DCA GHADR + TAD UNIT + JMS I (GETION /ION BIT INTO BIT 11, FORMS CTL BIT INTO BIT 10 + TAD GHADR + DCA I HCWPTR /STORE POINTER FOR THIS PAGE + JMP GHEXIT + HCWTBA, 0 + DCA HLDADR + TAD HLDADR + AND (7600 + CLL RTL + RTL + RTL /GET PAGE NUMBER + TAD (HCWTBL-24 + DCA HCWPTR /SAVE POINTER INTO TABLE + JMP I HCWTBA + +HTOP, F0HEND +HCWPTR, 0 +TPFLG, 0 + +SPSTRT, RELOC 200 / /P STARTUP CODE + SWAB /MAKE SURE EAE IS IN MODE B + JMP I .+1 /EXECUTES AT 200 + FPSTRT /START UP IN FLAG CLEARING CODE + RELOC + PAGE + /ROUTINE TO ACCEPT FILE SPECIFICATIONS + +GETFIL, 0 + CDF 10 + TAD I (OS8SWS-1 + SPA CLA /ALTMODE MEANS NO MORE SPECS + JMP I GETFIL +GETFCD, JMS I (SPMDCD /CALL CD IN SPECIAL MODE + TAD I (7600 + STL CIA + SNA /OUTPUT FILE? + TAD I (7605 + SNA /IN OR OUT FILE? + TAD I (OS8SWS+3 /NEITHER - HOW ABOUT INTERNAL HANDLER? + SNA CLA + JMP GETFIL+1 /NONE OF THE ABOVE + RAR /LINK MAGICALLY TELLS DIRECTION + DCA DIR + DCA DSRNUM + TAD I (OS8SWS+2 + AND (777 /SWITCHES 1-9 + SNA + JMP NONUM + CLL RTL +DNUMLP, ISZ DSRNUM + RAL + SMA + JMP DNUMLP /TRANSLATE SWITCH INTO NUMBER + TAD DIR /** AC IS NEGATIVE ** + SPA CLA + TAD (5 + TAD (7600 + DCA FPTR /POINT TO FILE UNIT + TAD I FPTR + SNA + JMP INTHND /NO FILE - GET HANDLER FROM INTERNAL LIST + JMS I (GETHAN /GET HANDLER - XR10 POINTS INTO DSRN +DSRNUM, 0 /DSRN ENTRY NUMBER + TAD DIR + STL RTL /GENERATE 2 OR 3 (LOOKUP OR ENTER) + DCA LKPNTR + TAD I FPTR /GET UNIT AND REQUESTED BLOCK COUNT (IF ENTER) + ISZ FPTR /BUMP POINTER SO IT POINTS TO THE FILE NAME + DCA FUNIT /SAVE UNIT NUMBER A SEC + TAD I FPTR /WATCH OUT FOR NULL FILE NAMES + SNA CLA /AS THEY WILL FAIL ON LOOKUPS + JMP NONAME /ON OUTPUT-ONLY NON-DIRECTORY DEVICES + JMS I (SVHND /SAVE HANDLER + TAD FUNIT + JMS I (200 +LKPNTR, 0 /LOOKUP OR ENTER +FPTR, 0 /FILE NAME +FUNIT, 0 /GETS LENGTH + JMP FILERR /SOMETHING NOT KOSHER + JMS I (RSTHND /RESTORE VIRGIN COPY OF HANDLER + STDSRN, TAD FPTR + CDF 0 + DCA I X0 /SAVE STARTING BLOCK + DCA I X0 /RELATIVE BLOCK + TAD FUNIT + SNA + IAC /FUDGE NON-DIRECTORY DEVICES VERY LARGE + CIA /TURN NEGATIVE COUNT TO POSITIVE + DCA I X0 /LENGTH + TAD X0 + DCA FPTR /SAVE PTR TO LENGTH WORD + CDF 10 + TAD DIR + SMA CLA /TENTATIVE FILE? + JMP GETFIL+1 + TAD FPTR /YES - STORE POINTER TO LENGTH WORD OF DSRN + DCA I TFPTR /IN TENTATIVE FILE TABLE ENTRY + JMS I (MOVE + CDF 10 + 7600-1 + CDF 10 +TFPTR, TFTABL /SAVE FILE NAME AND UNIT IN + -5 /TENTATIVE FILE TABLE + TAD TFPTR + TAD (6 + DCA TFPTR /BUMP PTR TO NEXT 6-WORD ENTRY + JMP GETFIL+1 + NONUM, JMS I (RLERR + NONMSG + JMP GETFCD +FILERR, JMS I (RLERR + FILMSG + JMP GETFCD + +DIR, 0 + +NONAME, DCA FPTR + DCA FUNIT /ZERO BLOCK # AND LENGTH + JMP STDSRN /USE ENTIRE DEVICE AS FILE + +INTHND, STA + TAD I (OS8SWS+3 + AND (3 /ONLY USE LOW ORDER 2 BITS OF NUMBER + TAD (IHTBL + DCA HADR /SAVE PTR INTO TABLE OF INTL HANDLERS + TAD DSRNUM + CLL RTL + RAL + TAD DSRNUM /MULTIPLY DSRN NUMBER BY 9 + TAD (DSRN-11 /ADD TABLE BASE + DCA DSRNUM + TAD I HADR + CDF 0 + DCA I DSRNUM + ISZ DSRNUM + AC7776 + TAD CFLAG /DEPENDING ON THE C FLAG, + CIA + DCA I DSRNUM /DISABLE OR ENABLE FORMS CONTROL + JMP GETFIL+1 + PAGE + TSTSWS, 0 /ROUTINE TO TEST CD SWITCHES E AND H + TAD I (OS8SWS + AND (20 + CDF 0 + SNA CLA /TEST FOR /H SWITCH + JMP .+3 + TAD (HLT + DCA I (HLTNOP /SET TO HALT BEFORE STARTING PROGRAM + CDF 10 + TAD I (OS8SWS+1 + AND (4 + SNA CLA /TEST FOR /V SWITCH + JMP .+3 /NO + JMS I (RLERR /YES - PRINT VERSION NUMBER MESSAGE + XVERMS + TAD I (OS8SWS + AND (200 + CDF 0 + SZA CLA /TEST FOR /E SWITCH + ISZ I (ERRFLG /MAKE USER ERRORS NON-FATAL + CDF 10 /(USER ERROR = MISSING SUBROUTINE, ETC) + TAD I (OS8SWS+1 + AND (400 + CDF 0 + SNA CLA /TEST FOR /P SWITCH + JMP .+3 /NO, PRAISE BE! + TAD (SKP /GIVE THE DUMMY WHAT HE WANTS + DCA I (HLTNOP + CDF 10 + TAD I (OS8SWS + RTL + SMA CLA + AC0002 + DCA CFLAG /SAVE C FLAG IN PAGE0 + JMP I TSTSWS + +MOVEAE, 0 + TAD (EFFNOR /SUBSTITUTE A POINTER TO THE EAE NORMALIZE + CDF 0 /ROUTINE FOR THE POINTER TO THE NON-EAE + DCA I (NORMX /NORMALIZE ROUTINE + JMS I (MOVE + CDF 10 + FPPKG-1 /THE EAE PKG IS IN THE SAME PAGE IN FIELD 1 + CDF 0 + FPPKG-1 /AS THE NON-EAE PKG IN FIELD 0 + -600 + JMS I (MOVE + CDF 0 /SUBSTITUTE FAST FIX AND FLOAT + EFXFLT-1 + CDF 0 + EAEFIX-1 + -FXFLTC + JMP I MOVEAE + SPMDCD, 0 /SUBR TO DO A SPECIAL MODE COMMAND DECODE + JMS I (MOVE + CDF 10 + OS8DVT-1 + CDF 10 + DVTEMP-1 /MOVE OS/8 DEVICE HANDLER TABLE + -17 /SINCE C.D. CLEARS IT AND WE ARE USING IT + TAD I (HTOP /GET LOWEST HANDLER LOADED + RAL + SZL SPA CLA /DID WE LOAD ANY BELOW 02000? + JMP .+4 /NO + CDF 0 + ISZ I (OSJSWD /YES - MAKE CD CALLS DESTRUCTIVE + ISZ I (OSJSWD + CDF 10 + JMS I (200 + 5 /COMMAND DECODE + 5200 /SPECIAL MODE - WROUGHT WITH PERIL + 0 /DON'T CLEAR TENTATIVE FILES + JMS I (MOVE + CDF 10 + DVTEMP-1 + CDF 10 + OS8DVT-1 + -17 /MOVE DEVICE HANDLER TABLE BACK + JMS TSTSWS /CHECK FOR /E, /H, /P + JMP I SPMDCD + +IHTBL, PTR;PTP;LPT;TTY /INTERNAL HANDLER TABLE + PAGE + GETION, 0 + TAD (OS8DCB-1 + DCA GMADR + TAD I GMADR /GET DCB WORD + CLL RTR + RAR + AND (77 /INDEX INTO TABLE + TAD (IONTBL /WHICH INDICATES IF HANDLER CAN EXECUTE + DCA GMADR /WITH INTERRUPTS ON + TAD I GMADR /ION BIT INTO BIT 11, FORMS CONTROL INTO BIT 10 + JMP I GETION + +GBFLG, 0 + CDF 0 + TAD I (7777 /SPECIAL FLAGS LOC + CDF 10 + RTL + CLA RAL + JMP I GBFLG + +SVHND, 0 /ROUTINE TO SAVE HANDLER IN F1 + JMS GMADR /GET MOVE FROM ADDRESS + JMP I SVHND /NO HANDLER TO MOVE + DCA SVMOVE + JMS I (MOVE + CDF 0 +SVMOVE, 0 + CDF 10 + F0HSAV-1 + -400 + JMP I SVHND + +RSTHND, 0 /ROUTINE TO RESTORE HANDLER FROM F1 + JMS GMADR + JMP I RSTHND /HANDLER IS SYS: + DCA RSTMOV + JMS I (MOVE + CDF 10 + F0HSAV-1 + CDF 0 +RSTMOV, 0 + -400 + JMP I RSTHND + +GMADR, 0 + TAD HLDADR + SPA /CHECK THAT WE'RE NOT TRYING + JMP RESHND /TO SAVE A RESIDENT HANDLER - + AND RESHND /THAT COULD BE TRICKY + TAD (-1 /ECCH + ISZ GMADR + JMP I GMADR +RESHND, 7600 + JMP I GMADR + /RTS LOADER ERROR MESSAGE ROUTINE & MESSAGES + +RLERR, 0 /ERROR MESSAGES ARE IN FIELD 0 + CLA + CDF 10 + TAD I RLERR + CDF 0 + DCA RLTMP +RELP, TAD I RLTMP + RTR + RTR + RTR + AND (77 + JMS LTTY + TAD I RLTMP + AND (77 + JMS LTTY + ISZ RLTMP + JMP RELP +EOMSG, TAD (7515 + JMS LTTY + TAD (7512 + JMS LTTY + ISZ RLERR + CDF 10 + JMP I RLERR /SOME MESSAGES ARE NOT FATAL + +LTTY, 0 + SNA + JMP EOMSG + TAD (240 + SMA + AND (77 /CONVERT SIXBIT TO EIGHTBIT + TAD (240 + TLS + CLA + TSF + JMP .-1 + JMP I LTTY + /ROUTINE TO DETERMINE WHETHER WE ARE RUNNING IN THE +/BACKGROUND UNDER RTS-8, AND MODIFY THE RUN-TIME SYSTEM IF WE ARE. +/RUNS AT INITIALIZATION TIME, BEFORE LOWER FIELD 0 IS MOVED + +BAKTST, 0 + FPICL /FIRST INITIALIZE FPP (IF ANY) + FPCOM /INCLUDING CLEARING EXTENDED APT POINTER + TCF /TEST FOR RTS-8 BACKGROUND BY CLEARING THE + TSF /TTY FLAG AND THEN TESTING IT - IF IT IS + JMP I BAKTST /STILL SET, WE ARE RUNNING UNDER SRT-8. + CDF 0 /MODIFY LIST AND MODIFICATIONS ARE IN FIELD 0 +BAKLP, TAD I BKRPTR /GET POINTER TO BLOCK TO BE MODIFIED + SNA + JMP BAKRTN /ZERO - WE'RE DONE + DCA X0 /STORE IN AUTO-XR + ISZ BKRPTR +BAKWLP, TAD I BKRPTR /GET NEXT WORD TO STORE + ISZ BKRPTR + SNA + JMP BAKLP /ZERO MEANS END OF GROUP + DCA I X0 + JMP BAKWLP +BAKRTN, CDF 10 /RESET DATA FIELD TO 10 + DCA I (EAEKIL /EAE USES SGT WHICH IS NOT EMULATED, SO KILL IT + JMP I BAKTST /AND RETURN + +BKRPTR, BKRLST + PAGE + +F0TO= . + /FLOATING POINT PROCESSOR HANDLER + *FPPINT + +RETURN, JMP FPPRTN /MUST BE AT 0 IN PAGE + +FPGO, 0 /FPP STARTUP ROUTINE - MUST BE AT 1 IN PAGE + CDF 0 + DCA STEFLG + TAD PC + DCA FSAVPC /SAVE OLD PC FOR ONE LEVEL + TAD APT + DCA SAVAPT /OF RE-ENTRANTNESS + TAD I FPGO + DCA PC + TAD APT + AND (7770 + DCA APT /SET UP ADDRESS IN APT +FPREST, TAD (400 /ENABLE FPP INTERRUPTS + FPCOM /LOAD AND STORE ENTIRE APT + CLA /NECESSARY? + TAD STEFLG /0 OR 4000?(STARTF OR STARTE) + SZA + 6567 /A MNEMONIC? + CLA + TAD (APT + IOF + FPST /START UP FPP + JMP .-1 /I HAVE NO IDEA WHY IT DIDN'T START + CLA /NECESSARY? + JMS I (HANG /EXECUTE BACKGROUND + FPUHNG + FPRST /READ FPP STATUS + FPICL /RESET FPP + ION + RTL + SZL /TEST TRAP BIT + JMP TRAP /YUP - GO EXECUTE IT + AND (7400 + SZA /ANY ERRORS? + JMP FPPER + TAD FSAVPC + DCA PC /RESTORE OLD PC + TAD SAVAPT + DCA APT + ISZ FPGO + JMP I FPGO + /FLOATING POINT TRAP PROCESSOR + +TRAP, AC7775 + TAD PC + DCA PC /BACK UP PC TO BEFORE THE TRAP + SZL + STA + TAD APT /INCLUDING THE FIELD BITS + DCA APT + TAD APT /SET UP "FETPC" TO FETCH POSSIBLE TRAP ARGS + JMS I MCDF + DCA I (PCCDF + JMS I (FETPC + DCA T + TAD T /GET TRAP WORD + JMS I MCDF + IAC /MAKE A "CDF CIF N" + IAC + DCA TRPCIF + JMS I (FETPC + DCA ADR /STORE PDP8-CODE ROUTINE ADDRESS + TAD T +TRPCIF, HLT /SET DATA AND INSTRUCTION FIELDS + SMA CLA /TRAP3 OR TRAP4? + JMP I ADR /TRAP3 - GO TO ADR + JMS I ADR /TRAP4 - CALL ADR +FPPRTN, DCA STEFLG + ISZ PC /RESTORE PC FROM BEFORE TRAP + SKP + ISZ APT /INCLUDING FIELD + CDF 0 + JMP FPREST /RESTART FPP + +FPPER, SPA + JMP I (FPPERR /FPHALT - FATAL ERROR + RTL + ISZ FATAL /DIVIDE BY 0 AND OVERFLOW ARE NON-FATAL + SZL + JMP FPDVER +FPOVER, JMS I ERR + SKP +FPDVER, JMS I ERR + TAD . /I ALWAYS WANTED TO INCLUDE ONE OF THESE! + DCA ACX + AC2000 + DCA ACH + JMP FPREST + +FSAVPC, 0 +SAVAPT, 0 +STEFLG, 0 + /RANDOM FPP CODE FOR D.P. I/O +DFSTM2, FSTA+LONG + DFTMP2 + FEXIT + + PAGE + /THIS IS DOUBLE PRECISION FORMATTED OUTPUT. +/ITS A LOT LIKE SINGLE PRECISION,WITHOUT ALL THE G + I STUFF +/AND, OH JOY!, NO PAGE 0 LITERALS. +DNXT, TAD RWFLAG /READ OR WRITE? + SMA CLA + AC4000 /ITS INPUT SO LEAVE IN STARTE MODE + JMS I (GETLMN + JMP .+3 +DFMT, STA +BFMT, DCA EFLG + TAD D + DCA OD /SAVE COUNT OF DIGITS AFTER DEC PT + TAD PFACT + DCA PFACTX + DCA SCALE + JMS I (SKPOUT /DONE? + JMP I (DPIN /ITS INPUT + STA /ITS OUTPUT + DCA I (FFNEG /USE THIS LOCN AS SIGN FLAG + TAD EFLG + CLL RAL + CLL RAL + TAD W /GIVE ROOM FOR EXP FIELD (IF ANY) + CLL /NECESSARY? + DCA I (OW + TAD ACH + SNA + JMP SKPZRO /IF AC 0,SKIP ALOT OF THIS + SMA CLA + JMP DSCLUP + JMS I (DFNEG /AC<0-NEGATE IT + DCA I (FFNEG / 0 <> 7777 +DSCLUP, DCA SCALE + TAD ACX + SMA SZA CLA /AC<1.0? + JMP DGT1 /NO + AC4000 /STARTE + JMS I (FPGO /Y-MULT BY 10. + FMUL10 + STA + TAD SCALE /BUMP POWER OF TEN + JMP DSCLUP +DGT1, JMS I (DSCLDN /NUMBER IS >=1.;NOW DECREASE IT TO (0,1) + AC4000 + JMS I (FPGO /SAVE IT + FSTTMP + TAD (22 + JMS I (OSCALE + AC4000 + JMS I (FPGO + FADTMP + JMS I (DSCLDN + SKPZRO, JMS I (DIGCNT /NO NEED FOR ALL THE G STUFF TO BE + /INCLUDED IN THE SINGLE PREC ROUTINE + /MAKE NOTG ROUTINE A SUBROUTINE + SMA /EQUIV TO OUTNUM IN SINGLE PREC + JMP DASTRS + JMS I (OBLNKS + AC7775 + ISZ I (FFNEG /IF SIGN IS NEG, + JMS I (DIGIT /PRINT A MINUS + CLA + TAD ACX + SNA /ALIGN FAC MANTISSA INTO A + JMS I (DAL1 /FRACTION (.1,1) + IAC + SPA + JMS I (DACSR + CLA + TAD EAC3 + DCA AC1 /MOVE FAC DOWN SO OVERFLOW FROM + TAD EAC2 /MULT BY 10 IN HIGH ORDER WORD + DCA EAC3 + TAD EAC1 + DCA EAC2 + TAD ACL + DCA EAC1 + TAD ACH + DCA ACL + TAD SCALE + SPA SNA /ANY DIGITS TO LEFT OF DEC PT? + JMP I (DPRZRO /N-PRINT A 0 +/JUST AS CHEAP TO DUPLICATE CODE + JMS I (DBLDIG /Y- PRINT THEM + DRDCPT, AC7776 + JMS I (DIGIT /PRINT A DEC PT + TAD SCALE + SMA CLA /NEED LEADING ZEROS? + JMP DNOLZR /NO + TAD SCALE + DCA T +DLZERO, STA CLL + TAD OD /DECREASE D VALUE + SNL + JMP DNOMAC /NO MORE FIELD WIDTH AVAILABLE + DCA OD + JMS I (DIGIT /PRINT A 0 + ISZ T /CONT UNTIL COUNT OR WIDTH RUNS OUT + JMP DLZERO +DNOLZR, TAD OD + SZA + JMS I (DBLDIG /PRINT REMAINING DIGITS +DNOMAC, CLA + TAD EFLG + SZA /IF EFLG IS NOT ZERO IT IS -1, + JMS I (EXPFLD /SO WE WILL PRINT A D INSTEAD OF AN E + JMP I (DNXT + +DASTRS, CLA + TAD W + JMS I (ASTRSK + JMP I (DNXT + PAGE + DBLDIG, 0 /OUTPUT DIGITS + CIA + DCA T +DBDLOP, DCA ACH /0 THE HI WORD FOR OVERFLO + TAD AC1 + DCA AC2 /START TO COPY THE FAC.THIS IS + TAD ACL /EAC3 SHIFTED DOWN 1 WORD + DCA OPL + TAD EAC1 + DCA L1 /ACL + TAD EAC2 + DCA DACSR /EAC1 + TAD EAC3 + DCA DSCLDN /EAC2 + JMS DAL1 + JMS DAL1 + CLL + TAD AC2 + TAD AC1 + DCA AC1 /THIS IS FAC*5 COMING UP + RAL + TAD DSCLDN + TAD EAC3 + DCA EAC3 + RAL + TAD DACSR + TAD EAC2 + DCA EAC2 + RAL + TAD L1 + TAD EAC1 + DCA EAC1 + RAL + TAD OPL + TAD ACL + DCA ACL + RAL + TAD ACH + DCA ACH + JMS DAL1 + TAD ACH + JMS I (DIGIT + ISZ T + JMP DBDLOP + JMP I DBLDIG + DSCLDN, 0 /USED AS A TEMP TOO + TAD ACX + SPA SNA CLA + JMP I DSCLDN /DONE IF FAC<1. + AC4000 + JMS I (FPGO + FDIV10 + ISZ SCALE + 0 /A FREE LOCN! + JMP DSCLDN+1 + +DPRZRO, CLA + JMS I (DIGIT + JMP I (DRDCPT +/6 WORD FAC LEFT SHIFT +DAL1, 0 + TAD AC1 /GET OVERFLO BIT + CLL RAL /SHIFT LEFT + DCA AC1 + TAD EAC3 /CONTINUE WORKING WAY UP THRU MANTISSA + RAL + DCA EAC3 + TAD EAC2 + RAL + DCA EAC2 + TAD EAC1 + RAL + DCA EAC1 + TAD ACL + RAL + DCA ACL + TAD ACH + RAL + DCA ACH + JMP I DAL1 + +DFLTM2, FLDA+LONG + DFTMP2 + FEXIT +DFTMP2, 0;0;0;0;0;0 + /6 WORD FAC RIGHT SHIFT. ENTER WITH COUNT-1 IN AC +/ +DACSR, 0 /USED AS A TEMP BY DBDLOP + DCA AC0 /STORE COUNT +DLOP1, TAD ACH + CLL + SPA /PROPOGATE SIGN + CML + RAR + DCA ACH /SHIFT RIGHT 1,PROPOGATE SIGN + TAD ACL /DO SHIFTING FOR EACH WORD OF MANTISSA + RAR + DCA ACL + TAD EAC1 + RAR + DCA EAC1 + TAD EAC2 + RAR + DCA EAC2 + TAD EAC3 + RAR + DCA EAC3 + ISZ ACX /INCREMENT EXPONENT + NOP + ISZ AC0 /DONE? + JMP DLOP1 /NOPE + RAR /YUP + DCA AC1 /SAVE 1 BIT OF OVERFLOW + JMP I DACSR +L1, 0 + PAGE + /THIS IS DOUBLE PRECISION INPUT (WITH FPP ONLY) +/IT IS A LOT LIKE SINGLE PRECISION INPUT, BUT USES +/ITS OWN FPP ROUTINES. +DPIN, STA + DCA DDPSW /INITIALIZE DEC. PT. SWITCH + STA + DCA DINESW /AND EXPONENT SWITCH + TAD W + CMA + DCA FMTNUM /CHAR COUNT +DINESM, DCA ACX /CLEAR FLOATING AC + DCA ACH + DCA ACL + DCA EAC1 + DCA EAC2 + DCA EAC3 + STA +DINMIN, DCA DFNEG +DINLOP, ISZ FMTNUM + JMP DINGCH /LOOP UNTIL WIDTH EXHAUSTED +DINENM, ISZ I (DFNEG /IS SIGN NEGATIVE? + JMS I (DFNEG /YES-NEGATE + ISZ DINESW /SEEN A D YET? + JMP DFIXUP /YES-THIS IS EXP,NOT NUMBER + TAD PFACTX /NO D- SCALE WITH P FACTOR +DSCLIN, TAD OD /GET SCALING FACTOR + STL + SNA + JMP I (DNXT /NO SCALING NEEDED + SMA + CIA CLL /AC CONTAINS MAGNITUDE,LINK CONTAINS SIGN + DCA OD + RTL + RAL + TAD (FDIV10 + DCA DIGFOP + AC4000 + JMS I (FPGO /MULT OR DIVIDE BY 10 +DIGFOP, 0 + ISZ OD + JMP DIGFOP-2 /MULT OR DIV CORRECT NUMBER OF TIMES + JMP I (DNXT /GET MORE +DIND, ISZ DINESW /IS THERE A 2ND D? + JMP DINER /Y-A NO-NO + ISZ DDPSW /FORCE DEC. PT. SWITCH ON + TAD OD /USE SCALE FACTOR IF SEEN DEC. PT + DCA SCALE /SAVE SCALE FACTOR + ISZ DFNEG + JMS DFNEG /GET SIGN OF NUMBER + AC4000 + JMS I (FPGO /SAVE IT TEMPORARILY + DFSTM2 + JMP DINESM /GO COLLECT EXP + DFIXUP, JMS I (FFIX /IS THIS OK FOR DBL PREC??? + TAD ACI + CIA + TAD SCALE /ADD EXP TO DEC PT SCALE FACTOR + DCA OD + AC4000 + JMS I (FPGO + DFLTM2 /GET NUMBER BACK IN FAC + JMP DSCLIN +DINGCH, JMS I (FMTIN /GET A CHAR + JMS I (CHTYPE /CLASSIFY IT + 1234; DDIGIT + -56; DIDCPT /. + -53; DINLOP /+ + -55; DINMIN /- + -4; DIND /D + -5; DIND /E - BE FORGIVING + -40; DINLOP /BLANK + -54; DINENM /, + 0 +DINER, JMP I (INER + +DIDCPT, DCA OD /ZERO COUNT OF DIGITS AFTER DEC PT + ISZ DDPSW /TEST + SET DEC PT SWITCH + JMP DINER /2 DEC. PT. IS NO GOOD + JMP DINLOP +DDIGIT, TAD CHCH + DCA I (DGT+1 /SAVE DIGIT + AC4000 + JMS I (FPGO + ACMDGT + TAD DDPSW + SNA CLA + ISZ OD /BUMP DIGIT IF DEC PT SEEN + JMP DINLOP +DDPSW, 0 + /6 WORD FLOATING NEGATE + +DFNEG, 0 + TAD EAC3 + CLL CMA IAC /NEGATE LOW ORDER WORD OF MANTISSA + DCA EAC3 /STORE IT BACK + CML RAL /ADJUST OVERFLOW+CARRY + TAD EAC2 /CONTINUE WITH REST OF MANTISSA + CMA IAC + DCA EAC2 + CML RAL + TAD EAC1 + CMA IAC + DCA EAC1 + CML RAL + TAD ACL + CMA IAC + DCA ACL + CML RAL + TAD ACH + CLL CMA IAC + DCA ACH + JMP I DFNEG +DINESW, 0 + PAGE + *FPPKG /EAE PKG LOADS OVER REGULAR PKG + +LPBUF2, ZBLOCK 16 + LPBUF5 + +AL1BMP, 0 /*K* MUST BE AT SAME LOC AS NON-EAE VERSION + STA + TAD ACX + DCA ACX + JMS I (AL1 + JMP I AL1BMP + +/EAE FLOATING POINT INTERPRETER +/FOR PDP8/E WITH KE8-E EAE + +/W.J. CLOGHER, MODIFIED BY R.LARY FOR FORTRAN + +/FLOATING MULTIPLY--DOES 4 SINGLE MULTIPLIES WITH EAE +/THIS USES THE FACT THAT IF AC IS NON-ZERO WHEN YOU DO +/A MUY INSTR, THE AC IS ADDED TO RESULT OF THE MULTIPLY. +/(IN THE LOW ORDER, NATCHERLY) + +DDMPY, JMS I (DARGET + SKP +FFMPY, JMS I (ARGET + JMS EMDSET /SET UP FOR MULT + CLA MUY /MULTIPLY-LOW ORDER FAC STILL IN MQ + OPH /THIS IS PRODUCT OF LOW ORDERS + MQL /ZAP LOW ORDER RESULT-INSIGNIFICANT + TAD ACH /GET LOW ORDER(!) OF FAC + SWP MUY /TO MQ-HIGH ORD. RESLT OF LAST MPY + OPL /TO AC-WILL BE ADDED TO RESLT-THIS + DST /IS PRODUCT-LOW ORD FAC,HI ORD OP + AC0 /STORE RESULT + CLA + TAD ACL /HIGH ORDER FAC TO MQ + MQL + TAD OPX /GET OPERAND EXPONENT + TAD ACX /ADD FAC EXPONENT-GET SUM OF EXPS. + DCA ACX /STORE RESULT + MUY /MUL. HIGH ORDER FAC BY LOW ORD OP. + OPH /HIGH ORDER FAC WAS IN MQ + DAD /ADD IN RESULT OF SECOND MULTIPLY + AC0 + DCA ACH /STORE HIGH ORDER RESULT + TAD ACL /GET HIGH ORDER FAC + SWP /SEND IT TO MQ AND LOW ORD. RESULT + DCA AC0 /OF ADD TO AC-STORE IT + RAL /ROTATE CARRY TO AC + DCA ACL /STORE AWAY + MUY /NOW DO PRODUCT OF HIGH ORDERS + OPL /FAC HIGH IN MQ, OP HIGH IN OPL + DAD /ADD IN THE ACCUMULATED # + ACH + /MULTIPLIES DONE - MASSAGE RESULT + + SNA /ZERO? + JMP RTZRO /YES-GO ZERO EXPONENT + NMI /NO-NORMALIZE (1 SHIFT AT MOST!) + DCA ACH /STORE HIGH ORDER RESULT + CLA SCA /GET STEP CNTR-DID WE NEED A SHIFT? + SNA CLA + JMP SNCK /NO-JUST CHECK SIGN + TAD AC0 /YES - WATCH OUT FOR LOST ACCURACY! + RAL + DCA AC0 + SZL /IF HIGH ORDER BIT OF OVERFLOW WORD WAS ON, + DPIC /TURN MQ11 ON (IT WAS 0 FROM THE NMI) + CLA CMA /MUST DECREASE EXP. BY 1 + TAD ACX +RTZRO, DCA ACX /STORE BACK +SNCK, TAD AC0 + SPA CLA /IS HIGH ORDER OF OVERFLO WD. 1? + DPIC /YES-ADD 1 TO LOW ORDER-STILL IN MQ + TAD ACH + SMA + JMP EMDONE /WE DIDN'T OVERROUND - GOODY + LSR + 1 /BUT OVERROUNDING IS EASILY CORRECTED! + ISZ ACX / (OVERCORRECTED??) + NOP + +/COMMON CLEANUP ROUTINE FOR MULTIPLY AND DIVIDE + +EMDONE, ISZ EMSIGN /SHOULD SIGN BE MINUS? + SKP /NO + DCM /YES-DO IT + SNA + DCA ACX /FORCE EXPONENT 0 IF MANTISSA = 0 + DCA ACH /STORE IT BACK + SWP + DCA ACL + TAD DFLG + SMA SZA CLA + TAD ACX /IF D.P. INTEGER MODE AND ACX LESS THAN 0, + SNA /GO TO UNNORMALIZE RESULT + JMP I FPNXT /OTHERWISE BUMP RETN. AND RETN. + CMA + JMS I (ACSR + JMP I FPNXT +EMSIGN, 0 + /ROUTINE TO SET UP FOR MULTIPLY AND DIVIDE + +EMDSET, 0 + CLA CLL CMA RAL /MAKE A MINUS TWO + DCA EMSIGN /AND STORE IN EMSIGN. + DLD /GET HIGH ORDER MANTISSA OF OP. + OPH + SWP + SMA /NEGATIVE? + JMP .+3 /NO + DCM /YES-NEGATE IT + ISZ EMSIGN /BUMP SIGN COUNTER + SHL /SHIFT OPRND LEFT 1 TO AVOID OVRFLO + 1 + DST /STORE BACK-OPH CONTAINS LOW ORDER + OPH / OPL CONTAINS HIGH ORDER + DLD + ACH + SWP + SMA /FAC LESS THAN 0? + JMP .+4 /NO + DCM + ISZ EMSIGN + NOP /EMSIGN MAY BUMP TO 0 + DST /STORE BACK - ACH CONTAINS LOW ORDER + ACH / ACL CONTAINS HIGH ORDER + JMP I EMDSET + PAGE + /FLOATING DIVIDE-BY-0 ROUTINE - MUST BE AT 0 IN PAGE + +DBAD, ISZ FATAL /DIVIDE BY 0 NON-FATAL + JMS I ERR + TAD DBAD + DCA ACX /SET AC TO A LARGE POSITIVE NUMBER + AC2000 + JMP I (EMDONE + +/FLOATING DIVIDE + +DDDIV, JMS I (DARGET + SKP +FFDIV, JMS I (ARGET + JMS I (EMDSET /GET ARG. AND SET UP SIGNS + DVI /DIVIDE-ACH AND ACL IN AC,MQ + OPL /THIS IS HI (!) ORDER DIVISOR + DST /QUOT TO AC0,REM TO AC1 + AC0 + SZL CLA /DIVIDE ERROR? + JMP DBAD /YES - HANDLE IT + TAD OPX /DO EXPONENT CALCULATION + CMA IAC /EXP. OF FAC - EXP. OF OP + TAD ACX + DCA ACX + DPSZ /IS QUOT = 0? + SKP /NO-GO ON + DCA ACX /YES-ZERO EXPONENT +DVLP, MUY /NO-THIS IS Q*OPL*2**-12 + OPH + DCM /NEGATE IT + TAD AC1 /SEE IF GREATER THAN REMAINDER + SNL + JMP EDVOPS /YES-ADJUST FIRST DIVIDE + DVI /NO-DO Q*OPL*2**-12/OPH + OPL + SZL CLA /DIV ERROR? + JMP DBAD /YES +EDVLP1, TAD AC0 /NO-GET QUOT OF FIRST DIV. + SMA /NEGATIVE? + JMP I (EMDONE /NO-REMEMBER-QUOT OF 2ND DIV. IN MQ + LSR /YES-MUST SHIFT IT RIGHT 1 + 1 + ISZ ACX /ADJUST EXPONENT + NOP + SGT /TEST SHIFTED OUT BIT + JMP I (EMDONE /ZERO - NO ROUND + DPIC /BUMP AC FRACTION + JMP EDVLP1+1 /MAYBE SHIFT AGAIN + /CONTINUATION OF DIVIDE ROUTINE +/WE ARE ADJUSTING THE RESULT OF THE +/FIRST DIVIDE. + +EDVOPS, CMA IAC + DCA AC1 /ADJUST REMAINDER + TAD OPL /WATCH FOR OVERFLOW + CLL CMA IAC + TAD AC1 + SNL + JMP EDVOP1 /DON'T ADJUST QUOT. + DCA AC1 + CMA + TAD AC0 + DCA AC0 /REDUCE QUOT BY 1 +EDVOP1, CLA CLL + TAD AC1 /GET REMAINDER + SNA /ZERO? + CAM /YES-ZERO EVERYTHING + DVI /NO + OPL + SZL CLA /DIV. OVERFLOW? + JMP DBAD /YES + DCM /NO-ADJUST HI QUOT (MAYBE) + JMP EDVLP1 /GO BACK + +/ROUTINE TO NORMALIZE THE FAC + +EFFNOR, 0 + CDF 0 + DLD /PICK UP MANTISSA + ACH + SWP /PUT IT IN CORRECT ORDER + NMI /NORMALIZE IT + SNA /IS THE # ZERO? + DCA ACX /YES-INSURE ZERO EXPONENT + DCA ACH /STORE HIGH ORDER BACK + SWP /STORE LOW ORDER BACK + DCA ACL + CLA SCA /STEP COUNTER TO AC + CMA IAC /NEGATE IT + TAD ACX /AND ADJUST EXPONENT + DCA ACX + JMP I EFFNOR /RETURN + +ADDRS, OPH + ACH + +LPBUF5, ZBLOCK 50 + LPBUF7 + PAGE + /"OPNEG" MUST BE AT 0 IN PAGE + +OPNEG, 0 /ROUTINE TO NEGATE OPERAND + DLD + OPH + SWP + DCM + DCA OPH + MQA + DCA OPL + JMP I OPNEG + +/FLOATING ADD AND SUBTRACT-IN ORDER NOT TO LOSE BITS, +/WE DO NOT SHIFT BOTH NUMBERS RIGHT 1 BIT BEFORE ADD- +/ONLY SHIFTS DONE ARE TO ALIGN EXPONENTS. + +FFSUB, JMS I (ARGET + JMS OPNEG /NEGATE OPERAND + SKP +FFADD, JMS I (ARGET /PICK UP ARGUMENTS + TAD OPH + SNA CLA /IF OPERAND IS 0, + JMP I FPNXT /RESULT IS ALREADY IN AC. + TAD ACH + SZA CLA /CHECK FOR AC=0 + JMP BOTHN0 /NO + DLD + OPH /YES - ANSWER IS OPERAND + SWP + DCA ACH + JMP FADND /JUMP INTO CLEANUP CODE +BOTHN0, TAD OPX /PICK UP EXPONENT OF OPERAND + MQL /SEND IT TO MQ FOR SUBTRACT + TAD ACX /GET EXPONENT OF FAC + SAM /SUBTRACT-RESULT IN AC + SPA /NEGATIVE RESULT? + CMA IAC /YES-MAKE IT POSITIVE + DCA CNT /STORE IT AS A SHIFT COUNT + TAD CNT /COUNT TOO BIG?(CAN'T BE ALIGNED) + TAD (-27 + SPA SNA CLA + CMA /NO-OK + DCA AC0 /YES-MAKE IT A LOAD OF LARGEST # + DLD /GET ADDRESSES TO SEE WHO'S SHIFTED + ADDRS + SGT /WHICH EXP GREATER(GT FLG SET + /BY SUBTR. OF EXPS.) + SWP /OPERAND'S-SHIFT THE FAC + DCA SHFBG /STORE ADDRESS OF WHO GETS SHIFTED + SWP /GET ADDRESS OF OTHER (0 TO MQ) + DCA DADR /THIS ONE JUST GETS ADDED + TAD ACX /GET FAC EXP.INTO AC + SGT /WHICH EXPONENT WAS GREATER? + DCA OPX /FAC'S-STORE FINAL EXP. IN OPX + DLD /GET THE LARGER # TO AC,MQ +DADR, 0 + SWP /PUT IN THE RIGHT ORDER + ISZ AC0 /COULD EXPONENTS BE ALIGNED? + JMP LOD /NO-JUST LEAVE LARGER IN AC,MQ + DST /YES-STORE THIS TEMPORARILY + AC0 /(IF ONLY FAC STORAGE WAS REVERSED) + DLD /GET THE SMALLER # +SHFBG, 0 + SWP /PUT IT IN RIGHT ORDER + ASR /DO THE ALIGNMENT SHIFT +CNT, 0 + DAD /ADD THE LARGER # + AC0 + DST /STORE RESULT + AC0 + SZL /OVERFLOW?(L NOT = SIGN BIT) + CMA /NOTE-WE DIDN'T SHIFT BOTH RIGHT 1 + SMA CLA + JMP NOOV /NOPE + CLA CLL CML RAR /MAYBE-SEE IF 2 #S HAD SAME SIGN + AND ACH + TAD OPH + SMA CLA /SIGNS ALIKE? + JMP OVRFLO /YES-OVERFLOW +NOOV, AC4000 /NO-GET HIGH ORDER RESULT BACK + TAD AC1 /CHECK FOR 4000 0000 MANTISSA + DPSZ /IT WILL BE SET TO 0 BY NMI + JMP .+3 /OK-RESTORE NUMBER + AC2000 /GOT A 4000 0000-SET TO 6000 0000 + JMP DOIT /AND INCREMENT EXPONENT + TAD (4000 /RESTORE NUMBER +LOD, NMI /NORMALIZE (LOW ORDER STILL IN MQ) + DCA ACH /STORE FINAL RESULT + SCA /GET SHIFT COUNTER(# OF NMI SHIFTS) + CMA /NEGATE IT +ADON, IAC +FADND, TAD OPX /AND ADJUST FINAL EXPONENT + DCA ACX + SWP /GET AND STORE LOW ORDER + DCA ACL + JMP I FPNXT /RETURN +OVRFLO, TAD AC1 /OVERFLOW-GET HIGH ORDER RESLT BACK + ASR /SHIFT IT RIGHT 1 + 1 +DOIT, TAD (4000 /REVERSE SIGN BIT + DCA ACH /AND STORE + JMP ADON /DONE + +LPBUF7, ZBLOCK 34 + LPBUFE + PAGE + *7400 /RTS CLEANUP ROUTINE - SAVED WITH PG 17600 + +CLNUP, DCA I CFPTR /ENTER HERE ON ^C OR ERROR +TDEXFG, JMP CTMP /ENTER HERE ON "STOP" OR "CALL EXIT" + TAD TDEXFG /TDEXFG CONTAINS TOP MEM FIELD + CLL RTL /IF WE ARE ON AN IN-CORE TD8E CONFIGURATION + RAL + TAD (CDF + DCA TDGTDF +TDGTDF, HLT + TAD I TDPTR /MOVE THE TD8E ROUTINE + CDF 20 + DCA I TDPTR /DOWN TO FIELD 2 + ISZ TDPTR + JMP TDGTDF + CDF 0 + TAD (CIF 20 + JMS TDSET /RESET THE F0 CDF'S TO POINT TO FIELD 2 +CTMP, CDF 0 + TAD (6213 + DCA I (7605 + TAD (5267 + DCA I (7606 /RESTORE PAGE 7600 + AC7776 + AND I (OSJSWD + IAC + DCA I (OSJSWD /MARK 10000-11777 AS USELESS + AND I 0 + AND I 0 /DELAY A WHILE IN CASE ITS AN LA30 + AND I 0 + AND I 0 + AND I 0 + TSF + SKP + JMP WTOVR + ISZ ZERO + TAD I (TOCHR /IF TTY IS NOT IDLE, + SZA CLA /DELAY LONG ENOUGH TO AVOID GARBLE. + JMP CTMP +WTOVR, TAD I (7777 + CLL RAL + SMA CLA /IS BATCH EXECUTING? + JMP NOBTCH /NO - RELAX + TAD (212 /TO PREVENT OVERPRINTING, POP UP A LINE + TLS /ON THE TELETYPE + LLS /AND ON THE LINE PRINTER + TSF + JMP .-1 /WAIT FOR THE SLOWER ONE (I HOPE) + CLA + NOBTCH, CDF 10 +CLOSLP, TAD I CFPTR + SNA /ANY MORE ENTRIES IN THE TENTATIVE + JMP GOAWAY /FILE TABLE? + DCA CTMP /YES - SAVE FILE LENGTH PTR + CDF 0 + TAD I CTMP + CDF 10 + SNA + JMP IGNORC /UNWRITTEN FILES AREN'T CLOSED + DCA FLEN + JMS I USR + 10 /BRING USR IN + TAD (200 + DCA USR /KEEP IT IN + TAD (HPLACE+1 + DCA CHAND + JMS I USR + 13 /RESET DEVICE HANDLER TABLE + 0 /BUT NOT TENTATIVE FILES! + ISZ CFPTR + TAD I CFPTR /GET UNIT NUMBER + JMS I USR + 1 +CHAND, 0 /FETCH HANDLER + JMP CLSERR + TAD I CFPTR /GET UNIT AGAIN + ISZ CFPTR /BUMP PTR TO NAME + JMS I USR +C4, 4 +CFPTR, 7600 /CLOSE THE FILE +FLEN, 0 + JMP CLSERR + SKP +IGNORC, AC0002 + TAD CFPTR + TAD C4 + DCA CFPTR + JMP CLOSLP /LOOK FOR MORE + +TDSET, 0 + DCA I (7721 + TAD I (7721 + DCA I (7727 + TAD I (7721 + IAC + DCA I (7642 + JMP I TDSET + GOAWAY, CDF CIF 0 + JMP I (7605 /RETURN TO OS/8 AQAP +CLSERR, JMS I USR /"IMPOSSIBLE" ERROR - GIVE "USER ERROR 2" + 7 + 2 /IT'S BETTER THAN HALTING + +TDPTR, 7600 +ZERO, 0 +USR, 7700 + $$$-$$$-$$$ + ADDED src/os8-v3f/RTS.PA Index: src/os8-v3f/RTS.PA ================================================================== --- /dev/null +++ src/os8-v3f/RTS.PA @@ -0,0 +1,3789 @@ +/FORTRAN IV RUNTIME SYSTEM, V5A +/ +/ +/ +/ +/ +/ +/ +// +/ +/ +/ +/ +/COPYRIGHT (C) 1974,1975 +/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. +/ +/ +/ +/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A +/SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- +/SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER +/COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE +/TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO +/AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE +/SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. +/ +/ +/THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT +/NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL +/EQUIPMRNT COROPATION. +/ +/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS +/SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. +/ +/ +/ +/ +/ +/ + /FORTRAN 4 RUNTIME SYSTEM - R.LARY +/AND NOW WITH DOUBLE PRECISION! - MKH +/RTS-8 SUPPORT ADDED 5/20/74 - RL +/LAST EDITED 5/19/74 + +XVERSN=5 /UPDATE WITH EVERY RELEASE! +XPATCH="A /PATCH LEVEL A + +/NOTES TO MAINTAINERS: + +/THIS PROGRAM IS DESIGNED TO SUPPORT MANY DIFFERENT HARDWARE +/CONFIGURATIONS IN A MINIMAL AMOUNT OF SPACE. IT ACHIEVES THIS GOAL +/BY "TAILORING" ITSELF AT INITIALIZATION TIME +/BASED ON A SURVEY OF ITS HARDWARE/SOFTWARE ENVIRONMENT. THIS MAKES +/THIS PROGRAM DIFFICULT TO MODIFY UNLESS THE MODIFYING PROGRAMMER +/KNOWS WHAT IS GOING ON. IT IS THEREFORE SUGGESTED THAT YOU READ THIS +/LISTING THOROUGHLY AND UNDERSTAND THE MAJOR ROUTINES BEFORE +/MAKING EVEN "TRIVIAL" CHANGES. + +/ALL SYMBOLS BEGINNING WITH THE LETTER "Q" ARE ENTRIES IN THE +/HEADER BLOCK OF THE LOADER-IMAGE (.LD) FILE. + +/ALL SYMBOLS BEGINNING WITH THE LETTER "Y" DENOTE THE BEGINNING OF +/A BLOCK OF CODE WHICH WILL BE REPLACED BY DIFFERENT CODE IF FRTS +/IS RUNNING IN THE BACKGROUND UNDER RTS-8. THE REPLACEMENT CODE +/CAN BE FOUND IN THE TABLE "BKRLST". + +/ALL SYMBOLS BEGINNING WITH THE LETTER "V" ARE DEFINED IN THE LOADER +/SYMBOL TABLE AND CANNOT BE MOVED WITHOUT CHANGING THE LOADER. ONLY +/A VERY FEW OF THESE SYMBOLS OCCUR IN PLACES OTHER THAN +/PAGE 200 OR THE FIRST LOCATION OF OTHER PAGES. + +/CODE WHICH CONTAINS THE CHARACTER SEQUENCE "*K*" IN THE COMMENT FIELD +/IS PARTICULARLY SUBTLE/OBSCURE (THE "K" IS FOR "KLUDGE"). THE REST OF THE +/COMMENT SHOULD INDICATE WHAT IS GOING ON. +/ +/ +/ FIXES FOR V4 J.K. 1975 +/ +/ .SCALE FACTOR PRINTED BY P FORMAT OPERATOR +/ .FRTS /P +/ .RK8E HANDLER TO RUN WITH INTERRUPTS ON +/ .SLASH AT END OF FORMAT STATEMENT +/ +/ +/ CHANGES FOR OS/78 AND OS/8 V3D BY P.T. +/ .CHANGED THE VERSION NUMBER TO 5A +/ .FIXED THE FIELD OVERFLOW PROBLEM +/ .FIXED THE "K=K+1" PROBLEM + /DEFINITIONS: + +AC7775= STA CLL RTL +AC7776= STA CLL RAL +AC4000= CLA STL RAR +AC3777= STA CLL RAR +AC2000= CLA STL RTR +AC0002= CLA STL RTL + +/DEFINITIONS OF KE-8/E INSTRUCTIONS + +MQL= 7421 +MQA= 7501 +CAM= CLA MQL +SWP= MQA MQL +SWAB= 7431 +SCA= 7441 +MUY= 7405 +DVI= 7407 +NMI= 7411 +SHL= 7413 +ASR= 7415 +LSR= 7417 +ACS= 7403 +SAM= 7457 +DAD= 7443 +DLD= 7663 +DST= 7445 +DPIC= 7573 +DCM= 7575 +DPSZ= 7451 +SGT= 6006 + +/DEFINITIONS OF FPP IOT'S + +FPINT= 6551 +FPICL= 6552 +FPCOM= 6553 +FPHLT= 6554 +FPST= 6555 +FPRST= 6556 + /FPP OPCODES: + +FLDA= 0000 +FADD= 1000 +FSUB= 2000 +FDIV= 3000 +FMUL= 4000 +FADDM= 5000 +FSTA= 6000 +FMULM= 7000 + LONG= 400 /TWO-WORD ADDRESSING + BASE= 200 /BASEPAGE ADDRESSING + IND= 600 /INDIRECT ADDRESSING + +FEXIT= 0000 +FNORM= 0004 +STARTF= 0005 +STARTD= 0006 +JAC= 0007 +XTA= 0030 +STARTE= 0050 +LDX= 0100 + +JA= 1030 +JNE= 1040 +TRAP3= 3000 + +/OS8 EQUIVALENCES: + +OS8SWS= 7643 +OSJSWD= 7746 +OS8DVT= 7647 +OS8DCB= 7760 +OS8DAT= 7666 + +/VARIOUS OTHER IOT'S: + +LSF= 6661 +LCF= 6662 +LSE= 6663 +LIE= 6665 +LLS= 6666 +LIF= 6667 + /PAGE ZERO FOR FORTRAN IV RTS + + *0 /INTERRUPT STUFF + 0 + JMP I .+1 + INTRPT +LPGET, LPBUFR /LINE PRINTER RING BUFFER FETCH POINTER +TOCHR, 0 /TELETYPE STATUS WORD +KBDCHR, 0 /KEYBOARD INPUT CHARACTER +POCHR, 0 /P.T. PUNCH COMPLETION FLAG +RDRCHR, 0 /P.T. READER STATUS +FMTPXR, 0 /XR USED TO INDEX FORMAT PARENTHESIS ARRAY +INXR, INBUFR-1 /XR USED TO GET CHARS FROM INPUT LINE +XR, 0 +XR1, 0 + +*16 +VEOFSW, 0 /USED BY "EOFCHK" TO STORE VARIABLE ADDRESS + 0 /*K* MUST BE IN AUTO - XR +T, 0 /TEMPORARY +DFLG, 0 /0 = F.P., 1 = D.P. +INST, 0 /CURRENT INSTRUCTION WORD + +/IOH PAGE ZERO LOCATIONS + +RWFLAG, 0 /READ/WRITE FLAG +FMTTYP, 0 /TYPE OF CONVERSION BEING DONE +EOLSW, 0 /EOL SW ON INPUT - CHAR POS ON OUTPUT +N, 0 /REPEAT FACTOR +W, 0 /FIELD WIDTH +D, 0 /NUMBER OF PLACES AFTER DECIMAL POINT + +DATCDF, 0 /SUBROUTINE TO CHANGE DATA FIELD +DATAF, 0 /CONTAINS VARIOUS CDF'S + JMP I DATCDF /RETURN + +ERR, ERROR /POINTER TO ERROR ROUTINE +FATAL, 0 /FATAL ERROR FLAG - 0=FATAL +MCDF, MAKCDF + +/FPP PARAMETER TABLE LOCATIONS: + +APT, 0 /VARIOUS FIELD BITS FOR FPP +PC, DPTEST /FPP PROGRAM COUNTER +XRBASE, 0 /FPP INDEX REGISTER ARRAY ADDRESS +BASADR, 0 /FPP BASE PAGE ADDRESS +ADR, 0 /ADDRESS TEMPORARY +ACX, 0 +ACH, 0 /*** FLOATING ACCUMULATOR *** +ACL, 0 +EAC1, 0 +EAC2, 0 /** FOR EXTENDED PRECISION OPTION ** +EAC3, 0 + /FLOATING POINT PACKAGE LOCATIONS + +AC0, 0 +AC1, 0 /FLOATING AC OVERFLOW WORD +AC2, 0 /OPERAND OVFLOW WORD +OPX, 0 +OPH, 0 /*** FLOATING OPERAND REGISTER *** +OPL, 0 + +/RTS I/O CONVERSION SYSTEM LOCATIONS + +FMTBYT, 0 /FORMAT BYTE POINTER +IFLG, 0 /I FOEMAT FLAG +GFLG, 0 /G FORMAT FLAG +EFLG, 0 /E FORMAT FLAG - SOMETIMES ON FOR G FMT +OD, 0 +SCALE, 0 +PFACT, 0 /P-SCALE FACTOR +PFACTX, 0 /TEMP FOR PFACT +ACI, 0 /INTEGERIZED FAC FROM "FFIX" SUBR +CHCH, 0 +FMTNUM, 0 /CONTAINS ACCUMULATED NUMERIC VALUE +CTCINH, 0 /^C INHIBIT FLAG +LOGUNT, 0 /DSRN POINTER - ONLY USED FROM ONE PAGE! +PTTY, TTY /POINTER TO TTY HANDLER - USED BY LDDSRN + 0 / SO FORMS CONTROL WILL WORK ON UNIT 0 +FPNXT, ICYCLE /USED AS INTERPRETER ADDRESS IF NO FPP + +/DSRN IMAGE + +HAND, 0 /HANDLER ENTRY POINT +HCODEW, 0 /HANDLER LOAD ADDR & FIELD + IOFFLG + FORMS CTL FLG +BADFLD, 0 /BUFFER ADDRESS AND FIELD +CHRPTR, 0 /ACTUALLY A WORD POINTER +CHRCTR, 0 /COUNTER - RANGES FROM -3 TO -1 +STBLK, 0 /STARTING BLOCK OF FILE +RELBLK, 0 /CURRENT RELATIVE BLOCK NUMBER +TOTBLK, 0 /LENGTH OF FILE +FFLAGS, 0 /FILE FLAGS: + /BIT 0 - "HAS BEEN WRITTEN" FLAG + /BITS 1-2 - FORMATTED/UNFORMATTED FLAGS + /BIT 11 - "END-FILED" FLAG + +BUFFLD, 0 /ROUTINE TO SET DF TO BUFFER FIELD +BUFCDF, HLT + JMP I BUFFLD + +FADD1, FADD+LONG /FPP CODE TO ADD 1.0 TO FAC + ONE /AND FALL INTO STORE CODE +FGPBF, 0 /THESE THREE WORDS ARE USED +BIOPTR, 0 /TO FETCH AND STORE FLOATING POINT NUMBERS + FEXIT /FROM RANDOM MEMORY + PAGE + /STARTUP CODE + +FTEMP2, ISZ .+3 /ALSO USED AS I/O F.P. TEMPORARY + CDF CIF 10 + JMP I .+1 +VDATE, RTSLDR /USED TO STORE OS/8 DATE + +/RTS ENTRY POINTS - "VERSION INDEPENDENT" + +VUERR, JMP I (USRERR /USER ERROR + /** LOADER MUST DEFINE #ARGER AS VARGER-1 ** +VARGER, JMS I ERR /LIBRARY ARGUMENT ERROR +VRENDO, ISZ RWFLAG /END OF I/O LIST +VRFSV, JMP I GETLMN /I/O LIST ARG ENTRY - COROUTINE WITH GETLMN +VBAK, JMP I (BKSPC /"BACKSPACE" ROUTINE +VENDF, JMP I (ENDFL /"END FILE" ROUTINE +VREW, JMP I (RWIND /"REWIND" ROUTINE +VDEF, JMP I (DFINE /"DEFINE FILE" ROUTINE +VWUO, AC4000 /UNFORMATTED WRITE +VRUO, JMP I (RWUNF /UNFORMATTED READ +VWDAO, AC4000 /DIRECT ACCESS WRITE +VRDAO, JMP I (RWDACC /DIRECT ACCESS READ +VWRITO, AC4000 /FORMATTED (ASCII) WRITE +VREADO, JMP I (RWASCI /FORMATTED (ASCII) READ +VSWAP, JMP I (SWAP /OVERLAY PROCESSOR +VEXIT, TRAP3; CALXIT /"STOP" ROUTINE - ENTERED IN FPP MODE +V8OR12, 0;0 /0;1 IF CPU IS A PDP-12 +VBACKG, JMP I (NULLJB /BACKGROUND JOB DISPATCHER + 0 + CDF CIF 0 /USED BY ROUTINE "ONQB" IN LIBRARY + JMS I .-2 + JMP VBACKG + +/IOH GET VARIABLE ROUTINE. +/THIS ROUTINE MAKES THE FORMATTED I/O PROCESSOR AND THE USER'S +/PROGRAM CO-ROUTINES (DEF(COROUTINE)= 2 ROUTINES EACH THINKING THE OTHER +/ IS A SUBROUTINE). ON ENTRY FAC=INPUT NUMBER +/IF I/O IS A READ, ON RETURN FAC=OUTPUT NUMBER IF I/O IS A WRITE. + +GETLMN, 0 +VRETRN, JMP I [RETURN /SHORT ROUTINE FOR ALL THOSE COMMENTS, NO? + /INTERRUPT DRIVEN I/O HANDLERS + +LPT, 0 /RING-BUFFERED - LP08 OR LS8E + AND [377 /JUST IN CASE +LPTSNA, SNA + JMP I (IOERR /CANNOT BE USED FOR INPUT +YLPT, IOF + DCA I LPPUT + TAD LPGET + CIA + TAD LPPUT + SZA CLA /IS LPT QUIET? + JMP .+3 /NO + TAD I LPPUT + LLS /YES - START 'ER UP + CLA IAC + LIE /ENABLE LPT INTERRUPTS + TAD LPPUT /1 IN AC, REMEMBER? + DCA LPPUT + TAD I LPPUT + SPA + JMP .-3 /NEGATIVE NUMBERS ARE BUFFER LINKS + SZA CLA /ANY ROOM LEFT IN BUFFER? + JMS I (HANG + LPUHNG /WAIT FOR LINE PRINTER + ION /TURN INTERRUPTS BACK ON + JMP I LPT /RETURN + +LPPUT, LPBUFR + +PTP, 0 /PAPER TAPE PUNCH HANDLER +YPTP, SNA + JMP I (IOERR /INPUT IS ERROR + DCA LPT /SAVE CHAR + IOF + TAD POCHR /IF PUNCH IS NOT IDLE, + SZA CLA /WE DISMISS JOB + JMS I (HANG + PPUHNG /WAIT FOR PUNCH INTERRUPT + TAD LPT + PLS /OUTPUT CHAR + DCA POCHR /SET FLAG NON-ZERO + ION + JMP I PTP + +/*K* THE FOLLOWING ADDRESSES GET FALLEN INTO & MUST BE SMALL + + IFNZRO PPUHNG&7000 <__ERROR__> + IFNZRO TTUHNG&7000 <__ERROR__> + IFNZRO KBUHNG&7000 <__ERROR__> + IFNZRO RDUHNG&7000 <__ERROR__> + IFNZRO LPUHNG&7000 <__ERROR__> + /INTERRUPT-DRIVEN PTR AND TELETYPE HANDLER + +PTR, 0 /CRUDE READER HANDLER +YPTR, SZA CLA + JMP I (IOERR /OUTPUT ILLEGAL TO PTR + IOF + RFC /START READER + JMS I (HANG + RDUHNG /HANG UNTIL COMPLETE + TAD RDRCHR /GET CHARACTER + ION + JMP I PTR /RETURN + +TTY, 0 /BUFFERS 2 CHARS ON OUTPUT, 1 ON INPUT +YTTY, IOF /DELICATE CODE AHEAD + SNA /INPUT OR OUTPUT? + JMP KBD /INPUT + DCA LPT /OUTPUT - SAVE CHAR + TAD TOCHR /GET TTY STATUS + SMA SZA CLA /G.T. 0 MEANS A CHAR IS BACKED UP + JMS I (HANG + TTUHNG /WAIT FOR LOG JAM TO CLEAR + TAD TOCHR /NO CHAR BACKED UP - SEE IF TTY BUSY + CLL RAL /"BUSY" FLAG IN LINK - INTERRUPTS ARE OFF! + CLA CML RAR /COMPLEMENT OF BUSY IN SIGN + TAD LPT /GET CHAR + SPA /IF TTY NOT BUSY, + TLS /OUTPUT CHAR + DCA TOCHR /STORE POS OR NEG, BACKED UP OR BUSY +TTYRET, ION /TURN INTERRUPTS BACK ON + JMP I TTY /AND LEAVE + KBD, TAD KBDCHR /HAS A CHARACTER BEEN INPUT? + SNA CLA + JMS I (HANG + KBUHNG /NO - RUN BACKGROUND UNTIL ONE IS + TAD KBDCHR /GET CHARACTER + DCA LPT + DCA KBDCHR /CHEAR CHARACTER BUFFER + TAD LPT + JMP TTYRET /RETURN WITH INTERRUPTS ON + +KILFPP, FPHLT /BRING FPP TO A SCREECHING HALT + ISZ .-1 + JMP .-1 /WAIT FOR IT TO STOP + FPICL /CLEAN UP MESS HALT HAS MADE IN FPP +BEEORC, SZL /^C OR ^B? + JMP I (7600 /^C - HIYO SILVER, AWAY! + KCC /CLEAR KBD FLAG ON ^B +CTLBER, JMS I ERR /*** THIS MAY BE DANGEROUS! ** + PAGE + /INTERRUPT SERVICE ROUTINES + +INTRPT, DCA INTAC + RAR + DCA INTLNK +VINT, JMP .+4 /** MUST BE AT 403 ** + IFNZRO VINT-403 <___ CHANGE LOADER!!!> + 0 + CDF CIF 0 /USER INTERRUPT ROUTINE GOES HERE + JMS I .-2 + + FPINT /CHECK FOR FPP DONE + JMP LPTEST +FPUHNG, JMP DISMIS /ALWAYS GOES TO RESTRT + +VDISMS, JMP DISMIS /FOR USE BY USERS + JMP DISMIS + JMP DISMIS + +LPTEST, LSF + JMP NOTLPT +LPTLCF, LCF /CLEAR FLAG + TAD I LPGET + SNA CLA /CHECK FOR SPURIOUS INTERRUPT +JMPDIS, JMP DISMIS /GO AWAY IF SO + DCA I LPGET /ZERO CHAR JUST OUTPUT + ISZ LPGET + TAD I LPGET + SPA + DCA LPGET /TAKE CARE OF BUFFER LINKS + SNA + TAD I LPGET /MAKE SURE CHAR IS IN AC + SZA /IS THERE A CHARACTER? + LLS /YES - PRINT IT + CLA + LSF /CHECK FOR IMMEDIATE FLAG +LPUHNG, JMP DISMIS /NO - MAYBE RESTART PROGRAM + JMP LPTLCF /YES - LOOP + +NOTLPT, TSF /CHECK TTY + JMP NOTTTY + TCF /CLEAR FLAG + TAD TOCHR /GET TTY STATUS + SMA SZA /IF THERE IS A CHARACTER WAITING, + TLS /OUTPUT IT. + SMA SZA CLA /CHANGE "WAITING" TO "BUSY", + STL RAR /"BUSY" TO "IDLE". + DCA TOCHR +TTUHNG, JMP DISMIS + /KBD AND PTP INTERRUPTS + +NOTTTY, KSF + JMP NOTKBD + TAD [200 + KRS /USE KRS TO FORCE PARITY BIT + DCA KBDCHR /AND ALSO SO THAT ^C WILL STILL BE IN BUFFER IN OS/8 + TAD KBDCHR + TAD (-202 /CHECK FOR ^C OR ^B + CLL RAR + SNA CLA + JMP CTCCTB /YUP - TAKE SOME DRASTIC ACTION + KCC /DATA CHARACTER - CLEAR FLAG +KBUHNG, JMP DISMIS + +CTCCTB, TAD CTCINH + SNA CLA /ARE WE IN A HANDLER? + JMP NOTINH /NO + TAD INTLNK + CLL RAL /YES - RETURN WITH INTERRUPTS OFF + TAD INTAC /TRUST IN GOD AND RTS + RMF + JMP I 0 + +NOTKBD, PSF + JMP NOTPTP + PCF /P.T. PUNCH INTERRUPT - CLEAR FLAG + DCA POCHR /CLEAR SOFTWARE FLAG +PPUHNG, JMP DISMIS + +NOTPTP, RSF + JMP LPTERR + TAD [200 + RRB /GET RDR CHAR + DCA RDRCHR +RDUHNG, JMP DISMIS + +LPTERR, LSE /TEST FOR LP08 ERROR FLAG + SKP + LIF /DISABLE LP08 INTERRUPTS IF ERROR FLAG ON +DISMIS, TAD INTLNK + CLL RAL + TAD INTAC /RESTORE AC AND LINK + RMF + ION + JMP I 0 /RETURN FROM THE INTERRUPT + +INTAC, 0 +INTLNK, 0 + /BACKGROUND INITIATE/TERMINATE ROUTINE + +HANG, 0 /ALWAYS CALLED WITH INTERRUPTS OFF! + TAD I HANG /GET POINTER TO UNHANGING LOCATION + DCA UNHANG + RDF /GET FIELD CALLED FROM + TAD HCIDF0 + DCA HNGCDF /SAVE FOR RETURN +HCIDF0, CDF CIF 0 + TAD (JMP RESTRT /CHANGE THE "JMP DISMIS" AT THAT LOC + DCA I UNHANG /TO A "JMP RESTRT" + TAD BACKLK + CLL RAL + TAD BACKAC /SET UP BACKGROUND AC AND LINK +BAKCIF, CIF 0 +BAKCDF, CDF 0 + ION + JMP I BACKPC /INITIATE BACKGROUND + +/ COME HERE WHEN THE HANG CONDITION HAS GONE AWAY + +RESTRT, TAD JMPDIS /RESTORE THE UNHANG LOCATION + DCA I UNHANG + TAD INTAC /SUSPEND THE BACKGROUND + DCA BACKAC + TAD INTLNK + DCA BACKLK + TAD 0 + DCA BACKPC + RIB + AND [70 + TAD HCIDF0 + DCA BAKCIF + RIB + JMS I MCDF /*K* OK SINCE BACKGROUND DOESN'T USE MAKCDF + DCA BAKCDF + ISZ HANG +HNGCDF, HLT + JMP I HANG /INTERRUPTS ARE OFF - RETURN + +NOTINH, TAD JMPDIS /IN CASE WE WERE HUNG, WE DON'T WANT + DCA I UNHANG /TO GET "UNHUNG" OUT OF THE ERROR ROUTINE! + JMP I (KILFPP /KILL FPP AND GO TO EXIT OR ERROR + +UNHANG, 0 +BACKAC, 0 +BACKLK, 0 +BACKPC, VBACKG +VHANG= HANG + IFNZRO VHANG-0524 <__ CHANGE LOADER!> + PAGE + /I-O CONVERSION ROUTINES - STARTUP CODE + +RWASCI, JMS I [RWINIT /"READ(N,FMT)" OR "WRITE(N,FMT)" + 2000 /"FORMATTED" BIT + JMS I [FETPC /GET ADDRESS OF FORMAT STMT + DCA FMTDF + JMS I [FETPC + DCA FMTADR + DCA FMTTYP + DCA PFACT /CLEAR SCALE FACTOR + JMS I [GETLMN /EXIT TO MAIN PROGRAM TO GET 1ST VARIABLE + + TAD (FMTPDL-1 +FMTSET, DCA FMTPXR /STORE NEW FORMAT PUSHDOWN POINTER + TAD I FMTPXR + DCA FMTBYT /GET NEW BYTE POINTER (NOTE-FMTPDL CONTAINS A 0) + /MAIN FORMAT DECODING LOOP + +FMTFLP, TAD FMTBYT + DCA FMPBYT /SAVE CURRENT BYTE PTR FOR PARENTHESES HACK +FMTDLP, DCA FMTNUM /ZERO ACCUMULATED NUMBER +FMTCLP, JMS FMTGCH /GET A CHARACTER + ISZ FMTBYT /BUMP BYTE POINTER + JMS I [CHTYPE /CLASSIFY CHAR + 1234; FMTDIG /DIGIT + -42; DBLQOT /" + -44; ABORTO /$ + -55; FMINUS /- + -56; FMTPER /. + -57; SLASH // + -54; COMMA /, + -50; LPAREN /( + -51; RPAREN /) + -47; KWOTE /' + -40; FMTCLP /SPACE + 0 /ANYTHING ELSE + + TAD FMTTYP + SZA CLA /CHECK THAT WE DO NOT HAVE A FIELD OUTSTANDING + JMP I (FMTERR /IF WE DO - ERROR + TAD CHCH /GET FIELD CHARACTER + DCA FMTTYP + TAD FMTNUM + SNA /IF REPEAT COUNT WAS MISSING OR ZERO + IAC /MAKE IT ONE + CMA + DCA N /STORE -(REPEAT COUNT +1) + DCA W /CLEAR WIDTH INITIALLY + ISZ FMTNUM /PRECLUDE "FORMAT ERROR" ON X,P, OR H FORMATS + TAD FMTTYP + AND [7 /IS THE CHARACTER P, X, OR H? + SNA CLA /IF SO, DON'T WAIT +COMMA, JMS I (DOFMT /EXECUTE THE STORED FIELD SPECIFICATION + JMP FMTFLP /BACK FOR MORE + +FMTADR, 0 /ADDRESS OF FORMAT + FMTGCH, 0 /GET CHARACTER FROM FORMAT + JMS FMTGAD /GET WORD CONTAINING CHAR AND L/R SWITCH + CDF 0 + JMS I (FMTGLR /EXTRACT CHARACTER + JMP I FMTGCH + +FMTGAD, 0 /SUBR TO GET A WORD FROM A CHARACTER OFFSET + TAD FMTBYT /GET OFFSET + CLL RAR + CLL + TAD FMTADR /COMPUTE BASE ADDR + [OFFSET/2] + DCA D + RAL + TAD FMTDF + JMS I MCDF /SET UP PROPER DATA FIELD + DCA .+1 + HLT + TAD FMTBYT + RAR + CLA /LEAVE L/R SWITCH IN LINK + TAD I D + JMP I FMTGAD /RETURN WITH WORD IN AC + +FMTDF, 0 /FIELD OF 1ST CHAR OF FORMAT IN BITS 9-11 + +FMTDIG, TAD FMTNUM /DIGIT PROCESSOR + CLL RTL + TAD FMTNUM + CLL RAL /MULTIPLY FMTNUM BY 10 + TAD CHCH /ADD IN THE DIGIT + JMP FMTDLP /STORE IT BACK AND CONTINUE + /PARENTHESIS AND DIGIT ROUTINES + +LPAREN, TAD FMTPXR + TAD (2-FMTPDL + SZA /ARE WE AT PARENTHESIS LEVEL 1? + JMP .+3 /NO + TAD FMPBYT /YES - STORE A POINTER TO THE FIRST DIGIT OF THE + DCA I (FMTPDL-2 /GROUP COUNT PRECEDING THIS PAREN + /AS THE LOOP POINTER FOR LEVEL 1 + TAD [7 + SPA CLA /PUSHDOWN OVERFLOW? +FPOERR, JMS I ERR /YES + AC7775 + TAD FMTPXR + DCA FMTPXR /BUMP PARENTHESIS PUSHDOWN POINTER + TAD FMTBYT + DCA I FMTPXR /SAVE BYTE POINTER + TAD FMTNUM + SNA + IAC /NO GROUP COUNT MEANS COUNT = 1 + CIA + DCA I FMTPXR /SAVE LOOP COUNT + DCA I (FMTPDL-1 /INITIAL GROUP COUNT IS INFINITE! +RPLOOP, AC7776 /COME HERE ON RIGHT PAREN ALSO + TAD FMTPXR /BACK UP FORMAT PDL POINTER + JMP FMTSET /RESTORE FMTBYT FROM TOP OF LIST + +FMPBYT, 0 + +RPAREN, JMS I (DOFMT /EXECUTE PREVIOUS SPEC IF ANY + TAD FMTPXR + TAD (2-FMTPDL /IS THIS THE FINAL RIGHT PAREN? + SNA CLA + JMS I [ENDREC /YES - CHECK FOR END OF FORMAT + ISZ I FMTPXR /BUMP COUNT + JMP RPLOOP /DIDN'T OVERFLOW - LOOP TO BYTE AFTER ( + ISZ FMTPXR /POP UP PARENTHESES STACK + JMP FMTFLP /CONTINUE PAST RIGHT PAREN + PAGE + /QUOTE AND HOLLERITH FORMAT PROCESSORS + +KWOTE, TAD MINUS5 /APOSTROPHE PROCESSOR +DBLQOT, TAD (-42 /QUOTE PROCESSOR + DCA KWODEL /SAVE TERMINATOR + JMS DOFMT /PROCESS PRECEDING FIELD , IF ANY + SKP +KWOTLP, JMS FMTHCV /PROCESS ONE CHARACTER + JMS I [FMTGCH /GET THE NEXT FORMAT CHAR + TAD KWODEL + SZA CLA /IS IT THE TERMINATOR? + JMP KWOTLP /NO - PROCESS IT AND CONTINUE + ISZ FMTBYT /BUMP OVER TERMINATOR + JMS I [FMTGCH + TAD KWODEL + SNA CLA /IS THIS ANOTHER TERMINATOR? + JMP KWOTLP /TWO TERMINATORS PRINT AS ONE + JMP I (FMTFLP /OTHERWISE GO BACK TO FORMAT LOOP + +HFMT, JMS MORE /MORE CHARACTERS? + JMS FMTHCV /YES - PROCESS ONE + JMP HFMT /AND LOOP + +FMTHCV, 0 /ROUTINE COMMON TO H AND QUOTED FORMATS + TAD RWFLAG /PROCESSES ONE CHAR IN OR OUT OF THE FORMAT +H7700, SMA CLA /IN OR OUT? + JMP FMTHIN /IN + JMS I [FMTGCH /OUT - GET THE CHAR + JMS I [FMTOUT /PRINT IT + JMP FMTHCR /RETURN +FMTHIN, JMS I [FMTIN /INPUT - GET THE CHAR FROM THE INPUT LINE + DCA W /SAVE IT + JMS I (FMTGAD + SZL /WHICH SIDE? + JMP FHRGHT /RIGHT SIDE + AND [77 /LEFT - KEEP RIGHT CHAR + DCA MORE + TAD W + CLL RTL + RTL + RTL + TAD MORE /ADD NEW CHAR IN ON THE LEFT + JMP .+3 +FHRGHT, AND H7700 /KEEP THE CHAR ON THE LEFT + TAD W /ADD NEW CHAR IN ON THE RIGHT + DCA I D /RESTORE ALTERED WORD + CDF 0 +FMTHCR, ISZ FMTBYT /BUMP BYTE POINTER + JMP I FMTHCV + +KWODEL, 0 /MUST BE UNIQUE! + MORE, 0 /SUBR TO BUMP REPEAT COUNT AND EXIT ON OVFLO + ISZ N + JMP I MORE +DOFRTN, DCA FMTTYP /INDICATE NO SPECIFICATION COLLECTED + JMP I DOFMT /RETURN FROM "DOFMT" + +DOFMT, 0 /ROUTINE TO PROCESS A FORMAT SPECIFICATION + TAD FMTNUM /GET THE CURRENT NUMBER + DCA D /STORE IT AS DECIMAL POINT SPEC + DCA IFLG + DCA EFLG + DCA GFLG /ZERO CONVERSION FLAGS + TAD FMTTYP + SNA CLA /ANY SPECIFICATION WAITING? + JMP I DOFMT /NO - JUST RETURN + TAD W + TAD D /IF THERE WAS NO W OR D SPECIFICATION, + SNA CLA + JMP FMTERR /ITS AN ERROR + TAD FMTTYP + JMS I [CHTYPE /YES - WHICH ONE? + -30; XFMT /X + -24; TFMT /T + -20; PFMT /P + -14; LFMT /L + -11; IFMT /I + -10; HFMT /H + -7; GFMT /G + -6; FFMT /F +MINUS5, -5; EFMT /E + -4;DF, EFMT /D - EQUIVALENT TO E IF NO D.P. FPP + -2;BF, FFMT /B - EQUIVALENT TO F IF NO D.P. FPP + -1; AFMT /A + 0 /NONE OF THE ABOVE - ERROR +FMTERR, JMS I ERR + ENDREC, 0 /ROUTINE TO END A LINE AND MAYBE THE I/O + JMS I [EOLINE + CLA IAC + AND RWFLAG /LO BIT OF RWFLAG IS "I/O LIST EXHAUSTED" FLAG + SNA CLA /SKIP IF NO MORE ELEMENTS IN I/O LIST + JMP I ENDREC + JMP I [ENDIO /NOW FINISH UP AND LEAVE + +SLASH, JMS DOFMT /EXECUTE THE FIELD SPEC IF ANY + JMS I [EOLINE /TERMINATE CURRENT LINE + JMP I (FMTFLP + +PFMT, CLA CMA + TAD FMTNUM + ISZ MINFLG /P FORMAT - CHECK FOR NEGATIVE SCALE + CIA + DCA PFACT + STA /FALL INTO CODE TO CLEAR MINFLG + DCA MINFLG /SET FLAG ON MINUS + JMP DOFRTN + +FMINUS, JMS DOFMT /EXECUTE PRECEDING SPEC + DCA MINFLG /CLEAR MINUS FLAG + JMP I (FMTFLP + +MINFLG, -1 + +FMTPER, TAD FMTNUM /PERIOD PROCESSOR + DCA W /STORE WIDTH + JMP I (FMTFLP + +ABORTO, JMS DOFMT /$ - SPECIAL HACK TO ALLOW PROMPTS + DCA EOLSW /FAKE BEGINNING OF LINE + DCA I (TTYLF /INHIBIT LF BEFORE NEXT TTY INPUT + JMP I [ENDIO /GO AWAY + PAGE + CHTYPE, 0 /ROUTINE TO CLASSIFY CHARACTERS + DCA CHCH /SAVE CHAR + JMP CHLOOP+1 +CDIGIT, TAD CHCH /CHECK FOR DIGIT + TAD (-72 + CLL + TAD [12 + SZL /IS CHAR A DIGIT? + JMP JMPOUT /YES +CHLOOP, ISZ CHTYPE /SKIP OVER ADDRESS + CLA + TAD I CHTYPE + ISZ CHTYPE + SMA /END OF LIST? + JMP JMPOTX /MAYBE - JUMP WITH CODE IN AC + TAD CHCH + SZA CLA /DOES CHAR MATCH CHAR ON LIST? + JMP CHLOOP /NO - KEEP LOOKING +JMPOUT, DCA CHCH /ZERO CHAR + TAD I CHTYPE + DCA CHTYPE /SET UP TO RETURN INDIRECTLY +JMPOTX, SZA CLA /IS THIS THE END? + JMP CDIGIT /NO - GO CHECK FOR DIGIT + JMP I CHTYPE /GO TO SPECIFIED ADDRESS + + +SKPOUT, 0 /ROUTINE USED BY DATA-HANDLING SPECIFICATIONS + JMS I [MORE /CHECK FOR REPEAT COUNT EXHAUSTED + TAD RWFLAG + CLL RAR + SZA CLA /IF OUTPUT, + ISZ SKPOUT /SKIP RETURN + SZL CLA /IF END OF I/O LIST, + JMS I [ENDREC /DON'T RETURN AT ALL - GO AWAY + JMP I SKPOUT + /A FORMAT PROCESSOR + +AINPUT, TAD (4040 + DCA ACH + TAD (4040 + DCA ACL /INITIALIZE LOW-ORDER WORDS TO BLANKS +AINPTL, JMS GADR + SZL /LEFT OR RIGHT? + JMP AINPTR /RIGHT + JMS I [FMTIN + STL RTL /INPUT CHAR GOES IN HIGH-ORDER + RTL /WITH BLANK IN LOW-ORDER + RTL + JMP AINPTC +AINPTR, JMS I [FMTIN + TAD I FMTGLR /COMBINE INPUT CHAR AND OLD LEFT HALF + TAD [-40 /DELETE PREVIOUS RIGHT-HALF SPACE +AINPTC, DCA I FMTGLR /STORE WORD + ISZ W + JMP AINPTL /LOOP AROUND WIDTH +ANXT, JMS I [GETLMN /GET NEXT ELEMENT +AFMT, TAD D + CIA + DCA W /SAVE FIELD WODTH AS A COUNT + JMS I [SKPOUT /CHECK FOR REPEAT COUNT OVFLO AND I/O DIR + JMP AINPUT +AOTPUT, JMS GADR /OUTPUT - GET ADDRESS OF BYTE + TAD I FMTGLR + JMS FMTGLR /GET BYTE + JMS I [FMTOUT /PRINT IT + ISZ W + JMP AOTPUT /LOOP ON WIDTH + JMP ANXT + +FMTGLR, 0 /SUBR TO EXTRACT A CHAR FROM A WORD + SZL + JMP .+4 /RIGHT HALF + RTR + RTR + RTR /LEFT HALF - ROTATE INTO RIGHT HALF + AND [77 + JMP I FMTGLR + +GADR, 0 /BYTE ADDRESS ROUTINE FOR A FORMAT PROCESSOR + TAD D + TAD W /FORM BYTE OFFSET IN THE RANGE 0 THRU D-1 + CLL RAR + TAD (ACX + DCA FMTGLR + JMP I GADR /LEAVE WITH L/R FLAG IN LINK + /"STOP" ROUTINE - TERMINATES JOB + +CALXIT, TAD EXDVNO + CIA + DCA ACI /GO THROUGH THE FORTRAN UNIT NUMBERS. + DCA I (ENDFLS /*K* TURN "ENDFL" INTO A SUBROUTINE + JMS I (LDDSRN /IF WE FIND A UNIT WHICH IS BEING USED + SNA CLA /AND HAS NOT BEEN ENDFILED, + JMP XITISZ /WE WILL DUMP THE CURRENT BUFFER (IF IT + CLA IAC /IS A FORMATTED OUTPUT FILE) AND + AND FFLAGS /END-FILE IT + SNA CLA + JMS I (ENDFL +XITISZ, ISZ EXDVNO + JMP CALXIT +LPTTWT, TAD I LPGET /WAIT FOR LINE PRINTER AND TELETYPE TO + TAD TOCHR /GO QUIET. + SZA CLA + JMP LPTTWT + ISZ CLNADR /SET UP TO CLOSE OUTPUT FILES +PDPXIT, IOF /ENTER HERE FROM 7605 + CDF 0 /TO PROTECT CLODS WITH PDP 8/E'S + JMS I (7607 + 0210 + 7400 /READ IN CLEANUP ROUTINE + 37 /AND OS/8 PAGE 17600 + JMP .-5 /AYEEEE!! SYSTEM DEVICE GONZO! + CDF CIF 10 + JMP I CLNADR /CLOSE TENTATIVE FILES AND EXIT +CLNADR, CLNUP +EXDVNO, -11 + +ARGLD, 0 /ROUTINE TO GET VALUE OF AN ARG + JMS I [FETPC + AND [7 /THROW AWAY OPCODE (JA) + TAD FLDTM2 + DCA FGPBF + JMS I [FETPC /CONSTRUCT AN FPP INSTRUCTION + DCA BIOPTR + JMS I [FPGO + FGPBF + JMP I ARGLD + +FLDTM2, FLDA+LONG + FTEMP2 + FEXIT + PAGE + /SUBROUTINE TO OPEN A UNIT FOR I/O + +RWINIT, 0 + DCA RWFLAG /DIRECTION IN AC ON ENTRY + AC7776 + AND I RWINIT /IF CALLED FROM BACKSPACE, REWIND OR ENDFILE + SZA CLA /UNIT NUMBER IS IN FAC + JMS I [ARGLD /OTHERWISE, GET UNIT NUMBER + JMS I [FFIX + TAD ACI + CLL CMA + TAD [12 + SZL CLA /CHECK DEVICE NUMBER IN RANGE 0-9 + JMS LDDSRN /LOAD DSRN ENTRY INTO PAGE 0 + SNA CLA /IS UNIT INITIALIZED? +UNTERR, JMS I ERR /NO - ERROR + TAD RWFLAG + SPA /IF WE ARE WRITEING FOR THE FIRST TIME + TAD FFLAGS /ON A UNIT WHICH WAS BEING READ, + CMA RAL /WE MUST BUMP THE RELATIVE BLOCK NUMBER DOWN + SNL SMA CLA /ONE BECAUSE OF A PHILOSOPHICAL DIFFERENCE + JMS I (RD2WR /BETWEEN READ AND WRITE + TAD I RWINIT + TAD RWFLAG /OR THE I/O TYPE AND + CMA + AND FFLAGS /DIRECTION BITS INTO THE FLAG WORD + TAD I RWINIT + TAD RWFLAG + DCA FFLAGS + TAD FFLAGS + CMA RTL + SNL SMA CLA /IT IS ILLEGAL TO ACCESS A FILE IN + JMP UNTERR /FORMATTED AND UNFORMATTED MODES + ISZ RWINIT + TAD ACI + CLL RAL + TAD ACI + TAD (DATABL-4 + DCA XR /STORE POINTER INTO DIRECT-ACCESS TABLE + JMP I RWINIT + /REWIND AND END FILE + +RWIND, JMS RWINIT /GET THE DSRN ENTRY + 0 /DON'T PLAY WITH MODES + AC2000 + TAD FFLAGS + SNA CLA /IF FORMATTED OUTPUT FILE AND NOT EOF'D + JMS DMPBUF /DUMP LAST BUFFER AS A FAVOR +ATLDMK, CLA IAC + AND FFLAGS /KILL ALL FLAG BITS + DCA FFLAGS /EXCEPT "END-FILED" BIT + TAD BADFLD + AND [7400 + DCA CHRPTR + AC7775 + DCA CHRCTR /INITIALIZE BUFFER POINTERS + DCA RELBLK /AND RELATIVE BLOCK # + JMP I [ENDIO /RESTORE DSRN AND EXIT + +ENDFL, JMS RWINIT /*K* USED AS A SUBROUTINE BY CALXIT + 1 /GET DSRN, SET "END FILE" FLAG + TAD FFLAGS /IF THE FILE IS UNFORMATTED, + CMA RAL /OR WAS NOT OUTPUT ONTO, + SNL SMA CLA /THEN ENDFILE DOES NOTHING. + JMS DMPBUF /ELSE DUMP THE FINAL BUFFER + AC3777 + AND FFLAGS /CLEAR WRITE BIT SO WE WILL NOT TRY +SETTOT, DCA FFLAGS /ANYTHING ON A SUBSEQUENT ENDFILE + TAD RELBLK /SET NEW LENGTH OF FILE IN CASE ITS TENTATIVE, + DCA TOTBLK /AND SO WE WON'T READ PAST EOF. +ENDIO, JMS INITMV /SET UP DSRN POINTERS + TAD I XR1 + DCA I XR /STORE BACK THE DSRN ENTRY + ISZ T /FOR THIS LOGICAL UNIT + JMP .-3 + DCA VEOFSW /CLEAR EOFSW AT END OF EVERY READ +ENDFLS, JMP I [RETURN /RETURN TO THE CALLING PROGRAM + JMP I ENDFL /*K* OR RETURN TO CALXIT + +INITMV, 0 /ROUTINE TO SET UP STUFF +ICDF0, CDF 0 + TAD LOGUNT + DCA XR + TAD (HAND-1 + DCA XR1 + TAD (-11 + DCA T + JMP I INITMV + /ROUTINE TO DUMP CURRENT OUTPUT BUFFER WITH ^Z AT THE END + +DMPBUF, 0 + ISZ EOLSW /FORCE COLUMN 1 SWITCH OFF + TAD (7712 /OUTPUT A LINE FEED + JMS I [FMTOUT + TAD HAND /IF THE FILE IS BEING OUTPUT VIA + SMA CLA /AN OS/8 HANDLER, + JMP CLREOL /WE MUST TERMINATE THE BUFFER PROPERLY. + TAD (32 +CTZLP, TAD Z7700 /OUTPUT A ^Z AND FILL BUFFER WITH ZEROES. + JMS I [FMTOUT /NEGATIVE NUMBERS TURN INTO CONTROL CHARS + TAD CHRPTR + AND [377 + TAD CHRCTR /FILL THE BUFFER UNTIL CHRPTR POINTS TO + IAC /A BLOCK BOUNDARY AND CHRCTR = -3 +Z7700, SMA CLA /WE ARE THEN AT BUFFER-END + JMP CTZLP +CLREOL, DCA EOLSW /RESET TO BEGINNING OF LINE + JMP I DMPBUF /RETURN + +/ROUTINE TO MOVE THE PROPER DSRN ENTRY INTO PAGE 0 + +LDDSRN, 0 + TAD ACI / READ/WRITE INIT SINGS THIS SONG, + CLL RTL / (DOO DAH, DOO DAH,) + RAL / DSRN ENTRIES 9 WORDS LONG + TAD ACI / (OH, DEE DOO DAH DAY). + + SNA /DEVICE NUMBER 0 IS SPECIAL - + TAD (PTTY+11-DSRN /IT'S ALWAYS THE TELETYPE + TAD (DSRN-12 + DCA LOGUNT + JMS INITMV /SET UP FOR MOVE + TAD I XR + DCA I XR1 /PUT DSRN ENTRY IN PAGE 0 + ISZ T + JMP .-3 + TAD BADFLD + AND [70 + TAD ICDF0 + DCA BUFCDF /SAVE BUFFER FIELD AS A CDF + TAD HAND + JMP I LDDSRN + PAGE + /BACKSPACE ROUTINE - WORKS ON BINARY OR ASCII FILES + +BKSPC, JMS I [RWINIT + 0 /GET THE DSRN ENTRY WITHOUT ALTERING MODE + TAD HAND + SMA CLA + JMP I [UNTERR /UNIT MUST BE BLOCK ORIENTED + AC2000 + AND FFLAGS + SZA CLA /IS FILE FORMATTED? + JMP BKASCI /YES - PAIN IN NECK + JMS BMPBLK /UNFORMATTED FILE - REREAD LAST BLOCK + TAD CHRPTR + TAD [377 + DCA T + JMS BUFFLD /SET DATA FIELD TO FIELD OF BUFFER + TAD I T /LOOK AT LAST WORD IN BUFFER + CIA /REGARD IT AS THE NUMBER OF BLOCKS/RECORD + TAD RELBLK + DCA RELBLK /RELBLK POINTS TO FIRST BLOCK OF PREV. REC + JMP I [ENDIO + +BMPBLK, 0 /SUBR TO BUMP BLOCK # BACK AND READ + CMA CLL /AC MAY NOT BE 0 ON ENTRY + TAD RELBLK + DCA RELBLK /BUMP BLOCK BACK + SNL + JMP I (ATLDMK /BACKSPACED TOO FAR - CALL IT QUITS + DCA CHRPTR /ZERO CHRPTR TO FORCE A READ FROM MASSIO + JMS I [MASSIO /READ A BLOCK + JMP I BMPBLK + +/**** NULL JOB GOES HERE FOR LACK OF A BETTER PLACE **** + +NULLJB, TAD N2525 +NULLLP, ISZ N2525 /PUT THE FAMOUS "POLY BASIC PATTERN" + JMP NULLLP /IN THE AC LIGHTS + ISZ NUMISZ + JMP NULLLP + CML CMA RAR + DCA N2525 + TAD [-4 + DCA NUMISZ + JMP I (VBACKG /GOT SOMETHING MORE USEFUL TO DO? +N2525, 2525 +NUMISZ, -4 + /BACKSPACE FOR FORMATTED FILES + +BKLORD, TAD I CHRPTR + ISZ CHRPTR + NOP + AND [177 /GET 7 BITS + TAD (-15 /COMPARE WITH C.R. - SINCE WE SKIPPED + SNA CLA /THE FIRST ONE THIS WILL BELONG TO THE PREVIOUS + JMP I [ENDIO /LINE AND WE WILL BE DONE (HAH!) +BKASCI, JMS I (MASBMP /A COMPLICATED MESS - FIRST BUMP THE + SKP /CHARACTER POINTER BACK TWO PLACES + JMP BKGTCH /AND THEN FETCH A CHARACTER. THIS WILL IGNORE + TAD BADFLD /THE LAST CHAR READ/WRITTEN (WHICH SHOULD + AND [7400 /BE A CARRIAGE RETURN). + CIA + TAD CHRPTR + CLL RAR + SZA CLA /TEST WHETHER WE HAVE TO READ AN OLD BUFFER + JMP BKNORD /NO + TAD CHRCTR /SAVE POSITION IN CURRENT DOUBLEWORD + DCA GETCH3 + DCA CHRPTR + AC4000 /IF WE ARE BACKSPACING AN OUTPUT FILE, + TAD FFLAGS /WE MUST SAVE THE INFORMATION IN THE + SPA /CURRENT BUFFER BY WRITING IT OUT. + JMP .+4 + DCA FFLAGS /ALSO CHANGE THE UNIT TO AN INPUT FILE + AC4000 /(RWINIT TAKES CARE OF SWITCHING BACK TO OUTPUT) + JMS I [MASSIO + CLA IAC /WE DON'T WANT THE LAST BLOCK READ/WRITTEN, + JMS BMPBLK /THAT'S IN CORE - WE WANT THE ONE + TAD GETCH3 /BEFORE THAT. + DCA CHRCTR + TAD CHRCTR + TAD (401 + SKP /COMPUTE WORD POINTER FROM CHAR POINTER +BKNORD, STA + TAD CHRPTR + DCA CHRPTR /BUMP WD PTR BACK 1 +BKGTCH, JMS I (MASBMP /NOW GET A CHARACTER - THIS LOOKS A LOT + JMP BKLORD /LIKE THE INPUT ROUTINE + JMS GETCH3 + JMP BKLORD+1 + GETCH3, 0 /COMMON CODE BETWEEN BACKSPACE AND INPUT + TAD I CHRPTR + AND [7400 + DCA BMPBLK /HANDY TEMPORARY + ISZ CHRPTR + TAD I CHRPTR + AND [7400 + CLL RTR + RTR /COMBINE TWO 4-BIT QUANTITIES + TAD BMPBLK /INTO A CHARACTER + CLL RTR + RTR + JMP I GETCH3 + +DATABL, ZBLOCK 33 /DIRECT ACCESS TABLE + PAGE + /I,E,F,AND G FORMAT CONVERSIONS + +IFMT, TAD D + DCA W /SET WIDTH PROPERLY + DCA D /FOR SCALING PURPOSES + STA + DCA IFLG + JMP FFMT + +GFMT, STA + DCA GFLG /SET G AND E FLAGS + +EFMT, STA + DCA EFLG /SET E FLAG + JMP FFMT + +IGEF, JMS I [GETLMN /MAIN LOOP FOR CONVERSIONS - SKIPPED 1ST TIME +FFMT, TAD D + DCA OD /SAVE COUNT OF POST-D.P. DIGITS + TAD IFLG + SNA CLA /APPLY THE P-SCALE FACTOR + TAD PFACT /ONLY IF THE FORMAT IS NOT I + DCA PFACTX + DCA SCALE /DON'T LOOK FOR TROUBLE + JMS I [SKPOUT /CHECK IF MORE AND TEST DIRECTION + JMP I (IGEFIN /INPUT + STA + DCA I [FFNEG /USE NEGATE ROUTINE HEADER AS SIGN FLAG + TAD EFLG + CLL RAL + CLL RAL /0 IF NOT E, -4 IF E + TAD W /THIS PROVIDES FOR THE EXP. FIELD (IF E FMT) + DCA OW /OR THE 4 TRAILING SPACES (IF G FMT) + TAD ACH + SNA + JMP SKPSHT /AC IS ZERO - SKP A LOT OF SHT + SPA CLA + JMS I [FFNEG /AC<0 - NEGATE IT AND SET FLAG (CLEVER) +SCALUP, DCA SCALE + TAD ACX + SMA SZA CLA /AC<1.0? + JMP GT1 /NO + JMS I [FPGO /YES - MULTIPLY BY 10.0 + FMUL10 + STA + TAD SCALE /BUMP POWER OF TEN + JMP SCALUP + /I,G,E,F, OUTPUT CONVERSIONS - NUMBER IS NOW =>1.0 + +GT1, JMS I (SCALDN /NOW DECREASE IT TO THE INTERVAL [0,1) + JMS I [FPGO /SAVE IT AWAY + FSTTMP + TAD [7 + JMS OSCALE + JMS I [FPGO /USE IT TO ROUND THE NUMBER TO BE OUTPUT + FADTMP + JMS I (SCALDN /WE COULD HAVE ROUNDED FROM .999... TO 1.000... +SKPSHT, TAD GFLG /ENTER HERE IF NUM WAS 0 - SCALE=0 + SNA CLA + JMP NOTG /NOT G FORMAT + TAD SCALE /G FORMAT - TEST FOR OUT OF F FORMAT RANGE + TAD PFACTX + CIA CLL /F FORMAT RANGE IS [.1,10**(D VALUE)) + TAD OD + SNL + JMP USEE /IF OUT OF BOUNDS USE E FORMAT (FLAG IS SET) + DCA OD /REDUCE D VALUE BY SCALE FACTOR + DCA EFLG /TO RETAIN CORRECT # OF SIG. DIGITS +USEE, CLA + JMP NOTG + +/SET UP TO PRINT DIGITS + + +DIGCNT, 0 + TAD PFACTX /COMPUTE EXPONENT JUST IN CASE E FORMAT + CIA + TAD SCALE + DCA FMTNUM + TAD EFLG + SNA CLA /NOW COMPUTE THE NUMBER OF DIGITS BEFORE THE D.P. + TAD SCALE /TAKE SCALE FACTOR INTO ACCOUNT IF NOT E FORMAT + TAD PFACTX /TAKE P FACTOR INTO ACCOUNT IF NOT I OR F/G + DCA SCALE /STORE THE NUMBER OF DIGITS BEFORE THE D.P. + TAD I [FFNEG /INCREASE NUMBER OF LEADING BLANKS BY 1 + SPA CLA /IF THE NUMBER IS POSITIVE. THIS DEPENDS ON + ISZ OW /THIS LOCATION BEING BELOW 4000. + TAD SCALE /GET THE NUMBER OF PRE-D.P. DIGITS (AS NEGATIVE #) + SPA SNA + CLA IAC /IF NONE, PRINT A 0 SO COUNT AS 1 + TAD OD /REDUCE THE WIDTH BY THIS NUMBER + CMA + TAD OW /REDUCE IT AGAIN BY THE POST-D.P. DIGIT COUNT + CIA + TAD IFLG /AND AGAIN BY 1 FOR THE D.P. (IF NOT I FORMAT) + JMP I DIGCNT +OW, 0 + /I,G,E,F FORMAT - ROUTINE TO SCALE ROUNDING FACTOR + +OSCALE, 0 /SUBR TO SCALE .5 THE CORRECT # OF TIMES + DCA NPLCS /MAX IN AC ON ENTRY + DCA ACX + AC2000 /FORM A FLOATING 0.5 IN ORDER + DCA ACH /TO ROUND THE NUMBER BEFORE PRINTING. + DCA ACL + TAD EFLG /FIGURE OUT HOW TO SCALE IT - + SNA CLA /THE THEORY IS THAT IT SHOULD BE SCALED + TAD SCALE /DOWN BY THE NUMBER OF SIGNIFICANT + DCA T /PRINTING DIGITS. THIS CAN BE + TAD SCALE /EXPRESSED AS: + CIA CLL /(P FACTOR) * (NOT (G FMT PRINTING AS F)) + TAD OD / + (SCALE FACTOR) * (NOT E FMT) + (D VALUE). + SZL CLA /THE SCALE FACTOR IS < 0 FOR + TAD GFLG /NUMBERS < .1, WHICH REDUCES + SNA CLA /THE # OF SIG. DIGITS VIA LEADING ZEROS. + TAD PFACTX /IF THERE ARE < 0 SIG. DIGITS + TAD T /IT DOESN'T MATTER WHAT WE DO + TAD OD /SINCE THE NUMBER WILL PRINT AS + SMA /0.00000 ANYWAY. + CMA /IF THERE ARE >NPLCS SIG. PRINTING DIGITS + TAD NPLCS /THE ROUNDING GETS MEANINGLESS SO MAKE + SPA /THE EXCESS DIVISIONS DIVIDES BY 2 INSTEAD + DCA ACX / OF BY 10. THIS FUDGE WORKS QUITE WELL + CIA /FOR NUMBERS OF UP TO NPLCS+2 + TAD NPLCS /SIGNIFICANT DIGITS. + CIA + DCA T + JMP .+3 +FDIVLP, JMS I [FPGO /SCALE THE .5 DOWN THE CORRECT NUMBER OF TIMES + FDIV10 + ISZ T + JMP FDIVLP + JMP I OSCALE +NPLCS, 0 +ONE, 1;2000;0 + PAGE + /I,G,E,F OUTPUT CONVERSION - ACTUAL OUTPUT SECTION + +OUTNUM, SMA /CHECK FOR FIELD OVERFLOW + JMP ASTSK1 /YES - PRINT ******* + JMS OBLNKS /PRINT LEADING BLANKS - AC IS NOT 0! + /***IMPORTANT - OBLNKS CLEARS AC1 *** + AC7775 + ISZ I [FFNEG /IF SIGN IS NEGATIVE, + JMS DIGIT /OUTPUT A MINUS SIGN + CLA /OTHERWISE OUTPUT NOTHING + TAD ACX + SNA /ALIGN THE FAC MANTISSA INTO A DOUBLEWORD + JMS I [AL1 /FRACTION IN THE RANGE [.1,1) + IAC /THIS INVOLVES SHIFTING THE MANTISSA + CMA /RIGHT BY (-ACX-1) PLACES + SMA /WHERE A NEGATIVE NUMBER MEANS A LEFT SHIFT. + JMS I [ACSR + CLA + TAD ACL /NOW MOVE THE FAC DOWN A WORD SO THAT + DCA AC1 /WHEN WE MULTIPLY BY 10 THE OVERFLOW APPEARS + TAD ACH /IN THE HIGH-ORDER WORD + DCA ACL + TAD SCALE + SPA SNA /DO WE HAVE DIGITS TO THE LEFT OF THE D.P.? + JMP PRZERO /NO - PRINT A ZERO THERE + JMS DIGITS /YES - PRINT THEM +PRDCPT, TAD IFLG + SZA CLA + JMP I (IGEF /IF I FORMAT, WE'RE DONE NOW + AC7776 + JMS DIGIT /OTHERWISE PRINT DECIMAL POINT + TAD SCALE + SMA CLA /CHECK WHETHER WE NEED TO PRINT LEADING ZEROS + JMP NOLZRO /NO + TAD SCALE + DCA T +LZLOOP, STA CLL + TAD OD /BUMP D VALUE DOWN BY ONE + SNL /IF IT GOES NEGATIVE, + JMP NOMOAC /WE'VE RUN OUT OF FIELD WIDTH + DCA OD + JMS DIGIT /PRINT A ZERO + ISZ T /UNTIL THE COUNT (OR THE WIDTH) RUNS OUT + JMP LZLOOP +NOLZRO, TAD OD + SZA /IF THERE ARE ANY DIGITS YET TO BE PRINTED, + JMS DIGITS /PRINT THEM + /I,G,E,F OUTPUT CONVERSION - FINISH UP + +NOMOAC, CLA + TAD EFLG + SNA CLA /E FORMAT? + JMP CHKG /NO - CHECK FOR G FORMAT OUTPUT AS F + JMS EXPFLD + JMP I (IGEF +EXPFLD, 0 + TAD (5 + JMS I [FMTOUT /OUTPUT "E" + TAD FMTNUM /GET EXPONENT + CLL + SPA + CML CIA /SEPARATE INTO MAGNITUDE AND SIGN + DCA FMTNUM /SAVE MAGNITUDE + RTL + TAD (-5 /PRINT + OR - + JMS DIGIT + DCA T /INITIALIZE QUOTIENT OF DIVISION +DVELP, TAD FMTNUM /SUBTRACT 10 FROM EXPONENT + TAD [-12 + SPA /DID IT GO NEGATIVE? + JMP PRNTXP /YES - DONE + DCA FMTNUM /NO - STORE IT BACK + ISZ T /BUMP QUOTIENT + JMP DVELP /LOOP +PRNTXP, CLA + TAD T + TAD [-12 + SMA CLA + JMP ASTSK3 + TAD T + JMS DIGIT + TAD FMTNUM + JMS DIGIT /PRINT TWO DIGITS OF EXPONENT + JMP I EXPFLD + +CHKG, TAD GFLG + SNA /WAS IT G FORMAT? + JMP I (IGEF /NO - F OR I - DONE + DCA EFLG /RE-SET EFLG SINCE WE ZEROED IT BEFORE + TAD (-5 + JMS OBLNKS /OUTPUT 4 BLANKS + JMP I (IGEF /DONE WITH G FORMAT OUTPUT + +PRZERO, CLA /COME HERE IF NO SIG. DIGITS LEFT OF D.P. + JMS DIGIT /PRINT A ZERO + JMP PRDCPT /CONTINUE + +ASTSK3, AC0002 + JMP .+3 +ASTSK1, CLA /CLEAR THE AC + TAD W /GET THE FIELD WIDTH + JMS I [ASTRSK + JMP I (IGEF + /I,G,E,F OUTPUT CONVERSION - OUTPUT SUBROUTINES + +OBLNKS, 0 /SUBROUTINE TO PRINT A STRING OF BLANKS + DCA AC1 /MUST LEAVE AC1 ZERO ON EXIT SO THAT + JMP .+3 /FAC LEFT SHIFT WON'T SHIFT IN GARBAGE LATER ON + TAD [40 + JMS I [FMTOUT /OUTPUT A BLANK + ISZ AC1 + JMP .-3 /LOOP + JMP I OBLNKS /RETURN + +DIGITS, 0 /ROUTINE TO OUTPUT A STRING OF DECIMAL DIGITS + CIA + DCA T +DGLOOP, TAD AC1 + DCA AC2 /COPY AC INTO OPERAND FOR ADDITION LATER ON + TAD ACL + DCA OPL + DCA ACH /CLEAR "OVERFLOW WORD" + JMS I [AL1 + JMS I [AL1 /FAC=FAC*4 + DCA OPH + JMS I [OADD + JMS I [AL1 /FAC=ORIGINAL FAC*10 + TAD ACH /GET OVERFLOW + JMS DIGIT /PRINT IT + ISZ T /LOOP FOR SPECIFIED NUMBER + JMP DGLOOP + JMP I DIGITS /RETURN + +DIGIT, 0 /ROUTINE TO OUTPUT A DIGIT + TAD [60 + JMS I [FMTOUT /TRIVIAL, ISN'T IT? + JMP I DIGIT + PAGE + /I,G,E,F INPUT CONVERSION + +IGEFIN, STA /OD CONTAINS SCALING IF NO D.P. IN INPUT + DCA DPSW /INITIALIZE D.P. SW + STA + DCA INESW /DITTO EXPONENT SWITCH + TAD W + CMA + DCA FMTNUM /GET CHAR COUNT +INERSM, DCA ACX /RE-ENTER HERE AFTER SEEING "E" + DCA ACH /CLEAR FLOATING AC + DCA ACL + STA + JMP INMINS /SET SIGN PLUS + +INGCH, JMS I [FMTIN /GET A CHAR + JMS I [CHTYPE /CLASSIFY IT + 1234; IDIGIT /DIGIT + -56; INDCPT /. + -53; INLOOP /+ + -55; INMINS /- + -5; INE /E + -40; IBLDIG /BLANK - TREAT LIKE 0 IN FORTRAN STANDARD + -54; INEONM /, + 0 /OTHER - ERROR +INER, JMS I ERR + +INDCPT, DCA OD /ZERO COUNT OF DIGITS AFTER D.P. + ISZ DPSW /TEST AND SET D.P. SWITCH + JMP INER /WHOOPS - TWO D.P.S IN A NUMBER + JMP INLOOP /KEEP GOING + +IBLDIG, TAD EOLSW /SINCE THE BLEEPING STANDARD DOESN'T COVER + SZA CLA /TELETYPE I/O, WE KEEP SOME COOL BY IGNORING + JMP INLOOP /BLANKS CREATED BY EARLY LINE TERMINATION. + +IDIGIT, TAD CHCH + DCA DGT+1 /SAVE THE DIGIT + JMS I [FPGO /FORM 10*FAC + DIGIT IN FAC + ACMDGT + TAD DPSW + SNA CLA + ISZ OD /BUMP DIGIT COUNT IF D.P. SEEN + JMP INLOOP + INMINS, DCA I [FFNEG /SET SIGN NEGATIVE + +INLOOP, ISZ FMTNUM + JMP INGCH /LOOP UNTIL WIDTH EXHAUSTED +INEONM, ISZ I [FFNEG /CHECK IF SIGN NEGATIVE + JMS I [FFNEG /YES - NEGATE + ISZ INESW /SEE IF "E" SEEN + JMP FIXUPE /YES - WE HAVE EXPONENT, NOT NUMBER + TAD PFACTX /NO "E" SEEN - SCALE USING P FACTOR + +SCALIN, TAD OD /GET SCALING FACTOR + STL + SNA + JMP I (IGEF /NO SCALING NECESSARY + SMA + CIA CLL /AC CONTAINS MAGNITUDE, LINK CONTAINS SIGN + DCA OD + RTL + RAL /AC CONTAINS 0 IF DIVIDE, 4 IF MULTIPLY + TAD (FDIV10 + DCA IGEFOP + JMS I [FPGO /MULTIPLY OR DIVIDE BY 10.0 +IGEFOP, 0 + ISZ OD + JMP IGEFOP-1/MULT OR DIV APPROPRIATE NUMBER OF TIMES + JMP I (IGEF /RETURN FOR MORE + +INE, ISZ INESW /SEE IF THIS IS THE SECOND "E" + JMP INER /YES - ERROR + ISZ DPSW /FORCE DP SW ON (TO INHIBIT D.P. AFTER E) + TAD OD /USE SCALE FACTOR ONLY IF D.P. SEEN + DCA SCALE /SAVE SCALE FACTOR + ISZ I [FFNEG + JMS I [FFNEG /GET SIGN OF NUMBER CORRECT + JMS I [FPGO /SAVE IT TEMPORARILY + FSTTM2 + JMP INERSM /GO COLLECT EXPONENT + +FIXUPE, JMS I [FFIX + TAD ACI /GET EXPONENT + CIA + TAD SCALE /ADD IN EXPONENT TO D.P. SCALE FACTOR + DCA OD + JMS I [FPGO /GET NUMBER BACK IN FAC + FLDTM2 + JMP SCALIN + +DPSW, 0 +DGT, 13;0;0;0;0;0 +NOTG, JMS I (DIGCNT + DCA SCALDN + TAD IFLG + SNA CLA + JMP NOTI + TAD SCALE + TAD (-7 + SPA CLA +NOTI, TAD SCALDN + JMP I (OUTNUM + SCALDN, 0 /SUBROUTINE TO SCALE THE FAC LESS THAN 1.0 + TAD ACX + SPA SNA CLA /IS THE FAC => 1.0? + JMP I SCALDN /NO - WE'RE DONE + JMS I [FPGO /DIVIDE BY TEN + FDIV10 + ISZ SCALE /BUMP POWER OF TEN + 0 /BACKUP FOR WIDTH + JMP SCALDN+1 /LOOP + +ASTRSK, 0 + CIA + DCA T + TAD (52 + JMS I [FMTOUT + ISZ T + JMP .-3 + JMP I ASTRSK /GET NEXT ELEMENT + +INESW, 0 /"E SEEN" SWITCH ON INPUT + PAGE + /L AND X FORMATS , T FORMAT INPUT + +TFMTIN, JMS I [FMTIN /FORCE INPUT BUFFER NON-EMPTY + CLA /BY FETCHING AND WASTING A CHARACTER + TAD (INBUFR + DCA INXR + DCA EOLSW /SET TO BEGINNING OF LINE + JMP XFMT +XFMTIN, JMS I [FMTIN +H7600, 7600 /WASTE AN INPUT CHAR +XFMT, JMS I [MORE /ANY MORE CHARS? + TAD RWFLAG /YES - IN OR OUT? + SMA CLA + JMP XFMTIN /IN +TPPLBL, TAD [40 /HERE WITH AC=13 TO OVERPRINT ON T OUTPUT + JMS I [FMTOUT /OUT + JMP XFMT + +LINGCH, JMS I [FMTIN + JMS I [CHTYPE /GET AND CLASSIFY CHARACTER + -40; LINLP /BLANK + -24; LINTRU /T + -6; LINFLS /F + 0 /OTHER - ERROR + JMP I (INER + +LINTRU, TAD (4001 +LINFLS, CLL RAR /PUT EITHER 0.0 OR 1.0 IN THE FAC + DCA ACH + DCA ACL + RAL + DCA ACX +LINLP, ISZ W + JMP LINGCH /LOOP ON FIELD WIDTH + +LNXT, JMS I [GETLMN /GET NEXT ELEMENT FOR I/O +LFMT, TAD D + CMA + DCA W /SAVE WIDTH AS A COUNT + JMS I [SKPOUT /IN OR OUT? + JMP LINFLS /IN + CLA IAC + TAD W + JMS I (OBLNKS /OUTPUT W-1 BLANKS + TAD ACH + SZA CLA + TAD (16 + TAD (6 /NON-ZERO IS TRUE, ZERO FALSE + JMS I [FMTOUT /OUTPUT T OR F + JMP LNXT /NEXT VICTIM + /T FORMAT OUTPUT AND RANDOM SUBROUTINES + +TFMT, TAD D + CIA + DCA N /USE N TO FAKE OUT "X" FMT ROUTINE + TAD RWFLAG + SMA CLA + JMP TFMTIN /INPUT + TAD N + TAD EOLSW /COMPARE DESIRED POSITION WITH CURRENT ONE + SPA + JMP TPBLNK /AFTER - SPACE TO IT + JMS EOLINE /OUTPUT CR AND ZERO EOLSW + JMS I [MORE /KLUDGE FOR "T1" FORMAT + TAD (13 /FAKE X FORMAT INTO PRINTING + JMP TPPLBL /A + AND (N-1) SPACES +TPBLNK, DCA N /SAVE DIFFERENCE BETWEEN POSITIONS + JMP XFMT /GO SPACE OUT + +EOLINE, 0 /SUBROUTINE TO TERMINATE I/O LINE + TAD RWFLAG /CAUTION - AC LO-ORDER BITS MAY NOT BE 0 + SPA CLA /INPUT OR OUTPUT? + JMP EOOUTL /OUTPUT + JMS I [FMTIN /FORCE INPUT BUFFER NON-EMPTY + CLA + TAD (INBUFR-1 + DCA INXR /SET XR TO NEGATIVE WORD AT THE + JMP .+3 /BEGINNING OF THE INPUT BUFFER +EOOUTL, TAD (7715 + JMS I [FMTOUT /OUTPUT A CARRIAGE RETURN + DCA EOLSW /CLEAR EOLSW FOR INPUT AND OUTPUT + JMP I EOLINE + /ROUTINE TO MOVE A HANDLER INTO FIELD 0 + +GETHND, 0 /HANDLER CODE WORD IN AC ON ENTRY + DCA HCW /SAVE HANDLER CODE WORD + TAD [7774 + AND HCW /KNOCK OUT ION AND FORMS CTL BITS + CIA + SZA /IF HANDLER IS NOT RESIDENT, + TAD HKEY /SEE IF THE HANDLER IS ALREADY + SNA CLA /IN THE HANDLER AREA IN FIELD 0 + JMP HINF0 /YES + TAD HCW /NO - PUT IT THERE + AND [70 + TAD HCDF0 + DCA HNDCDF /GET CDF TO FIELD IN WHICH HANDLER RESIDES + TAD HCW + AND H7600 + TAD (-1 /GET POINTER TO HANDLER ADDRESS + DCA XR1 /IN THAT FIELD + TAD (HPLACE-1 + DCA XR /ALSO TO HANDLER AREA IN FIELD 0 + TAD [7400 /SET UP COUNT OF 7400 + DCA HKEY /INDEPENDENT OF HANDLER SIZE +HNDCDF, HLT + TAD I XR1 +HCDF0, CDF 0 + DCA I XR /MOVE HANDLER INTO HANDLER AREA + ISZ HKEY + JMP HNDCDF + TAD [7774 + AND HCW + DCA HKEY /SET NEW KEY CODE WORD +HINF0, CLA IAC + AND HCW + SNA CLA /INTERRUPTS ALLOWED? +YHIOF, IOF /NO - TOO BAD + ISZ CTCINH /INHIBIT ^C DURING HANDLER CALL + JMP I GETHND +HKEY, 0 +HCW, 0 + PAGE + /CHARACTER INPUT ROUTINE - LINE AT A TIME + +FMTIN, 0 + TAD EOLSW + SNA /END OF LINE ALREADY FOUND? + TAD I INXR /NO - GET CHAR FROM LINE BUFFER + SPA /TIME TO READ A NEW LINE? + JMP READLN /YES + SNA /END OF LINE? + JMP INEOL /YES - SET INDICATOR + AND [77 /CONVERT TO SIXBIT + JMP I FMTIN /RETURN WITH IT +INEOL, TAD [40 +UNPKLN, DCA EOLSW /SET EOL INDICATOR TO A BLANK + JMP FMTIN+1 /AND RETURN BLANKS FROM HERE ON IN +READLN, DCA EOLSW /USE EOLSW AS A COUNT SO IT WINDS UP 0 + TAD HAND + TAD (-TTY + SNA CLA /IS IT TELETYPE INPUT? + STA /YES - SET TTY FLAG + DCA TTYFLG + JMS ECHO +TTYLF, 12 /ECHO LF IF TTY INPUT + TAD [12 /TTYLF IS ZEROED BY ABORTO + DCA TTYLF + +READLP, CLA + TAD HAND + SPA CLA /CHARACTER ORIENTED DEVICE? + JMP MASSIN /NO - UNPACK CHAR FROM BUFFER + JMS I HAND /GET A CHARACTER +GOTCHR, AND [177 /STRIP OFF PARITY + JMS I [CHTYPE /CLASSIFY IT + -15; INCRET /CARRIAGE RETURN + -177; RUBOUT /RUBOUT + -11; INTAB /TAB + -25; CTRLU /^U + -32; INEOF /^Z + 0 /ANYTHING ELSE + TAD CHCH + TAD [-40 + SMA /IF CHARACTER IS >37, + JMS INPUTC /STORE IT AND ECHO IT IF TTY + JMP READLP + /CHARACTER INPUT ROUTINE - SPECIAL CHARACTER HANDLERS + +INTAB, JMS INPUTC /TAB - INSERT (AND ECHO) BLANKS + TAD INXR + AND [7 + SZA CLA /UNTIL A COLUMN MULTIPLE OF 8 IS REACHED + JMP INTAB + JMP READLP + +RUBOUT, TAD EOLSW + CIA + TAD I (INBUFR /IGNORE RUBOUTS IF LINE EMPTY + AND TTYFLG + SNA CLA + JMP READLP /OR IF NON-TTY INPUT + JMS ECHO + 134 /ECHO A BACKSLASH +IBAKUP, STA + TAD INXR + DCA INXR /BACK UP LINE POINTER + STA + TAD EOLSW + DCA EOLSW /AND CHAR COUNTER + JMP READLP + +INEOF, TAD VEOFSW /CHECK SWITCH SET BY "CHKEOF" LIBRARY ROUTINE + SNA /WAS HE EXPECTING AN EOF? +EOFERR, JMS I ERR /NO + JMS I MCDF + DCA .+1 + HLT /CDF TO FIELD OF INDICATOR VARIABLE + AC2000 + DCA I VEOFSW+1 /SET VARIABLE TO .5 + CDF 0 /FALL INTO CARRIAGE RETURN CODE + +INCRET, DCA I INXR /CARRIAGE RETURN - ZERO OUT REST OF LINE + SKP +CTRLU, STA /SNEAKY, SNEAKY! + TAD (INBUFR + DCA INXR /RESET XR TO FETCH LINE CHARS + JMS ECHO + 15 /ECHO THE C.R. + JMP UNPKLN /BACK TO FETCH FIRST CHAR + +INPUTC, 0 /ROUTINE TO STORE AND ECHO A CHAR + TAD [40 + DCA INTMP + JMS ECHO +INTMP, 0 /ECHO CHAR IF TTY INPUT + TAD INTMP + DCA I INXR /STORE CHAR IN LINE BUFFER + ISZ EOLSW + JMP I INPUTC /RETURN IF NO OVERFLOW + JMP IBAKUP /IGNORE CHAR IF OVERFLOW + ECHO, 0 /ROUTINE TO ECHO CHAR IF TTY INPUT + TAD I ECHO /GET CHAR + AND TTYFLG + SZA /SHOULD WE ECHO? + JMS I HAND /YES + JMP I ECHO /RETURN TO CHARACTER - ITS SMALL +TTYFLG, 0 + +/CHARACTER INPUT ROUTINE - MASS STORAGE SECTION + +MASSIN, JMS MASBMP /GET BUFFER FIELD AND CHAR NUMBER + JMP INLORD /CHAR 1 OR 2 - STRAIGHTFORWARD + JMS I (GETCH3 /USE COMMON SUBROUTINE + JMP MASICM /GO TO COMMON CODE + +INLORD, JMS I [MASSIO /CHECK IF WE SHOULD READ IN A BUFFERLOAD + JMS BUFFLD /SET FIELD OF BUFFER + TAD I CHRPTR +MASICM, ISZ CHRPTR /GET THE CHAR (IN LOW 8 BITS) AND BUMP PTR + NOP /WATCH END OF FIELD FUNNYBUSINESS! + CDF 0 /RESET DATA FIELD + JMP GOTCHR /GO EXTRACT SEVEN BIT CHARACTER + +MASBMP, 0 + JMS BUFFLD /SET TO BUFFER'S DATA FIELD + ISZ CHRCTR /BUMP CHAR COUNTER + JMP I MASBMP /CHAR 1 OR 2 - NO SWEAT + AC7775 + DCA CHRCTR /CHAR 3 - RESET CHAR CTR + AC7776 + TAD CHRPTR /BUMP BACK CHAR PTR + DCA CHRPTR + ISZ MASBMP + JMP I MASBMP /SKIP RETURN + PAGE + /CHARACTER OUTPUT ROUTINE + +FMTOUT, 0 + TAD [40 /FIRST CONVERT SIXBIT TO ASCII + SMA /CTL CHARS COME IN NEGATIVE + AND [77 + TAD (240 + DCA OCHAR /SAVE ASCII CHAR (WITHOUT PARITY BIT) + TAD EOLSW + SZA CLA + JMP NOT1ST /FIRST CHAR IS DECODED FOR FORMS CONTROL + AC0002 /CHECK TO SEE IF THIS UNIT + AND HCODEW /SHOULD RECEIVE FORMS CONTROL + SZA CLA + JMP LFPLCH /NO - JUST PRINT A LINE FEED AND THE CHAR + TAD OCHAR + JMS I [CHTYPE /CLASSIFY CONTROL CHAR + -261; OUTFFX /1 - TOP OF FORM + -260; OUT2LF /0 - DOUBLE SPACE + -253; NOLF /+ - OVERPRINT + 0 /ANYTHING ELSE - SINGLE SPACE + JMP OUTLF + +OUTFFX, TAD HAND + TAD (-TTY /IF HANDLER IS TTY OUTPUT TWO LINE FEEDS + SZA CLA /INSTEAD OF A FORM FEED + JMP OUTFF +OUT2LF, TAD [12 + DCA OCHAR /SET 2ND CHAR TO LINE FEED +LFPLCH, STA + DCA EOLSW /SET SWITCH FOR 2ND CHAR + TAD OCHAR + DCA CHCH /SAVE CHARACTER AWAY +OUTLF, AC7776 +OUTFF, TAD F214 /SUBSTITUTE THE APPROPRIATE FORM CONTROL + DCA OCHAR /FOR THE CHARACTER +NOT1ST, TAD HAND + SPA CLA /CHARACTER ORIENTED DEVICE? + JMP MASOUT /NO - PACK CHAR INTO BUFFER + TAD OCHAR + JMS I HAND /OUTPUT CHAR +NOLF, ISZ EOLSW /BUMP CHAR CTR + JMP I FMTOUT /NO - RETURN + TAD CHCH /AHA - ANOTHER CHARACTER SHOULD BE OUTPUT + JMP OUTFF+1 /GO TO IT + /CHARACTER OUTPUT - MASS STORAGE OUTPUT + +MASOUT, JMS I (MASBMP /GET BUFFER FIELD AND CHAR NUMBER + JMP OULORD /CHAR 1 OR 2 - STRAIGHTFORWARD + JMS OSUBR /CHAR 3 - PACK FIRST HALFBYTE + JMS OSUBR /PACK SECOND HALFBYTE + AC4000 + JMS MASSIO /CHECK IF WE SHOULD DUMP THE BUFFER +MASOCM, CDF 0 + JMP NOLF /GO RETURN OR REENTER + +OULORD, TAD OCHAR + DCA I CHRPTR /STORE CHAR, ZAPPING HIGH-ORDER BITS + ISZ CHRPTR /BUMP CHAR PTR +F214, 214 /GUARD AGAINST OVFLO + JMP MASOCM /RETURN + +OSUBR, 0 /ROUTINE TO PACK A HALFBYTE + TAD OCHAR + CLL RTL + RTL /SHIFT CHAR 4 LEFT + DCA OCHAR + TAD I CHRPTR /CLEAR OUT ANY RESIDUE + AND [377 /FROM HIGH-ORDER OF BUFFER WORD + DCA I CHRPTR /IN CASE WE ARE WRITING AFTER A BACKSPACE. + TAD OCHAR + AND [7400 /GET 4 BITS + TAD I CHRPTR + DCA I CHRPTR /ADD INTO HIGH-ORDER OF BUFFER WORD + ISZ CHRPTR /BUMP POINTER + 200 /OVERFLOW! + JMP I OSUBR + +MASSIO, 0 /SUBROUTINE TO READ/WRITE BUFFER IF NECESSARY + CDF 0 + TAD BUFCDF /ADD BUFFER CDF TO R/W BIT IN AC + TAD (-6001 /TAKE AWAY CDF, LEAVE BIT 4 ON + DCA IOCTL /STORE I/O CONTROL WORD + TAD CHRPTR + AND [377 + SZA CLA /SEE IF POINTER IS AT BUFFER BOUNDARY + JMP I MASSIO /YES - RETURN DOING NOTHING + TAD RELBLK + TAD STBLK /STORE BLOCK # IN HANDLER CALL + DCA BLOCK + TAD BADFLD + AND [7400 + DCA BUFFER /STORE BUFFER ADDRESS IN HANDLER CALL + /CHARACTER OUTPUT - BUFFER I/O ROUTINE CONTINUED + + TAD TOTBLK + CIA CLL + TAD RELBLK + SZL CLA /CHECK FOR FILE OVERFLOW +IOVFLO, JMS I ERR /YES - ERROR + TAD HCODEW + JMS I (GETHND /GET HANDLER INTO FIELD 0 + JMS I HAND /CALL HANDLER +IOCTL, 0 +BUFFER, 0 +BLOCK, 0 + SMA CLA /HANDLER ERROR - ABORT + SKP /IF NOT EOF +IOERR, JMS I ERR + JMS I (RECOVR /CLEAR ANY FLAGS SET BY OS8 HANDLER + ISZ RELBLK /BUMP RELATIVE BLOCK NUMBER + TAD BUFFER + DCA CHRPTR /RESET CHAR PTR + JMP I MASSIO /RETURN +/FPP CODE FOR I/O CONVERSION + +FDIV10, FDIV+LONG + TEN + FEXIT +OCHAR, 0 /*** NEEDED FOR PADDING *** +FMUL10, FMUL+LONG /FMUL10 MUST BE AT FDIV10+4 + TEN + FEXIT + +FWTOBL, FSUB+LONG + ONE + FDIV+LONG + FLTG85 + FEXIT + PAGE + /UNFORMATTED (BINARY) INPUT-OUTPUT + +RWUNF, JMS I [RWINIT /"READ(N)" OR "WRITE(N)" + 1000 /"UNFORMATTED" BIT + TAD SZLCLA /ENABLE SEQUENCE CHECKING +UNFIO, DCA SEQCHK /*** SET SEQCHK TO "SZL CLA" OR "CLA" + DCA RECCTR /ENTER HERE FROM DIRECT ACCESS + TAD HAND + SMA CLA /CHECK FOR MASS-STORAGE HANDLER + JMP I [UNTERR /NO - ERROR + JMS I [GETLMN /GET FIRST VARIABLE + TAD RWFLAG + SPA CLA +RSETBP, TAD (125 /INITIALIZE COUNT TO -86 FOR WRITE, + CMA /-1 FOR READ + DCA CHRCTR + TAD BADFLD + AND [7400 + DCA BIOPTR /INITIALIZE BUFFER POINTER + TAD BADFLD + AND [70 + IAC + CLL RTR /AC BIT 0 NOW ON + TAD RWFLAG /AC BIT 0 CONTAINS COMP. OF R/W FLAG + CLL RAR /AC=(.NOT.RW)*2000+BUFFER FIELD + TAD (FSTA+LONG /AC=(FSTA OR FLDA) + BUFFLD + DCA FGPBF + JMP UIOVLP /SKIP FIRST VARIABLE FETCH/STORE +BFINCR, JMS I [FPGO + FGPBF /LOAD OR STORE A BUFFER ENTRY + ISZ BIOPTR + ISZ BIOPTR /INCREASE BUFFER POINTER + ISZ BIOPTR + JMS I [GETLMN /GET A VARIABLE FROM THE CALLING PROGRAM +UIOVLP, TAD RWFLAG + CLL RAR /LOWORDER BIT OF RWFLAG = END LIST FLAG + SZL CLA + JMP ENDUIO /NO MORE VARIABLES - TERMINATE + ISZ CHRCTR /BUMP COUNTER + JMP BFINCR /ROOM IN BUFFER - MOVE VARIABLE + JMS UDOIO /GET A NEW BUFFER + JMP RSETBP /RESET BUFFER POINTERS AND COUNTERS + +ENDUIO, TAD RWFLAG /COME HERE WHEN I/O LIST EXHAUSTED + SPA CLA /WRITE? + JMS UDOIO /YES - WRITE OUT THE LAST BUFFER + JMP I [ENDIO /RESTORE DSRN ENTRY AND QUIT + +RECCTR, 0 + /DIRECT-ACCESS I/O + +RWDACC, JMS I [RWINIT /"READ(N'R)" OR "WRITE(N'R)" + 1000 /DIRECT ACCESS IS UNFORMATTED I/O + TAD I XR + DCA T /GET BLOCKS/RECORD FACTOR FROM D.A. TABLE + JMS I [ARGLD /GET RECORD NUMBER + JMS I [FFIX /CONVERT TO INTEGER + TAD T + TAD ACI + ISZ T /MULTIPLY RECORD NUMBER BY BLOCKS/RECORD + JMP .-2 /TO GET RELATIVE BLOCK NUMBER + DCA RELBLK + TAD I XR + SNA /THIS LOC SHOULD NOT BE ZERO! +DAERR, JMS I ERR + DCA FGPBF /IT SHOULD BE AN FSTA + THE FIELD + TAD I XR /IN WHICH THE CONTROL VARIABLE IS + DCA BIOPTR /STORED. THE NEXT WORD IS THE ADDRESS + JMS I [FPGO /OF THE CONTROL VARIABLE IN THAT FIELD + FADD1 /ADD 1 TO RECORD # AND STORE IN CONTROL VAR + TAD DUMPIT /*K* "DCA T" SAME AS "CLA" HERE + JMP UNFIO /NOW GO DO A REGULAR BINARY READ/WRITE + +UDOIO, 0 + ISZ RECCTR /BUMP NUMBER OF RECORDS TRANSFERRED + TAD BADFLD + AND [7400 + TAD [377 /FORM POINTER TO LAST WORD IN BUFFER + DCA BIOPTR + TAD RECCTR + JMS BUFFLD + DCA I BIOPTR /FOR WRITE, PUT RECORD NUMBER IN 256TH WORD +UDOIOL, DCA CHRPTR + AC4000 + AND RWFLAG + JMS I [MASSIO /DO I/O (CHRPTR=0 TO FORCE I/O) + JMS BUFFLD + TAD RECCTR + CMA STL /FOR READ, CHECK THE INPUT + TAD I BIOPTR /SEQUENCE NUMBER TO MAKE SURE IT IS + CDF 0 /NO LARGER THAN THE ONE WE EXPECT. +SEQCHK, SZL CLA /*K* IF IT IS LARGER THIS IMPLIES THAT WE + JMP I UDOIO /ARE STILL IN THE MIDDLE OF THE LAST + JMP UDOIOL /RECORD AND SO WE READ AGAIN. + /DEFINE FILE PROCESSOR + +DFINE, JMS I [RWINIT /SET UP A POINTER INTO THE D.A. TABLE + 1000 /DIRECT ACCESS I/O IS UNFORMATTED + JMS I [ARGLD /GET NUMBER OF RECORDS + JMS I [FFIX + TAD ACI + CIA +DUMPIT, DCA T /SAVE IT FOR MULTIPLY + JMS I [ARGLD /GET THE NUMBER OF WORDS/RECORD + JMS I [FPGO /CONVERT WORDS TO BLOCKS + FWTOBL + JMS I [FFIX /CONVERT TO INTEGER + ISZ ACI + TAD ACI /MULTIPLY THE NUMBER OF BLOCKS/RECORD + ISZ T /BY THE NUMBER OF RECORDS + JMP .-2 + DCA RELBLK /TO GET THE FILE LENGTH IN BLOCKS + TAD ACI + CIA + DCA I XR /STORE NUMBER OF BLOCKS/RECORD + JMS I [ARGLD /GET POINTER TO CONTROL VARIABLE + TAD FGPBF + TAD (FSTA-FLDA /CHANGE A LOAD TO A STORE + DCA I XR /SAVE "FSTA CONTROL-VARIABLE" + TAD BIOPTR + DCA I XR + TAD TOTBLK + CMA CLL + TAD RELBLK /MAKE SURE WE HAVE ROOM FOR THE FILE +SZLCLA, SZL CLA +DFERR, JMS I ERR /WE DON'T + AC7776 + AND FFLAGS + IAC /FORCE "END-FILED" BIT FOR CLOSE + JMP I (SETTOT /SET LENGTH AND EXIT + PAGE + /SWAPPER AND ERROR ROUTINE + +SWAP, JMS I [FETPC /SWAPPER CALLING SEQUENCE: + DCA T / TRAP3 SWAP + TAD T / ADDR OVLY*4000000+LVL*100000+ENTRYADR + AND [7 + TAD (JA + DCA STRTUP /STORE JA TO ENTRY POINT + JMS I [FETPC + DCA STRTUP+1 + TAD T + AND [70 + CLL RAR /FORM 4*LVL + TAD (OVLYTB /INDEX INTO LEVEL TABLE + DCA ADR + TAD T + AND [7400 + DCA T /T CONTAINS OVERLAY NUMBER IN BITS 0-3 + CDF 0 /WATCH D.F.! + TAD I ADR + TAD T /SEE IF THIS OVERLAY IS IN CORE + SNA CLA + JMP ITSIN /YES - DON'T LOAD + TAD T + CIA + DCA I ADR /MARK THIS OVERLAY IN CORE (OPTIMIST) + ISZ ADR + TAD I ADR + AND [7400 + DCA OVADR /SAVE INITIAL OVERLAY LOAD ADDRESS + TAD I ADR + AND [70 + DCA OVIOW /AND FIELD + ISZ ADR + TAD I ADR /GET STARTING BLOCK OF THIS LEVEL + DCA OVBLK + ISZ ADR + TAD I ADR + DCA OVLEN /STORE LENGTH OF OVERLAY IN BLOCKS +OVADLP, TAD T /LEVEL STARTING BLOCK + + SNA /(OVERLAY #) * (OVERLAY LENGTH) + JMP LOADOV /= OVERLAY STARTING BLOCK + TAD [7400 + DCA T + TAD OVBLK + TAD OVLEN + DCA OVBLK + JMP OVADLP + /SWAPPER - CONTINUED + +LOADLP, DCA OVLEN /STORE UPDATED OVERLAY LENGTH + TAD OVIOW /GET LAST READ CONTROL WORD + RAL + AND [7400 /CONVERT BLOCK COUNT TO WORD COUNT + TAD OVADR /INCREMENT OVERLAY LOAD ADDRESS (LINK = 0) + DCA OVADR + RTL + RTL /USE THE CARRY + TAD OVIOW /TO INCREMENT THE LOAD FIELD IF NECESSARY + AND [70 + DCA OVIOW /OVIOW CONTAINS ONLY THE LOAD FIELD NOW + +LOADOV, TAD OVADR + CIA /LOTSA CALCULATIONS HERE - OS/8 HANDLERS + SNA /CAN'T READ MORE THAN 15 BLOCKS AT A TIME + TAD [7400 /AND CANNOT READ OVER FIELD BOUNDARIES + CLL RTL + RTL /SO WE MUST BREAK UP THE OVERLAY READ + CMA CML RAL /INTO SEVERAL SMALL READS OF MAXIMAL LENGTH. + TAD OVLEN /THE NUMBER OF BLOCKS TO READ IS GIVEN BY: + CMA /MINIMUM(B,L,15) + SMA /WHERE B IS THE # OF BLOCKS LEFT IN THIS FIELD + CLA /AND L IS THE # OF BLOCKS LEFT IN THE OVERLAY + TAD OVLEN /AND 15 IS THE # OF BLOCKS A HANDLER CAN READ + DCA T / ANSWER IN T + TAD T + CLL RTR + RTR + RTR /TURN NUMBER OF BLOCKS INTO 0S/8 BLOCK COUNT + TAD OVIOW + DCA OVIOW /ADD FIELD BITS AND STORE AS I/O CONTROL WD + TAD OVHCDW /GET OVERLAY HANDLER CODE WORD + JMS I (GETHND /LOAD HANDLER INTO FIELD 0 + JMS I OVHND +OVIOW, 0 +OVADR, 0 +OVBLK, 0 +OVERR, JMS I ERR /WHOOPS - OVERLAY READ ERROR + JMS RECOVR /CLEAR ANY NASTY FLAGS LEFT BY HANDLER + TAD T + TAD OVBLK + DCA OVBLK /UPDATE BLOCK NUMBER + TAD T + CIA + TAD OVLEN /BUMP DOWN RECORD COUNT + SZA /SEE IF WE ARE DONE + JMP LOADLP /NO - PREPARE FOR NEXT READ + /OVERLAY IN CORE - EXECUTE IT + +ITSIN, JMS I [FPGO /START UP FPP + STRTUP /AND JA TO ENTRY POINT + +TRAP5I, +TRAP6I, +TRAP7I, +FPAUSE, +FPPERR, JMS I ERR /SHOULD NEVER GET HERE + +STRTUP, 0;0 /JA ENTRY +OVLEN, 0 +OVHND, 0 /SET BY LOADER +OVHCDW, 0 /SET BY LOADER + +RECOVR, 0 /ROUTINE TO CLEAN UP ANY FLAGS + DCA CTCINH /LEFT ON BY SLOPPY OS/8 HANDLERS. +YRCOVR, NOP + NOP + NOP + NOP /RIGHT NOW I DON'T KNOW OF ANY. + NOP + NOP + NOP + NOP + ION + JMP I RECOVR + +FSTTMP, FSTA+LONG + FTEMP + FEXIT + +TEN, 4;2400;0;0;0;0 /10.0D0 +FLTG85, 7;2520;0 /85.0 + PAGE + /INPUT BUFFER - CONTAINS STARTUP CODE + +INBUFR, -206 /LENGTH + 0 /INPUT LINE BUFFER - FIRST A LITTLE PADDING, + +/RTS EXECUTION INITIALIZATION - IN INPUT BUFFER + +FPSTRT, 6601 /CLEAR DF32 FLAG + PCF /HSP FLAG + RRB /HSR FLAG +PP7600, 7600 /CLEAR READER CHAR + 6135 /CLEAR KW12 OR DK8-EP EVENT FLAGS + CLA + 6132 /STOP KW12 CLOCKS + 6134 /DISABLE KW12 INTERRUPTS + 6530 /CLEAR AD8-EA FLAGS + 6050 /CLEAR VC8/E FLAG + 6500 /DISABLE XY8/E INTERRUPTS + STA + 6130 /DISABLE DK8-EP INTERRUPTS + CLA /LEAVE SPACE FOR ADDITIONAL CLEARS + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + DCA EOLSW +LDPROG, JMS I [FPGO /START UP FPP OR PSEUDO-FPP + STSWAP +HLTNOP, NOP /SET TO HLT IF /H SPECIFIED, + JMP PRTCR /SKP IF /P SPECIFIED + TAD .-1 + DCA LDPROG /BYPASS LOADING ON STARTUP + TAD PCHWD /HLT + DCA I (PDPXIT+1 + /ROUTINE TO PUNCH RTS+PROGRAM ON FORTRAN UNIT 9 (UNCOMMENTED) + +PPTR, TAD P11 +PCKSUM, DCA ACI + JMS I (LDDSRN + SMA CLA + JMP I [UNTERR + JMP LDRTLR +FLDLP, DCA PPTR + DCA PCKSUM + TAD (100 + JMS SIXOUT + JMS SIXOUT + TAD FLD + AND [70 +JFMOUT, JMS I [FMTOUT /*K* ONLY WORKS FOR FIELD 0-3 + TAD (100 + JMS SIXOUT + JMS SIXOUT +FLD, CDF 0 + TAD I PPTR + CDF 0 + JMS PCHWD + ISZ PPTR +P11, 11 + ISZ PCTR + JMP FLD + TAD PCKSUM + JMS PCHWD + TAD FLD + TAD (10 + DCA FLD +LDRTLR, TAD PP7600 + DCA ACH + TAD [200 + JMS SIXOUT + ISZ ACH + JMP .-3 + ISZ FCNT + JMP FLDLP + TAD (6000 + DCA FFLAGS + DCA I (ENDFLS /*K* SAME KLUDGE AS CALXIT + JMS I (ENDFL + DCA I (PDPXIT+1 /WIPE HALT SO WE CAN RETURN TO OS/8 + JMP I (PDPXIT-1 + PCHWD, HLT + DCA ACH + TAD ACH + RTR + RTR + RTR + AND [77 + JMS SIXOUT + TAD ACH + AND [77 + JMS SIXOUT + JMP I PCHWD + +SIXOUT, 0 + DCA T + CLA IAC + DCA EOLSW + TAD PCKSUM + TAD T + DCA PCKSUM + TAD T + TAD (-300 + JMS I [FMTOUT + JMP I SIXOUT + +PCTR, 200 /DON'T PUNCH 07600! +FCNT, 0 + PRTCR, TAD (215 + JMS I PTTY /PRINT CARRIAGE RETURN + TAD JFMOUT + DCA I (ERRENB /ENABLE ERROR TRACEBACK + JMS I [FPGO + STJUMP /NOW JUMP TO THE NEWLY-LOADED CODE +STSWAP, TRAP3 /TRAP3 + SWAP + 0 + .+1 + TRAP3 + HLTNOP + PAGE +STJUMP, 0 + 0 + ZBLOCK INBUFR+210-. /PAD OUT TO END OF BUFFER + /OVERLAY AND DSRN TABLES + + *.-4 /FIRST ENTRY IN OVLYTB ONLY NEEDED TO LOAD MAIN PGM + +OVLYTB, ZBLOCK 40 /OVERLAY TABLE + +DSRN, PTR; ZBLOCK 10 + PTP; ZBLOCK 10 + LPT; ZBLOCK 10 + TTY; 0;0 + 1234 /*K* PREVENT PROBLEM IN + ZBLOCK 5 /RWINIT INVOLVING WRITE + /AFTER READ ON TELETYPE + ZBLOCK 55 + + ZBLOCK 12 /FORMAT PARENTHESIS PUSHDOWN LIST +FMTPDL, 0 /GUARD WORD + PAGE + /SOFTWARE FLOATING POINT ROUTINES WHICH ARE USED +/EVEN IF FLOATING HARDWARE IS PRESENT + +/** MUST NOT DESTROY FAC! ** + +FFIX, 0 /ROUTINE TO FIX FAC + STA /ANSWER IS RETURNED IN ACI +TADACX, TAD ACX /ABS(FAC) MUST BE LESS THAN 2048 + CLL /DETERMINE IF FAC EXPONENT IS + TAD (-13 /BETWEEN 1 AND 14 + SNA + JMP FIXBIG /14 IS A SPECIAL CASE +EAEFIX, DCA ACI + SZL + JMP FIXDNE /EXP GT 14 OR LT 1 - RETURN 0 + TAD ACH + JMP FIXISZ +FIXLP, CLL /0 IN LINK + SPA /IS IT LESS THAN 0? + CML /YES-PUT A 1 IN LINK + RAR /SCALE RIGHT +FIXISZ, ISZ ACI /DONE YET? + JMP FIXLP /NO +FIXDNE, DCA ACI /RETURN WITH ANSWER IN ACI + JMP I FFIX /RETURN + +FIXBIG, TAD ACL /IF EXP IS 14 WE MUST SHIFT AC FRACTION + RAL /LEFT ONE PLACE TO INTEGERIZE IT. + CLA + TAD ACH + RAL + JMP FIXDNE /STORE ANSWER AND RETURN + +SETB, TAD DATAF + DCA I (BASCDF /SET BASE PAGE LOCATION + TAD ADR + DCA BASADR + JMP I FPNXT + / +/SHIFT FAC LEFT 1 BIT +/ +AL1, 0 + TAD AC1 /GET OVERFLOW BIT + CLL RAL /SHIFT LEFT + DCA AC1 /STORE BACK + TAD ACL /GET LOW ORDER MANTISSA + RAL /SHIFT LEFT + DCA ACL /STORE BACK + TAD ACH /GET HI ORDER + RAL + DCA ACH /STORE BACK + JMP I AL1 /RETN. +/ +/SHIFT FAC RIGHT-ENTER WITH COUNT-1 IN AC (POSITIVE) +/ +ACSR, 0 + CMA /AC CONTAINS COUNT-1 + DCA AC0 /STORE COUNT +LOP1, TAD ACH /GET HIGH ORDER MANTISSA + CLL + SPA /PROPAGATE SIGN + CML + RAR /SHIFT RIGHT 1, PROPAGATING SIGN + DCA ACH /STORE BACK + TAD ACL /GET LOW ORDER + RAR /SHIFT IT + DCA ACL /STORE BACK + ISZ ACX /INCREMENT EXPONENT + NOP + ISZ AC0 /DONE? + JMP LOP1 /NO-LOOP + RAR + DCA AC1 /SAVE 1 BIT OF OVERFLOW + JMP I ACSR /YES-RETN-AC=L=0 +/ +/FLOATING NEGATE +/ +FFNEG, 0 /(USED AS A TEM. BY OUTPUT ROUTINE) + TAD ACL /GET LOW ORDER FAC + CLL CMA IAC /NEGATE IT + DCA ACL /STORE BACK + CML RAL /ADJUST OVERFLOW BIT AND + TAD ACH /PROPAGATE CARRY-GET HI ORD + CLL CMA IAC /NEGATE IT + DCA ACH /STORE BACK + JMP I FFNEG + OADD, 0 /ADD OPERAND TO FAC + CLL + TAD AC2 /ADD OVERFLOW WORDS + TAD AC1 + DCA AC1 + RAL /ROTATE CARRY + TAD OPL /ADD LOW ORDER MANTISSAS + TAD ACL + DCA ACL + RAL + TAD OPH /ADD HI ORDER MANTISSAS + TAD ACH + DCA ACH + JMP I OADD /RETN. + +FETPC, 0 + ISZ PC + JMP PCCDF /NO FIELD BUMP + ISZ APT /BUMP FIELD FOR FPP RESTART (IN CASE FPP EXISTS) +FPC10, 10 /PROTECTION FOR ISZ + TAD PCCDF + TAD FPC10 + DCA PCCDF +PCCDF, HLT + TAD I PC + JMP I FETPC + +EEPUT, STL /EXTENDED PRECISION STORE +EEGET, DCA ADR /EXTENDED PRCISION FETCH + TAD [-6 + DCA DATCDF + SNL + AC2000 /SET UP "TAD ACX" OR "DCA ACX" + TAD TADACX + DCA EEINST +EELOOP, SNL /LINK=1 MEANS STORE + TAD I ADR +EEINST, HLT + SZL + DCA I ADR + ISZ ADR + SKP + JMS I (DFBUMP + ISZ EEINST + ISZ DATCDF + JMP EELOOP + JMP I FPNXT + +FSTTM2, FSTA+LONG + FTEMP2 + FEXIT +/ +FTEMP, ZBLOCK 6 +/ + PAGE + /RUN-TIME SYSTEM ERROR LIST + +ERRLST, VARGER; ARGMSG + UERR; UMSG + FPOERR; FPOMSG + FMTERR; FMTMSG + UNTERR; UNTMSG + CTLBER; CTLBMS + INER; INMSG + IOVFLO; IOVMSG + IOERR; IOMSG + DAERR; DAMSG + FPPERR; FPPMSG + OVERR; OVMSG + EOFERR; INEMSG + FPOVER; OFLMSG + DFERR; DFMSG + -1; DV0MSG /BY ELIMINATION + /RTS ERROR MESSAGES + +ARGMSG, TEXT /BAD ARG/ +UMSG, TEXT /USER ERROR/ +FPOMSG, TEXT /PARENS TOO DEEP/ +FMTMSG, TEXT /FORMAT ERROR/ +UNTMSG, TEXT /UNIT ERROR/ +INMSG, TEXT /INPUT ERROR/ +OVMSG, TEXT /OVERLAY / + *.-1 +IOMSG, TEXT %I/O ERROR% +DAMSG, TEXT /NO DEFINE FILE/ +FPPMSG, TEXT /FPP ERROR/ +INEMSG, TEXT /EOF ERROR/ +DV0MSG, TEXT /DIVIDE BY 0/ +DFMSG, TEXT /D.F. TOO BIG/ +IOVMSG, TEXT /FILE / + *.-1 +OFLMSG, TEXT /OVERFLOW/ +CTLBMS, TEXT /^B/ + +USRERR, TAD ERRFLG /USER ERROR - OPTIONALLY NON-FATAL + DCA FATAL +UERR, JMS I ERR /PRINT MESSAGE + JMP I [RETURN /IF NON-FATAL, CONTINUE PROCESSING +ERRFLG, 0 /SET TO NON-ZERO IF /E SWITCH SPECIFIED + +TRPPRT, TRAP3 /CODE WHICH IS LOADED INTO PROGRAM PROLOGUES + PRTNAM /BY THE ERROR TRACEBACK ROUTINE + PAGE + MAKCDF, 0 /ROUTINE TO MAKE A CDF FROM AC9-11 + RTL + RAL + AND [70 + TAD ERCDF /STRAIGHTFORWARD ENOUGH, ISN'T IT? + JMP I MAKCDF + +RD2WR, 0 /ROUTINE CALLED WHEN SWITCHING + STA /FROM READ TO WRITE. (CALLED ONLY ONCE!) + TAD RELBLK /BUMP BLOCK # BACK FROM "NEXT BUFFER'S BLOCK #" + DCA RELBLK /TO "THIS BUFFER'S BLOCK #". + TAD CHRCTR /HOWEVER, IF WE ARE AT THE VERY END OF A + IAC /BUFFER, WRITE ROUTINE EXPECTS US TO + SZA CLA /BE AT THE BEGINNING OF THE NEXT BUFFER, + JMS I [MASSIO /SO RE-READ THIS BUFFER AND SET POINTERS + JMP I RD2WR + +/RUN-TIME-SYSTEM ERROR ROUTINE + +ERROR, 0 +ERCDF, CDF 0 + CLA + TAD (ERRLST-2 + DCA XR +ERRLP, ISZ XR /SEARCH ERROR LIST FOR CALLING ADDRESS + TAD I XR /ERROR LIST CONTAINS + CMA + SZA /CALLING ADDRESSES AND + TAD ERROR /CORRESPONDING MESSAGES + SZA CLA + JMP ERRLP + TAD I XR + DCA I (FMTADR + DCA I (FMTDF + TAD PTTY + DCA HAND /QUICK FUDGE FOR TTY OUTPUT + DCA HCODEW /TO SET CARRIAGE CONTROL + AC4000 + DCA RWFLAG + JMS I [EOLINE /TYPE CARRET AND SET EOLSW + DCA FMTBYT /INITIALIZE MESSAGE PTR +ERPTLP, JMS I [FMTOUT /OUTPUTS LF FIRST TIME + JMS I [FMTGCH /GET CHAR USING FORMAT ROUTINES + ISZ FMTBYT + SZA + JMP ERPTLP /LOOP UNTIL 0 CHAR + /PRINT ROUTINE NAME AND LINE NUMBER + +PRTNAM, TAD [40 +ERRENB, JMP I E7605 /*K* IN CASE INITIALIZATION OR /P GET ERRORS +/ PREVIOUS LINE REPLACED WITH: +/ JMS I [FMTOUT /OUTPUT A BLANK(LF ON EXTRA LINES) + JMS I [FPGO /START UP FPP + GTNMPT /GET POINTER TO NAME IN FAC + TAD ACH + DCA I (FMTDF /SET UP FORMAT GET CHARACTER ROUTINE + TAD ACL /TO GET CHARACTERS OF ROUTINE NAME + DCA I (FMTADR + DCA FMTBYT + TAD [-6 + DCA ISN /6 CHARACTER NAME +PRTNML, JMS I [FMTGCH + SNA + TAD [40 /AVOID PRINTING RANDOM @S + JMS I [FMTOUT /GET AND PRINT A CHARACTER + ISZ FMTBYT + ISZ ISN + JMP PRTNML + TAD [40 + JMS I [FMTOUT /SEPARATE THE NAME BY A SPACE + TAD [-4 /FROM THE LINE NUMBER. + DCA ISN +PTLNLP, TAD ISN+1 + CLL RTL + RAL + DCA ISN+1 /PRINT LINE NUMBER IN OCTAL + TAD ISN+1 /BECAUSE THAT IS THE WAY IT APPEARS + RAL /IN THE FORTRAN PROGRAM LISTING + AND [7 + JMS I (DIGIT + ISZ ISN + JMP PTLNLP + + JMS I [EOLINE /OUTPUT FINAL CR + TAD FATAL + SNA CLA /FATAL ERROR? + JMP TRCBAK /YES - GIVE FULL TRACEBACK + DCA FATAL /"NON-FATAL" FLAG MUST BE SET EACH TIME + JMP I ERROR +TRCBAK, JMS I [FPGO /START UP FPP + UP1LEV /MOVE UP TO CALLING ROUTINE + /FPP CODE DOES A "TRAP3 PRTNAM" +ISN, 0;0 + /FPP CODE FOR ERROR ROUTINE + +GTNMPT, STARTD + XTA 0 /LOAD LINE NUMBER FROM XR 0 + FSTA+LONG + ISN /STORE AWAY + FLDA+BASE 10 /LOAD POINTER TO PROLOGUE + FSUB+LONG + THREE /NAME IS 3 LOCATIONS BEFORE PROLOGUE + STARTF /FOR NON-FPP VERSION +THREE, FEXIT;3 /*K* DEPENDS ON FACT THAT FEXIT=0 + +UP1LEV, STARTD + FLDA+BASE 11 /GET THE UPWARD POINTER + JNE + NOTMN /ZERO MEANS MAIN PROGRAM + TRAP3 +E7605, 7605 /GO AWAY IF MAIN PROGRAM +NOTMN, FSTA+BASE 0 + LDX 1 + 2 /WE WILL STORE A "TRAP3 PRTNAM" + FLDA+LONG /IN THE FIFTH LOCATION OF THE PROLOGUE, + TRPPRT + FSTA+IND 0+10 /WHERE THE FIRST 4 LOCS WERE A SETX AND SETB. + FLDA+BASE 0 /GET THE PROLOGUE ADDRESS AGAIN + JAC /JUMP TO IT. + +ACMDGT, FMUL+LONG + TEN + FSTA+LONG + FTEMP + FLDA+LONG + DGT /GET UNNORMALIZED DIGIT INTO AC + FNORM /NORMALIZE IT +FADTMP, FADD+LONG + FTEMP + FEXIT +LPBUFR, ZBLOCK 4 + LPBUF2 + PAGE + HPLACE, /ZBLOCK 400 /HANDLER SWAP AREA + +/VARIOUS INITIALIZATION STUFF OVERLAYING THE RTS HANDLER AREA + +QLHDR, 0 /SHOULD BE A 2 FOR A LOADER IMAGE +QRTSWP, ZBLOCK 2 /INITIAL SWAP ARGS TO LOAD USER MAIN +QHGHAD, ZBLOCK 2 /HIGHEST ADDRESS USED +QVERNO, 0 /LOADER VERSION # +QDPFLG, 0 /"PROGRAM USES D.P." FLAG +QUSRLV, ZBLOCK 40 /USER OVERLAY INFO + +/EAE OVERLAY TO FIX AND FLOAT + +EFXFLT, RELOC EAEFIX + +FIXEAE, CMA + DCA FIXSH /SHIFT COUNT BETWEEN 0 AND 12 + SZL + JMP FIX0 /NOT INTEGERIZABLE + TAD ACH + ASR +FIXSH, 0 +FIX0, DCA ACI + JMP I FFIX + +FXFLTC= .-FIXEAE + RELOC + /SUBR TO DETERMINE MACHINE SIZE - RETURNS NUMBER OF +/BANKS IN AC. +/MUST RUN IN FIELD 0. + +CORE, 0 + TAD C6203 + RDF + DCA CORRET +CORELP, CDF 0 /NEEDED FOR PDP-8L + TAD I C7777 + AND COR70 /IF BITS 6-8 OF LOCATION 7777 ARE NOT ZERO, + CLL RTR /THEY SPECIFY THE LAST FIELD OF CORE + RAR /WHICH WE SHOULD USE. + SZA + JMP CORRET /SO RETURN THAT AMOUNT + TAD TRYFLD /GET FLD TO TST + CLL RTL + RAL + AND COR70 /MASK USEFUL BITS + TAD CORELP + DCA COR706 /SET UP CDF TO FLD +COR706, 0 + TAD I CORLOC /SAV CURRENT CONTENTS + NOP /HACK FOR PDP-8 + DCA .-3 + TAD .-2 /7000 IS A GOOD PATTERN + DCA I CORLOC +COR70, 70 /HACK FOR PDP-8.,NO-OP + TAD I CORLOC /TRY TO READ BK 7000 +CO7400, 7400 /HACK FOR PDP-8,.NO-OP + TAD CO7400 /GUARD AGAINST WRAP AROUND + TAD CORLOC+1 /TAD 1400 + SZA CLA + JMP .+5 /NON EXISTENT FLD EXIT + TAD COR706 /RESTORE CONTENS DESTROYED + DCA I CORLOC + ISZ TRYFLD /TRY NXT HIGHER FLD + JMP CORELP + STA + TAD TRYFLD +CORRET, 0 + JMP I CORE +CORLOC, CO7400 /ADR TO TST IN EACH FLD + 1400 /7000+7400+1400=0 +TRYFLD, 1 /CURRENT FLD TO TST +C6203, 6203 +C7777, 7777 + +DPTEST, STARTE /EXECUTED BY FPP DURING INITIALIZATION + FEXIT /CHECK WHETHER DOUBLE PRECISION ENABLED + /TABLE OF MODIFICATIONS TO MAKE TO FRTS FOR BACKGROUND OPERATION +/UNDER RTS-8. FORMAT OF TABLE IS: POINTER TO FIRST WORD OF BLOCK - 1 +/ (0 TERMINATES) FOLLOWED BY LIST OF REPLACEMENT WORDS (0 TERMINATES). + +BKRLST, YLPT-1 /LINE PRINTER OUTPUT ROUTINE + RELOC YLPT + LLS + CLA /DON'T DO RING-BUFFERING - JUST "OUTPUT" CHAR. + JMS CTCBCK /CHECK FOR ^C OR ^B + JMP I LPT +FJCTCT, JMS CTCBCK /COME HERE FROM INTERPRETED FPP JUMPS + JMP I FPNXT /CHECK FOR ^C,^B AND RETURN TO INTERPRETER + RELOC + 0 + + YPTP-1 /PAPER-TAPE PUNCH ROUTINE + CLA /ALL PAPER-TAPE I/O ILLEGAL + 0 + YPTR-1 /PAPER TAPE READER ROUTINE + CLA /ALL PAPER-TAPE I/O ILLEGAL + 0 + + YTTY-1 /TELETYPE INPUT/OUTPUT ROUTINE + RELOC YTTY + SNA + JMP KBDRTS /AC=0 MEANS INPUT + TSF + JMP .-1 /HANG UNTIL OUTPUT BUFFER NOT FULL + TLS + CLA + JMS CTCBCK /CHECK FOR ^C OR ^B TYPED + JMP I TTY +KBDRTS, KSF + JMP .-1 /HANG UNTIL CHAR RECEIVED + JMS CTCBCK /CHECK FOR ^C OR ^B + KRB + AND KB177 /STRIP PARITY + TAD KB177 + IAC /NOW FORCE PARITY BIT ON (177+1=200) + JMP I TTY + +CTCBCK, . /*K* CAN'T BE 0! + KRS /PEEK AT NEXT CHAR IN BUFFER + AND KB177 + TAD KBM2 + CLL RAR + SNA CLA /IS IT ^C OR ^B? + KSF /AND IS IT REALLY PENDING? + JMP I CTCBCK /NO - JUST RETURN WITH AC=0 + JMP BEEORC /TERMINATE JOB - LINK HAS ^C/^B FLAG +KB177, 177 +KBM2, -2 + RELOC + 0 + /CONTINUATION OF TABLE OF RTS-8 OVERLAYS TO FRTS + + YHIOF-1 /"GET OS/8 HANDLER" ROUTINE + NOP /ELIMINATE "IOF" INSTRUCTION + 0 + + YRCOVR-1 /"RECOVER FROM OS/8 HANDLER" ROUTINE + RELOC YRCOVR + JMP I RECOVR /SHORT-CIRCUIT PORTION OF ROUTINE WHICH DOES + RELOC /AN "ION" + 0 + + YFJMP-1 /FPP INTERPRETER - SUCCESSFUL JUMP SECTION + FJCTCT /TEST FOR ^C OR ^B TYPED BEFORE + 0 /RETURNING TO THE INTERPRETER + + 0 /** LIST TERMINATOR ** + /ERROR MESSAGES FOR RUN-TIME LOADER - IN HANDLER BUFFER +/*K* CANNOT LOAD BELOW HPLACE+200 AS HPLACE-HPLACE+177 ARE DESTROYED BY HEADER! + + IFNZRO .-HPLACE-200&4000 <__ERROR__> + +NOLI, TEXT /NOT A LOADER IMAGE/ +NONMSG, TEXT /NO NUMERIC SWITCH/ +FILMSG, TEXT /FILE ERROR/ +SYSMSG, TEXT /SYSTEM DEVICE ERROR/ +TOOMCH, TEXT /MORE CORE REQUIRED/ +TOMNYH, TEXT /TOO MANY HANDLERS/ +LIOEMS, TEXT /CAN'T READ IT!/ +NODPMS, TEXT /CAUTION - NO DP/ +XVERMS, TEXT /FRTS V/ + *.-1 + XVERSN&70^7+XVERSN+4060 /VERSION NUMBER IN SIXBIT + XPATCH&77^100+40 /PATCH LEVEL + TEXT / / + PAGE + /FPP INTERPRETER STARTUP ROUTINE + +FPPINT= . /FOR FPP OVERLAY +RETURN, JMP I FPNXT /RETURN DOES SOMETHING DIFFERENT IF FPP PRESENT + +FPGO, 0 +FPGCDF, CDF 0 /NECESSARY? + CLA + TAD PC + DCA SAVPC /ALLOW ONE LEVEL OF RECURSIVENESS + TAD I (PCCDF + DCA SPCCDF + STA + TAD I FPGO + DCA PC + ISZ FPGO + TAD FPGCDF /FPGO STARTS UP THE FPP FROM FIELD 0 ONLY + DCA I (PCCDF + JMP I FPNXT + +EXIT, TAD SAVPC + DCA PC + TAD SPCCDF + DCA I (PCCDF /RESTORE OLD PC + JMP I FPGO /RETURN TO PDP-8 CODE +SAVPC, 0 +SPCCDF, 0 + +FPXTA, TAD [27 /XR TO AC - NORMALIZE IF FLOATING MODE + DCA ACX + JMS DATCDF + TAD I ADR +CLFAC, DCA ACL + TAD ACL + SPA CLA /SIGN-EXTEND 12-BIT WORD + STA /INTO FAC FRACTION + DCA ACH +NRMFAC, DCA AC1 /CLEAR OVERFLOW WORD + TAD DFLG + SPA SNA CLA /UNLESS WE ARE IN D.P.I. MODE, + JMS I NORMX /NORMALIZE THE FAC + JMP I FPNXT + /MISCELLANEOUS JUMP CLASS INSTRUCTIONS + +JSA, TAD ADR + DCA PUTM + TAD DATAF + DCA JSCDF /SET UP LOC TO SAVE PC IN + AC0002 + TAD ADR + DCA ADR /BUMP ADDRESS BY 2 + RTL + RTL + TAD DATAF + DCA DATAF /INCLUDING DATA FIELD +JSAR, TAD I (PCCDF /JSA/JSR COMMON CODE + CLL RTR + RAR + ISZ PC /BUMP PC BEFORE STORING + SKP + IAC /INCLUDING FIELD BITS + TAD (JA-2620 /FORM "JA" INSTRUCTION +JSCDF, HLT + DCA I PUTM + ISZ PUTM + SKP + JMS I (DFBUMP /BUMP TARGET ADDRESS + TAD PC + DCA I PUTM + JMP I (DOJMP /NOW JUMP TO DESTINATION + +JSR, CLA CLL IAC + TAD BASADR + DCA PUTM + RTL + RTL + TAD I (BASCDF /SET JSCDF&PUTM TO BASE PAGE LOC +1 + DCA JSCDF + JMP JSAR + +FPJAC, TAD ACL + DCA ADR + TAD ACH + JMS I MCDF + DCA DATAF + JMP I (DOJMP + +SPCATX, TAD ACL + SKP +FPLDX, JMS I [FETPC + JMS DATCDF + DCA I ADR /SET XR TO NEXT INST WD + JMP I FPNXT + /MORE INDEX REGISTER & AC-TO-MEMORY INSTRUCTIONS + +ADDX, JMS I [FETPC + JMS DATCDF + TAD I ADR /ADD NEXT INST WD TO XR + JMP FPLDX+1 + +ATX, TAD DFLG /ATX WORKS DIFFERENTLY IN D.P.I. MODE + SMA SZA CLA + JMP SPCATX + JMS I NORMX /FAC MAY NOT BE NORMALIZED + JMS I [FFIX + TAD ACI + JMP FPLDX+1 + +OPMEM, DCA AD1 /GENERAL AC-TO-MEMORY INTERPRETER + TAD AD1 + DCA AD2 + RDF + CLL RTR + RAR + TAD KLUDGM /FORM FSTA X INSTRUCTION + DCA PUTM + AC2000 + AND INST /TURN OP 5 TO OP 1, + SZA CLA + TAD [3000 / OP 7 TO OP 4. + TAD [3000 + TAD PUTM /STICK IN FIELD BITS + DCA OPM + JMS I [FPGO + KLUDGM + JMP I FPNXT + +KLUDGM, FSTA+LONG + FTEMP /SAVE AC +OPM, 0 +AD1, 0 /PERFORM OP +PUTM, 0 +AD2, 0 /STORE RESULT + FLDA+LONG + FTEMP /RESTORE AC + FEXIT + +NORMX, FFNOR /*K* CHANGED TO EFFNOR IF EAE + PAGE + /MAIN INTERPRETER LOOP + +NEGFAC, JMS I [FFNEG + +ICYCLE, CLA + JMS I [FETPC /GET INST + DCA INST + TAD INST + CLL RTL + RTL + SMA /SKIP IF BASEPAGE ADDRESSING + JMP LONGI + AND [7 + TAD BASJMP + DCA OPJMP /SAVE OPCODE CALL ADDRESS + TAD INST /DATA FIELD IS STILL SET UP + SZL /SO IS LINK (WITH INSTRUCTION BIT 3) + JMP BPAGEI /INDIRECT ADDRESSING + CLL RAL + TAD INST /MULTIPLY BASE OFFSET BY 3 + TAD [200 /ELIMINATE ANY + AND (777 /HIGH ORDER BITS +IMFUDJ, CLL /CLL IAC IF D.P. INTEGER MODE + TAD BASADR /ADD IN BASE PAGE ORIGIN +BASCDF, HLT /CDF TO BASE PAGE FIELD + SZL + JMS DFBUMP /BUMP DF IF ADDITION OVERFLOWED +OPJCLL, CLL +OPJMP, HLT /JMP I EXECUTIONROUTINE + +BPAGEI, AND [7 + DCA ADR + TAD ADR + CLL CML RAL + TAD ADR /FORM 3*OFFSET+1 + TAD BASADR + DCA ADR + RTL + RTL + TAD BASCDF /FORM PROPER CDF + DCA ADDRLO +ADDRLO, HLT /EXECUTE IT + TAD I ADR /GET FIELD BITS OF REAL ADDRESS + DCA ADDRHI /FROM 2D WORD OF BASE PAGE LOC + ISZ ADR + SKP + JMS DFBUMP /WATCH FOR FIELD OVERFLOW + TAD I ADR /GET LOW-ORDER ADDRESS FROM 3D WORD + JMP INDEX /NOW GO DO INDEXING (IF ANY) + /COME HERE IF BIT 4 OF INSTRUCTION IS OFF + +LONGI, AND [7 + SNL /TEST BIT 3 OF INSTRUCTION + JMP I (SPECAL /SPECIAL INSTRUCTION + TAD BASJMP + DCA OPJMP + TAD INST + DCA ADDRHI /HIGH-ORDER ADDRESS BITS IN INST WD + JMS I [FETPC /NEXT INST WORD CONTAINS LOW-ORDER ADDRESS +INDEX, DCA ADDRLO + TAD INST + AND [70 + SNA /IS XR NUMBER 0? + JMP NOINDX /YES - NO INDEXING + JMS DCDIDX /GET XR VALUE (MAYBE INCREMENTED) + AC7775 + TAD DFLG /GET -3 IF F, -2 IF D, -6 IF E MODE + DCA DCDIDX + TAD ADDRLO +XRADLP, CLL + TAD I T + SZL + ISZ ADDRHI + ISZ DCDIDX /ADD THE XR IN THE PROPER NUMBER OF TIMES + JMP XRADLP + DCA ADDRLO +NOINDX, TAD ADDRHI + JMS I MCDF + DCA ADDRHI /TURN HIGH-ORDER ADDRESS INTO A CDF +ADDRHI, HLT /AND EXECUTE IT + TAD ADDRLO + JMP OPJCLL /GO EXECUTE THE INSTRUCTION + +DFBUMP, 0 /BUMP DATA FIELD + DCA DFTMP /SAVE AC + RDF + TAD (CDF 10 + DCA .+1 + HLT + TAD DFTMP /RESTORE AC + JMP I DFBUMP +DFTMP, 0 + DCDIDX, 0 + CLL RTR + RAR + TAD XRBASE /ADD IN BASE ADDRESS OF XR ARRAY +XRCDF, HLT /CDF TO XR ARRAY FIELD + SZL + JMS DFBUMP /OR MAYBE NEXT FIELD + DCA T /SAVE POINTER TO XR + TAD INST + AND DCD100 + SZA CLA /INCREMENT BIT ON? + ISZ I T /YES - BUMP XR +DCD100, 100 /** PROTECTION + JMP I DCDIDX + +BASJMP, JMP I JMPTB1 /JMP I JMPTB2 FOR D.P. MODE + +JMPTB1, FFGET / F MODE (FLOATING POINT) + FFADD + FFSUB + FFDIV + FFMPY + OPMEM /FADDM + FFPUT + OPMEM /FMULM + + DDGET / D MODE ( DOUBLE PRECISION INTEGER) + DDADD + DDSUB + DDDIV + DDMPY + OPMEM /DADDM + DDPUT + OPMEM /DMULM + + EEGET / E MODE ( 6 WD FLOATING POINT) + FFADD + FFSUB + FFDIV + FFMPY + OPMEM + EEPUT + OPMEM + PAGE + /MORE I CYCLE + +SPECAL, SNA + JMP XRINST /OPCODE 0 HAS MANY MANSIONS + TAD SPECOP + DCA SPCJMP /GET OPCODE JUMP ADDRESS + JMS I [FETPC + DCA ADR + TAD INST /ALL OF THESE ARE TWO-WORD INSTRUCTIONS + JMS I MCDF /SO FORM THE ADDRESS NOW + DCA DATAF + CDF 0 + TAD INST +SPCJMP, HLT + +XRINST, TAD INST + AND (7770 + CDF 0 + SNA CLA /IF SUB-OPCODE IS ZERO, + JMP OPERAT /DECODE SUB-SUB-OPCODE + TAD INST + AND [7 + CLL + TAD XRBASE + DCA ADR /COMPUTE INDEX REGISTER ADDRESS + RTL + RTL + TAD I (XRCDF + DCA DATAF +XJCOMN, TAD INST + CLL RTR + RAR + AND [77 /GET OPCODE - HIGH ORDER 2 BITS ARE 0 +OXCOMN, TAD (JMP I SP2 + DCA .+1 /EXECUTE APPROPRIATE JUMP + HLT + +OPERAT, TAD INST + CIA + JMP OXCOMN + +SETX, TAD DATAF /SET XR0 LOC + DCA I (XRCDF + TAD ADR + DCA XRBASE + JMP I FPNXT + /JUMP DECODER + +JUMPS, AND (100 /INSTRUCTION IN AC + CLL RTR /20 IN AC IF NOT COND. JUMP + SZA /IF NOT COND. JUMP, DECODE FURTHER + JMP XJCOMN + TAD INST + AND [70 + CLL RTR + RAR + TAD (CNDSKT + DCA T /INDEX INTO CONDITIONAL SKIP TABLE + TAD I T + DCA CNDSKP + TAD ACH + SZA + JMP CNDSKP + TAD ACL + SZA CLA /IF HIGH ORDER ZERO, AC MIGHT BE UNNORMALIZED. + IAC /USE LOW ORDER ON 0/NOT 0 BASIS +CNDSKP, HLT /TEST AC + JMP I FPNXT /FAILED - DON'T JUMP + +DOJMP, STA CLL + TAD ADR + DCA PC + SNL + TAD (-10 + TAD DATAF + CDF 0 + DCA I (PCCDF /ADDRESS-1 TO PC + JMP I .+1 +YFJMP, ICYCLE /** CHANGED IF RUNNING UNDER RTS-8 + +JXN, AND [70 /GET XR FIELD + JMS I (DCDIDX /GET XR VALUE WITH INCREMENTING + TAD I T + SNA CLA /ZERO? + JMP I FPNXT /YES + JMP DOJMP /JUMP ON INDEX NON-ZERO, RIGHT? + +CNDSKT, SZA CLA /JEQ + SPA CLA /JGE + SMA SZA CLA /JLE + SKP CLA /JA + SNA CLA /JNE + SMA CLA /JLT + SPA SNA CLA /JGT + JMP TSTALN /JAL + +TSTALN, CLA + TAD ACX + TAD (-27 + SPA SNA CLA + JMP I FPNXT + JMP DOJMP + /OPCODE TABLES + +SPECOP, JMP I SPECOP /SPECIAL OPCODE TABLE + JUMPS + JXN + TRAP3I + TRAP4I + TRAP5I + TRAP6I + TRAP7I + + FPJAC + STRTD + STRTF + NRMFAC + NEGFAC + CLFAC + FPAUSE +SP2, EXIT + ALN + ATX + FPXTA + ICYCLE /NOP + STRTE + ICYCLE /UNDEF OP + ICYCLE /" + FPLDX + ADDX + SETX + SETB + JSA + JSR + PAGE + /MISCELLANEOUS OPCODE ROUTINES + +TRAP3I, +TRAP4I, AC0002 + TAD DATAF + DCA .+1 /FORM CDF CIF N + HLT /EXECUTE IT + TAD INST + SMA CLA /TRAP4 JMS'S TO ITS TARGET ADDRESS, + JMP I ADR /TRAP3 JMP'S TO IT + JMS I ADR + JMP I FPNXT + +ALN, TAD ACX /ALIGN SIMULATOR + DCA OPX /SAVE EXPONENT IN CASE WE'RE IN D.I. MODE + TAD DFLG + SMA SZA CLA + DCA ACX /ZERO EXP IF D.I. MODE + JMS DATCDF /SET TO XR FIELD + TAD INST + AND [7 + TAD DFLG /IF WE'RE IN FLOATING POINT MODE, + SNA CLA /AND DOING AN "ALN 0", + TAD [27 /ALIGN UNTIL EXPONENT = 23 + SNA + TAD I ADR /OTHERWISE ALIGN UNTIL EXPONENT = XR VALUE + CDF 0 + CIA + TAD ACX + CMA /FORM DIFFERENCE - 1 + SPA /IF EXPONENT IS LARGER THEN DESIRED EXPONENT, + JMP ALNSHL /SHIFT LEFT + JMS I [ACSR /OTHERWISE SHIFT RIGHT +ALNXIT, TAD DFLG + SPA SNA CLA /IF DOUBLE INTEGER MODE, + JMP I FPNXT + TAD OPX /ALIGNMENT LEAVES THE EXPONENT UNCHANGED + DCA ACX + JMP I FPNXT +ALNSHL, DCA T /STORE SHIFT COUNT + SKP /SHIFT LEFT ONE LESS THAN COUNT + JMS I [AL1BMP + ISZ T + JMP .-2 + JMP ALNXIT /GO TO COMMON CODE + /ARG FETCH SUBROUTINES AND MODE CHANGE OPERATORS + +DARGET, 0 + DCA ADR + TAD DARGET + DCA ARGET + DCA ACX + JMP ARGET2 /FAKE OUT FLOATING POINT ROUTINE + +ARGET, 0 /SUBROUTINE TO FETCH ARG FOR ADD, SUBT, ETC. + DCA ADR /STORE ADDRESS OF OPERAND + TAD I ADR /PICK UP EXPONENT + ISZ ADR /MOVE POINTER TO HI MANTISSA WD + SKP + JMS I (DFBUMP +ARGET2, DCA OPX + TAD I ADR /PICK IT UP + DCA OPH /STORE + ISZ ADR /MOVE PTR. TO LO MANTISSA WD. + SKP + JMS I (DFBUMP /WATCH THOSE FIELD TRANSITIONS! + TAD I ADR /PICK IT UP + DCA OPL /STORE IT + CDF 0 + JMP I ARGET /RETURN + +STRTE, TAD DFLG /START EXTENDED PRECISION MODE + SPA CLA + JMP .+4 /CLEAR EXTENDED FAC + DCA EAC1 /IF NOT ALREADY IN E MODE + DCA EAC2 + DCA EAC3 + AC7775 + DCA DFLG + JMP DFECMN + +STRTD, CLA IAC /START DOUBLE PRECISION INTEGER MODE +STRTF, DCA DFLG /START FLOATING POINT MODE + TAD DFLG +DFECMN, TAD (CLL + DCA I (IMFUDJ /SET D.P.I FUDGE TO "CLL" OR "CLL IAC" + TAD DFLG + SPA + CMA /CHANGE -3 FOR E MODE TO +2 + CLL RTL + RAL + TAD (JMPTB1&177+5600 + DCA I (BASJMP + JMP I FPNXT + /DOUBLE PRECISION INTEGER OPERATORS + +DDSUB, JMS DARGET + JMS I (OPNEG + SKP +DDADD, JMS DARGET + DCA AC1 /CLEAR OVERFLOW JUSTINCASE + JMS I [OADD + JMP I FPNXT + +FFGET, DCA ADR /GET A FLOATING POINT NUMBER + TAD I ADR + DCA ACX /SAVE EXPONENT + ISZ ADR + JMP .+3 /NO FIELD OVERFLOW + JMS I (DFBUMP /BUMP DATA FIELD +DDGET, DCA ADR /SUAVE - ENTRY POINT FOR D.P. INTEGER GET + TAD I ADR + DCA ACH + ISZ ADR + SKP + JMS I (DFBUMP + TAD I ADR + DCA ACL + JMP I FPNXT + +FFPUT, DCA ADR /STORE A FLOATING POINT NUMBER + TAD ACX /GET FAC AND STORE IT + DCA I ADR /AT SPECIFIED ADDRESS + ISZ ADR + JMP .+3 + JMS I (DFBUMP +DDPUT, DCA ADR /ENTRY FOR D.P. INTEGER PUT + TAD ACH + DCA I ADR + ISZ ADR + SKP + JMS I (DFBUMP + TAD ACL + DCA I ADR + JMP I FPNXT + PAGE + FPPKG= . /FOR EAE OVERLAY + +/23-BIT FLOATING PT INTERPRETER +/W.J. CLOGHER, MODIFIED BY R.LARY FOR FORTRAN + +LPBUF2, ZBLOCK 16 + LPBUF3 + +AL1BMP, 0 /*K* UTILITY SUBROUTINE - USED BY INTERPRETER + STA + TAD ACX + DCA ACX + JMS I [AL1 + JMP I AL1BMP + +/FLOATING MULTIPLY-DOES 2 24X12 BIT MULTIPLIES +DDMPY, JMS I (DARGET + SKP +FFMPY, JMS I (ARGET /GET OPERAND + JMS MDSET /SET UP FOR MPY-OPX IN AC ON RETN. + TAD ACX /DO EXPONENT ADDITION + DCA ACX /STORE FINAL EXPONENT + DCA MDSET /ZERO TEM STORAGE FOR MPY ROUTINE + DCA AC2 + TAD ACH /IS FAC=0? + SNA CLA + DCA ACX /YES-ZERO EXPONENT + JMS MP24 /NO-MULTIPLY FAC BY LOW ORDER OPR. + TAD OPH /NOW MULTIPLY FAC BY HI ORDER MULTIPLIER + DCA OPL + JMS MP24 + TAD AC2 /STORE RESULT BACK IN FAC + DCA ACL /LOW ORDER + TAD MDSET /HIGH ORDER + DCA ACH + TAD ACH /DO WE NEED TO NORMALIZE? + RAL + SMA CLA + JMS AL1BMP /YES-DO IT FAST + TAD AC1 + SPA CLA /CHECK OVERFLOW WORD + ISZ ACL /HIGH BIT ON - ROUND RESULT + JMP MDONE + ISZ ACH /LOW ORDER OVERFLOWED - INCREMENT HIGH ORDER + TAD ACH + SPA /CHECK FOR OVERFLOW TO 4000 0000 + JMP I (SHR1 /WE HANDLE A SIMILIAR CASE IN FLOATING DIVIDE + CLA + MDONE, DCA AC1 /ZERO OVERFLOW WD(DO I NEED THIS???) + ISZ MSIGN /SHOULD RESULT BE NEGATIVE? + SKP /NO + JMS I [FFNEG /YES-NEGATE IT + TAD ACH + SNA CLA /A ZERO AC MEANS A ZERO EXPONENT + DCA ACX + TAD DFLG + SMA SZA CLA /D.P. INTEGER MODE? + TAD ACX /WITH ACX LESS THAN 0? + SNA + JMP I FPNXT /NO - RETURN + CMA + JMS I [ACSR /UN-NORMALIZE RESULT + JMP I FPNXT /RETURN + /MDSET-SETS UP SIGNS FOR MULTIPLY AND DIVIDE +/ALSO SHIFTS OPERAND ONE BIT TO THE LEFT. +/EXIT WITH EXPONENT OF OPERAND IN AC FOR EXPONENT +/CALCULATION-CALLED WITH ADDRESS OF OPERAND IN AC AND +/DATA FIELD SET PROPERLY FOR OPERAND. + +MDSET, 0 + CLA CLL CMA RAL /SET SIGN CHECK TO -2 + DCA MSIGN + TAD OPH /IS OPERAND NEGATIVE? + SMA CLA + JMP .+3 /NO + JMS I (OPNEG /YES-NEGATE IT + ISZ MSIGN /BUMP SIGN CHECK + TAD OPL /AND SHIFT OPERAND LEFT ONE BIT + CLL RAL + DCA OPL + TAD OPH + RAL + DCA OPH + DCA AC1 /CLR. OVERFLOW WORF OF FAC + TAD ACH /IS FAC NEGATIVE + SMA CLA + JMP LEV /NO-GO ON + JMS I [FFNEG /YES-NEGATE IT + ISZ MSIGN /BUMP SIGN CHECK + NOP /MAY SKIP +LEV, TAD OPX /EXIT WITH OPERAND EXPONENT IN AC + JMP I MDSET +MSIGN, 0 + /24 BIT BY 12 BIT MULTIPLY. MULTIPLIER IS IN OPL +/MULTIPLICAND IS IN ACH AND ACL +/RESULT LEFT IN MDSET,AC2, AND AC1 + +MP24, 0 + TAD (-14 /SET UP 12 BIT COUNTER + DCA OPX + TAD OPL /IS MULTIPLIER=0? + SZA + JMP MPLP1 /NO-GO ON + DCA AC1 /YES-INSURE RESULT=0 + JMP I MP24 /RETURN +MPLP, TAD OPL /SHIFT A BIT OUT OF LOW ORDER +MPLP1, RAR /OF MULTIPLIER AND INTO LINK + DCA OPL + SNL /WAS IT A 1? + JMP MPLP2 /NO - 0 - JUST SHIFT PARTIAL PRODUCT + TAD AC2 /YES-ADD MULTIPLICAND TO PARTIAL PRODUCT + TAD ACL /LOW ORDER + DCA AC2 + CML RAL /*K* NOTE THE "SNL" 5 WORDS BACK! + TAD ACH /HI ORDER +MPLP2, TAD MDSET + RAR /NOW SHIFT PARTIAL PROD. RIGHT 1 BIT + DCA MDSET + TAD AC2 + RAR + DCA AC2 + TAD AC1 + RAR /OVERFLOW TO AC1 + DCA AC1 + ISZ OPX /DONE ALL 12 MULTIPLIER BITS? + JMP MPLP /NO-GO ON + JMP I MP24 /YES-RETURN + PAGE + /DIVIDE-BY-ZERO ROUTINE - MUST BE AT BEGINNING OF PAGE + +DBAD, ISZ FATAL /DIVIDE BY 0 NON-FATAL + JMS I ERR /GIVE ERROR MSG + TAD DBAD + DCA ACX /RETURN A VERY LARGE POSITIVE NUMBER + AC2000 + JMP FD + +/FLOATING DIVIDE - USES DIVIDE-AND-CORRECT METHOD + +DDDIV, JMS I (DARGET + SKP +FFDIV, JMS I (ARGET /GET OPERAND + JMS I (MDSET /GO SET UP FOR DIVIDE-OPX IN AC ON RETN. + CMA IAC /NEGATE EXP. OF OPERAND + TAD ACX /ADD EXP OF FAC + DCA ACX /STORE AS FINAL EXPONENT + TAD OPH /NEGATE HI ORDER OP. FOR USE + CLL CMA IAC /AS DIVISOR + DCA OPH + JMS DV24 /CALL DIV.--(ACH+ACL)/OPH + TAD ACL /SAVE QUOT. FOR LATER + DCA AC1 + TAD OPL + SNA CLA + JMP DVL2 /AVOID MULTIPLYING BY 0 + TAD (-15 /SET COUNTER FOR 12 BIT MULTIPLY + DCA DV24 /TO MULTIPLY QUOT. OF DIV. BY + JMP DVLP1 /LOW ORDER OF OPERAND (OPL) + +/DIVIDE ROUTINE - (ACH,ACL)/OPH = ACL REMAINDER REM (AC2=0) + +DV24, 0 + TAD ACH /CHECK THAT DIVISOR IS .GT. DIVIDEND + TAD OPH /DIVISOR IN OPH (NEGATIVE) + SZL CLA /IS IT? + JMP DBAD /NO-DIVIDE OVERFLOW + TAD (-15 /YES-SET UP 12 BIT LOOP + DCA AC2 + JMP DV1 /GO BEGIN DIVIDE +DV2, TAD ACH /CONTINUE SHIFT OF FAC LEFT + RAL + DCA ACH /RESTORE HI ORDER + TAD ACH /NOW SUBTRACT DIVISOR FROM HI ORDER + TAD OPH /DIVIDEND + SZL /GOOD SUBTRACT? + DCA ACH /YES-RESTORE HI DIVIDEND + CLA /NO-DON'T RESTORE--OPH.GT.ACH +DV1, TAD ACL /SHIFT FAC LEFT 1 BIT-ALSO SHIFT + RAL /1 BIT OF QUOT. INTO LOW ORD OF ACL + DCA ACL + ISZ AC2 /DONE 12 BITS OF QUOT? + JMP DV2 /NO-GO ON + JMP I DV24 /YES-RETN W/AC2=0 + /DIVIDE ROUTINE CONTINUED + +MP12L, DCA OPL /STORE BACK MULTIPLIET + TAD AC2 /GET PRODUCT SO FAR + SNL /WAS MULTIPLIER BIT A 1? + JMP .+3 /NO-JUST SHIFT THE PARTIAL PRODUCT + CLL /YES-CLEAR LINK AND ADD MULTIPLICAND + TAD ACL /TO PARTIAL PRODUCT + RAR /SHIFT PARTIAL PRODUCT-THIS IS HI ORDER + DCA AC2 /RESULT-STORE BACK +DVLP1, TAD OPL /SHIFT A BIT OUT OF MULTIPLIER + RAR /AND A BIT OR RESLT. INTO IT (LO ORD. PROD.) + ISZ DV24 /DONE ALL BITS? + JMP MP12L /NO-LOOP BACK + CLL CIA /YES-LOW ORDER PROD. OF QUOT. X OPL IN AC + DCA ACL /NEGATE AND STORE + CML RAL /PROPAGATE CARRY + TAD AC2 /NEGATE HI ORDER PRODUCT + STL CIA + TAD ACH /COMPARE WITH REMAINDER OF FIRST DIV. + SZL /WELL? + JMP DVOPS /GREATER THAN REM.-ADJUST QUOT OF 1ST DIV. + DCA ACH /OK - DO (REM - (Q*OPL)) / OPH +DVL3, JMS DV24 /DIVIDE BY OPH (HI ORDER OPERAND) +DVL1, TAD AC1 /GET QUOT. OF FIRST DIV. + SMA /IF HI ORDER BIT SET-MUST SHIFT 1 RIGHT + JMP FD /NO-ITS NORMALIZED-DONE +SHR1, CLL + ISZ ACL /ROUND AND SHIFT RIGHT ONE + SKP + IAC /DOUBLE PRECISION INCREMENT + RAR + DCA ACH /STORE IN FAC + TAD ACL /SHIFT LOW ORDER RIGHT + RAR + DCA ACL /STORE BACK + ISZ ACX /BUMP EXPONENT + NOP + TAD ACH + JMP DVL1+1 /IF FRACT WAS 77777777 WE MUST SHIFT AGAIN +FD, DCA ACH /STORE HIGH ORDER RESULT + JMP I (MDONE /GO LEAVE DIVIDE + +DVL2, DCA ACL /COME HERE IF LOW-ORDER QUO=0 + JMP DVL3 /SAVE SOME TIME + /ROUTINE TO ADJUST QUOTINET OF FIRST DIVIDE (MAYBE) WHEN THE +/REMAINDER OF THE FIRST DIVIDE IS LESS THAN QUOT*OPL + +DVOPS, CMA IAC /NEGATE AND STORE REVISED REMAINDER + DCA ACH + CLL + TAD OPH + TAD ACH /WATCH FOR OVERFLOW + SNL + JMP DVOP1 /OVERFLOW-DON'T ADJUST QUOT. OF 1ST DIV. + DCA ACH /NO OVERFLOW-STORE NEW REM. + CMA /SUBTRACT 1 FROM QUOT OF + TAD AC1 /FIRST DIVIDE + DCA AC1 +DVOP1, CLA CLL + TAD ACH /GET HI ORD OF REMAINDER + SNA /IS IT ZERO? +DVOP2, DCA ACL /YES-MAKE WHOLE THING ZERO + DCA ACH + JMS DV24 /DIVIDE EXTENDED REM. BY HI DIVISOR + TAD ACL /NEGATE THE RESULT + CLL CMA IAC + DCA ACL + SNL /IF QUOT. IS NON-ZERO, SUBTRACT + CMA /ONE FROM HIGH ORDER QUOT. + JMP DVL1 /GO TO IT + +LPBUF3, ZBLOCK 12 + LPBUF4 + PAGE + /"OPNEG" MUST BE AT 0 ON PAGE + +OPNEG, 0 /ROUTINE TO NEGATE OPERAND + TAD OPL /GET LOW ORDER + CLL CIA /NEGATE AND STORE BACK + DCA OPL + CML RAL /PROPAGATE CARRY + TAD OPH /GET HI ORDER + CLL CIA /NEGATE AND STORE BACK + DCA OPH + JMP I OPNEG +/ +/FLOATING SUBTRACT AND ADD +/ +FFSUB, JMS I (ARGET /PICK UO THE OP. + JMS OPNEG /NEGATE OPERAND + SKP +FFADD, JMS I (ARGET /PICK UP OPERAND + TAD OPH /IS OPERAND = 0 + SNA CLA + JMP I FPNXT /YES-DONE + TAD ACH /NO-IS FAC=0? + SNA CLA + JMP CLROFL /CLEAR OUT THE OVERFLOW BITS + TAD ACX /NO-DO EXPONENT CALCULATION + CLL CIA + TAD OPX + SMA SZA /WHICH EXP. GREATER? + JMP FACR /OPERANDS-SHIFT FAC + CIA /FAC'S-SHIFT OPERAND=DIFFRNCE+1 + TAD (-30 + SMA /TEST FOR INSIGNIFICANCE + JMP OPINSG /YES - ANSWER IS FAC + TAD (30 + JMS OPSR + JMS I [ACSR /SHIFT FAC ONE PLACE RIGHT +DOADD, TAD OPX /SET EXPONENT OF RESULT + DCA ACX + JMS I [OADD /DO THE ADDITION + JMS FFNOR /NORMALIZE RESULT + JMP I FPNXT /RETURN +FACR, TAD (-30 + SMA /TEST FOR INSIGNIFICANCE + JMP ACINSG /YES - ANSWER IS OPR + TAD (30 + JMS I [ACSR /SHIFT FAC = DIFF.+1 + JMS OPSR /SHIFT OPR. 1 PLACE + JMP DOADD /DO ADDITION + +OPINSG, CLA + JMP I FPNXT + /OPERAND SHIFT RIGHT-ENTER WITH POSITIVE COUNT-1 IN AC + +OPSR, 0 + CMA /- (COUNT+1) TO SHIFT COUNTER + DCA AC0 +LOP2, TAD OPH /GET SIGN BIT + CLL /TO LINK + SPA + CML /WITH HI MANTISSA IN AC + RAR /SHIFT IT RIGHT, PROPAGATING SIGN + DCA OPH /STORE BACK + TAD OPL + RAR + DCA OPL /STORE LO ORDER BACK + ISZ OPX /INCREMENT EXPONENT + NOP + ISZ AC0 /DONE ALL SHIFTS? + JMP LOP2 /NO-LOOP + RAR /SAVE 1 BIT OF OVERFLOW + DCA AC2 /IN AC2 + JMP I OPSR /YES-RETN. + +FFNOR, 0 /ROUTINE TO NORMALIZE THE FAC + TAD ACH /GET THE HI ORDER MANTISSA + SNA /ZERO? + TAD ACL /YES-HOW ABOUT LOW? + SNA + TAD AC1 /LOW=0, IS OVRFLO BIT ON? + SNA CLA + JMP ZEXP /#=0-ZERO EXPONENT +NORMLP, CLA CLL CML RTR /NOT 0-MAKE A 2000 IN AC + TAD ACH /ADD HI ORDER MANTISSA + SZA /HI ORDER = 6000 + JMP .+3 /NO-CHECK LEFT MOST DIGIT + TAD ACL /YES-6000 OK IF LOW=0 + SZA CLA + SPA CLA /2,3,4,5,ARE LEGAL LEFT MOST DIGS. + JMP FFNORR /FOR NORMALIZED #-(+2000=4,5,6,7) + JMS I [AL1BMP /SHIFT AC LEFT AND BUMP ACX DOWN + JMP NORMLP /GO BACK AND SEE IF NORMALIZED +ZEXP, DCA ACX +FFNORR, DCA AC1 /DONE W/NORMALIZE - CLEAR AC1 + JMP I FFNOR /RETURN + +ACINSG, CLA /COME HERE IF AC IS INSIGNIFICANT ON ADDITION + DCA ACH + DCA ACL + JMP DOADD-1 /FAKE AN ADD WITH OPR=0 + +LPBUF4, ZBLOCK 40 + LPBUFE +CLROFL, DCA AC1 /CLEAR THE FLOATING AC OVERFLOW WORD + DCA AC2 /CLEAR THE OPERAND OVERFLOW WORD + JMP DOADD /FAC=0; DO THE ADD + PAGE + /PAGE 7400 UNUSED RIGHT NOW + +LPBUFE, ZBLOCK 177 + LPBUFR + FIELD 1 + ADDED src/os8-v3f/RX78C.PA Index: src/os8-v3f/RX78C.PA ================================================================== --- /dev/null +++ src/os8-v3f/RX78C.PA @@ -0,0 +1,455 @@ +/RX NON-SYSTEM HANDLER, GENERAL CONTROLLER TYPE +/FLOPPY DISK HANDLER FOR OS/8 +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1978 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + / +/ THIS HANDLER IS SPECIFICALLY FOR A SECOND PAIR OF DRIVES ON A VT78!! +/ +/DEFINITIONS OF RX8/E IOT'S + +RXVER= "N&77 + +DEVCOD= 750 /DEVICECODE + +LCD= 6001+DEVCOD /LOAD COMMAND REGISTER +XDR= 6002+DEVCOD /TRANSFER DATA REGISTER +STR= 6003+DEVCOD /SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG +SER= 6004+DEVCOD /SKIP ON ERROR FLAG, CLEAR FLAG +SDN= 6005+DEVCOD /SKIP ON DONE FLAG, CLEAR FLAG +INTR= 6006+DEVCOD /INTERRUPT ENABLE/DISABLE +INIT= 6007+DEVCOD /INITIALIZE CONTROLLER AND RECALIBRATE DRIVES + + +/NOTES ON THIS HANDLER: + +/THIS HANDLER READS AND WRITES THE DISK IN "12-BIT" MODE, IN WHICH +/ONLY 6 BITS OF EVERY 8-BIT BYTE ARE USED. AN RX01 CARTRIDGE +/CONTAINS 494 OS/8 BLOCKS UNDER THIS METHOD + +/TO MAXIMIZE SPEED ON THE DEVICE, THE HANDLER READS AND WRITES RX01 DATA +/ON A TRACK WITH A TWO-WAY INTERLEAVE - I.E. RECORDS 1-26 ON A TRACK +/ARE WRITTEN IN THE SEQUENCE: +/ 1,3,5,7,9,11,13,15,17,19,21,23,25,2,4,6,8,10,12,14,16,18,20,22,24,26 + +/DOUBLE DENSITY MEDIA ARE WRITTEN IN A THREE WAY INTERLEAVE +/ 1,4,7,10,13,16,19,22,25,2,5,8,11,14,17,20,23,26,3,6,9,12,15,18,21,24 + +/TRACK-SECTOR COMPUTATION IS DONE I/O TO/FROM THE SILO + +AC4000=CLL CLA CML RAR /SET AC TO 4000 +AC7776=CLL CLA CMA RAL /SET AC TO 7776 +AC0002=CLL CLA CML RTL /SET AC TO 0002 +AC7775=CLL CLA CMA RTL /SET AC TO 7775 + / +/BUILD DATA + *0 +/ + -2 /TWO ENTRY POINTS + DEVICE RX0B /DEVICE GROUP NAME + DEVICE RXA2 /ENTRY POINT NAME + 4320 /CODE FOR MULTI-RX + RXA2&177+4000 /ENTRY POINT OFFSET + 0 + 0 + DEVICE RX0B /DEVICE GROUP NAME + DEVICE RXA3 /ENTRY POINT NAME + 4320 /THIS WAS CHANGED FROM 4270 - ASSIGNED TO CASSETTE + RXA3&177+4000 /ENTRY POINT OFFSET + 0 + 0 + *200 +/ +/ +/ INIT CODE +/ +POINT, HLT /ADDR OF SECOND PAGE AT INIT TIME +UNIT, JMS I POINT /GO TO SECOND PAGE TO INIT +/ +/ LIST OF VECTORS TO SECOND PAGE +/ +LQUO, QUO-. /LQUO MUST LEAD OFF LIST +LRETRY, RETRY-. +LREC, REC-. +LSIZE, SIZE-. +LREMD, REMD-. +LFN, FN-. +LDENSW, DENSW-. +LSELCT, SELECT-. +LENTRY, ENTRY-. +VCOUNT=LQUO-. /FALLS THRU TO WHICH, HERE IS VECTOR COUNT +/ +/ COME HERE FROM ZOO +/ +/ PROCESS ENTRY POINT, DEVICE TYPE +/ +WHICH, CLA IAC /SELECT SECOND PAIR IF DRIVES + JMS I LSELCT + AC7775 /SET RETRY COUNTER + DCA I LRETRY + TAD I ZOO /GET UNIT NUMBER*20+402 + DCA UNIT /HOLD FOR LATER + ISZ ZOO /MOVE TO TYPE CODE + TAD I ZOO /HAS THIS DRIVE BEED INIT'ED +L7700, SMA CLA /SKIP IF NO + JMP NORMAL /GO TO NORMAL PATH +RSTART, TAD UNIT /PICK UP UNIT BIT, DOUBLE DENSITY +2 + TAD L10 /MAKE A READ STATUS CODE + SDN + JMP .-1 + LCD + JMP BOUNCE /HOP OVER ENTRY POINTS +/ + / +/ + IFZERO .&177-34&4000 <_ERROR_> +/ +/ ENTRY POINTS ARE AT 33, 37 +/ + *.&7600+33 +/ +RXA2, 0 + JMS ZOO /COMMON ENTRY ROUTINE + 402 /UNIT 0, 402 FOR CONVENIENCE + -1 /MINUS SAYS STILL HAVE TO INIT IT; +/ /SINGLE=0, DOUBLE=20, QUAD=22 +RXA3, 0 + JMS ZOO +L422, 422 /20 SAYS UNIT 1, 402 FOR CONVENIENCE +DOOR, JMP WHICH /INIT TIME LITERAL (MUST BE MINUS) +/ /GETS SAME TYPE CODE AS OTHER ENTRY POINT +/ +/ REST OF SET UP CODE +/ +BOUNCE, SDN + JMP .-1 + XDR /GET STATUS WORD + AND L32 /KEEP DENSITY ERROR; DOUBLE; QUAD + TAD L10 /SINGLE=10;SING/DOUB=40;DOUB=20;QUAD=22 + AND L422 /SINGLE=0;SING/DOUB=0;DOUB=20;QUAD=22 + DCA I ZOO /PLACE TYPE CODE, THREE LOC.'S AFTER ENTRY POINT + SER /CLEAR ERROR FLAG +L10, 10 /MAY SKIP + TAD L416 /SET DONE FLAG AGAIN + LCD +NORMAL, TAD I ZOO /FETCH BACK TYPE CODE + SZA CLA /SKIP IF A SINGLE DENSITY + TAD L7700 /DOUBLE + TAD L7700 /SINGLE=7700, DOUBLE=7600 + DCA I LDENSW /PLACE FOR LOOP CONTROL + TAD I ZOO + CLL RTR /PUT QUAD BIT TO LINK + SNA CLA /SKIP IF DOUBLE OR QUAD + TAD L1734 /SINGLE + TAD L4110 /D&Q=4110, S=6044 + SNL /SKIP ON QUAD, IT'S OK RIGHT NOW + CLL CML RAR /SINGLE AND DOUBLE DIVIDE BY 2 + DCA I LSIZE /S=7022, D=6044, Q=4110 + TAD I LDENSW /7700 IF SINGLE, 7600 IF DOUBLE + CLL CMA RTL /375 IF SINGLE, 775 IF DOUBLE + AND UNIT /VOILA, 400*DOUBLE + 20*UNIT + DCA I LFN /PLACE INTO FUNCTION CONTROL WORD + AC7775 /BACK UP ZOO TO FETCH CALLING ADDR + TAD ZOO + DCA T1 /HOLD TEMPORARY + TAD I T1 /HERE IS CALLING ADDR +CLLFLD, HLT /PUT CDF TO CALLING FIELD HERE + JMS I LENTRY /GO TO SECOND PAGE, LEAVING POINTER TO DIVSUB +/ +/ DIVSUB SUBROUTINE !!MUST!! FOLLOW IMMEDIATELY +/ + / +/ DIVSUB +/ +/ CALL TO SET UP TRACK, SECTOR, FROM OVERALL SECTOR # +/ ALSO, SET UNIT WITH HEAD COMMAND IF WE ARE ON TO SECOND SIDE +/ +/ CALL WITH AC <0 IF IT IS REALLY AN ERROR RETRY +/ CALL WITH AC >=0 IF CALL TO DIVSUB +/ +DIVSUB, 0 + CDF 0 /AND DATA FIELD MUST BE TO HERE + SPA CLA /SKIP IF REALLY A DIVIDE REQUEST + JMP RSTART /NO, IT WAS AN ERROR RETRY!! + DCA I LQUO /CLEAR DIVIDE QUOTIENT + TAD I ZOO /IS IT A TWO HEADER + RTR /PUT QUAD BIT TO LINK + SNL CLA /SKIP IF YES + JMP SHUNT /NO, GO DO DIVIDE + TAD I LREC /WHICH RECORD ARE WE WORKING ON + TAD LM3670 /NUMBER OF SECTORS ON FIRST SIDE + SZL CLA /SKIP IF SECOND SIDED IT + JMP SHUNT /NO, JUST REGULAR + TAD I LFN /FORCE HEAD BIT ON + AND L422 /KEEP DOUBLE, UNIT, READ-WRITE + TAD L1000 /ADD IN SECOND SIDE + DCA I LFN + TAD LM3670 /BUT DECREASE RECORD NUMBER +SHUNT, TAD I LREC /THIS FOR TRACK-SECTOR +DIVLOO, ISZ I LQUO /MAIN DIIVIDIE LOOP + TAD LM32 /DIVIDE BY 26 TO GET TRACK + SMA /SKIP IF DONE + JMP DIVLOO + TAD L32 /REMAINDER 0-25 + DCA T1 /HOLD IT IN TEMPORARY + TAD I ZOO /SINGLE DENSITY + SZA CLA /SKIP IF YES + TAD T1 /MULTIPLY BY THREE FOR DOUBLE + TAD T1 /AND BY TWO FOR SINGLE + TAD T1 + CLL IAC /LINK CLEAR FOR FINAL TEST; +1 TO START AT 1 NOT 0 + TAD LM32 /DIVIDE BY 26 TO GET SECTOR + SMA SZA /SKIP IF DONE + JMP .-2 + TAD L32 /RESTORE POSITIVE VALUE TO BE SECTOR + DCA I LREMD /WHEW, BUT WATCH IT, A FINAL CORRECTION COMING! + RAL /IF LINK=0 AND SINGLE: 2,4,6,8,10,12,14,16... SERIES + TAD I ZOO /BUT WE HAVE 1,3,5,7,9,11,13,15... SO WE MUST INCREMENT! + SNA CLA /SKIP IF SOME OTHER CASE + ISZ I LREMD /NOW HAVE IT 2,4,6,8,10,12,14,16... + JMP I DIVSUB /OUT + / +/ +L416, 416 /SOME LITERALS +L32, 32 +L1000, 1000 +LM32, -32 +L1734, 1734 +L4110, +LM3670, -3670 +/ +/ +/ + *.&7600+167 /FORCE TO END OF PAGE +/ ZOO SUBROUTINE +/ +/ TO SET UP ENTRY POINT PROCESSING, AND INIT CODE +/ +ZOO, 0 /ADDR OF 'HIT' ENTRY POINT +2 COMES HERE + CLA /FOR SAFETY + RDF /SAVE CALLERS FIELD SETTING + TAD LCDF0 /ADD IN CDF 0 + DCA CLLFLD /RESET WHEN GOING TO I/O SUB +LCDF0, CDF 0 /DATA FIELD HERE FOR INDIRECTS +CLOSE, TAD DOOR /CLOSE DOOR TO ONCE ONLY CODE (JMP WHICH +T1, DCA CLOSE /USE ONCE-ONLY FOR TEMPORARY LOCATION + JMS POINT /LEAVE ADDR OF SECOND PAGE + / +/ +/ VARIABLES, ALSO INIT CODE LIVES HERE +/ +/ +BUF, 0 /POINTER TO CALLER'S BUFFER +RETRY, 0 /RETRY COUNT +SIZE, 0 /SIZE OF DEVICE +SYS, 0 /POINTER TO CALL +QUO, 0 /DIVIDE QUOTIENT, WHICH IS TRACK NUMBER +REC, 0 /SECTOR NUMBER OF FLOPPY +BC, 0 /CONTROL COUNT, WORDS TO TRANSFER +FN, 0 /0 FOR WRITE; 2 FOR READ; HEAD, DENSITY, UNIT +DENSW, 0 /7700 IF SINGLE DENSITY, 7600 IF DOUBLE DENSITY +ENTRY, 0 /ENTRY POINT, LEAVE ADDR OF DIVSUB HERE +/ + IFNZRO .&177-10&4000 <_ERROR> /ENOUGH ROOM FOR INIT? +/ + *.&7600 +/ +/ INIT TIME: FILL VECTOR TABLE +/ +THERE, 0 /FILLED BY JMS, POINTS TO VECTOR +ILOOP, TAD THERE /POINTER IS ALSO OFFSET! + TAD I THERE /MAKING VECTOR + DCA I THERE + ISZ THERE /MOVE TO NEXT VECTOR + ISZ LDCMD /CONTROL COUNT ON THIS PAGE + JMP ILOOP + JMP I THERE /BACK TO FIRST PAGE + / +/ IO SUBROUTINE +/ +/ ENTRY POINT AT END OF LAST LISTING PAGE +/ +/ + *ENTRY+1 /RESUME RUNTIME CODE +/ + DCA SYS /POINTER TO ARG'S, EXIT + RDF /DATA FIELD OF USER CALL + TAD (CDF CIF 0 /MAKE CDF CIF TO CALLER'S FIELD + DCA EXFLD /SET UP FOR CALL + AC4000 /SET LINK=0, AC=4000 + TAD I SYS /CARRY READ-WRITE BIT TO LINK + AND L70 /KEEP FIELD FOR BUFFER + TAD LLCDF0 /MAKE CDF TO BUFFER FIELD + DCA BUFCDF /PLACE INTO I/O LOOP + CML RTL /MAKE FUNCTION CODE, 0=WRITE, 2=READ + TAD FN /START-UP CODE HAS SET HEAD, DENSITY, UNIT ETC. + DCA FN + TAD I SYS /MAKE LOOP CONTROL COUNT + RAL + AND L7600 + CIA /0 FOR WHOLE FIELD + DCA BC /MINUS TOTAL NUMBER OF WORDS + ISZ SYS /NEXT + TAD I SYS /IS BUFFER ADDRESS + DCA BUF + ISZ SYS /NEXT + TAD L175 /CARRY WITH DENSW IF SINGLE DENSITY + TAD DENSW /BLOCK # TO SECTOR # + SMA CLA /SKIP IF DOUBLE, MULTIPLY BY 2 + TAD I SYS /SINGLE, MULTIPLY BY FOUR + SMA /SKIP ON ILLEGAL NEGATIVE BLOCK #, FORCE LINK ON LATER + TAD I SYS + ISZ SYS /MOVE POINTER TO ERROR EXIT + CLL RAL + DCA REC /SAVE SECTOR NUMBER + SZL /SKIP IF LEGAL BLOCK # + JMP ERREX /FORCE SIZING OF DISK TO RETURN SIZE IN AC + JMS I ENTRY /CALL DIVISION SUBROUTINE OTHER PAGE + TAD FN /SPLIT READ AND WRITE + RTR /READ-WRITE BIT TO LINK + SZL CLA /WRITE SKIPS + JMP STREAD /READ GOES TO START IN MIDDLE OF LOOP +/ /WRITE FALLS THRU TO NEXT LISTING PAGE + /WRITE FALLS THRU TO THIS LOOP +/ +/ TOP OF MAIN LOOP +/ +TOP, TAD FN /SET SILO TO LOAD-UNLOAD + JMS LDCMD /COMMAND TO CONTROLLER + TAD DENSW /MAKE SILO LOOP COUNT, S=7700, D=7600 + DCA FLPWC /LDCMD ENTRY SAFE TEMPORARY +BUFCDF, HLT /CDF TO BUFFER FIELD PLACED HERE +TRLOOP, TAD I BUF /IN CASE WRITE, FETCH A WORD + STR /SKIP IF READY TO PASS DATA + JMP .-1 /NO + XDR /TO OR FROM AC + DCA I BUF /PLACE WORD FOR READ, WRITE REPLACES SAME + ISZ BUF /MOVE BUFFER POINTER, (MAY SKIP) +REMD, 0 /DIVIDE REMAINDER, WHICH IS SECTOR NUMBER + ISZ FLPWC /DONE YET + JMP TRLOOP + TAD DENSW /ADDING 77 (SINGLE) 177 (DOUBLE) + CMA /ONCE WE CMA, THAT IS + TAD BC /LOOP CONTROL TO FINISH READ + SNA + JMP OKEX /OK, DONE + DCA BC /REPLACE AND KEEP GOING +/ +/ MIDDLE OF MAIN LOOP +/ +STREAD, CLA CLL IAC RTL /KNOWN TO BE A 78, SO THIS WORKS! FOR LITERAL 4 + TAD FN /TURNING SILO COMMAND INTO READ-WRITE COMMAND + JMS LDCMD /I/O COMMAND TO CONTROLLER + TAD REMD /PRECOMPUTED SECTOR # + STR + JMP .-1 + XDR +L7600, 7600 /CLEAR AC, AND IS LITERAL + TAD QUO /TRACK # + STR + JMP .-1 + XDR /TRACK # IS ALWAYS NON0 !! + ISZ REC /MOVE TO NEXT RECORD NUMBER + JMS I ENTRY /DO TRACK SECTOR FOR NEXT OPERATION + TAD LL16 /WAIT FOR OPERATION TO COMPLETE + JMS LDCMD + ISZ BC /CHECK FOR WRITE EXIT + JMP TOP /STILL MORE +OKEX, ISZ SYS /KICK TO OK EXIT +SELBAK, DCA REC /TEMPORARY TO HOLD AC + JMS SELECT /AC NOW 0 TO FORCE SELECT OF FIRST PAIR + TAD REC /RETURN WITH (POSSIBLE) AC VALUE +EXFLD, HLT /CDF CIF TO CALLER + JMP I SYS /OUT + / +/ +/ LDCMD SUBROUTINE +/ +/ CHECK FOR CONTROL C, LOAD A COMMAND +/ +FLPWC=. /ENTRY POINT A TEMPORARY +LDCMD, VCOUNT /INIT COUNTER + DCA TRANS /SAVE COMMAND +LLCDF0, CDF 0 /DATA FIELD HERE IN CASE CONTROL C TO MONITOR +TSTTT, KSF /SKIP IF A TTY CHARACTER HAS HAPPENED + JMP TSTSD /NOPE, GO CHECK RX CONTROLLER READY + TAD L7600 /FORCE TOP BITS TO BE 1 TO ELIMINATE 3,203 + KRS /AMBIGUITY ON TEST + TAD L175 /IS IT A CONTROL C + SNA CLA /SKIP IF NOT + JMP MONEX /GO EXIT TO MONITOR +TSTSD, SDN /IS RX CONTROLLER READY + JMP TSTTT /NOPE, GO CHECK TTY + TAD TRANS /GET BACK COMMAND + LCD /TO CONTROLLER + SER /SKIP IF AN ERROR + JMP I LDCMD + AC4000 /ERROR CODE FOR HARD ERROR + SKP /SKIP OVER SIZING ENTRY +ERREX, TAD SIZE /PUT NEGATIVE SIZE IN AC + ISZ RETRY /TRY THREE TIMES? + JMS I ENTRY /NO, AC NEGATIVE SAYS RETRY NOT DIVIDE!! + JMP SELBAK /SELECT BACK TO FIRST PAIR +/ +MONEX, JMS SELECT /AC=0, SELECT FIRST PAIR + JMP I L7600 /BACK +/ +/ +/ +/ SELECT ROUTINE +/ +TRANS, /TEMPORARY FOR LDCMD TO SAVE COMMAND +SELECT, 0 + 6750 /CONTENTS OF AC11 SAYS WHICH PAIR + SER /CLEAR POSSIBLE ERRANT FLAGS +L70, 70 /SAFE NO-OP + SDN +L175, 175 + STR +LL16, 16 + CLA /PERHAPS NOT NECESSARY + TAD LL16 /SET DONE FLAG AGAIN + LCD + JMP I SELECT +/ + PAGE +/ ADDED src/os8-v3f/RXCOPY.PA Index: src/os8-v3f/RXCOPY.PA ================================================================== --- /dev/null +++ src/os8-v3f/RXCOPY.PA @@ -0,0 +1,1444 @@ +/ RXCOPY FOR OS/8 V3D AND OS/78 V1A +/ +/ THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A +/ SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION +/ OF THE ABOVE SOPYRIGHT NOTICE. THIS SOFTWARE, OR ANY THEREOF, +/ MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER +/ PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO +/ THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE +/ SHALL AT ALL TIMES REMAIN IN DEC. +/ +/ THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT +/ NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL +/ EQUIPMENT CORPORATION. +/ +/ DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS +/ SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. +/ + +/ +/ VERSION V4A M.H. MAY 20, 1977 +/ S.R. MAY 20, 1977 +/ VERSION V4B S.R. AUG 24, 1978 +/ +/ START ADDRESS 16000; JSW 7003 +/ +/ THIS PROGRAM PERFORMS COPY, READ, AND COMPARE OPERATIONS ON +/ RX FLOPPY DISKS ON A TRACK BY TRACK BASIS. +/ +/ THE COMMAND OPTIONS ARE: +/ +/P PAUSE BEFORE AND AFTER ACCESSING DISK +/M MATCH WITH NO IMPLIED COPY +/N COPY WITH NO IMPLIED MATCH +/R READ OUTPUT DEVICE WITH NO IMPLIED MATCH OR COPY +/V PRINT VERSION NUMBER +/C (NOT DOCUMENTED) COPY +/S FORMAT (ONLY) OUTPUT DEVICE TO SINGLE DENSITY +/D FORMAT (ONLY) OUTPUT DEVICE TO DOUBLE DENSITY +/ IF NO OPTIONS ARE EXPLICITLY DECLARED, COPY AND MATCH ARE ASSUMED. +/ +/ THERE ARE TWO COMMAND FORMATS: +/ +/ DEV: /FORCE BEYOND BUFFER +/ +/ ## MAIN LOOP ## +/ +DO0, TAD COUNT4 /SET UP HEAD CONTROLLER + DCA HEADER +DO1, TAD COUNT5 /SET UP HALF-TRACK CONTROLLER + DCA HFTRCK +/ +/ WAS COPY SELECTED? +/ +DO2, TAD HEADER /PLACE HEADER INFO TO COMMAND WORD + CMA CLL RTR + RTR /0 IF FIRST, 1000 IF SECOND + TAD (100 /ALSO NEED EIGHT-BIT BIT + DCA LOOPFN /FUNCTION FOR THIS LOOP + TAD OPTION /SHOULD WE COPY? + AND (COPY + SNA!CLA + JMP DO3 /NO + JMS RI /YES -- READ INPUT DEVICE INTO FIELD 0 + JMS WO /WRITE OUTPUT DEVICE FROM FIELD 0 +/ +/ WAS READ SELECTED? +/ +DO3, TAD OPTION /SHOULD WE READ? + AND (READ + SZA CLA /SKIP IF NOT NEEDED + JMS RO +/ +/ WAS MATCH SELECTED? +/ +DO4, AC4000 /ADD PUTS MATCH BIT TO LINK + TAD OPTION + AND (COPY /MATCH IN LINK, COPY IN AC + SNL /SKIP IF A MATCH + JMP DO6 /NO MATCH, READY FOR LOOP CONTROL + SNA CLA /HAS A COPY ALREADY BEEN DONE; IF SO DON'T READ TWICE + JMS RI /READ FROM INPUT DEVICE + JMS RO /READ FROM OUTPUT DEVICE +/ +/ COMPARE BUFFERS +/ +DO5, JMS COMP /CALL ACTION TO DO COMPARE +/ +/ LOOP CONTROLLERS +/ +DO6, CLA /MAY HIT WITH JUNK IN AC + ISZ HFTRCK /GO AGAIN FOR OTHER HALF TRACK? + JMP DO2 /YES + ISZ HEADER /NEED TO GO TO OTHER HEAD? + JMP DO1 /OTHER HEAD, LOOP AGAIN + ISZ TRACK /INCREMENT TRACK, CHECK DONE + JMP DO0 /NO +EXITOK, TAD OPTION /DOES HE NEED TO REMOUNT SYS? + AND (PAUS + SNA CLA /SKIP IF YES + JMP GOEXIT /NO, BACK TO SYSTEM +SYSON, JMS QUEST /ASK HIM + MSG11 /ADDR OF MESSAGE + JMS SYSON /"N" ANSWER, ASK AGAIN +/ /"Y" ANSWER, GO EXIT +GOEXIT, JMS SELECT /FORCE BACK TO FIRST PAIR + CDF CIF 0 /FIELDS FOR EXEC + JMP I (7605 +/ +/ ## END OF MAIN LOOP ## +/ +OPTION, 0 /OPTION BITS TOGETHER IN ONE WORD +COUNT4, 0 /-1 IF ONE HEAD, -2 IF TWO +COUNT5, 0 /-2 IF TRACK MUST BE DONE IN TWO PASSES +/ /OTHERWISE -1 +HFTRCK, 0 /CONTROLS LOOP PASSES PER TRACK,FILL FROM COUNT5 +HEADER, 0 /FILL FROM COUNT4, CONTROLS HEAD +LOOPFN, 0 /EIGHT-BIT MODE + WHICH HEAD TO USE +/ +/ SUBROUTINE QUEST -- PRINT MSG AND ASK QUESTION +/ +/ JMS QUEST +/ ADDR OF MESSAGE +/ "N" RETURN +/ "Y" RETURN +/ +QUEST, 0 +Q1, TAD I QUEST /GET ADDR OF MESSAGE + JMS TYPE /PRINT IT + TAD (BUFF /SELECT INPUT BUFFER + JMS RDANS /READ ANSWER + TAD I (BUFF /WHAT WAS IT? + AND (177 + TAD (-116 /WAS IT A "N" + SNA + JMP Q3 /GO TO "N" EXIT + TAD (-131+116 /WAS IT A "Y" + SZA!CLA + JMP Q1 /NO -- ASK AGAIN +Q2, ISZ QUEST /"Y" RETURN AT JMS+3 +Q3, ISZ QUEST /"N" RETURN AT JMS+2 + JMP I QUEST +/ +/ SUBROUTINE CTRLC -- CHECK FOR CONTROL C +/ +CTRLC, 0 + KSF /SKIP IF A CHARACTER HAS BEEN TYPED + JMP I CTRLC /NO + KRS + AND (177 + TAD (-3 + SNA!CLA + JMP GOEXIT /IS A CONTROL C, EXIT + JMP I CTRLC +/ + +/ + PAGE +/ + +/ +/ SUBROUTINE RI -- READ FROM INPUT DEVICE +/ +RI, 0 /READ FROM INPUT DEVICE + TAD RISEC /SET UP OUR SECTOR + DCA SECTOR + TAD RIFN /AND OUR FUNCTION (UNIT, READ, ETC.) + TAD LOOPFN /AND LOOP CONTROLLER FUNCTION +/ /DENSITY, HEAD, AND 8BIT MODE + DCA FN + TAD RIFLD /SET UP OUR FIELD + JMS BUMPER /GO DO IT + MSG8 /ERROR MESSAGE ADDRESS + TAD SECTOR /GET OUR SECTOR BACK + DCA RISEC + JMP I RI /BACK TO MAIN LOOP +/ +RISEC, -32 /START AT SECTOR 1 (OFFSET BY 33) +RIFLD, CDF 0 /START AT FIELD 0 +RIFN, 0 /4000 IF DOUBLE DENSITY DRIVE, 20 IF ODD # UNIT +/ /2 ALWAYS FOR READ, 1 IF SECOND PAIR ON VT78 +/ /400 IF DOUBLE DENSITY TRANSFER +/ +/ SUBROUTINE RO -- READ FROM OUTPUT DEVICE +/ +RO, 0 /READ FROM OUTDEV + TAD ROSEC /SET UP OUR SECTOR + DCA SECTOR + TAD ROFN /SET UP OUR FUNCTION + TAD LOOPFN + DCA FN + TAD ROFLD /SET UP OUR FIELD + JMS BUMPER /GO DO IT + MSG9 + TAD SECTOR /GET BACK OUR SECTOR + DCA ROSEC + JMP I RO /BACK TO MAIN +/ +ROSEC, -32 /START AT SECTOR 1 +ROFLD, CDF 0 /SET AT INIT TIME +ROFN, 0 /SET AT INIT TIME, SAME FORMAT AS RIFN + +/ +/ SUBROUTINE WO -- WRITE OUTPUT DEVICE +/ +WO, 0 /WRITE TO OUTPUT DEVICE + TAD WOSEC /SET UP OUR SECTOR + DCA SECTOR + TAD WOFN /SET UP OUR FUNCTION + TAD LOOPFN + DCA FN + TAD WOFLD /SET UP OUR FIELD + JMS BUMPER /GO DO IT + MSG10 + TAD SECTOR /GET BACK OUR SECTOR + DCA WOSEC + JMP I WO /BACK TO MAIN LINE +/ +WOFLD, CDF 0 /FIELD TO START OUR WRITE +WOSEC, -32 /OUR SECTOR, START AT 1 +WOFN, 0 /SET FUNCTION AT INIT TIME +/ /SAME FORMAT AS ROFN, BUT NO READ BIT + +/ +/ +/ SUBROUTINE COMP -- COMPARE BUFFERS +/ +COMP, 0 + TAD COMSEC /OUR SECTOR + DCA SECTOR + DCA FN /0 IS COMPARE FUNCTION + TAD COMFLD /SET OUR FIELD + JMS BUMPER /DO IT + MSG7 + TAD SECTOR /SAVE OUR SECTOR + DCA COMSEC + JMP I COMP +/ +COMSEC, -32 /START AT 1 +COMFLD, CDF 0 / +/ + / +/ BUMPER +/ +/ ROUTINE TO HANDLER SECTORING, CORE POINTER, AND FIELDS +/ +/ CALLED BY RI, RO, WO, COMP; +/ STARTING FIELD IN AC, ERROR MSG ADDR IN CALL+1 +/ BUMPER IN TURN CALLS ACTION +/ +BUMPER, 0 + DCA BUMFLD /PLACE CDF SO SETS WHEN CALL ACTION + JMS CTRLC /CHECK A CONTROL C + TAD FN /NEED TO SELECT + JMS SELECT /DO IF NECESSARY, AC.AND.7776 + DCA FN /REPLACE FUNCTION, SELECT ONCE PER BUMPER CALL + TAD COUNT7 /HOW MANY FIELDS TO INCREMENT THRU + DCA BUMCNT +B0, TAD (BSTART-1 /SET AUTO INCREMENT REG'S + DCA X10 + TAD X10 + DCA X11 + TAD BUMFLD /SET FIELD INTO ACTION + DCA BFIELD +BUMFLD, 0 /CDF PLACED HERE BY CALLER + JMS ACTION /CALL ACTION ROUTIN + JMS OOPS /ERROR, PRINTOUT SOMTHING + TAD SECTOR /MOVE TO NEXT SECTOR + TAD COUNT8 /ADD IN INTERLEAVE + SPA /SKIP IF SPECIAL COMPUTING NEEDED + JMP B2 /NO SPECIAL NEEDED, REPLACE SECTOR +COUNT9, 0 /IAC OR SKP PLACED HERE !! + AND (1 /FOR 2 INTERLEAVE, SWAP 0 AND 1 + TAD (-32 /WRAP BACK TO MINUS +B2, DCA SECTOR + TAD X10 /CHECK IF DONE WITH BUFFER + TAD (-BSTART-BSIZE+1 /DONE IF POINTING TO LAST LOC + SZA CLA /SKIP IF DONE + JMP BUMFLD /NO, DO NEXT SECTOR + TAD (10 /INCREMENT FIELD + TAD BUMFLD + DCA BUMFLD + ISZ BUMCNT /DONE WITH ALL FIELDS + JMP B0 /NO, DO NEXT ONE + ISZ BUMPER /SKIP OVER ERROR POINTER + JMP I BUMPER +/ +COUNT7, 0 /MINUS NUMBER OF FIELDS PER PASS +COUNT8, 0 /INTERLEAVE 2 OR 3 SET AT INIT TIME +BUMCNT, 0 /LOOP CONTROL FOR FIELDS, FILL FROM COUNT7 +/ +/ CONSTRUCT ERROR MESSAGE +/ +OOPS, 0 + TAD I BUMPER /GET ADDR OF MESSAGE + JMS TYPE /PRINT TYPE OF FAILURE + JMS ADPRNT /PRINT (HEAD), TRACK, SECTOR + JMP I OOPS +/ + PAGE + +/ +/ SUBROUTINE TYPE -- PRINT MESSAGE +/ ON ENTRY AC HAS MESSAGE ADDRESS +/ +TYPE, 0 + DCA TYPAD /SAVE ADDR + CIF 0 + JMS I TTYENT + 4100 +TYPAD, 0 + 0 + NOP + JMP I TYPE +/ +/ SUBROUTINE RDANS -- READ ANSWER FROM TTY +/ ON ENTRY AC HAS BUFFER ADDR +/ +RDANS, 0 + DCA RDAD /SAVE ADDR + CIF 0 + JMS I TTYENT + 0110 +RDAD, 0 + 0 + NOP + JMP I RDANS +/ +TTYENT, 0 /ENTRY POINT TO TTY HANDLER +/ + / +/ SUBROUTINE APRNT -- PRINT TRACK AND SECTOR +/ ENTER WITH SECTOR IN AC +/ +ADPRNT, 0 + TAD LOOPFN /WHICH HEAD + CLL RTL + RAL /HEAD BIT TO AC11 + CLA RAL /BUT CLEARING OUT OTHER BITS + JMS SETIN /PUT TO MESSAGE + MSG13A-1 + TAD TRACK /TRACK KEPT IN COMPLEMENT FORM + CMA + JMS SETIN + MSG13B-1 + TAD SECTOR /SECTOR KEPT AS SECTOR-33 + TAD (33 + JMS SETIN + MSG13C-1 + TAD COUNT4 /IS QUAD OPERATION + IAC /COUNT4 COMES -2 FOR QUAD, -1 NOT + SNA CLA /SKIP IF YES + TAD (10 /NO, DON'T TALK ABOUT HEADS + TAD (MSG13 /ADDR FOR PRINTOUT + JMS TYPE + JMP I ADPRNT + +/ +/ SUBROUTINE SETIN -- ENTER NUMBER INTO A MESSAGE +/ +/ ON ENTRY AC HAS NUMBER AND JMS+1 HAS POINTER TO MESSAGE +/ HOLE MINUS 1. (2 DECIMAL DIGIT NUMBERS ARE ASSUMED) +/ +SETIN, 0 + DCA SETIN1 /SAVE NUMBER + DCA SETCNT /ZERO 10'S COUNTER + TAD I SETIN /GET MSG ADDR + DCA X17 /ENTER INTO AUTOINC POINTER + ISZ SETIN /BUMP RETURN ADDR +SETINB, TAD SETIN1 /GET NUMBER + TAD (-12 /SUBTRACT 10 DECIMAL + SMA /DONE DIVIDING? + JMP SETINA /NO + CLA /YES + TAD SETCNT /GET 10'S + SNA /SKIP IF A LEADING DIGIT + TAD (-20 /MAKE LEADING 0 A LEADING BLANK + TAD (260 /MAKE IT ASCII + CDF 0 /ERROR MESSAGES IN FIELD 0! + DCA I X17 /STORE IN MESSAGE + TAD SETIN1 /GET REMAINDER + TAD (260 /MAKE IT ASCII + DCA I X17 /STORE IN MESSAGE + CDF 10 /POINT CDF BACK HERE + JMP I SETIN +SETINA, DCA SETIN1 /SAVE RESULT + ISZ SETCNT /INCREMENT 10'S COUNT + JMP SETINB /CONTINUE +/ +SETIN1, 0 /NUMBER STORAGE +SETCNT, 0 /10'S COUNTER + / +/ REFORMAT +/ +/ BELONGING HERE ONLY FOR REASONS OF FIT +/ +/ +REFORM, TAD ROFN /OK, WHAT OUTPUT DENSITY DO WE HAVE + SMA CLA /SKIP IF DRIVE IS CAPABLE OF A REFORMAT + JMP ERR15 /GO PRINT ILLEGAL TYPE + TAD ROFN /GET FUNCTION BACK + JMS SELECT /ALSO MUST CHECK WHICH PAIR; AC=AC.AND.7776 + TAD (4006 /TURN OFF TOP BIT, MAKE 2 READ INTO 10 REFORMAT + SDN /CONTROLLER READY + JMP .-1 + LCD + STR /WAIT FOR READY TO TAKE CODE + JMP .-1 + TAD (111 /SAFETY CODE + XDR /PLACE TO DRIVE + CLA + SDN /WAIT FOR OVERALL DONE + JMP .-1 /WIGGLE AC TO SHOW LIFE ?? + AC7776 /SET AC TO STRIP WHICH PAIR BIT + SER /SKIP IF AN ERROR DURING FORMAT + CLL /CLEAR LINK TO SHOW NO ERROR + AND ROFN /SET DONE FLAG + TAD (4014 /BY A DUMMY READ ERROR STATUS, FLIPS LINK! + LCD + SNL /SKIP IF REFORMAT HAD NO ERROR + JMP ERR19 /ERROR DURING REFORMAT, FATAL + TAD OPTION /WAS IT A REFORMAT ONLY? + AND (SINGLE+DOUBLE + SNA CLA /SKIP IF YES + JMP DO00 /NO, GO DO OTHER STUFF + JMS QUEST /ASK IF ANOTHER FORMAT OPERATION WANTED + MSG16 + JMP EXITOK /"N" RETURN + JMP REFORM /"Y" RETURN +/ + PAGE +/ + / +/ ACTION ROUTINE ENTRY POINT +/ +/ WATCH IT! WE CALLED WITH CDF POINTING TO BUFFER +/ ALSO CDF IS PLACED IN BFIELD, +/ SO WE CAN DO NO INDIRECTS EXCEPT THRU AUTO INCR TO BUFFER !! +/ +/ RETURN WITH SKIP IF OK, DIRECT RETURN WITH ERROR +/ +/ RESTORES DF TO 10 ON EITHER EXIT +/ +/ DO A SECTOR AT A TIME FOR A SINGLE FUNCTION +/ +ACTION, 0 + AC7775 /-3 ERROR RETRY COUNT + DCA RETRY + TAD FN /SORT FUNCTIONS + SNA + JMP COMPAR /GO DO COMPAR + RTR /READ/WRITE BIT TO LINK + SZL CLA /SKIP IF WRITE + JMP READLP /GO TO READ +/ +/ WRITE LOOP +/ +WRITLP, TAD FN /SET UP SILO OPERATION + JMS LDCMD + JMP WRIT1 /OTHER PAGE TO MOVE DATA TO SILO +WRIT2, JMS DOIO /RETURN FROM OTHER PAGE TO ACCESS I/O + JMP REFILL /COMMON EXIT +/ +/ READ LOOP +/ +READLP, JMS DOIO /COME HERE TO RETRY I/O + TAD FN + JMS LDCMD + TAD COUNT2 /RX01, 32 PASSES THRU 4 BYTES MOVED + DCA RDCNT /RX02, 64 PASSES THRU +ST5, STR + JMP .-1 + XDR + DCA I X10 + STR + JMP .-1 + XDR + DCA I X10 + STR + JMP .-1 + XDR + DCA I X10 + STR + JMP .-1 + XDR + DCA I X10 + ISZ RDCNT + JMP ST5 +REFILL, ISZ ACTION /OK EXIT, ALSO A LITERAL +ACTEND, CDF 10 /DATA FIELD NORMAL AGAIN + JMP I ACTION +/ +/ COMPAR +/ +/ COMPARE THE TWO BUFFERS +/ +COMPAR, TAD REFILL /RESTORE ERROR FLAG TO 'OK' + DCA ZOT + TAD BFIELD /CREATE OTHER FIELD POINTER + TAD COUNT6 + DCA CFIELD + TAD COUNT3 /SET UP LOOP CONTROL + DCA COMCNT +BFIELD, 0 /CDF PLACED HERE + TAD I X10 /COMPARE + CIA +CFIELD, 0 /CDF PLACED HERE + TAD I X11 + SZA CLA /SKIP IF OK + DCA ZOT /NOT OK, MAKE NON-SKIP RETURN!!!! + ISZ COMCNT /THRU? + JMP BFIELD /NO +ZOT, 0 /ISZ ACTION PLACED HERE + JMP ACTEND /RESTORE FIELD, GO BACK +/ +/ +/ DO I/O FUNCTION FOR READ OR WRITE +/ +DOIO, 0 + TAD FN /SILO FUNCTION, CONVERTED TO READ-WRITE + TAD (4 /CONVERT SILO OPERATION TO I/O OPERATION + JMS LDCMD + TAD SECTOR /REQUESTED SECTOR TO HARDWARE + TAD (33 /STORED AS -32 TO -1 + STR + JMP .-1 + XDR + CLA + TAD TRACK + CMA /COMPLEMENT TO PLUS NUMBER + STR + JMP .-1 + XDR + CLL CLA CMA RTL /AC=-3 TO KILL READ-WRITE BIT + AND FN /I/O SKELETON WITHOUT READ-WRITE BIT + TAD (16 /LOAD ERROR STATUS IS GOOD NO-OP + JMS LDCMD + JMP I DOIO +/ +/ LOAD COMMAND REGISTER +/ +RDCNT=. +LDCMD, 0 + DCA CMDTMP /SAVE THE COMMAND + TAD CMDTMP + AND (376 /DOUBLE, KEEP ONLY 8 BITS, SINGLE NEVER HAD THEM + SDN /SKIP ON DONE + JMP .-1 + LCD /PUT THE COMMAND + TAD CMDTMP /CHECKING TOP BIT FOR DOUBLE DRIVE + SMA + JMP CDCK /SINGLE, JUST GO CHECK ERROR + RTL + RTL + RAL + AND (7 /TOP FOUR BITS NOW SENT + STR + JMP .-1 + XDR +CDCK, CLA + SER /SKIP ON ERROR + JMP I LDCMD + ISZ RETRY /TRIED THREE TIMES YET + JMP KEEPON /NO, KEEP ON TRYING + TAD FN /DID WE ERROR OUT OF READ OR WRITE + RTR /READ-WRITE BIT TO LINK + SNL CLA /SKIP IF READ + JMP ACTEND /WRITE IS ALL SET, GO TO ERROR RETURN + TAD COUNT3 /READ MUST ADD APPROPRIATE AMOUNT TO X10 + CIA /SO LOOP CONTROL IN BUMPER WORKS RIGHT! + TAD X10 / + DCA X10 + JMP ACTEND /SET CDF BACK, AND ERROR EXIT +/ +/ ENTRY TO CONTINUE AFTER ERROR +/ +/ +KEEPON, TAD FN /RETRYING READ OR WRITE + RTR /R/W BIT TO LINK + SZL CLA /SKIP ON WRITE + JMP READLP /RETRY A READ + JMP WRIT2 /SO GO RETRY WRITE +/ +COUNT2, 0 /MINUS NUMBER OF READ PASSES PER SECTOR +COUNT3, 0 /MINUS NUMBER OF BYTES (WORDS AS WELL) PER SECTOR +COUNT6, 0 /DELTA FIELDS FOR COMPARE +TRACK, 0 /TRACK NUMBER IN COMPLEMENT FORM FOR ISZ +SECTOR, 0 /SECTOR TO DO, SET BY INTERLEAVE ROUTINE +FN, 0 /FUNCTION BITS: ALWAYS 100 FOR 8BIT MODE +/ /+4000 FOR DOUBLE DRIVE, +1 FOR SECOND PAIR +/ /NOTE, THE 1 IS STRIPPED PRIOR TO CALL TO ACTION +RETRY, 0 /RETRY COUNTER -3 TO 0 +CMDTMP, +COMCNT, 0 /TEMPORARY FOR COMPARE OR I/O +/ + PAGE +/ + / PART OF ACTION ROUTINE +/ +/ FILL SILO FOR WRITE +/ +/ SPREAD OUT TO SPEED UP +/ +/ +/ +WRIT1, TAD COUNT1 /FOR RX01, 8 TIMES THRU 16 BYTE GIVES 128 + DCA WRTCNT /FOR RX02, 16 TIMES THRU FOR 256 +ST4, TAD I X10 /FETCH A BYTE + STR /SKIP IF READY TO TRANSFER + JMP .-1 /NO (SHOULDN'T HIT THIS ON VT78) + XDR /MOVE BYTE TO SILO + CLA /CLEAR THE MUMBLE AC + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + TAD I X10 + STR + JMP .-1 + XDR + CLA + ISZ WRTCNT /THRU WITH SILO? + JMP ST4 /NO + JMP WRIT2 /REST OF LOOP ON OTHER PAGE +/ +WRTCNT, 0 /CONTROL COUNT FOR FILL SILO LOOP +COUNT1, 0 /FILLED AT INIT TIME, WRITE PASSES PER SECTOR! +/ + / +/ SELECT SUBROUTINE +/ +/ CALL WITH AC11=0 TO SELECT FIRST PAIR, AC11=1 TO SELECT SECOND +/ +/ RETURN AC.AND.7776 +/ +/ IF SELECT REQUESTED IS SAME AS LAST SELECT, NO ACTION TAKEN +/ +SELECT, 0 + DCA WRTCNT /CONVENIENT TEMPORARY TO SAVE ARGUMENT + TAD WRTCNT + TAD LSTSEL /IS IT SAME AS LAST TIME + RAR /TEST BIT TO LINK + SNL CLA /SKIP IF DIFFERENT + JMP NOSEL /NO SELECT NEEDED + ISZ LSTSEL /CHANGE TO OTHER TYPE + NOP /MAY INDEED SKIP + CLA IAC + AND LSTSEL /SELECT NEW TYPE + 6750 /SELECT IOT + SER /MUST CLEAR ERROR FLAG, MAY RANDOMLY SET + NOP + SDN /SAME FOR DONE + NOP + STR /AND TRANSFER + NOP + CLA + TAD (16 /DUMMY READ ERROR STATUS TO SET DONE FLAG!! + LCD +NOSEL, AC7776 /RETURN ARGUMENT WITH LOW BIT CLEARED + AND WRTCNT + JMP I SELECT +LSTSEL, 0 /START OFF ON FIRST PAIR +/ + PAGE + + FIELD 0 + *6420 +/ +/ PUT ERROR MESSAGES IN FIELD 0 RIGHT AFTER BUFFER +/ +/ +/ ERROR MESSAGES +/ +VERBUF, "R; "X; "C; "O; "P; "Y; 240; "V; "4; "B; 240; 215; 212; 232 +MSG2, "I; "L; "L; "E; "G; "A; "L; 240; "S; "P; "E; "C; "I; "F; "I + "C; "A; "T; "I; "O; "N; 215; 212; 232 +MSG3, "D; "E; "V; "I; "C; "E; 240; "I; "S; 240; "N; "O; "T; 240 + "R; "X; 215; 212; 232 +MSG5, "N; "O; 240; "I; "N; "P; "U; "T; 240; "D; "E; "V; "I; "C; + "E; 215; 212; 232 +MSG6, "N; "O; 240; "O; "U; "T; "P; "U; "T; 240 + "D; "E; "V; "I; "C; "E; 215; 212; 232 +MSG7, "C; "O; "M; "P; "A; "R; "E; 240 + "E; "R; "R; "O; "R; 232 +MSG8, "I; "N; "P; "U; "T; 240; "D; "E; "V; "I; "C; "E; 240 + "R; "E; "A; "D; 240; "E; "R; "R; "O; "R; 232 +MSG9, "O; "U; "T; "P; "U; "T; 240; "D; "E; "V; "I; "C; "E; 240 + "R; "E; "A; "D; 240; "E; "R; "R; "O; "R; 232 +MSG10, "O; "U; "T; "P; "U; "T; 240; "D; "E; "V; "I; "C; "E; 240 + "W; "R; "I; "T; "E; 240; "E; "R; "R; "O; "R; 232 +MSG11, "I; "S; 240; "M; "O; "N; "I; "T; "O; "R; 240 + "R; "E; "M; "O; "U; "N; "T; "E; "D + "?; 232 +MSG12, "R; "E; "A; "D; "Y; "?; 232 +MSG13, 240; "H; "E; "A; "D; +MSG13A, 0 + 0 + ", + 240; "T; "R; "A; "C; "K; 240 +MSG13B, 0 + 0 + ", + 240; "S; "E; "C; "T; "O; "R; 240 +MSG13C, 0 + 0 + 215; 212; 232 +MSG15, "I; "L; "L; "E; "G; "A; "L; 240; "F; "L; "O; "P; "P; "Y; + 240; "T; "Y; "P; "E; + 215; 212; 232 +MSG16, "F; "O; "R; "M; "A; "T; 240; "A; "N; "O; "T; "H; "E; "R; + 240; "F; "L; "O; "P; "P; "Y; "?; 232 +MSG17, "I; "L; "L; "E; "G; "A; "L; 240; "S; "W; "I; "T; "C; "H; + "(; "E; "S; "); 215; 212; 232 +MSG18, "F; "L; "O; "P; "P; "Y; 240; "N; "O; "T; 240; "R; "E; "A; "D; "Y; + 215; 212; 232 +MSG19, "E; "R; "R; "O; "R; 240; "D; "U; "R; "I; "N; "G; 240; + "F; "O; "R; "M; "A; "T; 215; 212; 232 +$ ADDED src/os8-v3f/RXNS.PA Index: src/os8-v3f/RXNS.PA ================================================================== --- /dev/null +++ src/os8-v3f/RXNS.PA @@ -0,0 +1,426 @@ +/RX NON-SYSTEM HANDLER, GENERAL CONTROLLER TYPE +/FLOPPY DISK HANDLER FOR OS/8 +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1978 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /DEFINITIONS OF RX8/E IOT'S + +RXVER= "N&77 + +DEVCOD= 750 /DEVICECODE + +LCD= 6001+DEVCOD /LOAD COMMAND REGISTER +XDR= 6002+DEVCOD /TRANSFER DATA REGISTER +STR= 6003+DEVCOD /SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG +SER= 6004+DEVCOD /SKIP ON ERROR FLAG, CLEAR FLAG +SDN= 6005+DEVCOD /SKIP ON DONE FLAG, CLEAR FLAG +INTR= 6006+DEVCOD /INTERRUPT ENABLE/DISABLE +INIT= 6007+DEVCOD /INITIALIZE CONTROLLER AND RECALIBRATE DRIVES + + +/NOTES ON THIS HANDLER: + +/THIS HANDLER READS AND WRITES THE DISK IN "12-BIT" MODE, IN WHICH +/ONLY 6 BITS OF EVERY 8-BIT BYTE ARE USED. AN RX01 CARTRIDGE +/CONTAINS 494 OS/8 BLOCKS UNDER THIS METHOD + +/TO MAXIMIZE SPEED ON THE DEVICE, THE HANDLER READS AND WRITES RX01 DATA +/ON A TRACK WITH A TWO-WAY INTERLEAVE - I.E. RECORDS 1-26 ON A TRACK +/ARE WRITTEN IN THE SEQUENCE: +/ 1,3,5,7,9,11,13,15,17,19,21,23,25,2,4,6,8,10,12,14,16,18,20,22,24,26 + +/DOUBLE DENSITY MEDIA ARE WRITTEN IN A THREE WAY INTERLEAVE +/ 1,4,7,10,13,16,19,22,25,2,5,8,11,14,17,20,23,26,3,6,9,12,15,18,21,24 + +/TRACK-SECTOR COMPUTATION IS DONE I/O TO/FROM THE SILO + +AC4000=CLL CLA CML RAR /SET AC TO 4000 +AC7776=CLL CLA CMA RAL /SET AC TO 7776 +AC0002=CLL CLA CML RTL /SET AC TO 0002 +AC7775=CLL CLA CMA RTL /SET AC TO 7775 + / +/BUILD DATA + *0 +/ + -2 /TWO ENTRY POINTS + DEVICE RX02 /DEVICE GROUP NAME + DEVICE RXA0 /ENTRY POINT NAME + 4320 /CODE FOR MULTI-RX /CHANGED TO 32 + RXA0&177+4000 /ENTRY POINT OFFSET + 0 + 0 + DEVICE RX02 /DEVICE GROUP NAME + DEVICE RXA1 /ENTRY POINT NAME + 4320 /THIS IS CHANGED TO 32 FROM 27 AS IT WAS CASSETTE + RXA1&177+4000 /ENTRY POINT OFFSET + 0 + 0 + *200 +/ +/ +/ INIT CODE +/ +POINT, HLT /ADDR OF SECOND PAGE AT INIT TIME +UNIT, JMS I POINT /GO TO SECOND PAGE TO INIT +/ +/ LIST OF VECTORS TO SECOND PAGE +/ +LQUO, QUO-. /LQUO MUST LEAD OFF LIST +LRETRY, RETRY-. +LREC, REC-. +LSIZE, SIZE-. +LREMD, REMD-. +LFN, FN-. +LDENSW, DENSW-. +LENTRY, ENTRY-. +VCOUNT=LQUO-. /FALLS THRU TO WHICH, HERE IS VECTOR COUNT +/ +/ COME HERE FROM ZOO +/ +/ PROCESS ENTRY POINT, DEVICE TYPE +/ +WHICH, AC7775 /SET RETRY COUNTER + DCA I LRETRY + TAD I ZOO /GET UNIT NUMBER*20+402 + DCA UNIT /HOLD FOR LATER + ISZ ZOO /MOVE TO TYPE CODE + TAD I ZOO /HAS THIS DRIVE BEED INIT'ED +L7700, SMA CLA /SKIP IF NO + JMP NORMAL /GO TO NORMAL PATH +RSTART, TAD UNIT /PICK UP UNIT BIT, DOUBLE DENSITY +2 + TAD L10 /MAKE A READ STATUS CODE + SDN + JMP .-1 + LCD + SDN + JMP .-1 + JMP BOUNCE /HOP OVER ENTRY POINT + / +/ + IFZERO .&177-33&4000 <_ERROR_> +/ +/ ENTRY POINTS ARE AT 32, 36 +/ + *.&7600+32 +/ +RXA0, 0 + JMS ZOO /COMMON ENTRY ROUTINE + 402 /UNIT 0, 402 FOR CONVENIENCE + -1 /MINUS SAYS STILL HAVE TO INIT IT; +/ /SINGLE=0, DOUBLE=20, QUAD=22 +RXA1, 0 + JMS ZOO +L422, 422 /20 SAYS UNIT 1, 402 FOR CONVENIENCE +DOOR, JMP WHICH /INIT TIME LITERAL (MUST BE MINUS) +/ /GETS SAME TYPE CODE AS OTHER ENTRY POINT +/ +/ REST OF SET UP CODE +/ +BOUNCE, XDR /GET STATUS WORD + AND L32 /KEEP DENSITY ERROR; DOUBLE; QUAD + TAD L10 /SINGLE=10;SING/DOUB=40;DOUB=20;QUAD=22 + AND L422 /SINGLE=0;SING/DOUB=0;DOUB=20;QUAD=22 + DCA I ZOO /PLACE TYPE CODE + SER /CLEAR ERROR FLAG +L10, 10 /MAY SKIP + TAD L416 /SET DONE FLAG AGAIN + LCD +NORMAL, TAD I ZOO /FETCH BACK TYPE CODE + SZA CLA /SKIP IF A SINGLE DENSITY + TAD L7700 /DOUBLE + TAD L7700 /SINGLE=7700, DOUBLE=7600 + DCA I LDENSW /PLACE FOR LOOP CONTROL + TAD I ZOO + CLL RTR /PUT QUAD BIT TO LINK + SNA CLA /SKIP IF DOUBLE OR QUAD + TAD L1734 /SINGLE + TAD L4110 /D&Q=4110, S=6044 + SNL /SKIP ON QUAD, IT'S OK RIGHT NOW + CLL CML RAR /SINGLE AND DOUBLE DIVIDE BY 2 + DCA I LSIZE /S=7022, D=6044, Q=4110 + TAD I LDENSW /7700 IF SINGLE, 7600 IF DOUBLE + CLL CMA RTL /375 IF SINGLE, 775 IF DOUBLE + AND UNIT /VOILA, 400*DOUBLE + 20*UNIT + DCA I LFN /PLACE INTO FUNCTION CONTROL WORD + AC7775 /BACK UP ZOO TO FETCH CALLING ADDR + TAD ZOO + DCA T1 /HOLD TEMPORARY + TAD I T1 /HERE IS CALLING ADDR +CLLFLD, HLT /PUT CDF TO CALLING FIELD HERE + JMS I LENTRY /GO TO SECOND PAGE, LEAVING POINTER TO DIVSUB +/ +/ DIVSUB SUBROUTINE !!MUST!! FOLLOW IMMEDIATELY +/ + / +/ DIVSUB +/ +/ CALL TO SET UP TRACK, SECTOR, FROM OVERALL SECTOR # +/ ALSO, SET UNIT WITH HEAD COMMAND IF WE ARE ON TO SECOND SIDE +/ +/ CALL WITH AC <0 IF IT IS REALLY AN ERROR RETRY +/ CALL WITH AC >=0 IF CALL TO DIVSUB +/ +DIVSUB, 0 + CDF 0 /AND DATA FIELD MUST BE TO HERE + SPA CLA /SKIP IF REALLY A DIVIDE REQUEST + JMP RSTART /NO, IT WAS AN ERROR RETRY!! + DCA I LQUO /CLEAR DIVIDE QUOTIENT + TAD I ZOO /IS IT A TWO HEADER + RTR /PUT QUAD BIT TO LINK + SNL CLA /SKIP IF YES + JMP SHUNT /NO, GO DO DIVIDE + TAD I LREC /WHICH RECORD ARE WE WORKING ON + TAD LM3670 /NUMBER OF SECTORS ON FIRST SIDE + SZL CLA /SKIP IF SECOND SIDED IT + JMP SHUNT /NO, JUST REGULAR + TAD I LFN /FORCE HEAD BIT ON + AND L422 /KEEP DOUBLE, UNIT, READ-WRITE + TAD L1000 /ADD IN SECOND SIDE + DCA I LFN + TAD LM3670 /BUT DECREASE RECORD NUMBER +SHUNT, TAD I LREC /THIS FOR TRACK-SECTOR +DIVLOO, ISZ I LQUO /MAIN DIIVIDIE LOOP + TAD LM32 /DIVIDE BY 26 TO GET TRACK + SMA /SKIP IF DONE + JMP DIVLOO + TAD L32 /REMAINDER 0-25 + DCA T1 /HOLD IT IN TEMPORARY + TAD I ZOO /SINGLE DENSITY + SZA CLA /SKIP IF YES + TAD T1 /MULTIPLY BY THREE FOR DOUBLE + TAD T1 /AND BY TWO FOR SINGLE + TAD T1 + CLL IAC /LINK CLEAR FOR FINAL TEST; +1 TO START AT 1 NOT 0 + TAD LM32 /DIVIDE BY 26 TO GET SECTOR + SMA SZA /SKIP IF DONE + JMP .-2 + TAD L32 /RESTORE POSITIVE VALUE TO BE SECTOR + DCA I LREMD /WHEW, BUT WATCH IT, A FINAL CORRECTION COMING! + RAL /IF LINK=0 AND SINGLE: 2,4,6,8,10,12,14,16... SERIES + TAD I ZOO /BUT WE HAVE 1,3,5,7,9,11,13,15... SO WE MUST INCREMENT! + SNA CLA /SKIP IF SOME OTHER CASE + ISZ I LREMD /NOW HAVE IT 2,4,6,8,10,12,14,16... + JMP I DIVSUB /OUT + / +/ +L416, 416 /SOME LITERALS +L1000, 1000 +L32, 32 +LM32, -32 +L1734, 1734 +L4110, +LM3670, -3670 +/ +/ +/ + *.&7600+167 /FORCE TO END OF PAGE +/ ZOO SUBROUTINE +/ +/ TO SET UP ENTRY POINT PROCESSING, AND INIT CODE +/ +ZOO, 0 /ADDR OF 'HIT' ENTRY POINT +2 COMES HERE + CLA /FOR SAFETY + RDF /SAVE CALLERS FIELD SETTING + TAD LCDF0 /ADD IN CDF 0 + DCA CLLFLD /RESET WHEN GOING TO I/O SUB +LCDF0, CDF 0 /DATA FIELD HERE FOR INDIRECTS +CLOSE, TAD DOOR /CLOSE DOOR TO ONCE ONLY CODE (JMP WHICH +T1, DCA CLOSE /USE ONCE-ONLY FOR TEMPORARY LOCATION + JMS POINT /LEAVE ADDR OF SECOND PAGE + / +/ +/ VARIABLES, ALSO INIT CODE LIVES HERE +/ +/ +BUF, 0 /POINTER TO CALLER'S BUFFER +RETRY, 0 /RETRY COUNT +SIZE, 0 /SIZE OF DEVICE +SYS, 0 /POINTER TO CALL +QUO, 0 /DIVIDE QUOTIENT, WHICH IS TRACK NUMBER +REC, 0 /SECTOR NUMBER OF FLOPPY +BC, 0 /CONTROL COUNT, WORDS TO TRANSFER +FN, 0 /0 FOR WRITE; 2 FOR READ; HEAD, DENSITY, UNIT +DENSW, 0 /7700 IF SINGLE DENSITY, 7600 IF DOUBLE DENSITY +ENTRY, 0 /ENTRY POINT, LEAVE ADDR OF DIVSUB HERE +/ + IFNZRO .&177-10&4000 <_ERROR> /ENOUGH ROOM FOR INIT? +/ + *.&7600 +/ +/ INIT TIME: FILL VECTOR TABLE +/ +THERE, 0 /FILLED BY JMS, POINTS TO VECTOR +ILOOP, TAD THERE /POINTER IS ALSO OFFSET! + TAD I THERE /MAKING VECTOR + DCA I THERE + ISZ THERE /MOVE TO NEXT VECTOR + ISZ LDCMD /CONTROL COUNT ON THIS PAGE + JMP ILOOP + JMP I THERE /BACK TO FIRST PAGE + / +/ IO SUBROUTINE +/ +/ ENTRY POINT AT END OF LAST LISTING PAGE +/ +/ + *ENTRY+1 /RESUME RUNTIME CODE +/ + DCA SYS /POINTER TO ARG'S, EXIT + RDF /DATA FIELD OF USER CALL + TAD (CDF CIF 0 /MAKE CDF CIF TO CALLER'S FIELD + DCA EXFLD /SET UP FOR CALL + AC4000 /SET LINK=0, AC=4000 + TAD I SYS /CARRY READ-WRITE BIT TO LINK + AND (70 /KEEP FIELD FOR BUFFER + TAD LLCDF0 /MAKE CDF TO BUFFER FIELD + DCA BUFCDF /PLACE INTO I/O LOOP + CML RTL /MAKE FUNCTION CODE, 0=WRITE, 2=READ + TAD FN /START-UP CODE HAS SET HEAD, DENSITY, UNIT ETC. + DCA FN + TAD I SYS /MAKE LOOP CONTROL COUNT + RAL + AND L7600 + CIA /0 FOR WHOLE FIELD + DCA BC /MINUS TOTAL NUMBER OF WORDS + ISZ SYS /NEXT + TAD I SYS /IS BUFFER ADDRESS + DCA BUF + ISZ SYS /NEXT + TAD (175 /CARRY WITH DENSW IF SINGLE DENSITY + TAD DENSW /BLOCK # TO SECTOR # + SMA CLA /SKIP IF DOUBLE, MULTIPLY BY 2 + TAD I SYS /SINGLE, MULTIPLY BY FOUR + SMA /NEGATIVE BLOCK # ERROR, FORCE LINK TO BE ON + TAD I SYS + ISZ SYS /MOVE POINTER TO ERROR EXIT + CLL RAL + DCA REC /SAVE SECTOR NUMBER + SZL /SKIP IF LEGAL BLOCK # + JMP ERREX /FORCE DISK SIZE TO BE SET UP BEFORE EXIT! + JMS I ENTRY /CALL DIVISION SUBROUTINE OTHER PAGE + TAD FN /SPLIT READ AND WRITE + RTR /READ-WRITE BIT TO LINK + SZL CLA /WRITE SKIPS + JMP STREAD /READ GOES TO START IN MIDDLE OF LOOP +/ /WRITE FALLS THRU TO NEXT LISTING PAGE + /WRITE FALLS THRU TO THIS LOOP +/ +/ TOP OF MAIN LOOP +/ +TOP, TAD FN /SET SILO TO LOAD-UNLOAD + JMS LDCMD /COMMAND TO CONTROLLER + TAD DENSW /MAKE SILO LOOP COUNT, S=7700, D=7600 + DCA FLPWC /LDCMD ENTRY SAFE TEMPORARY +BUFCDF, HLT /CDF TO BUFFER FIELD PLACED HERE +TRLOOP, TAD I BUF /IN CASE WRITE, FETCH A WORD + STR /SKIP IF READY TO PASS DATA + JMP .-1 /NO + XDR /TO OR FROM AC + DCA I BUF /PLACE WORD FOR READ, WRITE REPLACES SAME + ISZ BUF /MOVE BUFFER POINTER, (MAY SKIP) +REMD, 0 /DIVIDE REMAINDER, WHICH IS SECTOR NUMBER + ISZ FLPWC /DONE YET + JMP TRLOOP + TAD DENSW /ADDING 77 (SINGLE) 177 (DOUBLE) + CMA /ONCE WE CMA, THAT IS + TAD BC /LOOP CONTROL TO FINISH READ + SNA + JMP OKEX /OK, DONE + DCA BC /REPLACE AND KEEP GOING +/ +/ MIDDLE OF MAIN LOOP +/ +STREAD, TAD FN /READ STARTS HERE + TAD (4 /TURN SILO COMMAND INTO READ-WRITE COMMAND + JMS LDCMD /I/O COMMAND TO CONTROLLER + TAD REMD /PRECOMPUTED SECTOR # + STR + JMP .-1 + XDR +L7600, 7600 /CLEAR AC, AND IS LITERAL + TAD QUO /TRACK # + STR + JMP .-1 + XDR /TRACK # IS ALWAYS NON0 !! + ISZ REC /MOVE TO NEXT RECORD NUMBER + JMS I ENTRY /DO TRACK SECTOR FOR NEXT OPERATION + TAD (16 /WAIT FOR OPERATION TO COMPLETE + JMS LDCMD + ISZ BC /CHECK FOR WRITE EXIT + JMP TOP /STILL MORE +OKEX, ISZ SYS /KICK TO OK EXIT +EXFLD, HLT /CDF CIF TO CALLER + JMP I SYS /OUT + / +/ +/ LDCMD SUBROUTINE +/ +/ CHECK FOR CONTROL C, LOAD A COMMAND +/ +FLPWC=. /ENTRY POINT A TEMPORARY +LDCMD, VCOUNT /INIT COUNTER + DCA TRANS /SAVE COMMAND +LLCDF0, CDF 0 /DATA FIELD HERE IN CASE CONTROL C TO MONITOR +TSTTT, KSF /SKIP IF A TTY CHARACTER HAS HAPPENED + JMP TSTSD /NOPE, GO CHECK RX CONTROLLER READY + TAD L7600 /FORCE TOP BITS TO BE 1 TO ELIMINATE 3,203 + KRS /AMBIGUITY ON TEST + TAD (175 /IS IT A CONTROL C + SNA CLA /SKIP IF NOT + JMP I L7600 /EXIT TO MONITOR +TSTSD, SDN /IS RX CONTROLLER READY + JMP TSTTT /NOPE, GO CHECK TTY + TAD TRANS /GET BACK COMMAND + LCD /TO CONTROLLER + SER /SKIP IF AN ERROR + JMP I LDCMD + AC4000 /AC CODE FOR EXIT, ALSO TO TELL DIVSUB WE'RE A RETRY! + SKP +ERREX, TAD SIZE /BLOCK TOO LARGE ENTRY, SET AC CODE + ISZ RETRY /TRY THREE TIMES? + JMS I ENTRY /NO, AC ZERO SAYS RETRY NOT DIVIDE!! + JMP EXFLD /BACK TO CALLER +/ +TRANS, 0 /TEMPORARY FOR LDCMD TO SAVE COMMAND +/ + PAGE +/ ADDED src/os8-v3f/RXSY1.PA Index: src/os8-v3f/RXSY1.PA ================================================================== --- /dev/null +++ src/os8-v3f/RXSY1.PA @@ -0,0 +1,529 @@ +/RX01 (RX02) SYSTEM HANDLER +/ +/ THIS HANDLER WAS DESIGNED TO WORK WITH RX01, RX02, RX03 +/ +/ HOWEVER, ONE SINGLE BINARY CANNOT SUCCESSFULLY BE USED IN A +/ VIRGIN BUILD FOR ALL THREE DEVICES. IT IS CURRENTLY SET UP +/ TO BUILD AN RX02. +/ TO GENERATE A BINARY TO BUILD AN RX01, CHANGE THE RXTYP +/ EQUATE TO 1. FOR AN RX03 BUILD, CHANGE RXTYP TO 3. +/ +RXTYP=1 /THIS IS THE SINGLE DENSITY TWO PAGE HANDLER +/ +/ +/ +VERSION="M&77 +/ +/ +AC1=CLL CLA IAC +AC2=CLL CLA CML RTL +AC6=CLL CLA CML IAC RTL /RX02'S MUST RUN ON AN OMNI-BUS !! +AC4000=CLL CLA CML RAR +AC3777=CLL CLA CMA RAR +AC7775=CLL CLA CMA RTL +/ +/ DEVICE IOT SYMBOLIC EQUATES +/ +LCD=6751 /LOAD COMMAND +XDR=6752 /TRANSFER DATA +STR=6753 /SKIP IF READY TO TRANSFER +SER=6754 /SKIP ON ERROR +SDN=6755 /SKIP ON DONE +/ +/ HEADER BLOCK FOR BUILD +/ + *0 + -1 /ONE ENTRY + DEVICE RX8E + DEVICE SYS + 4320 /MULTI-TYPE RX HANDLER ----- CHANGED FROM 4270 + SYS&177+6000 /TWO PAGE HANDLER + 0 /UNUSED + IFZERO RXTYP-1 <756> /SIZE FOR BUILD + IFZERO RXTYP-2 <1734> + IFZERO RXTYP-3 <3670> +/ + STBOOT-NDBOOT+12 /-SIZE (+12 FOR GAP) + / +/ HERE IS A LISTING OF THE PRIMARY BOOT FOR CONVENIENCE +/ + NOPUNCH +/ + *20 +/ +READ, TAD UNIT /TRY NEXT COMBINATION OF DENSITY AND UNIT + TAD CON360 /ADDING IN 360 + AND CON420 /KEEPING ONLY 420 BITS + DCA UNIT /CYCLES 400,420,0,20,400,,,,,,,, + AC6 /COMMAND TO READ DISK + TAD UNIT /UNIT AND DENSITY + LCD /COMMAND TO CONTROLLER + AC1 /TO SET SECTOR AND TRACK TO 1 + JMS LOAD /SECTOR TO CONTROLLER, LEAVES AC ALONE + JMS LOAD /AND TRACK +LITRAL, 7004 /LEAVING A 2 IN AC; SERVES AS LITERAL +/ +/ FOLLOWING IS PART OF WAIT LOOP, SAME SECONDARY BOOTS, OLD PRIMARY BOOT +/ +START, SDN /HAS DONE COME UP; CODE STARTS HERE! + JMP LOAD+1 /NO, GO CHECK FOR READY TO TRANSFER +/ +/ NOW, DONE OR ERROR +/ + SER /SKIP ON AN ERROR, TRY ANOTHER DENSITY ETC. + SNA /NASTY, AC=2 FOR ABOUT TO DO SILO, 0 ON START-UP + JMP READ /START-UP, GO SET UP UNIT, THEN READ TO SILO + TAD UNIT /AC ALREADY 2, PUT IN UNIT, DENSITY + LCD /TO EMPTY THE SILO + TAD UNIT /SET UP LOC 60 FOR OLD SECONDARY BOOT + AND CON360 /KEEPING UNLY DENSITY BIT + TAD LITRAL /ADDING IN 7004, BECAUSE THAT'S WHAT SYS WANTS + DCA RX1SAV /OLD SECONDARY BOOT MOVES IT TO HANDLER +CON360, 360 /LITERAL; EXECUTES IN LINE AS A NO-OP +/ /FALLS THRU TO NEXT PAGE OF LISTING +/ + / +/ FOLLOWING CODE SAME AS OLD PRIMARY BOOT +/ + JMS LOAD /GRAB NEXT ITEM FROM SILO + DCA 2 /TRADITION; SECONDARY BOOT STARTS LOADING AT 2 ! + ISZ 50 /INCREMENT LOAD ADDRESS + JMP 47 /GO BACK FOR ANOTHER +/ +/ SECONDARY BOOT LOADS OVER PRIMARY BOOT UNIT LOCATION 47 IS LOADED, +/ THEN CONTROL PASSES TO SECONDARY BOOT +/ +LOAD, 0 /SUBROUTINE TO GIVE AND TAKE DATA FROM CONTROLLER + STR /IS HE READY TO TALK TO US? + JMP START /NO, IS HE PERHAPS DONE WITH SILO, OR IN ERROR? + XDR /YES, DATA IN OR OUT;IF DATA TO CONTROLLER, AC UNCHANGED + JMP I LOAD /NO MAGIC, JUST EXIT FROM SUBROUTINE +/ +/ 60 GOES TO OLD SECONDARY BOOT +/ 61 HAS DENSITY AND UNIT THAT BOOTED SUCCESSFULLY +/ +/ +CON420, /USE IT TO HOLD 420 LITERAL TO START OUT +RX1SAV, 420 /UNIT^20+7004 TO GO TO SYS HANDLER +UNIT, 20 /+ THAT BOOTED OK +/ + ENPUNCH +/ + / ## SECONDARY BOOT ## +/ + RELOC 2 /SECTION LOADING OVER PRIMARY BOOT 2 - 47 +/ +STBOOT=. +/ +/ ONCE-ONLY CODE AFTER FIRST SECTOR IS TRANSFERED +/ +ONCE, TAD XR /SINGLE=113, DOUBLE=213 + CLL RAR /SINGLE=45, DOUBLE=105 + TAD YR /SETTING UP POINTER TO SECTOR, TRACK, FIELD, ADDR DATA + DCA YR /DAT01-1 OR DAT02-1 + TAD I YR /GETTING SINGLE=774, DOUBLE=1374 (IN CASE OLD + TAD RX1SAV /ADD IN 20^UNIT+7004 PRIMARY BOOT) + DCA UNIT /PUT INTO 61: + + JMS NEXSEC /DESTROY LINKAGE TO ONCE ONLY CODE! +XTRA, 0 /EXTRA TO MAKE ALL FIT +/ +/ +/ AUTO INCREMENT REGISTERS +/ +XR, 61 /CONTINUE TO LOAD FIRST SECTOR AT 62 +YR, DAT01-45-1 /SET UP POINTER TO DATA AREA +/ +/ SECTOR DONE, SET UP FOR NEXT +/ +NEXSEC, JMP ONCE /END OF FIRST SECTOR, DO SET-UP CODE + CDF 0 /DATA FIELD HERE TO USE AUTO INCR REGISTERS + TAD I YR /GET DATA FIELD FOR PLACEMENT OF NEXT SECTOR + SMA /SKIP IF MORE TO DO + JMP EBOOT /END OF BOOT, + DCA XFIELD /PLACE IN LINE TO SET DATA FIELD + AC6 /GET AC OF 6 TO SET UP FLOPPY READ + TAD UNIT /DENSITY AND UNIT NUMBER + LCD + TAD I YR /SECTOR FOR NEXT READ + JMS LOAD /LOAD LEAVES AC ALONE + TAD I YR /TRACK-SECTOR FOR NEXT READ + JMS LOAD /LOAD REMAINS FROM PRIMARY BOOT + TAD I YR /ADDRESS-TRACK-1 FOR NEXT READ +/ /FALL TO HANGGG WITH AC NON0 TO SHOW READ +/ + / FOLLOWING TWO LOCATIONS MUST MATCH PRIMARY BOOT +/ +HANGGG, SDN /SKIP IF DONE + JMP LOAD+1 /NO, GO CHECK FOR TRANSFER READY +/ +/ SORT OUT ERROR, SILO DONE, READ DONE +/ + SER /SKIP IF ERROR + SKP /IS GOOD, CHECK WHETHER READ OR SILO + HLT /ANY ERROR IS FATAL!! + SNA /SKIP IF READY TO SILO (AC HAS LOAD ADDR) + JMP NEXSEC /DONE WITH SILO (AC=0) GO TO NEXT SECTOR + DCA XR /USE AUTO-INCR TO LOAD CORE + JMP OVRFLW /GO TO LOCATIONS NOT FITTING UNDER 47 +/ +/ CODE TO EMPTY THE SILO TO CORE +/ +XFIELD, CDF 0 /FIELD FOR TRANSFER PLACED HERE + JMS LOAD /LOAD REMAINS FROM PRIMARY BOOT + DCA I XR /PLACE NEXT WORD + JMP XFIELD /WHEN THIS LOCATION IS PLACED, SECONDARY BOOT +/ /TAKES CONTROL, CONTINUE FIRST SECTOR AT 62 +/ +/ PRIMARY BOOT LOCATIONS 50-61 REMAIN INTACT +/ +STATUS=. /REUSE FOR TEMPORARY +/ +/ ## REST OF SECONDARY BOOT ## +/ + RELOC 62 /SECTION LOADING 62 - 213 +/ +/ LOCATIONS NOT FITTING WITHIN 2-47 SPACE +/ +OVRFLW, XDR /FETCH READ STATUS FOR LATER + DCA STATUS /TO FIGURE OUT IF A DOUBLE SIDED FLOPPY + AC2 /CODE FOR SILO OPERATION + TAD UNIT /UNIT AND DENSITY + LCD /SET TO EMPTY SILO + JMP XFIELD /GO TO SILO UNLOADING LOOP +/ +/ + / +/ SINGLE DENSITY LOADING DATA +/ +DAT01, 774 /CANCEL OUT 7004 WHEN ADDED TO 70X4 + CDF 0 /2ND SECTOR FOR SINGLE DENSITY, FIELD 0 + 3 /SECTOR 3, INTERLEAVED AT 2 + 1-3 /TRACK 1 (MINUS SECTOR 3) + 114-1-1 /2 THRU 47 + 62 THRU 113 FOR FIRST SECTOR +/ /-1 FOR TRACK, -1 FOR AUTO INCR + CDF 0 /3RD SECTOR TO 7600 FIELD 0 + 5 + 1-5 + 7600-1-1 + CDF 0 /4TH SECTOR, SECOND HALF OF PAGE + 7 + 1-7 + 7700-1-1 + CDF 10 /5TH SECTOR, TOP OF FIELD 1 + 21 /SECTOR 21 + 11-21 /OF TRACK 11 + 7600-11-1 /TO 7600 + CDF 10 /6TH SECTOR, REST OF FIELD 1 + 23 + 11-23 + 7700-11-1 + CDF 20 /7TH SECTOR, TOP OF FIELD 2 + 25 + 11-25 + 7600-11-1 + CDF 20 /10TH SECTOR, REST OF FIELD 2 + 27 + 11-27 + 7700-11-1 + 16 /MARKER AND LITERALS TO MAKE DAT02=DAT01+40 +MAGIC, 7623 /THIS WORD IN HANDLER HAS DENSITY, UNIT WORD +L7605, 7605 /STARTING ADDR FOR HANDLER +/ +/ DOUBLE DENSITY LOADING DATA +/ +DAT02, 1374 /MAKE 400+UNIT WHEN ADDED TO 70X4 + CDF 0 /2ND SECTOR TO 7600 + 4 /INTERLEAVE OF 3 + 1-4 + 7600-1-1 + CDF 10 + 15 + 5-15 + 7600-5-1 + CDF 20 /3RD SECTOR TO 7600 OF FIELD 2 + 20 /SECOND HALF OF BLOCK 66 OCTAL + 5-20 /ON TRACK 5 + 7600-5-1 + 16 /MARKER TO STOP WHOLE THING, ALSO LITERAL 16 + / +/ I/O DONE, GO TO HANDLER +/ +EBOOT, TAD UNIT /ENTER WITH AC=16 + LCD /SET DONE FLAG FOR HANDLER + TAD STATUS /FIND OUT IF DOUBLE SIDED DISK + RTR /DOUBLE SIDED BIT TO LINK + CLA RAR /DOUBLE SIDED BIT TO AC0 + TAD UNIT /REST OF CONTROL WORD + DCA I MAGIC /TO 7623 OF SYSTEM HANDLER + JMP I L7605 /TO START UP SYSTEM +/ +NDBOOT=. +/ + / CODE THAT IS LOCATION SPECIFIC HAS !! IN COMMENTS +/ +/ ## CODE FOR SYSTEM HANDLER ## +/ + RELOC + *200 + RELOC 7600 +/ +/ /USE DATA BREAKS FOR TEMPORARIES +/ +QUO=7750 /QUOTIENT FOR DIVIDE == TRACK +REMD=7751 /REMAINDER FOR DIVIDE == SECTOR +REC=7752 /CURRENT LOGICAL SECTOR NUMBER +RETRY=7753 /RETRIES COUNT +/ + ZBLOCK 7 /REQUIRED BY BUILD +/ +/ +/ ENTRY POINT +/ +SYS, VERSION +L32, 32 /FALL THRU SOME LITERALS +L1734, 1734 /WHICH MAY PUT STRAY STUFF IN AC + 3 /!!REQUIRED AT 7612!! TO SHOW OS8 TWO PAGE HANDLER + AC7775 /SET UP RETRY COUNTER + DCA RETRY /RETRIES ARE OVER ENTIRE OPERATION + RDF /GRAB CALLER'S FIELD + TAD LLCDF0 /MAKE CDF TO IT + DCA RESTOR /PUT IT BACK, GOING TO I/O ROUTINE ON PAGE 2 +IOTYP, JMP FIRST /GO TO ONCE ONLY CODE, LATER USED AS VARIABLE +/ /HAS HEAD, DENSITY, UNIT FOR I/O REQUEST + JMP RSTART /GO CALL SECOND PAGE, IOTYP FALLS THRU TO HERE +/ +/ LITERALS ETC. +/ +L5000, 5000 / +BOOTYP, /!!MUST BE AT 7623!! SECONDARY BOOT PUTS AT BOOT TIME +/ /4000 IF QUAD, 400 IF DOUBLE, AND 20 IF UNIT 1 + IFZERO RXTYP-1 <0> /INITIAL VALUE MATCHES DEVICE TO ALLOW + IFZERO RXTYP-2 <400> /BUILD ONTO VIRGIN MEDIA + IFZERO RXTYP-3 <4400> /OTHERWISE, SECONDARY BOOT PUTS IN RIGHT STUFF +LDENSW, DENSW /LOCATION ON SECOND PAGE +L4110, +LM3670, 4110 /VALUE WITH TWO USES +LM32, -32 +LLCDF0, CDF 0 + / +/ ONCE ONLY CODE +/ +FIRST, JMP MORE /LEAVING ADDITIONAL ONCE-ONLY SPACE +/ +/ FIX CDF TO 7642 +/ + *7642 /!!CDF OR CIF MUST BE AT 7642!! +MORE, CDF 20 /POINT TO OUR SECOND PAGE + TAD BOOTYP /PICK UP BOOT WORD +SNGDBL, CLL RAL /MAKE A WORD MINUS IF DOUBLE (OR QUAD) BOOTED +SIZE, RTL /REUSE FOR CONSTANTS + DCA SNGDBL /JUST FOR CONVENIENCE, THE BIT IS IN BOOTYP ANYHOW + TAD QL3400 /ANY LITERAL IN RANGE 3400-3757 (LINK=0 HERE) + TAD BOOTYP /FIGURE OUT SIZE OF MEDIA + SMA SNL CLA /SKIP IF DOUBLE OR QUAD + TAD L1734 /SINGLE + TAD L4110 /S=6044, D&Q=4110 + SNL /SKIP IF QUAD, ITS SIZE ALREADY THERE + CLL CML RAR /OTHER TWO CASES DIVIDE BY TWO + DCA SIZE /STORE S=7022, D=6044, Q=4110 + TAD SNGDBL /MAKE DENSW, 7600 IF DOUBLE, 7700 IF SINGLE + SPA CLA /SKIP IF SINGLE + TAD L7700 + TAD L7700 +QL3400, DCA I LDENSW /MUST LIVE ON SECOND PAGE +/ +/ END OF ONCE-ONLY, (RE)START I/O OPERATION +/ +RSTART, /AC MAY HAVE JUNK COMING IN!! + AC3777 /MAKE A WORD WITH DENSITY AND UNIT BITS ONLY + AND BOOTYP /FOR CONTRUCTING LCD ARGUMENTS + DCA IOTYP /ALSO SHUTS OFF PATH TO ONCE-ONLY CODE! + TAD SYS /AC HAS THE CALL ADDR +RESTOR, HLT /SET DATA FIELD TO THAT OF CALLER + CIF 20 + JMP PAGE2 + / +/ +/ CALL WITH AC NON0 TO DO DIVIDE +/ CALL WITH AC ZERO TO DO I/O RETRY (WHOLE OPERATION) +/ +DIVSUB, 0 + SNA CLA /SKIP IF REALLY A DIVIDE REQUEST + JMP RSTART /NO, IT WAS AN ERROR RETRY!! + DCA QUO /CLEAR DIVIDE QUOTIENT + TAD BOOTYP /IS IT A TWO HEADER + SKP /!!FAULTY USR CALL DOES JMS HERE (7700) + HLT /HALT OUT SUCH AN OCCURRENCE!! +L7700, SMA CLA /SKIP IF YES + JMP SHUNT /NO, GO DO DIVIDE + CLL /TO CHECK 12 BIT SIZE + TAD REC /WHICH RECORD ARE WE WORKING ON + TAD LM3670 /NUMBER OF SECTORS ON FIRST SIDE + SNL CLA /SKIP IF SECOND SIDED IT + JMP SHUNT /NO, JUST REGULAR + TAD BOOTYP /MAKE IO FUNCTION WORD WITH SECOND HEAD BIT + TAD L5000 /CONVERTS TO 20^UNIT +1400 + DCA IOTYP + TAD LM3670 /BUT DECREASE RECORD NUMBER +SHUNT, TAD REC /THIS FOR TRACK-SECTOR +DIVLOO, ISZ QUO /MAIN DIVIDE LOOP + TAD LM32 /DIVIDE BY 26 TO GET TRACK + SMA /SKIP IF DONE + JMP DIVLOO + TAD L32 /REMAINDER 0-25 + DCA REMD /USE AS TEMPORARY UNTIL FINAL VALUE + TAD SNGDBL /FIND OUT IF SINGLE BOOT + SPA CLA /SKIP IF YES + TAD REMD /MULTIPLY BY THREE FOR DOUBLE + TAD REMD /AND BY TWO FOR SINGLE + TAD REMD + CLL IAC /LINK CLEAR FOR FINAL TEST; +1 TO START AT 1 NOT 0 + TAD LM32 /DIVIDE BY 26 TO GET SECTOR + SMA SZA /SKIP IF DONE + JMP .-2 + TAD L32 /RESTORE POSITIVE VALUE TO BE SECTOR + DCA REMD /WHEW, BUT WATCH IT, A FINAL CORRECTION COMING! + TAD SNGDBL /IF LINK=0 AND SINGLE: 2,4,6,8,10,12,14,16... SERIES + SMA SNL CLA /SKIP IF NOT THE SINGLE DENS. 1,3,5,7,9,,, SERIES + ISZ REMD /NOW HAVE IT 2,4,6,8,10,12,14,16... + CIF 20 /POP BACK TO OTHER PAGE + JMP I DIVSUB /!!THIS IS IN LAST USABLE LOCATION, EXEC NEEDS 7744!! +/ +/ + +/ +/ ## SECOND PAGE ## +/ + RELOC + *400 + RELOC 7600 +/ +/ FETCH ARGUMENTS, ETC. +/ +PAGE2, DCA FETCH /ENTER WITH ARGUMENT LIST ADDR IN AC + RDF /SAFE HERE? + TAD LCDIF0 /SET UP EXIT TO CALLER + DCA EXFLD + AC4000 /SET UP TO PUT R/W BIT TO LINK + TAD I FETCH /FIRST ARGUMENT HAS FIELD FOR TRANSFER + AND L70 /KEEPING ONLY FIELD + TAD LCDF0 /MAKE CDF TO TRANSFER FIELD + DCA BUFCDF /PLACE IN LINE FOR SILO LOOP + CML RTL /0=WRITE, 2=READ + DCA FN + TAD I FETCH /MAKE CONTROL COUNT FOR TRANSFER + RAL + AND L7600 /COUNT OF WORDS + CIA /0 FOR WHOLE FIELD + DCA BC + ISZ FETCH /NEXT ARGUMENT + TAD I FETCH /BUFFER ADDRESS + DCA BUF + ISZ FETCH /NEXT + TAD L100 /CARRY WITH DENSW IF SINGLE DENSITY + TAD DENSW /SET TO COMPUTE SECTOR# FOR BLOCK# + SMA CLA /SKIP IF DOUBLE, MULTIPLE BY 2 + TAD I FETCH /SINGLE, MULTIPLY BY FOUR + TAD I FETCH + ISZ FETCH /MOVING POINTER TO ERROR EXIT + CDF 0 /INDIRECT TO FIRST PAGE FOR CONSTANTS + CLL RAL /FINAL PART OF MULTIPLY + DCA I LREC /SAVE SECTOR NUMBER + TAD I LSIZE /TOTAL SIZE OF MEDIA + SZL /SKIP IF LEGAL BLOCK # + JMP EXFLD /EXIT TO CALLER WITH BLOCK # IN AC +LCDIF0, CIF CDF 0 /GO BACK TO FIRST PAGE + JMS DIVSUB /SET UP TRACK AND SECTOR + TAD FN /SPLIT READ AND WRITE + SZA CLA /WRITE SKIPS + JMP STREAD /READ STARTS IN MIDDLE OF LOOP +/ /WRITE FALLS TO NEXT LISTING PAGE + +/ +/WRITE FALLS THRU TO THIS LOOP +/ +/ TOP OF MAIN LOOP +/ +TOP, TAD FN /SET SILO TO LOAD-UNLOAD + JMS LDCMD /COMMAND TO CONTROLLER + TAD DENSW /MAKE SILO LOOP COUNT, S=7700, D=7600 + DCA FLPWC /LDCMD ENTRY SAFE TEMPORARY +BUFCDF, HLT /CDF TO BUFFER FIELD PLACED HERE +TRLOOP, TAD I BUF /IN CASE WRITE, FETCH A WORD + STR /SKIP IF READY TO PASS DATA + JMP .-1 /NO + XDR /TO OR FROM AC + DCA I BUF /PLACE WORD FOR READ, WRITE REPLACES SAME + ISZ BUF /MOVE BUFFER POINTER, (MAY SKIP) +L70, 70 + ISZ FLPWC /DONE YET + JMP TRLOOP + TAD DENSW /ADDING 77 (SINGLE) 177 (DOUBLE) + CMA /ONCE WE CMA, THAT IS + TAD BC /LOOP CONTROL TO FINISH READ + SNA + JMP OKEX /OK, DONE + DCA BC /REPLACE AND KEEP GOING +/ +/ MIDDLE OF MAIN LOOP +/ +STREAD, TAD FN /READ STARTS HERE + TAD L4 /TURN SILO COMMAND INTO READ-WRITE COMMAND + JMS LDCMD /I/O COMMAND TO CONTROLLER + TAD I LREMD /PRECOMPUTED SECTOR #; LDCMD SET FIELD TO 0 + STR + JMP .-1 + XDR +L7600, 7600 /CLEAR AC, AND IS LITERAL + TAD I LQUO /TRACK # + STR + JMP .-1 + XDR /TRACK # IS ALWAYS NON0 !! + ISZ I LREC /MOVE TO NEXT RECORD NUMBER +BACKER, CDF CIF 0 /GO BACK TO FIRST PAGE + JMS DIVSUB /FOR TRACK AND SECTOR + TAD L16 /WAIT FOR OPERATION TO COMPLETE + JMS LDCMD + ISZ BC /CHECK FOR WRITE EXIT + JMP TOP /STILL MORE +OKEX, ISZ FETCH /KICK TO OK EXIT +EXFLD, HLT /CDF CIF TO CALLER + JMP I FETCH /OUT + +/ +/ LDCMD SUBROUTINE +/ +FLPWC=. /ENTRY POINT A SAFE COUNT TEMPORARY +LDCMD, 0 /CALL TO GIVE COMMAND TO CONTROLLER +LCDF0, CDF 0 /INDIRECTS BACK TO FIRST PAGE + TAD I LIOTYP /PUT IN UNIT, DENSITY, HEAD + SDN /SKIP IF CONTROLLER READY + JMP .-1 /NO + LCD /COMMAND + SER /SKIP IF AN ERROR + JMP I LDCMD /NO + ISZ I LRETRY /TRIED ENOUGH TIMES ALREADY? + JMP BACKER /TO DIVSUB WITH AC=0 TO RETRY !!!!! + AC4000 /HARD ERROR, GIVE BACK MINUS RESULT + JMP EXFLD +/ +/ VARIABLES ETC. +/ +BUF, 0 /POINTER TO CALLER'S BUFFER +FETCH, 0 /POINTER TO CALL +BC, 0 /CONTROL COUNT, WORDS TO TRANSFER +FN, 0 /0 FOR WRITE, 2 FOR READ +DENSW, 0 /7700 IF SINGLE DENSITY, 7600 IF DOUBLE DENSITY +/ +/ LITERALS +/ +L4, 4 +L16, 16 +L100, 100 +LIOTYP, IOTYP /POINTERS BACK TO FIRST PAGE +LRETRY, RETRY +LSIZE, SIZE +LQUO, QUO +LREC, REC +LREMD, REMD + ADDED src/os8-v3f/RXSY2.PA Index: src/os8-v3f/RXSY2.PA ================================================================== --- /dev/null +++ src/os8-v3f/RXSY2.PA @@ -0,0 +1,529 @@ +/RX02 SYSTEM HANDLER +/ +/ THIS HANDLER WAS DESIGNED TO WORK WITH RX01, RX02, RX03 +/ +/ HOWEVER, ONE SINGLE BINARY CANNOT SUCCESSFULLY BE USED IN A +/ VIRGIN BUILD FOR ALL THREE DEVICES. IT IS CURRENTLY SET UP +/ TO BUILD AN RX02. +/ TO GENERATE A BINARY TO BUILD AN RX01, CHANGE THE RXTYP +/ EQUATE TO 1. FOR AN RX03 BUILD, CHANGE RXTYP TO 3. +/ +RXTYP=2 /DEFAULT, BUILD ONTO AN RX02 +/ +/ +/ +VERSION="M&77 +/ +/ +AC1=CLL CLA IAC +AC2=CLL CLA CML RTL +AC6=CLL CLA CML IAC RTL /RX02'S MUST RUN ON AN OMNI-BUS !! +AC4000=CLL CLA CML RAR +AC3777=CLL CLA CMA RAR +AC7775=CLL CLA CMA RTL +/ +/ DEVICE IOT SYMBOLIC EQUATES +/ +LCD=6751 /LOAD COMMAND +XDR=6752 /TRANSFER DATA +STR=6753 /SKIP IF READY TO TRANSFER +SER=6754 /SKIP ON ERROR +SDN=6755 /SKIP ON DONE +/ +/ HEADER BLOCK FOR BUILD +/ + *0 + -1 /ONE ENTRY + DEVICE RX8E + DEVICE SYS + 4320 /MULTI-TYPE RX HANDLER + SYS&177+6000 /TWO PAGE HANDLER + 0 /UNUSED + IFZERO RXTYP-1 <756> /SIZE FOR BUILD + IFZERO RXTYP-2 <1734> + IFZERO RXTYP-3 <3670> +/ + STBOOT-NDBOOT+12 /-SIZE (+12 FOR GAP) + / +/ HERE IS A LISTING OF THE PRIMARY BOOT FOR CONVENIENCE +/ + NOPUNCH +/ + *20 +/ +READ, TAD UNIT /TRY NEXT COMBINATION OF DENSITY AND UNIT + TAD CON360 /ADDING IN 360 + AND CON420 /KEEPING ONLY 420 BITS + DCA UNIT /CYCLES 400,420,0,20,400,,,,,,,, + AC6 /COMMAND TO READ DISK + TAD UNIT /UNIT AND DENSITY + LCD /COMMAND TO CONTROLLER + AC1 /TO SET SECTOR AND TRACK TO 1 + JMS LOAD /SECTOR TO CONTROLLER, LEAVES AC ALONE + JMS LOAD /AND TRACK +LITRAL, 7004 /LEAVING A 2 IN AC; SERVES AS LITERAL +/ +/ FOLLOWING IS PART OF WAIT LOOP, SAME SECONDARY BOOTS, OLD PRIMARY BOOT +/ +START, SDN /HAS DONE COME UP; CODE STARTS HERE! + JMP LOAD+1 /NO, GO CHECK FOR READY TO TRANSFER +/ +/ NOW, DONE OR ERROR +/ + SER /SKIP ON AN ERROR, TRY ANOTHER DENSITY ETC. + SNA /NASTY, AC=2 FOR ABOUT TO DO SILO, 0 ON START-UP + JMP READ /START-UP, GO SET UP UNIT, THEN READ TO SILO + TAD UNIT /AC ALREADY 2, PUT IN UNIT, DENSITY + LCD /TO EMPTY THE SILO + TAD UNIT /SET UP LOC 60 FOR OLD SECONDARY BOOT + AND CON360 /KEEPING UNLY DENSITY BIT + TAD LITRAL /ADDING IN 7004, BECAUSE THAT'S WHAT SYS WANTS + DCA RX1SAV /OLD SECONDARY BOOT MOVES IT TO HANDLER +CON360, 360 /LITERAL; EXECUTES IN LINE AS A NO-OP +/ /FALLS THRU TO NEXT PAGE OF LISTING +/ + / +/ FOLLOWING CODE SAME AS OLD PRIMARY BOOT +/ + JMS LOAD /GRAB NEXT ITEM FROM SILO + DCA 2 /TRADITION; SECONDARY BOOT STARTS LOADING AT 2 ! + ISZ 50 /INCREMENT LOAD ADDRESS + JMP 47 /GO BACK FOR ANOTHER +/ +/ SECONDARY BOOT LOADS OVER PRIMARY BOOT UNIT LOCATION 47 IS LOADED, +/ THEN CONTROL PASSES TO SECONDARY BOOT +/ +LOAD, 0 /SUBROUTINE TO GIVE AND TAKE DATA FROM CONTROLLER + STR /IS HE READY TO TALK TO US? + JMP START /NO, IS HE PERHAPS DONE WITH SILO, OR IN ERROR? + XDR /YES, DATA IN OR OUT;IF DATA TO CONTROLLER, AC UNCHANGED + JMP I LOAD /NO MAGIC, JUST EXIT FROM SUBROUTINE +/ +/ 60 GOES TO OLD SECONDARY BOOT +/ 61 HAS DENSITY AND UNIT THAT BOOTED SUCCESSFULLY +/ +/ +CON420, /USE IT TO HOLD 420 LITERAL TO START OUT +RX1SAV, 420 /UNIT^20+7004 TO GO TO SYS HANDLER +UNIT, 20 /+ THAT BOOTED OK +/ + ENPUNCH +/ + / ## SECONDARY BOOT ## +/ + RELOC 2 /SECTION LOADING OVER PRIMARY BOOT 2 - 47 +/ +STBOOT=. +/ +/ ONCE-ONLY CODE AFTER FIRST SECTOR IS TRANSFERED +/ +ONCE, TAD XR /SINGLE=113, DOUBLE=213 + CLL RAR /SINGLE=45, DOUBLE=105 + TAD YR /SETTING UP POINTER TO SECTOR, TRACK, FIELD, ADDR DATA + DCA YR /DAT01-1 OR DAT02-1 + TAD I YR /GETTING SINGLE=774, DOUBLE=1374 (IN CASE OLD + TAD RX1SAV /ADD IN 20^UNIT+7004 PRIMARY BOOT) + DCA UNIT /PUT INTO 61: + + JMS NEXSEC /DESTROY LINKAGE TO ONCE ONLY CODE! +XTRA, 0 /EXTRA TO MAKE ALL FIT +/ +/ +/ AUTO INCREMENT REGISTERS +/ +XR, 61 /CONTINUE TO LOAD FIRST SECTOR AT 62 +YR, DAT01-45-1 /SET UP POINTER TO DATA AREA +/ +/ SECTOR DONE, SET UP FOR NEXT +/ +NEXSEC, JMP ONCE /END OF FIRST SECTOR, DO SET-UP CODE + CDF 0 /DATA FIELD HERE TO USE AUTO INCR REGISTERS + TAD I YR /GET DATA FIELD FOR PLACEMENT OF NEXT SECTOR + SMA /SKIP IF MORE TO DO + JMP EBOOT /END OF BOOT, + DCA XFIELD /PLACE IN LINE TO SET DATA FIELD + AC6 /GET AC OF 6 TO SET UP FLOPPY READ + TAD UNIT /DENSITY AND UNIT NUMBER + LCD + TAD I YR /SECTOR FOR NEXT READ + JMS LOAD /LOAD LEAVES AC ALONE + TAD I YR /TRACK-SECTOR FOR NEXT READ + JMS LOAD /LOAD REMAINS FROM PRIMARY BOOT + TAD I YR /ADDRESS-TRACK-1 FOR NEXT READ +/ /FALL TO HANGGG WITH AC NON0 TO SHOW READ +/ + / FOLLOWING TWO LOCATIONS MUST MATCH PRIMARY BOOT +/ +HANGGG, SDN /SKIP IF DONE + JMP LOAD+1 /NO, GO CHECK FOR TRANSFER READY +/ +/ SORT OUT ERROR, SILO DONE, READ DONE +/ + SER /SKIP IF ERROR + SKP /IS GOOD, CHECK WHETHER READ OR SILO + HLT /ANY ERROR IS FATAL!! + SNA /SKIP IF READY TO SILO (AC HAS LOAD ADDR) + JMP NEXSEC /DONE WITH SILO (AC=0) GO TO NEXT SECTOR + DCA XR /USE AUTO-INCR TO LOAD CORE + JMP OVRFLW /GO TO LOCATIONS NOT FITTING UNDER 47 +/ +/ CODE TO EMPTY THE SILO TO CORE +/ +XFIELD, CDF 0 /FIELD FOR TRANSFER PLACED HERE + JMS LOAD /LOAD REMAINS FROM PRIMARY BOOT + DCA I XR /PLACE NEXT WORD + JMP XFIELD /WHEN THIS LOCATION IS PLACED, SECONDARY BOOT +/ /TAKES CONTROL, CONTINUE FIRST SECTOR AT 62 +/ +/ PRIMARY BOOT LOCATIONS 50-61 REMAIN INTACT +/ +STATUS=. /REUSE FOR TEMPORARY +/ +/ ## REST OF SECONDARY BOOT ## +/ + RELOC 62 /SECTION LOADING 62 - 213 +/ +/ LOCATIONS NOT FITTING WITHIN 2-47 SPACE +/ +OVRFLW, XDR /FETCH READ STATUS FOR LATER + DCA STATUS /TO FIGURE OUT IF A DOUBLE SIDED FLOPPY + AC2 /CODE FOR SILO OPERATION + TAD UNIT /UNIT AND DENSITY + LCD /SET TO EMPTY SILO + JMP XFIELD /GO TO SILO UNLOADING LOOP +/ +/ + / +/ SINGLE DENSITY LOADING DATA +/ +DAT01, 774 /CANCEL OUT 7004 WHEN ADDED TO 70X4 + CDF 0 /2ND SECTOR FOR SINGLE DENSITY, FIELD 0 + 3 /SECTOR 3, INTERLEAVED AT 2 + 1-3 /TRACK 1 (MINUS SECTOR 3) + 114-1-1 /2 THRU 47 + 62 THRU 113 FOR FIRST SECTOR +/ /-1 FOR TRACK, -1 FOR AUTO INCR + CDF 0 /3RD SECTOR TO 7600 FIELD 0 + 5 + 1-5 + 7600-1-1 + CDF 0 /4TH SECTOR, SECOND HALF OF PAGE + 7 + 1-7 + 7700-1-1 + CDF 10 /5TH SECTOR, TOP OF FIELD 1 + 21 /SECTOR 21 + 11-21 /OF TRACK 11 + 7600-11-1 /TO 7600 + CDF 10 /6TH SECTOR, REST OF FIELD 1 + 23 + 11-23 + 7700-11-1 + CDF 20 /7TH SECTOR, TOP OF FIELD 2 + 25 + 11-25 + 7600-11-1 + CDF 20 /10TH SECTOR, REST OF FIELD 2 + 27 + 11-27 + 7700-11-1 + 16 /MARKER AND LITERALS TO MAKE DAT02=DAT01+40 +MAGIC, 7623 /THIS WORD IN HANDLER HAS DENSITY, UNIT WORD +L7605, 7605 /STARTING ADDR FOR HANDLER +/ +/ DOUBLE DENSITY LOADING DATA +/ +DAT02, 1374 /MAKE 400+UNIT WHEN ADDED TO 70X4 + CDF 0 /2ND SECTOR TO 7600 + 4 /INTERLEAVE OF 3 + 1-4 + 7600-1-1 + CDF 10 + 15 + 5-15 + 7600-5-1 + CDF 20 /3RD SECTOR TO 7600 OF FIELD 2 + 20 /SECOND HALF OF BLOCK 66 OCTAL + 5-20 /ON TRACK 5 + 7600-5-1 + 16 /MARKER TO STOP WHOLE THING, ALSO LITERAL 16 + / +/ I/O DONE, GO TO HANDLER +/ +EBOOT, TAD UNIT /ENTER WITH AC=16 + LCD /SET DONE FLAG FOR HANDLER + TAD STATUS /FIND OUT IF DOUBLE SIDED DISK + RTR /DOUBLE SIDED BIT TO LINK + CLA RAR /DOUBLE SIDED BIT TO AC0 + TAD UNIT /REST OF CONTROL WORD + DCA I MAGIC /TO 7623 OF SYSTEM HANDLER + JMP I L7605 /TO START UP SYSTEM +/ +NDBOOT=. +/ + / CODE THAT IS LOCATION SPECIFIC HAS !! IN COMMENTS +/ +/ ## CODE FOR SYSTEM HANDLER ## +/ + RELOC + *200 + RELOC 7600 +/ +/ /USE DATA BREAKS FOR TEMPORARIES +/ +QUO=7750 /QUOTIENT FOR DIVIDE == TRACK +REMD=7751 /REMAINDER FOR DIVIDE == SECTOR +REC=7752 /CURRENT LOGICAL SECTOR NUMBER +RETRY=7753 /RETRIES COUNT +/ + ZBLOCK 7 /REQUIRED BY BUILD +/ +/ +/ ENTRY POINT +/ +SYS, VERSION +L32, 32 /FALL THRU SOME LITERALS +L1734, 1734 /WHICH MAY PUT STRAY STUFF IN AC + 3 /!!REQUIRED AT 7612!! TO SHOW OS8 TWO PAGE HANDLER + AC7775 /SET UP RETRY COUNTER + DCA RETRY /RETRIES ARE OVER ENTIRE OPERATION + RDF /GRAB CALLER'S FIELD + TAD LLCDF0 /MAKE CDF TO IT + DCA RESTOR /PUT IT BACK, GOING TO I/O ROUTINE ON PAGE 2 +IOTYP, JMP FIRST /GO TO ONCE ONLY CODE, LATER USED AS VARIABLE +/ /HAS HEAD, DENSITY, UNIT FOR I/O REQUEST + JMP RSTART /GO CALL SECOND PAGE, IOTYP FALLS THRU TO HERE +/ +/ LITERALS ETC. +/ +L5000, 5000 / +BOOTYP, /!!MUST BE AT 7623!! SECONDARY BOOT PUTS AT BOOT TIME +/ /4000 IF QUAD, 400 IF DOUBLE, AND 20 IF UNIT 1 + IFZERO RXTYP-1 <0> /INITIAL VALUE MATCHES DEVICE TO ALLOW + IFZERO RXTYP-2 <400> /BUILD ONTO VIRGIN MEDIA + IFZERO RXTYP-3 <4400> /OTHERWISE, SECONDARY BOOT PUTS IN RIGHT STUFF +LDENSW, DENSW /LOCATION ON SECOND PAGE +L4110, +LM3670, 4110 /VALUE WITH TWO USES +LM32, -32 +LLCDF0, CDF 0 + / +/ ONCE ONLY CODE +/ +FIRST, JMP MORE /LEAVING ADDITIONAL ONCE-ONLY SPACE +/ +/ FIX CDF TO 7642 +/ + *7642 /!!CDF OR CIF MUST BE AT 7642!! +MORE, CDF 20 /POINT TO OUR SECOND PAGE + TAD BOOTYP /PICK UP BOOT WORD +SNGDBL, CLL RAL /MAKE A WORD MINUS IF DOUBLE (OR QUAD) BOOTED +SIZE, RTL /REUSE FOR CONSTANTS + DCA SNGDBL /JUST FOR CONVENIENCE, THE BIT IS IN BOOTYP ANYHOW + TAD QL3400 /ANY LITERAL IN RANGE 3400-3757 (LINK=0 HERE) + TAD BOOTYP /FIGURE OUT SIZE OF MEDIA + SMA SNL CLA /SKIP IF DOUBLE OR QUAD + TAD L1734 /SINGLE + TAD L4110 /S=6044, D&Q=4110 + SNL /SKIP IF QUAD, ITS SIZE ALREADY THERE + CLL CML RAR /OTHER TWO CASES DIVIDE BY TWO + DCA SIZE /STORE S=7022, D=6044, Q=4110 + TAD SNGDBL /MAKE DENSW, 7600 IF DOUBLE, 7700 IF SINGLE + SPA CLA /SKIP IF SINGLE + TAD L7700 + TAD L7700 +QL3400, DCA I LDENSW /MUST LIVE ON SECOND PAGE +/ +/ END OF ONCE-ONLY, (RE)START I/O OPERATION +/ +RSTART, /AC MAY HAVE JUNK COMING IN!! + AC3777 /MAKE A WORD WITH DENSITY AND UNIT BITS ONLY + AND BOOTYP /FOR CONTRUCTING LCD ARGUMENTS + DCA IOTYP /ALSO SHUTS OFF PATH TO ONCE-ONLY CODE! + TAD SYS /AC HAS THE CALL ADDR +RESTOR, HLT /SET DATA FIELD TO THAT OF CALLER + CIF 20 + JMP PAGE2 + / +/ +/ CALL WITH AC NON0 TO DO DIVIDE +/ CALL WITH AC ZERO TO DO I/O RETRY (WHOLE OPERATION) +/ +DIVSUB, 0 + SNA CLA /SKIP IF REALLY A DIVIDE REQUEST + JMP RSTART /NO, IT WAS AN ERROR RETRY!! + DCA QUO /CLEAR DIVIDE QUOTIENT + TAD BOOTYP /IS IT A TWO HEADER + SKP /!!FAULTY USR CALL DOES JMS HERE (7700) + HLT /HALT OUT SUCH AN OCCURRENCE!! +L7700, SMA CLA /SKIP IF YES + JMP SHUNT /NO, GO DO DIVIDE + CLL /TO CHECK 12 BIT SIZE + TAD REC /WHICH RECORD ARE WE WORKING ON + TAD LM3670 /NUMBER OF SECTORS ON FIRST SIDE + SNL CLA /SKIP IF SECOND SIDED IT + JMP SHUNT /NO, JUST REGULAR + TAD BOOTYP /MAKE IO FUNCTION WORD WITH SECOND HEAD BIT + TAD L5000 /CONVERTS TO 20^UNIT +1400 + DCA IOTYP + TAD LM3670 /BUT DECREASE RECORD NUMBER +SHUNT, TAD REC /THIS FOR TRACK-SECTOR +DIVLOO, ISZ QUO /MAIN DIVIDE LOOP + TAD LM32 /DIVIDE BY 26 TO GET TRACK + SMA /SKIP IF DONE + JMP DIVLOO + TAD L32 /REMAINDER 0-25 + DCA REMD /USE AS TEMPORARY UNTIL FINAL VALUE + TAD SNGDBL /FIND OUT IF SINGLE BOOT + SPA CLA /SKIP IF YES + TAD REMD /MULTIPLY BY THREE FOR DOUBLE + TAD REMD /AND BY TWO FOR SINGLE + TAD REMD + CLL IAC /LINK CLEAR FOR FINAL TEST; +1 TO START AT 1 NOT 0 + TAD LM32 /DIVIDE BY 26 TO GET SECTOR + SMA SZA /SKIP IF DONE + JMP .-2 + TAD L32 /RESTORE POSITIVE VALUE TO BE SECTOR + DCA REMD /WHEW, BUT WATCH IT, A FINAL CORRECTION COMING! + TAD SNGDBL /IF LINK=0 AND SINGLE: 2,4,6,8,10,12,14,16... SERIES + SMA SNL CLA /SKIP IF NOT THE SINGLE DENS. 1,3,5,7,9,,, SERIES + ISZ REMD /NOW HAVE IT 2,4,6,8,10,12,14,16... + CIF 20 /POP BACK TO OTHER PAGE + JMP I DIVSUB /!!THIS IS IN LAST USABLE LOCATION, EXEC NEEDS 7744!! +/ +/ + +/ +/ ## SECOND PAGE ## +/ + RELOC + *400 + RELOC 7600 +/ +/ FETCH ARGUMENTS, ETC. +/ +PAGE2, DCA FETCH /ENTER WITH ARGUMENT LIST ADDR IN AC + RDF /SAFE HERE? + TAD LCDIF0 /SET UP EXIT TO CALLER + DCA EXFLD + AC4000 /SET UP TO PUT R/W BIT TO LINK + TAD I FETCH /FIRST ARGUMENT HAS FIELD FOR TRANSFER + AND L70 /KEEPING ONLY FIELD + TAD LCDF0 /MAKE CDF TO TRANSFER FIELD + DCA BUFCDF /PLACE IN LINE FOR SILO LOOP + CML RTL /0=WRITE, 2=READ + DCA FN + TAD I FETCH /MAKE CONTROL COUNT FOR TRANSFER + RAL + AND L7600 /COUNT OF WORDS + CIA /0 FOR WHOLE FIELD + DCA BC + ISZ FETCH /NEXT ARGUMENT + TAD I FETCH /BUFFER ADDRESS + DCA BUF + ISZ FETCH /NEXT + TAD L100 /CARRY WITH DENSW IF SINGLE DENSITY + TAD DENSW /SET TO COMPUTE SECTOR# FOR BLOCK# + SMA CLA /SKIP IF DOUBLE, MULTIPLE BY 2 + TAD I FETCH /SINGLE, MULTIPLY BY FOUR + TAD I FETCH + ISZ FETCH /MOVING POINTER TO ERROR EXIT + CDF 0 /INDIRECT TO FIRST PAGE FOR CONSTANTS + CLL RAL /FINAL PART OF MULTIPLY + DCA I LREC /SAVE SECTOR NUMBER + TAD I LSIZE /TOTAL SIZE OF MEDIA + SZL /SKIP IF LEGAL BLOCK # + JMP EXFLD /EXIT TO CALLER WITH BLOCK # IN AC +LCDIF0, CIF CDF 0 /GO BACK TO FIRST PAGE + JMS DIVSUB /SET UP TRACK AND SECTOR + TAD FN /SPLIT READ AND WRITE + SZA CLA /WRITE SKIPS + JMP STREAD /READ STARTS IN MIDDLE OF LOOP +/ /WRITE FALLS TO NEXT LISTING PAGE + +/ +/WRITE FALLS THRU TO THIS LOOP +/ +/ TOP OF MAIN LOOP +/ +TOP, TAD FN /SET SILO TO LOAD-UNLOAD + JMS LDCMD /COMMAND TO CONTROLLER + TAD DENSW /MAKE SILO LOOP COUNT, S=7700, D=7600 + DCA FLPWC /LDCMD ENTRY SAFE TEMPORARY +BUFCDF, HLT /CDF TO BUFFER FIELD PLACED HERE +TRLOOP, TAD I BUF /IN CASE WRITE, FETCH A WORD + STR /SKIP IF READY TO PASS DATA + JMP .-1 /NO + XDR /TO OR FROM AC + DCA I BUF /PLACE WORD FOR READ, WRITE REPLACES SAME + ISZ BUF /MOVE BUFFER POINTER, (MAY SKIP) +L70, 70 + ISZ FLPWC /DONE YET + JMP TRLOOP + TAD DENSW /ADDING 77 (SINGLE) 177 (DOUBLE) + CMA /ONCE WE CMA, THAT IS + TAD BC /LOOP CONTROL TO FINISH READ + SNA + JMP OKEX /OK, DONE + DCA BC /REPLACE AND KEEP GOING +/ +/ MIDDLE OF MAIN LOOP +/ +STREAD, TAD FN /READ STARTS HERE + TAD L4 /TURN SILO COMMAND INTO READ-WRITE COMMAND + JMS LDCMD /I/O COMMAND TO CONTROLLER + TAD I LREMD /PRECOMPUTED SECTOR #; LDCMD SET FIELD TO 0 + STR + JMP .-1 + XDR +L7600, 7600 /CLEAR AC, AND IS LITERAL + TAD I LQUO /TRACK # + STR + JMP .-1 + XDR /TRACK # IS ALWAYS NON0 !! + ISZ I LREC /MOVE TO NEXT RECORD NUMBER +BACKER, CDF CIF 0 /GO BACK TO FIRST PAGE + JMS DIVSUB /FOR TRACK AND SECTOR + TAD L16 /WAIT FOR OPERATION TO COMPLETE + JMS LDCMD + ISZ BC /CHECK FOR WRITE EXIT + JMP TOP /STILL MORE +OKEX, ISZ FETCH /KICK TO OK EXIT +EXFLD, HLT /CDF CIF TO CALLER + JMP I FETCH /OUT + +/ +/ LDCMD SUBROUTINE +/ +FLPWC=. /ENTRY POINT A SAFE COUNT TEMPORARY +LDCMD, 0 /CALL TO GIVE COMMAND TO CONTROLLER +LCDF0, CDF 0 /INDIRECTS BACK TO FIRST PAGE + TAD I LIOTYP /PUT IN UNIT, DENSITY, HEAD + SDN /SKIP IF CONTROLLER READY + JMP .-1 /NO + LCD /COMMAND + SER /SKIP IF AN ERROR + JMP I LDCMD /NO + ISZ I LRETRY /TRIED ENOUGH TIMES ALREADY? + JMP BACKER /TO DIVSUB WITH AC=0 TO RETRY !!!!! + AC4000 /HARD ERROR, GIVE BACK MINUS RESULT + JMP EXFLD +/ +/ VARIABLES ETC. +/ +BUF, 0 /POINTER TO CALLER'S BUFFER +FETCH, 0 /POINTER TO CALL +BC, 0 /CONTROL COUNT, WORDS TO TRANSFER +FN, 0 /0 FOR WRITE, 2 FOR READ +DENSW, 0 /7700 IF SINGLE DENSITY, 7600 IF DOUBLE DENSITY +/ +/ LITERALS +/ +L4, 4 +L16, 16 +L100, 100 +LIOTYP, IOTYP /POINTERS BACK TO FIRST PAGE +LRETRY, RETRY +LSIZE, SIZE +LQUO, QUO +LREC, REC +LREMD, REMD + ADDED src/os8-v3f/SAVECB.PA Index: src/os8-v3f/SAVECB.PA ================================================================== --- /dev/null +++ src/os8-v3f/SAVECB.PA @@ -0,0 +1,658 @@ +/SAVECB.PA DEMONSTRATION PROGRAM TO INCREASE THE NUMBER OF SAVE ARGUMENTS +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /SAVCB.PA INCREASES THE NUMBER OF SAVE ARGUMENTS JULY 1978 +/ MEMORY LOCATIONS UTILIZED +/ 0000-1177 /PROGRAM CODE +/ 1200-1377 /TTY INPUT BUFFER +/ 1400-1577 /ORIGINAL CCB BUFFER +/ 1600-1710 /ADJUSTED CCB BUFFER +/ 1710-1777 /PROGRAM CODE + + + /PAGE ZERO + *0 +REDERR, JMS I [CRLF /ILLEGAL INPUT ERROR + JMS I [PRMSG + TEXT /INPUT?/ + JMP I ERR + *10 +LXR, 1177 /AUTO INDEX FOR INPUT STORAGE +CXR, 0 /AUTO INDEX +XR, 1377 +NXR, 1577 +TX, 0 + *20 +SHNDLR, 7607 +ERR, 7605 +TEMP, 0 /INPUT NUMBER STORAGE +TMP1, 0 /INPUT NUMBER STORAGE +DIGFLG, 0 /NUMBER PRESENT FLAG +TEMP1, 0 /INPUT FIELD STORAGE +TEMP2, 0 /INPUT ADDRESS STORAGE +CMND, 0 +CHARID, 0 / +DLID, 0 /DELIMITER STORAGE +FIRST1, 0 /STORAGE FOR SEGMENT FIELD INPUT +FIRST2, 0 /STORAGE FOR SEGMENT ADDRESS INPUT +CNT, 0 /SEGMENT COUNTER +FLD, 0 /USED IN CCB FIELD PRINTING +TMP, 0 /TEMPORARY STORAGE-TEXT PRINTING +TCB, 0 /PRMSG CALL I.D. +ORG, 0 /ORIGIN STORAGE +COUNT, -110 +BUMP, -2 /USED AS TEST IN LOAD LOOP +RBFLG, 0 +SEGCNT, -4 + + *200 +START, CDF 0 + CIF 10 /CALL COMMAND DECODER + JMS I [200 + 5 + 2326 /SV. EXTENSION---ASSUMED INPUT + CIF 0 + CDF 10 + TAD I [7620 /STARTING BLOCK OF FILE + CDF 0 + DCA STFLE /SET UP LOADING OF CCB BLOCK +LOAD, JMS I [7607 /LOAD CCB + 0101 +LOC, 1400 /INTO 1400 +STFLE, 0 /STARTING BLOCK OF FILE + JMP REDERR / + TAD I XR /MOVE CCB UP TO 1600 + DCA I NXR + ISZ COUNT /ALL DONE? + JMP .-3 + JMS I (VERMSG /PRINT CCB WRITING INFO +CONT, JMS CRLF /INITIALIZE LINE + JMS IDCHAR /PRINT INPUT SIGNAL CHARACTER +REATTY, KSF /WAITING FOR FLAG TO DISAPPEAR + JMP .-1 + JMS I [CTCTST /...CTRL/C? + TAD [203 /NO-RE-INSTATE CHARACTER + JMS I [RBLFT /TEST FOR LINE FEED,RUBOUT + TAD [225 + DCA TEMP /STORE CHARACTER + KCC /CLEAR KEYBOARD,AC + TAD TEMP + JMS I [TYPIT + TAD TEMP + TAD [-215 /IS IT THE END OF THE LINE? + SNA + JMP I [SAVE1 + TAD [-63 /IS IT THE END OF INPUT(@)? + SNA + JMP I [SAVE + CLL CLA + TAD TEMP + DCA I LXR /STORE AWAY CHARACTER + TAD LXR + TAD [-1110 + SNA CLA /TEST FOR LINE OVERFLOW + JMP I [BARG + JMP REATTY + + +CRLF, 0 /CARRAIGE RETURN--LINE FEED ROUTINE + CLL CLA + TAD [215 + JMS I [TYPIT + TAD [212 + JMS I [TYPIT + JMP I CRLF +IDCHAR, 0 /PRINT A #, IT SIGNALS INPUT TIME + CLA + DCA RBFLG /INITIALIZE RUBOUT FLAG + DCA TEMP1 /INITIALIZE INPUT STORAGE WORD + TAD [243 + JMS I [TYPIT + JMP I IDCHAR +TYCCB, JMS CRLF + TAD [211 + JMS I [TYPIT + TAD [1377 /ROUTINE TO TYPE OUT CCB INFO + DCA CXR + TAD I CXR /ADJUST SEGMENT INFO + CLL RAL + STL RAR + DCA CNT /NUMBER OF SEGS + JMS I [PRMSG + TEXT /START=/ +RTRN1, TAD I CXR /GET CIF CDF OF STARTING FIELD + AND [174 + DCA FLD /STORE IT + TAD FLD + AND [104 /ISOLATE BANK BITS + CLL RTR /SWITCH THEM AROUND + RAR + SZL + TAD [4 + CLL RTR + TAD [260 + JMS I [TYPIT + TAD FLD /TIME TO TYPE FIELDS + AND [70 + CLL RTR + RAR + TAD [260 + JMS I [TYPIT +TYORG, TAD I CXR + JMS I [PWORD /PROCESS ORIGIN WORD + TAD [211 /PRINT ATAB TO SEPARATE HEADINGS + JMS I [TYPIT +TYJSW, /SET TYCCB CALL FLAG + JMS I [PRMSG /PRINT JSW HEADING + TEXT /JSW=/ +RTRN2, TAD I CXR + JMS I [PWORD /PRINT JSW + JMS CRLF + JMS CRLF +TYSEGS, + JMS I [PRMSG + TEXT /CORE SEGMENTS:/ + JMS CRLF + JMS CRLF + JMP I [SEGSM2 /PROCESS SEGMENTS + *400 +PRINT, JMS PRWD + ISZ PRMSG /GET MORE TEXT + SKP +PRMSG, 0 /ROUTINE TO PRINT TEXT + CLA + TAD I PRMSG + SZA + JMP PRINT + TSF + JMP .-1 + ISZ PRMSG /TYCCB RETURN + JMP I PRMSG +PRWD, 0 /ROUTINE TO ISOLATE AND PRINT TEXT CHARS + DCA TMP /SAVE PACKED SIX BIT CHARS + TAD TMP + BSW /POSITION FIRST CHAR FOR PRINTING + JMS PCHAR /PRINT IT + TAD TMP /ISOLATE SECOND CHARACTER + JMS PCHAR /PRINT IT + JMP I PRWD +PCHAR, 0 /ROUTINE FOR CONVERTING TEXT CHARS TO ASCII + AND [77 /ISOLATE SIX BITS + SNA + JMP I PCHAR + TAD [240 /CONVERSION TO ASCII + AND [77 + TAD [240 + JMS TYPIT /PRINT CHARACTER + JMP I PCHAR +TYPIT, 0 /ROUTINE TO PRINT CHARACTERS + TLS + TSF + JMP .-1 + CLA + JMS CTCTST /TEST FOR CONTROL/C + CLL CLA + JMP I TYPIT +CTCTST, 0 /SEE IF USER WANTS OUT, CTRL/C... + TAD [200 + KSF + STA + KRS + TAD [-203 /IS IT A CTRL/C? + SNA +CTLC, JMP I ERR / CTRL/C MEANS GETOUT... + JMP I CTCTST /RETURN +RBLFT, 0 + TAD [-377 /IS IT A DELETE? + + SNA + JMP I [DELETE + TAD [377-212 /IS IT A LINE FEED? + SNA + + JMP I [LFEED + TAD [212-225 + SZA /IS IT A CTRL/U? + JMP I RBLFT + TAD [225 + JMS I [TYPIT + JMP I [NEXTLN + +SSTADR, TAD TEMP1 /ADJUST FIELD + CLL RTR /TRANSFORM FOR CDF--"37" TO "174" + RTR + BSW + SZL + TAD [4 + TAD [6203 + DCA I [1401 /STORE STARTING FIELD CDF CIF + TAD TEMP2 + DCA I [1402 /STORE AWAY STARTING ADDRESS + JMP ENDTST +SSBITS, TAD TEMP2 + DCA I [1403 /STORE AWAY JSW +ENDTST, TAD LXR /TEST FOR END OF INPUT LINE + CIA + TAD CXR + SMA CLA + JMP TESTE /TEST FOR CR/LF OR @ + JMP I [SDFLG +DASH, TAD TEMP1 /ROUTINE TO PROCESS TRIPLET + CIA CLL CML + TAD FIRST1 + SZA CLA /ARE THE FIELDS THE SAME? + JMP I [BARG /NO ERROR + TAD TEMP2 + AND [7600 + TAD [200 + DCA TEMP2 + TAD TEMP2 + CIA + TAD FIRST2 + SZL CLA /ISI UPPER LIMIT > LOWER LIMIT? + JMP I [BARG /NO ERROR + TAD [1403 /SET INDEX REGISTER + DCA XR + STA + TAD I [1400 /INITIALIZE SEGMENT COUNTER + DCA COUNT + JMP I [FLDTST /PROCESS SEGMENT +TESTE, TAD TEMP /TEST FOR WHETHER END OF LINE OR INPUT +ENTST, TAD [-215 /WAS IT ACARRAIGE RETURN? + SNA + JMP I [NEXTLN /YES PREPARE FOR NEXT LINE + TAD [215-"@ /WAS IT EXIT TIME? + SNA + JMP I [WRCCB /EXIT ROUTINE + JMP REDERR /ILLEGAL INPUT +PWORD, 0 /ROUTINE TO PROCESS ORIGIN OR JSW WORDS + DCA ORG + TAD ORG + BSW /PROCESS HIGHER BIT FIRST + JMS SECT2 + TAD ORG /NOW PROCESS LOWER BITS + JMS SECT2 + JMP I PWORD +SECT2, 0 /ROUTINE TO PRINT DOUBLE DIGIT + DCA TEMP1 + TAD TEMP1 + AND [70 /ISOLATE HIGHER DIGIT + CLL RTR + RAR + TAD [260 + JMS I [TYPIT + TAD TEMP1 + AND [7 /ISOLATE LOWER DIGIT + TAD [260 + JMS I [TYPIT + JMP I SECT2 + + + *600 +GTNM, DCA DIGFLG /RESET DIGIT FLAG + DCA TEMP1 /CLEAR FIELD STORAGE + DCA TEMP2 /CLEAR ADDRESS STORAGE +GETNUM, TAD I CXR /ROUTINE TO ORGANIZE LINE INPUT + TAD [-270 /TEST FOR NUMBER + CLL + TAD [10 + SNL + JMS NOTNUM /NO NUMBER + DCA TMP1 /STORE NUMBER + ISZ DIGFLG /SET NUMBER FLAG + JMS ROT /ORGANIZE ARGUMENT INTO TWO WORDS + JMS ROT /TEMP1 FOR THE FIELD + JMS ROT /TEMP2 FOR ADDRESS + TAD TEMP2 + TAD TMP1 /TAD IN NEW DIGIT + DCA TEMP2 + JMP GETNUM +SDFLG, TAD CHARID /ADD DELIMITER + DCA DLID /STORE IT + TAD TEMP2 /STORE PRESENT ADDRESS AWAY + AND [7600 + DCA FIRST2 + TAD TEMP1 /STORE FIELD ALSO + AND [37 + DCA FIRST1 + JMP GTNM + +ROT, 0 /ROUTINE TO ROTATE FIELD AND ADDRESS + TAD TEMP2 /ADDRESS REGISTER + CLL RAL /MOVE POTENTIAL FIELD BIT INTO LINK + DCA TEMP2 /NOW READY FOR NEW INPUT - TMP1 + TAD TEMP1 + RAL /STORE FIELD BITS + DCA TEMP1 + JMP I ROT +NOTNUM, 0 + CLL + TAD [260 /CONVERT TO ASCII + DCA CHARID + TAD DIGFLG + SNA CLA + JMS ACORS /IF NO DIGIT,MUST BE A COMMAND + TAD DLID /PROCESS INPUT NUMBER + SNA /ZERO INDICATES FIRST NUMBER + JMP SDFLG /PREPARE FOR NEXT NUMBER + TAD [-"- /IS IT A DASH? + SNA + JMP I [DASH /PROCESS TRIPLET + TAD ["--", /IS IT A COMMA? + SNA + JMP SDFLG /GET SECOND NUMBER + TAD [",-"; /IS IT A SEMI-COLON? + SNA + JMP I [SSTADR /PROCESS START ADDRESS + TAD [";-"= /IS IT AN EQUALS + SNA CLA + JMP I [SSBITS /PROCESS JSW + JMP SDFLG +ACORS, 0 /TEST FOR ADD,SUB,OR CHANGE + TAD CHARID + TAD [-"T /IS IT A TYPE INST? + SNA + JMP I [TYCCB /IF SO PROCESS IT + TAD ["T-"A /IS IT AN ADDITION? + SNA + JMP CEND + TAD ["A-"S /IS IT A DELETION? + SZA CLA + JMP SDFLG /TEST FOR @ OR CR/LF + IAC +CEND, DCA CMND /STORE COMMAND FLAG + + JMP GTNM +SAVE1, JMS I [CRLF /PROCESS END OF LINE +SAVE, TAD [1177 + DCA CXR /POINT TOWARD START OF LINE + TAD LXR /WAS THEIR ANY INPUT? + CIA + TAD CXR + SNA CLA /IF LXR EQUALS CXR, THERE WAS NONE + JMP I [TESTE /TEST FOR CR/LF OR @ + DCA I LXR /SET DELIMITER + JMP I [GETNUM /GET INPUT + +ATEST, CLA + TAD CMND /WHAT IS THE COMMAND? + SZA CLA /IF NOT THE ADD COMMAND... + JMP I [BARG /THEN ERROR RETURN + TAD COUNT /IS IT TO BE ADDED ON THE END? + SZA CLA /IF COUNT IS ZERO, YES... + TAD [-2 /PUSH BACK INDEX TO SAVE LAST SEGMENT + TAD XR + DCA XR + TAD XR /ADDITION CODE + AND [77 /ISOLATE WHERE WE ARE IN THE CCB + TAD [1600 /REFERENCE SAME LOCATION IN ADD BUFFER + DCA NXR /STORE FOR MOVE + TAD FIRST2 /STORE INPUT'S ORIGIN + DCA I NXR + JMS I [SEGADJ /ADJUST SECOND WORD FOR CCB + DCA I NXR + STA + DCA BUMP /SET ADD INDICATOR + JMP I [MOVE /MOVE CCB +STEST, STA /DELETION PROCESSOR + + TAD CMND + SZA CLA /IS A DELETION? + JMP I [BARG /IF NOT ERROR + TAD XR /SET BACK POINTER FOR DELETION + TAD [176 /ADD 200 TO REFERENCE 1600 BUFFER + DCA NXR + IAC /SET DELETION PARAMETER + DCA BUMP + JMP I [MOVE /MOVE CCB + PAGE + + + *1000 + /ROUTINE TO PROCESS CCB SEGMENTS FOR TYPING +SEGSM2, TAD [-4 + DCA SEGCNT +SEGS, TAD I CXR /GET FIRST SEGMENT + DCA TMP1 + TAD I CXR /GET SECOND WORD OF SEGMENT + DCA FLD + JMS TFIELD + JMS I [SECT2 + TAD TMP1 /TYPE ORIGIN OF SEGMENT + JMS I [PWORD /TYPE IT + TAD [255 /TYPE HYPHEN + JMS I [TYPIT + JMS TFIELD /TYPE FIELD + JMS I [SECT2 + TAD FLD /CALCULATE HIGHER LIMIT + AND [3700 /ISOLATE NUMBER OF PAGES + TAD [-100 /MINUS A PAGE TO BE REPLACED BY + CLL RAL + TAD [177 /A PAGE FULL OF LOCATIONS + TAD TMP1 + JMS I [PWORD + ISZ CNT /IS THAT ALL THE SEGS? + JMP .+5 /NO ... CONTINUE + JMS I [CRLF + TAD [1177 + DCA LXR /RESET INPUT POINTER + JMP I [CONT / + ISZ SEGCNT /IS THAT THE FOURTH SEGMENT? + JMP .+4 /NO...CONTINUE + JMS I [CRLF + JMS I [CRLF + JMP I [SEGSM2 + TAD [", + JMS I [TYPIT + TAD [240 + JMS I [TYPIT + JMP SEGS +FLDTST, ISZ COUNT /IS THAT ALL THE SEGS? + SKP CLA + JMP I [ATEST /IF SO PROCESS COMMAND + TAD I XR /SEARCH FOR FIELD ETC. PAGE + DCA TMP /STORE SEGMENT ORIGIN + TAD I XR + DCA FLD /STORE SEGMENT'S SECOND WORD + JMS TFIELD /ADJUST FIELD... + CIA /RETURNS WITH FIELD IN AC + TAD TEMP1 /IS IT THE SAME FIELD AS INPUT? + SPA /OR IS IT LESS THAN FIELD OF INPUT? + JMP FLDTST /NEITHER... + SZA CLA /IF IT IS LESS THAN INPUT'S FIELD + JMP I [ATEST /IT SHOULD BE AN ADD + TAD FIRST2 /TEST INPUT'S ORIGIN + CIA /IS IT LESS THAN OR EQUAL TO SEGMENT'S ORIGIN? + TAD TMP + SNA + JMP I [STEST /IF EQUAL TEST FOR DELETION + SMA CLA + JMP I [ATEST /IF LESS TEST FOR ADDITION + JMP FLDTST /OTHERWISE CHECK NEXT SEGMENT +TFIELD, 0 /ROUTINE TO TRANSFORM FIELDS FOR TYPING + TAD FLD + AND [76 + CLL RTR + SZL /ISOLATE BANK BIT "A" + TAD [40 + CLL RAR + SZL /ISOLATE BANK BIT "B" + TAD [10 + JMP I TFIELD +SEGADJ, 0 /ROUTINE TO ORGANIZE CCB SEGMENT SECOND WORD + TAD FIRST2 /CALCULATE NUMBER OF PAGES + CIA + TAD TEMP2 /BY DIFFERENCING THE INPUT ADDRESSES + AND [7600 + CLL RAR /AND HALVING INTO PAGES + DCA FIRST2 /STORE FOR CCB LOAD + + TAD TEMP1 /ADD IN FIELD + JMS CCBFLD /RE-ORGANIZE IT FOR CCB + TAD FIRST2 /COMBINE FIELD AND PAGES FOR CCB SEGMENT + JMP I SEGADJ +CCBFLD, 0 /ROUTINE TO CHANGE FIELD INTO CCB FORM + CLL RTR /STARTS WITH A '37' IN AC + RTR + SZL /TEST FOR B BANK BIT + TAD [400 + CLL RAR + SZL /TEST FOR A BANK BIT + TAD [100 + CLL RTR + RTR + RAR /RETURN WITH A '76' IN AC + JMP I CCBFLD +MOVE, JMS MOVA /MOVE TIME + TAD BUMP /IF YES, RESET SEGMENT NUMBER + TAD I [1400 + DCA I [1400 +REMOVE, TAD [1403 /REPLACE ORIGINAL SEGS + DCA NXR + TAD [1603 /WITH UPDATED ONES + DCA XR + TAD I [1400 + DCA COUNT /SET COUNT TO THE NUMBER OF SEGS + JMS MOVA + JMP I [ENDTST +MOVA, 0 + TAD COUNT /WAS THE SEGMENT ADDED ON THE END? + SNA CLA + JMP I MOVA /IF SO, RETURN + TAD I XR /MAKE THE MOVE + DCA I NXR + TAD I XR /BE SURE TO GET BOTH WORDS + DCA I NXR + ISZ COUNT /IS THAT ALL THE SEGMENTS? + JMP .-5 /IF NO, CONTINUE + JMP I MOVA +NEXTLN, CLL CLA /ROUTINE TO ACCEPT NEW INPUT LINE + DCA DIGFLG /ZERO DIGIT FLAG + DCA DLID /CLEAR DELIMITER STORAGE + TAD [1177 /RESET INPUT POINTER + DCA LXR + JMP I [CONT /CONTINUE INPUT CODE + PAGE + *1710 + /LOCATIONS 1600-1710 ARE USED AS THE CORE CONTROL BLOCK BUFFER +DELETE, /TTY DELETION COMMAND + CLL CLA + TAD LXR + TAD [-1177 /WAS THERE INPUT? + SNA CLA + JMP RBSPCL /NO INPUT--PREPARE FOR SOME... + TAD ["\ /PRINT ERASE DELIMITER + ISZ RBFLG /TEST TO SEE IF THIS IS THE FIRST RUBOUT + JMS I [TYPIT /IT IS + CLA CMA /SET RUBOUT FLAG + DCA RBFLG + CMA + TAD LXR + DCA TX /PRINT ERASED CHARACTER + TAD I TX + JMS I [TYPIT +BACKUP, CLA CMA + TAD LXR + DCA LXR + KCC + JMP I [REATTY +RBSPCL, ISZ RBFLG /HAVE ANY CHARACTERS BEEN ERASED? + JMP I [CONT /NO...PREPARE FOR INPUT + TAD ["\ + JMS I [TYPIT + DCA DIGFLG /RESET DIGFLG + JMP I [CONT +LFEED, JMS I [CRLF + TAD [243 /TYPE I.D.(#) CHARACTER + JMS I [TYPIT + TAD [1177 + DCA NXR + JMP .+3 +FEEDER, TAD I NXR + JMS I [TYPIT + TAD LXR + CIA + TAD NXR + SZA CLA + JMP FEEDER + KCC + JMP I [REATTY +BARG, JMS I [PRMSG + TEXT /BAD ARGS/ + JMP I [NEXTLN +SEGNO, 0 + TAD I [1400 /ACCES NUMBER OF SEGMENTS + CLL RAL /ADJUST EXTENDED MEM BIT + STL RAR + TAD [32 + SPA CLA /ARE THERE MORE THAN 32? + JMP REDERR + JMP I SEGNO + PAGE + + + *2000 + +VERMSG, 0 + JMS I [PRMSG + TEXT / ATTENTION! THE NEW CCB WILL BE WRITTEN DIRECTLY ONTO / + JMS I [CRLF + JMS I [PRMSG + TEXT /THE SPECIFIED INPUT FILE.(SEE SOURCE CODE)/ + JMP I VERMSG + +WRCCB, JMS I [SEGNO /DID WE EXCEED SEGMENT LIMIT? + JMS I [7607 /WRITE CCB + 4201 + 1200 /FROM 1200 + 37 /TO BLOCK '37' + JMP REDERR + TAD I (STFLE + DCA WRFLE + JMS I [7607 + 4101 + 1400 +WRFLE, 0 + JMP REDERR + JMP I ERR ADDED src/os8-v3f/TECO.PA Index: src/os8-v3f/TECO.PA ================================================================== --- /dev/null +++ src/os8-v3f/TECO.PA @@ -0,0 +1,4222 @@ +/10 OS/8 TECO VERSION 5 +/ +/ +/ +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1974,1975,1976,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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ + /BROUGHT TO YOU BY: RUSS HAMM, O.M.S.I., AND RICHARD LARY (IN THAT ORDER) +/WITH ASSISTANCE FROM MARIO DENOBILI OF THE P?S +/PATCHES INCORPORATED BY S.R. ON 5-AUGUST-75 FOR OS/8 V3C: + +/1. UPDATED VERSION # TO V4 +/2. INCORPORATED PATCHES #S 1 & 2 (V302 AND V303) +/ PREVENTS \ FROM GOING OUTSIDE OF BUFFER +/ RESETS CFLAG TO PREVENT ARGUMENT ERROR EVERY 4096 TIMES IN LOOP + +/ CHANGES FOR V5: -S.R.- + +/3. ADDED OVERLAYS +/4. EXPANDED ERROR MESSAGES +/5. DOCUMENTED CORE LAYOUT +/6. ADDED "T, "S, "F, "U, AND "R +/7. FIXED EG BUG +/8. MADE DEFAULT ITERATION COUNT TRULY INFINITE +/9. ADDED N^T +/10. ADDED := +/11. ADDED SOME SAFETY ERROR MESSAGES +/ (I) ERROR IF Y HAS A NUMERIC ARGUMENT +/ (II) ERROR IF TWO ARGUMENTS ARE SPECIFIED TO D +/12. REMOVE ^R (OBSOLETE COMMAND) +/13. REMOVE "A AND "B (AFTER AND BEFORE) +/14. ADDED 13-BIT ARITHMETIC +/15. MADE = AND \ GIVE SIGNED RESULTS (DECIMAL ONLY) +/16. ALLOW 13-BIT NUMERIC Q-REGISTERS. +/ THIS IS ACCOMPLISHED BY RESERVING THE HIGH ORDER BIT +/ OF THE LENGTH WORD. STRING PORTION OF Q-REGISTER +/ NOW RESTRICTED TO 2047 CHARACTERS. IT GETS CHECKED BY +/ ^U AND X. BELL RINGS WITHIN 12 CHARACTERS OF FILLING +/ UP COMMAND STRING Q-REGISTER. +/17. STORED LINK AS LOW ORDER BIT IN NLINK IN CASE WE EVER +/ WANT TO GO TO 24-BIT ARITHMETIC. +/18. ERROR ON A,B,C +/19. P DOESN'T CREATE FORM FEEDS +/20. ALLOW @ MODIFIER WITH ER, EW, EB. +/21. EK +/22. ^S FREEZE +/23. EGTEXT$ +/24. GOT RID OF F_ +/25. F IS ILLEGAL IF NOT FOLLOWED BY S OR N +/26. W IS NOW AN ILLEGAL COMMAND (EXCEPT ON -12) +/27. ADDED :G +/28. Y AND _ GIVE ERRORS IF DATA IS GOING TO BE LOST +/ (IF OUTPUT FILE IS OPEN AND BUFFER IS NOT EMPTY) +/29. CASE FLAGGING IMPLEMENTED +/30. "< AND "> ARE SYNONYMOUS WITH "L AND "G +/31. ^G AND ^G* +/32. SCOPE RUBOUTS +/33. == NOW PRINTS NUMBER IN OCTAL +/34. EUFLAG AND ETFLAG IMPLEMENTED +/35. CASE FLAGGING WORKS +/36. IMAGE MODE (ET BIT 11) APPLIES TO T, ^A, AND N^T +/ IT DOES NOT APPLY TO :G +/37. ERROR IF TRY TO DO AN EB TO A .BK FILE (IT DOES AN ER) +/38. VT AND FF ARE NOW LINE TERMINATORS +/39. BELL ECHOES AS ^G AS WELL AS RINGING BELL +/40. ^K IS AN ERROR +/41. REMOVED ^Z COMMAND +/42. CHANGED ^V TO EO +/43. CHANGED ^W TO W +/44. MEMORY RESIDENT OVERLAYS IF MORE THAN 12K +/45. LONG FORM ERROR MESSAGES ON 1EH +/46. ET FLAG 8'S BIT AFFECTS ECHOING OF ^T +/47. NEGATIVE OR 0 ITERATION SKIPS +/48. CTRL/N +/49. CTRL/C TRAP + +/KNOWN BUGS +/1. LARGE T OR X AND ONLY 1 BLOCK LEFT IN OUT DEV +/2. ^S DOESN'T KEEP SCREEN ON +/3. FIX BATCH INTERRACTION +/4. MAKE VT AND FF SIMULATION INDEPENDENT OF TAB + + DECIMAL +VERSN= 5 / VERSION NUMBER - CHANGE WITH EVERY EDIT + OCTAL / LAST EDIT 12-FEB-76 + IN= 6200 /INPUT BUFFER AT 06200 +OUT= 5200 /OUTPUT BUFFER AT 05200 +ZMAX= 7640 /MAX 4000[10] CHARACTERS IN TEXT BUFFER +QMAX= 3720 /MAX 2000[10] Q-REGISTER CHARS IN 8K +Q12MAX= 5600 /MAX 2944[10] Q-REGISTER CHARS IN 12K +CHNSTR= 46 /38 CHARACTER STRING PASSED ON CHAIN + +TWO= CLA CLL CML RTL +MTWO= CLA CLL CMA RAL +MTHREE= CLA CLL CMA RTL +AC3777= CLL STA RAR +SCPBIT= 7726 + /THINGS WE WOULD LIKE TO ADD: + +/:ER +/:EB +/NV +/@^A +/FR +/-S +/::S +/^EQ +/M,NS +/[Q +/]Q +/NON-EXACT SEARCH MODE +/*N +/ERFILESPEC/S FOR SUPERTECO +/^N +/CHECK FOR $ ON NI$ +/CHECK INTO SEARCHES IN ITERATIONS +/ERR MSG ON EA, EP +/NV=(1-N)TNT +/^C TRAP +/:X + +/THINGS FOR -11: +/^R +/3EH +/M,ND +/ET BIT 15 SHOULD BE LOWER +/ECHO OF NULL + /***************************************** +/ TECO ERROR MESSAGES: +/***************************************** + +/ TECO ERROR MESSAGES CONSIST OF A QUESTION MARK AND THREE LETTERS +/ TYPING "?" IMMEDIATELY AFTER AN ERROR MESSAGE PRINTOUT PRINTS +/ THE CURRENT COMMAND LINE UP TO THE ERROR CHARACTER. + +/1 ?ILL ILLEGAL COMMAND +/2 ?UTC INCOMPLETE COMMAND (PDL NOT EMPTY AT END OF COMMAND STRING) +/3 ?IQN NON-ALPHANUMERIC Q-REGISTER NAME +/4 ?PDO PUSHDOWN OVERFLOW (MACROS & ITERATIONS NESTED TOO DEEPLY) +/5 ?MEM TEXT BUFFER OVERFLOW +/6 ?STL SEARCH STRING TOO LARGE ( >31 CHARS) +/7 ?ARG NUMBER MISSING BEFORE COMMA +/ OR TWO ARGUMENTS SPECIFIED TO D +/ OR 3 NUMERIC ARGUMENTS +/8 ?IFN ILLEGAL FILE NAME IN "ER","EW" OR "EB" COMMAND +/9 ?SNI SEMICOLON ON COMMAND LEVEL +/10 ?BNI ITERATION CLOSE (>) WITHOUT MATCHING OPEN (<) +/11 ?POP ATTEMPT TO MOVE POINTER OUTSIDE OF TEXT BUFFER +/12 ?QMO Q-REGISTER STORAGE OVERFLOW +/13 ?UTM INCOMPLETE COMMAND (PDL NOT EMPTY AT END OF MACRO) +/14 ?OUT OUTPUT FILE TOO BIG OR OUTPUT PARITY ERROR +/15 ?INP PARITY ERROR ON INPUT FILE +/16 ?FER FILE ERROR: CAN MEAN EITHER +/ A) INPUT FILE NOT FOUND ON "ER" COMMAND +/ B) CANNOT ENTER OUTPUT FILE ON "EW" OR "EB" COMMAND +/ C) DEVICE SPECIFIED FOR FILE DOES NOT EXIST +/ D) "EB" COMMAND GIVEN ON NON-FILE-STRUCTURED DEVICE +/17 ?FUL OUTPUT COMMAND WOULD HAVE OVERFLOWED OUTPUT FILE +/ [PANIC MODE] +/18 ?NAY NUMERIC ARGUMENT SPECIFIED WITH Y COMMAND +/19 ?IEC E FOLLOWED BY AN ILLEGAL CHARACTER +/20 ?IQC " FOLLOWED BY AN ILLEGAL CHARACTER +/21 ?NAE NO NUMERIC ARGUMENT TO THE LEFT OF AN = +/22 ?NAU NO NUMERIC ARGUMENT TO THE LEFT OF A U +/23 ?NAQ NO NUMERIC ARGUMENT TO THE LEFT OF A " +/24 ?SRH FAILING SEARCH AT COMMAND LEVEL +/25 ?NAP NEGATIVE OR ZERO ARGUMENT TO P +/26 ?NAC NEGATIVE ARGUMENT TO COMMA +/27 ?NYI CASE SUPPORT NOT IMPL (USE W FOR WATCH) +/28 ? +/29 ?NAS NEGATIVE OR ZERO ARGUMENT WITH A SEARCH +/30 ?WLO WRITE LOCKED SYSTEM DEVICE +/31 ?IFC F FOLLOWED BY AN ILLEGAL CHARACTER +/32 ?YCA Y (OR _) COMMAND ABORTED BECAUSE DATA WOULD BE LOST +/33 ?CCL CCL NOT FOUND OR EG ARGUMENT TOO LONG +/34 ?XAB EXECUTION ABORTED BY ^C +/35 ?NYI CASE SUPPORT NOT IMPL (USE EO FOR VERSION) +/36 ?NFO ATTEMPT TO OUTPUT WITHOUT OPENING AN OUTPUT FILE + / CORE LAYOUT AND OVERLAY STRUCTURE + +/ BUFFER STRUCTURE: + +/BUFFER 8K VERSION 12K VERSION + +/INPUT BUFFER 06200-07200 25600-27600 +/OUTPUT BUFFER 05200-06200 05200-07200 +/Q-REG STORAGE OVER TEXT BFR 20000-25600 + +/ HANDLER LOCATIONS: + +/HANDLER PDP-8 VERSION PDP-12 VERSION + +/INPUT HANDLER 7200-7600 7200-7400 +/OUTPUT HANDLER 4000-4400 7400-7600 +/SIZE OF HNDLR 2-PAGES 1-PAGE +/DISPLAY CODE NONE 4000-4400 + +/ OVERLAY STRUCTURE + +/ALL OVERLAYS ARE TWO PAGES LONG AND RESIDE IN CORE +/AT LOCATIONS 3200-3600 WHEN RUNNING. THE I-OVERLAY +/INITIALLY RESIDES IN THESE LOCATIONS. + +/OVERLAY BLOCK INITIAL LOCATION CONTENTS + +/ I-OVERLAY 40 3200-3600 ER,EW,EB +/ Q-OVERLAY 41 5600-6200 ", O, SKPSET +/ E-OVERLAY 42 6200-6600 ERROR MESSAGE PROCESSOR +/ X-OVERLAY 43 6600-7200 EX,EC,EG,EK,EF (EA,EI,EN,EP) +/ F-OVERLAY 44 7200-7600 ED,EH,EO,ES,ET,EU (EV) + + IOVRLC=40 + QOVRLC=41 + EOVRLC=42 + XOVRLC=43 + FOVRLC=44 + + IOVRLY=3200 + QOVRLY=3201 + EOVRLY=3202 + XOVRLY=3203 + FOVRLY=3204 + +/EACH OVERLAY IS ASSIGNED A LOCATION AT THE BEGINNING OF PAGE 3200. +/IF THIS LOCATION IS 0 (AS IT ALWAYS IS), THEN THAT OVERLAY IS NOT +/IN CORE. IF IT IS NOT 0, THEN THIS LOCATION CONTAINS THE +/BLOCK NUMBER TO READ IN THAT OVERLAY. +/THUS EACH OVERLAY HAS POINTERS TO ALL THE OTHER OVERLAYS. + MEMLOC=2000 + +/IN 16K MACHINES, FIELD 3 IS USED TO HOLD OVERLAYS + +/NAME BLOCK MEMORY + +/I 40 2000 +/Q 41 2400 +/E 42 3000 +/X 43 3400 +/F 44 4000 + + +/INITIAL MEMORY LAYOUT + +/0000-3177 TECO +/3200-3577 OVERLAY AREA (INITIALLY I-OVERLAY) +/3600-3777 TECO +/4000-4377 PDP-12 DISPLAY ROUTINE +/4400-5177 TECO +/5200-5577 INITIALIZATION CODE +/5600-6177 Q-OVERLAY CODE +/6200-6577 E-OVERLAY CODE +/6600-7177 X-OVERLAY CODE +/7200-7577 F-OVERLAY CODE + +/FIELD 1: + +/4400-7377 EXTENDED ERROR MESSAGES +/ MOVES TO FIELD 3 + /** TECO KLUDGES ** /7/27/73 +/ONE OF THE REASONS WHY TECO GETS SO MANY OPERATIONS +/INTO SUCH A SMALL AMOUNT OF CORE IS THAT IT +/IS FULL OF *K*L*U*D*G*E*S*. THESE SHOULD BE KEPT IN MIND WHEN +/MODIFYING THE PROGRAM. SOME OF THEM ARE: + +/ THE "SORT" ROUTINE COMPARE LIST MUST END WITH A NEGATIVE NUMBER. +/ USUALLY A FORTITUOUS JMS OR OPR INSTRUCTION IS USED + +/ THE "SORT" JUMP LIST ENTRIES ARE TREATED AS JUMP ADDRESSES +/ IF THEY ARE POSITIVE AND SUBSTITUTE VALUES IF THEY ARE +/ NEGATIVE - THEREFORE ALL LOCS JUMPED TO MUST BE BELOW 4000 +/ ANOTHER CONSEQUENCE IS THAT "QUOTST" CANNOT BE CALLED FROM +/ ABOVE 4000 + +/ THERE ARE OTHER LOCALIZED KLUDGES - THEY CAN GENERALLY +/ BE IDENTIFIED BY THE APPEARANCE OF A DOUBLE-ASTERISK IN THE +/ COMMENTS FIELD ALONG WITH A TERSE DESCRIPTIVE COMMENT + + + +/ OS/8 EQUIVALENCES: + +JSBITS= 7746 /JOB STATUS BITS - IN FIELD 0 +OSHNDT= 7647 /OS/8 DEVICE HANDLER TABLE - IN FIELD 1 +OSDCBT= 7760 /OS/8 DEVICE CONTROL TABLE - IN FIELD 1 +CCLADR= 400 /CCL OVERLAY LOAD ADDRESS +CCLOVL= 67 /BLOCK OF CCL OVERLAY +CCLOST= 602 /CCL OVERLAY SECONDARY START ADDRESS + *0 +NAME, ZBLOCK 4 /NAME BUILD BUFFER - MUST BE AT LOCATION 0 + /LOCS 4,5&6 ARE RESERVED SO WE CAN USE OS/8 ODT + + *10 /CONSTANTS & NON-INDIRECT TEMPS STORED IN AUTO-XRS! +QUOTE, 33 /QUOTE CHAR - SINGLE WORD SORT LIST +ERR01, +SERR, ERR /END OF LIST +INRSIZ, 2 /4 IF 12K MACHINE +NUMLNS, 3 /NUMBER OF LINES (+ AND -) TO DISPLAY ON VR12 SCOPE +DX, 7577 /DISPLAY XR +SXR, QPUT12-1/XR USED BY SEARCH PROCESSOR +INXR, ASR33-1 /XR USED TO UNPACK INPUT BUFFER +XR, ASR35-1 /WORK XR + +NMT, 0 /USED AS NUMBER TEMP AND SEARCH FAIL FLAG +CFLG, 0 /COMMA FLAG +CLNF, 0 /COLON FLAG +TFLG, 0 /TRACE FLAG +NFLG, 0 /NUMBER FLAG +QFLG, 0 /QUOTED STRING FLAG +M, 0 /NUMBER ARGS +N, 0 +NLINK, 0 /LINK AFTER ARITH OPERATIONS - TESTED BY "A AND "B +CHAR, 0 /CHARACTER BUFFER +ITRST, 0 /ITERATION FLAG +ITRCNT, 0 /ITERATION COUNT +MPDL, 0 /MACRO FLAG +SCHAR, 0 /LAST CHAR SORTED +FFFLAG, 0 /FORM FEED FLAG - 7777 IF FORM FEED SEEN ON THIS READ +REND, 0 /INPUT END-OF-FILE FLAG +SCANP, 0 /COMMAND LINE EXECUTION POINTER +OSCANP, 0 /BACKUP FOR SCANP +PDLP, PDLBEG /PUSH-DOWN-LIST POINTER +QCMND, 0 /COMM LINE OR MACRO POINTER +P, 0 /CURRENT PNTR TO TEXT BUFFER +ZZ, 0 /END OF TEXT BUFFER POINTER +Q, 0 /EXTRA BUFFER POINTERS + IFNZRO .-47 <_ERROR_> +R, 0 +QP, 0 /Q REGISTER POINTER +QZ, CHNSTR /END OF Q-REG POINTER +Z7, +CTLBEL, 7 +CACR, 15 /CR +CAHT, 11 /HT +CAAM, 33 /ALT MODE +CAFF, 14 /FF: END OF PAGE + 13 /VT +CALF, 12 /LF +ERR07, +NERR, ERR /END OF LIST +RADIX, DRAD /RADIX TABLE POINTER - DRAD OR ORAD + MQ, 0 +DVT1, 0 +ODEV, 0 /OUTPUT DEVICE NUMBER +OUTHND, 0 +INHND, 0 +EBFLG, 0 /EDIT BACKUP FLAG +QNMBR, 0 /LAST Q-REG REFERENCED +QBASE, 0 /BASE OF CURRENT COMMAND LINE +QLENGT, 0 /LENGTH OF CURRENT COMMAND LINE +QPTR, 0 /POINTER TO Q-REGISTER CONTROL BLOCK +ICRCNT, 0 /INPUT DOUBLEWORD COUNTER +OCRCNT, 0 /OUTPUT " +OPTR2, 0 /OUTPUT BUFFER POINTER +INRCNT, 0 /NUMBER OF INPUT RECORDS LEFT +OCMDLN, 0 /LENGTH OF OLD COMMAND LINE +CDT, 0 +KTYPE, TYPE /*ET SET TO PUTT IF NO CONVERSION +TEMPT, 0 /TEMP. GET RID OF WHEN FIND ROOM ON PAGE +MEMSIZ, 0 /HIGHEST MEMORY FIELD IN BITS 9-11 +LASTC, 0 /LAST CHARACTER GOTTEN OUT OF COMMAND LINE + +/NFLG: 0'ED BY COMMANDS WHICH EAT ARGUMENTS OR DON'T RETURN +/ VALUES; SUCH AS C,R,J,L,^A,X,$,',>,'U,G,O AND +/ NON-COLON MODIFIED SEARCHES +/ SET TO -1 TO INDICATE THATWWE'VE SEEN A NUMBER + /TECO PSEUDO-OPERATIONS + +PUSH= JMS I .; PUSHXX +POP= JMS I .; POPXX /** MUST BE ONE MORE THAN "PUSH" +PUSHJ= JMS I .; PUSHJY +POPJ= JMP I .; POPJXX +PUSHL= JMS I .; PUSHLX +POPL= PUSHL /** POPL CALLED WITH POSITIVE AC + +ERR= JMS I .;ERROR,ERRXX +SORT= JMS I .; SORTB +RESORT= JMP I .; SORTA2 +SCAN= JMS I .; SGET +LISTEN= JMS I .; TYI +TYPE= JMS I .; TYPCTV +OUTPUT= JMS I .;OUTR, ERRXX /** MUST BE ONE MORE THAN "TYPE" + /PROBABLY NOT ANY MORE (19-JUN-77) +CRLF= JMS I .; TYCRLF +GETQ= JMS I .; GETQX +SKPSET= JMS I .; SETSKP +NCHK= ISZ NFLG /USED TO BE A SUBROUTINE CALL +CTCCHK= JMS I .; CHKCTC +BZCHK= JMS I .; CHKBZ +QCHK= JMS I .; CHKQF +QSKP= JMS I .; QOVER +QREF= JMS I .; QREFER + QSUM= JMS I .; QSUMR +QPUT= JMS I .; QPUTS +QUOTST= JMS I .; QTST +SETCMD= JMS I .; CMDSET +GETN= JMS I .; NGET +ADJQ= JMS I .; QADJ +MQLDVI= JMS I .; DVIMQL +UPPERC= JMS I .; CUPPER +SCANUP= JMS I .; SCUPPR +TSTSEP= JMS I .; SCHSRT +DISPLY= JMS I .; DSPLAY +NOTRCE= JMS I .; SAVTRA +ENTRCE= JMS I .; RESTRA +OVRLAY= JMS I .; OVERLY +GETNUM= JMS I .; NUMGET /GET 13 BIT NUMBER INTO L,AC +PUTT= JMS I .; TPUT + PAGE + /ENTER HERE TO USE AN ASR33 AS THE TELETYPE + +TECO, ISZ I SPUT /IF CALLED BY "R" OR "RUN" - CHANGED TO TLS +TECO1, JMP I COMPAR /IF CALLED VIA "CHAIN" - CHANGED TO "JMP T0A" +TBEL, JMS COMPAR /HERE ON ^G - 2 ^G'S KILL ENTIRE COMMAND + +T0, CRLF +T0A, TAD (PDLBEG + DCA PDLP /INITIALIZE PUSHDOWN LIST +T1, TAD PDLP + TAD (-PDLBEG + SZA CLA +ERR02, ERR /ERROR - PUSHDOWN LIST DID NOT BALANCE + TAD (45 + QREF /SET UP POINTERS TO COMMAND LINE + TAD I [QPNTR + DCA OCMDLN /SAVE OLD COMMAND LINE LENGTH + /** SAVE ONLY IF < 20? + ADJQ /REDUCE COMMAND LINE LENGTH TO 0 + CLL + PUSHJ + NRET /CLEAR NUMBER AND LAST OPERATOR + DCA CFLG + DCA MPDL /DELETE MACRO FLAG + DCA ITRST /ALSO ITERATION FLAG, + DCA CLNF /AND COLON FLAG + PUSHJ /KILL QUOTE FLAG + ZROSPN /KILL QUOTE AND NUMBER FLAGS AND SCAN POINTER + KCC /KILL ^O IF IN KEYBOARD BUFFER + DCA I (CHOOPS /KILL FATAL ERROR RETURN + TAD [52 + SKP +ROCMND, JMS I (BACKUP /BACK UP AND GET LAST CHAR + TYPE +T2M1, DCA CHAR /KILL CHAR TO PREVENT SPURIOUS DOUBLE CHARACTERS +T2, LISTEN /BUILD COMMAND LINE + SORT + COMLST + COMTAB-COMLST +T2A, DCA CHAR + JMS SPUT /PUT INTO C.L. BUFFER + JMP T2 /GO GET ANOTHER + TCTLU, TAD SCHAR + TYPE /PRINT "^U" +TCTLUP, JMS I (BACKUP + TAD [-12 /CHECK FOR LF + SZA CLA + JMP TCTLUP /LOOP UNTIL LF + IAC + JMP I (TSP9 + +TCRLF, TAD CACR /CR IN COMM LINE + DCA CHAR + JMS SPUT /PUT INTO COMM LINE + TAD CALF /THEN PUT IN A LF + JMP T2A /AND GET SOME MORE + /COMMAND EXECUTION LOOP + +TALTM, JMS COMPAR /2ND ALTM STARTS EXECUTION + CRLF /START COMM EXECUTION +CHTECO, TAD (45 /NUMBER OF INPUT COMMAND Q-REGISTER + SETCMD /SET UP THE INPUT LINE AS THE CURRENT COMMAND LINE +T6, SCANUP +T6A, DCA CHAR /SAVE COMMAND CHAR + TAD CHAR + TAD (CDSP /ADD BASE OF DISPATCH TABLE + DCA T7 /LOOK UP ENTRY IN + TAD I T7 /COMMAND DISPATCH TABLE + DCA T7 /CALL RECURSIVELY + CLL + PUSHJ +T7, 0 /CALL TO ROUTINE + CTCCHK /CHECK FOR ^C - ** AC MAY NOT BE 0 HERE ** + CLA /CTCCHK LEAVES AC NON-ZERO + TAD NFLG + SPA CLA + JMP T6 + DCA N /IF WE ARE NOT ENTERING A NUMBER + DCA NLINK /SET 13-BIT N TO 0 + JMP T6 /KEEP INTERPRETING +TQMK, TAD I ERROR + SNA CLA /ERROR ROUTINE ENTRY POINT NON-ZERO? + RESORT /NO + STA /AN ERROR PRINTOUT + DCA QLENGT /SET QLENGT BIG SO WE CAN ACCESS ENTIRE LINE + NOTRCE /TURN TRACE OFF + SCAN + TYPE /PRINT OUT THE LINE WHICH CAUSED THE ERROR + ISZ I ERROR /UP TO THE ERROR CHAR ITSELF + JMP .-3 + JMP T0 /RE-INITIALIZE + +CHUA, POP /^ COMMAND - POP OFF RETURN ADDRESS + SCANUP /GET THE NEXT CHARACTER IN UPPER CASE + AND [77 /MAKE IT A CONTROL CHARACTER + JMP T6A /USE IT INSTEAD OF THE ^ + COMPAR, TCINIT /LOOK FOR DOUBLED COMM LINE CHARS + TAD SCHAR /MOST RECENT + CIA + TAD CHAR /PREVIOUS + SZA CLA + RESORT /NOT THE SAME + JMS SPUT /PUT THE CHAR INTO THE COMMAND LINE AND ECHO IT + JMP I COMPAR /SAME-SPECIAL HANDLING + +SPUT, JTECO /PUT CHAR INTO COMM LINE + TAD QZ + DCA QP + TAD CHAR + QPUT /STORE CHARACTER AWAY + TAD I [QPNTR + IAC + ADJQ /ADJUST COMMAND LINE REGISTER LENGTH + DCA I ERROR /CLEAR "ERROR JUST OCCURRED" FLAG + TAD CHAR + TYPE /TYPE THE INSERTED CHARACTER + TAD I [QPNTR + TAD CALF /12 + SPA CLA + JMP EMERG /TYPE BELL IF WITHIN 12 CHARACTERS OF 2048 + CLL + TAD QZ + TAD QLIMIT + SNL CLA /TYPE A BELL IF THE LINE IS + JMP I SPUT / WITHIN 12 CHARS OF OVERFLOW +EMERG, TAD Z7 + TYPE + JMP I SPUT +QLIMIT, 12-QMAX + PAGE + /Q REGISTER PACK AND UNPACK + /THE Q-REGISTERS ARE STORED IN THE UPPER 4 BITS OF THE WORDS + /WHICH HAVE THE TEXT BUFFER CHARACTERS IN THEIR LOWER 8 BITS. + /THEREFORE EACH Q-REGISTER CHARACTER TAKES 2 WORDS. + +QPUTS, 0 /STORE THROUGH POINTER "QP" AND BUMP POINTER + CLL RTL + RTL + DCA GETQX /SAVE CHARACTER + TAD QP + CLL RAL + DCA CHKCTC /COMPUTE CORE POINTER = 2*QP + CDF 10 + TAD GETQX + JMS ST4BTS /STORE HIGH ORDER 4 BITS + ISZ CHKCTC + TAD GETQX + CLL RTL + RTL + JMS ST4BTS /STORE LOW ORDER 4 BITS + CDF 0 + ISZ QP /BUMP POINTER + JMP I QPUTS + +GETQX, 0 + CLL RAL + DCA CHKCTC /COMPUTE CORE POINTER = 2*AC + CDF 10 + TAD I CHKCTC + AND [7400 /FETCH HIGH ORDER + ISZ CHKCTC + DCA QPUTS + TAD I CHKCTC + AND [7400 /FETCH LOW ORDER + CLL RTR + RTR + TAD QPUTS /COMBINE TO FORM CHARACTER + RTR + RTR + CDF 0 + JMP I GETQX + +ST4BTS, 0 + AND [7400 + DCA POPXX + TAD I CHKCTC + AND [377 + TAD POPXX + DCA I CHKCTC /STORE HIGH ORDER + JMP I ST4BTS + CHKCTC, 0 /SUBROUTINE TO CHECK FOR ^C IN KEYBOARD + CLA OSR /** AC MAY NOT BE 0 ON ENTRY + DCA QPUTS /GET LOCATION FROM SWITCH REGISTER + TAD I QPUTS + 7421 /DISPLAY INDICATED LOCATION IN MQ +C7600, 7600 /JUST IN CASE THERE IS NO MQ + KSF + JMP I CHKCTC /NO CHAR IN KEYBOARD BUFFER - EXIT + KRS + AND [177 /KILL PARITY BIT + TAD [-20 /^P OUGHT TO GO AWAY + SZA + TAD CACR + SZA /^C? + JMP I CHKCTC /NO - RESUME WITH NON-ZERO AC +ERR34, ERR /^C, EXECUTION ABORTED + +CTLC, TSF + JMP CTLC /WAIT FOR TELETYPE TO DIE DOWN + JMP I C7600 /RETURN TO OS/8 + + +POPJXX, DCA GETQX /POPJ ROUTINE + POP +POPJXY, DCA POPXX + TAD GETQX + JMP I POPXX + /PUSH DOWN LIST ROUTINES + +POPXX, 0 /POP ROUTINE + CLA CMA + TAD PDLP + DCA PDLP + TAD I PDLP + JMP I POPXX + +PUSHXX, 0 /PUSH ROUTINE (DOESN'T AFFECT LINK) + DCA I PDLP + ISZ PDLP /BUMP PUSHDOWN POINTER + TAD PDLP /CHECK FOR EXACTLY FULL - THIS ALLOWS THE + TAD (-PDLEND + SNA CLA /** ERROR ROUTINE TO DO A PUSHJ +ERR04, ERR /FULL - REPORT IT + JMP I PUSHXX + +PUSHJY, 0 /PUSHJ ROUTINE (DOESN'T AFFECT LINK) + DCA GETQX + IAC /** LINK SHOULD BE PRESERVED ON EXIT + TAD PUSHJY + PUSH + TAD I PUSHJY + JMP POPJXY + +PUSHLX, 0 /PUSH AND CLEAR A LIST + CLL + SMA /PUSH LIST IF AC<0, POP IT IF >=0 + CMA STL + DCA PUSHJY /SET COUNTER + RAL /** DEPENDS ON FACT THAT POP=PUSH+1 ** + TAD PUSHYY + DCA PUSHYX /STORE EITHER A "PUSH" OR A "POP" + POP /SAVE RETURN POINTER + DCA CHKCTC +PUSHLP, TAD I PUSHLX + DCA GETQX + TAD I GETQX +PUSHYX, PUSH /PUSH OR POP + DCA I GETQX /IF PUSHYX=PUSH, THIS ZEROES THE PUSHED LOCATION + ISZ PUSHLX + ISZ PUSHJY + JMP PUSHLP + TAD CHKCTC /RESTORE RETURN POINTER +PUSHYY, PUSH + JMP I PUSHLX + TPUT, 0 /TELETYPE OUTPUT + DCA TEMPT +TPUTX, CTCCHK /CHECK FOR ^C OR ^P + TAD (3-17 /INHIBIT PRINTING AS LONG AS THERE + SNA /IS A ^O IN THE KEYBOARD BUFFER. + JMP I TPUT + TAD (17-23 /CHECK FOR ^S + SNA CLA + JMP TPUTX + TSF /WAIT FOR TELETYPE FLAG +TSFWT, JMP .-1 /WHILE WAITING, DISPLAY TEXT ON SCOPE + TAD TEMPT + TLS + CLA + JMP I TPUT + PAGE + /POINTER MOVING COMMANDS - C,R,J,L + +CHRJ, DCA NFLG /COMMAND J + GETNUM /CAUSE NEG ARGUMENT TO GIVE A POP + JMP CLOQ + +CHRR, GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1 +CHR1, CML CIA /NEGATE 13-BIT NUMBER + SKP +CHRC, GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1 + TAD P /OFFSET RELATIVE TO . +/ +/ *** LINK NOT ALWAYS SET RIGHT +/ +CLOQ, BZCHK /SEE IF IN RANGE B,Z + DCA P /IN RANGE +DNN3, CDF 0 + POPJ + +CHRL, GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1 +CHRL1, CDF 10 + SZL SNA + JMP LNEG + CIA + DCA CDT +CHRLP, TAD P + CIA + TAD ZZ + SNA CLA /IF WE ARE AT THE END OF THE BUFFER, + JMP DNN3 /RETURN + JMS I (CHLCMP /COMPARE CHARACTER AGAINST LINE FEED + ISZ P + JMP CHRLP /KEEP GOING UNTIL WE GET THERE OR OVERFLOW BUFFER +LNEG, TAD (-1 + DCA CDT +CHRLM, CLA CMA CLL + TAD P + DCA P /MOVE POINTER BACKWARD 1 + SNL + JMP I (CHRLI /OOPS - PAST THE BEGINNING OF THE BUFFER - RETURN + JMS I (CHLCMP /COMPARE CHARACTER AGAINST LINE FEED + JMP CHRLM /NOT SATISFIED YET - KEEP LOOPING + +NUMGET, 0 /PUT 13-BIT NUMBER IN L,AC + TAD NLINK + CLL RAR + TAD N + JMP I NUMGET + /D COMMAND AND PART OF ADJUST ROUTINE + +CHRD, ISZ CFLG /WAS THERE A COMMA? + SKP /NO + JMP NERR /YES, 2 ARGS TO D + GETN /GET LAST NUMBER, DEFAULT=(+ OR -)1 + SNL /SIGN BIT OF 13-BIT NUMBER IS IN LINK + JMP PLUSND /+ND + CLL CIA + DCA CDT /-ND + TAD CDT + PUSHJ /DO (-)NC(+)ND + CHR1 + TAD CDT + JMP PLUSND + +ADJ, SNA /ADJUST BUFFER + OR - N CHARS + /TEST FOR NOTHING + POPJ /GO AWAY + STL /MOVE UP N CHARACTERS + TAD ZZ /ADD TO MAX CHARACTER + DCA R /NEW HIGHEST + TAD R /SEE IF TOO HIGH + TAD (-ZMAX + SNL SZA CLA /TWO PLACES FOR OVERFLOW THERE +ERR05, ERR + TAD ZZ + DCA Q + TAD R + DCA ZZ + CDF 10 +UPNL, TAD Q + CIA + TAD P + SNA CLA /FINISHED? + JMP DNN3 /YES + CMA + TAD Q + DCA Q + CMA + TAD R + DCA R + TAD I Q /GET A CHAR +L12K1, AND [377 /JMP .+5 IF 12K + DCA CHLTMP + TAD I R /BE CAREFUL NOT TO + AND [7400 /DESTROY THE HIGH- + TAD CHLTMP /ORDER 4 BITS +J12K1= JMP . + DCA I R /AND PUT IT IN THE LOW PART OF THE TARGET WORD + JMP UPNL + /K COMMAND AND MORE OF ADJUST ROUTINE + +CHRK, JMS I (NLINES /CONVERT LINES TO CHARS + DCA CDT + TAD M /SET POINTER + DCA P /LOWER ARG + TAD CDT +PLUSND, SNA + POPJ /IGNORE 0D +ADJ2, CLL + TAD P /MOVE DOWN N CHARACTERS + SZL + CLA CMA /DETECT GROSS OVERFLOWS + /** CHECK + BZCHK + DCA Q /N IN AC + TAD P + DCA R + CDF 10 +DNN1, TAD ZZ + CIA + TAD Q + SNA CLA /FINISHED? + JMP DNN2 + TAD I Q /GET A CHAR +L12K2, AND [377 /JMP .+5 IF 12K + DCA CHLTMP + TAD I R /BE CAREFUL NOT TO + AND [7400 /DESTROY THE HIGH- + TAD CHLTMP /ORDER 4 BITS +J12K2= JMP . + DCA I R /AND PUT IT IN THE LOW PART OF THE TARGET WORD + ISZ Q + ISZ R + JMP DNN1 +DNN2, TAD R + DCA ZZ + JMP DNN3 + +CHLTMP, 0 + +/GO TO ADJ TO MOVE UP TEXT +/GOTO ADJ2 TO MOVE DOWN TEXT +/IN EITHER CASE, AC CONTAINS NUMBER OF CHARS TO MOVE (0-4095) + +ERR27, ERR /^W +ERR35, ERR /^V + PAGE + /SEARCH SUBROUTINE - CALLED BY N, S, AND _ COMMANDS + +SEARCH, 0 + DCA REPFLG /AC MAY BE NON-0 TO ALLOW A REPLACE + GETN + SZL SNA +ERR29, ERR /NEG OR 0 ARG TO SEARCH + CIA + DCA CSN /GET NUMBER OF OCCURRANCES TO SEARCH FOR + QCHK /GET REPLACEMENT FOR ALTMODE, IF ANY + TAD (STABLE-1 + DCA SXR /INITIALIZE XR + TAD [-40 + DCA CSP +SGTLP, QUOTST /GET A CHARACTER FROM THE SEARCH STRING + JMP SCHQUO /OOPS- NO MORE + SORT /SEE IF ITS SPECIAL + SCHLST + SCHTAB-SCHLST +SSTCHR, DCA I SXR /STORE THE CHAR IN THE SEARCH BUFFER + ISZ CSP + JMP SGTLP /LOOP +ERR06, ERR /OOPS - SEARCH BUFFER FULL! + +SCHQUO, TAD CSP + TAD [40 /A NULL SEARCH STRING MEANS USE THE + SZA CLA /PREV CONTENTS OF THE SEARCH BUFFER, ELSE + DCA I SXR /STORE TERMINATING 0 AND BEGIN THE SEARCH +CSST, TAD P + DCA CSP + JMP CSF1 +SCHINV, TAD CSNCL /^N, INVERT SKIP SENSE + DCA CSWT + +CSL, TAD I SXR /GET A CHAR FROM THE SEARCH BUFFER + SPA SNA + JMP SCCOMD /NEGATIVE CHARS AND 0 ARE SPECIAL + CIA + CDF 10 + TAD I P + AND [377 +CSWT1, CDF 0 +CSWT, SZA CLA + JMP CSF /FAIL TO MATCH ON THIS CHARACTER + ISZ P +CSG, TAD CSZCL + DCA CSWT /RESTORE SEARCH TEST + TAD ZZ + CMA + TAD P +CSZCL, SZA CLA /CHECK FOR END OF BUFFER + JMP CSL /NO + DCA P +CSZ, DCA NMT + JMP I SEARCH + /SEARCH SUBROUTINE - CONTINUED + +SCCOMD, DCA .+1 /SPECIAL CHARACTERS ARE JUMPS OR 0 + HLT /0 FALLS THROUGH INTO TERMINATION CODE + ISZ CSN /GET NTH OCCURRENCE + JMP CSF /MORE TO GO + CMA + JMP CSZ /GOT IT +CSF, ISZ CSP /INDEX P +CSF1, TAD (STABLE-1 + DCA SXR /INITIALIZE AUTO - INDEX + TAD CSP + DCA P + JMP CSG + +/SEARCH STRING MODIFIERS ^N,^Q,^S, AND ^X + +SCHTAB, JMP SCHINV /^N: ANYTHING BUT + SCHCTQ /^Q: LITERALLY + JMP SCHSEP /^S: ANY SEPARATOR + JMP CSWT1 /^X: ANYTHING + +SCHCTQ, SCAN /GET THE NEXT CHARACTER + JMP SSTCHR /AND STORE IT IN PLACE OF THE ^Q + +SCHSEP, CDF 10 /^S, LOOK FOR SEPARATOR + TAD I P + AND [377 + TSTSEP /SHARED SORTING ROUTINE + SKP + CMA /SET AC = -1 IF NON-SEPARATOR + JMP CSWT1 /GO CHECK RESULTS + +FN, DCA CNXT + STA + JMP CHRN1 + /S,N AND _ COMMANDS (ALSO FS AND FN) + +FS, STA /CHANGE S TO FS +CHRS, JMS SEARCH /S COMMAND - DO A SEARCH +CHKREP, ISZ REPFLG /WAS THERE A REPLACE SPECIFIED? + JMP CHKCLN /NO - CHECK FOR COLON + QSKP /COUNT UP STRING 2 + TAD NMT + SMA CLA + JMP CHKCLN /FAILED, SET VALUE & EXIT + TAD CSP /FIGURE OUT OFFSET TO FAKE OUT "I" ROUTINE + CIA /SO THAT WE HAVE THE RIGHT INSERTION COUNT + TAD P /BUT THE SIZE OF THE HOLE WE NEED + DCA DVT1 /IS DECREASED BY THE LENGTH OF THE SEARCH STRING. + TAD CSP /RESET + DCA P /TEXT POINTER + PUSHJ /INSERT + CIL2 /STRING 2 +CHKCLN, DCA REPFLG /CLEAR REPLACE FLAG + TAD NMT + PUSHJ /FORM NUMBER FROM "NMT" + NNEW13 /(APPLYING OPERATOR, IF NECESSARY) + ISZ CLNF /WAS THERE A COLON ON THIS SEARCH? + SKP /NO + JMP I [IREST /YES - GO AWAY REGARDLESS OF RESULTS + DCA CLNF /RESET COLON FLAG TO 0 + ISZ N /DID WE SUCCEED? + JMP I (CFSI /NO - SIMULATE A SEMICOLON + DCA NFLG /YES - HOWEVER, NO COLON MEANS NO RESULT + JMP I [IREST + +CHBA, CLA IAC /_ COMMAND +CHRN, DCA CNXT /N COMMAND - SET OUTPUT FLAG +CHRN1, JMS SEARCH /DO A SEARCH + TAD REND + CIA + TAD ZZ +CSNCL, SNA CLA /HAVE WE REACHED END-OF-FILE? + JMP CHKREP /YES - STOP AND ASSIGN VALUE + TAD NMT + SZA CLA /HAVE WE SUCCEEDED? + JMP CHKREP /YES - STOP AND ASSIGN VALUE + TAD CNXT + JMS I [NXTBUF /GET NEXT BUFFER + JMP CSST /KEEP SEARCHING - RETURN TO CHRN+2 +CNXT, 0 /OUTPUT FLAG +CSP, 0 /TEMP P +CSN, 0 +REPFLG, 0 /REPLACE FLAG (-1 MEANS REPLACE) + PAGE + /NUMBER PROCESSORS: +/COMMANDS B,H,Z,. AND DIGITS + + +NMBR, TAD CHAR /NUMBER FOUND IN COMMAND STRING + TAD [-60 +NMBR2, DCA NMT + CLL + NCHK /CHECK NUMBER FLAG + JMP NNEW /NOT UP, NEW OPERAND + TAD DOPR + DCA NOPR /USE SAME OPERATOR AS FOR THE PREVIOUS DIGITS + TAD NP /MULTIPLY PREV DIGITS BY 10 + CLL RTL +NMRBAS, TAD NP /REPLACED BY "NOP" FOR OCTAL + CLL RAL /** COULD CHECK FOR OVERFLOW IN THIS AREA +NNEW, TAD NMT +NCOM, DCA NP /CURRENT NUMBER +/ RAL +/ DCA NEWLNK +/ TAD NEWLNK /GET NEW LINK +/ CLL RAR /INTO LINK +NCOM2, TAD NP + +NOPR, SKP /DISPATCH JUMP FOR OPERATOR + CML CIA + TAD NACC /CURRENT EXPRESSION VALUE + DCA N + RAL + TAD NACCLK /ADD IN OLD LINK + RAR + SKP CLA +NRET, DCA N + RAL + DCA NLINK /SAVE LINK FOR POSSIBLE COMPARISON TEST + TAD NOPR + DCA DOPR + TAD NULLOP + DCA NOPR /SET OPERATOR TO NULL OP + STA + JMP DCPOPJ /SET NUMBER FLAG AND EXIT + CCPR, STL CLA RTL /2 + POPL + NOPR + NACC + NACCLK + GETNUM + JMP NCOM /COMBINE OLD NUMBER AND PARENTHESIZED RESULT + +COPR, MTHREE + PUSHL + NACCLK + NACC + NOPR + DCA N + DCA NLINK + JMP CPLS /CLEAN OUT INSIDE PARENS + +CDOT, TAD P /COMMAND . +/** COULD CAUSE ERROR IF NFLG SET + JMP NCOMCL +/NEWLNK, 0 + /COMMANDS &,#,/,*,-,+,(,) + +CAMP, MTWO /*K* LOGICAL AND ** +CNBS, TAD (NIOR-NDIV /LOGICAL OR +CVIR, TAD (NDIV-NMPY /DIVISION +CAST, TAD (NMPY&177+5200-7400 /MULTIPLICATION +CMIN, TAD [7400-SKP /SUBTRACTION +CPLS, TAD (SKP /ADDITION + DCA NOPR /COMMON TO ALL NUMERIC OPERATORS + TAD N + DCA NACC + TAD NLINK + DCA NACCLK + DCA NP +DCPOPJ, DCA NFLG /CLEAR NUMBER FLAG + POPJ + +NAND, AND NACC /BITWISE AND OF BINARY NUMBERS + JMP NRET /** KEEP THESE TWO OPNS TOGETHER +NIOR, CMA /BITWISE OR OF BINARY VALUES + AND NACC + TAD NP +NULLOP, JMP NRET + +NACCLK, 0 /LINK OF EXPRESSION WITHOUT NP +NMPY, CIA /*** REALLY OUGHT TO IMPLEMENT 13-BIT MULTIPLY + DCA ND + TAD NACCLK + RAR /SET UP OLD LINK + TAD NACC + ISZ ND + JMP .-2 + JMP NRET +NACC, 0 /VALUE OF EXPRESSION WITHOUT NP +NDIV, DCA ND + TAD NACC + MQLDVI +ND, 0 + JMP NRET + /COMMANDS ^F,^^,^Z,^V, Q AND %, ^D, ^O + +CTLF, CLA OSR SKP /^F COMMAND - VALUE OF CONSOLE SWITCHES +CTUA, SCAN /^^ COMMAND - VALUE OF NEXT CHAR IN COMMAND LINE +NCOMCL, CLL + JMP NCOM /GO INTO NUMBER PROCESSOR + +/CTLZ, TAD QZ /COMMAND ^Z +/ JMP NCOM /RETURN NUMBER OF CHARACTERS IN ALL Q-REGS. +/CTLV, TAD (VERSN /^V COMMAND - RETURNS THE CURRENT VERSION NUMBER +/NCOM14, CLL +/ JMP NCOM + +CTLD, TAD [4 /SET RADIX DECIMAL +CTLO, TAD (ORAD /SET RADIX OCTAL + DCA RADIX + TAD I RADIX + DCA NMRBAS /EITHER "NOP"(8) OR "TAD NP"(10) + POPJ + +DOPR, 0 /PREVIOUS OPERATOR +NP, 0 /VALUE OF CURRENT NUMBER + +SCPTAB, BBELL + BCR + BCR /TAB + EASYRO /ALT + BFF + BVT + BLF + +CTLN, TAD REND + CMA + JMP I (NNEW13 + +CQSM, TAD TFLG + CMA /TRACE FLAG ALTERNATES BETWEEN 0 AND 7777 + DCA TFLG + POPJ + FTAB, FN + FS +FLST, 116 /FN + 123 /FS + +CHRF, SCANUP /COMMAND F + SORT + FLST + FTAB-FLST +ERR31, ERR /BAD F COMMAND + +CCLN, STA /: COMMAND - SET VALUE FLAG + DCA CLNF + POPJ /SO NEXT SEARCH WILL HAVE A NUMERIC VALUE + PAGE + /CURSOR RIGHT IS $C +/CURSOR UP IS $A +/ERASE LINE IS $K + +BUGFLG, 0 /-1 MEANS MUST RETYPE LINE ON NEXT RUBOUT + +BSP, 0 + TAD TTY10 + PUTT /TYPE BS, SPACE, BS + TAD TTY40 + PUTT + TAD TTY10 + PUTT + STA + TAD I (COLCT /FIX UP COLUMN COUNTER + DCA I (COLCT + JMP I BSP + SCOPY, JMS I (BACKUP /BACK UP ONE CHAR IN CMD LINE + TAD [-40 /LOOK AT CHAR WE BACKED OVER + SMA + JMP EASYRO /IT'S EASY TO RUB THIS ONE OUT + TAD [40 /RESTORE CHARACTER + SORT + CTLBEL + SCPTAB-CTLBEL +BBELL, CLA + JMS BSP /^X NEEDS TWO RUB OUTS +EASYRO, CLA + ISZ BUGFLG /MAYBE WE REALLY SHOULD REPRINT LINE +TTY10, SKP /NOT NECESSARY + JMP BCR /NECESSARY (PREVIOUS VERTICAL MOTION MAY + /HAVE SCROLLED OFF TOP OF SCREEN) + JMS BSP /RUB IT OUT +SCOPGO, DCA BUGFLG + JMP I (T2M1 + +BCR, JMS BELLSP /REPRINT LINE + JMS I SCAPE + 113 /ERASE LINE + JMP SCOPGO + +BLF, TAD CTLBEL /CURSOR UP 1 +BFF, TAD (-4 /CURSOR UP 8 +BVT, TAD (-4 /CURSOR UP 4 + DCA BSP + JMS I (ESCAPE + 101 /CURSOR UP + ISZ BSP + JMP .-3 +TTY40, STA + JMP SCOPGO + TSTAR, DCA BCHAR +TSPACE, TAD CHAR /LOOK AT PREVIOUS CHARACTER + TAD (-7 + SZA CLA /WAS IT ^G ? + RESORT /NO + STA /YES +TSP9, TAD I [QPNTR /REDUCE CMD LINE BY 1 CHAR + ADJQ /I.E. GET RID OF ^G + JMS BELLSP + JMP I (T2M1 + +BELLSP, 0 +BLSP1, CRLF /TAD CACR +BLSP2, NOP /TYPE + TAD MQ + DCA SAVMQ + DCA MQ + TAD QZ /START FROM END OF COMMAND LINE +LFBLP, DCA QP /AND SEARCH FOR LF + STA + TAD MQ /COUNT HOW MANY + DCA MQ + STA + TAD QP + SPA + JMP LFSTAR /AT BEGIN OF CMD LINE + GETQ + TAD BCHAR /LOOK FOR LF + SNA CLA /IS IT LF? + JMP LFB /YES + STA /NO + TAD QP /BUMP BACK ONE MORE CHAR + JMP LFBLP + +LFSTAR, CLA + TAD [52 /PRINT ANOTHER * + TYPE +LFB, PUSHJ + COLG4 /REPRINT LINE TO END OF CMD LINE + TAD SAVMQ /RESTORE MQ + DCA MQ +BLSP3, NOP /JMS I SCAPE +BLSP4, NOP /113 + TAD [-12 + DCA BCHAR /SET UP FOR NEXT TIME + KCC /CLEAR OUT ^O OR ^S + JMP I BELLSP + +SAVMQ, 0 +BCHAR, -12 /CHAR WE'RE SEARCHING BACKWARDS FOR +SCAPE, ESCAPE + SORTB, 0 /SORT AND BRANCH ROUTINE + DCA SCHAR /SAVE SORT CHAR + STA + TAD I SORTB /GET POINTER TO LIST + ISZ SORTB + DCA XR +SORTA1, TAD I XR /GET ITEM IN TEST LIST + SPA /END MARKED BY NEG VALUE + JMP SORTA2 /FELL OUT BOTTOM + CIA STL + TAD SCHAR + SZA CLA /COMPARE SORT CHAR + JMP SORTA1 /NOT IT. + TAD XR /GOT IT. NOW MAKE INDEX + TAD I SORTB /TO JUMP TABLE + DCA COUNT /THIS IS TABLE POINTER + TAD I COUNT /GET JUMP ADDRESS FROM TABLE + SPA /IF IT IS NEGATIVE, + JMP SORTA3 /ITS NOT A JUMP ADDRESS - ITS A VALUE + DCA COUNT + CLA CLL + JMP I COUNT +SORTA2, CLA CLL /FELL OUT BOTTOM + TAD SCHAR /CARRY CHARACTER BACK TO +SORTA3, ISZ SORTB + JMP I SORTB /DO SOMETHING ELSE + +CSMC, SCANUP /GET NEXT CHARACTER IN UPPER CASE + AND [77 /MAKE IT A CONTROL CHARACTER + DCA SCHAR + JMP SORTA1 /SUBSTITUTE IT FOR THE UPARROW + +COUNT, 0 + PAGE + /COMMANDS P AND T + +CHRP, JMS POKE /LOOK AHEAD ONE CHARACTER + UPPERC /BUT IN UPPERCASE + TAD (-127 /SEE IF IT'S "W" + DCA TEMPT /SAVE KNOWLEDGE AS FLAG + TAD TEMPT + SNA CLA + SCAN /PASS UP W + CLA /CLEAR W FROM AC + TAD CFLG + SPA CLA /IS THIS COMMAND M,NP? + JMP CHRW /YES - TREAT LIKE M,NPW + GETN /COMMAND P - GET # OF PAGES + SZL SNA +ERR25, ERR /NEG OR 0 ARG TO P + CIA + DCA CPCT +CPOA, PUSHJ + CPOC /DO N + TAD TEMPT /IS NEXT CHARACTER W? + SNA CLA + JMP NOYANK /YES +/ TAD REND /IF WANT P TO CREATE FF'S +/ SZA CLA /WHEN NO MORE INPUT FILE + ISZ FFFLAG /NO, SAW FF? + JMP NOFF /NO + TAD CAFF /YES + OUTPUT /OUTPUT FF +NOFF, DCA ZZ /FORCE Y COMMAND TO WORK + PUSHJ + CHRY /WHOEVER THOUGHT OF THE PW COMMAND SHOULD BE SHOT +YANKY, ISZ CPCT + JMP CPOA + POPJ +CPCT, 0 + +POKE, 0 /RETURN NEXT CHARACTER (BY LOOKING AHEAD) + TAD QLENGT + CIA CLL + TAD SCANP + SZL CLA /MAKE SURE WE HAVEN'T RUN OFF END OF COMMAND LINE + JMP I POKE /RETURN 0 IF NO CHAR + TAD SCANP + TAD QBASE + GETQ + JMP I POKE /LEAVE CHAR IN AC + +NOYANK, TAD CAFF /NPW OUTPUTS FFS + OUTPUT + JMP YANKY + CPOC, PUSHJ + CHRH +CHRW, TAD (OUTPUT +CHRT2, DCA CWOUT /W AND T COMMANDS - SAME THING, DIFFERENT DEVICES + JMS NLINES /CONVERT LINES TO CHARS +CWOA, CMA + DCA NLINES /SET CHARACTER COUNT + TAD NLINES + CIA + MQLDVI /COMPUTE HOW MANY WORDS THIS OUTPUT WILL USE + 6 /(BY TAKING 2/3 OF THE NUMBER OF CHARACTERS, + CLL CML RTL / BU THAT'S SLOW SO WE TAKE 4/6 AND ROUND) + JMS I (FITS /DETERMINE WHETHER THE OUTPUT WILL FIT +ERR17, ERR /NO - TELL THE USER + CLA /CLEAR CRAP FROM AC + JMP CWOC +CWOB, CDF 10 + TAD I M + AND [177 + CDF 0 +CWOUT, 0 /TYPE, OUTPUT, OR QPUT + ISZ M +CWOC, ISZ NLINES /DONE? + JMP CWOB /NO + POPJ + +CHRT, TAD KTYPE + JMP CHRT2 + /X COMMAND AND LINES-TO-CHARACTER CONVERTOR + +CHRX, QREF /COMMAND X + JMS NLINES /CONVERT LINES TO CHARS + ADJQ /ADJUST Q-REGISTERS AND SET UP NEW LENGTH. + TAD (QPUT + DCA CWOUT /SET OUTPUT ROUTINE TO STORE INTO Q REG + TAD MQ /LOAD THE CHARACTER COUNT + JMP CWOA /GO TO TEXT OUTPUTTER + +NLINES, 0 /CONVERT + OR - N LINES AROUND . TO CHARS M,N + ISZ CFLG /WAS THERE A COMMA? + SKP /NO + JMP MFROMN /YES - DON'T CONVERT LINES TO CHARS + TAD P + DCA M + DCA CFLG /V3C + PUSHJ /CHRL DOES A "GETN" + CHRL /TO GET THE DEFAULT VALUES OF N + TAD P + DCA N + TAD M + DCA P +MFROMN, DCA NFLG /CLEAR NFLG IN CASE COMMA FLAG WAS ON + CLL /M AND N ARE KNOWN TO BE 12-BITS LONG + /AND POSITIVE + TAD N + BZCHK /IS N OK? + CMA CLL /YES - COMPUTE N-M + TAD M /BY COMPUTING M-N-1 + CMA /AND COMPLEMENTING IT + SNL /IS M>N? + JMP I NLINES /NO - RETURN N-M + TAD M /N-M+M=N NOW IN AC. + DCA CPCT /INTERCHANGE M AND N + TAD M + DCA N + TAD CPCT + DCA M + JMP MFROMN + /COMMANDS ; < AND > + +CFSI, TAD ITRST + SNA CLA +ERR24, ERR /FAILING SEARCH NOT IN ITERATION +CSEM, OVRLAY + QOVRLY + CSEMO + / ^A ROUTINE + +CTLA, TAD KTYPE +CEXP, DCA WHERTO + TAD CHAR + DCA QUOTE /TERMINATING CHAR SAME AS COMMAND CHAR + DCA NFLG /KILL NUMBER IF PRESENT +CTLALP, QUOTST + JMP I [IREST +WHERTO, 0 /TYPE OR IGNORE THE CHARACTER + CLA + JMP CTLALP + PAGE + /COMMANDS A AND Y + +CHRA, NCHK /COMMAND A + JMP CHAA + GETNUM + TAD P + DCA R + SZL + JMP I (ERR11 /ERROR IF POINTER OFF PAGE + CDF 10 + TAD R + CMA CLL + TAD ZZ /RETURN 'POP' IF POINTER OUTSIDE RANGE [0,Z-1] + SNL CLA /OTHERWISE VALUE OF CHARACTER AT POINTER POSITION + JMP I (ERR11 /POP + TAD I R + AND [377 + CDF 0 +NCOM14, CLL + JMP I (NCOM + CHRY, TAD NFLG + SZA CLA +ERR18, ERR /NUMERIC ARGUMENT TO Y + TAD OUTR + CIA + TAD ERROR + SZA CLA + TAD ZZ +YSKP, SZA CLA /CHANGE TO SKP CLA TO NEVER ABORT Y COMMAND +ERR32, ERR /Y COMMAND ABORTED + DCA ZZ + DCA P /WIPE OUT THE BUFFER +CHAA, TAD (ZMAX-1 + AND REND + CIA CLL + TAD ZZ /IF WE HAVE ALREADY SEEN THE INPUT EOF, + SZL CLA /OR IF WE'RE ALREADY FULL (OR NEARLY SO) + JMP APLF /GET OUT +DECGET, ISZ ICRCNT + JMP I2 /NO NEED TO READ + CLL + TAD INRSIZ + TAD INRCNT +STECO1, SNL /"SKP!CLA" FOR SUPERTECO + DCA INRCNT /UPDATE RECORD COUNT +LFTAB, CLL CML CMA RTR /IF WE OVERFLOWED THE END OF THE FILE, ! + RTR /5 ENTRY TABLE: MUST BE - - - + + ! + RTR /SHORTEN THE READ BY THE CORRECT AMOUNT ! + TAD INCTLW / ! + DCA INCTRL /SO THAT WE WILL NOT READ TOO FAR ! + JMS I INHND +I3, +INCTRL, 0400 +BUFIN, IN /6200 IF 8K, 5600 IF 12K +IBLK, 0 + SMA CLA + SKP + JMP INER /IGNORE END-OF-FILE ERRORS, WE'LL SEE THE ^Z. + TAD IBLK + TAD INRSIZ /BUMP RECORD NUMBER BY THE MAXIMUM NUMBER + DCA IBLK /(IF WE READ SHORT ITS THE LAST ONE ANYWAY) + CLA CMA + TAD BUFIN + DCA INXR /SET UP INPUT XR + TAD INPCNT + DCA ICRCNT + MTHREE + DCA I3 +I2, NOP /CDF 20 IF 12K + ISZ I3 + JMP I1 /NORMAL CHARACTER + MTHREE /WEIRD CHARACTER-RESET SWITCH + DCA I3 + MTWO + TAD INXR + DCA INXR /MOVE INPUT XR BACK TO BEGINNING OF DBLWORD + TAD I INXR + AND [7400 + DCA FFFLAG /TEMP + TAD I INXR + AND [7400 + CLL RTR + RTR + TAD FFFLAG + CLL RTR + RTR + SKP +I1, TAD I INXR +IC, NOP /CDF 0 IF 12K + AND [177 /MASK OFF GARBAGE + /INPUT CHARACTER IN AC + SZA + TAD (-177 + SNA /IGNORE BLANK TAPE AND RUBOUTS + JMP DECGET + TAD (177-32 +STECO2, SNA /"SKP" FOR SUPERTECO + JMP APFS /IT'S A ^Z + TAD (16 + SNA + JMP APFF /ITS A FORM FEED + TAD CAFF /RESTORE CHAR + CDF 10 + DCA MQ /SAVE CHAR + TAD I ZZ /PROTECT HIGH- + AND [7400 /ORDER BITS + TAD MQ /OF TARGET + DCA I ZZ /STORE CHAR IN BUFFER + TAD MQ + CDF 0 + ISZ ZZ + TAD [-12 + SNA CLA /IF THE CHAR IS A LINE FEED, + TAD (-310 /CHECK THAT THE BUFFER IS NOT NEARLY FULL + JMP CHAA +APFS, DCA REND /SIGNAL END OF FILE + SKP +APFF, STA +APLF, DCA FFFLAG /SET FORM FEED FLAG + POPJ + INER, DCA REND /INHIBIT FUTURE INPUTS +ERR15, ERR + +INCTLW, 401 /1021 IF 12K MACHINE +INPCNT, 6400 /5000 IF 12K MACHINE + PAGE + /TELETYPE ROUTINES + +TYPCTV, 0 /TELETYPE STUFFER + SORT + CTLBEL + CTLTAB-CTLBEL + DCA SCHAR /STORE (POSSIBLY TRANSLATED) CHAR +OUTCC, TAD SCHAR + ISZ COLCT /BUMP COLUMN COUNTER + AND [7740 + SZA CLA /IS THE CHAR A CONTROL CHARACTER? + JMP NOCON /NO + TAD (136 + PUTT /OUTPUT "^" + ISZ COLCT + TAD [100 +OUTLF, TAD SCHAR +OUTLF1, PUTT + JMP I TYPCTV + COLCT, 0 + +OUTCR, DCA COLCT /RESET CHAR COUNT + JMP OUTLF +OUTVT, TAD [4 +OUTFF, TAD [7770 /FORM FEED IS 8 LINE FEEDS, VERT TAB IS 4 + DCA COLCT /*** BUG +ASR33, TAD CALF /SIMULATE FORMFEEDS AND VERT TABS WITH LINEFEEDS + JMP OUTCOM /*K* 8 LOCS AT ASR33 OVERLAYED BY ASR35 CODE + +OUTHT, TAD COLCT /COLUMN COUNTER, MOD 8 + AND [7 + TAD [7770 /SIMULATE TABS WITH SPACES + DCA COLCT + 40 /TAKE UP SPACE SO ASR-35 ROUTINE WILL JUST FIT + TAD .-1 /USE SPACES FOR TABS +OUTCOM, PUTT /PUT ONE OUT THE + ISZ COLCT /WINDOW + JMP I (TPUTX /STILL MORE INSIDE + JMP I TYPCTV + +NOCON, TAD SCHAR + AND [100 +EU1, SNA CLA /*EU SET TO CLA IF EUFLAG < 0 (NO CASE FLAGGING) + JMP OUTLF /NOT ALPHANUMERIC +EU2, NOP /*EU SET TO TAD [40 IF EUFLAG>0 (FLAG UPPER CASE) + TAD SCHAR + AND [40 + SNA CLA + JMP OUTLF + TAD SQUO + PUTT + ISZ COLCT + TAD SCHAR + AND [137 + JMP OUTLF1 /OUTPUT UPPER CASE VERSION + +OUTBEL, TAD SCHAR + PUTT + JMP OUTCC + /ROUTINE TO MANIPULATE Q-REGISTER STORAGE + +/*** ALLOW : TO MEAN APPEND TO Q-REGISTER +/APPLIES TO X AND ^U COMMANDS +/MAKE SURE CMD LINE AND ^S ZERO CLNF + +QADJ, 0 + SPA + JMP ERR12 /STRING TOO LONG FOR Q-REGISTER + DCA MQ /SAVE NEW LENGTH OF Q-REGISTER + QSUM /COMPUTE POINTER TO CURRENT Q-REGISTER + AC3777 + AND I QPTR + TAD QP + DCA R + AC3777 + AND I QPTR /GET ITS CURRENT LENGTH + CIA CLL + TAD MQ /COMPUTE DIFFERENCE + SNL /ADJUST Q-REGS + JMP QDNN /TO HOLD NEW STRING + SNA /CHECK FOR ZERO + JMP QADJDN /NOTHING TO DO + TAD QZ /MOVE Q-REGISTERS UP TO INSERT CHARS + DCA QP /(LINK IS 1 FROM PREVIOUS SNL) + TAD QP + TAD MQMAX /SEE IF OUT OF BOUNDS + SNL CLA /TWO PLACES TO TOGGLE LINK THERE +ERR12, ERR /GETTING TOO FULL + TAD QZ + DCA Q + TAD QP + DCA QZ + ISZ QP +QUPL, TAD Q + CIA +SQUO, TAD R /DOUBLES AS ASCII FOR ' + SNA CLA + JMP QADJDN + CMA + TAD Q + DCA Q + MTWO + TAD QP + DCA QP + TAD Q + GETQ + QPUT + JMP QUPL + QDNN, TAD R /MOVE Q-REGS DOWN TO ABSORB CHARACTERS + DCA QP +QDNN1, TAD QZ + CIA + TAD R /-NUMBER OF CHARS TO MOVE + SNA CLA /DONE? + JMP QDNNF /YES + TAD R + GETQ + QPUT + ISZ R + JMP QDNN1 /LOOP AGAIN +QDNNF, TAD QP /SET NEW VALUE + DCA QZ /OF HIGHEST CHAR +QADJDN, STL CLA RAR /4000 + AND I QPTR /SAVE HIGH ORDER PART + TAD MQ + DCA I QPTR /SAVE NEW LENGTH OF Q-REGISTER IN Q-REG TABLE + TAD QCMND /SET UP COMMAND LINE AGAIN + SETCMD /AS IT MAY HAVE BEEN SHUFFLED. + QSUM /RECOMPUTE POINTER TO BEGINNING OF NEW Q-REG + JMP I QADJ + +MQMAX, -QMAX + +QOVER, 0 /SUBROUTINE TO SKIP TO END OF STRING + QCHK /GET THE QUOTE CHARACTER (IF ANY) + TAD SCANP + DCA OSCANP /SAVE BACKUP SCAN POINTER +QOVERL, QUOTST + JMP I QOVER /FOUND AN ALTM OR EQUIVALENT - RETURN + JMP QOVERL /NOT END - SKIP ANOTHER CHAR + PAGE + /Q-REGISTER SUBROUTINES + +QSUMR, 0 /COMPUTE POINTER TO Q-REG + SNA + TAD QNMBR /NORMALLY USES QNMBR, BUT CAN BE OVERRIDDEN BY AC + CIA + DCA QKNT + DCA QP + TAD (QARRAY /BASE ADDR OF Q-REG POINTERS + DCA QPTR + JMP QSUMB +QSUML, AC3777 + AND I QPTR /ADD # OF CHARS IN LOWER REG + TAD QP + DCA QP + ISZ QPTR /SKIP VALUE WORD + ISZ QPTR /POINT TO NEXT Q-REG +QSUMB, ISZ QKNT /REACHED OUR Q-REGISTER YET? + JMP QSUML /NO - ADD IN ANOTHER + JMP I QSUMR +QKNT, 0 + SGET, 0 /SCAN COMMAND LINE OR MACRO +SGET1, CLA /** CALLED WITH AC NON-ZERO ** + TAD QLENGT + CIA CLL + TAD SCANP + SZL CLA /CHECK THAT WE ARE STILL INSIDE THE COMMAND LINE + JMP SGOVFL /NO - COMMAND DONE + TAD SCANP /GET CHARACTER POSITION IN LINE + TAD QBASE /ADD IT TO THE ADDRESS OF THE LINE + GETQ /AND GET THAT CHARACTER. + DCA LASTC + TAD TFLG + AND LASTC /IF THE TRACE FLAG IS ON, + SZA + TYPE /PRINT THE CHAR + TAD LASTC + ISZ SCANP /INCREMENT CHARACTER POINTER AFTER FETCH + JMP I SGET /RETURN +SGOVFL, TAD MPDL /"MPDL" IS THE PUSHDOWN POINTER ON ENTRY TO THIS + SNA /MACRO. IF IT IS 0, WE ARE NOT IN A MACRO + JMP I (T1 /SO RETURN TO THE USER + TAD PDLP /CHECK THAT THE ENDING POINTER IS THE SAME + IAC + SZA CLA /AS THE ENTRY ONE - OTHERWISE WE HAVE +ERR13, ERR /SCREWED UP SOMEHOW (EG WE ARE + POP / IN THE MIDDLE OF A COMMAND) + DCA SCANP + POP + DCA ITRST + POP /RESTORE THE PREVIOUS VALUES OF + DCA MPDL /MPDL, THE SCAN POINTER AND THE COMMAND LINE + POP /POINTER FROM THE PUSHDOWN LIST + SETCMD + JMP SGET1 /AND FETCH A CHARACTER FROM THE UPPER LEVEL. + CMDSET, 0 /SUBROUTINE TO SET UP COMMAND LINE POINTERS + DCA QCMND /STORE IN COMMAND LINE NUMBER + TAD QCMND + QSUM + TAD QP /GET FIRST LOCATION IN COMMAND LINE + DCA QBASE /AND STORE IN "QBASE" + AC3777 + AND I QPTR + DCA QLENGT /STORE THE LINE LENGTH IN "QLENGT" + JMP I CMDSET /RETURN + +QREFER, 0 /SET UP POINTERS FOR Q-REG REFERENCE + SZA + JMP QREFEX /AHA - WE ALREADY HAVE THE Q-REGISTER + SCANUP /GET Q-REGISTER IDENTIFIER + DCA QNMBR + TAD QNMBR + TSTSEP /TEST FOR ALPHANUMERIC (LOWER CASE LEGAL) +ERR03, ERR /OOPS - BAD Q-REGISTER REFERENCE + TAD QNMBR + TAD [7700 + SPA /NUMERIC? + TAD Z7 /YES - FORCE NUMBERS UP TO ABUT LETTERS + TAD CALF /FORCE IDENTIFIER INTO THE RANGE 1-44 (OCTAL) +QREFEX, DCA QNMBR /STORE AWAY NUMBER FOR FURTHER REFERENCE + QSUM /COMPUTE QP AND QPTR + JMP I QREFER /RETURN + +CDBQ, OVRLAY + QOVRLY /READ IN Q-OVERLAY + CDBQO + +CHRO, OVRLAY /READ IN Q-OVERLAY + QOVRLY + CHROO + OVERLY, 0 + TAD I OVERLY /GET LOCATION TO CHECK + ISZ OVERLY + DCA TMP + TAD I OVERLY + DCA OVERLY /SET RETURN ADDRESS + TAD I TMP /IS OUR OVERLAY IN CORE? + SNA + JMP I OVERLY /YES, BRANCH INTO IT + DCA TMP /NO, SET BLOCK TO READ IN +/** THE NEXT 5 WORDS ARE MODIFIED IF WE HAVE MORE THAN 12K +OVREAD, JMS I (7607 /CALL SYSTEM HANDLER + 0200 /READ 2 PAGES + 3200 /INTO 3200 +TMP, 0 /FROM THIS BLOCK + HLT /ERROR READING OVERLAY + JMP I OVERLY /GO TO NEXT SPOT + +CTLTAB, OUTBEL /BELL + OUTCR +POUTHT, OUTHT + 4044 /$ WITH SIGN BIT ON + OUTFF + OUTVT + OUTLF + +ALTTAB, 4033 + 4033 /ALTMODE WITH SIGN BIT ON + +CATS, STA /@ COMMAND - FAKE OUT "IREST" +IREST, DCA QFLG /RESET QUOTED STRING FLAG + TAD CAAM + DCA QUOTE /RESET QUOTE CHAR TO ALTMODE +POPK, POPJ /RETURN + +QTST, 0 /SUBROUTINE TO GET A CHAR AND TEST FOR ALTMODE + SCAN + SORT + QUOTE + QTST-QUOTE /RETURN IF QUOTE FOUND + ISZ QTST + JMP I QTST /SKIP-RETURN WITH AC INTACT IF NOT FOUND + /COMMANDS ^U AND E - ALSO ERROR ROUTINE + +CTLU, OVRLAY + FOVRLY + CTLUO + PAGE + ERRXX, ERR30+1 /ENTRY POINT ALSO SERVES AS A FLAG FOR "TQMK" + KCC /CLEARS AC + CDF 0 /JUST IN CASE + TAD I ERRXX /GRAB SIGNAL '0' NOW + DCA ERRTMP /BEFORE OVERLAY MIGHT DESTROY IT + OVRLAY /GO TO ERROR OVERLAY + EOVRLY + ERRYY + +ERRRET, TAD ERRTMP /GET THE LOCATION AFTER THE CALL + SNA CLA /IF IT'S ZERO AND WE WERE CHAINED TO, +CHOOPS, NOP /ITS A FATAL ERROR - JMP CTLC +FATALJ= JMP I (CTLC +CTRLP, TAD SCANP + CIA + DCA ERRXX /SET ERRXX TO CHAR POSITION OF ERROR CHAR. + KCC /ZAP KEYBOARD FLAG + JMP I (T0 /CONTINUE AS NORMAL UNLESS USER TYPES "?" + +CHRE, SCANUP /COMMAND E + DCA TYI + TAD TYI + SORT + EFLST + EFTAB-EFLST + CLA + OVRLAY + FOVRLY + CHRED +ERRTMP, 0 /MUST BE INITIALLY 0 + /COMMANDS I AND + +CHRI, NCHK /I COMMAND + JMP CIL1 + TAD N /INSERT CHAR WHOSE VALUE IS N + JMS UPOC +/*** CHECK FOR $ + POPJ +CTLI, DCA QFLG /CANNOT BE QUOTED +/ CLA CMA /FOR TAB INSERT +/ TAD SCANP +/ DCA SCANP /BACK UP SCAN POINTER BY ONE +/ /*** THIS IS A BUG + TAD CAHT /TAB + JMS UPOC +CIL1, QSKP /COUNT LENGTH OF INSERTION + DCA DVT1 /ZERO FUDGE USED BY FS COMMAND +CIL2, TAD OSCANP + TAD QBASE + DCA QP /SET UP POINTER TO INSERTION STRING + TAD SCANP + CIA CLL + TAD OSCANP + DCA MQ /STORE CHAR COUNT TO INSERT (-1) + TAD MQ + TAD DVT1 /ADD FS FUDGE + CMA + SNL /DID WE INSERT MORE THAN WE DELETED? + JMP EXPAND /YES - IGNORE SIGN BIT OF COUNT + CIA + PUSHJ + ADJ2 /COMPRESS OUT EXCESS DELETED STUFF + JMP CIL4 +CIL3, TAD QP + GETQ /GET A CHAR + DCA TYI + JMS STOREC /STORE A CHARACTER + ISZ QP +CIL4, ISZ MQ + JMP CIL3 /OF INSERTION + JMP I [IREST + +STOREC, 0 /STORE CHAR IN "TYI" INTO TEXT BUFFER AT P + CDF 10 + TAD I P + AND [7400 + TAD TYI + DCA I P + CDF 0 + ISZ P + JMP I STOREC + /G COMMAND + +CHRG, QREF /G COMMAND - GET Q-REGISTER NUMBER + DCA NFLG + AC3777 + AND I QPTR /GET COUNT OF CHARS IN REGISTER + CMA + DCA MQ /SAVE AS TRANSFER COUNT + ISZ CLNF + SKP + JMP COLG4 + DCA CLNF + AC3777 + AND I QPTR +EXPAND, PUSHJ /COME HERE FROM INSERT LOGIC + ADJ /INCREASE TEXT BUFFER SIZE ( Q-REG LENGTH MAY + JMP CIL4 /BE NEGATIVE) AND GO TRANSFER THE CHARS + +TYI, 0 /TELETYPE INPUT +TYI1, KSF /WAIT FOR THE KEYBOARD FLAG +KSFWT, JMP .-1 /WHILE WAITING, DISPLAY TEXT ON SCOPE + CTCCHK /CHECK FOR ^C + KRB /WATCH OUT - AC MAY NOT BE 0! + AND [177 + SNA + JMP TYI1 /IGNORE NULL CHARS AND LEADER + SORT + ALTLST + ALTTAB-ALTLST /LOOK FOR NON-STANDARD ALTMODES + AND [177 /IN CASE WE RETURNED A NEGATIVE VALUE + JMP I TYI + +UPOC, 0 /MOVE TEXT BUFFER UP ONE CHAR + AND [177 + DCA TYI + CLA IAC + PUSHJ + ADJ + JMS STOREC /STORE CHAR IN THE HOLE WE MADE + JMP I UPOC + +CUPPER, 0 /FORCE CHARACTER TO UPPER CASE + TAD [-100 + SMA /IF ITS >100 + AND (37 /REDUCE IT TO BE <140 + TAD [100 + JMP I CUPPER /RETURN + COLG3, TAD QP + GETQ /GET A CHAR + TYPE + ISZ QP +COLG4, ISZ MQ + JMP COLG3 + POPJ + ESCAPE, 0 + TAD CAAM /TYPE ESCAPE + PUTT + TAD I ESCAPE + PUTT /TYPE ARGUMENT + JMP I ESCAPE /OK TO RETURN TO ARGUMENT + PAGE + TSAVE, TAD I [QPNTR + SZA CLA /IF WE ARE NOT AT THE BEGINNING OF THE C.L. + RESORT /TREAT THIS LIKE ANY OTHER ^S + MTWO /DROP OFF THE TWO BELLS OR ALTMODES + TAD OCMDLN + ADJQ /SET COMMAND STRING LENGTH TO OLD VALUE + TAD L44 + QREF /SET UP POINTERS TO Q-REG Z + ADJQ /KILL CONTENTS OF Q-REG Z + TAD I [QPNTR + DCA I (QPNTR-2 + DCA I [QPNTR /DO A QUICK SHUFFLE OF Q-REG LENGTHS + JMP I (TCTLU + CHRQ, QREF /COMMAND Q + CLL + JMP CQOA + +CPCS, QREF /COMMAND % + GETN +CQOA, ISZ QPTR /POINT TO VALUE WORD + TAD I QPTR /INCREMENT VALUE BY ARGUMENT + DCA I QPTR +/ADD LINKS + STA + TAD QPTR /GO BACK ONE + DCA QPTR2 /ALSO COMPL LINK + CML RAR + TAD I QPTR2 + DCA I QPTR2 + TAD I QPTR2 + RAL + CLA + TAD I QPTR + JMP I (NCOM /MAKE A NUMBER + +TYCRLF, 0 /TYPE A CR AND LF + TAD CACR /CR +XTYPE, TYPE + TAD CALF /LF + TYPE + JMP I TYCRLF /RETURN + +QPTR2, 0 + +CHGT, OVRLAY + QOVRLY + CHGTO +CHLT, OVRLAY + QOVRLY + CHLTO + CCMA, NCHK /COMMAND , + JMP NERR /NUMBER FLAG NOT SET + TAD NLINK + SZA CLA +ERR26, ERR /NEG ARGUMENT TO , + ISZ CFLG + SKP + JMP NERR /3 NUMERIC ARGUMENTS + TAD N /MOVE N TO M +CCMA3, DCA M /ENTERED HERE BY "H" COMMAND + DCA N /AND CLEAR N + STA + DCA CFLG /SET COMMA FLAG + POPJ + /RETURNS 13-BIT RESULT IN AC,LINK + +NGET, 0 /SUBROUTINE TO GET LAST NUMBER, WITH +NGET1, NCHK /DEFAULT VALUES OF +1 (NO NUMBER), + JMP NGET2 /OR -1 (JUST A MINUS SIGN) + GETNUM + JMP I NGET /DIGITS SEEN - RETURN THEM +NGET2, CLA CLL IAC /NO DIGITS SEEN + PUSHJ /MAKE BELIEVE WE SAW THE DIGIT "1" + NCOM /AND CREATE A NUMBER FROM IT (TAKING ANY + JMP NGET1 /OPERATORS INTO ACCOUNT) AND USE IT + +BACKUP, 0 + TAD I [QPNTR /SEE IF ANYTHING TO ERASE + SNA CLA + JMP I (T0 /NO, START ALL OVER + STA + TAD I [QPNTR /THEN THE CHARACTER COUNT + ADJQ /REDUCE THE LENGTH OF THE COMMAND REGISTER BY 1 + TAD QZ + GETQ /GET THE CHARACTER WE RUBBED OUT + JMP I BACKUP + +CHLCMP, 0 /COMPARISON SUBROUTINE + TAD I P /DATA FIELD IS 10 + AND [377 + CDF 0 + SORT + CAFF + LFTAB-CAFF + SPA CLA /LINE TERMINATORS ARE CHANGED TO NEGATIVE NOS. + ISZ CDT /IS COUNT EXHAUSTED? + JMP CHLRET /NO +CHRLI, ISZ P +L44, 44 + CDF 0 + POPJ + +CHRH, PUSHJ /COMMAND H + CCMA3 /SET M=0 AND COMMA FLAG ON AND FALL INTO "Z" + /** COULD CAUSE ERROR ON B AND H IF NFLG SET +CHRZ, TAD ZZ /COMMAND Z +CTLH, /^H COMMAND - TIME OF DAY - NOT IMPLEMENTED +CHRB, JMP I (NCOM14 /COMMAND B + +CHLRET, CDF 10 + JMP I CHLCMP + EFTAB, IOV + XOV + XOV + XOV + XOV + IOV + IOV + XOV + XOV, OVRLAY + XOVRLY + CHREX + +IOV, OVRLAY + IOVRLY + CHRER + /COMMANDS = AND \ DISPATCHER TO OVERLAY + +CEQL, OVRLAY + FOVRLY + CEQLO +CBSL, OVRLAY + FOVRLY + CBSLO + +ZROSPN, DCA SCANP /RESET TO BEGINNING OF ITERATION +ZRON, DCA NFLG /KILL NUMBER FLAG + JMP I [IREST + PAGE + / I/O-OVERLAY + +/ IOVRLY XOVRLY FOVRLY +/ ER EF EU +/ EB EC ES +/ EW EX ET +/ EG EV +/ EH +/ EO + + *3200 + +IOVRLY, 0 + QOVRLC + EOVRLC + XOVRLC + FOVRLC + + /SUBROUTINE TO DO LOOKUPS AND ENTERS (LINK CRITICAL ON ENTRY) + +OPEN, 0 /CALLED WITH MONITOR CODE - 2 IN AC + DCA RSTSW /ENTER OR LOOKUP + SZL CLA /IF THIS IS THE OUTPUT SIDE OF AN "EB" COMMAND, + JMP DEVLOD /SKIP THE STATEMENT SCAN + QCHK + TAD DSKNAM /PACKED SIXBIT FOR 'DSK:' + DCA DEVC + TAD (72 /RESTORE : +NGOM1, DCA DEVLST+1 +NGO, DCA NAME /CLEAR NAME + DCA NAME+1 + DCA NAME+2 + MTWO + DCA PERDSW +NAMCM1, DCA NAMCNT + NAMEC, QUOTST /GET CHAR AND TEST FOR ALTM + JMP DEVQOT /ALTM - END OF NAME + SORT /NO - CHECK SPECIAL CHARS + DEVLST /([,:,., AND SPACE + DEVTAB-DEVLST + TSTSEP /NO, SEE IF ALPHANUMERIC +ERR08, ERR /ILLEGAL CHAR + TAD NAMCNT + TAD [-10 + SMA CLA /MORE THAN 6 CHARS? + JMP NAMEC /YES, IGNORE + TAD NAMCNT /NO, PACK IT + CLL RAR + DCA TEMP1 /*K* NOTE ASSUMPTION NAME STARTS AT LOC 0! + TAD SCHAR + UPPERC /** "UPPERC" ALWAYS COMPLEMENTS LINK + AND [77 + SNL + JMP .+4 + CLL RTL + RTL + RTL + TAD I TEMP1 + DCA I TEMP1 + ISZ NAMCNT + JMP NAMEC + +PERD, ISZ PERDSW /FOUND A PERIOD + TAD NAME + SNA CLA /ERROR IF WE HAVE + JMP ERR08 /DOUBLE PERIODS OR NO FILE NAME + DCA DEVLST+1 /DEVICE NO LONGER LEGAL + DCA NAME+3 /ZERO EXTENSION OUT + TAD [6 /AND SET POINTER TO 6TH CHARACTER + JMP NAMCM1 + +COLON, TAD NAME+1 + SNA /WE MUST PACK THE NAME INTO ONE WORD OURSELVES + JMP .+5 /BECAUSE IF "OPEN" IS CALLED FROM THE OUTPUT + TAD NAME /SIDE OF AN "EB" COMMAND, WE SKIP + SMA CLA /THE NAME COLLECTOR.(WITH GOOD REASON - + CLL CML RAR /THE USR OVERLAYS THE COMMAND LINE). + TAD NAME+1 /SINCE THE OS/8 "ASSIGN" CALL TO THE USR + TAD NAME /REPLACES THE 2ND NAME WORD WITH THE DEVICE + DCA DEVC /NUMBER, ALL NAME INFO MUST BE HELD IN WORD 1. + JMP NGOM1 /DEVICE NAME STORED - RESET FOR FILE NAME + +DEVLST, 56 /. + 72 /: +DSKNAM, 5723 /=0423+1300+4000 - SERVES AS LIST TERMINATOR + DEVQOT, ISZ PERDSW /IF WE NEVER SAW A PERIOD, + DCA NAME+3 /WIPE OUT THE EXTENSION + JMS I (GETUSR /BRING USR INTO CORE + +DEVLOD, TAD I OPEN /MOVE HANDLER ADDRESS + DCA DEVHND + ISZ OPEN /AND BUMP POINTER + TWO + TAD RSTSW + DCA CODE /ENTER OR LOOKUP + CIF 10 /AND RESET TABLES + JMS I [200 + 13 +RSTSW, 0 /DON'T ZAP OPEN FILES ON INPUT + DCA DEVNO /ZERO SECOND NAME WORD + CIF 10 + JMS I [200 + 1 /ASSIGN HANDLER +DEVC, 0 +DEVNO, 0 +DEVHND, 0 + JMP OPNERR /ERROR - KICK USR OUT FIRST + DCA STBLK + TAD RSTSW /GET LOOKUP-ENTER SWITCH + TAD NAME /IF NAME IS NULL AND THIS IS A LOOKUP, + SNA CLA + JMP OPSUCC /IT JUST SUCCEEDED + TAD DEVNO /DEVICE # + CIF 10 + JMS I [200 +CODE, 0 /ENTER OR LOOKUP +STBLK, 0 /FILLED WITH STARTING BLOCK +TEMP1, +FLN, 0 /FILLED WITH -LENGTH +/**** CHECK IF AC MUST = 0 + JMP OPNERR /ERROR +OPSUCC, TAD DEVHND /HANDLER ADDRESS IN AC + JMP I OPEN +PERDSW, 7777 /FLIP FLOP FOR EXTENSION +NAMCNT, 0 /CHARACTER COUNT + /*** CHECK FOR : (SEE P.26) RETURN VALUE IF FNF, ALSO IF FOUND +OPNERR, TAD RSTSW /WE SHOULD ONLY KILL THE OUTPUT FILE + SNA CLA + JMP .+3 /IF THIS IS AN OUTPUT ERROR +EBERR, TAD ERROR + DCA OUTR + PUSHJ +PECDSM, ECDISM /DISMISS THE USR +ERR16, ERR + 0 /*K* TELLS ERR RTN TO EXIT IF WE WERE CHAINED TO + + PAGE + CHRER, TAD I (TYI + SORT + ERLST + ERTAB-ERLST + ERR /CAN'T HAPPEN + +ERTAB, EBAK /EB + ROPEN /ER + WOPEN /EW + +ERLST, 102 /EB + 122 /ER + 127 /EW + + /FILE OPEN COMMMANDS: + +EBAK, CLA CMA CLL /"EDIT BACKUP" COMMAND WITH LINK CLEAR + PUSHJ /USE 'ROPEN' TO SET POINTERS + ROPEN /WITHOUT KICKING OUT THE USR (AC=-1 ON ENTRY) + TAD I (DEVNO /DEVICE # + TAD (OSDCBT-1 + DCA R + CDF 10 + TAD I R /GET DEVICE CODE FROM DCB TABLE + CDF + SMA CLA /NEGATIVE IF FILE-STRUCTURED + JMP I (EBERR /YOU CAN'T DO THAT! + TAD NAME+3 /EXTENSION + TAD (-213 + SNA + JMP I (EBERR /CAN'T EB A .BK FILE + TAD DOTBK /RESTORE EXTENSION + DCA R /SAVE IT + TAD DOTBK /.BK EXTENSION + DCA NAME+3 + CIF 10 + TAD I (DEVNO /DEVICE # + JMS I [200 /DELETE THE OLD BACKUP + 4 + NAME + 0 +DOTBK, 213 /WHO CARES IF IT'S NOT THERE? + TAD R /OLD EXTENSION + DCA NAME+3 + CLA CLL CML IAC /SET EDIT BACKUP FLAG AND DO AN "ENTER" + /LINK MUST BE SET HERE FOR OPEN +WOPEN, DCA EBFLG /LINK NORMALLY 0 WHEN GOTTEN HERE + CLA IAC /OPEN OUTPUT FILE + JMS I (OPEN /ENTER CODE IN AC +OUHNDL, 4001 /HANDLER ADDRESS + DCA OUTHND /HANDLER ENTRY + TAD I (DEVNO + DCA ODEV /SAVE DEV # + DCA I (OCNT /CLEAR BLOCK COUNT + TAD I (FLN + DCA I (OMAXLN /MAXIMUM FILE LENGTH + TAD NAME + DCA I (OUNAM + TAD NAME+1 + DCA I (OUNAM+1 + TAD NAME+2 + DCA I (OUNAM+2 + TAD NAME+3 + DCA I (OUNAM+3 + TAD (DECPUT + DCA OUTR /ENABLE CHARACTER OUTPUT ROUTINE + TAD (ECDISM + DCA I (DECPUT /FAKE RETURN FROM CHAR I/O ROUTINE + TAD I (STBLK + JMP I (OSETP /SET UP BLOCK NUMBER AND POINTERS + /FILE OPEN ROUTINE + +ROPEN, DCA QPTR /ENTERED WITH AC=-1 IF MONITOR IS TO BE KEPT + /ENTERED WITH LINK=0 + JMS I (OPEN /LOOKUP CODE IN AC +INHNDL, 7201 /HANDLER ADDRESS + DCA INHND /SAVE HANDLER ENTRY + STA + DCA ICRCNT /POINTER + STA + DCA REND /CLEAR END-OF-FILE FLAG + TAD I (STBLK + DCA I (IBLK /FIRST BLOCK + TAD I (FLN + DCA INRCNT /SET UP INPUT FILE LENGTH + ISZ QPTR /SHOULD WE DISMISS THE MONITOR? + JMP I (ECDISM /YES - KICK THE USR OUT AND POPJ + JMP I [IREST /EXIT + +DEVTAB, PERD /. + COLON /: + PAGE + NORMAL, TAD ODEV /CLOSE FILE + CIF 10 + JMS I [200 + 4 + OUNAM +OCNT, 0 /NUMBER OF BLOCKS + HLT + TAD ERROR /RESET OUTPUT SUBROUTINE POINTER + DCA OUTR /TO ERROR +ECDISM, CIF 10 /DISMISS OS/8 USR ROUTINE + JMS I [200 + 11 /KICK USR OUT + JMP I [IREST + +/*** REALLY SHOULD BREAK UP INTO 2 ROUTINES + +SCHSRT, 0 /SORT LETTERS AND NUMBERS + UPPERC /CONVERT TO UPPER CASE TO REDUCE CASES + CLL /THE LINK WILL ALTERNATE EACH TIME + TAD [-60 /WE ADD ONE OF OUR NEGATIVE CONSTANTS. + SMA /THE LINK AT THE END WILL TELL WHETHER + TAD [-12 /THE CHARACTER WAS ALPHANUMERIC + SMA /(I.E. BETWEEN 60-71,101-132 OR 140-172) + TAD M7 /OR A SEPARATOR CHARACTER. + SMA + TAD (-32 + SZL CLA /WAS IT ALPHANUMERIC? + ISZ SCHSRT /YES + JMP I SCHSRT /SKIP RETURN IF ALPHANUMERIC + +RT, 0 /ROUTINE TO PACK THIRD CHAR INTO OUTPUT BUFFER + CLL RTL + RTL + DCA DM /CALLED TWICE - FIRST TIME WITH CHAR IN AC, + TAD DM /SECOND TIME WITH "DM" IN AC + AND [7400 + TAD I OPTR2 + DCA I OPTR2 + ISZ OPTR2 + JMP I RT + DVIMQL, 0 /FAKE MQL DVI + DCA DVT1 /STORE DIVIDEND + DCA MQ /INITIALIZE QUOTIENT +DV1, TAD I DVIMQL /GET DIVISOR + CIA + CLL /SET UP TO TAKE IMMEDIATE EXIT ON ZERODIVIDE + TAD DVT1 /SUBTRACT DIVISOR FROM DIVIDEND + SNL /OVERFLOWED YET? + JMP DV7200 /YES + DCA DVT1 /NO - STORE IT BACK + ISZ MQ /BUMP QUOTIENT + JMP DV1 /AND LOOP +DV7200, CLA + TAD MQ + ISZ DVIMQL /SKIP PAST DIVISOR + JMP I DVIMQL /RETURN WITH QUOTIENT IN AC + +/SEARCH STRING MODIFIERS: + +SCHLST, 16 /^N - ANYTHING BUT + 21 /^Q - LITERALLY + 23 /^S - ANY SEPARATOR + 30 /^X - ANYTHING +M7, -7 + DECPUT, 0 /DEVICE INDEPENDENT I/O + TAD [200 /ADD ON PARITY BIT + ISZ O3 /3RD CHAR OF 3? + JMP O2 /NO + JMS RT /YES, SPECIAL HANDLING + TAD DM /TEMP STORAGE + JMS RT +SETO3, MTHREE /RESET SWITCH + DCA O3 + ISZ OCRCNT /END OF BUFFER? + JMP I DECPUT /NO + JMS FITS /CHECK FOR OUTPUT OVERFLOW + JMP OERR /YUP + DCA OCNT /NO - UPDATE OUTPUT COUNT + JMS I OUTHND /OUTPUT THE BUFFER +OUCTRL, 4400 +BUFOUT, OUT +OBLK, 0 + JMP OERR + TAD OBLK + TAD INRSIZ /BUMP THE OUTPUT RECORD NUMBER BY THE MAXIMUM +OSETP, DCA OBLK /SINCE ALL WRITES EXCEPT THE LAST ARE MAXIMAL + TAD BUFOUT /BUFFER POINTERS + DCA OPTR1 + TAD BUFOUT + DCA OPTR2 + TAD OUTSIZ + DCA OCRCNT /DOUBLEWORD COUNT (7377 IF 8K, 6777 IF 12K) + JMP SETO3 /SET BYTE COUNTER AND RETURN +OERR, CLA + TAD ERROR + DCA OUTR /INHIBIT FUTURE OUTPUT +ERR14, ERR +O2, DCA I OPTR1 /NORMAL HANDLING + ISZ OPTR1 /BUMP POINTER + JMP I DECPUT +OPTR1, 0 +OMAXLN, 0 /SIZE OF HOLE FOR OUTPUT +OUTSIZ, 7377 /6777 +O3, 0 + FITS, 0 /SUBROUTINE TO CHECK FOR OUTPUT OVERFLOW + TAD OPTR1 /** AC MAY CONTAIN FUDGE ON INPUT ** + CIA + TAD BUFOUT /COMPUTE NUMBER OF WORDS IN BUFFER + AND [7400 /ROUND "UP" TO NEXT BUFFERLOAD + CIA /MAKE POSITIVE + CLL CML RAR + DCA OUCTRL /AND SAVE IT AS A BUFFER CONTROL WORD + TAD OUCTRL + CLL RAL + CLL RTL /ISOLATE THE BLOCK COUNT OF THE CONTROL WORD + RTL /IN THE LOW ORDER PART OF THE AC + RAL + TAD OCNT /ADD IT TO THE CURRENT OUTPUT COUNT + CLL CML + TAD OMAXLN /SEE THAT WE DIDN'T OVERFLOW + SNL SZA /THE ASSIGNED OUTPUT AREA + JMP I FITS /OOPS - WE DID - ERROR RETURN + CIA + TAD OMAXLN /SUBTRACT OFF THE LIMIT + CIA /TO ARRIVE AT THE UPDATED BLOCK COUNT + ISZ FITS + JMP I FITS /AND SKIP RETURN +OUNAM, ZBLOCK 4 /NAME OF OPEN OUTPUT FILE GOES HERE + PAGE + /DISPLAY ROUTINE FOR PDP-12 SCOPE + +WASTE, 0 /** MUST BE AT MULTIPLE OF 2000 +XPOS, 0 /PDP-12 BETA REGISTER 1 +BETA2, 0 /PDP-12 BETA REGISTER 2 + +DSPLAY, 0 /TEXT DISPLAY ROUTINE FOR TECO + MTHREE /THIS ROUTINE DEPENDS ON THE FACT THAT THE + TAD DSPLAY /HIGH ORDER BITS OF THE X-COORD ARE IGNORED + DCA DX /BY THE VR12 HARDWARE + TAD I DX /GET THE SKIP + DCA DLPTST /PUT IT IN THE LOOP + TAD P + DCA DX + TAD NUMLNS + STL CIA /LOOK BACKWARD + PUSHJ /FOR BEGINNING OF DISPLAY AREA + CHRL1 +D360, STA STL /=7360 + TAD P + DCA DM + TAD DX + DCA P /RESTORE POSITION + TAD NUMLNS /NOW SCAN FORWARD + CLL IAC + PUSHJ /FOR THE END OF THE DISPLAY AREA + CHRL1 + TAD P + CIA + TAD DM + DCA R /*K* THIS NUMBER MUST GO IN R - + TAD DX /THE ^W COMMAND NEEDS IT THERE + DCA P /RESTORE ORIGINAL P +DSETUP, TAD P + CIA + TAD DM + DCA DQ /SAVE COUNT OF CHARS TO CURSOR POSITION + TAD DM + DCA DX + TAD R + DCA DR + TAD D360 + DCA YPOS +DISCR, TAD DISLF +SETXPS, DCA XPOS /SET X POSITION/COLUMN COUNTER + JMP DLPTST + /DISPLAY LOOP + +DGETCH, CDF 10 + TAD I DX + CDF 0 /GET THE CHARACTER FROM FIELD 1 + AND [177 /AND OFF THE HIGH ORDER BITS + TAD (-33 + SNA /CHANGE ALTMODES + TAD CAHT /TO DOLLAR SIGNS + TAD (-5 + SMA SZA /IF NOT A CONTXRACTER + JMP DLOOP /DISPLAY IT AND KEEP GOING + SNA + JMP DBLANK /DO BLANKS FAST + TAD (40-15 + SNA /CR? + JMP DISCR /YES - RESET X COORD + STL + TAD [4 + SNA /TAB? + JMP DTABB + SNL + JMP DISLF /LINE FEED, VERTICAL TAB, OR FORM FEED + TAD (51 /ORDINARY CONTROL CHAR - RESTORE IT + 40 + DCA WASTE /SAVE CHAR + JMS DISCHR /DISPLAY ^ + TAD WASTE /NOW DISPLAY ALTERED CHAR +DLOOP, JMS DISCHR + +DLPTST, HLT /EITHER KSF OR TSF OR "ISZ R" + SKP + JMP I DSPLAY /EXIT IMMEDIATELY IF TEST SKIPS + ISZ DQ /ARE WE AT THE CURRENT POINTER POSITION? + JMP TSTEDS /NO + TAD (-5 + TAD XPOS + DCA XPOS /BACK UP X POSITION A HALF-CHARACTER + TAD DM20 + TAD YPOS + 6141 /ENTER LINC MODE +DM20, 1760 /DSC I + 2000 + 1760 /DISPLAY A ^ + 2076 + 0002 /PDP + MTHREE /AND MOVE X POSITION BACK TO WHERE IT WAS + JMP DBLANK+1 +TSTEDS, ISZ DR /ARE WE THROUGH? + JMP DGETCH /NO + JMP DSETUP /YES - START OVER + DTABB, TAD XPOS /DISPLAY TAB + CMA + AND Z7 + DCA WASTE /GET NUMBER OF COLUMNS TO GO (-1) + TAD WASTE + CLL RTL + RAL + TAD WASTE /MULTIPLY BY 9 +DBLANK, TAD CAHT /BUMP ONE MORE COLUMN + TAD XPOS + SZA /OVERFLOW? + JMP SETXPS /NO - SET XPOS AND CONTINUE + JMP LINOFL /YES - GO TO THE NEXT LINE + +/SUBROUTINE TO DISPLAY A CHARACTER + +DISCHR, DLPTST /*K* DISCHR MUST CONTAIN "DLPTST" WHEN WE + CLL RAL /ARE EXAMINING CHARACTERS ** + TAD (DTABLE-1 + DCA BETA2 /STORE ADDRESS OF TABLE ENTRY FOR CHAR -1 + TAD YPOS + + 6141 /ENTER LINC MODE + 1762 /DSC I 2 + 1762 /DSC I 2 + 0002 /RE-ENTER PDP-8 MODE + + CLA + ISZ XPOS /BUMP THE X COORDINATE/COLUMN COUNTER + JMP I DISCHR /RETURN +LINOFL, TAD (7054 /INDENT ALL CONTINUATION LINES + DCA XPOS +DISLF, RAR /*K* RAR=7010 AC MAY HAVE A SMALL NUMBER + TAD YPOS /IN IT HERE - THATS OK AS LONG AS ITS SMALL, + TAD [-40 /SINCE ONLY THE HIGH 8 BITS OF YPOS COUNT. + DCA YPOS + JMP I DISCHR /*K* THIS ALWAYS RETURNS TO DLPTST ** + +YPOS= NAME /USE SOME FREE PAGE ZERO LOCATIONS +DR= NAME+1 /FOR OUR TEMPORARIES +DQ= NAME+2 +DM= NAME+3 + PAGE + DTABLE, 2000;2076; 7500;0000; 7000;0070; 7714;1477 + 5721;4671; 6661;4333; 5166;0526; 0000;0070 + 3600;0041; 4100;0036; 2050;0050; 0404;0437 + 0500;0006; 0404;0404; 0001;0000; 0601;4030 + 4536;3651; 2101;0177; 4523;2151; 4122;2651 + 2414;0477; 5172;0651; 1506;4225; 4443;6050 + 5126;2651; 5122;3651; 2200;0000; 4601;0000 + 1000;4224; 1212;1212; 2442;0010; 4020;2055 + 4077;5751; 4477;7744; 5177;2651; 4136;2241 + 4177;3641; 4577;4145; 4477;4044; 4136;2645 + 1077;7710; 7741;0041; 4142;4076; 1077;4324 + 0177;0301; 3077;7730; 3077;7706; 4177;7741 + 4477;3044; 4276;0376; 4477;3146; 5121;4651 + 4040;4077; 0177;7701; 0176;7402; 0677;7701 + 1463;6314; 0770;7007; 4543;6151; 4177;0000 + 3040;0106; 0000;7741; 2000;2076; 1604;0404 + STABLE, ZBLOCK 40 /SEARCH BUFFER + +CTLW, NCHK /^W COMMAND - IF THERE WAS A NUMBER BEFORE + JMP CTLW2 /THE ^W, SET THE NUMBER OF LINES TO DISPLAY + TAD N /EQUAL TO THAT NUMBER. + DCA NUMLNS + /DON'T WORRY ABOUT NEGATIVE N +CTLW2, ISZ R /FAKE OUT! (MUST BE BEFORE CALL TO DISPLY) + DISPLY /IN ANY CASE, GO THROUGH ONE DISPLAY CYCLE + POPJ /THEN RETURN + +SAVTRA, 0 /SAVE TRACE MODE + TAD TFLG + DCA TFGTMP + DCA TFLG + JMP I SAVTRA /EXIT WITH TRACE OFF + +RESTRA, 0 /RESTORE TRACE MODE + TAD TFGTMP + DCA TFLG + JMP I RESTRA +TFGTMP, 0 + +CHKQF, 0 /CHECK FOR EXPLICIT QUOTES + ISZ QFLG /QUOTE FLAG SET? + JMP .+3 /NO + SCAN /GET QUOTING CHAR + DCA QUOTE /PUT INTO SEARCH TABLE + DCA QFLG /ZAP QUOTE FLAG + JMP I CHKQF /RETURN + NXTBUF, 0 + SZA CLA + JMP NOWRIT /READ-ONLY IF AC NOT 0 ON ENTRY + PUSHJ + CPOC /HP + DCA ZZ /FORCE Y TO WORK + ISZ FFFLAG /IF WE DIDN'T SEE A FORM FEED ON INPUT + JMP NOWRIT /DON'T OUTPUT ONE + TAD CAFF + OUTPUT +NOWRIT, PUSHJ + CHRY /READ NEW BUFFER + CTCCHK /CHECK FOR ^C AND ^P + CLA /*K* CTCCHK LEAVES AC NON-ZERO! + JMP I NXTBUF + +GETUSR, 0 /ROUTINE TO LOCK THE USR INTO CORE + CDF 0 + TAD ZZ /IF THE TEXT BUFFER IS EMPTY AND + SNA CLA /WE HAVE 12K, SO Q-REGS ARE IN FIELD 2, +NWRUSR, NOP /(CHANGED BY INIT CODE TO "TAD [4" IF 12K) + STL RTR /THEN WE SHOULD NOT SAVE CORE ON A USR CALL. + DCA I (JSBITS /THIS STORES A 2000 OR A 2001 + CIF 10 + JMS I [7700 /OK - NOW LOAD THE USR IN + 10 + JMP I GETUSR + /E COMMAND MODIFIERS + +EFLST, 102 /EB I + 103 /EC X + 106 /EF X + 107 /EG X + 113 /EK X + 122 /ER I + 127 /EW I + 130 /EX I + +CHRU, QREF /COMMAND U + NCHK +ERR22, ERR /U MUST BE PRECEDED BY A NUMBER + TAD NLINK + CLL RTR + DCA NLINK + AC3777 + AND I QPTR + TAD NLINK + DCA I QPTR + ISZ QPTR + TAD N + DCA I QPTR + POPJ + +/RADIX TABLES: + +ORAD, NOP + 1000 + 100 + 10 +DRAD, NP&177+1200 /"TAD NP" + 1750 + 144 + 12 + /DISPATCH TABLE FOR COMMAND INPUT + +COMTAB, TBEL /^G + TCRLF /CR +RUBY, ROCMND /RUBOUT + TCTLU /^U + TALTM /ALTMODE + TQMK /? + TSAVE /^S + TSTAR /* + TSPACE /SPACE + +EDFLAG, 0 /MUST BE KEPT TOGETHER +EHFLAG, 0 +EOFLAG, VERSN +ESFLAG, 0 +ETFLAG, 0 +EUFLAG, 0 +/CXFLAG, 0 + PAGE + /COMMAND M +/AND Q-REGISTER STORAGE +COMLST, 7 /^G, COMMAND LINE EDIT LIST + 15 /CR, INSERT CR & LF + 177 /RUBOUT + 25 /^U - RUB OUT LINE + 33 /^[, ALT MODE + 77 /? + 23 /^S - SAVE OLD COMMAND LINE IN Q-REG Z + 52 /* + 40 /SPACE + +CHRM, QREF /COMMAND M + TAD M4 /4 ITEMS PUSHED TO + PUSHL /SAVE CURRENT MACRO STATE + QCMND + MPDL + ITRST /SO THE "O" COMMAND WILL WORK IN MACROS + SCANP /ZEROED BY "PUSHL" + TAD PDLP /MUST CHECK PDL AT END OF MACRO + CIA + DCA MPDL + TAD QNMBR /Q-REGISTER TO EXECUTE + SETCMD /SET COMMAND LINE TO THIS Q-REG + POPJ /LEAVE NUMBER FLAG ALONE AND EXIT + +CHKBZ, 0 /SEE THAT B .LE. C(AC) .LE. ZZ + SZL + JMP ERR11 /POP + CIA /ENTERED WITH LINK SET CORRECTLY + TAD ZZ + SNL /13-BIT ARITHMETIC +ERR11, ERR /C(AC)>ZZ + CIA + TAD ZZ /RESTORE ORIGINAL AC + JMP I CHKBZ + +ALTLST, 175 /ALT MODE + 176 /ANOTHER ALTMODE +M4, -4 + SCUPPR, 0 /SCAN AND CONVERT TO UPPER CASE + SCAN + UPPERC + JMP I SCUPPR /THAT'S ALL? + +/Q-REGISTER STORAGE - EACH Q-REGISTER TAKES 2 WORDS. +/WD 1 CONTAINS THE LENGTH OF THE CHARACTER PART OF THE REGISTER (IF ANY) +/WD 2 CONTAINS THE VALUE OF THE NUMERIC PART OF THE REGISTER (IF ANY) + +QARRAY, ZBLOCK 110 /36 Q-REGISTERS * 2 WORDS/REGISTER = 72 WORDS +QPNTR, CHNSTR /FAKE Q-REGISTER FOR INPUT LINE - LENGTH ONLY. + CTLT, NCHK + JMP CTLT2 /NO ARG + TAD N +ET1, TYPE /TYPE CHAR REPRESENTED BY ARGUMENT + POPJ +CTLT2, LISTEN /^T COMMAND - VALUE OF NEXT CHAR FROM TTY +ET8, TYPE /*ET ECHO THE CHARACTER + TAD SCHAR /GET THE CHARACTER + JMP I (NCOM14 /JUMP INTO NUMBER PROCESSOR + +CTLE, TAD FFFLAG /^E COMMAND - RETURNS FORM FEED FLAG +NNEW13, CLL + SPA + STL /EXTEND SIGN BIT TO LINK + JMP I (NCOM /RETURN -1 IF F.F., 0 OTHERWISE + PAGE + *5000 + +/COMMAND DISPATCH TABLE ** ALLOW EVEN/ODD FOR NOVICE SUBSET? + +CDSP, POPK;CTLA;SERR;CTLC;CTLD;CTLE;CTLF;CTLC /0-7 + CTLH;CTLI;POPK;SERR;POPK;POPK;CTLN;CTLO /10-17 + T0;SERR;SERR;SERR;CTLT;CTLU;ERR35;ERR27 /20-27 + SERR;SERR;SERR;ZRON;SERR;SERR;CTUA;SERR /30-37 + POPK;CEXP;CDBQ;CNBS;SERR;CPCS;CAMP;ZRON /40-47 + COPR;CCPR;CAST;CPLS;CCMA;CMIN;CDOT;CVIR /50-57 + NMBR;NMBR;NMBR;NMBR;NMBR;NMBR;NMBR;NMBR /60-67 + NMBR;NMBR;CCLN;CSEM;CHLT;CEQL;CHGT;CQSM /70-77 + CATS;CHRA;CHRB;CHRC;CHRD;CHRE;CHRF;CHRG /100-107 + CHRH;CHRI;CHRJ;CHRK;CHRL;CHRM;CHRN;CHRO /110-117 + CHRP;CHRQ;CHRR;CHRS;CHRT;CHRU;SERR;SERR /120-127 + CHRX;CHRY;CHRZ;SERR;CBSL;SERR;CHUA;CHBA /130-137 + /END OF DISPATCH TABLE + +PDLBEG, ZBLOCK 11 /BEGINNING OF PUSHDOWN LIST +QPUT12, ZBLOCK 16 /ROUTINES INSERTED LATER - USED IN +ASR35, ZBLOCK 10 /INITIALIZATION, OVERLAYED BY PUSHDOWN LIST +PDLEND, 0 /END OF PUSHDOWN LIST + PAGE + *5200 + +/ INITIALIZATION SECTION +/ ENTER HERE AT 5200 TO MODIFY TECO TO USE A MODEL 35 TELETYPE +/ SORRY - NO CURRENT PAGE LITERALS + +TECO35, ISZ JTECO /IF CALLED VIA "R" OR "RUN" + TAD I XR /MOVE ASR-35 PATCH (WHICH OUTPUTS TABS AND + DCA I INXR / FORM FEEDS) OVER PRINT ROUTINE + ISZ ASRCNT + JMP .-3 + TAD YOUTHTX + DCA I YPOUTHT + TAD [TECO + DCA I Y7745 /CHANGE STARTING ADDRESS IN CASE WE'RE RESTARTED + /AND FALL INTO INITIALIZATION ROUTINE + +TCINIT, TLS /INITIALIZATION ROUTINE - INITIALIZE THE TTY + TAD .-1 + DCA I [TECO + TAD YT0A /"JMP T0A" + DCA I PTECO1 /CHANGE THE ENTRY AT 200 SO WE'RE NOT CALLED AGAIN + CLA STL + 6141 /ENTER LINC MODE (MAYBE) + 4 /ESF - SET SMALL CHARACTERS FOR SCOPE + 0261 /ROL I 1 - ROTATE LINK INTO AC11 + 0002 /BACK TO PDP-8 MODE + SNA CLA /AC NON-ZERO IF WE ARE A PDP-12 + JMP NOTA12 /NO, JUST AN ORDINARY 8 + TAD YPDP12 + JMS CHANGE /TRADE OFF TWO PAGE HANDLERS FOR A SCOPE +NOTA12, TAD I Y7777 + AND COR70 + SZA + JMP SOFCOR +COR0, CDF 0 /NEEDED FOR PDP-8L + TAD CORSIZ /GET FIELD TO TEST + RTL + RAL + AND COR70 /MASK USEFUL BITS + TAD COREX + DCA .+1 /SET UP CDF TO FIELD +COR1, CDF /N /N IS FIELD TO TEST + TAD I CORLOC /SAVE CURRENT CONTENTS +COR2, NOP /HACK FOR PDP-8! + DCA COR1 + TAD COR2 /7000 IS A "GOOD" PATTERN + DCA I CORLOC +COR70, 70 /HACK FOR PDP-8, NOP + TAD I CORLOC /TRY TO READ BACK 7000 +CORX, 7400 /HACK FOR PDP-8, NOP + TAD CORX /GUARD AGAINST WRAP-AROUND + TAD CORV /TAD (1400 + SZA CLA + JMP COREX /NON-EXISTENT FIELD EXIT + TAD COR1 /RESTORE CONTENTS DESTROYED + DCA I CORLOC + ISZ CORSIZ /TRY NEXT HIGHER FIELD + JMP COR0 + +COREX, CDF 0 /LEAVE WITH DATA FIELD 0 + STA + TAD CORSIZ /HIGHEST EXISTING FIELD +COR999, DCA MEMSIZ + TAD MEMSIZ + SNA CLA + JMP JTECOM /8K + TAD YM7 /MORE THAN 8K + JMS I YMOVE + CDF 0 + QPUT12-1 + CDF 0 + QPUTS-1 + TAD YM7 + JMS I YMOVE + CDF 0 + QPUT12+7-1 + CDF 0 + GETQX-1 + TAD YTWLVEK + JMS CHANGE /AND CHANGE A WHOLE MESS OF LOCATIONS +JTECOM, JMS I YOVINIT /WRITE OUT OVERLAYS + CDF 10 + TAD I YSCPBIT + CDF 0 + AND [200 + SNA CLA + JMP JTECO + TAD YSCOPE + JMS CHANGE +JTECO, JMP I .+1 /INCREMENTED IF WE WERE'NT CHAINED TO + CHINIL +PTECO1, TECO1 + +CORLOC, CORX /ADDRESS TO TEST IN EACH FIELD +CORV, 1400 /7000+7400+1400=0 +CORSIZ, 1 /CURRENT FIELD TO TEST + +SOFCOR, CLL RAR + RTR + JMP COR999 + /CHAINED INIT CODE - MOVE 17600 INTO Q-REGISTER SPACE + +CHINIL, CDF 10 + TAD I DX /GET A COMMAND LINE CHAR + CDF 0 + QPUT + ISZ INICT + JMP CHINIL + TAD YFATALJ /SET UP THE FATAL ERROR EXIT + DCA I YCHOOPS /IN THE ERROR ROUTINE + JMP I YCHTECO +INICT, -CHNSTR + +ASRCNT, +CHANGE, -10 /ROUTINE TO CHANGE SPECIFIC LOCATIONS + DCA XR /STORE TABLE POINTER +CHANGL, TAD I XR /GET LOCATION + SNA + JMP I CHANGE /END OF LIST - RETURN + DCA TEMPT + TAD I XR /GET CONTENTS + DCA I TEMPT /ZAP! + JMP CHANGL + +/CHECK FOR OS/8 SCOPE BIT, IF ON, PATCH TECO +/ALSO SEND ESC SEQ TO TERMINAL TO SEE IF VT05 OR VT5X. + + +YOUTHTX, OUTHTX +YPOUTHT,POUTHT +Y7745, 7745 +Y7777, 7777 +YM7, -7 +YMOVE, MOVE +YOVINIT,OVINIT +YSCPBIT,SCPBIT +YFATALJ,FATALJ +YCHOOPS,CHOOPS +YCHTECO,CHTECO +YPDP12, PDP12-1 +YTWLVEK,TWLVEK-1 +YSCOPE, SCOPE-1 +YT0A, T0A&177+5200 +/FLOW INTO NEXT PAGE + SCOPE, RUBY; SCOPY /MAKE SCOPE RUBOUTS WORK + BLSP1; TAD CACR /MAKE BELL SPACE WORK + BLSP2; TYPE /AND MORE RUBOUTS + BLSP3; SCAPE&177+4600 /JMS I (ESCAPE + BLSP4; 113 /MORE BELL SPACE + EUFLAG; -1 /SET EU TO -1 + EU1; CLA + EU2; TAD [40 + 0 + /LOCATIONS TO CHANGE MUST BE CHANGED IN OVERLAY IMAGE +/BEFORE OVERLAY IS WRITTEN OUT + +/LOCATIONS TO CHANGE IF WE HAVE 12K OF CORE + +TWLVEK, INRSIZ; 4 /INPUT BUFFER GROWS TO 4 BLOCKS LONG + INCTLW; 1021 /AND LIVES IN FIELD 2 + INPCNT; 5000 + I2; CDF 20 + IC; CDF 0 /THIS WAS A NOP TO SPEED UP RTS-8 OPERATION + L12K1; J12K1 /SPEED UP TEXT MOVE ROUTINES, + L12K2; J12K2 /SINCE Q-REGISTERS DON'T SIT ON TOP OF TEXT. + OUTSIZ; 6777 /OUTPUT BUFFER TAKES OVER OLD INPUT BUFFER SPACE + BUFIN; 5600 + NWRUSR; TAD [4 /LET USR BE CALLED WITHOUT SAVING CORE + MQMAX; -Q12MAX /ALLOW MORE Q-REGISTER STORAGE + QLIMIT; 12-Q12MAX + 0 + + +/LOCATIONS TO CHANGE IF WE'RE RUNNING ON A PDP-12 + +PDP12, KSFWT; DISPLY /FIX KEYBOARD AND PRINTER WAITS + TSFWT; DISPLY /SO THEY DISPLAY WHILE WAITING + CDSP+127;CTLW /ENABLE W COMMAND + INHNDL; 7200 /ONE PAGE INPUT HANDLER ONLY + OUHNDL; 7400 /DITTO OUTPUT HANDLER + /VALUE MUST BE 0 INITIALLY TO END LIST +OVINIT, 0 /WRITE OUT OVERLAYS +/IF MORE THAN 12K, MOVE OVERLAYS TO FIELD 3 + MTHREE + TAD MEMSIZ + SPA CLA + JMP L16K /LESS THAN 16K + TAD [-400 + JMS MOVE + CDF 0 + 3200-1 + CDF 30 + MEMLOC-1 + TAD M2000 + JMS MOVE + CDF 0 + 5600-1 + CDF 30 + MEMLOC+400-1 + TAD M5 + JMS MOVE + CDF 10 + NEWERR-1 + CDF 0 + OVREAD-1 +/ TAD (COREAD-COREND-1 + TAD M3000 + JMS MOVE + CDF 10 + 4400-1 / COREAD-1 + CDF 30 + 4400-1 + JMP G16K +L16K, JMS I (7607 + 4200 + 3200 /WRITE OUT I/O-OVERLAY + IOVRLC + JMP OVERR /ERROR WRITING OVERLAY +M3000, JMS I (7607 + 5400 /4 OVERLAYS + 5600 /WRITE OUT Q-OVERLAY AND E-OVERLAY + QOVRLC + JMP OVERR /ERROR WRITING OUT OVERLAY +G16K, DCA I (ERRXX + JMP I OVINIT /RETURN + +OVERR, TAD [-400 /SWAP IN ERROR OVERLAY FROM CORE AND MAKE SURE + JMS MOVE /WE RETURN TO MONITOR + CDF 0 + 6200-1 + CDF 0 + 3200-1 +/ DCA I (ERRTMP /SET FATAL SWITCH + TAD (FATALJ + DCA I (CHOOPS +ERR30, JMP I (ERRYY /CALL ERROR MESSAGE PROCESSOR + +M2000, -2000 +M5, -5 + MOVE, 0 + DCA MQ + TAD I MOVE + DCA MOVEL + ISZ MOVE + TAD I MOVE + DCA INXR + ISZ MOVE + TAD I MOVE + DCA MOVEC + ISZ MOVE + TAD I MOVE + DCA XR + ISZ MOVE +MOVEL, HLT + TAD I INXR +MOVEC, HLT + DCA I XR + CDF 0 + ISZ MQ + JMP MOVEL + JMP I MOVE + /ROUTINES TO BE (POSSIBLY) SWAPPED INTO TECO + + *QPUT12 + RELOC QPUTS +QPUTS, 0 /12K Q-REGISTER PUT ROUTINE + AND [377 + CDF 20 + DCA I QP + CDF 0 + ISZ QP + JMP I QPUTS + + RELOC GETQX +GETQX, 0 /12K Q-REGISTER GET ROUTINE + DCA CHKCTC + CDF 20 + TAD I CHKCTC + CDF 0 + AND [377 + JMP I GETQX + + RELOC ASR33 + JMP OUTCMX / FORM FEED/VERT. TAB - USE 8/4 FILLERS +OUTHTX, TAD COLCT /GET COLUMN COUNTER + RTR + RAR + CLA CMA RAL /OUTPUT 2 FILLERS IF MORE THAN 4 CHARS TO TAB + DCA COLCT /OTHERWISE 1 (COLCT IS A MODULO 8 COUNTER) +OUTCMX, TAD SCHAR /GET CONTROL CHAR TO TYPE + PUTT /AND TYPE IT - WE WILL NOW FILL WITH NULLS + RELOC + PAGE + / Q-OVERLAY + + *5600 + + RELOC 3200 + + IOVRLC +QOVRLY, 0 + EOVRLC + XOVRLC + FOVRLC + +/O COMMAND + +CHROO, TAD SCANP /O COMMAND + DCA COOQ /SAVE CURRENT SCAN POINTER + DCA NFLG +/??? DCA QFLG /QUOTED "O" COMMAND NOT ALLOWED + QSKP /CHECK THAT THERE IS REALLY A STRING HERE + /BECAUSE WE WILL NOT USE "SCAN" TO GET CHARACTERS + /FROM THIS STRING IN THE SEARCH LOOP. + TAD ITRST /"O" ONLY SCANS FROM THE BEGINNING OF THE + DCA SCANP /CURRENT ITERATION LOOP. + /(JUMPS BACKWARD OUT OF ITERATIONS ARE VERBOTEN) + SKPSET +CS41, 41 /SEARCH FOR ! + TAD CS41 + DCA QUOTE /SET QUOTE CHAR TO ! + TAD COOQ + TAD QBASE + DCA QP /SET UP PTR TO ACCESS GOTO STRING +COOC, TAD QP + GETQ /GET CHAR FROM GOTO STRING + CIA + DCA MQ /SAVE IT + QUOTST /GET CHAR FROM LABEL + JMP COOB /LABEL EXHAUSTED + TAD MQ + SZA CLA /MATCH? + JMP CSMQ /NO - REJOIN SEARCH ROUTINE FOR ANOTHER ! + ISZ QP + JMP COOC +COOB, TAD MQ + TAD CAAM /IS GOTO STRING EXHAUSTED TOO? + SZA CLA + JMP CSMQ+1 /NO - REJOIN ! SEARCH ROUTINE + ENTRCE /RE-ENABLE TRACE + JMP I [IREST +COOQ, 0 + /ROUTINE TO SKIP COMMANDS UP TO A CHARACTER + +SETSKP, 0 /SET UP TO SKIP COMMANDS + TAD I SETSKP + DCA SKPLST /CHAR TO TRAP ON + NOTRCE /DISABLE TRACE MODE +CSML1, DCA BRACKS /INITIALIZE BRACKET LEVEL +CSML, SCANUP /GET A COMMAND CHAR + SORT + SKPLST + SKPTAB-SKPLST + JMP CSML /NOTHING SPECIAL - KEEP GOING +CSMD, SCAN /CLEAR OUT MODIFIER + JMP CSML + +CSMU, SCAN /SKIP ^U COMMAND + SKP CLA /GET RID OF Q-REG NUMBER +CSMFS, QSKP /FS COMMAND - SKIP FIRST STRING +CSMQ, QSKP /SKIP OVER A QUOTED STRING +CSMQ1, PUSHJ + IREST /FIX UP QUOTE CHAR + JMP CSML /KEEP GOING + +CSMY, TAD SCHAR /SKIP ROUTINE FOR ^A AND ! + DCA QUOTE /WE MUST SCAN UNTIL WE FIND + JMP CSMQ /A COPY OF THE COMMAND CHARACTER. + /SORT LIST FOR " COMMAND + +CNDLST, 103 /C + 107 /G + 116 /N + 114 /L + 105 /E + 124 /T + 123 /S + 106 /F + 125 /U + 122 /R + 74 /< + 76 /> + +CSME, SCANUP /FOUND E COMMAND + SORT + ESKLST /LOOK FOR ER & EW & EG + ESKTAB-ESKLST /USE CSMQ TO SKIP + JMP CSML /NO STRING + +CSMF, SCAN /F COMMAND - BETTER BE FOLLOWED BY S,N, OR _ + CLA + JMP CSMFS /SCAN OFF TWO STRINGS + +CSMI, ISZ BRACKS /INCREMENT BRACKET LEVEL + JMP CSML + +CSMO, STA + TAD BRACKS /DECREMENT BRACKET LEVEL + SPA + JMS I (POPITR /IF WE EXIT <> POP OFF ITERATION VALUES + JMP CSML1 + +SKPRTN, TAD BRACKS /WE HAVE FOUND THE DESIRED CHARACTER + SZA CLA /BUT IF THE BRACKET LEVEL IS NON-ZERO, + JMP I XSORTA1 /WE CANNOT ACCEPT IT - KEEP SORTING + JMP I SETSKP /EVERYTHING IS OK - RETURN + +BRACKS, 0 + /SORT LIST FOR SKIPPING OVER COMMANDS + +SKPLST, 0 /TRAP CHAR + 41 /! + 76 /> + 74 /< + 42 /" + 136 /^ + 100 /@ + 1 /^A + 11 /TAB + 25 /^U + 36 /^^ + 105 /E + 106 /F + 111 /I + 116 /N + 117 /O + 123 /S + 137 /_ + 121 /Q + 125 /U + 130 /X + 107 /G + 115 /M + 45 /% + / SKIP LIST FOR E'S +ESKLST, 122 /R + 127 /W + 102 /B + 107 /G + +CSMA, STA /LIST TERMINATOR + JMP CSMQ1 /FOUND @ - SET QUOTE FLAG AND CONTINUE + + +XSORTA1,SORTA1 + PAGE + /DISPATCH TABLE FOR SKIPPING OVER COMMANDS: + +SKPTAB, SKPRTN /DESIRED CHARACTER - RETURN + CSMY /! + CSMO /> + CSMI /< + CNDI /" + CSMC /^ + CSMA /@ + CSMY /^A + CSMQ /TAB + CSMU /^U + CSMD /^^ + CSME /E + CSMF /F +ESKTAB, CSMQ /I OR ER + CSMQ /N OR EW + CSMQ /O OR EB + CSMQ /S OR EG + CSMQ /_ + CSMD /Q + CSMD /U + CSMD /X + CSMD /G + CSMD /M + CSMD /% + SEMO, SKPSET /PLOD THRU + 76 /LOOKING FOR > + ENTRCE /IT'S THE RIGHT ONE, TURN TRACE BACK ON + JMP I ZCGSG +ZCGSG, CGSG + +CNDTAB, TSTSEP /LEGAL CONSTITUENT OF SYMBOL FOR ASSEMBLER + SZL SNA CLA /GT 0 + SNA CLA /NE 0 + SNL CLA /LT 0 + SZA CLA /EQ 0 + SNL CLA /TRUE + SNL CLA /SUCCESSFUL + SZA CLA /FALSE + SZA CLA /UNSUCCESSFUL + TSTSEP /ALPHANUMERIC + SNL CLA /< + SZL SNA CLA /> + +/THIS TABLE PRESUPPOSES 1000000000000 IS ILLEGAL + /COMMANDS " AND ' + +CDBQO, NCHK /COMMAND " +ERR23, ERR /NO NUMBER TO TEST + SCANUP + SORT + CNDLST + CNDTAB-CNDLST + SMA /CHECK THAT CHAR WAS TRANSLATED +ERR20, ERR /NO - NO SUCH TEST + DCA SKIP /STORE TEST INSTRUCTION + GETNUM /PERFORM THE TEST +SKIP, HLT /TEST SKIPS IF TRUE + SKP CLA + POPJ /CONDITION SATISFIED + STA /NOT SATISFIED + DCA SKIP /BEGINNING SKIPPING COMMANDS + SKPSET /CALL SKIPPING ROUTINE + 47 /FIND A ' + ISZ SKIP /FOUND A ' + RESORT /NEED ANOTHER: BACK TO CSML + ENTRCE /RE-ENABLE TRACE + JMP I [IREST /COMMAND ' NO ACTION TO TAKE + +CNDI, SCAN /HIT ANOTHER " + STA /SO SKIP MATCHING ' + TAD SKIP + DCA SKIP + RESORT /GO BACK TO CSML + /COMMANDS ; AND > + +CSEMO, TAD ITRST /COMMAND ; - ALSO HERE ON FAILING NON-COLON SEARCH + SNA CLA +ERR09, ERR /IF NOT IN ITERATION +CSEM2, TAD NLINK + SNA CLA + NCHK + JMP I (ZRON /NO NUMBER - IGNORE IT, WE DID IT ALREADY + JMP SEMO /SEARCH FOR > + +CHGTO, TAD ITRCNT + SNA CLA + JMP CGTC /0 MEANS INFINITY + ISZ ITRCNT /LOOK FOR COUNT EXHAUSTED + JMP CGTC /NO, CONTINUE +CGSG, JMS POPITR /POP UP OLD ITERATION PARAMETERS + JMP I [IREST +CGTC, TAD ITRST + SNA +ERR10, ERR /IF NOT IN ITERATION + JMP I (ZROSPN /BACK TO ROOT + +POPITR, 0 + CLA IAC /** AC NOT NECESSARILY 0 ON ENTRY + POPL + ITRCNT + ITRST + JMP I POPITR + CHLTO, MTWO /COMMAND < + PUSHL + ITRST + ITRCNT + TAD NFLG + SNA CLA /WAS A NUMBER SPECIFIED? + JMP INF /NO, ASSUME INFINITY + TAD NLINK + SNA CLA + TAD N + SNA + JMP SEMO /0 OR NEGATIVE MEANS SKIP ITERATION + CIA /MAKE NEGATIVE +INF, DCA ITRCNT /SET UP TERMINATION + TAD SCANP /SAVE CURRENT SCAN PNTR + DCA ITRST /ALWAYS .GE. 1 IN ITERATION + DCA NFLG /CLEAR NUMBER FLAG + POPJ + +/SHOULD WE TREAT 0<> SPECIAL? + PAGE + RELOC + / ERROR-OVERLAY + + *6200 + + RELOC 3200 + + IOVRLC + QOVRLC +EOVRLY, 0 + XOVRLC + FOVRLC + +ERRYY, DCA N + TAD (ERLIST-1 + DCA XR +ERLOOP, ISZ N /BUMP ERROR NUMBER + TAD I XR + SZA /END OF LIST? + TAD I (ERRXX /NO - CHECK FOR MATCH +Z40, SZA CLA /FOUND WHAT WE WANTED? + JMP ERLOOP /NO - KEEP LOOKING + TAD N + CLL RAL /MULTIPLY BY 2 + TAD (ERBASE-2 + DCA PTR + TAD I PTR /GET FIRST WORD OF ERR MSG + SPA CLA + JMP CTCT /^C TRAP +ERL2, TAD [77 + TYPE + TAD I PTR + RTR + RTR + RTR + JMS I (SIXTYP /TYPE LEFT CHARACTER + TAD I PTR + JMS I (SIXTYP /TYPE RIGHT CHARACTER + ISZ PTR + TAD I PTR + RTR + RTR + RTR + JMS I (SIXTYP /TYPE 3RD CHARACTER + CLA IAC + AND I (EHFLAG + SZA CLA + JMP I (ERRRET + MTHREE + TAD MEMSIZ + SPA CLA + JMP I (ERRRET /NO LONG ERROR MESSAGE UNLESS 16K OOR MORE + TAD Z40 /TYPE EXTENDED ERROR MESSAGE + TYPE + TAD Z40 + TYPE +/ TAD Z40 +/ TYPE + TAD N + TAD (XERBAS-1 + DCA PTR /GET PTR TO PTR TO ERROR MSG + CDF 30 + TAD I PTR /GET PTR TO ERROR MESSAGE + DCA PTR +XLUP, TAD I PTR + CDF 0 + SNA + JMP I (ERRRET + SPA + JMS NEGCHR /NEGATIVE CHAR IS FLAG FOR ERRONEOUS CHARACTER + PUTT + ISZ PTR + CDF 30 + JMP XLUP + +CTCT, KRS /CTRL/C ERROR MESSAGE + AND [177 /ISOLATE ^C OR ^P INTO 7-BIT + TYPE /READ CTRL/C FROM BUFFER + CRLF /ECHO IT AND CR LF + TAD I [QPNTR + SZA CLA + JMP ERL2 /PRINT XAB ERROR MESSAGE +/ MTHREE +/ TAD CHAR /LOOK AT PREVIOUS CHARACTER +/ SZA CLA +/ JMP I (ERRRET /ONE ^C DO NOTHING + JMP I (CTLC /TWO ^C'S, ABORT + NEGCHR, 0 + CLA + TAD LASTC + SORT + CACR + ERPTAB-CACR + SPA + DCA LASTC /SAVE $ FOR ALTMODE + CLA + TAD ("" + PUTT + TAD LASTC + AND [7740 + SNA CLA + JMS WOW /USE CARRET FORM FOR CONTROL CHARS + TAD LASTC /AC MAY BE NON-0 + PUTT + TAD ("" + JMP I NEGCHR + +WOW, 0 + TAD ("^ + PUTT + TAD [100 + JMP I WOW + +SPY, TAD LASTC + TAD (-11+CNVTAB + DCA WOW + TAD ("< + PUTT + TAD I WOW + RTR + RTR + RTR + JMS I (SIXTYP + TAD I WOW + JMS I (SIXTYP + TAD ("> + JMP I NEGCHR + PTR, 0 + + PAGE + SIXTYP, 0 + AND [137 /IGNORE SIGN BIT OF BYTE + TAD [40 + AND [77 + TAD [40 + PUTT + JMP I SIXTYP + ERLIST, -ERR01-1 /LIST OF POINTERS TO ALL POSSIBLE + -ERR02-1 /CALLS TO THE ERROR ROUTINE. + -ERR03-1 + -ERR04-1 + -ERR05-1 + -ERR06-1 + -ERR07-1 + -ERR08-1 + -ERR09-1 + -ERR10-1 + -ERR11-1 + -ERR12-1 + -ERR13-1 + -ERR14-1 + -ERR15-1 + -ERR16-1 + -ERR17-1 + -ERR18-1 + -ERR19-1 + -ERR20-1 + -ERR21-1 + -ERR22-1 + -ERR23-1 + -ERR24-1 + -ERR25-1 + -ERR26-1 + -ERR27-1 +ERR28, -ERR28-1 + -ERR29-1 + -ERR30-1 + -ERR31-1 + -ERR32-1 + -ERR33-1 + -ERR34-1 + -ERR35-1 + 0 /ERROR 36 - UNLABELED ERROR - NAMELY "JMS I OUTR" + /** MUST BE LAST ERROR MESSAGE + ERBASE, TEXT /ILL/ /1 ILLEGAL COMMAND + TEXT /UTC/ /2 UNTERMINATED COMMAND + TEXT /IQN/ /3 ILLEGAL Q-REGISTER NAME + TEXT /PDO/ /4 INTERNAL PUSH DOWN OVERFLOW (RECURSION) + TEXT /MEM/ /5 MEMORY OVERFLOW + TEXT /STL/ /6 SEARCH STRING TOO LONG + TEXT /ARG/ /7 ARGUMENT ERROR + TEXT /IFN/ /8 ILLEGAL FILE NAME + TEXT /SNI/ /9 SEMICOLON NOT IN ITERATION + TEXT /BNI/ /10 CLOSE BRACKET NOT IN ITERATION + TEXT /POP/ /11 POINTER OFF PAGE + TEXT /QMO/ /12 Q-REGISTER MEMORY OVERFLOW + TEXT /UTM/ /13 UNTERMINATED MACRO + TEXT /OUT/ /14 OUTPUT ERROR + TEXT /INP/ /15 INPUT ERROR + TEXT /FER/ /16 FILE ERROR + TEXT /FUL/ /17 OUTPUT COMMAND WOULD HAVE OVERFLOWED + TEXT /NAY/ /18 NEGATIVE ARGUMENT TO Y + TEXT /IEC/ /19 ILLEGAL E CHARACTER + TEXT /IQC/ /20 ILLEGAL " CHARACTER + TEXT /NAE/ /21 NO ARGUMENT BEFORE = + TEXT /NAU/ /22 NO ARGUMENT BEFORE U + TEXT /NAQ/ /23 NO ARGUMENT BEFORE " + TEXT /SRH/ /24 FAILING SEARCH + TEXT /NAP/ /25. NEGATIVE OR 0 ARGUMENT TO P + TEXT /NAC/ /26. NEGATIVE ARGUMENT TO , + TEXT /NYI/ /27. ^W NOT IMPLEMENTED + TEXT /DMY/ /28. NOT USED + TEXT /NAS/ /29. NEGATIVE OR 0 COUNT TO SEARCH + TEXT /WLO/ /30. CAN'T WRITE OUT ERROR MESSAGE OVERLAY + TEXT /IFC/ /31. ILLEGAL F CHARACTER + TEXT /YCA/ /32. Y COMMAND ABORTED + TEXT /CCL/ /33. CCL NOT FOUND OR EG TOO BIG +/ TEXT /XAB/ /34. EXECUTION ABORTED BY ^C + 7001;0200 + TEXT /NYI/ /35. ^V NOT IMPLEMENTED + TEXT /NFO/ /36. NO FILE FOR OUTPUT + CNVTAB, TEXT /HTLFVTFFCR/ + *.-1 +ERPTAB, SPY /CR + SPY /HT + 4044 /$ + SPY /FF + SPY /VT + SPY /LF + PAGE + RELOC + / X-OVERLAY + + *6600 + + RELOC 3200 + + IOVRLC + QOVRLC + EOVRLC +XOVRLY, 0 + FOVRLC + +CHREX, TAD I (TYI + SORT + XLIS + XTAB-XLIS + ERR /CAN'T HAPPEN + +XLIS, 103 /EC + 106 /EF + 107 /EG + 113 /EK + 130 /EX + + /"EX" AND "EC" COMMANDS +EXIT, PUSHJ /"EX" COMMAND + EXITC /CLOSE OUT THE FILES + JMP I (CTLC /AND GO AWAY + +EXITC, TAD OUTR /"EC" COMMAND + CIA /CHECK FOR OPEN OUTPUT FILE + TAD ERROR + SNA CLA + POPJ /NOPE, EXIT ALREADY +EXLOOP, JMS I [NXTBUF /GET NEXT BUFFER + TAD REND + CIA + TAD ZZ /CHECK FOR END-OF-FILE AND + SZA CLA /TEXT BUFFER EMPTY + JMP EXLOOP /NOT YET + /ENDFILE PROCESSOR +ENDFIL, TAD OCRCNT + CMA /REDUCE THE OUTPUT DOUBLEWORD COUNT + AND [177 /TO REFLECT ONLY THOSE WORDS REMAINING + CMA /UNTIL THE NEXT BLOCK BOUNDARY + DCA OCRCNT + TAD (7200 /USED TO BE 'DV7200' + DCA MQ /SET COUNTER FOR ONE BLOCK WORTH OF STUFF + TAD (32 /^Z END-OF-FILE + OUTPUT + ISZ MQ + JMP .-2 /FILL AT LEAST THE CURRENT BUFFER AND OUTPUT IT + TAD ODEV /MAKE SURE THE USR KNOWS THE HANDLER + TAD (OSHNDT-1 /*K* - POINTER INTO + DCA TY / OS/8 DEVICE RESIDENCY TABLE + CDF 10 + TAD OUTHND + DCA I TY /MARK THE HANDLER AS IN CORE + JMS I (GETUSR /LOCK THE USR INTO CORE + TAD EBFLG /IS THIS AN EDIT BACKUP? + SNA CLA + JMP I (NORMAL /NO, JUST CLOSE FILE + TAD I (OCNT-1 /YES, LOOKUP OLD FILE TO CHANGE NAME + DCA TY-1 + CIF 10 + TAD ODEV /INPUT AND OUTPUT ARE ON SAME DEVICE + JMS I [200 + 2 + OUNAM +TY, 0 /USELESS LENGTH--USE IT FOR TEMPORARY + JMP I (NORMAL /ERROR-JUST CLOSE FILE AND DON'T TELL ANYBODY + CDF 10 /ALL THAT WAS JUST TO GET THE DIRECTORY IN CORE + STA /SO WE COULD FIDDLE WITH IT + TAD I (17 /FORM POINTER TO DIRECTORY ENTRY + TAD I (1404 + DCA TY + TAD (213 /CHANGE EXTENSION TO .BK + DCA I TY + TAD I Z7 /DIRECTORY BLOCK IT CAME FROM + AND Z7 + DCA ACI + CDF 0 + JMS I OUTHND + 4210 /WRITE IT BACK OUT + 1400 +ACI, 0 + JMP .-4 /ERROR! KEEP TRYING-THIS CAN BLOW A DIRECTORY + JMP I (NORMAL + XTAB, EXITC /EC + ENDFIL /EF + EXITGO /EG + EKILL /EK + EXIT /EX + EKILL, TAD ERROR + DCA OUTR + POPJ + PAGE + EXITGO, PUSHJ /DO AN EC TO CLOSE OUT FILE + EXITC + QCHK /ALLOW @ + DCA STOCD /MAKE REUSABLE IN CASE .START + TAD (7600 + DCA CDPTR + TAD (-47 /47 ENTRIES IN CD TABLE + DCA EGCNT +EG1, QUOTST + JMP EG2 + TAD [200 /TURN ON PARITY BIT FOR OS/8 + JMS STOCD + JMP EG1 + +STOCD, 0 + ISZ EGCNT + SKP +ERR33, ERR /EG ARG TOO BIG + CDF 10 + DCA I CDPTR + CDF 0 + ISZ CDPTR + JMP I STOCD + +CDPTR, 7600 +EGCNT, -41 + +EG2, TAD STOCD + SNA CLA /ANYTHING IS ARG + JMP REGEG /NO + JMS STOCD /STORE 0 AT END + JMS I (GETUSR + TAD (CCLNAM + DCA ARG1 /JUST IN CASE PREVIOUS EG FAILED + CLA IAC /SYS + CIF 10 + JMS I [200 + 2 /LOOKUP +ARG1, CCLNAM + 0 + JMP CCLERR + TAD (2001 + DCA I (JSBITS /KEEP USR IN CORE + TAD ARG1 + DCA CHNBLK + CIF 10 + JMS I [200 + 6 /CHAIN +CHNBLK, 0 + CCLERR, PUSHJ + ECDISM + JMP ERR33 + +CCLNAM, FILENAME CCL.SV + REGEG, /EDIT AND GO - A CCL SPECIAL + JMS I (7607 /CALL THE OS/8 SYSTEM HANDLER + 0200 /TO READ IN THE CCL OVERLAY + CCLADR + CCLOVL + JMP ERR33 /ERROR ON SYSTEM DEVICE! + JMP I .+1 /GO TO THE OVERLAY + CCLOST /AT OUR "SPECIAL" LOCATION + RELOC + / F-OVERLAY + + *7200 + + RELOC 3200 + + IOVRLC + QOVRLC + EOVRLC + XOVRLC +FOVRLY, 0 + +CHRED, TAD I (TYI + SORT + DLIS + DTAB2-DLIS /CHECK FOR LEGALITY +ERR19, ERR /BAD CHAR AFTER E +DTOK, TAD I (TYI + SORT + DLIS + DTAB-DLIS + DCA XXFLAG + NCHK /ANY ARGUMENT? + JMP XXNO /NO, RETURN VALUE + TAD N /YES + DCA I XXFLAG /SET NEW VALUE + TAD XXFLAG + TAD (-EDFLAG+XXSUBS + DCA XXSUB + TAD I XXSUB + DCA XXSUB + JMS I XXSUB /CALL IT + POPJ /RETURN +XXNO, TAD I XXFLAG /GET VALUE + JMP I (NNEW13 /MAKE NEW 13-BIT VALUE + +DLIS, 104 /ED + 110 /EH + 117 /EO + 123 /ES + 124 /ET + 125 /EU +DTAB, EDFLAG /MUST BE NEGATIVE + EHFLAG /TO CAUSE SUBSTITUTION + EOFLAG + ESFLAG + ETFLAG + EUFLAG + XXFLAG, 0 /POINTS TO FLAG IN MEMORY ABOVE 4000 + +DTAB2, DTOK + DTOK + DTOK + DTOK + DTOK + DTOK + +XXSUB, 0 + / MASK;SKIP;LOC;VALUE IF SKIPS;VALUE IF NO SKIP + +EUSUB, 0 + JMS FIXUP + 7777; SMA CLA; EU1; CLA; SNA CLA + 7777; SPA SNA CLA; EU2; TAD [40;NOP + 0 + JMP I EUSUB + +ETSUB, 0 + JMS FIXUP + 1; SNA CLA; KTYPE; PUTT; TYPE + 1; SNA CLA; ET1; PUTT; TYPE + 10; SNA CLA; ET8; CLA; TYPE + 0 + JMP I ETSUB + + LOC, 0 +MASK, 0 + +FIXUP, 0 +FIXLUP, TAD I FIXUP + SNA + JMP I FIXUP /DONE, RETURN TO 0 + DCA MASK /SAVE MASK + ISZ FIXUP + TAD I FIXUP + DCA SKIPY /SAVE SKIP CONDITION + ISZ FIXUP + TAD I FIXUP + DCA LOC /SAVE LOC TO CHANGE + ISZ FIXUP + TAD I XXFLAG /LOOK AT FLAG + AND MASK /'AND' WITH MASK +SKIPY, HLT + JMP SKPF + TAD I FIXUP + DCA I LOC + ISZ FIXUP +SKPT, ISZ FIXUP + JMP FIXLUP +SKPF, ISZ FIXUP + TAD I FIXUP + DCA I LOC + JMP SKPT + CTLUO, QREF /COMMAND ^U + QSKP /COUNT UP STRING + TAD OSCANP + CMA + TAD SCANP /LENGTH OF STRING +/ +/ *** PROHIBIT STRING > 2047 CHARS +/ + ADJQ /ADJUST Q-REGISTERS AND SET NEW LENGTH + TAD OSCANP /RESET SCAN POINTER + DCA SCANP + DCA NFLG + NOTRCE +CCUB, QUOTST + JMP CTLUND + QPUT + JMP CCUB +CTLUND, ENTRCE + JMP I [IREST + PAGE + /NUMERICAL OUTPUT ROUTINE + +ZEROD, 0 + DCA ZERFLG /INITIALIZE "LEADING ZEROS" FLAG + TAD I ZEROD + ISZ ZEROD + DCA OUTDEV /SAVE OUTPUT ROUTINE ADDRESS + TAD NLINK /POS OR NEGATIVE? + SNA CLA + JMP ZER2 /POSITIVE + TAD RADIX + TAD (-ORAD + SNA CLA + JMP PUTSGN /OCTAL + TAD N /DECIMAL + CIA + DCA N /NEGATE + SKP +PUTSGN, TAD ["1-"- + TAD ("- + JMS I OUTDEV /OUTPUT MINUS SIGN +ZER2, MTHREE + DCA ZCOUNT /ITERATION COUNT + TAD RADIX + DCA RXR +ZDIGIT, ISZ RXR + TAD I RXR + DCA DIV1 /GET DIVISOR + TAD N + MQLDVI /DIVIDE BY A POWER OF THE BASE +DIV1, 0 + TAD ZERFLG + SNA + JMP LZ /IGNORE LEADING ZEROS + TAD (60 + JMS I OUTDEV + STL RAR + DCA ZERFLG /SET LEADING ZEROS FLAG +LZ, TAD DVT1 /GET REMAINDER + DCA N + ISZ ZCOUNT /GO AROUND AGAIN? + JMP ZDIGIT /WHY NOT? + TAD N + TAD (60 + JMS I OUTDEV /OUTPUT LAST DIGIT NO MATTER WHAT + JMP I ZEROD + +OUTDEV, 0 /WHERE WE'RE SENDING THE DIGITS +ZERFLG, 0 +ZCOUNT, 0 +RXR, 0 + /COMMANDS = AND \ + +/COMMANDS = AND \ - NUMERICAL OUTPUT + +CEQLO, NCHK /COMMAND = +ERR21, ERR /NO NUMBER + TAD RADIX + DCA RADTMP + JMS I (POKE /LOOK AHEAD ONE CHARACTER + TAD (-75 /CHECK FOR = SIGN + SZA CLA + JMP SETRAD /SINGLE = + SCAN /DOUBLE = (PASS UP SECOND ONE) + SKP CLA /CLEAR AC +SETRAD, TAD [4 + TAD (ORAD + DCA RADIX /SET OCTAL RADIX TEMPORARILY + JMS ZEROD + TPUT + TAD RADTMP + DCA RADIX /RESTORE ORIGINAL RADIX + ISZ CLNF /: SEEN? + CRLF /NO, END WITH CRLF + DCA CLNF + POPJ + +CBSLO, NCHK /COMMAND \ + JMP CBSN + JMS ZEROD + UPOC + POPJ + +RADTMP, 0 + CBSN, PUSHJ + NMBR2 /INITIALIZE RESULT TO 0 + JMS PTCH + TAD I P + AND [377 /GET CURRENT CHARACTER + CDF 0 + TAD (-55 /CHECK FOR MINUS SIGN + SZA + JMP .+3 /NOT MINUS + PUSHJ + CMIN /RECORD MINUS SIGN + CIA + CLL RTR + SNA CLA /CHECK FOR PLUS SIGN +CBSNP, ISZ P /BUMP POINTER PAST SIGN + JMS PTCH + TAD I P /GET A CHAR + AND [377 + CDF 0 + TAD (-72 + CLL + TAD CALF + SNL /IS IT A DIGIT? + POPJ /NO + PUSHJ + NMBR2 /YES - ACCUMULATE IT + JMP CBSNP /AND LOOP + PTCH, 0 + TAD P /V3C + STL CIA /CHECK FOR END OF BUFFER + TAD ZZ + SZL SNA CLA + POPJ + CDF 10 + JMP I PTCH + +XXSUBS, EDSUB + EHSUB + EOSUB + ESSUB + ETSUB + EUSUB +/ CXSUB + +/CXSUB, +EDSUB, +EHSUB, +ESSUB, +EOSUB, 0 + JMP I EOSUB + PAGE + RELOC + FIELD 1 + + *4400 + +XERBAS, XER1 + XER2 + XER3 + XER4 + XER5 + XER6 + XER7 + XER8 + XER9 + XER10 + XER11 + XER12 + XER13 + XER14 + XER15 + XER16 + XER17 + XER18 + XER19 + XER20 + XER21 + XER22 + XER23 + XER24 + XER25 + XER26 + XER27 + XER28 + XER29 + XER30 + XER31 + XER32 + XER33 + XER34 + XER35 + XER36 + XER1, +"I;"l;"l;"e;"g;"a;"l;" ;"C;"o;"m;"m;"a;"n;"d;" ;4000;0 +XER2, +"U;"n;"t;"e;"r;"m;"i;"n;"a;"t;"e;"d;" ;"C;"o;"m;"m;"a;"n;"d;0 +XER3, +"I;"l;"l;"e;"g;"a;"l;" ;"Q;"-;"r;"e;"g;"i;"s;"t;"e;"r;" ;"N;"a;"m;"e;" ;4000;0 +XER4, +"I;"n;"t;"e;"r;"n;"a;"l;" ;"P;"u;"s;"h;" ;"D;"o;"w;"n;" ;"O;"v;"e;"r +"f;"l;"o;"w;0 +XER5, +"S;"t;"o;"r;"a;"g;"e;" ;"C;"a;"p;"a;"c;"i;"t;"y;" ;"E;"x;"c;"e;"e;"d;"e;"d;0 +XER6, +"S;"e;"a;"r;"c;"h;" ;"S;"t;"r;"i;"n;"g;" ;"t;"o;"o;" ;"L;"o;"n;"g;0 +XER7, +"I;"m;"p;"r;"o;"p;"e;"r;" ;"A;"r;"g;"u;"m;"e;"n;"t;"s;0 +XER8, +"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000 +" ;"i;"n;" ;"F;"i;"l;"e;"n;"a;"m;"e;0 +XER9, +";;" ;"n;"o;"t;" ;"i;"n;" ;"a;"n;" ;"I;"t;"e;"r;"a;"t;"i;"o;"n;0 +XER10, +">;" ;"n;"o;"t;" ;"i;"n;" ;"a;"n;" ;"I;"t;"e;"r;"a;"t;"i;"o;"n;0 +XER11, +"A;"t;"t;"e;"m;"p;"t;" ;"t;"o;" ;"M;"o;"v;"e;" ;"P;"o;"i;"n;"t;"e;"r +" ;"O;"f;"f;" ;"P;"a;"g;"e;0 +XER12, +"Q;"-;"r;"e;"g;"i;"s;"t;"e;"r;" ;"M;"e;"m;"o;"r;"y;" ;"O;"v;"e;"r;"f;"l;"o;"w;0 +XER13, +"U;"n;"t;"e;"r;"m;"i;"n;"a;"t;"e;"d;" ;"M;"a;"c;"r;"o;0 +XER14, +"O;"u;"t;"p;"u;"t;" ;"E;"r;"r;"o;"r;0 +XER15, +"I;"n;"p;"u;"t;" ;"E;"r;"r;"o;"r;0 +XER16, +"F;"i;"l;"e;" ;"E;"r;"r;"o;"r;0 +XER17, +"O;"u;"t;"p;"u;"t;" ;"C;"o;"m;"m;"a;"n;"d;" ;"w;"o;"u;"l;"d;" ;"h;"a;"v;"e +" ;"O;"v;"e;"r;"f;"l;"o;"w;"e;"d;0 +XER18, +"N;"u;"m;"e;"r;"i;"c;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"Y;0 +XER19, +"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000 +" ;"a;"f;"t;"e;"r;" ;"E;0 +XER20, +"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000 +" ;"a;"f;"t;"e;"r;" ;"";0 +XER21, +"N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"=;0 +XER22, +"N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"U;0 +XER23, +"N;"o;" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"b;"e;"f;"o;"r;"e;" ;"q;"u;"o;"t;"e;0 +XER24, +"S;"e;"a;"r;"c;"h;" ;"f;"a;"i;"l;"e;"d;0 +XER25, +"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o +" ;"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"P;0 +XER26, +"N;"e;"g;"a;"t;"i;"v;"e;" ;"a;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;",;0 +XER27, +"C;"a;"s;"e;" ;"S;"u;"p;"p;"o;"r;"t;" ;"n;"o;"t +" ;"I;"m;"p;"l;"e;"m;"e;"n;"t;"e;"d;215;212;211;177;177 +"[;"u;"s;"e;" ;"W;" ;"f;"o;"r;" ;"W;"a;"t;"c;"h;" ;"C;"o;"m;"m;"a;"n;"d;"];0 +/XER28, +/"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o;" +/"I;"t;"e;"r;"a;"t;"i;"o;"n;" ;"C;"o;"u;"n;"t;0 +XER28, +0 +XER29, +"N;"e;"g;"a;"t;"i;"v;"e;" ;"o;"r;" ;"Z;"e;"r;"o;" +"A;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;" ;"S;0 +XER30, +"C;"a;"n;"n;"o;"t;" ;"W;"r;"i;"t;"e;" ;"O;"u;"t;" ;"E;"r;"r;"o;"r +" ;"M;"e;"s;"s;"a;"g;"e;" ;"O;"v;"e;"r;"l;"a;"y;0 +XER31, +"I;"l;"l;"e;"g;"a;"l;" ;"C;"h;"a;"r;"a;"c;"t;"e;"r;" ;4000 +" ;"a;"f;"t;"e;"r;" ;"F;0 +XER32, +"Y;" ;"C;"o;"m;"m;"a;"n;"d;" ;"A;"b;"o;"r;"t;"e;"d;0 +XER33, +"C;"C;"L;".;"S;"V;" ;"n;"o;"t;" ;"f;"o;"u;"n;"d;" ;"o;"r;" +"E;"G;" ;"a;"r;"g;"u;"m;"e;"n;"t;" ;"t;"o;"o;" ;"b;"i;"g;0 +XER34, +"E;"x;"e;"c;"u;"t;"i;"o;"n;" ;"a;"b;"o;"r;"t;"e;"d;0 +XER35, +"C;"a;"s;"e;" ;"S;"u;"p;"p;"o;"r;"t;" ;"n;"o;"t;" +"I;"m;"p;"l;"e;"m;"e;"n;"t;"e;"d;215;212;211;177;177 +"[;"u;"s;"e;" ;"E;"O;" ;"f;"o;"r +" ;"V;"e;"r;"s;"i;"o;"n;" ;"n;"u;"m;"b;"e;"r;"];0 +XER36, +"N;"o;" ;"F;"i;"l;"e;" ;"f;"o;"r;" ;"O;"u;"t;"p;"u;"t;0 + PAGE + COREAD, 0 + ISZ COREAD + TAD I COREAD /GET BLOCK # + AND CO7 + CLL RTR + RTR + RAR /MULTIPLY BY 400 + TAD KMEM + DCA FLO + TAD M400 + DCA FLCNT + TAD K3200 + DCA FTO +FLOO, CDF 30 + TAD I FLO + CDF 0 + DCA I FTO + ISZ FLO + ISZ FTO + ISZ FLCNT + JMP FLOO + ISZ COREAD + CIF CDF 0 + JMP I COREAD + +FLCNT, 0 +CO7, 7 +M400, -400 +K3200, 3200 +KMEM, MEMLOC +FLO, 0 +FTO, 0 +COREND=. + NEWERR, RELOC OVREAD + CIF 30 /NEW CODE TO READ OVERLAY + JMS I .+1 /MUST BE 5 LOCS LONG + COREAD +TMP, 0 /BLOCK # + NOP + RELOC + PAGE + ADDED src/os8-v3f/VXNS.PA Index: src/os8-v3f/VXNS.PA ================================================================== --- /dev/null +++ src/os8-v3f/VXNS.PA @@ -0,0 +1,243 @@ +/EXTENDED MEMORY DEVICE HANDLER +/ +/ +/PSEUDO DEVICE SIMILAR TO DF32 +/BUT IN RAM MEMORY USING FIELDS +/10 TO 17 FOR PLATTER 1 +/20 TO 27 FOR PLATTER 2 +/30 TO 37 FOR PLATTER 3 +/ +/ +/ S.R.,J.R.,J.M. +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1978 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ +/BUILD DATA + *0 +/ +/1 EXTENDED MEMORY HANDLER FOR OS/8 + + + IFNDEF SYS /SET TO 1 TO GET SYSTEM HANDLER + + + -1 + IFZERO SYS + IFNZRO SYS + VXVER="A&77 + + IFNZRO SYS < + + 7737 /MINUS LENGTH OF BOOT + RELOC 0 + + CLL CLA CMA /CLEAR AC & SET TO 7777 + DCA X0 + TAD K7600 + DCA C1 + TAD K7600 + DCA C2 + TAD K7577 + DCA X1 + TAD K7577 + DCA X2 + JMP 20 +X0, 0 +X1, 0 +X2, 0 +C1, 0 +C2, 0 + CDF 4 + TAD I X0 + CDF 10 + DCA I X1 + ISZ C1 + JMP 20 + CDF 4 + TAD I X0 + CDF 0 + DCA I X2 + ISZ C2 + JMP 26 + CDF CIF 0 + JMP I .+1 + 7605 +K7600, 7600 +K7577, 7577 + RELOC + > + *200 + + IFNZRO SYS < RELOC 7600 + ZBLOCK 7> + +MEM, VXVER + CLA CLL CML RAR /SET AC TO 4000 + TAD I MEM /GET ARG 1 -- LINK WILL BE SET IF WRITE + AND VX70 /MASK OFF FIELD + TAD VCDF /FORM A CDF N + DCA FLD /STORE AT INPUT + TAD FLD + DCA WR /AND AT OUTPUT + RAR /GET WRITE BIT + MQL /SAVE IN MQ + IFZERO SYS < + TAD K7000 + 6200 /SET MEM EXT BITS + CLA CLL + > + TAD I MEM /AGAIN GET ARG 1 + RAL /MULT X 2 = PAGESX2=WORDS + AND VX7600 /MASK OFF OTHER BITS + CIA /MAKE NEGATIVE + DCA WDCNT /STORE AT 7753 + CLL /CLEAR LINK IF IT WAS WRITE + ISZ MEM /INCR POINTER + TAD I MEM /GET ARG 2 + DCA BUFADR /STORE BUFFER POINTER IN 7750 + ISZ MEM /INCR POINTER + TAD I MEM /GET ARG 3 -OS/8 BLOCK # + DCA BLK /STORE IN 7752 + TAD BLK + AND VX17 /GET BITS 8 TO 11 TO MAKE INTO START ADDR + BSW + RTL + DCA SA /STORE START ADDR OF EXT MEM IN 7751 + TAD BLK + RAR + AND VX70 + TAD VCDF /THIS GET BITS 5 TO 7 FOR EXT MEM BIT CDE + DCA RD /TEMP STORE UNTIL BITS A & B ARE EVALUATED + RDF /NOW GRAB SENDING FIELD IN AC + TAD VXCDI /FORM A CDI N OF SENDING FIELD + DCA VXRET /STORE AT RETURN ROUTINE + ISZ MEM /NOW RETURN POINTS TO ERROR +VXCDI, CDF CIF 0 /PUT INTO CURRENT FIELD ALSO CONSTANT FOR CDI + TAD BLK /NOW WE NEED TO KNOW BITS A & B IN EXT MEM + TAD M200 /IS OS/8 BLOCK 0-177 + SPA + JMP DOB /YES SO SET BIT B + TAD M200 /IS OS/8 BLOCK 200-377 + SPA CLA + JMP DOA /YES SO SET BIT A + TAD VX4 /NO SO SET BIT B + TAD VX100 /AND BIT A +GO, TAD RD /PICK UP TEMP CDF + DCA RD /STORE IT AT INPUT + TAD RD + DCA FLD2 /AND AT OUTPUT + MQA /NOW GET WRITE BIT (IF ANY) + SNA CLA + JMP RD /NO WRITE BIT SO GO TO READ ROUTINE +WR, HLT /WRITE ROUTINE - THIS BECOMES A CDF N + TAD I BUFADR /GET DATA FROM INPUT BUFFER +FLD2, HLT /THIS CHANGES TO CDF N (HIGH FIELDS) + DCA I SA /DUMP INTO EXTEND MEM + JMS VCK /CHECK FOR END OF ROUTINE & RESET FIELDS + JMP WR /NOT DONE YET SO CONTINUE +RD, HLT /READ ROUTINE - THIS BECOMES A CDF N (HIGH) + TAD I SA /GET DATA FROM EXTENDED MEM +FLD, HLT /CHANGES TO CDF N (LOW) + + DCA I BUFADR /PUT INTO BUFFER IN LOWER MEMORY + JMS VCK /CHECK FOR END OF ROUTINE & RESET FIELDS + JMP RD /NOT DONE SO CONTINUE +M200, +VX7600, 7600 /K7600 & M200 & CLA ON EXIT + ISZ MEM /INCR POINTER TO GOOD EXIT +VXRET, HLT /CHANGES TO CDF CIF N OF SENDING FIELD + JMP I MEM /RETURN TO CALLING ROUNTINE +VCK, 0 /THIS CHECKS READ AND WRITE FOR DONE + IFZERO SYS + ISZ WDCNT /AND FOR RESET OF FIELDS + SKP /NO OVERFLOW SO SKIP TO CONTINUE + JMP VX7600 /OVERFLOW SO DONE - GO TO EXIT ROUTINE + ISZ BUFADR /INCR POINTER IF OVERFLOWS THEN WRAP MEMORY +VX70, 70 /CONSTANT THAT DOES A NOP HERE IF NO OVERFLOW + ISZ SA /INCR START ADDR IN EXT MEM + + JMP I VCK /NO OVERFLOW SO COONTINUE + TAD VX10 /EXTEND MEM NEEDS NEW FIELD + TAD RD + DCA RD /PUT INCR FIELD AT INPUT + TAD RD + DCA FLD2 /AND WRITE + JMP I VCK /NOW GO BACK AND TRY TO FINISH +DOB, CLA /CLEAR AC + TAD VX4 /SET BIT A + JMP GO /GO TO ROUTINE TO UPDATE TEMP AND STORE +DOA, TAD VX100 /SET BIT A + JMP GO /GO TO ROUTINE TO UPDATE TEMP AND STORE +VCDF, CDF 0 /CONSTANT TO FORM CDF N +VX17, 17 +VX10, 10 +VX100, 100 +VX4, 4 + IFNZRO SYS < + +BUFADR=7750 +SA=7751 +BLK=7752 +WDCNT=7753> + IFZERO SYS < + +BUFADR, 0 +SA, 0 +BLK, 0 +WDCNT, 0 +K7000, 7000 +CTRLC, 0 + TAD (200 + KRS + TAD (-203 + SNA CLA + KSF + JMP I CTRLC + CIF CDF 0 + JMP I VX7600 + > + + + IFNZRO SYS < + RELOC + > +$ $ $ $ $ $ $ $ + ADDED src/os8-v3f/VXSY.PA Index: src/os8-v3f/VXSY.PA ================================================================== --- /dev/null +++ src/os8-v3f/VXSY.PA @@ -0,0 +1,244 @@ +/EXTENDED MEMORY DEVICE HANDLER +/ +/ +/PSEUDO DEVICE SIMILAR TO DF32 +/BUT IN RAM MEMORY USING FIELDS +/10 TO 17 FOR PLATTER 1 +/20 TO 27 FOR PLATTER 2 +/30 TO 37 FOR PLATTER 3 +/ +/ +/ S.R.,J.R.,J.M. +/ +/ +/ +/ +/ +/ +/COPYRIGHT (C) 1978 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. +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ +/ +/BUILD DATA + *0 +/ +/1 EXTENDED MEMORY HANDLER FOR OS/8 + + + SYS=1 + IFNDEF SYS /SET TO 1 TO GET SYSTEM HANDLER + + + -1 + IFZERO SYS + IFNZRO SYS + VXVER="A&77 + + IFNZRO SYS < + + 7737 /MINUS LENGTH OF BOOT + RELOC 0 + + CLL CLA CMA /CLEAR AC & SET TO 7777 + DCA X0 + TAD K7600 + DCA C1 + TAD K7600 + DCA C2 + TAD K7577 + DCA X1 + TAD K7577 + DCA X2 + JMP 20 +X0, 0 +X1, 0 +X2, 0 +C1, 0 +C2, 0 + CDF 4 + TAD I X0 + CDF 10 + DCA I X1 + ISZ C1 + JMP 20 + CDF 4 + TAD I X0 + CDF 0 + DCA I X2 + ISZ C2 + JMP 26 + CDF CIF 0 + JMP I .+1 + 7605 +K7600, 7600 +K7577, 7577 + RELOC + > + *200 + + IFNZRO SYS < RELOC 7600 + ZBLOCK 7> + +MEM, VXVER + CLA CLL CML RAR /SET AC TO 4000 + TAD I MEM /GET ARG 1 -- LINK WILL BE SET IF WRITE + AND VX70 /MASK OFF FIELD + TAD VCDF /FORM A CDF N + DCA FLD /STORE AT INPUT + TAD FLD + DCA WR /AND AT OUTPUT + RAR /GET WRITE BIT + MQL /SAVE IN MQ + IFZERO SYS < + TAD K7000 + 6200 /SET MEM EXT BITS + CLA CLL + > + TAD I MEM /AGAIN GET ARG 1 + RAL /MULT X 2 = PAGESX2=WORDS + AND VX7600 /MASK OFF OTHER BITS + CIA /MAKE NEGATIVE + DCA WDCNT /STORE AT 7753 + CLL /CLEAR LINK IF IT WAS WRITE + ISZ MEM /INCR POINTER + TAD I MEM /GET ARG 2 + DCA BUFADR /STORE BUFFER POINTER IN 7750 + ISZ MEM /INCR POINTER + TAD I MEM /GET ARG 3 -OS/8 BLOCK # + DCA BLK /STORE IN 7752 + TAD BLK + AND VX17 /GET BITS 8 TO 11 TO MAKE INTO START ADDR + BSW + RTL + DCA SA /STORE START ADDR OF EXT MEM IN 7751 + TAD BLK + RAR + AND VX70 + TAD VCDF /THIS GET BITS 5 TO 7 FOR EXT MEM BIT CDE + DCA RD /TEMP STORE UNTIL BITS A & B ARE EVALUATED + RDF /NOW GRAB SENDING FIELD IN AC + TAD VXCDI /FORM A CDI N OF SENDING FIELD + DCA VXRET /STORE AT RETURN ROUTINE + ISZ MEM /NOW RETURN POINTS TO ERROR +VXCDI, CDF CIF 0 /PUT INTO CURRENT FIELD ALSO CONSTANT FOR CDI + TAD BLK /NOW WE NEED TO KNOW BITS A & B IN EXT MEM + TAD M200 /IS OS/8 BLOCK 0-177 + SPA + JMP DOB /YES SO SET BIT B + TAD M200 /IS OS/8 BLOCK 200-377 + SPA CLA + JMP DOA /YES SO SET BIT A + TAD VX4 /NO SO SET BIT B + TAD VX100 /AND BIT A +GO, TAD RD /PICK UP TEMP CDF + DCA RD /STORE IT AT INPUT + TAD RD + DCA FLD2 /AND AT OUTPUT + MQA /NOW GET WRITE BIT (IF ANY) + SNA CLA + JMP RD /NO WRITE BIT SO GO TO READ ROUTINE +WR, HLT /WRITE ROUTINE - THIS BECOMES A CDF N + TAD I BUFADR /GET DATA FROM INPUT BUFFER +FLD2, HLT /THIS CHANGES TO CDF N (HIGH FIELDS) + DCA I SA /DUMP INTO EXTEND MEM + JMS VCK /CHECK FOR END OF ROUTINE & RESET FIELDS + JMP WR /NOT DONE YET SO CONTINUE +RD, HLT /READ ROUTINE - THIS BECOMES A CDF N (HIGH) + TAD I SA /GET DATA FROM EXTENDED MEM +FLD, HLT /CHANGES TO CDF N (LOW) + + DCA I BUFADR /PUT INTO BUFFER IN LOWER MEMORY + JMS VCK /CHECK FOR END OF ROUTINE & RESET FIELDS + JMP RD /NOT DONE SO CONTINUE +M200, +VX7600, 7600 /K7600 & M200 & CLA ON EXIT + ISZ MEM /INCR POINTER TO GOOD EXIT +VXRET, HLT /CHANGES TO CDF CIF N OF SENDING FIELD + JMP I MEM /RETURN TO CALLING ROUNTINE +VCK, 0 /THIS CHECKS READ AND WRITE FOR DONE + IFZERO SYS + ISZ WDCNT /AND FOR RESET OF FIELDS + SKP /NO OVERFLOW SO SKIP TO CONTINUE + JMP VX7600 /OVERFLOW SO DONE - GO TO EXIT ROUTINE + ISZ BUFADR /INCR POINTER IF OVERFLOWS THEN WRAP MEMORY +VX70, 70 /CONSTANT THAT DOES A NOP HERE IF NO OVERFLOW + ISZ SA /INCR START ADDR IN EXT MEM + + JMP I VCK /NO OVERFLOW SO COONTINUE + TAD VX10 /EXTEND MEM NEEDS NEW FIELD + TAD RD + DCA RD /PUT INCR FIELD AT INPUT + TAD RD + DCA FLD2 /AND WRITE + JMP I VCK /NOW GO BACK AND TRY TO FINISH +DOB, CLA /CLEAR AC + TAD VX4 /SET BIT A + JMP GO /GO TO ROUTINE TO UPDATE TEMP AND STORE +DOA, TAD VX100 /SET BIT A + JMP GO /GO TO ROUTINE TO UPDATE TEMP AND STORE +VCDF, CDF 0 /CONSTANT TO FORM CDF N +VX17, 17 +VX10, 10 +VX100, 100 +VX4, 4 + IFNZRO SYS < + +BUFADR=7750 +SA=7751 +BLK=7752 +WDCNT=7753> + IFZERO SYS < + +BUFADR, 0 +SA, 0 +BLK, 0 +WDCNT, 0 +K7000, 7000 +CTRLC, 0 + TAD (200 + KRS + TAD (-203 + SNA CLA + KSF + JMP I CTRLC + CIF CDF 0 + JMP I VX7600 + > + + + IFNZRO SYS < + RELOC + > +$ $ $ $ $ $ $ $ + ADDED src/os8-v3f/actions.txt Index: src/os8-v3f/actions.txt ================================================================== --- /dev/null +++ src/os8-v3f/actions.txt @@ -0,0 +1,57 @@ +att rk1 os8-v3f-build.rk05 +a BLOAD.PA RKA1: +a BOOT.PA RKA1: +a BPAT.PA RKA1: +a BUILD.PA RKA1: +a CCL.BI RKA1: +a CCL.MA RKA1: +a CCLAT.MA RKA1: +a CCLCD.MA RKA1: +a CCLCDX.MA RKA1: +a CCLCOR.MA RKA1: +a CCLDAT.MA RKA1: +a CCLDRV.MA RKA1: +a CCLMSG.MA RKA1: +a CCLPS.MA RKA1: +a CCLREM.MA RKA1: +a CCLRUN.MA RKA1: +a CCLSB2.MA RKA1: +a CCLSEM.MA RKA1: +a CCLSIZ.MA RKA1: +a CCLSUB.MA RKA1: +a CCLTAB.MA RKA1: +a CCLTBL.MA RKA1: +a CD.PA RKA1: +a FPAT.PA RKA1: +a FUTIL.PA RKA1: +a KL8E.PA RKA1: +a OS78.BI RKA1: +a OS8.PA RKA1: +a PAL8.PA RKA1: +a PIP.PA RKA1: +a README.V3F RKA1:README.TX +a RESORC.BI RKA1: +a RESORC.MA RKA1: +a RESOV0.MA RKA1: +a RESOV1.MA RKA1: +a RESOV2.MA RKA1: +a RESOVD.MA RKA1: +a RL0.PA RKA1: +a RL1.PA RKA1: +a RL2.PA RKA1: +a RL3.PA RKA1: +a RLC.PA RKA1: +a RLFRMT.PA RKA1: +a RLSY.PA RKA1: +a RTL.PA RKA1: +a RTS.PA RKA1: +a RX78C.PA RKA1: +a RXCOPY.PA RKA1: +a RXNS.PA RKA1: +a RXSY1.PA RKA1: +a RXSY2.PA RKA1: +a SAVECB.PA RKA1: +a TECO.PA RKA1: +a VXNS.PA RKA1: +a VXSY.PA RKA1: +