Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Merge of development work for OS/8 Combined Kit build from source. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
15eca39699347b14ff3fcac4836ca05e |
User & Date: | poetnerd 2020-05-18 18:09:36.378 |
Context
2020-05-18
| ||
18:13 | Remove debugging DIR command from uni-fiv-build.os8 check-in: 4f072e96ec user: poetnerd tags: trunk | |
18:09 | Merge of development work for OS/8 Combined Kit build from source. check-in: 15eca39699 user: poetnerd tags: trunk | |
14:58 | Sigh. Another file forgotten to add. Our uni init.tx.in file. Closed-Leaf check-in: de7fc4dcc1 user: poetnerd tags: os8-uni | |
2020-05-17
| ||
22:33 | v3d-rk05.os8 needed to perform SQUISH as absolute last step. Updates to test-os8-run to sanitize temp file names that would otherwise be unique across builds. Now a set of 10 random tests between trunk and flip-expect all come up green. check-in: a2ffdcf544 user: poetnerd tags: trunk, good-exam-1 | |
Changes
Changes to Makefile.in.
︙ | ︙ | |||
244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 | # # The rest have no special treatment. OS8RUN_INFILES = \ @srcdir@/lib/pidp8i/__init__.py.in \ @srcdir@/lib/pidp8i/ips.py.in \ @srcdir@/media/os8/init.tx.in \ @srcdir@/media/os8/3finit.tx.in \ @srcdir@/src/pidp8i/main.c.in \ $(PIDP8I_DIN) PRECIOUS_INFILES = \ @srcdir@/Makefile.in \ @srcdir@/examples/Makefile.in \ @srcdir@/src/Makefile.in \ @srcdir@/src/cc8/Makefile.in \ @srcdir@/src/SIMH/Makefile.in \ @srcdir@/src/SIMH/PDP8/Makefile.in INFILES = \ @srcdir@/bin/os8-cp.in \ @srcdir@/bin/os8-run.in \ @srcdir@/bin/teco-pi-demo.in \ | > > < < | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 | # # The rest have no special treatment. OS8RUN_INFILES = \ @srcdir@/lib/pidp8i/__init__.py.in \ @srcdir@/lib/pidp8i/ips.py.in \ @srcdir@/media/os8/init.tx.in \ @srcdir@/media/os8/3finit.tx.in \ @srcdir@/media/os8/uni-init.tx.in \ @srcdir@/src/pidp8i/main.c.in \ $(PIDP8I_DIN) PRECIOUS_INFILES = \ @srcdir@/Makefile.in \ @srcdir@/examples/Makefile.in \ @srcdir@/src/Makefile.in \ @srcdir@/src/cc8/Makefile.in \ @srcdir@/src/SIMH/Makefile.in \ @srcdir@/src/SIMH/PDP8/Makefile.in INFILES = \ @srcdir@/bin/os8-cp.in \ @srcdir@/tools/os8-cmp.in \ @srcdir@/bin/os8-run.in \ @srcdir@/bin/teco-pi-demo.in \ @srcdir@/bin/pidp8i.in \ @srcdir@/boot/0.script.in \ @srcdir@/boot/2.script.in \ @srcdir@/boot/3.script.in \ @srcdir@/boot/4.script.in \ @srcdir@/boot/6.script.in \ @srcdir@/boot/7.script.in \ @srcdir@/boot/run.script.in \ @srcdir@/boot/run-v3f.script.in \ @srcdir@/boot/tss8.script.in \ @srcdir@/etc/pidp8i.service.in \ @srcdir@/etc/sudoers.in \ @srcdir@/etc/usb-mount@.service.in \ @srcdir@/lib/os8script.py.in \ @srcdir@/lib/simh.py.in \ @srcdir@/src/pidp8i/gpio-common.c.in \ @srcdir@/tools/simh-update.in \ $(OS8RUN_INFILES) OS8RUN_OUTFILES := $(subst @srcdir@/,,$(OS8RUN_INFILES)) OS8RUN_OUTFILES := $(subst .in,,$(OS8RUN_OUTFILES)) PRECIOUS_OUTFILES := $(subst @srcdir@/,,$(PRECIOUS_INFILES)) PRECIOUS_OUTFILES := $(subst .in,,$(PRECIOUS_OUTFILES)) OUTFILES := $(subst @srcdir@/,,$(INFILES)) OUTFILES := $(subst .in,,$(OUTFILES)) OS8_DIST_RK05 = bin/v3d-dist.rk05 OS8_SRC_RK05 = @OS8_SRC_RK05@ OS8_BOOT_DISK = bin/@OS8_BOOT_DISK@ OS8_RK05S = $(OS8_DIST_RK05) $(OS8_BOOT_DISK) $(OS8_SRC_RK05) $(OS8_UNI_DIST_RK05) $(OS8_UNI_RK05) OS8_SCRIPTS_DIR = @srcdir@/media/os8/scripts V3D_DIST_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d-dist-rk05.os8 V3D_SRC_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d-src-rk05.os8 V3D_RK05_SCRIPT = $(OS8_SCRIPTS_DIR)/v3d-rk05.os8 V3F_SRCDIR = @srcdir@/src/os8/v3f V3F_BUILD_RK05 = obj/v3f-build.rk05 V3F_MANIFEST = actions.txt V3F_MADE_RK05 = bin/v3f-made.rk05 V3F_MAKER = $(OS8_SCRIPTS_DIR)/v3f-control.os8 # OS/8 Combined Kit. Build from Source. # We build each object rk05 image in one large script # Because otherwise mmake would have terrible race conditions. # We cut the tree up into chunks to fit them on rk05 images: # SYS: The System Head and device Handlers and key system CUSPS. # CUSPS: The remaining Commonly Used System Programs (CUSPS) # BF2: BASIC and FORTRAN II # FIV: FORTRAN IV OS8_UNI_SRCDIR = @srcdir@/src/os8/uni OS8_UNI_SYS_SRC_RK05 = obj/uni-sys-src.rk05 OS8_UNI_SYS_OBJ_RK05 = bin/uni-sys-obj.rk05 OS8_UNI_SYS_MAKER = $(OS8_SCRIPTS_DIR)/uni-sys-build.os8 OS8_UNI_CUSPS_SRC_RK05 = obj/uni-cusps-src.rk05 OS8_UNI_CUSPS_OBJ_RK05 = bin/uni-cusps-obj.rk05 OS8_UNI_CUSPS_MAKER = $(OS8_SCRIPTS_DIR)/uni-cusps-build.os8 OS8_UNI_BF2_SRC_RK05 = obj/uni-bf2-src.rk05 OS8_UNI_BF2_OBJ_RK05 = bin/uni-bf2-obj.rk05 OS8_UNI_BF2_MAKER = $(OS8_SCRIPTS_DIR)/uni-bf2-build.os8 OS8_UNI_FIV_SRC_RK05 = obj/uni-fiv-src.rk05 OS8_UNI_FIV_OBJ_RK05 = bin/uni-fiv-obj.rk05 OS8_UNI_FIV_MAKER = $(OS8_SCRIPTS_DIR)/uni-fiv-build.os8 OS8_UNI_DIST_RK05 = bin/uni-dist.rk05 OS8_UNI_DIST_MAKER = $(OS8_SCRIPTS_DIR)/uni-dist-rk05.os8 OS8_UNI_RK05_MAKER = $(OS8_SCRIPTS_DIR)/uni-rk05.os8 OS8_UNI_RK05 = bin/uni.rk05 ALL_TU56_SCRIPT = $(OS8_SCRIPTS_DIR)/all-tu56.os8 CUSP_COPYIN_SCRIPT = $(OS8_SCRIPTS_DIR)/cusp-copyin.os8 OS8_BOOT_TAPE = bin/@OS8_BOOT_TAPE@ V3D_TC08_TU56 = bin/v3d-tc08.tu56 |
︙ | ︙ | |||
340 341 342 343 344 345 346 347 348 349 350 351 352 353 | $(V3D_TD12K_TU56) $(V3F_TC08_TU56) $(V3F_TD12K_TU56) clean: @rm -f $(BINS) $(BOOTSCRIPTS) $(ASM_PTS) $(PAL_EX_PTS) $(LISTINGS) \ $(OUTFILES) $(ADF) \ $(OS8_RK05S) $(V3F_MADE_RK05) $(V3F_BUILD_RK05) $(V3D_TC08_TU56) \ $(V3D_TD12K_TU56) $(V3F_TC08_TU56) $(V3F_TD12K_TU56) \ config.log cscope.out tags \ bin/*.pt bin/*.save bin/*.tu56 bin/txt2ptp \ lib/*.pyc lib/*/*.pyc lib/pidp8i/dirs.py lib/pidp8i/ips.py \ obj/*.log obj/*.pt obj/os8.opts \ src/config.h \ @srcdir@/examples/*.err @find obj \( -name \*.o -o -name \*.d \) -delete | > > > > > | 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 | $(V3D_TD12K_TU56) $(V3F_TC08_TU56) $(V3F_TD12K_TU56) clean: @rm -f $(BINS) $(BOOTSCRIPTS) $(ASM_PTS) $(PAL_EX_PTS) $(LISTINGS) \ $(OUTFILES) $(ADF) \ $(OS8_RK05S) $(V3F_MADE_RK05) $(V3F_BUILD_RK05) $(V3D_TC08_TU56) \ $(V3D_TD12K_TU56) $(V3F_TC08_TU56) $(V3F_TD12K_TU56) \ $(OS8_UNI_SYS_SRC_RK05) $(OS8_UNI_SYS_OBJ_RK05) \ $(OS8_UNI_CUSPS_SRC_RK05) $(OS8_UNI_CUSPS_OBJ_RK05) \ $(OS8_UNI_BF2_SRC_RK05) $(OS8_UNI_BF2_OBJ_RK05) \ $(OS8_UNI_FIV_SRC_RK05) $(OS8_UNI_FIV_OBJ_RK05) \ $(OS8_UNI_DIST_RK05) \ config.log cscope.out tags \ bin/*.pt bin/*.save bin/*.tu56 bin/txt2ptp \ lib/*.pyc lib/*/*.pyc lib/pidp8i/dirs.py lib/pidp8i/ips.py \ obj/*.log obj/*.pt obj/os8.opts \ src/config.h \ @srcdir@/examples/*.err @find obj \( -name \*.o -o -name \*.d \) -delete |
︙ | ︙ | |||
485 486 487 488 489 490 491 | @echo "Installing os8-run..." @@INSTALL@ -m 775 -g @INSTGRP@ $(OS8RUN) @prefix@/bin @( for src in $(OS8RUN_PY_ALL) ; do \ test -e $$src || src=@srcdir@/$$src ; \ dest=@prefix@/$$(echo $$src | sed -e 's_^@srcdir@/__') ; \ echo "Installing $$src to $$dest..." ; \ @INSTALL@ -m 644 -g @INSTGRP@ -D $${src} $${dest} ; \ | < < | 524 525 526 527 528 529 530 531 532 533 534 535 536 537 | @echo "Installing os8-run..." @@INSTALL@ -m 775 -g @INSTGRP@ $(OS8RUN) @prefix@/bin @( for src in $(OS8RUN_PY_ALL) ; do \ test -e $$src || src=@srcdir@/$$src ; \ dest=@prefix@/$$(echo $$src | sed -e 's_^@srcdir@/__') ; \ echo "Installing $$src to $$dest..." ; \ @INSTALL@ -m 644 -g @INSTGRP@ -D $${src} $${dest} ; \ done \ ) @sed -e 's#^build =.*#build = "@ABSPREFIX@"#' \ -e 's#^media =.*#media = os.path.join (build, "share/media/")#' \ -e 's#^os8mo =.*#os8mo = os8mi#' \ < $(PIDP8I_DIRS) > @prefix@/$(PIDP8I_DIRS) @chgrp @INSTGRP@ @prefix@/$(PIDP8I_DIRS) |
︙ | ︙ | |||
616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 | # Dependency on the contents of the v3f source directory. V3F_SOURCES := \ @srcdir@/src/os8/v3f/*.PA \ @srcdir@/src/os8/v3f/*.MA \ @srcdir@/src/os8/v3f/*.BI $(OS8_DIST_RK05): $(V3D_DIST_SRCS) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) $(OS8RUN)@OS8_OPTS@ $(V3D_DIST_SCRIPT) $(OS8_BOOT_DISK): $(V3D_RK05_SCRIPT) $(OS8_DIST_RK05) $(V3D_PATCHES) @CC8_TU56@ | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) $(OS8RUN)@OS8_OPTS@ $(V3D_RK05_SCRIPT) # Also build an OS/8 source disk, as a convenience to avoid the # need to mount up the 7 source tapes in succession. # # Using an order-only dependency for the simulator and the bin disk: we # only need *a* version of each, they don't have to be recent! OS8_SRC_SRCS = \ | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 | # Dependency on the contents of the v3f source directory. V3F_SOURCES := \ @srcdir@/src/os8/v3f/*.PA \ @srcdir@/src/os8/v3f/*.MA \ @srcdir@/src/os8/v3f/*.BI # Dependency on the contents of the uni source directory. OS8_UNI_SYS_SOURCES := \ @srcdir@/src/os8/uni/SYSTEM/*.PA \ @srcdir@/src/os8/uni/SYSTEM/*.MA \ @srcdir@/src/os8/uni/SYSTEM/*.BI \ @srcdir@/src/os8/uni/HANDLERS/*.PA \ @srcdir@/src/os8/uni/CUSPS/*.MA \ @srcdir@/src/os8/uni/CUSPS/*.BI \ @srcdir@/src/os8/uni/CUSPS/*.HL OS8_UNI_CUSPS_SOURCES :=\ @srcdir@/src/os8/uni/CUSPS/*.PA OS8_UNI_BF2_SOURCES := \ @srcdir@/src/os8/uni/LANGUAGE/BASIC/*.PA \ @srcdir@/src/os8/uni/LANGUAGE/FORTRAN2/*.PA \ @srcdir@/src/os8/uni/LANGUAGE/FORTRAN2/*.CO \ @srcdir@/src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/*.SB OS8_UNI_FIV_SOURCES := \ @srcdir@/src/os8/uni/LANGUAGE/FORTRAN4/*.PA \ @srcdir@/src/os8/uni/LANGUAGE/FORTRAN4/*.BI \ @srcdir@/src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/*.RA # We could make FIV conditional here. OS8_UNI_DIST_SRCS := \ $(OS8RUN) $(PIDP8I_DIN) \ lib/pidp8i/dirs.py \ $(OS8_UNI_DIST_MAKER) \ @srcdir@/media/os8/al-*-ba-*.tu56 \ @srcdir@/media/os8/subsys/*.tu56 \ $(OS8_UNI_SYS_OBJ_RK05) $(OS8_UNI_CUSPS_OBJ_RK05) \ $(OS8_UNI_BF2_OBJ_RK05) $(OS8_UNI_FIV_OBJ_RK05) UNI_PATCHES := \ # @srcdir@/media/os8/patches/uni/*.patch8 $(OS8_DIST_RK05): $(V3D_DIST_SRCS) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) $(OS8RUN)@OS8_OPTS@ $(V3D_DIST_SCRIPT) $(OS8_BOOT_DISK): $(V3D_RK05_SCRIPT) $(OS8_DIST_RK05) $(V3D_PATCHES) @CC8_TU56@ | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) $(OS8RUN)@OS8_OPTS@ $(V3D_RK05_SCRIPT) $(OS8_UNI_RK05): $(OS8_UNI_RK05_MAKER) $(OS8_UNI_DIST_RK05) $(UNI_PATCHES) @CC8_TU56@ | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) $(OS8RUN)@OS8_OPTS@ $(OS8_UNI_RK05_MAKER) # Also build an OS/8 source disk, as a convenience to avoid the # need to mount up the 7 source tapes in succession. # # Using an order-only dependency for the simulator and the bin disk: we # only need *a* version of each, they don't have to be recent! OS8_SRC_SRCS = \ |
︙ | ︙ | |||
646 647 648 649 650 651 652 653 654 655 656 657 658 659 | $(V3F_BUILD_RK05): $(V3F_SRCDIR)/$(V3F_MANIFEST) $(V3F_SOURCES) | $(OS8_BOOT_DISK) rm -f $(V3F_BUILD_RK05) cd $(V3F_SRCDIR); @builddir@/bin/os8-cp -v --action-file $(V3F_MANIFEST) # Make a disk with binaries assembled from the V3F source disk $(V3F_MADE_RK05): $(V3F_BUILD_RK05) $(V3F_MAKER) $(OS8RUN) $(V3F_MAKER) # Make a bootable OS/8 v3f TCO8 DECtape image $(V3F_TC08_TU56): $(V3F_MADE_RK05) $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) $(OS8RUN)@OS8_OPTS@ $(ALL_TU56_SCRIPT) --enable v3f # Make a bootable OS/8 v3f TD8E 12K DECtape image $(V3F_TD12K_TU56): $(V3F_MADE_RK05) $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 | $(V3F_BUILD_RK05): $(V3F_SRCDIR)/$(V3F_MANIFEST) $(V3F_SOURCES) | $(OS8_BOOT_DISK) rm -f $(V3F_BUILD_RK05) cd $(V3F_SRCDIR); @builddir@/bin/os8-cp -v --action-file $(V3F_MANIFEST) # Make a disk with binaries assembled from the V3F source disk $(V3F_MADE_RK05): $(V3F_BUILD_RK05) $(V3F_MAKER) $(OS8RUN) $(V3F_MAKER) # Build the source disk for OS/8 UNI SYS Component. $(OS8_UNI_SYS_SRC_RK05): $(OS8_UNI_SYS_SOURCES) | $(OS8_BOOT_DISK) @builddir@/bin/os8-cp -v -rk1 $(OS8_UNI_SYS_SRC_RK05) -z -a $(OS8_UNI_SYS_SOURCES) RKA1: # Make a disk with binaries assembled from the OS8_UNI SYS source disk $(OS8_UNI_SYS_OBJ_RK05): $(OS8_UNI_SYS_SRC_RK05) $(OS8_UNI_SYS_MAKER) $(OS8RUN) $(OS8_UNI_SYS_MAKER) # Build the source disk for OS/8 UNI CUSPS Component. $(OS8_UNI_CUSPS_SRC_RK05): $(OS8_UNI_CUSPS_SOURCES) | $(OS8_BOOT_DISK) @builddir@/bin/os8-cp -v -rk1 $(OS8_UNI_CUSPS_SRC_RK05) -z -a $(OS8_UNI_CUSPS_SOURCES) RKA1: # Make a disk with binaries assembled from the OS8_UNI SYS source disk $(OS8_UNI_CUSPS_OBJ_RK05): $(OS8_UNI_CUSPS_SRC_RK05) $(OS8_UNI_CUSPS_MAKER) $(OS8RUN) $(OS8_UNI_CUSPS_MAKER) # Build the source disk for OS/8 UNI BASIC and FORTRAN II Component. $(OS8_UNI_BF2_SRC_RK05): $(OS8_UNI_BF2_SOURCES) | $(OS8_BOOT_DISK) @builddir@/bin/os8-cp -v -rk1 $(OS8_UNI_BF2_SRC_RK05) -z -a $(OS8_UNI_BF2_SOURCES) RKA1: # Make a disk with binaries assembled from the OS8_UNI FIRTRAN II source disk $(OS8_UNI_BF2_OBJ_RK05): $(OS8_UNI_BF2_SRC_RK05) $(OS8_UNI_BF2_MAKER) $(OS8RUN) $(OS8_UNI_BF2_MAKER) # Build the source disk for OS/8 UNI FORTRAN IV Component. $(OS8_UNI_FIV_SRC_RK05): $(OS8_UNI_FIV_SOURCES) | $(OS8_BOOT_DISK) @builddir@/bin/os8-cp -v -rk1 $(OS8_UNI_FIV_SRC_RK05) -z -a $(OS8_UNI_FIV_SOURCES) RKA1: # Make a disk with binaries assembled from the OS8_UNI FORTRAN IV source disk $(OS8_UNI_FIV_OBJ_RK05): $(OS8_UNI_FIV_SRC_RK05) $(OS8_UNI_FIV_MAKER) $(OS8RUN) $(OS8_UNI_FIV_MAKER) $(OS8_UNI_DIST_RK05): $(OS8_UNI_DIST_SRCS) | $(PIDP8I_SIM) $(OS8RUN_OUTFILES) $(OS8RUN)@OS8_OPTS@ $(OS8_UNI_DIST_MAKER) # Make a bootable OS/8 v3f TCO8 DECtape image $(V3F_TC08_TU56): $(V3F_MADE_RK05) $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) $(OS8RUN)@OS8_OPTS@ $(ALL_TU56_SCRIPT) --enable v3f # Make a bootable OS/8 v3f TD8E 12K DECtape image $(V3F_TD12K_TU56): $(V3F_MADE_RK05) $(ALL_TU56_SCRIPT) $(CUSP_COPYIN_SCRIPT) |
︙ | ︙ |
Changes to auto.def.
︙ | ︙ | |||
587 588 589 590 591 592 593 | # @include the output version. make-config-header src/config.h \ -auto {ENABLE_* HAVE_* PACKAGE_* SIZEOF_*} \ -bare {ILS_MODE PCB_*} make-template bin/pidp8i.in make-template bin/os8-cp.in make-template bin/os8-run.in | | | | 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 | # @include the output version. make-config-header src/config.h \ -auto {ENABLE_* HAVE_* PACKAGE_* SIZEOF_*} \ -bare {ILS_MODE PCB_*} make-template bin/pidp8i.in make-template bin/os8-cp.in make-template bin/os8-run.in make-template tools/os8-cmp.in make-template bin/teco-pi-demo.in make-template boot/common.script.in make-template boot/0.script.in make-template boot/2.script.in make-template boot/3.script.in make-template boot/4.script.in make-template boot/6.script.in make-template boot/7.script.in |
︙ | ︙ | |||
610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 | make-template lib/os8script.py.in make-template lib/pidp8i/__init__.py.in make-template lib/pidp8i/dirs.py.in make-template lib/pidp8i/ips.py.in make-template lib/simh.py.in make-template media/os8/init.tx.in make-template media/os8/3finit.tx.in make-template src/Makefile.in make-template src/cc8/Makefile.in make-template src/cc8/os8/Makefile.in make-template src/pidp8i/gpio-common.c.in make-template src/pidp8i/main.c.in make-template src/SIMH/Makefile.in make-template src/SIMH/PDP8/Makefile.in make-template tools/simh-update.in | > < | 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 | make-template lib/os8script.py.in make-template lib/pidp8i/__init__.py.in make-template lib/pidp8i/dirs.py.in make-template lib/pidp8i/ips.py.in make-template lib/simh.py.in make-template media/os8/init.tx.in make-template media/os8/3finit.tx.in make-template media/os8/uni-init.tx.in make-template src/Makefile.in make-template src/cc8/Makefile.in make-template src/cc8/os8/Makefile.in make-template src/pidp8i/gpio-common.c.in make-template src/pidp8i/main.c.in make-template src/SIMH/Makefile.in make-template src/SIMH/PDP8/Makefile.in make-template tools/simh-update.in make-template Makefile.in foreach f [concat [glob "$builddir/bin/*"] [glob "$builddir/tools/*"]] { exec chmod +x $f } |
Changes to bin/os8-cp.in.
︙ | ︙ | |||
666 667 668 669 670 671 672 | 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: print("Attaching " + simh_boot_dev + " to " + imagename) | | | > | > | | | 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 | 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: print("Attaching " + simh_boot_dev + " to " + imagename) s.simh_cmd ("att " + simh_boot_dev + " " + imagename, debug=DEBUG) images_to_zero = [] # Attach other mounts for att_spec in action_plan["mount"]: simh_dev = att_spec[0] + att_spec[1] # Compose simh dev from name and unit. imagename = att_spec[2] if os.path.exists (imagename): if VERBOSE or DEBUG: print("Modifying existing " + simh_dev + " image " + imagename) else: if VERBOSE or DEBUG: print("Will create a new image file named: " + imagename) # Save this att_spec so we can zero it later. images_to_zero.append (att_spec) if VERBOSE or DEBUG: print("Attaching " + simh_dev + " to " + imagename) s.simh_cmd ("att " + simh_dev + " " + imagename, debug=DEBUG) if VERBOSE or DEBUG: print("Booting " + simh_boot_dev + "...") # Confirm successful boot into OS/8. Note we call simh_cmd with _os8_replies! reply = s.simh_cmd ("boot " + simh_boot_dev, s._os8_replies_rex, debug=DEBUG) s.os8_test_result (reply, "Monitor Prompt", "os8-cp") for att_spec in images_to_zero: os8dev = _os8_from_simh_dev[att_spec[0]] if os8dev in _os8_partitions: for partition in _os8_partitions[os8dev]: os8name = os8dev + partition + att_spec[1] + ":" if VERBOSE or DEBUG: print("Initializing directory of " + os8name + " in " + \ imagename) s.os8_cmd ("ZERO " + os8name, debug=DEBUG) else: os8name = os8dev + att_spec[1] + ":" if VERBOSE or DEBUG: print("Initializing directory of " + os8name + " in " + \ imagename) s.os8_cmd ("ZERO " + os8name, debug=DEBUG) # Perform copy operations for do_copy in action_plan["copy"]: mode_opt = do_copy[0] source = do_copy[1] destination = do_copy[2] copy_type = do_copy[3] |
︙ | ︙ | |||
727 728 729 730 731 732 733 | # "into" -- Attach source to simh ptr # If we are operating "from" and source has wild cards, # Use DIRECT to create list of files. # "from" -- Attach destination to ptp. We've already done POSIX globing. # "within" -- Use COPY. if copy_type == "into": | | | | > > | | | | | | | | 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 | # "into" -- Attach source to simh ptr # If we are operating "from" and source has wild cards, # Use DIRECT to create list of files. # "from" -- Attach destination to ptp. We've already done POSIX globing. # "within" -- Use COPY. if copy_type == "into": s.os8_pip_to(source, destination, pip_option, debug=DEBUG) elif copy_type == "from": if has_os8_wildcards(source): # Split off device from source: os8dev = source[0:source.index(":")+1] if DEBUG: print("Wild card dev: " + os8dev) # Use OS/8 Direct to enumerate our input files. if DEBUG: print("Calling OS/8 DIRECT on wild card filespec: " + source) s.os8_cmd ("DIR " + source + "/F=1", "\d+\s+FREE BLOCKS", debug=DEBUG) # Now harvest direct output. One file per line. Ignore blank lines. # Maybe parse the FREE BLOCKS Output. # Done when we see a dot. # s._child.expect("\d+\s+FREE BLOCKS") files = file_list_from_expect(s._child.before.decode()) # Confirm return to monitor after call to DIR command. s.os8_cfm_monitor ("os8_cp") for filename in files: if VERBOSE or DEBUG: print("Wildcard call os8_pip_from: copy from: " + \ "{" + os8dev + "}{" + filename + "}" + \ " to: " + destination + ", mode: " + pip_option) s.os8_pip_from(os8dev + filename, destination, pip_option, debug=DEBUG) else: if VERBOSE or DEBUG: print("Call os8_pip_from: copy from: " + source + " to " + \ destination + ", mode: " + pip_option) s.os8_pip_from(source, destination, pip_option, debug=DEBUG) elif copy_type == "within": if VERBOSE or DEBUG: print("Call COPY of: " + source + " to " + destination) s.os8_cmd ("COPY " + destination + "< " + source) else: abort_prog ("Unrecognized copy type: " + copy_type) # Should never happen. # Detach all mounts and then sys. s.esc_to_simh() for att_spec in action_plan["mount"]: simh_dev = att_spec[0] + att_spec[1] # Compose simh dev from name and unit. if VERBOSE or DEBUG: print("Detaching " + simh_dev) s.simh_cmd ("det " + simh_dev, debug=DEBUG) if VERBOSE or DEBUG: print("Detaching " + simh_boot_dev) s.simh_cmd ("det " + simh_boot_dev, debug=DEBUG) # And shut down the simulator. if VERBOSE or DEBUG: print("Quitting simh.") s._child.sendline("quit") if __name__ == "__main__": main() |
Changes to bin/os8-run.in.
︙ | ︙ | |||
214 215 216 217 218 219 220 | # After all scripts are done, we remove any scratch files, # detach any mounted devices, and shut down simh gracefully. for filename in os8.scratch_list: if os8.verbose: print("Deleting scratch_copy: " + filename) os.remove(filename) | | | | 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | # After all scripts are done, we remove any scratch files, # detach any mounted devices, and shut down simh gracefully. for filename in os8.scratch_list: if os8.verbose: print("Deleting scratch_copy: " + filename) os.remove(filename) s.simh_cmd ("detach all") s._child.sendline("quit") if VERBOSE: print("Done!") if __name__ == "__main__": main() |
Changes to bin/teco-pi-demo.in.
︙ | ︙ | |||
47 48 49 50 51 52 53 | from simh import * #### main ############################################################## def main (): # Check for command line flags | | > > > > > | > | > > | > | 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | from simh import * #### main ############################################################## def main (): # Check for command line flags benchmark = False throttle = True if len (sys.argv) > 1: if sys.argv[1] == '-b': benchmark = True elif sys.argv[1] == '-f': throttle = False # Create the SIMH child instance and tell it where to send log output try: s = simh (dirs.build) except (RuntimeError) as e: print("Could not start simulator: " + e.message + '!') exit (1) s.set_logfile (os.fdopen (sys.stdout.fileno (), 'wb', 0)) # Find and boot the built OS/8 bin disk rk = os.path.join (dirs.os8mo, 'v3d.rk05') if not os.path.isfile (rk): print("Could not find " + rk + "; OS/8 media not yet built?") exit (1) print("Booting " + rk + "...") reply = s.simh_cmd ("att rk0 " + rk) s.simh_test_result (reply, "Prompt", "main 1") reply = s.simh_cmd ("boot rk0", s._os8_replies_rex) s.os8_test_result (reply, "Monitor Prompt", "main 2") # Start TECO8 in the simulator under OS/8 # Confirm it is running when you receive the Command Decoder Prompt. reply = s.os8_cmd ("R TECO") s.os8_test_result (reply, "Command Decoder Prompt", "main 2") # The macro comes from http://www.iwriteiam.nl/HaPi_TECO_macro.html # and it was created by Stanley Rabinowitz. # # The 248 preceding "UN" in the first line of the macro is the number # of digits of pi to calculate. That value was reached by experiment # as the largest value that runs without crashing TECO with a |
︙ | ︙ | |||
104 105 106 107 108 109 110 | ] # First and last lines are handled specially, so slice them off. first = macro.pop (0) last = macro.pop () # Send the first line of the macro; implicitly awaits 1st TECO prompt | | < < < < < < > | | | | < < | | 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | ] # First and last lines are handled specially, so slice them off. first = macro.pop (0) last = macro.pop () # Send the first line of the macro; implicitly awaits 1st TECO prompt s.os8_send_line (first) # Blindly send core lines of the macro; TECO gives no prompts for 'em. for line in macro: s.os8_send_line (line) # Send last line of macro sans CR, followed by two Esc characters to # start it running. s.os8_send_str (last) # not os8_send_line! s.os8_send_ctrl ('[') s.os8_send_ctrl ('[') if benchmark: # Run demo long enough to get a good sense of the simulator's # execution rate while unthrottled on this host hardware. If # you don't run it long enough, the IPS value is untrustworthy. try: s.spin (10) except pexpect.TIMEOUT: # Ask the simulator what IPS rate we ran that benchmark at. # It knows how to shift context appropriately. s.simh_send_line ('show clocks') line = s.read_tail ('Execution Rate:').decode() curr_ips = int (line.strip().replace(',', '').split(' ')[0]) pf = open ('lib/pidp8i/ips.py', 'a') pf.write ('current = ' + str (curr_ips) + ' # ' + \ str (datetime.today ()) + '\n') pf.close () s.quit() pdp_ratio = float (curr_ips) / ips.pdp8i rpi_ratio = float (curr_ips) / ips.raspberry_pi_b_plus print("\nYour system is " + format (rpi_ratio, '.1f') + \ " times faster than a Raspberry Pi Model B+") print("or " + format (pdp_ratio, '.1f') + \ " times faster than a PDP-8/I.\n") elif throttle: # Normal mode. Tell SIMH and throttle down to a rate suitable for a # blinkenlights demo. 1/17 means SIMH runs one instruction then # waits for 17ms, yielding ~59 IPS. s.simh_cmd ('set throttle 1/17') # You can't hit Ctrl-E while running this script in the foreground # since pexpect takes over stdio. Therefore, if you want to be able # to send commands to the simulator while the demo is running, # uncomment the line below, which will let you send commands to the # simulator via telnet. From another terminal or SSH session: # |
︙ | ︙ | |||
173 174 175 176 177 178 179 | # obviously-unsafe commands like ! on the remote console, but it is # possible some mischief may be possible via this path anyway. It # could be used to exfiltrate a sensitive file via ATTACH, for one # thing. For another, it's a potential DoS vector. #s.send_cmd ('set remote telnet=3141') # Let it run. Never exits. | | > > | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | # obviously-unsafe commands like ! on the remote console, but it is # possible some mischief may be possible via this path anyway. It # could be used to exfiltrate a sensitive file via ATTACH, for one # thing. For another, it's a potential DoS vector. #s.send_cmd ('set remote telnet=3141') # Let it run. Never exits. s.send_line ('cont') s.spin () else: s.spin () if __name__ == "__main__": main() |
Deleted bin/txt2os8.in.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |
Changes to doc/class-simh.md.
︙ | ︙ | |||
10 11 12 13 14 15 16 17 18 19 20 21 22 23 | When someone on the mailing list asked for a way to automatically drive a demo script he'd found online, it was natural to generalize the core functionality of `mkos8` as a reusable Python class, then write a script to make use of it. The result is `class simh`, currently used by six different scripts in the PiDP-8/I software distribution including `os8-run` and the `teco-pi-demo` demo script. This document describes how `teco-pi-demo` works, and through it, how `class simh` works, with an eye toward teaching you how to reuse this functionality for your own ends. [ori]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-run.md [py]: https://www.python.org/ | > > | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | When someone on the mailing list asked for a way to automatically drive a demo script he'd found online, it was natural to generalize the core functionality of `mkos8` as a reusable Python class, then write a script to make use of it. The result is `class simh`, currently used by six different scripts in the PiDP-8/I software distribution including `os8-run` and the `teco-pi-demo` demo script. The basis for this work is `pexpect` the Python Expect library. This document describes how `teco-pi-demo` works, and through it, how `class simh` works, with an eye toward teaching you how to reuse this functionality for your own ends. [ori]: https://tangentsoft.com/pidp8i/doc/trunk/doc/os8-run.md [py]: https://www.python.org/ |
︙ | ︙ | |||
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | Note that this more complicated scheme appends to the log file instead of overwriting it because there are cases where `os8-run` gets run more than once with different script inputs, so we want to preserve the prior script outputs, not keep only the latest. ## Finding and Booting the OS/8 Media If your program will use our OS/8 boot disk, you can find it programmatically by using the `dirs.os8mo` constant, which means "OS/8 media output directory", where "output" refers to the worldview of `os8-run`. Contrast `dirs.os8mi`, which points to the directory holding the input media for `os8-run`. This snippet shows how to use it: rk = os.path.join (dirs.os8mo, 'v3d.rk05') if not os.path.isfile (rk): print "Could not find " + rk + "; OS/8 media not yet built?" exit (1) Now we attach the RK05 disk image to the PiDP-8/I simulator found by the `simh` object and boot from it: print "Booting " + rk + "..." | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | | < < < | | | < < < < | < < < < < | | < > | | > > > | | | | < < | < | | < < < < < < | < < | < > | > > > > > > > > | | > | > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > | > > | > > > | > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | < < < < < < > > > < > | < | < < | < > > | | | | | > > > > | > | > > > > | > > | > > > > > > > > | | > > | > > > > > | | > > > > | > > > > > > > > > > > > > > > > > > > > > > > > | < < | > > > > > > | > > > > | | > | | | 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 | Note that this more complicated scheme appends to the log file instead of overwriting it because there are cases where `os8-run` gets run more than once with different script inputs, so we want to preserve the prior script outputs, not keep only the latest. ## Driving SIMH and OS/8 The basic control flow is: 1. Send to SIMH text to act upon. 2. Harvest results. 3. Check results. 4. Goto 1 or quit. ## Checking results There are a number of helper methods and data structures to help in checking results. Although `pexpect` can search replies for a regular expression string, or a list of such strings, the helper methods use an array of compiled regular expressions. The simh class contains two arrays, `_simh_replies` and `_os8_replies` with corresponding arrays of compiled regular expressions, `_simh_replies_rex`, and `_os8_replies_rex`. You can use the simh Class replies or define some for yourself. Example: ``` my_replies = [ ["Sample Reply", "Sample Reply\s+.*\n$", "False"], ["Fatal Error", "Fatal error was\s+.*\n$", "True"] ] my_replies_rex = [] for item in my_replies: my_replies_rex.append(re.compile(item[1].encode())) ``` Often you want your replies in addition to the errors you might want from OS/8. In that case you'd do something like: ``` my_replies.extend(s._os8_replies) ``` Of course the extend would appear before the computation of `my_replies_rex`. ## Running SIMH or OS/8 commands High level calls to run commands in SIMH can be made from `simh_cmd` for SIMH commands and `os8_cmd` for OS/8 commands. These two methods default to searching results for replies in the relevant arrays. They return an index into the array that says which reply was received. The `test_result` method takes a reply number, an expected reply name, an array replies and a string for helping identify the caller of the test. (There's also an optional debug flag. These scripts can be difficult to debug.) To see if the reply from running a command that would reply with `my_replies` the code would be: ``` s.test_result(reply, "Fatal Error", my_replies, "myfunc") ``` The reply item at the index given by `reply` is examined. And the desired reply is matched against the first element of that item. If it matches, `True` is returned, otherwise `False` is returned. If the caller string is present, (in this case, `"myfunc"`, a message is printed if the reply doesn't match the expected reply. If the caller string is the empty string, no message is printed. This makes it easy to add error diagnostics without a lot of extra work. Sometimes you want to try a couple different expected values, and don't want to print anything if there isn't a match. That's why we special case an empty caller string. For SIMH and OS/8 command testing, there are convenience wrappers, `simh_test_result` and `os8_test_result` that use the relevant array so you don't have to keep typing it. So the following two are equivalent: ``` s.test_result(reply, "Prompt", s._simh_replies, "myfunc", debug=True) s.simh_test_result(reply, "Prompt", "myfunc", debug=True) ``` Armed with an understanding of how we make calls into SIMH and OS/8, and how we test results, we're ready to continue our exploration. ## Finding and Booting the OS/8 Media If your program will use our OS/8 boot disk, you can find it programmatically by using the `dirs.os8mo` constant, which means "OS/8 media output directory", where "output" refers to the worldview of `os8-run`. Contrast `dirs.os8mi`, which points to the directory holding the input media for `os8-run`. This snippet shows how to use it: rk = os.path.join (dirs.os8mo, 'v3d.rk05') if not os.path.isfile (rk): print "Could not find " + rk + "; OS/8 media not yet built?" exit (1) Now we attach the RK05 disk image to the PiDP-8/I simulator found by the `simh` object and boot from it: print "Booting " + rk + "..." s.simh_cmd ("att rk0 " + rk) s.simh_test_result (reply, "Prompt", "main 1") reply = s.simh_cmd ("boot rk0", s._os8_replies_rex) s.os8_test_result (reply, "Monitor Prompt", "main 2") A couple subtle points: We issued a command to SIMH to attach the rk0 device. If we didn't get the SIMH prompt back, `simh_test_result` would have said, main 1: Expecting Prompt. Instead got: Fatal Error Then we issued the SIMH command to boot that device. We used the `os8_test_result` method instead of the `simh_test_result` method because we expected the panoply of replies would more likely be from the OS/8 list. After the simulator starts up, and we've confirmed we've got our OS/8 monitor prompt as a result, we send the first OS/8 command to start our demo. s.os8_cmd ("R TECO") s.os8_test_result (reply, "Command Decoder Prompt", "main 2") The bulk of `teco-pi-demo` consists of more calls to `simh.os8_cmd` and `simh.cmd`. Read the script if you want more examples. **IMPORTANT:** When you specify the [regular expression][re] strings for result matching, and want literal matches for characters that are special to regular expressions such as dot `.`, asterisk `*`, etc., you need to be preface the characterpair of backslashes. Example: To match a literal dollar sign you would say `\\$`. [re]: https://en.wikipedia.org/wiki/Regular_expression ## Contexts The operation of OS/8 under SIMH requires awareness of who is getting the commands: SIMH, the OS/8 Keyboard Monitor, the OS/8 Command Decoder, or some read/eval/print loop in a program being run. Your use of the simh class needs to be mindful of this. Throughout this document every attempt has been made to be clear on which methods keep track of context switches for you and which do not. ### Context Within a program under OS/8 If you've forgotten to exit a sub-program, that program will still be getting your subsequent commands instead of OS/8. You may have a program that keeps running and asking for more input, for example OS/8 `PIP` returns to the command decoder after each action. There is a subtle issue with program interrupts: You **need** to check for the string that gets echoed when you do an interrupt. Otherwise pexpect can get confused. Two methods that abstract this for you are provided: `os8_ctrl_c` and `os8_escape` which send those interrupt characters, ask pexpect to listen for their echo back (`$` comes back from escape), and confirms a return to the OS/8 monitor. Here is the implementation of `os8_ctrl_c` as an example if you need to run a sub-program with a different interrupt character: ``` #### os8_ctrl_c ################################################## # Return to OS/8 monitor using the ^C given escape character. # We need to listen for the ^C echo or else cfm_monitor gets confused. # Confirm we got our monitor prompt. # Optional caller argument enables a message if escape failed. # Note: OS/8 will respond to this escape IMMEDIATELY, # even if it has pending output. # You will need to make sure all pending output is in # a known state and the running program is quiescent # before calling this method. Otherwise pexpect may get lost. def os8_ctrl_c (self, caller = "", debug=False): self.os8_send_ctrl ("c") self._child.expect("\\^C") return self.os8_cfm_monitor (caller) ``` ### Sending Control Characters Several OS/8 programs expect an <kbd>Escape</kbd> (a.k.a. `ALTMODE`) keystroke to do things. Examples are `TECO` and `FRTS`. (Yes, <kbd>Escape</kbd> is <kbd>Ctrl-\[</kbd>. Now you can be the life of the party with that bit of trivia up your sleeve. Or maybe you go to better parties than I do.) The `os8_send_ctrl` method enables you to send arbitrary control characters but it does not keep track of whether you're in the OS/8 or SIMH context. Note also that the `e` control character escapes to SIMH. So avoid writing programs that need that control character as input. ### Context Between SIMH and OS/8 It is important to make sure that commands intended for SIMH go there, and not to OS/8 or any programs running under SIMH. The `os8_cmd` amd `simh_cmd` methods keep track of context. If you call the `simh_cmd` method but aren't actually escaped out to SIMH, an escape will be made for you, and the context change will be recorded. If you issue `os8_cmd` when OS/8 is not running, it will complain and refuse to send the command. The cleanest way to explicitly escape from OS/8 to SIMH is to call `esc_to_simh`. It manages the context switch, and tests to see that you got the SIMH prompt. Example: esc_to_simh() Subtle points: Calling `simh_cmd` will leave you in SIMH. You will need to resume OS/8 explicitly. There are a variety of ways to do this. ## Getting Back to OS/8 from SIMH There are several ways to get back to the simulated OS/8 environment from SIMH context, each with different tradeoffs. *FIXME* We used to have a lot of trouble with continue commands. We think they're all fixed now, so we can fully flesh out this section. ### Rebooting You saw the first one above: send a `boot rk0` command to SIMH. This restarts OS/8 entirely. This is good if you need a clean environment. If you need to save state between one run of OS/8 and the next, save it to the RK05 disk pack or other SIMH media, then re-load it when OS/8 reboots. It's important to check that you got your OS/8 prompt so the recommended code looks like this: ``` reply = s.simh_cmd ("boot rk0", my_replies_rex) s.os8_test_result (reply, "Monitor Prompt", "myprog") ``` ### Continuing The way `teco-pi-demo` does it is to send a `cont` command to SIMH: ``` s.send_line ('cont') ``` A previous version of the simh class would sometime hang the simulator unless a small delay were inserted before escaping to the SIMH context. We believe this is no longer necessary. However the problems with `cont` made implementors gun shy using it. Most code you will see does a restart with an explicit confirmation we are at the OS/8 command level. ### Re-starting OS/8 If your use of OS/8 is such that all required state is saved to disk before re-entering OS/8, you can call the `simh_restart_os8` method to avoid the need for a delay *or* a reboot. It sends the simh command `go 7600` which is the traditional "restart at the OS/8 entrypoint" commonly used from the PDP-8 front panel. It then uses `os8_test_result` to confirm that it got a monitor prompt. `simh_restart_os8` has an optional `caller` argument to make it quick and easy to print an error if returning to the monitor failed. s.simh_restart_os8 (caller = "myprog") `os8-run` uses this option extensively. ## Sending without testing results. At some point you always need to test your results and make sure you are where you think you are. Otherwise some corner case will trip up your use of the simh class, and the error message you will get is a 60 second pause, and a big backtrace. But often you need to send and receive data in a much less structured way than that used by `os8_cmd` and `simh_cmd`. Here is what you need: | Method | Description | |---------------- |---------------------------------------------------------------- | `send_line` | Send the given line blind without before or after checks. | `simh_send_line` | Like `send_line` above, but mindful of context. Will escape to SIMH if necessary.| | `os8_kbd_delay` | Wait an amount of time proportional to what OS/8 should be able to handle on the hosting platform without overflowing the input buffer and dying. | | `os8_send_ctrl` | Send a control character to OS/8. Use `os8_kbd_delay` to prevent overflowin the input buffer and killing OS/8.| | `os8_send_str` | Send a string of characters to OS/8, and wait for os8_kbd_delay afterwards. | | `os8_send_line` | Add a carriage return to the given string and calk os8_send_str` to send it to OS/8.| ## Other Operations ### Quitting the simulator It is recommended that you use the `quit` method to exit the simulator. It will make sure it selects the simh context before trying to quit. Indeed it's further recommended that you send a command to simh to detach all devices to make sure any buffered output is flushed. You need to test for the SIMH prompt to make sure you've succeeded. ``` s.simh_cmd ("detach all") s.simh_test_result(reply, "Prompt", my_replies_rex, "myprog") s._child.sendline("quit") ``` ### Zero Core SIMH's PDP-8 simulator doesn't start with core zeroed, on purpose, because the actual hardware did not do that. SIMH does not attempt to simulate the persistence of core memory by saving it to disk between runs, but the SIMH developers are right to refuse to do this by default: you cannot trust the prior state of a PDP-8's core memory before initializing it yourself. ### Zero OS/8 Core Sometimes we want to zero out core, but leave OS/8 in tact. The `os8_zero_core` method zeros all of core excepting: * 0. page zero - many apps put temporary data here * 1. the top pages of fields 1 & 2 - OS/8 is resident here * 2. the top page of field 2 - OS/8's TD8E driver (if any) lives here We then restart OS/8, which means we absolutely need to do #1 and may need to do #2. We could probably get away with zeroing page 0. ## But There's More! The above introduced you to most of the functionality of `class simh` used by `teco-pi-demo`. It is a useful exercise to read through [the simh class's source code][ssc]. There are many useful and interesting methods in the simh class that are documented there not here. Although it started off as a simple class amenable to quick study, some heavy duty drivers for configuration of OS/8 devices under SIMH were added. The source file is organized places the lower level methods first and proceeds through progressively higher level ones, first for simh direct interaction and the OS/8 interaction. The `os8-run` script has a whole [higher level library][os8script] built on top of the simh class that includes state machines for executing complex commands like BUILD and applying patches with ODT and FUTIL. Another useful module is [`pidp8i.dirs`][dsc] which contains paths to many directories in the PiDP-8/I system, which you can reuse to avoid having to hard-code their locations. This not only makes your script independent of the installation location, which is configurable at build time via `./configure --prefix=/some/path`, but also allows it to run correctly from the PiDP-8/I software's build directory, which has a somewhat different directory structure from the installation tree. [ssc]: https://tangentsoft.com/pidp8i/file/lib/simh.py.in [dsc]: https://tangentsoft.com/pidp8i/file/lib/pidp8i/dirs.py.in [os8script]: https://tangentsoft.com/pidp8i/file/lib/os8script.py.in ## <a id="license" name="credits"></a>Credits and License Written by and copyright © 2017-2020 by Warren Young and William Cattey. Licensed under the terms of [the SIMH license][sl]. [sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md |
Changes to doc/os8-run.md.
︙ | ︙ | |||
81 82 83 84 85 86 87 | * copy files from the running OS/8 environment into the POSIX environment running SIMH. * copy files to the running OS/8 from the POSIX environment running SIMH. * run any OS/8 command as long as it returns immediately to the OS/8 Keyboard Monitor. This includes BATCH scripts. * run `ABSLDR` and `FOTP`, cycling an arbitrary number of times through the OS/8 Command Decoder. | | < | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | * copy files from the running OS/8 environment into the POSIX environment running SIMH. * copy files to the running OS/8 from the POSIX environment running SIMH. * run any OS/8 command as long as it returns immediately to the OS/8 Keyboard Monitor. This includes BATCH scripts. * run `ABSLDR` and `FOTP`, cycling an arbitrary number of times through the OS/8 Command Decoder. * run `PAL8` and report any errors encountered. * run `BUILD` with arbitrarily complex configuration scripts, including the `BUILD` of a system head that inputs `OS8.BN` and `CD.BN`. * configure the `tti`, `rx`, `td`, and `dt` devices at run time to allow shifting between otherwise incompatible configurations of SIMH and OS/8 device drivers. * run included script files so that common code blocks can be written once in an external included script. |
︙ | ︙ | |||
553 554 555 556 557 558 559 | hangs for a while and then gives a timeout backtrace. ### <a id="resume-comm"></a>`resume` — Resume OS/8 at Keyboard Monitor command level. `resume` | | | | > < < | | < < < < | > | | | 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 | hangs for a while and then gives a timeout backtrace. ### <a id="resume-comm"></a>`resume` — Resume OS/8 at Keyboard Monitor command level. `resume` The least disruptive way to resume operations under SIMH is to issue the `continue` command. Although it took a while, we finally got this command working reliably. There were timing and workflow issues that had to be resolved. The `resume` command checks to see if OS/8 has been booted and refuses to act if it has not. ### <a id="restart-comm"></a>`restart` — Restart OS/8. `restart` Equivalent to the SIMH command line of \"`go 7600`\", but which confirms we got our Monitor prompt. Before `resume` was developed, the next less disruptive way to get an OS/8 Keyboard Monitor prompt was to restart SIMH at address 07600. This is considered a soft-restart of OS/8. It is less disruptive than a `boot` command, because the `boot` command loads OS/8 into main memory from the boot device, whereas restarting at location 07600 is just a resart without a reload. The `restart` command checks to see if OS/8 has been booted and refuses to act if it has not. ### <a id="copy-comm"></a>`copy` — Make a copy of a POSIX file. `copy` _source-path_ _destination-path_ The most common activity for `os8-run` is to modify a system image. |
︙ | ︙ | |||
674 675 676 677 678 679 680 681 682 683 | the command will return to the monitor command level and the command prompt, "`.`" will be produced. This command should be used ONLY for OS/8 commands that return immediately to command level. `BATCH` scripts do this, and they can be run from here. ### <a id="pal8-comm"></a>`pal8` — Run OS/8 `PAL8` assembler. | > > > > > > > > > > > > > > > > > < < < | < < < < | < < < < < < < < < < < < < < < < < < < < < < | 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 | the command will return to the monitor command level and the command prompt, "`.`" will be produced. This command should be used ONLY for OS/8 commands that return immediately to command level. `BATCH` scripts do this, and they can be run from here. The `os8` command is aware of a special enablement keyword: `transcript`. (See the [`enable` \ `disable`](#en-dis-comm) section below.) If `transcript` is enabled, the output from running the OS/8 command line is printed. For example, if you wanted to display the contents of a DECtape image you are constructing but no other command lines fed to the `os8` command you would do this: ``` enable transcript os8 DIR DTA0: disable transcript ``` This transcript capability provides a fine grained debugging aid. ### <a id="pal8-comm"></a>`pal8` — Run OS/8 `PAL8` assembler. Actually, the `PAL8` assembler can be called just fine by using the `os8` command, for example: os8 PAL8 RKB1:RL0.BN<RKA1:RL0.PA However, an separate pal8 command was created to enable richer display of errors. Examples: Create a binary `OS8.BN` on partition B of rk05 drive 1 from `OS8.PA` source file found on partition A of rk05 drive 1. pal8 RKB1:OS8.BN<RKA1:OS8.PA |
︙ | ︙ | |||
1015 1016 1017 1018 1019 1020 1021 | default, switch to TD8e to run `BUILD` and create .tu55 tape images suitable for deployment on commonly found hardware out in the real world. ## TODOs | < | 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 | default, switch to TD8e to run `BUILD` and create .tu55 tape images suitable for deployment on commonly found hardware out in the real world. ## TODOs * Add sanity check parse of sub-commands to confirm command. **OR** Change the begin command to treat _argument_ not as a full command, but merely a device from which to fetch the command. Maybe make _argument_ optional. ## Notes |
︙ | ︙ |
Changes to lib/os8script.py.in.
︙ | ︙ | |||
33 34 35 36 37 38 39 40 41 42 43 44 45 46 | # authorization from those authors. ######################################################################## # Bring in just the basics so we can bring in our local modules import os import sys import tempfile sys.path.insert (0, os.path.dirname (__file__) + '/../lib') sys.path.insert (0, os.getcwd () + '/lib') # Python core modules we use import re from string import Template import shutil | > | 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | # authorization from those authors. ######################################################################## # Bring in just the basics so we can bring in our local modules import os import sys import tempfile import time sys.path.insert (0, os.path.dirname (__file__) + '/../lib') sys.path.insert (0, os.getcwd () + '/lib') # Python core modules we use import re from string import Template import shutil |
︙ | ︙ | |||
154 155 156 157 158 159 160 | # Optional device spec, i.e. DTA0: # File spec with a specific extension or no extension. _os8_fspec = Template ("((\S+:)?([A-Z0-9]{1,6}|[A-Z0-9]{1,6}\.$ext))") _os8_BN_fspec = _os8_fspec.substitute(ext="BN") _os8_PA_fspec = _os8_fspec.substitute(ext="PA") _os8_LS_fspec = _os8_fspec.substitute(ext="LS") | < < < < < < < < < < < | < < < < < < < < < < < | < < > | 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | # Optional device spec, i.e. DTA0: # File spec with a specific extension or no extension. _os8_fspec = Template ("((\S+:)?([A-Z0-9]{1,6}|[A-Z0-9]{1,6}\.$ext))") _os8_BN_fspec = _os8_fspec.substitute(ext="BN") _os8_PA_fspec = _os8_fspec.substitute(ext="PA") _os8_LS_fspec = _os8_fspec.substitute(ext="LS") # Regex to parse a valid OS/8 option string either with slash or parens. _opt_str = "((/[A-Z0-9])+|\([A-Z0-9]+\))?" # Regular expression for syntax checking inside ABSLDR # FIXME: Use (and test) _opt_str for full OS/8 Option spec compatibility # One or more OS/8 binary files and optional args beginning with a slash. _absldr_re = re.compile ("^" + _os8_BN_fspec + "(," + _os8_BN_fspec + ")*(/\S)*$") # Regular expressions for syntax checking for cpto and cpfrom. # May be <source> where destination and default option /A is implied. # Or <source> <option> where destination is implied and option is set. |
︙ | ︙ | |||
214 215 216 217 218 219 220 | "SYSTEM": re.compile("^\S+$"), "DSK" : re.compile("^(\S+:)?\S+$"), "BUILD" : re.compile("^(\S+(.BN)?)\s+(\S+(.BN)?)$"), "PRINT" : None, "BOOT" : None, "end" : None} | < < < < < < < < < < < | 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | "SYSTEM": re.compile("^\S+$"), "DSK" : re.compile("^(\S+:)?\S+$"), "BUILD" : re.compile("^(\S+(.BN)?)\s+(\S+(.BN)?)$"), "PRINT" : None, "BOOT" : None, "end" : None} # Parse two whitspace separated arguments into group(1) and group(2) _two_args_re = re.compile("^(\S+)\s+(\S+)$") _rx_settings = ["rx01", "rx02", "RX8E", "RX28"] _tape_settings = ["td", "dt"] _tti_settings = ["KSR", "7b"] |
︙ | ︙ | |||
318 319 320 321 322 323 324 | return vers_array class os8script: # Contains a simh object, other global state and methods # for running OS/8 scripts under simh. #### globals and constants ########################################### | | > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 | return vers_array class os8script: # Contains a simh object, other global state and methods # for running OS/8 scripts under simh. #### globals and constants ########################################### # Replies that pal8 adds. _pal8_rep_adds = [ # Prompts come from the existing _os8_replies # Status: ["ERRORS DETECTED", "ERRORS DETECTED: ", False], ["LINKS GENERATED", "LINKS GENERATED: ", False], # Errors: ["Buffer Exceeded", "BE\s+\S+.*\r", True], ["Cref not Found", "CF\s+\S+.*\r", False], ["Device Error", "DE\s+\S+.*\r", True], ["Device Full", "DF\r", True], ["Illegal Character", "IC\s+\S+.*\r", False], ["Illegal re-Definition", "ID\s+\S+.*\r", False], ["Illegal Equals", "IE\s+\S+.*\r", False], ["Illegal Indirect", "II\s+\S+.*\r", False], ["Illegal PseudoOp", "IP\s+\S+.*\r", False], ["Illegal page Zero reference", "IZ\s+\S+.*\r", False], ["Loader not founD", "LD\s+\S+.*\r", False], ["Link Generated", "LG\s+\S+.*\r", False], ["current Page Exceeded", "PE\s+\S+.*\r", False], ["PHase Error", "PH\s+\S+.*\r", False], ["Re Definition", "RD\s+\S+.*\r", False], ["Symbol table Exceeded", "SE\s+\S+.*\r", False], ["Undefined Origin", "UO\s+\S+.*\r", False], ["Undefined Symbol", "US\s+\S.*\r", False], ["page Zero Exceeded", "ZE\s+\S+.*\r", False], ["NOT FOUND", "\S+ NOT FOUND", False], ] _build_rep_adds = [ # Prompts: # Add the BUILD prompt # Subtle point: Dollar sign appears in all kinds of output # so we try to minimize where we look for it so as to avoid # confusing pexpect. ["BUILD Prompt", "\n\\$$", True], # Status: ["SYS BUILT", "SYS BUILT", False], ["WRITE ZERO DIRECT?", "WRITE ZERO DIRECT\\?", False], ["LOAD OS8", "LOAD OS/8: ", False], ["LOAD CD", "LOAD CD: ", False], # Errors: ["BAD ARG", "\\?BAD ARG", False], ["BAD INPUT", "\\?BAD INPUT", False], ["BAD LOAD", "\\?BAD LOAD", False], ["BAD ORIGIN", "\\?BAD ORIGIN", False], ["CORE", "\\?CORE", False], ["DSK", "\\?DSK", False], ["HANDLERS", "\\?HANDLERS", False], ["I/O ERR", "I/O ERR", False], ["NAME", "\\?NAME", False], ["NO ROOM", "NO ROOM", False], ["SYS NOT FOUND", "SYS NOT FOUND", False], ["PLAT", "\\?PLAT", False], ["SYNTAX", "\\?SYNTAX", False], ["SYS", "\\?SYS", False], ["SYS ERR", "SYS ERR", False], ["File NOT FOUND", "\S+ NOT FOUND", False] ] def __init__ (self, simh, enabled_options, disabled_options, verbose=False, debug=True): self.lang_version = LANG_VERSION self.verbose = verbose self.debug = debug self.simh = simh self.options_enabled = enabled_options self.options_disabled = disabled_options # Do we need separate stacks for enabled/disabled options? self.options_stack = [] # List of scratch files to delete when we are done with all script runs. self.scratch_list = [] self.booted = False self.line_ct_stack = [] # _pal8_replies is the union of _pal8_rep_adds and _os8_replies self._pal8_replies = self._pal8_rep_adds self._pal8_replies.extend(self.simh._os8_replies) # Pre-compile our pal8_replies regexps. self._pal8_replies_rex = [] for item in self._pal8_replies: self._pal8_replies_rex.append(re.compile(item[1].encode())) # _build_replies is the union of _build_rep_adds and _os8_replies self._build_replies = self._build_rep_adds self._build_replies.extend(self.simh._os8_replies) # Pre-compile our build_replies regexps. self._build_replies_rex = [] for item in self._build_replies: self._build_replies_rex.append(re.compile(item[1].encode())) #### path_expand ####################################################### # Simple minded variable substitution in a path. # A path beginning with a dollar sign parses the characters between # the dollar sign and the first slash seen becomes a name to # expand with a couple local names: $home and the anchor directories |
︙ | ︙ | |||
558 559 560 561 562 563 564 | rest = m.group(1) if rest == None: rest = "" if rest == end_str: return #### include_command ################################################# | | | 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 | rest = m.group(1) if rest == None: rest = "" if rest == end_str: return #### include_command ################################################# # Call run_script_file recursively on the file path provided. def include_command (self, line, script_file): path = self.path_expand(line) if path == None: print("Ignoring: \n\tinclude " + line) return "fail" |
︙ | ︙ | |||
765 766 767 768 769 770 771 772 773 774 | return "success" #### resume_command ############################################# # Call the os8_resume in simh to resume OS/8. def resume_command (self, line, script_file): if self.verbose: print("Resuming OS/8 at line " + str(self.line_ct_stack[0]) + ".") | > > > > > | > > > > > | | 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 | return "success" #### resume_command ############################################# # Call the os8_resume in simh to resume OS/8. def resume_command (self, line, script_file): if not self.booted: print("Cannot run resume command at line " + \ str(self.line_ct_stack[0]) + ". OS/8 has not been booted.") return "die" if self.verbose: print("Resuming OS/8 at line " + str(self.line_ct_stack[0]) + ".") self.simh.simh_resume_os8() return "success" #### restart_command ############################################# # Call the os8_restart in simh to resume OS/8. def restart_command (self, line, script_file): if not self.booted: print("Cannot run restart command at line " + \ str(self.line_ct_stack[0]) + ". OS/8 has not been booted.") return "die" if self.verbose: print("Restarting OS/8 at line " + str(self.line_ct_stack[0]) + ".") self.simh.simh_restart_os8() return "success" #### patch_command ############################################## # Read the named patch file and perform its actions. def patch_command (self, line, script_file): |
︙ | ︙ | |||
946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 | else: rest = m.group(3) retval = commands[m.group(1)](rest, script_file) if retval == "die": print("\nFatal error encountered in " + script_path + \ " at line " + str(self.line_ct_stack[0]) + ":") print("\t" + line) sys.exit(-1) # Done. Pop the line count off our line_ct_stack self.line_ct_stack.pop(0) if self.debug: print("popped line_ct_stack: " + str(self.line_ct_stack)) return "success" #### end_command ##################################################### def end_command (self, line, script_file): print("Unexpectedly encountered end command at line " + \ str(self.line_ct_stack[0]) + ": " + line) return "fail" #### parse_odt ####################################################### | > > > > | | | | | | | | | | | | > > | < | > > > > > > > > | | | | > > > > | < > | > > | | < | < < > < | > > > > > > > > > > > > > > > > > > < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | > | > | 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 | else: rest = m.group(3) retval = commands[m.group(1)](rest, script_file) if retval == "die": print("\nFatal error encountered in " + script_path + \ " at line " + str(self.line_ct_stack[0]) + ":") print("\t" + line) sys.exit(-1) elif retval == "fail": print("Non-fatal error encountered in " + script_path + \ " at line " + str(self.line_ct_stack[0]) + ":") print("\t" + line + "\n") # Done. Pop the line count off our line_ct_stack self.line_ct_stack.pop(0) if self.debug: print("popped line_ct_stack: " + str(self.line_ct_stack)) return "success" #### end_command ##################################################### def end_command (self, line, script_file): print("Unexpectedly encountered end command at line " + \ str(self.line_ct_stack[0]) + ": " + line) return "fail" #### parse_odt ####################################################### def parse_odt (self, line): if self.debug: print(line) if line == "\\c": return "break" match = _odt_parse.match(line) if match == None: print("Aborting because of bad ODT line: " + line) self.simh.os8_ctrl_c (caller="parse_odt") return "err" loc = match.group(1) old_val = match.group(2) new_val = match.group(3) expect_val_str = "\s*[0-7]{4} " if self.debug: print("Loc: " + loc + ", old_val: " + old_val + ", new_val: " + \ new_val) self.simh.os8_send_str (loc + "/") self.simh._child.expect(expect_val_str) if old_val.isdigit(): # We need to check old value found_val = self.simh._child.after.decode().strip() if found_val != old_val: print("\tOld value: " + found_val + " does not match " + old_val + ". Aborting patch.") # Abort out of ODT back to the OS/8 Monitor self.simh.os8_ctrl_c ("parse_odt 2") return "err" self.simh.os8_send_line (new_val) return "cont" #### futil_exit ######################################################## def futil_exit (self, line): self.simh.os8_send_line(line) return "break" #### futil_file ######################################################## def futil_file (self, line): # Redundant re-parse of line but nobody else wants args right now. match = _com_split_parse.match(line) if match == None: print("Aborting because of mal-formed FUTIL FILE command: " + line) self.simh.os8_ctrl_c (caller="futil_file") return "err" fname = match.group(2) expect_futil_file_str = "\n" + fname + "\s+(.*)$" self.simh.os8_send_line (line) self.simh._child.expect(expect_futil_file_str) result = self.simh._child.after.decode().strip() match = _com_split_parse.match(result) if match == None: print("Aborting because unexpected return status: " + result + \ " from: " + line) self.simh.os8_ctrl_c (caller="futil_file 2") return "err" if match.group(2).strip() == "LOOKUP FAILED": print("Aborting because of FUTIL lookup failure on: " + fname) self.simh.os8_ctrl_c (caller="futil_file 3") return "err" else: return "cont" #### parse_futil ##################################################### # # Very simple minded: # If first char on line is an alpha, run the command. # If the first char on line is number, do the substitute command. # # Substitute command acts like ODT. # Future version should support the IF construct. # # When we encounter the EXIT command, we return success. def parse_futil (self, line): futil_specials = { "EXIT": self.futil_exit, "FILE": self.futil_file } if line[0].isdigit(): # Treat the line as ODT return self.parse_odt(line) else: match = _com_split_parse.match(line) if match == None: print("Ignoring failed FUTIL command parse of: " + line) return "cont" fcom = match.group(1) rest = match.group(2) if fcom not in futil_specials: # Blind faith and no error checking. self.simh.os8_send_line(line) return "cont" else: return futil_specials[fcom](line) #### run_patch_file ################################################## def run_patch_file (self, pathname): sys.stdout.write ("Applying patch " + os.path.basename (pathname) + "...") sys.stdout.flush () try: patch_file = open(pathname, "r") except IOError: print(pathname + " not found. Skipping.") return "fail" # Supported parsers. # Note tht FUTIL has not been tested since we flipped the expect order. parsers = { "ODT": self.parse_odt, "FUTIL": self.parse_futil } # What prompt do we want when we run an allowed command? # If there is none, we don't wait. But if we want one, # We BETTER wait for it. A race condition has been observed # where, if we don't wait for SAVE, it might not happen. allowed_commands = ["ODT", "R", "GET", "GE", "SAVE", "SA"] inside_a_command = False the_command = "" the_command_parser = None # Any os8-run command may be called after a simh command that left us # in simh context. Check to see if we need to restart OS/8. # We resume OS/8. It should be non-disruptive and work well. if self.simh._context == "simh": self.resume_command(line, script_file) for line in patch_file: line = line.rstrip() if line == "": continue elif line[0] == '#': continue # Ignore Comments elif inside_a_command: retval = the_command_parser (line) if retval == "break": inside_a_command = False self.simh.os8_ctrl_c (caller="run_patch_file") elif retval == "err": patch_file.close() return "fail" elif line[0] == '.': # New OS/8 Command match = _com_os8_parse.match(line) if match == None: print("Aborting patch on failed OS/8 command parse of: " + line) return "fail" com = match.group(1) rest = match.group(2) if com not in allowed_commands: print ("Command " + com + " not allowed in patch. Ignoring.") continue # Fall through to start up our command. # Maybe command is ".ODT", maybe it's "R FUTIL" if com == "R": # Check to see if we can run this. if rest not in parsers: print ("Not allowed to run " + rest + " in a patch file. Aborting.") return "fail" com = rest # Now fall through an set the_command the_command = com # Noisy debug output. Our line. if self.verbose and self.debug: print(line) # Are we going to be inside a command after we do the run? if com in parsers: the_command_parser = parsers[com] inside_a_command = True # Run the line blind, skipping over the dot at the beginning. # We won't get a prompt. self.simh.os8_send_line (line[1:]) # It's an OS/8 command else: # We must test for monitor prompt to signify success. # Otherwise a race condition has been shown to prevent save of # patched binary because our exit of SIMH happens too quickly! reply = self.simh.os8_cmd (line[1:]) # Skip over Prompt in line. # We need to confirm we succeeded. # If we fail, we just complain and keep going. self.simh.os8_test_result (reply, "Monitor Prompt", "run_patch_file command " \ + line[1:]) # Done with all patch file lines. patch_file.close() print("Success.") return "success" #### skip_patch ###################################################### # Returns true if the given filename matches one of the regex string # keys of the given skips dict and the flag value for that key is set. # See skips definition in make_patch, which calls this. def skip_patch (fn, skips): for p in skips: if re.search (p, fn) and skips[p]: return True return False #### simh_command #################################################### # I tried to avoid including this command but sometimes you just # have to reconfigure subtle bits of device drivers. # We assume we can call a simh command at any time, but # doing so puts us in the simh context that persists until we # issue a boot or go command. def simh_command (self, line, script_file): print("simh command is disabled. Line " + \ str(self.line_ct_stack[0]) + " ignored.") return "fail" if self.verbose: print(line) reply = self.simh.simh_cmd(line) self.simh.simh_test_result(reply, "Prompt", "simh_command") return "success" #### umount_command ################################################## def umount_command (self, line, script_file): detach_comm = "det " + line if self.verbose: print("line: " + \ str(self.line_ct_stack[0]) + ": " + detach_comm) reply = self.simh.simh_cmd(detach_comm) self.simh.simh_test_result(reply, "Prompt", "umount_command") return "success" #### make_scratch #################################################### # Create a copy of the contents of image file using the python # method to create a secure, named temp filename. # The caller has split the image file name into a base path, |
︙ | ︙ | |||
1337 1338 1339 1340 1341 1342 1343 | os8dev = _os8_from_simh_dev[simh_dev] attach_comm = "att " + ro_arg + simh_dev + unit + " " + imagename if self.verbose: print("Line " + str(self.line_ct_stack[0]) + ": mount: " + \ attach_comm) | | > | | | | | > > > > > | | > > > > > > > > > > > > > | > > > | | > > > > > | > > > > > > | | | > > > > > > > > > | < < | < | > > > | | | | < < | | | > > | > > > > > > > > | < | | 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 | os8dev = _os8_from_simh_dev[simh_dev] attach_comm = "att " + ro_arg + simh_dev + unit + " " + imagename if self.verbose: print("Line " + str(self.line_ct_stack[0]) + ": mount: " + \ attach_comm) reply = self.simh.simh_cmd(attach_comm) self.simh.simh_test_result(reply, "Prompt", "mount_command") return "success" #### boot_command #################################################### # # Check to see if the device to be booted has something attached. # If not die. # If so, boot it, and set our booted state to True. def boot_command (self, line, script_file): # First confirm something is attached to boot from. ucname = line.upper() boot_replies = [ucname + "\s+(.+)\r", "Non-existent device"] self.simh.simh_send_line("show " + line) retval = self.simh._child.expect(boot_replies) if retval == 1: print("Attempt to boot non-existent device: " + line) return "die" reply_str = self.simh._child.after.decode() m = re.match("^(\S+)\s(\S+),\s+(attached to |not attached)(\S+)?,\s+(.+)\r", reply_str) if m == None: print("Could not determine if device " + line + " is attached; " + "got '" + reply_str + "'") return "die" # Caution match group we want ends with a space. if m.group(3) != "attached to ": print("Attempt to boot on non-attached device: " + line) return "die" boot_comm = "boot " + line if self.verbose: print("Line " + str(self.line_ct_stack[0]) + ": " + boot_comm) reply = self.simh.simh_cmd(boot_comm, self.simh._os8_replies_rex) # We're in OS/8 now use that tester. self.simh.os8_test_result (reply, "Monitor Prompt", "boot_command") self.booted = True return "success" #### os8_command ##################################################### def os8_command (self, line, script_file): if not self.booted: print("Cannot run os8 command at line " + \ str(self.line_ct_stack[0]) + ". OS/8 has not been booted.") return "die" os8_comm = line retval = "success" if self.verbose: print("Line: " + \ str(self.line_ct_stack[0]) + ": os8_command: " + os8_comm) # Any os8-run command may be called after a simh command that left us # in simh context. Check to see if we need to restart OS/8. # We could resume, but restart is safer. if self.simh._context == "simh": self.restart_command(line, script_file) reply = self.simh.os8_cmd (os8_comm, debug=self.debug) if "transcript" in self.options_enabled: print (self.simh._child.before.decode().strip()) mon = self.simh.os8_test_result (reply, "Monitor Prompt", "os8_command moncheck 1") cd = self.simh.os8_test_result (reply, "Command Decoder Prompt", "") while not mon: retval = "fail" if cd: continue # If this was not a fatal error, we need to ^C to get back to Monitor. # But sometimes OS/8 is not yet ready for ^C, so we wait half a second. if self.simh._os8_replies[reply][2] == False: time.sleep (.5) self.simh.os8_send_ctrl ('c') reply = self.simh._child.expect (self.simh._os8_replies_rex) mon = self.simh.os8_test_result (reply, "Monitor Prompt", "os8_command moncheck 2") cd = self.simh.os8_test_result (reply, "Command Decoder Prompt", "") return retval #### pal8_command #################################################### # The "pal8" script command comes in two forms: # The two argument form where the PAL8 status is printed on the fly # and the 3 argument form where all status goes into the listing file. # We do the 3 argument form with a simple "os8" script command. def pal8_command (self, line, script_file): if not self.booted: print("Cannot run pal8 command at line " + \ str(self.line_ct_stack[0]) + ". OS/8 has not been booted.") return "die" if self.verbose: print("Running PAL8 on: " + line) reply = self.simh.os8_cmd ("R PAL8") # Did the command successfully run and enter the command decoder? if self.simh.os8_test_result (reply, "Command Decoder Prompt", "call_pal8") == False: print("PAL8 failed to start at line " + str(self.line_ct_stack[0])) return "fail" com_line = line retval = "success" if self.verbose: print("Line: " + \ str(self.line_ct_stack[0]) + ": pal8_command: " + com_line) # Any os8-run command may be called after a simh command that left us # in simh context. Check to see if we need to restart OS/8. # We could resume, but restart is safer. if self.simh._context == "simh": self.restart_command(line, script_file) # Send our command and harvest results. reply = self.simh.os8_cmd (com_line, self._pal8_replies_rex) err_count = 0 executed_line = self.simh._child.before.decode().strip() reply_match_str = self.simh._child.after.decode().strip() ed = self.simh.test_result(reply, "ERRORS DETECTED", self._pal8_replies, "") mon = self.simh.test_result(reply, "Monitor Prompt", self._pal8_replies, "") cd = self.simh.test_result(reply, "Command Decpder Prompt", self._pal8_replies, "") lg = self.simh.test_result(reply, "LINKS GENERATED", self._pal8_replies, "") err_string = "" ret_val = "success" # We're going to print all the errors we see # and keep looking till we get either a monitor or command decoder prompt. while not mon: if ed: # Got Errors Detected. Count them. self.simh._child.expect("\d+") err_count = int(self.simh._child.after.decode().strip()) elif lg: self.simh._child.expect("\d+") link_count = int(self.simh._child.after.decode().strip()) elif cd: # Got Command Decoder. Exit with failure. if self.debug: print ("call_pal8: Non-fatal error: Sending ^C") # Exit pal8. We'll confirm we got back to OS/8 monitor below. self.simh.os8_send_ctrl ('c') else: err_string += ("\t" + self.simh._child.after.decode().strip() + "\n") reply = self.simh._child.expect(self._pal8_replies_rex) ed = self.simh.test_result(reply, "ERRORS DETECTED", self._pal8_replies, "") mon = self.simh.test_result(reply, "Monitor Prompt", self._pal8_replies, "") cd = self.simh.test_result(reply, "Command Decoder Prompt", self._pal8_replies, "") lg = self.simh.test_result(reply, "LINKS GENERATED", self._pal8_replies, "") if err_count > 0 or err_string != "": print ("PAL8 Error: \n\t" + executed_line) print (err_string) return "fail" return "success" #### begin_command ################################################### def begin_command (self, line, script_file): if not self.booted: |
︙ | ︙ | |||
1460 1461 1462 1463 1464 1465 1466 | if m.group(1) not in sub_commands: print("Ignoring unrecognized sub-command at line " + \ str(self.line_ct_stack[0]) + ": " + m.group(1)) print("Ignoring everything to next end.") self.ignore_to_subcomm_end(line, script_file, "") return "fail" else: | > > | | < < < < < < | < | < < < | | < < < < < | > > | > | | | > | > | > < < > | > > > > > > > > > | | | | > | 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 | if m.group(1) not in sub_commands: print("Ignoring unrecognized sub-command at line " + \ str(self.line_ct_stack[0]) + ": " + m.group(1)) print("Ignoring everything to next end.") self.ignore_to_subcomm_end(line, script_file, "") return "fail" else: # Any os8-run command may be called after a simh command that left us # in simh context. Check to see if we need to restart OS/8. # We could resume, but restart is safer. if self.simh._context == "simh": self.restart_command(line, script_file) return sub_commands[m.group(1)](m.group(3), script_file) #### build_subcomm ################################################### # Run system BUILD command. # Use RU not R because we will save it. # Allow specifying WHICH version of build on the command line. def build_subcomm (self, old_line, script_file): os8_comm = "RU " + old_line if self.verbose: print("Line " + str(self.line_ct_stack[0]) + ": " + os8_comm) # Run BUILD and confirm it has started successfully. reply = self.simh.os8_cmd (os8_comm, self._build_replies_rex, debug=self.debug) if self.simh.test_result (reply, "BUILD Prompt", self._build_replies, \ "build_subcomm startup " + os8_comm, debug=self.debug) == False: print ("Line " + str(self.line_ct_stack[0]) + ": " + os8_comm + " failed.") print ("Ignoring the rest of this block.") self.ignore_to_subcomm_end(os8_comm, script_file, "build") # Confirm we're back to monitor command level. self.simh.os8_cfm_monitor ("build_subcomm 1") return "fail" # Submit the lines from script file to BUILD sub-command. for line in script_file: line = self.basic_line_parse(line, script_file) if line == None: continue m = re.match(_comm_re, line) if m == None: print("Ignoring mal-formed build sub-command at line " + \ str(self.line_ct_stack[0]) + ": " + line) continue build_sub = m.group(1) rest = m.group(3) if rest == None: rest = "" if self.debug: print ("build_sub: " + build_sub) if build_sub not in _build_comm_regs: print("Unrecognized BUILD command at line " + \ str(self.line_ct_stack[0]) + ": " + build_sub) continue # Handle the exit from BUILD when we hit an "end" statement. if build_sub == "end": if rest == "": print("Warning! end statement encountered inside build with no argument at line " + \ str(self.line_ct_stack[0]) + ".\nExiting build.") # Exit BUILD. Note! Unlike many commands build does NOT echo "^C!" self.simh.os8_send_ctrl ('c') self.simh.os8_cfm_monitor ("build_subcomm end with no argument") return "fail" elif rest != "build": print("Warning! Mismatched begin/end blocks in BUILD at line " + \ str(self.line_ct_stack[0]) + ".\nEncountered end: {" + \ rest + "}. Exiting BUILD.") # Exit BUILD. Note! Unlike many commands build does NOT echo "^C!" self.simh.os8_send_ctrl ('c') self.simh.os8_cfm_monitor ("build_subcomm mismatched begin/end") return "fail" # We're done. Print any desired verbose or debug status # then ^C to exit and confirm we're at monitor level. if self.verbose: print("Line " + str(self.line_ct_stack[0]) + ": end BUILD") if self.debug: print("before: " + self.simh._child.before.decode().strip()) print("after: " + self.simh._child.after.decode().strip()) # Return to monitor. # Note! Unlike many commands build does NOT echo "^C!" self.simh.os8_send_ctrl ('c') self.simh.os8_cfm_monitor ("build_subcomm end with no argument.") return "success" # Now perform sub-commands within BUILD. They have a discernable format. build_re = _build_comm_regs[build_sub] if build_re != None: m2 = re.match(build_re, rest) if m2 == None: print("Ignoring mal-formed BUILD at line " + \ str(self.line_ct_stack[0]) + ": " + build_sub + \ |
︙ | ︙ | |||
1567 1568 1569 1570 1571 1572 1573 | str(self.line_ct_stack[0]) + ".") continue else: cd_arg = m2.group(3) if self.verbose: print("Line " + str(self.line_ct_stack[0]) + \ ": BUILD KBM: " + kbm_arg + ", CD: " + cd_arg) | < < < < < | < < | | < < < < < | < < < < < | < < | | < < < < < | < < > | | | | < < < > > > > > > | < < | > | | > > > > > | > > | | > > > > > | < > < < < < < | < | < | | | < < < < < | | < < < < < < > | | < < < | > | > > > > > > > > > | > > > | 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 | str(self.line_ct_stack[0]) + ".") continue else: cd_arg = m2.group(3) if self.verbose: print("Line " + str(self.line_ct_stack[0]) + \ ": BUILD KBM: " + kbm_arg + ", CD: " + cd_arg) # Confirm prompted for OS8 binary. reply = self.simh.os8_cmd ("BUILD", self._build_replies_rex, debug=self.debug) if self.simh.test_result(reply, "LOAD OS8", self._build_replies, "build_subcomm 5") == False: print("No prompt for LOAD OS/8 in BUILD command within BUILD at line " + \ str(self.line_ct_stack[0]) + ".") print("Fatal error. Aborting script.") return "die" # Send it and confirm prompted for CD binary. reply = self.simh.os8_cmd (kbm_arg, self._build_replies_rex, debug=self.debug) if self.simh.test_result(reply, "LOAD CD", self._build_replies, "build_subcomm 6") == False: print("No prompt for LOAD CD in BUILD command within BUILD at line " + \ str(self.line_ct_stack[0]) + ".") print("Fatal error. Aborting script.") return "die" # Send it and confirm we're back in BUILD command mode. reply = self.simh.os8_cmd (cd_arg, self._build_replies_rex, debug=self.debug) if self.simh.test_result(reply, "BUILD Prompt", self._build_replies, "build_subcomm 7") == False: print ("BUILD command within build failed. Aborting script.") return "die" if self.debug: print("Resume BUILD.SV command loop.") continue # Normal case: commands within BUILD. comm = build_sub + " " + rest if self.verbose: print("Line " + str(self.line_ct_stack[0]) + ": BUILD-> " + comm) reply = self.simh.os8_cmd (comm, self._build_replies_rex, debug=self.debug) # Special case "BOOT" sub-command: May ask, "WRITE ZERO DIRECT?" # Will give a monitor prompt when done. if build_sub == "BOOT": if self.simh.test_result(reply, "WRITE ZERO DIRECT?", self._build_replies, \ "", debug=self.debug): if self.debug: print("Got, \"WRITE ZERO DIRECT?\". Sending \"Y\".") reply = self.simh.os8_cmd("Y", self._build_replies_rex, debug=self.debug) if self.simh.test_result(reply, "SYS BUILT", self._build_replies, "", debug=self.debug): # Successful boot. We're now at monitor level. # Simplest to ignore anything else in the script up to "end build" # Return success or failure based on finding that monitor prompt. self.ignore_to_subcomm_end(os8_comm, script_file, "build") if self.simh.os8_cfm_monitor ("build_subcomm 8"): return "success" else: return "fail" # At this point we either have a BUILD prompt or an error message. # If it's not the BUILD prompt, we print an error. # If the error is fatal, ignore rest of build block, # exit back to OS/8 if necessary and return fail. # If it's not fatal, continue running BUILD. if self.simh.test_result(reply, "BUILD Prompt", self._build_replies, \ "build_subcomm 9", debug=self.debug) == False: print("BUILD error at line " + str(self.line_ct_stack[0]) + \ " with command " + self.simh._child.before.decode().strip()) if self._build_replies[reply][2] == True: print ("Fatal error. Ignoring rest of this block.") self.ignore_to_subcomm_end(os8_comm, script_file, "build") # Confirm we're back at the monitor as expected. self.simh.os8_cfm_monitor ("build_subcomm 10") return "fail" # To continue, we need to ask pexpect to get that BUILD prompt before # resuming after an error. Ignore everything until we get it. self.simh._child.expect("\n\\$$") print("Warning end of file encountered with no end of BUILD command block at line " + \ str(self.line_ct_stack[0]) + ".") return "fail" #### cdprog_subcomm ################################################## # Cycle through OS/8 command decoder with the command specified # in the argument. def cdprog_subcomm (self, old_line, script_file): os8_comm = "RU " + old_line end_str = "cdprog " + old_line if self.verbose: print("Line: " + str(self.line_ct_stack[0]) + ": " + os8_comm) reply = self.simh.os8_cmd (os8_comm, debug=self.debug) if self.simh.os8_test_result (reply, "Command Decoder Prompt", "cdprog: " + \ os8_comm, debug=self.debug) == False: print (" failed at Line " + str(self.line_ct_stack[0])) print ("Ignoring the rest of this block.") self.ignore_to_subcomm_end(os8_comm, script_file, end_str) # Confirm we're back to monitor command level. self.simh.os8_cfm_monitor ("cdprog OS/8 restart after failed RU command") return "fail" # Submit the lines from script file to the running command. # Track whether we return to the Comnand Decoder for more or exit. # Track whether we need to exit and ignore the rest of the block. for line in script_file: line = self.basic_line_parse(line, script_file) if line == None: continue # Test for special case, "end" and act on it if present. m = re.match(_comm_re, line) if m != None and m.group(1) != None and m.group(1) != "" and m.group(1) == "end": |
︙ | ︙ | |||
1707 1708 1709 1710 1711 1712 1713 | else: retval = "success" if self.verbose: print("Line " + str(self.line_ct_stack[0]) + ": end " + end_str) if retval == "fail": print("Exiting cdprog, possibly earlier than expected at line " + \ str(self.line_ct_stack[0]) + ".") | > > | > < > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > > < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 | else: retval = "success" if self.verbose: print("Line " + str(self.line_ct_stack[0]) + ": end " + end_str) if retval == "fail": print("Exiting cdprog, possibly earlier than expected at line " + \ str(self.line_ct_stack[0]) + ".") # Return to Monitor reply = self.simh.os8_escape (caller="Sending escape failed. Trying ^c") self.simh.os8_send_ctrl ('c') self.simh.os8_cfm_monitor ("cdprog: ^c failed. State machine will be confused.") return retval # We could do some basic OS/8 command decoder synax checking here. if self.verbose: print("Line: " + str(self.line_ct_stack[0]) + ": * " + line) print("Sending...") reply = self.simh.os8_cmd (line) if self.debug: print ("cdprog sent line. Got reply: " + str(reply) + " -> " + \ self.simh._os8_replies [reply][0]) # Transcribe our output if desired. if "transcript" in self.options_enabled: print (self.simh._child.before.decode().strip()) mon = self.simh.os8_test_result(reply, "Monitor Prompt", "") cd = self.simh.os8_test_result(reply, "Command Decoder Prompt", "") if mon: # Case of command running to completion and returning to OS/8 # Clean up the parse to the end of the block and return success. self.ignore_to_subcomm_end(os8_comm, script_file, end_str) return "success" elif not cd: # We didn't return to command decoder. That means we have an error. # Test the fatal bit in the error structure. # IF True: we returned to OS/8. Say we're ignoring the block and return failure. # Otherwise we should continue. if self.simh._os8_replies[reply][2] == True: print ("Fatal error. Ignoring rest of this block.") self.ignore_to_subcomm_end(os8_comm, script_file, end_str) # Print error message. self.simh.os8_test_result(reply, "Command Decoder Prompt", "cdprog failure") # Confirm we're back at Monitor self.simh.os8_cfm_monitor ("cdprog error handler return to monitor fail") return "fail" else: print ("Non-fatal error encountered with: " + line) print ("\t" + self.simh._os8_replies[reply][0]) # To continue, we need to ask pexpect to get that Command Decoder # prompt before resuming after an error. Ignore everything until we get it. self.simh._child.expect("\n\\*$") print("Warning end of file encountered at line " + \ str(self.line_ct_stack[0]) + \ " with no end of cdprog command block.") # Exit command back to OS/8 monitor. self.simh.os8_escape (caller="cdprog escape from decoder failed sending ^c") self.simh.os8_send_ctrl ('c') self.simh.os8_cfm_monitor ("failed to get to monitor with ^c") return "fail" #### check_exists #################################################### # Check existence of all files needed def check_exists (s, image_copyins): for copyin in image_copyins: image = copyin[1] image_path = dirs.os8mi + image if (not os.path.isfile(image_path)): print("Required file: " + image_path + " not found.") mkos8_abort(s) # else: print("Found " + image_path) |
Changes to lib/simh.py.in.
1 2 3 4 5 6 7 8 | #!/usr/bin/env @PYCMD@ # -*- coding: utf-8 -*- ######################################################################## # simh/__init__.py - A wrapper class around pexpect for communicating # with an instance of the PiDP-8/I SIMH simulator running OS/8. # # See ../doc/class-simh.md for a usage tutorial. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/usr/bin/env @PYCMD@ # -*- coding: utf-8 -*- ######################################################################## # simh/__init__.py - A wrapper class around pexpect for communicating # with an instance of the PiDP-8/I SIMH simulator running OS/8. # # See ../doc/class-simh.md for a usage tutorial. # # Copyright © 2017 by Jonathan Trites, © 2017-2020 by William Cattey # and Warren Young. # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to |
︙ | ︙ | |||
41 42 43 44 45 46 47 | import tempfile import time import re import sys import pidp8i | > > > > > > > > > > > > | > | 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import tempfile import time import re import sys import pidp8i #### simh ############################################################# # Object to manage a running SIMH process programmatically with pexpect. # Functions in this file are organized from lower level to higher # level where possible. #### Private functions ################################################ ####################################################################### # simh class class simh: #### constants ###################################################### # pexpect object instance, set by ctor _child = None # Constant used by os8_kbd_delay, assembled in stages: # # 1. PDP-8 RS-232 bits per character: 7-bit ASCII plus necessary # start, stop, and parity bits. |
︙ | ︙ | |||
87 88 89 90 91 92 93 | # 5. Invert to get seconds per character, that being the delay value. _bpc = 7 + 1 + 1 + 1 # [1] _ips_ratio = float (pidp8i.ips.current) / pidp8i.ips.pdp8i # [2] _pdp8i_safe_bps = 300 # [3] _host_safe_cps = _pdp8i_safe_bps * _ips_ratio / _bpc # [4] _os8_kbd_delay = 1 / _host_safe_cps # [5] | | > > > > > > > > > > > > > > > > | > | > > > > | | > > | > > > > > | > > > > > > > > > > > > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | # 5. Invert to get seconds per character, that being the delay value. _bpc = 7 + 1 + 1 + 1 # [1] _ips_ratio = float (pidp8i.ips.current) / pidp8i.ips.pdp8i # [2] _pdp8i_safe_bps = 300 # [3] _host_safe_cps = _pdp8i_safe_bps * _ips_ratio / _bpc # [4] _os8_kbd_delay = 1 / _host_safe_cps # [5] #### _simh_replies ################################################# # Array of items that describe replies one might get from SIMH. # Each item is a 2 element array consisting of: # [0] A help string that describes the reply. # Match against this string when testing error values. # This value may not be unique. When not unique # the multiple values should represent the same error. # # [1] A regular expression for pexpect to use to match on it. # It is a good idea to terminate status messages with "\r" # in order to confirm we've got the whole line, # and prompts with "$" to terminate the search. # # For speed and efficiency an array of compiled # regular expressions, indexed to _simh_replies # is created by __init__: simh_replies_rex _simh_replies = [ # Prompts: ["Prompt", "sim> $"], # Guard against case we used the simh table when we meant the OS/8 table. ["Monitor Prompt", "\n\\.$"], ["Non-existent device", "Non-existent device"], ] ####_os8_replies ################################################## # Simiar to _simh_replies, but describing replies from OS/8 # when it is running under SIMH. # Each item is a 3 element array consisting of: # [0] A help string that describes the reply. # Match against this string when testing error values. # This value may not be unique. When not unique # the multiple values should represent the same error. # # [1] A regular expression for pexpect to use to match on it. # It is a good idea to terminate status messages with "\r" # in order to confirm we've got the whole line, # and prompts with "$" to terminate the search. # # For speed and efficiency an array of compiled # regular expressions, indexed to _simh_replies # is created by __init__: os8_replies_rex # # [2] A True/False indicator if the command returned to the # keyboard monitor, rather than continuing in the program. _os8_replies = [ # Prompts: ["Monitor Prompt", "\n\\.$", True], ["Command Decoder Prompt", "\n\\*$", False], ["PIP Continue", "\\^$", True], # Newline NOT always present! # OS/8 Handbook 1974 page 1-43/81 Keyboard Monitor Error Messages: ["Directory I/O Error", "MONITOR ERROR 2 AT \d+ \\(DIRECTORY I/O ERROR\\)", True], ["I/O Error on SYS", "MONITOR ERROR 5 AT \d+ \\(I/O ERROR ON SYS\\)", True], ["Directory I/O Error", "MONITOR ERROR 6 AT \d+ \\(DIRECTORY I/O ERROR\\)\r", True], ["Device not available", "(\S+) NOT AVAILABLE", False], ["File not found", "(\S+) NOT FOUND", False], # OS/8 Handbook 1974 page 1-51/89 Command Decoder Error Messages ["Illegal Syntax", "ILLEGAL SYNTAX", False], ["File does not exist", "(\S+) DOES NOT EXIST", False], # ["(\S+) NOT FOUND", False], # See above ["Too many files", "TOO MANY FILES", False], # OS/8 Handbook 1974 page 1-75/113 CCL Error Messages ["Bad Device", "BAD DEVICE", False], ["Bad Extension", "BAD EXTENSION", False], #"", OS/8 Handbook 1974 page 1-106/144 PIP Error Messages ["ARE YOU SURE?", "ARE YOU SURE\\?", False], ["BAD DIRECTORY ON DEVICE", "BAD DIRECTORY ON DEVICE #\s?\d+", False], ["BAD SYSTEM HEAD", "BAD SYSTEM HEAD", False], ["CAN'T OPEN OUTPUT FILE", "CAN'T OPEN OUTPUT FILE", False], ["DEVICE NOT A DIRECTORY DEVICE", "DEVICE #\d+ NOT A DIRECTORY DEVICE", False], ["DIRECTORY ERROR", "DIRECTORY ERROR", False], ["ERROR DELETING FILE", "ERROR DELETING FILE", False], ["ILLEGIAL BINARY INPUT, FILE", "ILLEGIAL BINARY INPUT, FILE #\d+", False], ["INPUT ERROR", "INPUT ERROR, FILE #\s?\d+", False], ["IO ERROR--CONTINUING", "IO ERROR IN \\(file name\\) --CONTINUING", False], ["NO ROOM FOR OUTPUT FILE", "NO ROOM FOR OUTPUT FILE", False], ["NO ROOM--CONTINUING", "NO ROOM IN \\(file name\\) --CONTINUING", False], ["OUTPUT ERROR", "OUTPUT ERROR", False], ["PREMATURE END OF FILE", "PREMATURE END OF FILE, FILE #\s?\d+", False], ["ZERO SYS?", "ZERO SYS?", False], #"", OS/8 Handbook 1974 page 2-81/244: DIRECT Error Messages ["BAD INPUT DIRECTORY", "BAD INPUT DIRECTORY", False], ["DEVICE DOES NOT HAVE A DIRECTORY", "DEVICE DOES NOT HAVE A DIRECTORY", False], ["ERROR CLOSING FILE", "ERROR CLOSING FILE", False], ["ERROR CLOSING FILE", "ERROR CLOSING FILE", False], ["ERROR READING INPUT DIRECTORY", "ERROR READING INPUT DIRECTORY", False], ["ILLEGAL *", "ILLEGAL \\*", False], #"", OS/8 Handbook 1974 page: 2-109/272: FOTP Error Messages ["ERROR ON INPUT DEVICE, SKIPPING", "ERROR ON INPUT DEVICE, SKIPPING \\((\S+)\\)", False], ["ERROR ON OUTPUT DEVICE, SKIPPING", "ERROR ON OUTPUT DEVICE, SKIPPING \\((\S+)\\)", False], ["ERROR READING INPUT DIRECTORY", "ERROR READING INPUT DIRECTORY", False], ["ERROR READING OUTPUT DIRECTORY", "ERROR READING OUTPUT DIRECTORY", False], ["ILLEGAL ?", "ILLEGAL \\?", False], ["NO FILES OF THE FORM", "NO FILES OF THE FORM: (\S+)", False], ["NO ROOM, SKIPPING", "NO ROOM, SKIPPING \\((\S+)\\)", False], ["SYSTEM ERROR-CLOSING FILE", "SYSTEM ERROR-CLOSING FILE", False], ["USE PIP FOR NON-FILE STRUCTURED DEVICE", "USE PIP FOR NON-FILE STRUCTURED DEVICE", False], ["LINE TOO LONG IN FILE", "LINE TOO LONG IN FILE#\d+", False], ] # Pattern to match a SIMH command. The command verb ends up in # match().group(1), and anything after the verb in group(3). _simh_comm_re = re.compile ("^\s*(\S+)(\s+(.*))?$") # Significant prefixes of SIMH command verbs that transition from SIMH # command context back into the simulation: BOOT, CONTINUE, and GO. |
︙ | ︙ | |||
175 176 177 178 179 180 181 | self._child = pexpect.spawn (os.path.join (basedir, 'bin', sim)) self._valid_pip_options = ["/A", "/B", "/I"] self._os8_file_re = re.compile("(\S+):(\S+)?") self._os8_error_match_strings = [] self._os8_fatal_check = [] self.verbose = False | < < < > | < | | < < < | | | | | < < < < < | < < < < < | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < | < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < < < < < < < < < < < < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | < | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 | self._child = pexpect.spawn (os.path.join (basedir, 'bin', sim)) self._valid_pip_options = ["/A", "/B", "/I"] self._os8_file_re = re.compile("(\S+):(\S+)?") self._os8_error_match_strings = [] self._os8_fatal_check = [] self.verbose = False # We keep track of the command context and transition automatically. self._context = "simh" # Pre-compile our os8_replies regexps. self._os8_replies_rex = [] for item in self._os8_replies: self._os8_replies_rex.append(re.compile(item[1].encode())) # Pre-compile our simh_replies regexps. self._simh_replies_rex = [] for item in self._simh_replies: self._simh_replies_rex.append(re.compile(item[1].encode())) # Turn off pexpect's default inter-send() delay. We add our own as # necessary. The conditional tracks an API change between 3 and 4. pev4 = (pkg_resources.get_distribution("pexpect").parsed_version > pkg_resources.parse_version("4.0")) self._child.delaybeforesend = None if pev4 else 0 # Wait for the simulator's startup message. if not self.try_wait ('PDP-8 simulator V.*git commit id: [0-9a-f]', 10): raise RuntimeError ('Simulator failed to start') #################### simh pexpect Abstraction layer ################## # Ideally these should be the public interface to pexpect # used with the simh object #### set_logfile ##################################################### def set_logfile (self, lf): self._child.logfile = lf #### send_line ####################################################### # Sends the given line "blind", without before or after checks def send_line (self, line): self._child.sendline (line) #### read_tail ####################################################### # Watch for a literal string, then get what follows on that line. def read_tail (self, head, timeout = -1): self._child.expect_exact ([head], timeout) return self._child.readline () #### spin ############################################################ # Let child run without asking anything more from it, with an optional # timeout value. If no value is given, lets child run indefinitely. def spin (self, timeout = None): self._child.expect (pexpect.EOF, timeout = timeout) |
︙ | ︙ | |||
748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 | "waiting for " + str(matches) + "\n") return False except: sys.stderr.write ("Failed to match " + str(matches) + ": unknown exception.\n") return False #### zero_core ####################################################### # From SIMH context, zero the entire contents of core, which is # assumed to be 32 kWords. # # SIMH's PDP-8 simulator doesn't start with core zeroed, on purpose, # because the actual hardware did not do that. SIMH does not attempt # to simulate the persistence of core memory by saving it to disk # between runs, but the SIMH developers are right to refuse to do this # by default: you cannot trust the prior state of a PDP-8's core # memory before initializing it yourself. # # See os8_zero_core () for a less heavy-handed alternative for use # when running under OS/8. def zero_core (self): | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | > | > > > > | 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 | "waiting for " + str(matches) + "\n") return False except: sys.stderr.write ("Failed to match " + str(matches) + ": unknown exception.\n") return False ######################## Utility Functions ############################# #### test_result ###################################################### # Given a result number, an expected result, and an array of result elements, # return True if the result matched expected value. # If caller is not the empty string, print a message about it. # # This routine does the repetitive work of testing results returned # from running a command, and optionally printing status. def test_result (self, reply, expected, results, caller, debug=False): # Cover case of utter failure. if reply == -1: if debug or caller != "": print (caller + ": failure.") return False reply_ID = results[reply][0] if debug: print ("test_result: Got reply: " + str(reply) + " -> " + reply_ID) print("\tmatch before: {" + self._child.before.decode() + "}") print("\tmatch after: {" + self._child.after.decode() + "}") if reply_ID.lower() == expected.lower(): return True else: if caller != "": print (caller + ": Expected: \"" + expected + "\". Instead got: \"" + reply_ID + "\".") return False ##################### Basic SIMH Interaction ########################### # Use these to work with simh under pexpect #### esc_to_simh ###################################################### # Unconditionally go to SIMH def esc_to_simh (self, debug=False): self._child.sendcontrol ('e') reply = self._child.expect (self._simh_replies_rex) # Wait to get simh prompt self.simh_test_result(reply, "Prompt", "esc_to_simh") self._context = "simh" if debug: print("esc_to_simh: reply: " + str(reply) + " -> " + self._simh_replies[reply][0]) print("\tmatch before: {" + self._child.before.decode() + "}") print("\tmatch after: {" + self._child.after.decode() + "}") return reply #### simh_test_result ################################################# # Convenience wrapper for test_result that uses SIMH replies. def simh_test_result (self, reply, expected, caller, debug=False): return self.test_result (reply, expected, self._simh_replies, caller) #### simh_send_line ######################################################## # Send a line to simh while managing context. # If we are not in the simh context call esc_to_simh which will # send ^e, and set the context to simh. # If we issue a command that enters os8 context, set context "os8". # It is up to the caller to then do an expect to confirm success. def simh_send_line (self, cmd, debug=False): if debug: print ("Context: " + self._context) if self._context != "simh": self.esc_to_simh() if debug: print ("simh_send_line: Sending: " + cmd) self._child.sendline (cmd) m = re.match (self._simh_comm_re, cmd) if m != None and m.group(1)[:1].upper() in self._enters_os8_context: self._context = "os8" #### simh_cmd ######################################################## # If we are not in the simh context call esc_to_simh which will # send ^e, and set the context to simh. # If we issue a command that enters os8 context, set context "os8". # Wait for a reply for error checking. # replies is an optional argument that defaults to _simh_replies_rex def simh_cmd (self, cmd, replies=None, debug=False): if replies == None: replies = self._simh_replies_rex self.simh_send_line (cmd, debug=debug) reply = self._child.expect(replies) if debug: print("\tGot reply: " + str(reply) + " -> " + self._simh_replies[reply][0]) print("\tmatch before: {" + self._child.before.decode() + "}") print("\tmatch after: {" + self._child.after.decode() + "}") return reply #### quit ############################################################ # Quits the simulator and waits for it to exit # By calling simh_send_line, we are careful to look to our context # and escape to SIMH if necessary. def quit (self): self.simh_send_line("quit") #### zero_core ####################################################### # From SIMH context, zero the entire contents of core, which is # assumed to be 32 kWords. # # SIMH's PDP-8 simulator doesn't start with core zeroed, on purpose, # because the actual hardware did not do that. SIMH does not attempt # to simulate the persistence of core memory by saving it to disk # between runs, but the SIMH developers are right to refuse to do this # by default: you cannot trust the prior state of a PDP-8's core # memory before initializing it yourself. # # See os8_zero_core () for a less heavy-handed alternative for use # when running under OS/8. def zero_core (self): reply = self.simh_cmd ('de all 0') self.simh_test_result(reply, "Prompt", "simh_zero_core") ################# PDP-8 SIMH Interaction ############################# # High level interfaces to learn about and change device configurations # for the PDP-8 under SIMH. #### describe_dev_config ############################################# # We provide an interface to alter SIMH device configurations for # specific parameters and specific devices # # dev configs supported: rx, tti, tape # # rx: RX8E, RX28 RX8E is the simh name for RX01 support. |
︙ | ︙ | |||
801 802 803 804 805 806 807 808 809 810 811 812 813 | return self.parse_show_tti(lines) else: return None #### do_simh_show ################################################### # Calls show on the device name. # Returns array of lines from output. def do_simh_show (self, name): supported_shows = ["dt", "td", "tti", "rx"] if name not in supported_shows: return None ucname = name.upper() | > | | 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 | return self.parse_show_tti(lines) else: return None #### do_simh_show ################################################### # Calls show on the device name. # Returns array of lines from output. # This is focused on OS/8 devices. def do_simh_show (self, name): supported_shows = ["dt", "td", "tti", "rx"] if name not in supported_shows: return None ucname = name.upper() self.simh_send_line("show " + name) self._child.expect(ucname + "\s+(.+)\r") lines = self._child.after.decode().split ("\r") return lines #### parse_show_tape_dev ############################################ # Returns current state of DECtape support. |
︙ | ︙ | |||
907 908 909 910 911 912 913 | return False else: for unit in attached_from.keys(): if attached_from[unit] != "": det_comm = "det " + from_tape + unit if self.verbose: print(det_comm + "(Had: " + attached_from[unit] + ")") | | > | > | > | 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 | return False else: for unit in attached_from.keys(): if attached_from[unit] != "": det_comm = "det " + from_tape + unit if self.verbose: print(det_comm + "(Had: " + attached_from[unit] + ")") reply = self.simh_cmd(det_comm) self.simh_test_result(reply, "Prompt", "set_tape_config: " + det_com) reply = self.simh_cmd("set " + from_tape + " disabled") self.simh_test_result(reply, "Prompt", "set_tape_config disable " + from_tape) lines = self.do_simh_show(to_tape) to_status = self.parse_show_tape_dev(lines) if to_status == None: print("do_tape_change: Trouble parsing \'show " + to_tape + \ "\' output from simh. Giving up on:") self.do_print_lines (lines) return False elif to_status != "disabled": print(to_tape + " already is enabled.") else: reply = self.simh_cmd("set " + to_tape + " enabled") self.simh_test_result(reply, "Prompt", "set_tape_config enable " + to_tape) # Test to confirm to_tape is now enabled. lines = self.do_simh_show(to_tape) to_status = self.parse_show_tape_dev(lines) if to_status == None: |
︙ | ︙ | |||
995 996 997 998 999 1000 1001 | rx_type = self.parse_show_rx_dev (lines) if rx_type == None: print("do_rx_change: Trouble parsing \'show rx\' output from simh. Giving up on:") self.do_print_lines(lines) return False elif rx_type == "disabled": if self.verbose: print("rx is disabled. Enabling...") | | > | 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 | rx_type = self.parse_show_rx_dev (lines) if rx_type == None: print("do_rx_change: Trouble parsing \'show rx\' output from simh. Giving up on:") self.do_print_lines(lines) return False elif rx_type == "disabled": if self.verbose: print("rx is disabled. Enabling...") reply = self.simh_cmd("set rx enabled") self.simh_test_result(reply, "Prompt", "set_rx_config enable rx") # Retry getting rx info lines = self.do_simh_show("rx") rx_type = self.parse_show_rx_dev (lines) if rx_type == None: print("do_rx_change after re-enable: Trouble parsing \`show rx\` output from simh. Giving up on:") self.do_print_lines(lines) return False |
︙ | ︙ | |||
1021 1022 1023 1024 1025 1026 1027 | self.do_print_lines(lines) else: for unit in attached_rx.keys(): if attached_rx[unit] != "": det_comm = "det rx" + unit if self.verbose: print(det_comm + "(Had: " + attached_rx[unit] + ")") | | > | > | 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 | self.do_print_lines(lines) else: for unit in attached_rx.keys(): if attached_rx[unit] != "": det_comm = "det rx" + unit if self.verbose: print(det_comm + "(Had: " + attached_rx[unit] + ")") reply = self.simh_cmd(det_comm) self.simh_test_result(reply, "Prompt", "set_rx_config detach: " + det_comm) reply = self.simh_cmd("set rx " + to_rx) self.simh_test_result(reply, "Prompt", "set_rx_config set rx " + to_rx) # Test to confirm new setting of RX lines = self.do_simh_show("rx") rx_type = self.parse_show_rx_dev (lines) if rx_type == None: print("Failed change of rx to " + to_rx + \ |
︙ | ︙ | |||
1076 1077 1078 1079 1080 1081 1082 | print("do_tti_change: Trouble parsing \'show tti\' output from simh. Giving up on:") self.do_print_lines(lines) return False elif tti_type == to_tti: print("tti device is already set to " + to_tti) return None | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 | print("do_tti_change: Trouble parsing \'show tti\' output from simh. Giving up on:") self.do_print_lines(lines) return False elif tti_type == to_tti: print("tti device is already set to " + to_tti) return None reply = self.simh_cmd("set tti " + to_tti) self.simh_test_result(reply, "Prompt", "set_tti_config setting tti " + to_tti) # Test to confirm new setting of tti lines = self.do_simh_show("tti") tti_type = self.parse_show_tti (lines) if tti_type == None: print("Failed change of tti to " + to_tti + \ ". Parse fail on \'show tti\'.") return False elif tti_type != to_tti: print("Failed change of tti to " + to_tti + ". Instead got: " + \ tti_type) return False else: return True ############### Basic OS/8 Interaction ############################### # Intereact with OS/8 under SIMH. #### os8_kbd_delay ################################################### # Artificially delay the media generation process to account for the # fact that OS/8 lacks a modern multi-character keyboard input buffer. # It is unsafe to send text faster than a contemporary terminal could, # though we can scale it based on how much faster this host is than a # real PDP-8. See the constants above for the calculation. def os8_kbd_delay (self): time.sleep (self._os8_kbd_delay) #### os8_send_str ######################################################## # Core of os8_send_line. Also used by code that needs to send text # "blind" to OS/8, without expecting a prompt and without a CR, as # when driving TECO. def os8_send_str (self, str): for i in range (0, len (str)): self.os8_kbd_delay () self._child.send (str[i]) #### os8_send_ctrl ################################################### # Send a control character to OS/8 corresponding to the ASCII letter # given. We precede it with the OS/8 keyboard delay, since we're # probably following a call to os8_send_line or os8_cmd. def os8_send_ctrl (self, char): cc = char[0].lower () self.os8_kbd_delay () self._child.sendcontrol (cc) if cc == 'e': self._context = 'simh' #### os8_send_line ################################################### # Core of os8_cmd. Also used by code that needs to send text # "blind" to OS/8, without expecting a prompt, as when driving EDIT. def os8_send_line (self, line): self.os8_send_str (line) self._child.send ("\r") #### os8_test_result ################################################## # Convenience wrapper for test_result that uses OS/8 replies. def os8_test_result (self, reply, expected, caller, debug=False): return self.test_result (reply, expected, self._os8_replies, caller, debug) #### mk_os8_name # ################################################### # Create an OS/8 filename: of the form XXXXXX.YY # From a POSIX path. def mk_os8_name(self, dev, path): bns = os.path.basename (path) bns = re.sub("-|:|\(|\)|!", "", bns) bns = bns.upper() if "." not in bns: return dev + bns[:min(6, len(bns))] else: dot = bns.index('.') return dev + bns[:min(6, dot, len(bns))] + "." + bns[dot+1: dot+3] #### os8_cmd_ ################################################### # Send the given command to OS/8. # replies is an array of possible replies that command will get. # Returns the index into the replies array that pexpect got, # or -1 if the command could not be run. # replies is an optional argument which defaults to _os8_replies_rex def os8_cmd (self, cmd, replies=None, debug=False, timeout=60): if replies == None: replies = self._os8_replies_rex if self._context != 'os8': print("OS/8 is not running. Cannot execute: " + cmd) return -1 if debug: print("os8_cmd: sending: " + cmd) print("\tPrevious match before: {" + self._child.before.decode() + "}") print("\tPrevious match after: {" + self._child.after.decode() + "}") self.os8_send_line (cmd) reply = self._child.expect (replies, timeout = timeout) if debug: print("\tmatch before: {" + self._child.before.decode() + "}") print("\tmatch after: {" + self._child.after.decode() + "}") return reply #### os8_cfm_monitor ################################################## # Confirm return to OS/8 monitor. # This function is necessary so that we know our command has returned to OS/8. # Without this test, the next _child.expect hits a monitor prompt instead of # what it will be looking for. # If caller is not empty, it will emit an error string if the prompt wasn't seen. # Returns True if we are where we expect. def os8_cfm_monitor (self, caller, debug=False): reply = self._child.expect(self._os8_replies_rex) return self.os8_test_result(reply, "Monitor Prompt", caller, debug=debug) #### os8_ctrl_c ################################################## # Return to OS/8 monitor using the ^C given escape character. # We need to listen for the ^C echo or else cfm_monitor gets confused. # Confirm we got our monitor prompt. # Optional caller argument enables a message if escape failed. # Note: OS/8 will respond to this escape IMMEDIATELY, # even if it has pending output. # You will need to make sure all pending output is in # a known state and the running program is quiescent # before calling this method. Otherwise pexpect may get lost. def os8_ctrl_c (self, caller = "", debug=False): self.os8_send_ctrl ("c") self._child.expect("\\^C") return self.os8_cfm_monitor (caller) #### os8_escape ################################################## # Return to OS/8 monitor using the escape (^]) character. # We need to listen for the $ echo or else cfm_monitor gets confused. # Confirm we got our monitor prompt. # Optional caller argument enables a message if escape failed. # Note: OS/8 will respond to this escape IMMEDIATELY, # even if it has pending output. # You will need to make sure all pending output is in # a known state and the running program is quiescent # before calling this method. Otherwise pexpect may get lost. def os8_escape (self, caller = "", debug=False): self.os8_send_ctrl ('[') self._child.expect("\\$") return self.os8_cfm_monitor (caller) #### simh_restart_os8 ####################################################### # Abstraction on returning to OS/8 monitor from within SIMH. # It is common practice to "load address 7600; start" at the console. def simh_restart_os8 (self, caller = "", debug=False): # Note we're calling simh with os8 replies because we will # be switching contexts. # simh_cmd manages the context, and checks for success # by expecting a command prompt. reply = self.simh_cmd ('go 7600', self._os8_replies_rex, debug=debug) # We test our reply with os8_test result because we're in OS/8 now. self.os8_test_result(reply, "Monitor Prompt", caller) #### simh_resume_os8 ########################################################## # Continue execution of OS/8. # This has been extremely tricky to get right. # What we must do is give OS/8 a chance to wake up. # We do this by asking pexpect to show us our "cont\n" echo and then # we do an os8_kbd_delay() # We carefully use simh_send_line to send the command so that we # know to set the os8 context. # WARNING! Using simh_resume_os8 without having booted OS/8 # has undefined reslts. def simh_resume_os8 (self): self.simh_send_line ("cont") # Give OS/8 a chance to wake up. self._child.expect("cont\r") self.os8_kbd_delay() #### os8_zero_core ################################################### # Starting from OS/8 context, bounce out to SIMH context and zero all # of core excepting: # # 0. zero page - many apps put temporary data here # 1. the top pages of fields 1 & 2 - OS/8 is resident here # 2. the top page of field 2 - OS/8's TD8E driver (if any) lives here # # We then restart OS/8, which means we absolutely need to do #1 and # may need to do #2. We could probably get away with zeroing page 0. # # All of the above explains why we have this special OS/8 alternative # to the zero_core() method. def os8_zero_core (self): reply = self.simh_cmd ('de 00200-07577 0') self.simh_test_result(reply, "Prompt", "os8_zero_core 00200-07577") reply = self.simh_cmd ('de 10000-17577 0') self.simh_test_result(reply, "Prompt", "os8_zero_core de 10000-17577 0") reply = self.simh_cmd ('de 20000-27577 0') self.simh_test_result(reply, "Prompt", "os8_zero_core de 20000-27577 0") reply = self.simh_cmd ('de 30000-77777 0') self.simh_test_result(reply, "Prompt", "os8_zero_core de 30000-37577 0") self.simh_restart_os8 () #### os8_squish ######################################################## # Wraps the OS/8 SQUISH command for a given device. def os8_squish (self, device, caller = ""): reply = self.os8_cmd ("SQUISH " + device + ":") self.os8_test_result (reply, "ARE YOU SURE?", caller) reply = self.os8_cmd ("Y") self.os8_test_result (reply, "Monitor Prompt", caller) #### os8_pip_to ################################################### # Send a copy of a local file to OS/8 using PIP. # # The file is sent via the SIMH paper tape device through PIP # specifying a transfer option. If no option is specified, # ASCII is assumed. # # In ASCII mode, we pre-process with txt2ptp which translates # POSIX ASCII conventions to OS/8 conventions. In all other # modes, we do not do any translation. # # However, we should supply a sacrificial NULL as an additional character # because the OS/8 PTR driver throws the last character away. (NOT DONE YET) # # Entry context should be inside OS/8. Exit context is inside OS/8. # def os8_pip_to (self, path, os8name, option = None, debug=False): if option == None: option = "" # If os8name is just a device, synthesize an upcased name from # the POSIX file basename. if not os.path.exists(path): print(path + " not found. Skipping.") return m = re.match(self._os8_file_re, os8name) if m != None and (m.group(2) == None or m.group(2) == ""): dest = self.mk_os8_name(os8name, path) else: dest = os8name # Gross hack: # The command decoder prompt that comes when we continue a PTR/PTP # does not have a newline. But everything else that matches on # a command decoder prompt NEEDS that newline. Otherwise we match # on asterisks in file specs. # Remember to decrement replies on this rex list if we use # _os8_replies pip_rex = [re.compile("\\*$".encode())] pip_rex.extend(self._os8_replies_rex) did_conversion = False if option == "" or option == "/A": # Convert text file to SIMH paper tape format in current dir of path. if self.verbose: print("Format converting " + path) bdir = pidp8i.dirs.build # Create uniquified temp path name. pt = path + "-" + str(os.getpid()) + ".pt_temp" tool = os.path.join (bdir, 'bin', 'txt2ptp') subprocess.call (tool + ' < ' + path + ' > ' + pt, shell = True) did_conversion = True elif option not in self._valid_pip_options: print("Invalid PIP option: " + option + ". Ignoring: " + path + \ " to OS/8.") return else: pt = path # TODO: Sacrificial extra character code goes here. # Paper tape created, so attach it read-only and copy it in. We're # relying on txt2ptp to insert the Ctrl-Z EOF marker at the end of # the file. self.esc_to_simh (debug) reply = self.simh_cmd ('attach -r ptr ' + pt, debug=debug) self.simh_test_result(reply, "Prompt", "os8_pip_to attaching ptr") # Enter OS/8. self.simh_restart_os8 (caller="os8_pip_to") reply = self.os8_cmd ('R PIP', debug=debug) # Has PIP Startup been successful? if self.os8_test_result (reply, "Command Decoder Prompt", "os8_pip_to 0", \ debug=debug) == False: return # Give file and test for ready to send, reply = self.os8_cmd (dest + '<PTR:' + option, debug=debug) if self.os8_test_result (reply, "PIP Continue", "os8_pip_to 1", debug=debug) == False: # If we got "PIP Continue" we keep going. Otherwise return. # Send escape if reply indicates we didn't go back to the monitor. if self._os8_replies[reply][2] == False: self.os8_send_ctrl ('[') return # Finish transfer # The test for success is implicit. self.os8_send_ctrl ('[') reply = self._child.expect (pip_rex) if reply != 0: self.os8_test_result (reply - 1, "Command Decoder Prompt", "os8_pip_to 2", debug=debug) # If we did not return to monitor hit escape to exit PIP. if self._os8_replies[reply - 1][2] == False: self.os8_send_ctrl ('[') # Success or Non-fatal error. # Must exit PIP and wait for monitor prompt. Complain if we don't get it! reply = self._child.expect (self._os8_replies_rex) self.os8_test_result (reply, "Monitor Prompt", "os8_pip_to 3") # detach ptr # self.esc_to_simh () # self.simh_cmd ('detach ptr ') # self.os8_restart () # Remove the temp file if we created one. if did_conversion: os.remove (pt) #### os8_pip_from ################################################### # Fetch a file from OS/8 to a local path using PIP. # # The OS/8 source filename is synthesized from the basename of the path, # upcasing if necessary. # # The file is sent via the SIMH paper tape device through PIP # specifying a transfer option. If no option is specified, # ASCII is assumed. # # In ASCII mode, we post-process with ptp2txt which translates # POSIX ASCII conventions to OS/8 conventions. In all other # modes, we do not do any translation. # # Entry context should be inside OS/8. Exit context is inside OS/8. def os8_pip_from (self, os8name, path, option = None, debug=False): if option == None: option = "" # If path is not a file, use the name portion of os8name. if os.path.isdir(path): colon = os8name.find(':') if colon == -1: # No dev, just a name. path = path + "/" + os8name else: path = path + "/" + os8name[colon+1:] if option != "" and option not in self._valid_pip_options: print("Invalid PIP option: " + option + \ ". Ignoring os8_pip_from on: " + path) return self.esc_to_simh(debug) reply = self.simh_cmd ('attach ptp ' + path, debug=debug) self.simh_test_result(reply, "Prompt", "os8_pip_from attachng ptp") # Enter OS/8. self.simh_restart_os8 (caller="os8_pip_from 0") reply = self.os8_cmd ('R PIP', debug=debug) # Has PIP Startup been successful? if self.os8_test_result (reply, "Command Decoder Prompt", "os8_pip_from 0") == False: return # Issue file transfer spec. reply = self.os8_cmd ('PTP:<' + os8name + option, debug=debug) # Test for Success if self.os8_test_result (reply, "Command Decoder Prompt", "os8_pip_from 1") == False: # There is an empty PTP file we need to remove. os.remove(path) # Was this a fatal error? if self._os8_replies[reply][2] == False: self.os8_send_ctrl ('[') # Non-fatal error. Must exit PIP return self.os8_send_ctrl ('[') # exit PIP # Must wait for monitor prompt. Complain if we don't get it! reply = self._child.expect (self._os8_replies_rex) self.os8_test_result (reply, "Monitor Prompt", "os8_pip_from 2") self.esc_to_simh(debug) reply = self.simh_cmd ('detach ptp', debug=debug) # Clean flush of buffers. self.simh_test_result(reply, "Prompt", "os8_pip_from detaching ptp") # Enter OS/8. self.simh_restart_os8(caller="os8_pip_from 3") if option == "" or option == "/A": if self.verbose: print("Format converting " + path) # Convert text file to SIMH paper tape format bdir = pidp8i.dirs.build # Create uniquified temp path name. pf = path + "-" + str(os.getpid()) + ".pf_temp" os.rename(path, pf) tool = os.path.join (bdir, 'bin', 'ptp2txt') subprocess.call (tool + ' < ' + pf + ' > ' + path, shell = True) os.remove(pf) |
Added media/os8/PALTST.PA.
> > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 | /PALTST.PA / / Trivial PAL8 program to provoke some errors when compiled. / *200 START, CLA CLL TAD UNDEF DCA UNDEF2 $ |
Added media/os8/patches/uni/patch-list.txt.
> | 1 | # OS/8 Combined Kit patches to apply |
Changes to media/os8/scripts/all-tu56.os8.
︙ | ︙ | |||
45 46 47 48 49 50 51 52 53 54 55 56 | # This script can be run from a parallel make # So we create a scratch version of the system rk05 to prevent conflicts. # We have to do this anyway for TD8E since we change the DECtape configuration. mount rk0 $bin/v3d.rk05 required scratch boot rk0 begin enabled td8e # For TD8E we run BUILD twice # First from SYS to change switch from TC08 to TD8E # Then to build the TD8E head from either RKB1 for v3f or from SYS for v3d. | > > > > > > < < | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | # This script can be run from a parallel make # So we create a scratch version of the system rk05 to prevent conflicts. # We have to do this anyway for TD8E since we change the DECtape configuration. mount rk0 $bin/v3d.rk05 required scratch boot rk0 # Our built image inherits whether or not INIT is set. # A blank tape will complain "NO CCL!" on first boot. # So first thing SET SYS NO INIT os8 SET SYS NO INIT begin enabled td8e # For TD8E we run BUILD twice # First from SYS to change switch from TC08 to TD8E # Then to build the TD8E head from either RKB1 for v3f or from SYS for v3d. begin build SYS:BUILD DELETE DTA0,DTA1 INSERT TD8A,DTA0,DTA1 BOOT end build configure tape td |
︙ | ︙ | |||
85 86 87 88 89 90 91 92 93 94 95 96 97 98 | begin enabled v3d mount dt0 $os8mo/v3d-tc08.tu56 new end enabled v3d begin enabled v3f mount dt0 $os8mo/v3f-tc08.tu56 new end enabled v3f end enabled tc08 # Now build the system head. # v3f is more complicated because it installs a new KBM and CD. # Additionally that version of BUILD.SV contained NO drivers. | > > | 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | begin enabled v3d mount dt0 $os8mo/v3d-tc08.tu56 new end enabled v3d begin enabled v3f mount dt0 $os8mo/v3f-tc08.tu56 new # v3f needs device drivers from a V3d Distribution DECtape mount dt1 $os8mi/al-4712c-ba-os8-v3d-2.1978.tu56 readonly required end enabled v3f end enabled tc08 # Now build the system head. # v3f is more complicated because it installs a new KBM and CD. # Additionally that version of BUILD.SV contained NO drivers. |
︙ | ︙ | |||
149 150 151 152 153 154 155 | PRINT BOOT end build end enabled v3d begin enabled v3f | < < < | 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | PRINT BOOT end build end enabled v3d begin enabled v3f os8 COPY DSK:<RKB1:OS8.BN,CD.BN begin build RKB1:BUILD LOAD DTA1:RK8ESY.BN LOAD DTA1:RK8ENS.BN LOAD DTA1:PT8E.BN |
︙ | ︙ | |||
233 234 235 236 237 238 239 | INSERT RK05,RKA2,RKB2 BUILD DSK:OS8.BN DSK:CD.BN BOOT end build # Explicit unmount to avoid possible race condition. | > > > > > | > | 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 | INSERT RK05,RKA2,RKB2 BUILD DSK:OS8.BN DSK:CD.BN BOOT end build # Explicit unmount to avoid possible race condition. # Unmount the right device begin enabled td8e umount td1 end enabled td8e begin enabled tc08 umount dt1 end enabled tc08 end enabled v3f os8 SAVE DTA0 BUILD.SV # cusp-copyin.os8 uses the value of v3d or v3f enablement # already present in the environment. include $media/os8/scripts/cusp-copyin.os8 |
︙ | ︙ |
Added media/os8/scripts/build-test.os8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | mount rk0 $bin/v3d.rk05 required scratch mount dt1 $os8mi/al-4712c-ba-os8-v3d-2.1978.tu56 ro required boot rk0 print Confirm testing for failure to start build: begin build SYS:FOO.SV end build print Now test for malformed begin end: empty name: begin build SYS:BUILD.SV end print Now test for malformed begin end: wrong name: begin build SYS:BUILD.SV end foo print Now do a simple couple BUILD commands: begin build SYS:BUILD.SV LOAD DTA1:RK8ESY.BN PRINT BOOT end build print try saving boot os8 SAVE DSK BUILD.SV print now confirm malformed FOTP command is reported begin cdprog FOTP DTA0:<NOTME.PA end cdprog FOTP print now confirm FOTP File not found errors are reported. begin cdprog SYS FOTP TTY:<NOTME.PA end cdprog SYS FOTP |
Added media/os8/scripts/pal8-test.os8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | mount rk0 $bin/v3d.rk05 required scratch mount dt0 $os8mo/pal-test.tu56 new mount rk1 $bin/v3d-src.rk05 required boot rk0 print Create test tape os8 ZERO DTA0: cpto $os8mi/PALTST.PA DTA0: os8 COPY DTA0:<RKB1:BOOT.PA print Enable output from OS/8 commands enable transcript print Confirm right things happen when source not found. pal8 FOO.BN<FOO.PA print Same command using 'os8' os8 PAL8 FOO.BN<FOO.PA print Confirm a good build is successful: pal8 DTA0:BOOT.BN<DTA0:BOOT.PA print Same command using 'os8' os8 PAL8 DTA0:BOOT.BN<DTA0:BOOT.PA print Confirm we display errors: pal8 FOO.BN<DTA0:PALTST.PA print Same command using 'os8' os8 pal8 FOO.BN<DTA0:PALTST.PA print Test 3-arg Pal8 command. pal8 FOO.BN,FOO.LS<DTA0:BOOT.PA print Same command using 'os8' os8 PAL8 FOO.BN,FOO.LS<DTA0:BOOT.PA print Test 3-arg PAL8 command with errors. pal8 FOO.BN,FOO.LS<DTA0:PALTST print Try the same 3-arg PAL8 command via os8 with transcript os8 PAL8 FOO.BN,FOO.LS<DTA0:PALTST |
Added media/os8/scripts/resume-test.os8.
> > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | mount rk0 $bin/v3d.rk05 required scratch boot rk0 mount dt0 $os8mo/v3d-tc08.tu56 required resume enable transcript os8 DIR DTA0: disable transcript os8 DIR RKB0: |
Added media/os8/scripts/test-build.os8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # Tests 1 build for CUSPS mount rk0 $os8mo/v3d.rk05 required scratch mount rk1 $os8mo/uni-bf2-obj.rk05 required print Build tester boot rk0 print Building LIBSET.SV pal8 RKB1:LIBSET.BN<RKA1:LIBSET.PA begin cdprog SYS:ABSLDR.SV RKB1:LIBSET.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:LIBSET.SV;12600=6000 os8 DEL RKB1:LIBSET.BN print Assemble Library Modules print ATAN begin cdprog RKB1:SABR.SV RKB1:ATAN.RL<RKA1:ATAN.SB end cdprog RKB1:SABR.SV print What happens if we give too many args? print SQRT / TRIG Bad. begin cdprog RKB1:SABR.SV RKB1:SQRT.RL<RKA1:SQRT.SB RKB1:TRIG.RL<RKA1:TRIG.SB end cdprog RKB1:SABR.SV enable transcript os8 DIR RKA1: disable transcript # print Use our newly build LIBSET to create LIB8.RL from our library RL files. # begin cdprog RKB1:LIBSET.SV # RKB1:LIB8.RL<*.RL # end cdprog RKB1:LIBSET.SV |
Added media/os8/scripts/uni-bf2-build.os8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | # Build OS/8 BASIC and FORTRAN II from source mount rk0 $os8mo/v3d.rk05 required scratch copy $obj/uni-bf2-src.rk05 $os8mo/uni-bf2-obj.rk05 mount rk1 $os8mo/uni-bf2-obj.rk05 required boot rk0 print Building BASIC.SV pal8 RKB1:BASIC.BN<RKA1:BASIC.PA begin cdprog SYS:ABSLDR.SV RKB1:BASIC.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:BASIC.SV;3211 os8 DEL RKB1:BASIC.BN print Building BCOMP.SV pal8 RKB1:BCOMP.BN<RKA1:BCOMP.PA begin cdprog SYS:ABSLDR.SV RKB1:BCOMP.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:BCOMP.SV;7000 os8 DEL RKB1:BCOMP.BN print Building BLOAD.SV pal8 RKB1:BLOAD.BN<RKA1:BLOAD.PA begin cdprog SYS:ABSLDR.SV RKB1:BLOAD.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:BLOAD.SV;7605 os8 DEL RKB1:BLOAD.BN print Building BRTS.SV, BASIC.AF, BASIC.SF, BASIC.FF from BRTS.PA pal8 RKB1:BRTS.BN<RKA1:BRTS.PA/W begin cdprog SYS:ABSLDR.SV RKB1:BRTS.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:BRTS.SV 0-6777;7605 os8 SAVE RKB1:BASIC.AF 3400-4577;7605 os8 SAVE RKB1:BASIC.SF 12000-13177;7605 os8 SAVE RKB1:BASIC.FF 13400-14577;7605 os8 DEL RKB1:BRTS.BN print Building SABR.SV from SABR.PA and SPATCH.PA pal8 RKB1:SABR.BN<RKA1:SABR.PA pal8 RKB1:SPATCH.BN<RKA1:SPATCH.PA begin cdprog SYS:ABSLDR.SV RKB1:SABR.BN RKB1:SPATCH.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:SABR.SV os8 DEL RKB1:SABR.BN,RKB1:SPATCH.BN print Building LOADER.SV pal8 RKB1:LOADER.BN<RKA1:LOADER.PA begin cdprog SYS:ABSLDR.SV RKB1:LOADER.BN/9 end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:LOADER.SV os8 DEL RKB1:LOADER.BN print Building FORT.SV from FORT.PA and FPATCH.PA pal8 RKB1:FORT.BN<RKA1:FORT.PA pal8 RKB1:FPATCH.BN<RKA1:FPATCH.PA begin cdprog SYS:ABSLDR.SV RKB1:FORT.BN RKB1:FPATCH.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:FORT.SV os8 DEL RKB1:FORT.BN,FPATCH.BN print Building LIBSET.SV pal8 RKB1:LIBSET.BN<RKA1:LIBSET.PA begin cdprog SYS:ABSLDR.SV RKB1:LIBSET.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:LIBSET.SV;12600=6000 os8 DEL RKB1:LIBSET.BN print Assemble Library Modules print ATAN begin cdprog RKB1:SABR.SV RKB1:ATAN.RL<RKA1:ATAN.SB end cdprog RKB1:SABR.SV print FLOAT begin cdprog RKB1:SABR.SV RKB1:FLOAT.RL<RKA1:FLOAT.SB end cdprog RKB1:SABR.SV print GENIOX begin cdprog RKB1:SABR.SV RKB1:GENIOX.RL<RKA1:GENIOX.SB end cdprog RKB1:SABR.SV print INTEGR begin cdprog RKB1:SABR.SV RKB1:INTEGR.RL<RKA1:INTEGR.SB end cdprog RKB1:SABR.SV print IOH begin cdprog RKB1:SABR.SV RKB1:IOH.RL<RKA1:IOH.SB end cdprog RKB1:SABR.SV print IOPEN begin cdprog RKB1:SABR.SV RKB1:IOPEN.RL<RKA1:IOPEN.SB end cdprog RKB1:SABR.SV print IPOWRS begin cdprog RKB1:SABR.SV RKB1:IPOWRS.RL<RKA1:IPOWRS.SB end cdprog RKB1:SABR.SV print POWERS begin cdprog RKB1:SABR.SV RKB1:POWERS.RL<RKA1:POWERS.SB end cdprog RKB1:SABR.SV print RWTAPE begin cdprog RKB1:SABR.SV RKB1:RWTAPE.RL<RKA1:RWTAPE.SB end cdprog RKB1:SABR.SV print SQRT begin cdprog RKB1:SABR.SV RKB1:SQRT.RL<RKA1:SQRT.SB end cdprog RKB1:SABR.SV print TRIG begin cdprog RKB1:SABR.SV RKB1:TRIG.RL<RKA1:TRIG.SB end cdprog RKB1:SABR.SV print UTILTY begin cdprog RKB1:SABR.SV RKB1:UTILTY.RL<RKA1:UTILTY.SB end cdprog RKB1:SABR.SV print Use our newly built LIBSET to create LIB8.RL from our library RL files. begin cdprog RKB1:LIBSET.SV RKB1:LIB8.RL<RKB1:ATAN.RL,RKB1:FLOAT.RL,RKB1:GENIOX.RL,RKB1:INTEGR.RL RKB1:IOH.RL,RKB1:IOPEN.RL,RKB1:IPOWRS.RL,RKB1:POWERS.RL,RKB1:RWTAPE.RL RKB1:SQRT.RL,RKB1:TRIG.RL,RKB1:UTILTY.RL end cdprog RKB1:LIBSET.SV |
Added media/os8/scripts/uni-cusps-build.os8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | # Comments begin with an octothorpe # Blank lines are ignored. # OS/8 Writes on the system device (architectural flaw). # Since this might be run from a parallel make, we mount the system # with the scratch option to make a unique copy. mount rk0 $os8mo/v3d.rk05 required scratch copy $obj/uni-cusps-src.rk05 $os8mo/uni-cusps-obj.rk05 mount rk1 $os8mo/uni-cusps-obj.rk05 required boot rk0 print Building DIRECT.SV pal8 RKB1:DIRECT.BN<RKA1:DIRECT.PA begin cdprog SYS:ABSLDR.SV RKB1:DIRECT.BN(89P)=14600 end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:DIRECT.SV;14600=6403 os8 DEL RKB1:DIRECT.BN print Building FOTP.SV pal8 RKB1:FOTP.BN<RKA1:FOTP.PA begin cdprog SYS:ABSLDR.SV RKB1:FOTP.BN(89P)=14600 end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:FOTP.SV;14600=6403 os8 DEL RKB1:FOTP.BN print Building PIP.SV pal8 RKB1:PIP.BN<RKA1:PIP.PA begin cdprog SYS:ABSLDR.SV RKB1:PIP.BN(89P)=13000 end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:PIP.SV;13000=6403 os8 DEL RKB1:PIP.BN print Building HELP.SV pal8 RKB1:HELP.BN<RKA1:HELP.PA begin cdprog SYS:ABSLDR.SV RKB1:HELP.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:HELP.SV=3401 os8 DEL RKB1:HELP.BN print Building BOOT.SV pal8 RKB1:BOOT.BN<RKA1:BOOT.PA begin cdprog SYS:ABSLDR.SV RKB1:BOOT.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:BOOT.SV os8 DEL RKB1:BOOT.BN print Building EPIC.SV pal8 RKB1:EPIC.BN<RKA1:EPIC.PA begin cdprog SYS:ABSLDR.SV RKB1:EPIC.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:EPIC.SV os8 DEL RKB1:EPIC.BN print Building FUTIL.SV pal8 RKB1:FUTIL.BN<RKA1:FUTIL.PA begin cdprog SYS:ABSLDR.SV RKB1:FUTIL.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:FUTIL.SV;6400=0400 os8 DEL RKB1:FUTIL.BN print Building SET.SV pal8 RKB1:SET.BN<RKA1:SET.PA begin cdprog SYS:ABSLDR.SV RKB1:SET.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:SET.SV os8 DEL RKB1:SET.BN print Building EDIT.SV pal8 RKB1:EDIT.BN<RKA1:EDIT.PA begin cdprog SYS:ABSLDR.SV RKB1:EDIT.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:EDIT.SV os8 DEL RKB1:EDIT.BN print Building PAL8.SV pal8 RKB1:PAL8.BN<RKA1:PAL8.PA begin cdprog SYS:ABSLDR.SV RKB1:PAL8.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:PAL8.SV os8 DEL RKB1:PAL8.BN print Building CREF.SV pal8 RKB1:CREF.BN<RKA1:CREF.PA begin cdprog SYS:ABSLDR.SV RKB1:CREF.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:CREF.SV os8 DEL RKB1:CREF.BN print Building BITMAP.SV pal8 RKB1:BITMAP.BN<RKA1:BITMAP.PA begin cdprog SYS:ABSLDR.SV RKB1:BITMAP.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:BITMAP.SV;12000=6001 os8 DEL RKB1:BITMAP.BN print Building SRCCOM.SV pal8 RKB1:SRCCOM.BN<RKA1:SRCCOM.PA begin cdprog SYS:ABSLDR.SV RKB1:SRCCOM.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:SRCCOM.SV os8 DEL RKB1:SRCCOM.BN print Building TECO.SV pal8 RKB1:TECO.BN<RKA1:TECO.PA/W begin cdprog SYS:ABSLDR.SV RKB1:TECO.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:TECO.SV=2000 os8 DEL RKB1:TECO.BN print Building RXCOPY.SV pal8 RKB1:RXCOPY.BN<RKA1:RXCOPY.PA begin cdprog SYS:ABSLDR.SV RKB1:RXCOPY.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:RXCOPY.SV;16000=7403 os8 DEL RKB1:RXCOPY.BN print Building RKLFMT.SV pal8 RKB1:RKLFMT.BN<RKA1:RKLFMT.PA begin cdprog SYS:ABSLDR.SV RKB1:RKLFMT.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:RKLFMT.SV=0000 os8 DEL RKB1:RKLFMT.BN print Building MCPIP.SV pal8 RKB1:MCPIP.BN<RKA1:MCPIP.PA begin cdprog SYS:ABSLDR.SV RKB1:MCPIP.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:MCPIP.SV;12000=6403 os8 DEL RKB1:MCPIP.BN print Building MSBAT.SV pal8 RKB1:MSBAT.BN<RKA1:MSBAT.PA begin cdprog SYS:ABSLDR.SV RKB1:MSBAT.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:MSBAT.SV=0000 os8 DEL RKB1:MSBAT.BN print Building PIP10.SV pal8 RKB1:PIP10.BN<RKA1:PIP10.PA begin cdprog SYS:ABSLDR.SV RKB1:PIP10.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:PIP10.SV=2000 os8 DEL RKB1:PIP10.BN print Building CAMP.SV pal8 RKB1:CAMP.BN<RKA1:CAMP.PA begin cdprog SYS:ABSLDR.SV RKB1:CAMP.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:CAMP.SV=2000 os8 DEL RKB1:CAMP.BN print Building DTCOPY.SV pal8 RKB1:DTCOPY.BN<RKA1:DTCOPY.PA begin cdprog SYS:ABSLDR.SV RKB1:DTCOPY.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:DTCOPY.SV=2000 os8 DEL RKB1:DTCOPY.BN print Building DTFRMT.SV pal8 RKB1:DTFRMT.BN<RKA1:DTFRMT.PA begin cdprog SYS:ABSLDR.SV RKB1:DTFRMT.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:DTFRMT.SV;1000=2000 os8 DEL RKB1:DTFRMT.BN print Building TDCOPY.SV pal8 RKB1:TDCOPY.BN<RKA1:TDCOPY.PA begin cdprog SYS:ABSLDR.SV RKB1:TDCOPY.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:TDCOPY.SV=2000 os8 DEL RKB1:TDCOPY.BN print Building TDFRMT.SV pal8 RKB1:TDFRMT.BN<RKA1:TDFRMT.PA begin cdprog SYS:ABSLDR.SV RKB1:TDFRMT.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:TDFRMT.SV;1000=2000 os8 DEL RKB1:TDFRMT.BN |
Added media/os8/scripts/uni-dist-rk05.os8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 | # Creates an OS/8 Combined Kit binary rk05 image from compiled # Object rk05 images. # Based on v3d-dist-rk05.os8, and the v3f stuff in all-tu56.os8 # I'm not sure if we can build an RK05 system from scratch # when booted from RK05, so we'll bootstrap using the OS/8 # distribution DECtape mount dt0 $os8mi/al-4711c-ba-os8-v3d-1.1978.tu56 required scratch # rk0 holds the media we build mount rk0 $os8mo/uni-dist.rk05 new # rk1 holds the system object image. mount rk1 $os8mo/uni-sys-obj.rk05 # rk2 holds the CUSPS object image mount rk2 $os8mo/uni-cusps-obj.rk05 boot dt0 # Our built image inherits whether or not INIT is set. # A blank tape will complain "NO CCL!" on first boot. # So first thing SET SYS NO INIT os8 SET SYS NO INIT print BUILD the system head # BUILD requires our OS8.BN and CD.BN to be on DSK: os8 COPY DSK:<RKB1:OS8.BN,CD.BN begin build RKB1:BUILD # But our build has no handlers LOAD RKB1:RK8ESY.BN LOAD RKB1:RK8ENS.BN LOAD RKB1:RXNS.BN LOAD RKB1:KL8E.BN LOAD RKB1:LPSV.BN LOAD RKB1:TC08SY.BN LOAD RKB1:TC08NS.BN LOAD RKB1:PT8E.BN LOAD RKB1:TD8ESY.BN LOAD RKB1:ROMMSY.BN LOAD RKB1:TD8EA.BN # We could load more TD8E non-system drivers # But there is limited space, so we elect not to. # LOAD RKB1:TD8EB.BN # LOAD RKB1:TD8EC.BN # LOAD RKB1:TD8ED.BN SYSTEM RK8E INSERT KL8E,TTY INSERT LPSV,LPT INSERT PT8E,PTR INSERT PT8E,PTP INSERT RK8E,RKA0,RKB0 INSERT RK05,RKA1,RKB1 INSERT RK05,RKA2,RKB2 INSERT TC,DTA0,DTA1 DSK RK8E:RKB0 PRINT BUILD DSK:OS8.BN DSK:CD.BN BOOT end build os8 SAVE SYS BUILD.SV # There is stuff we have to do to get a batch-literate BUILD here. print copying in CUSPS. begin cdprog RKB2:FOTP.SV RKA0:<RKB1:CCL.SV RKA0:<RKB1:RESORC.SV RKA0:<RKB1:BATCH.SV RKA0:<RKB2:FOTP.SV RKA0:<RKB2:DIRECT.SV RKA0:<RKB2:BOOT.SV RKA0:<RKB2:EDIT.SV RKA0:<RKB2:EPIC.SV RKA0:<RKB2:PIP.SV RKA0:<RKB2:SET.SV RKA0:<RKB2:FUTIL.SV RKA0:<RKB2:PAL8.SV RKA0:<RKB2:BITMAP.SV RKA0:<RKB2:CREF.SV RKA0:<RKB2:SRCCOM.SV RKA0:<RKB2:HELP.SV RKA0:<RKB2:RXCOPY.SV RKA0:<RKA1:HELP.HL RKA0:<RKB2:TECO.SV RKA0:<RKB2:CAMP.SV RKA0:<RKB2:DTCOPY.SV RKA0:<RKB2:DTFRMT.SV RKA0:<RKB2:MCPIP.SV RKA0:<RKB2:MSBAT.SV RKA0:<RKB2:PIP10.SV RKA0:<RKB2:RKLFMT.SV RKA0:<RKB2:TDCOPY.SV RKA0:<RKB2:TDFRMT.SV RKA0:<RKA1:??SYS.BI end cdprog RKB2:FOTP.SV os8 R CCL # Initialize RKB0: os8 ZERO DSK: os8 SET TTY COL 3 begin default crt os8 SET TTY SCOPE end default crt umount rk1 umount rk2 # rk1 holds the BASIC/FORTRAN II object image. mount rk1 $os8mo/uni-bf2-obj.rk05 # We install SABR and LOADER even if F2 disabled because # we use them for the C compiler. print copying in BASIC and SABR and LOADER begin cdprog SYS:FOTP.SV RKA0:<RKB1:BLOAD.SV RKA0:<RKB1:BRTS.SV RKA0:<RKB1:BCOMP.SV RKA0:<RKB1:BASIC.* RKA0:<RKB1:SABR.SV RKA0:<RKB1:LOADER.SV # Copy in the BASIC UF.PA source. Maybe make it later # Note it's starting address on the v3d dist is 7605. RKB0:<RKA1:UF.PA end cdprog SYS:FOTP.SV print Bringing in optional packages build from Combined Kit source begin default fortran-ii begin cdprog SYS:FOTP.SV RKA0:<RKB1:FORT.SV RKA0:<RKB1:LIBSET.SV RKA0:<RKB1:*.RL end cdprog SYS:FOTP.SV end default fortran-ii # We're done with BASIC and FORTRAN II object rk05. # Copying in Music score files and source code... begin enabled music print Music score files and source code mount dt1 $os8mi/subsys/music.tu56 ro required os8 COPY RKB0:<DTA1:*.* umount dt1 end enabled music # Adventure begin default advent mount dt1 $os8mi/subsys/advent.tu56 ro required os8 COPY RKB0:<DTA1:*.* umount dt1 end default advent # BASIC games and demos begin default ba mount dt1 $os8mi/subsys/ba.tu56 ro required os8 COPY RKB0:<DTA1:*.* umount dt1 end default ba # Kermit-12 begin default k12 mount dt1 $os8mi/subsys/k12.tu56 ro required os8 COPY RKA0:<DTA1:*.* umount dt1 end default k12 # FORTRAN IV begin default fortran-iv # rk1 holds the FORTRAN IV object image mount rk1 $os8mo/uni-fiv-obj.rk05 os8 COPY RKA0:<RKB1:*.* umount rk1 end default fortran-iv # MACREL V2 # In future we will build this from source begin default macrel mount dt1 $os8mi/al-5642c-ba-macrel-v2-futil-v8b-by-hand.tu56 ro required os8 COPY RKA0:<DTA1:MACREL.SV,LINK.SV,KREF.SV,OVRDRV.MA umount dt1 end default macrel # Files from local.tu56 mount dt1 $os8mi/local.tu56 ro required begin default chess os8 COPY RKA0:<DTA1:CHESS.* end default chess # TECO VTEDIT setup begin enabled vtedit os8 COPY RKA0:<DTA1:VTEDIT.* os8 COPY RKA0:<DTA1:TECO.IN end enabled vtedit # DCP Disassembler: DCP24.SV, and DCP16.SV as DCP.SV begin default dcp os8 COPY RKA0:<DTA1:DCP24.SV,DCP.SV,DCP16.SV end default dcp umount dt1 # FOCAL69 .BN files installed on DSK: begin enabled focal69 mount dt1 $os8mi/subsys/focal69.tu56 ro required os8 COPY RKB0:<DTA1:FOCAL.BN,4WORD.BN,4KVT.BN,8KVT.BN,8KNOVT.BN umount dt1 end enabled focal69 # U/W FOCAL begin default uwfocal mount dt1 $os8mi/subsys/uwfocal-v4e-2.tu56 ro required os8 COPY RKA0:<DTA1:UWF16K.SV umount dt1 end default uwfocal # Further system initialization begin default lcmod os8 SUBMIT SYS:LCSYS.BI # os8 SUBMIT SYS:LCBAS.BI end default lcmod # INIT message setting stuff goes here # Implement the config option to enable/disable INIT # By default we enable it. # We may be building from distribution media with INIT enabled. # So always SET SYS NO INIT # and undo it by default, to be overridden if --disable-os8-init is set. # Only copy init.cm and init.tx if init is enabled. os8 SET SYS NO INIT begin default init cpto $os8mi/init.cm # Location of init.tx is funky so that test-os8-run will be able to # sanitize it. cpto $build/media/os8/uni-init.tx DSK:INIT.TX os8 SET SYS INIT end default init # Squish of SYS and DSK goes here os8 SQUISH DSK:/O os8 SQUISH SYS:/O |
Added media/os8/scripts/uni-fiv-build.os8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | # Build OS/8 FORTRAN IV from source # BASED on FORGEN.BI mount rk0 $os8mo/v3d.rk05 required scratch copy $obj/uni-fiv-src.rk05 $os8mo/uni-fiv-obj.rk05 mount rk1 $os8mo/uni-fiv-obj.rk05 required boot rk0 print Assemble FORTRAN IV # Uses CCL "LOAD" command instead of running ABSLDR. pal8 RKB1:F4.BN<RKA1:F4.PA os8 LOAD RKB1:F4.BN os8 SAVE RKB1 F4.SV;12200=100 os8 DEL RKB1:F4.BN pal8 RKB1:PASS2.BN<RKA1:PASS2.PA os8 LOAD RKB1:PASS2.BN os8 SAVE RKB1 PASS2.SV;5000=100 os8 DEL RKB1:PASS2.BN pal8 RKB1:PASS2O.BN<RKA1:PASS2O,PASS2.PA os8 LOAD RKB1:PASS2O.BN os8 SAVE RKB1 PASS2O.SV;7605=100 os8 DEL RKB1:PASS2O.BN pal8 RKB1:PASS3.BN<RKA1:PASS3.PA os8 LOAD RKB1:PASS3.BN os8 SAVE RKB1 PASS3.SV;400=100 os8 DEL RKB1:PASS3.BN pal8 RKB1:LOAD.BN<RKA1:LOAD.PA os8 LOAD RKB1:LOAD.BN os8 SAVE RKB1 LOAD.SV;200=100 os8 DEL RKB1:LOAD.BN pal8 RKB1:FRTS.BN<RKA1:RTS.PA,RTL.PA/W/K os8 LOAD RKB1:FRTS.BN os8 SAVE RKB1 FRTS.SV;200=100 os8 DEL RKB1:FRTS.BN pal8 RKB1:RALF.BN<RKA1:RALF.PA/W os8 LOAD RKB1:RALF.BN os8 SAVE RKB1 RALF.SV;200=100 os8 DEL RKB1:RALF.BN pal8 RKB1:LIBRA.BN<RKA1:LIBRA.PA os8 LOAD RKB1:LIBRA.BN os8 SAVE RKB1 LIBRA.SV;200=100 os8 DEL RKB1:LIBRA.BN os8 COPY DSK:<RKA1:FORLIB.BI os8 ASSIGN RKA1 SRCE os8 ASSIGN RKB1 TARG os8 SUBMIT FORLIB.BI enable transcript os8 DIR RKB1: disable transcript |
Added media/os8/scripts/uni-rk05.os8.
> > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # Takes an OS8 V3D binary rk05 image and applies patches. # Bootstrapping issue: we use XXX-dist.rk05 to build the C compiler. # So we install it in this phase. copy $os8mo/uni-dist.rk05 $os8mo/uni.rk05 mount rk0 $os8mo/uni.rk05 required boot rk0 # Perform patching here. # Ian Schofield's CC8 compiler # Don't install this in v3d-dist because we need # v3d packs to build it. begin default cc8 umount dt1 mount dt1 $os8mo/cc8.tu56 ro required os8 COPY RKA0:<DTA1:*.SV os8 COPY RKB0:<DTA1:*.SV/V end default cc8 |
Added media/os8/scripts/uni-sys-build.os8.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | # Comments begin with an octothorpe # Blank lines are ignored. # OS/8 Writes on the system device (architectural flaw). # Since this might be run from a parallel make, we mount the system # with the scratch option to make a unique copy. mount rk0 $os8mo/v3d.rk05 required scratch copy $obj/uni-sys-src.rk05 $os8mo/uni-sys-obj.rk05 mount rk1 $os8mo/uni-sys-obj.rk05 required boot rk0 print Building BUILD.SV pal8 RKB1:BUILD.BN<RKA1:BUILD.PA begin cdprog SYS:ABSLDR.SV RKB1:BUILD.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:BUILD.SV print Assembling OS8.BN and CD.BN pal8 RKB1:OS8.BN<RKA1:OS8.PA pal8 RKB1:CD.BN<RKA1:CD.PA print Assembling handlers print Character oriented handlers pal8 RKB1:ASR33.BN<RKA1:ASR33.PA pal8 RKB1:BAT.BN<RKA1:BAT.PA pal8 RKB1:CR8E.BN<RKA1:CR8E.PA pal8 RKB1:VR12.BN<RKA1:VR12.PA pal8 RKB1:VT50.BN<RKA1:VT50.PA pal8 RKB1:KL8E.BN<RKA1:KL8E.PA pal8 RKB1:L645.BN<RKA1:L645.PA pal8 RKB1:LPSV.BN<RKA1:LPSV.PA pal8 RKB1:LQP.BN<RKA1:LQP.PA pal8 RKB1:LSPT.BN<RKA1:LSPT.PA pal8 RKB1:PT8E.BN<RKA1:PT8E.PA print Tape handlers pal8 RKB1:CS.BN<RKA1:CS.PA pal8 RKB1:LINCNS.BN<RKA1:LINCNS.PA pal8 RKB1:LINCSY.BN<RKA1:LINCSY.PA pal8 RKB1:TC08NS.BN<RKA1:TC08NS.PA pal8 RKB1:TC08SY.BN<RKA1:TC08SY.PA pal8 RKB1:TD8EA.BN<RKA1:TD8EA.PA pal8 RKB1:TD8EB.BN<RKA1:TD8EB.PA pal8 RKB1:TD8EC.BN<RKA1:TD8EC.PA pal8 RKB1:TD8ED.BN<RKA1:TD8ED.PA pal8 RKB1:TD8ESY.BN<RKA1:TD8ESY.PA pal8 RKB1:TM8E.BN<RKA1:TM8E.PA print Disk handlers pal8 RKB1:DF32NS.BN<RKA1:DF32NS.PA pal8 RKB1:DF32SY.BN<RKA1:DF32SY.PA pal8 RKB1:RF08NS.BN<RKA1:RF08NS.PA pal8 RKB1:RF08SY.BN<RKA1:RF08SY.PA pal8 RKB1:RK08NS.BN<RKA1:RK08NS.PA pal8 RKB1:RK08SY.BN<RKA1:RK08SY.PA pal8 RKB1:RK8ENS.BN<RKA1:RK8ENS.PA pal8 RKB1:RK8ESY.BN<RKA1:RK8ESY.PA pal8 RKB1:RL0.BN<RKA1:RL0.PA pal8 RKB1:RL1.BN<RKA1:RL1.PA pal8 RKB1:RL2.BN<RKA1:RL2.PA pal8 RKB1:RL3.BN<RKA1:RL3.PA pal8 RKB1:RLC.BN<RKA1:RLC.PA pal8 RKB1:RLSY.BN<RKA1:RLSY.PA pal8 RKB1:ROMMSY.BN<RKA1:ROMMSY.PA pal8 RKB1:RX78C.BN<RKA1:RX78C.PA pal8 RKB1:RXNS.BN<RKA1:RXNS.PA pal8 RKB1:RXSY1.BN<RKA1:RXSY1.PA pal8 RKB1:RXSY2.BN<RKA1:RXSY2.PA print Other handlers pal8 RKB1:DUMP.BN<RKA1:DUMP.PA pal8 RKB1:VXNS.BN<RKA1:VXNS.PA pal8 RKB1:VXSY.BN<RKA1:VXSY.PA print Building BATCH.SV pal8 RKB1:BATCH.BN<RKA1:BATCH.PA begin cdprog SYS:ABSLDR.SV RKB1:BATCH.BN end cdprog SYS:ABSLDR.SV os8 SAVE RKB1:BATCH.SV print Running BATCH job to build CCL.SV and RESORC.SV os8 ASSIGN RKA1 IN os8 ASSIGN RKB1 OUT os8 COPY DSK:<RKA1:RESORC.BI os8 COPY DSK:<RKA1:CCL.BI os8 SUBMIT CCL.BI |
Added media/os8/uni-init.tx.in.
> > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 | PiDP-8/I @VERSION@ - OS/8 V3D Combined Kit - KBM V3T - CCL V3A Built from source by @BUILDUSER@ on @BUILDTS@ Restart address = 07600 Type: .DIR - to get a list of files on DSK: .DIR SYS: - to get a list of files on SYS: .R PROGNAME - to run a system program .HELP FILENAME - to type a help file |
Added src/os8/uni/CUSPS/BITMAP.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 | /1.1 OS8 BINARY MAP (BITMAP) V4 / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / /NO CHANGES MADE FOR OS/8 V3C VERSION= 4 SUBVER= 01 /LOCATED AT "VERLOC" AS 60+VERSION^100+SUBVER XR= 10 LOADXR= 11 XFIELD= 20 /HOLDS FIELD WE ARE "STORING" INTO ORIGIN= 21 /HOLDS CURRENT ORIGIN OUT= 22 B1= 23 B3= 24 C1= 25 COLCTR= 27 WD= 30 WD1= 31 WD2= 32 FILPTR= 33 FLDNO= 35 /OS/8 EQUIVALENCES MPARAM= 7643 JSBITS= 7746 MIFILE= 7617 PTP= 20 DCB= 7760 /BUFFER AND DEVICE HANDLER ASSIGNMENTS OUCTL= 4200 OUBUF= 6000 OUDEVH= 6400 FIELD 1 *2000 BITMAP, JMP CALLCD JMP NOCD /CHAINED ENTRY POINT NEXTCD, TAD I (MPARAM-1 SPA CLA JMP I (BUILD /ALTMODE TERMINATES INPUT, STARTS OUTPUT CALLCD, JMS I (200 5 /COMMAND DECODE 0216 /DEFAULT EXTENSION IS .BN NOCD, TAD (LDRPCH DCA OUT ISZ ONCE JMP CDCOOL CLA CLL CMA RTL CDF 0 AND I (JSBITS /REMOVE "DON'T CARE ABOUT CD AREA" BIT DCA I (JSBITS CDF 10 JMS I (CTINIT CDCOOL, 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 JMP I (NEWFIL ONCE, -1 /SUBROUTINE TO "LOAD" A WORD. /INCREMENTS TWO-BIT QUANTITY CORRESPONDING TO THE WORD. /FIELD 0 IS MAPPED INTO WORDS 00000-01377,FIELD 1 INTO 01400-02777 /FIELDS 4-7 ARE MAPPED INTO 20000-25777 LOADWD, 0 /ENTER WITH LOW 4 BITS OF ORIGIN IN AC CLL RAL TAD (BITTBL-1 DCA LOADXR TAD I LOADXR /GET WORD IN THE 3-WORD SET DCA LDOFST /(WHICH MAPS 16 WORDS) TAD I LOADXR /GET THE LOW ORDER BIT OF THE PAIR DCA LDBIT /WHICH MAPS THIS WORD TAD ORIGIN /NOW FIND OUT WHICH TRIPLEWORD TO USE RTL RTL AND (7407 TAD XFIELD RTL RTL CDF 0 RTL RAL SZL CDF20Y, CDF 20 /NOP'ED IF NO FIELD 2 IN MACHINE CLL RTR /FIELDS 4-7 MAPPED IN FIELD 2 DCA LTEMP TAD LTEMP CLL RAL TAD LTEMP TAD LDOFST DCA LTEMP TAD LDBIT CLL RAL TAD LDBIT AND I LTEMP SNA CLA /IF COUNT IS AT 3 (MAX), JMP I LOADWD /DON'T INCREMENT IT TAD LDBIT CIA TAD I LTEMP DCA I LTEMP RDF CDF 10 SZA CLA DCA I (F4FLAG /SEARCH FIELD 2 IF WE STORED THERE JMP I LOADWD LDOFST, 0 LDBIT, 0 LTEMP, 0 /BIT TABLE FOR MAPPING BITTBL, 0;2000;0;400;0;100;0;20;0;4;0;1 1;2000;1;400;1;100;1;20;1;4;1;1 2;2000;2;400;2;100;2;20;2;4;2;1 PAGE 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 I (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 JMP I (OERR /NO! GETCH, 0 /GET-NEXT-INPUT-CHARACTER ROUTINE JMS I (CTCTST ISZ JMPGET ISZ CHCNT JMPX, JMP JMPGET TAD REOF SZA CLA JMP I GETCH /EOF REACHED BEFORE LOGICAL END - ERROR CLL TAD RCDCNT TAD (6 SNL DCA RCDCNT SZL ISZ REOF CLL CMA CML RTR RTR RTR TAD (1411 DCA RCTL CIF 0 JMS I HANDLR RCTL, 0 /READ RECORDS INTO FIELD 1 PBUFFR, BUFFER RECNO, 0 JMP RERROR TAD RECNO TAD (6 DCA RECNO TAD (-4401 DCA CHCNT TAD PBUFFR DCA CHPTR TAD JMPX DCA JMPGET JMP GETCH+1 JMPGET, JMP . JMP CHAR1 JMP CHAR2 TAD JMPX DCA JMPGET TAD I CHPTR AND (7400 CLL RTR RTR TAD CHTMP RTR RTR ISZ CHPTR JMP GCHCOM CHAR2, TAD I CHPTR AND (7400 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 ZTST, 0 /TEST A BLOCK OF THE BITMAP FOR ALL ONES DCA B3 /LENGTH OF THE BLOCK IN AC TAD LOADXR DCA XR STA JMS I (XCDF AND I XR ISZ B3 JMP .-2 CDF 10 CMA SZA JMP I ZTST TAD XR DCA LOADXR /UPDATE LOADXR IF ALL ZEROES JMP I ZTST PAGE ITSOVR, JMS ASSEMB /GET THE CHECKSUM CIA TAD LCKSUM SZA CLA /IS IT GOOD? JMP I (BADCKS /NO TAD I (MPARAM+1 AND L40 SNA CLA /IF /S IS NOT SET, JMP I (NEWFIL /ONLY ONE PROGRAM PER FILE. LOADER, DCA LCKSUM JMS GETFLD DCA XFIELD TAD (200 DCA ORIGIN /INITIALIZE FOR PROGRAM JMS I (GETCH JMP I (NEWFIL SNA JMP .-3 TAD (-200 /FIND SOME LEADER SZA CLA JMP LOADER+1 LEADER, JMS I (GETCH JMP I (NEWFIL SNA JMP LOADER+1 TAD (-200 /FIND END OF LEADER SNA JMP LEADER NEWWD, SMA /FIELD SETTING? JMP FIELDW /YES TAD (200 DCA WD1 /STORE 1ST CHAR JMS I (GETCH JMP I (BADINP DCA WD2 /2D CHAR JMS I (GETCH JMP I (BADINP TAD (-200 /IF THIS IS LEADER, WE HAVE THE CHECKSUM SNA JMP ITSOVR DCA WD JMS ASSEMB SNL /ORIGIN OR DATA? JMP DATAWD /DATA DCA ORIGIN JMP GETNXT DATAWD, CLA TAD ORIGIN AND (17 JMS I (LOADWD /GO SET THE CORRECT BIT(S) CDF 10 ISZ ORIGIN L40, 40 GETNXT, TAD WD1 TAD WD2 TAD LCKSUM DCA LCKSUM TAD WD JMP NEWWD ASSEMB, 0 TAD WD1 CLL RTL RTL RTL TAD WD2 JMP I ASSEMB FIELDW, TAD (-32 SNA JMP CTLZ TAD (-46 SPA JMP NOTXP DCA WD1 TAD WD1 AND (7 SZA CLA JMP NOTXP TAD WD1 AND (70 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 /ROUTINE TO CHECK FOR OPTION 0-7 DCA C1 /AND RETURN LOWEST-NUMBERED VALUE TAD I (MPARAM+2 AND (1774 SNA JMP I GETFLD RTL RAL ISZ C1 SNL JMP .-3 CLA CMA TAD C1 CLL RTL RAL JMP I GETFLD PAGE ERPCH, 0 AND (77 /GET LOW ORDER 6 BITS SZA JMP NZCHAR JMS ERR FILMSG, TEXT /, FILE 0/ JMP I (BITMAP NZCHAR, TAD (240 AND (77 TAD (240 JMS I OUT /PRINT JMP I ERPCH /AND RETURN LDRPCH, 0 TLS TSF JMP .-1 CLA JMP I LDRPCH ERR, 0 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, JMS I (ECRLF JMP I ERR /RETURN IOERR, JMS ERR TEXT %I/O ERROR% JMP I (BITMAP BADINP, JMS ERR TEXT /BAD INPUT/ JMP I (BITMAP BADCKS, JMS ERR TEXT / BAD CHECKSUM/ JMP I (BITMAP NULERR, JMS ERR TEXT /NO INPUT/ JMP I (BITMAP OUTERR, TAD (LDRPCH DCA OUT JMS ERR TEXT /ERROR ON OUTPUT DEVICE/ JMP I (CALLCD OERR, JMS ERR TEXT %NO /I!% JMP I (BITMAP CTINIT, 0 CLA CLL CML RTR DCA C1 DCA B1 DCA 0 /STRAIGHT-8 CROCK CTINLP, CDF 0 CLA CMA DCA I B1 CDF20X, CDF 20 STA DCA I B1 JMP CTFLD2 /*** THIS INSTR SKIPPED IF 8K PDP-8!!! DCA CDF20X /DUE TO BUG IN EXTENDED MEMORY CONTROLLER TAD ERR+1 /A CLA CDF 10 DCA I (CDF20Y CTFLD2, ISZ B1 ISZ C1 JMP CTINLP CDF 10 JMP I CTINIT PAGE /GENERAL OUTPUT ROUTINES /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: /OUBUF= ADDRESS OF OUTPUT BUFFER /OUCTL= OUTPUT BUFFER CONTROL WORD (MUST BE NEGATIVE) /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. OUFLD= OUCTL&70 OOPEN, 0 OU7600, 7600 TAD OU7601 DCA OUBLK TAD (OUDEVH+1 DCA OUHNDL CDF 10 TAD I (7604 SNA /IF OUTPUT HAS NO EXTENSION, TAD (1520 /GIVE IT THE EXTENSION .MP DCA I (7604 OUASGN, 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 USETTY /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 JMS I (OUSETP 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 I (OUTERR /YES - CANNOT ENTER THE FILE TAD I OU7600 AND (17 /MAKE THE REQUESTED LENGTH ZERO DCA I OU7600 JMP OUENTR /TRY, TRY AGAIN USETTY, DCA TTYNO JMS I (200 12 5524 TTYNO, 0 0 HLT /NO TELETYPE! TAD TTYNO DCA I OU7600 JMP OUASGN OUTDMP, 0 DCA OUCTLW /STORE THE CONTROL WORD CDF 10 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 (OUTERR /YES - SIGNAL OUTPUT ERROR CIF 0 JMS I OUHNDL OUCTLW, 0 OUBUF OUREC, 0 JMP I (OUTERR JMP I OUTDMP OCLOSE, 0 CDF 10 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 JMS I (OCHAR FILLLP, JMS I (OCHAR 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 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 JMP I (OUTERR CDF CIF 10 /RESTORE CALLING FIELDS JMP I OCLOSE PAGE OUCTMP= OUCTL&3700 OUSETP, 0 /ROUTINE TO INITIALIZE CHARACTER POINTERS TAD (-OUCTMP /GET SIZE OF BUFFER IN DOUBLEWORDS DCA OUDWCT TAD (OUBUF 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 CDIF0 DCA OUCRET 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 TAD OUTEMP /ORDER 4 BITS OF THIRD CHAR 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 OUCRET TAD (OUCTL /LOAD CONTROL WORD FOR A FULL WRITE JMS I (OUTDMP /DUMP THE BUFFER JMS OUSETP /RE-INITIALIZE THE POINTERS JMP OUCRET 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 OUCRET, HLT /RESTORE CALLING FIELDS JMP I OCHAR OUTEMP, 0 OUPOLD, 0 OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OTYPE, 0 RDF TAD CDIF0 DCA OTRTN CDF 10 TAD I (7600 AND (17 TAD (DCB-1 DCA OUTEMP TAD I OUTEMP OTRTN, HLT JMP I OTYPE DOBITS, 0 DCA B3 JMS I (XCDF TAD I LOADXR CDF 10 DCA B1 BITLP, TAD B1 CLL RTL DCA B1 TAD B1 CMA CML RAL AND (3 TAD (260 JMS I OUT ISZ COLCTR TAD COLCTR AND (7 SZA CLA JMP BITISZ TAD I (TTOFLG SNA CLA /IF OUTPUT IS NOT TO TTY, TAD (240 /PUT A SPACE AFTER EVERY GROUP OF 8 SZA JMS I OUT BITISZ, ISZ B3 JMP BITLP JMP I DOBITS CTCTST, 0 TAD (200 KRS TAD (-203 SNA CLA /IS THE TELETYPE BUFFER A ^C KSF /WITH THE TELETYPE FLAG ON? JMP I CTCTST /NO CDIF0, CDF CIF 0 /YES - GO TO MONITOR JMP I (7605 /THROUGH THE "DON'T SAVE CORE" RETURN PAGE BUILD, STA DCA SOMTHN TAD (-10 DCA FLDNO TAD MAPSKP DCA F4SKP /INITIALIZE ONCE-ONLY SKIP FLDLP, TAD FLDNO AND (4 CLL RTL TAD (CDF DCA CDFX /STORE A CDF 0 OR CDF 20 TAD FLDNO RTR SZL SPA CLA /IF FLDNO IS 0 OR 4, JMP NOT04 /INITIALIZE LOADXR TO 0 F4SKP, SKP F4FLAG, JMP MAPOVR /ZEROED IF INFO IN FIELD 2 DCA F4SKP STA DCA LOADXR NOT04, TAD (-1400 JMS I (ZTST SZA CLA /FIELD EMPTY? JMP NONEMP /NO FLDISZ, ISZ FLDNO JMP FLDLP MAPOVR, ISZ SOMTHN /WAS THERE ANY INPUT? MAPSKP, SKP JMP I (NULERR JMS I (ECRLF JMS I (ECRLF JMS I (OCLOSE CDF CIF 0 JMP I (7605 NONEMP, ISZ SOMTHN /HAVE WE OUTPUT ANYTHING YET? JMP NOTFST JMS I (OOPEN /NO - OPEN OUTPUT FILE NOW JMS I (OTYPE SNA CLA /SET MODE OF OUTPUT - /T INVERTS TAD (20 /NORMAL TTY/NO TYY DISTINCTION TAD I (MPARAM+1 AND (20 DCA I (TTOFLG TAD (OCHAR DCA OUT NOTFST, JMS I (EJECT1 /PAGE HEADING TAD (-100 DCA PAGECT PAGELP, TAD FLDNO TAD (270 JMS I OUT TAD PAGECT AND (70 CLL RTR RAR TAD (260 /OUTPUT LOC (HIGH 3 DIGITS) AT LEFT MARGIN JMS I OUT TAD PAGECT AND (7 TAD (260 JMS I OUT TAD (260 JMS I OUT TAD (260 JMS I OUT TAD (240 JMS I OUT DCA COLCTR TAD (-14 JMS I (ZTST /IF ALL 64 WORDS ARE ZERO, SNA CLA JMP NO1ND0 /DON'T PRINT LINE TAD (-4 DCA SOMTHN DOBTLP, TAD (-6 JMS I (DOBITS /OUTPUT 4 TRIPLEWORDS FOR 64 LOCATIONS TAD (-6 JMS I (DOBITS TAD (-4 JMS I (DOBITS ISZ SOMTHN JMP DOBTLP NO1ND0, JMS I (ECRLF CLA IAC AND PAGECT SZA CLA JMS I (ECRLF /SKIP A LINE EVERY PDP-8 PAGE TAD PAGECT TAD (41 SNA CLA JMS I (EJECT1 /NEW PAGE AT LOCATION 4000 ISZ PAGECT JMP PAGELP JMP FLDISZ PAGECT, 0 SOMTHN, 0 XCDF, 0 CDFX, HLT JMP I XCDF PAGE EJECT1, 0 TAD FLDNO TAD (4070 DCA FLDNUM TAD TTOFLG SZA CLA /TELETYPE STYLE OUTPUT? JMP EJKTTY /YES TAD (214 /NO - FORM FEED JMS I OUT PRTFLD, JMS I (ERR TEXT / BITMAP V/ *.-1 VERLOC, 60+VERSION^100+SUBVER /V5A, ETC... TEXT / FIELD/ *.-1 FLDNUM, TEXT / 0/ JMS ECRLF TAD TTOFLG SNA CLA /IF NOT TTY OUTPUT, JMP EJKLPT /DON'T PRINT HORIZONTAL GUIDE JMS I (ERR TEXT / 0000000011111111222222223333333344444444555555556666666677777777/ JMS I (ERR TEXT / 0123456701234567012345670123456701234567012345670123456701234567/ EJKLPT, JMS ECRLF JMP I EJECT1 EJKTTY, TAD (-13 DCA EJKTMP JMS ECRLF ISZ EJKTMP JMP ECRLFX JMS I (ERR TEXT /----/ JMS ECRLF JMP PRTFLD EJKTMP, 0 ECRLF, 0 TAD (215 JMS I OUT ECRLFX, TAD (212 JMS I OUT JMP I ECRLF TTOFLG, 0 /20 IF TTY-STYLE OUTPUT PAGE BUFFER=. $-$-$ |
Added src/os8/uni/CUSPS/BOOT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 | /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 /<DENSITY^400>+<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/uni/CUSPS/CAMP.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 | /11 OS8 CAMP / /S.R. / / /CASSETTE & MAGTAPE POSITIONER (CAMP) / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE VITHOUT NOTICE /AND SHOULD NOT BE CONTRUED 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. / / / COPYRIGHT (C) 1973,1975,1977 BY DIGITAL EQUIPMENT CORPORATION. / / / / / MUST SKIP LOCS 1000-1377 LINBUF=1000 XR1=11 XR2=12 XR3=13 *20 TEMP, 0 T, 0 T2, 0 LINPTR, 0 T3, 0 FLAG, 0 SPKNT, 0 DEVTYP, 0 /DEVICE TYPE (BITS 6-11) ENTRY, 0 /HANDLER ENTRY POINT NUM, 0 TYP, 0 /0 MEANS 'F', 1 MEANS 'R' T4, 0 DEVNUM, 0 DCW, 0 /DEVICE CONTROL WORD DCWPTR, 0 USR, 200 /POINTS TO USR ENTRY POINT ESCBIT, 0 /1 MEANS USER TYPED ALTMODE CNT, 0 CTOFLG, 0 /-1 MEANS SAW ^O COUNT, 0 PTR, 0 DHIT, 0 /DEVICE HANDLER INFO TABLE - 1 DHI, 0 /DEVICE HANDLER INFO DBLK, 0 /DEVICE HANDLER BLOCK VNOPTR, 0 /PTS TO VERSION # IN HANDLER VNO, 0 /CURRENT HANDLER VERSION NUMBER SAVPTR, 0 NO, 0 /1 MEANS 'NO' FLG, 1 /1 MEANS SAW NO DIGITS P, 0 RR, 0 NUCODE, 0 / MAGTAPE SPECIAL CODES REWKOD=1 SKFKOD=3 /SKIP FORWARD FILE UNLKOD=4 EOFKOD=5 SKPKOD=2 /FORWARD RECORD BAKKOD=SKPKOD+4000 BKFKOD=SKFKOD+4000 DTLA=6766 /0000-0777 /CAMP /1000-1377 /OS/8 LINE BUFFER /1400-1777 /PS/8 LINE BUFFER /2000- /CAMP /7000-7177 /I/O BUFFER /7200-7577 /OS/8 HANDLER /7600-7777 /OS/8 DLDC=6746 DLAG=6743 PAGE *200 START, SKP JMP CHN TAD ("# JMS I [TYPE JMS I [READ /READ A LINE INTO OS/8 LINE BUFFER CHN, TAD [LINBUF /CHAIN ENTRY ADDRESS DCA LINPTR /INITIALIZE POINTER TO LINE BUFFER STA JMS I [SPACE /IGNORE LEADING SPACES JMS GETTWO /GET TWO CHARS DCA TEMP JMS I [SCAN /SCAN PAST EXTRA LETTERS OR DIGITS TAD TEMP JMS I [BRANCH /GO TO APPROPRIATE ROUTINE -2313;SKIP /SK -0517;EOF /EO -0201;BACK /BA -2205;REWIND /RE -2516;UNLOAD /UN -2605;VERSION /VE -1005;HELP /HE -2664;V4 /V4 -2305;SYNTAX /SE SETLOC=.-1 0 SNA CLA JMP I [GOAWAY JMP I [SYNTAX /NONE OF THESE /V1 FEATURES: /FIXES SINCE FIELD TEST RELEASE: /1. ADDED CASSETTE SUPPORT /2. FIXED BUG RE IMMEDIATE ALTMOD /3. CHANGED SPECIAL CODES TO AGREE WITH NEW MAGTAPE HANDLER /4. IGNORE NULLS ON INPUT /5. ALLOW UNLOADING AN RK8E /CHANGES MADE TO V3: /1. SET COMMAND IMPLEMENTED /MAINTENANCE RELEASE CHANGES: /1. TOOK OUT 'SET' SINCE WE DON'T WANT TO SUPPORT IT / UNTIL OS/8 V4 /2. FIXED BUG RE AT EOF AND BOF MESSAGES /3. CHANGED CAMP TO USE NEW TM8E HANDLER / NOTE: CAMP WILL NOT WORK PROPERLY WITH / TM8E HANDLERS PRIOR TO VERSION F /4. PROPERLY FIND EOT EVEN IF WE'RE JUST / BEFORE A FILE MARK. /5. GIVE AT BOT OR EOT MESSAGE IF SEE REFLECTIVE SPOT /6. CHANGED VERSION NUMBER TO V4 /7. ENSURE THAT USER CAN'T PASS OVER EOD /V3D CHANGES: /1. FIXED BUG WITH UNLOADING RKS / GETTWO /GET TWO LETTERS OR DIGITS FROM INPUT LINE, PACK IN SIXBIT /ADVANCE PAST THEM. SUBSTITUTE NULL IF NOT FOUND. GETTWO, 0 JMS GETSIX CLL RTL RTL RTL DCA T2 JMS GETSIX TAD T2 /COMBINE JMP I GETTWO GETSIX, 0 /GET A SIXBIT LETTER OR DIGIT (OR NULL) JMS ALPHA /IS IT ALPHANUMERIC? JMP NOTALPH /NO AND [77 /YES JMP I GETSIX /TRUNCATE TO SIXBIT NOTALPH,CLA JMS BACKC JMP I GETSIX /RETURN NULL GETC, 0 /GET A CHARACTER, ADVANCE POINTER TAD I LINPTR AND [177 /ALWAYS RETURN 8-BIT SZA TAD [200 /WITH HIGH ORDER BIT ON ISZ LINPTR /ADVANCE SCAN JMP I GETC /RETURN BACKC, 0 /MOVE SCAN POINTER BACK ONE STA TAD LINPTR DCA LINPTR JMP I BACKC /RETURN /RETURN 1 NOT OF TYPE DESIRED /RETURN 2 DESIRED TYPE /IN BOTH CASES, CHAR IS LEFT IN AC ALPHA, 0 /LOOK FOR ALPHANUMERIC JMS I [GETC JMS LETTER /IS IT A LETTER? JMP TRYDIG /NO, TRY DIGIT JMP GOTAL /YES TRYDIG, JMS DIGIT /IS IT A DIGIT? JMP I ALPHA /NO, AINT LETTER OR DIGIT GOTAL, ISZ ALPHA /YES, EITHER LETTER OR DIGIT JMP I ALPHA /RETURN WITH IT IN AC LETTER, 0 /LOOK FOR LETTER TAD (-"A CLL TAD ("A-"Z-1 SNL ISZ LETTER TAD ("Z+1 /RESTORE CHAR JMP I LETTER DIGIT, 0 /LOOK FOR DIGIT TAD (-"0 CLL TAD ("0-"9-1 /(DECIMAL) SNL ISZ DIGIT TAD ("9+1 /RESTORE DIGIT TO CHARACTER FORM JMP I DIGIT /AND RETURN WITH IT IN AC PAGE SYNTAX, CLA JMS PRINT TEXT /? SYNTAX ERROR/ GOAWAY, TAD ESCBIT SZA CLA JMP I [7605 /LINE ENDED WITH ESCAPE TAD I [READ /WAS 'READ' EVER CALLED? SZA CLA JMP I [START /YES, GET A NEW LINE JMP I [7605 /NO, WE MUST'VE BEEN CHAINED TO, RECALL KBM PRINT, 0 TAD I PRINT RTR RTR RTR JMS PRIN TAD I PRINT JMS PRIN ISZ PRINT JMP PRINT+1 LV, JMS I [CRLF ISZ PRINT JMP I PRINT PRIN, 0 AND [77 SNA JMP LV TAD [240 AND [77 TAD [240 DCA T3 TAD [200 KRS TAD (-203 SNA JMP CTRLC TAD (203-217 /^O SNA CLA JMS CTRLO TAD T3 JMS I [TYPE JMP I PRIN CTRLC, TAD ["^ JMS I [TYPE TAD ("C JMS I [TYPE /ECHO "^C" JMS I [DELAYY JMP I [7600 /THEN GO AWAY CTRLO, 0 KCC /CLEAR OUT ^O TAD ["^ JMS I [TYPE TAD ("O JMS I [TYPE JMS I [CRLF STA DCA CTOFLG /STOP ECHOING JMP I CTRLO VERSION,JMS PRINT TEXT \OS/8 CAMP V5A\ JMP I [START NUMBIG, JMS PRINT TEXT /? NUMBER TOO BIG/ JMP I [GOAWAY NONEX, JMS PRINT TEXT /? CAN'T - DEVICE DOESN'T EXIST/ JMP I [GOAWAY SYSERR, JMS PRINT TEXT \? I/O ERROR ON SYS:\ JMP I [GOAWAY PAGE HELP, JMS I [PRINT TEXT /BACKSPACE DEV: N FILES/ JMS I [PRINT TEXT /BACKSPACE DEV: N RECORDS/ JMS I [PRINT TEXT /EOF DEV:/ H2, JMP H1 / JMS I [PRINT TEXT /SET DEV: [NO] ATTRIB [N]/ H1, JMS I [PRINT TEXT /SKIP DEV: N FILES/ JMS I [PRINT TEXT /SKIP DEV: N RECORDS/ JMS I [PRINT TEXT /SKIP DEV: EOD/ JMS I [PRINT TEXT /REWIND DEV:/ JMS I [PRINT TEXT /UNLOAD DEV:/ JMS I [PRINT TEXT /VERSION/ JMS I [PRINT TEXT /HELP/ JMP I [START BADEV, CLA JMS I [PRINT TEXT /? CAN'T FOR THIS DEVICE/ JMP I [GOAWAY V4, TAD (SET DCA I (SETLOC TAD H1 DCA H2 JMP I [START PAGE *2000 /ORIGIN PAST OS/8 LINE BUFFER AT 1000. /SKIP PAST PS/8 LINE BUFFER (AT 1400) JUST IN CASE /PS/8 USERS WISH TO PATCH THIS PROGRAM /SCAN PAST EXTRA LETTERS OR DIGITS SCAN, 0 JMS I [ALPHA JMP NOPE CLA JMP SCAN+1 NOPE, CLA JMS I [BACKC JMP I SCAN /SCAN PAST SPACES; GIVE ERROR IF NO SPACES FOUND UNLESS AC=-1 SPACE, 0 DCA FLAG /SET AC=-1 TO PREVENT ERROR ON NO SPACES FOUND DCA SPKNT /INITIALIZE SPACE COUNTER SKP /JUMP INTO LOOP GOTSP, ISZ SPKNT JMS I [GETC /GET NEXT CHAR TAD (-240 SNA CLA /IS IT A SPACE? JMP GOTSP /YES, COUNT IT JMS I [BACKC /NO, PUT IT BACK ISZ FLAG /CHECK FLAG SKP /USER DIDN'T SPECIFY FLAG JMP I SPACE /-0 MEANT DON'T CHECK IF FOUND SPACE TAD SPKNT /HOW MANY SPACES DID WE FIND? SZA CLA JMP I SPACE /SOME. OK JMP I [SYNTAX /NONE. TSK. TSK. BRANCH, 0 DCA T BR2, TAD I BRANCH ISZ BRANCH SNA JMP NOTFND TAD T SNA CLA JMP FOUND ISZ BRANCH JMP BR2 FOUND, TAD I BRANCH DCA T JMP I T /FOUND ITEM IN COLUMN 1, JUMP TO ADDRESS IN COL 2 NOTFND, TAD T JMP I BRANCH /IF NOT FOUND IN COL 1, RETURN WITH AC INTACT CHECKR, 0 TAD DCW RAL SMA CLA JMP I CHECKR RONLY, JMS I [PRINT TEXT /? CAN'T - DEVICE IS READ-ONLY/ JMP I [GOAWAY CHECKW, 0 TAD DCW RTL SMA CLA JMP I CHECKW WONLY, JMS I [PRINT TEXT /? CAN'T - DEVICE IS WRITE-ONLY/ JMP I [GOAWAY ONUM, 0 DCA NUM CLA IAC DCA FLG ONM1, JMS I [GETC TAD (-"0-10 /CONVERT TO DIGIT CLL TAD (10 SNL JMP OEON DCA T4 DCA FLG TAD NUM AND [7000 SZA CLA JMP I [NUMBIG TAD NUM CLL RTL RAL TAD T4 DCA NUM JMP ONM1 OEON, CLA JMS I [BACKC TAD NUM JMP I ONUM PAGE /READ A LINE INTO OS/8 LINE BUFFER READ, 0 DCA CTOFLG /ALLOW ECHOING RD1, TAD [LINBUF DCA LINPTR DCA ESCBIT GT, JMS GET LOOK, JMS I [BRANCH -377;RUBOUT -217;GT /^O -203;CTRLC /^C -212;LF /LINE FEED -215;CR /CARRIAGE RETURN -375;ESCAPE /ALTMODE -376;ESCAPE /ALTMODE (2ND FLAVOR) -233;ESCAPE /ESCAPE -225;CTRLU /^U -200;GT /IGNORE NULLS 0 DCA TEMP /NONE OF THESE TAD LINPTR TAD (-LINBUF-377 SNA CLA /AT END OF LINE BUFFER? JMP GT /YES, DON'T ACCEPT CHAR TAD TEMP /NO, RETRIEVE CHAR JMS TYPE /ECHO IT TAD TEMP /INSERT IN BUFFER DCA I LINPTR ISZ LINPTR /BUMP POINTER JMP GT /NEXT CTRLU, TAD ["^ JMS TYPE TAD ("U JMS TYPE /ECHO "^U" <CR><LF> JMS I [CRLF JMP RD1 RUBOUT, TAD LINPTR TAD [-LINBUF SNA JMP BOL /AT BEGIN OF LINE TAD [LINBUF-1 DCA LINPTR /MOVE POINTER BACK ONE TAD ["\ JMS TYPE /ECHO "\" RUB3, TAD I LINPTR JMS TYPE /ECHO RUBBED-OUT CHARACTER GT2, JMS GET JMS I [BRANCH -377;RUB2 -216;GT2 /IGNORE ^O -203;CTRLC /^C 0 DCA TEMP /A NEW CHAR TAD ["\ JMS TYPE /ENCLOSE RUBBED-OUT CHARS IN \'S TAD TEMP JMP LOOK RUB2, TAD LINPTR TAD [-LINBUF SNA JMP BOL2 TAD [LINBUF-1 DCA LINPTR JMP RUB3 BOL2, TAD ["\ JMS TYPE BOL, JMS I [CRLF JMP RD1 ESCAPE, TAD ("$ /ECHO ESCAPE AS DOLLAR SIGN JMS TYPE ISZ ESCBIT /NOTE ESCAPE CR, DCA I LINPTR /INSERT 0 AT END JMS I [CRLF JMP I READ /RETURN, WE GOT LINE GET, 0 KSF JMP .-1 KRB AND [177 TAD [200 /FORCE TO 8-BIT JMP I GET TYPE, 0 DCA TYPEM JMS I [DELAYY DCA .-1 /DELAY FIRST TIME THRU TO LET THINGS QUIET DOWN TAD CTOFLG SZA CLA JMP I TYPE /NO ECHOING TAD TYPEM TLS TSF JMP .-1 CLA JMP I TYPE TYPEM, 0 LF, DCA I LINPTR /TEMPORARILY INSERT A 0 SENTINEL TAD [LINBUF-1 DCA XR1 JMS I [CRLF TAD ["# JMS I [TYPE LFLP, TAD I XR1 SNA JMP I [GT /FINHSHED, GET SOME MORE CHARS JMS I [TYPE /ECHO CURRENT CHARS JMP LFLP PAGE EOF, JMS I [SPACE /SPAN OVER SPACES JMS I [GETDEV /GET DEVICE JMS I [CHECKR TAD DEVTYP JMS I [BRANCH -20;MAGEOF -27;CASEOF ZBLOCK 2 0 JMP I [BADEV SKIP, JMS I [SPACE JMS I [GETDEV JMS I [CHECKW JMS GETNUM TAD DEVTYP JMS I [BRANCH -20;MAGSKP -27;CASSKP 0 JMP I [BADEV REWIND, JMS I [SPACE JMS I [GETDEV JMS I [CHECKW TAD DEVTYP JMS I [BRANCH -20;MAGREW -27;CASREW -16;TCREW / -17;LTREW ZBLOCK 4 /PATCH SPACE 0 TAD DCW SMA CLA JMP I [BADEV /NOT FILE STRUCTURED CLA IAC /READ BLOCK 0 TO REWIND DCA I [BLK TAD (100 JMS I [GO JMP I [GOAWAY UNLOAD, JMS I [SPACE JMS I [GETDEV JMS I [CHECKW TAD DEVTYP JMS I [BRANCH -20;MAGUNL / -27;CASUNL -16;TCUNL -21;TDUNL / -17;LTUNL -23;RKEUNL ZBLOCK 2 0 JMP I [BADEV BACK, JMS I [SPACE JMS I [GETDEV JMS I [CHECKW JMS GETNUM TAD TYP SPA CLA JMP I [SYNTAX /CAN'T BACKSPACE TO EOD TAD DEVTYP JMS I [BRANCH -20;MAGBAK -27;CASBAK 0 JMP I [BADEV GETNUM, 0 /PARSE OFF :NNNN [F ! R] OR EOD CLA IAC DCA NUM DCA TYP JMS I [GETC SNA JMP I GETNUM /EOL TAD (-": SZA CLA JMP I [SYNTAX STA JMS I [SPACE /OPTIONAL SPACES TAD I LINPTR SNA JMP I GETNUM /EOL TAD (-"E SNA CLA JMP EO JMS I [NUMBER DCA NUM STA JMS I [SPACE /MORE OPTIONAL SPACES DCA TYP JMS I [GETC SNA JMP I GETNUM /NO F OR R. F ASSUMED TAD (-"F SNA JMP R /0 MEANS 'F' TAD ("F-"R SZA CLA JMP I [SYNTAX CLA IAC /1 MEANS 'R' R, DCA TYP JMP I GETNUM EO, STA /-1 MEANS 'E' JMP R PAGE /GET A DECIMAL NUMBER, RETURN IT IN AC NUMBER, 0 DCA NUM CLA IAC DCA FLG NM1, JMS I [GETC JMS I [DIGIT JMP EON TAD (-"0 /CONVERT TO DIGIT DCA T4 DCA FLG /NOTE PASSAGE OF A DIGIT TAD NUM AND [7000 SZA CLA JMP I [NUMBIG TAD NUM CLL RTL TAD NUM CLL RAL TAD T4 SZL JMP I [NUMBIG DCA NUM JMP NM1 EON, CLA JMS I [BACKC TAD FLG SZA DCA NUM /IF NO DIGITS, RETURN A 1 TAD NUM JMP I NUMBER / GETDEV /PARSES OFF A DEVICE NAME (1-4 CHARS) /DETERMINES IF IT EXISTS /LOADS HANDLER INTO 7200-7577 IF NOT ALREADY IN CORE /SETS ENTRY POINT ADDRESS AT 'ENTRY' /SETS DEVICE NUMBER AT 'DEVNUM' /SETS DEVICE CONTROL WORD AT 'DCW' /SETS 'DEVTYP' GETDEV, 0 JMS I [GETTWO DCA WD1 JMS I [GETTWO DCA WD2 TAD WD1 TAD WD2 DCA WD1 /COMBINE TWO WORDS INTO 1 (IN WD1) TAD WD2 SNA CLA JMP INQ TAD WD1 /OS/8 KLUDGE FOR UNIQUENESS CLL RAL STL RAR /FORCE BIT 0 ON IF 2ND WORD WAS NON-ZERO DCA WD1 INQ, DCA WD2 CIF 10 JMS I USR 12 /INQUIRE WD1, 0 /DEVICE NAME WD2, 0 /GETS DEVICE NUMBER WD3, 0 /GETS ENTRY POINT JMP I [NONEX /DEVICE DOESN'T EXIST TAD WD3 SZA /IS HANDLER ALREADY IN CORE? JMP INCORE /YES TAD WD1 DCA DW1 TAD (7201 /ALLOW TWO PAGE HANDLER IN 7200 DCA DW3 DCA DW2 CIF 10 JMS I USR 1 /FETCH DW1, 0 /DEVICE NAME DW2, 0 /GETS DEVICE NUMBER DW3, 0 /GETS ENTRY POINT JMP I [NONEX /DOESN'T EXIST TAD DW2 DCA DEVNUM TAD DW3 DCA ENTRY JMP GETYP INCORE, DCA ENTRY TAD WD2 DCA DEVNUM GETYP, TAD DEVNUM TAD (7757 DCA DCWPTR /POILT INTO DEVICE CONTROL WGRD TABLE CDF 10 TAD I DCWPTR /GET DCW DCA DCW TAD DCW RTR RAR AND [77 DCA DEVTYP STA TAD I (37 /GET ADDRESS OF DHIT DCA DHIT TAD DHIT TAD DEVNUM DCA DHI TAD I DHI CDF 0 DCA DHI TAD DHI RTL RTL RTL AND (17 SZA TAD (15 DCA DBLK JMP I GETDEV DELAYY, 0 TAD (-10 DCA OUTER ISZ ZER JMP .-1 ISZ OUTER JMP .-3 JMP I DELAYY ZER, 0 OUTER, -10 PAGE LOADPT, TAD I (FUNCT TAD (-REWKOD SNA CLA JMP I [GOAWAY /LOAD POINT ON A REWIND IS NOT AN ERROR READBT, JMS I [PRINT TEXT /? CAN'T - AT BOT OR EOT/ JMP I [GOAWAY READEOF,JMS I [PRINT TEXT /% CAN'T - AT EOF/ JMP I [GOAWAY READBOF,JMS I [PRINT TEXT /% CAN'T - AT BOF/ JMP I [GOAWAY CASSKP, DCA I (DIR TAD TYP SNA CLA JMP CSKPF JMP I (NOTIMPL CGO, 0 DCA CFUNCT JMS I ENTRY CFUNCT, 0 CBUFR, 7000 CBLK, -1 SKP JMP I CGO DCA TEMP TAD TEMP SMA CLA JMP I (END /SOFT ERROR JMS I [PRINT TEXT \? CAN'T - I/O ERROR\ JMP I [GOAWAY CASEOF, JMS CGO JMP I [GOAWAY CASREW, TAD (REWKOD JMS CGO JMP I [GOAWAY CSKPF, TAD NUM SNA IAC CIA DCA COUNT TAD (SKFKOD JMS CGO ISZ COUNT JMP .-3 JMP I [GOAWAY CASBAK, CLA IAC DCA I (DIR TAD TYP SZA CLA JMP CBAKBLK TAD NUM CMA DCA COUNT TAD (BKFKOD JMS CGO ISZ COUNT JMP .-3 JMP I [GOAWAY CBAKBLK,TAD NUM SNA IAC CIA DCA COUNT TAD (BAKKOD JMS CGO ISZ COUNT JMP .-3 JMP I [GOAWAY PAGE TCREW, JMS TCR JMP I [GOAWAY TCUNL, JMS TCR TAD ENTRY IAC RTR RTR AND [7000 DTLA /SELECT ANOTHER UNIT JMP I [GOAWAY TCR, 0 TAD ENTRY TAD (-7607 SZA CLA /SYSTEM TC08 DECTAPE MUST BE UNIT 0 TAD ENTRY RTR RTR AND [7000 /ISOLATE UNIT # IN BITS 0-2 TAD (600 /GO REVERSE DTLA JMP I TCR TDUNL, TAD (-7607 SZA CLA TAD ENTRY DCA TEMP TAD TEMP RTR RAR CLA RAR DCA UNIT TAD TEMP AND [3 CIA TAD [77 /GET DEV CODE CLL RTL RAL TAD (6004 /BUILD 'SDLC' DCA BSDLC TAD UNIT TAD (3000 /GO, REVERSE BSDLC, HLT CLA JMP I [GOAWAY UNIT, 0 TTCODE, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ONUM SNA JMP I [SYNTAX DCA NUCODE TAD NUCODE AND [7700 SZA CLA JMP I [NUMBIG JMS I [TTST1 TAD (7200 DCA RR JMS GETIOT JMP I [OLDERR CIA DCA T2 TTLP, JMS GETIOT JMP I [OLDERR CIA DCA T3 TAD T3 CIA TAD T2 SNA JMP TTLP SMA CLA JMP .+3 TAD T3 DCA T2 /T2 CONTAINS NEG OF SMALLER IOT TAD (7200 DCA RR TTLP2, JMS GETIOT JMP I TTCODE TAD T2 SZA CLA CLA IAC TAD NUCODE CLL RTL RAL DCA T3 TAD I RR AND (7007 TAD T3 DCA I RR JMP TTLP2 GETIOT, 0 ISZ RR TAD RR TAD (-7600 SNA CLA JMP I GETIOT TAD I RR AND [7000 TAD [-6000 SZA CLA JMP GETIOT+1 TAD I RR RTR RAR AND [77 TAD (-20 CLL RAR SNA JMP GETIOT+1 RAL TAD (20 ISZ GETIOT JMP I GETIOT PAGE MAGSKP, DCA DIR TAD TYP SNA JMP SKPF SPA CLA JMP SKPEOD TAD NUM SNA CLA IAC CIA DCA WC TAD (SKPKOD JMS GO JMP I [GOAWAY MAGEOF, TAD (EOFKOD JMS GO JMP I [GOAWAY SKPF, TAD NUM SNA JMP SKP0 CIA DCA WC JMS I (FUDGE /DON'T LET GUY TRICK US INTO GOING PAST EOD TAD (SKFKOD JMS GO JMP I [GOAWAY SKPEOD, JMS I (FUDGE /DON'T LET GUY TRICK US INTO GOING PAST EOD JMS I ENTRY SKFKOD 0 0 /SKIP 4096 FILES SMA SKP CLA JMP CHKBOT JMP I [GOAWAY MAGBAK, CLA IAC DCA DIR TAD TYP SNA CLA JMP BAKF TAD NUM SNA CLA IAC CIA DCA WC TAD (BAKKOD JMS GO JMP I [GOAWAY BAKF, TAD NUM CMA DCA WC2 JMS I ENTRY BKFKOD 0 WC2, -1 / SMA SKP CLA JMP CHKBOT TAD (SKPKOD /SKIP 1 RECORD FORWARD JMP SKY CHKBOT, DCA TEMP TAD TEMP AND (1000 SNA CLA JMP IOE JMP I (READBT MAGUNL, TAD (UNLKOD JMS GO JMP I [GOAWAY MAGREW, TAD (REWKOD JMS GO JMP I [GOAWAY GO, 0 DCA FUNCT JMS I ENTRY FUNCT, 0 BUFR, 7000 WC, BLK, -1 SKP /I/O ERROR JMP I GO DCA TEMP TAD TEMP SMA CLA JMP END /SOFT ERROR TAD TEMP AND (1000 SZA CLA JMP I [LOADPT IOE, TAD TEMP JMP I [IOERR DIR, 0 /0- FORWARD ; 1- BACKWARDS END, TAD TYP SNA CLA JMP I (EODERR /V3C NEW HANDLER CALL TAD DIR /SAW FILE MARK SNA CLA /V3C JMP I [READEOF /AT END OF FILE JMP I [READBOF /AT BEGIN OF FILE SKP0, JMS I ENTRY SKFKOD 0 /IRRELEVANT -1 /ADVANCE 1 FILE SMA SKP CLA JMP I [IOERR /HARD ERROR TAD (BAKKOD SKY, DCA SKX /V3C JMS I ENTRY SKX, BAKKOD 0 /IRREL -1 /BACK OVER FILE MARK SMA SKP CLA JMP I [IOERR JMP I [GOAWAY PAGE IOERR, AND (3777 CLL RAL DCA TEMP JMS I [PRINT TEXT \? CAN'T - I/O ERROR\ TAD (-13 /11 BITS TO LOOK AT DCA CNT TAD (JLIST DCA JM IOLUP, TAD TEMP RAL DCA TEMP SZL JMP I JM IOCONT, ISZ JM ISZ CNT JMP IOLUP JMP I [GOAWAY JM, 0 JLIST, JMP BIT1 JMP BIT2 JMP BIT3 JMP BIT4 JMP BIT5 JMP BIT6 JMP BIT7 JMP BIT8 JMP I (BIT9 JMP I (BIT10 JMP I (BIT11 BIT1, JMS I [PRINT TEXT /(REWINDING)/ JMP IOCONT BIT2, JMS I [PRINT TEXT /(BOT)/ JMP IOCONT BIT3, JMS I [PRINT TEXT /(SELECT ERROR)/ JMP IOCONT BIT4, JMS I [PRINT TEXT /(PARITY ERROR)/ JMP IOCONT BIT5, JMS I [PRINT TEXT /(EOF)/ JMP IOCONT BIT6, JMS I [PRINT TEXT /(RECORD LENGTH INCORRECT)/ JMP IOCONT BIT7, JMS I [PRINT TEXT /(TIMING ERROR)/ JMP IOCONT BIT8, JMS I [PRINT TEXT /(EOT)/ JMP IOCONT RKEUNL, CLL TAD ENTRY TAD (200 SNL CLA TAD ENTRY AND (6 /ISOLATE UNIT TAD (2000 /WRITE PROTECT DISK DLDC /LOAD COMMAND REGISTER DLAG JMP I [GOAWAY PAGE BIT9, JMS I [PRINT TEXT /(WRITE LOCK-OUT)/ JMP I (IOCONT BIT10, JMS I [PRINT TEXT /(READ COMPARE ERROR)/ JMP I (IOCONT BIT11, JMS I [PRINT TEXT /(ILLEGAL FUNCTION)/ JMP I (IOCONT NOTIMPL,JMS I [PRINT TEXT /% OPERATION NOT YET IMPLEMENTED/ JMP I [GOAWAY EODERR, JMS I [PRINT TEXT /? CAN'T - AT EOD/ JMP I [GOAWAY /THIS ROUTINE PREVENTS US FROM GOING PAST EOD WHEN /SKIPPING FORWARD FILES. /IT DOES THIS BY THE FOLLOWING ALGORITHM: /FIRST WE BACKSPACE A RECORD. /IF WE SAW DATA, THEN OK, WE RETURN TO THE USER; /THIS WILL NOT AFFECT HIS SKIP FILE COUNT. /IF WE SAW A FILE MARK, THEN WE SKIP FORWARD /BACK OVER THAT FILE, IGNORING THE FILE MARK ERROR. /IF WE SAW BOT, THEN, OK NO ERROR. FUDGE, 0 JMS I ENTRY /V3C ALL NEW BAKKOD TM, 0 -1 SKP JMP I FUDGE SPA JMS BER SZA CLA JMS FRWD JMP I FUDGE /IF ERROR WAS BOT, OK BER, 0 DCA TM TAD TM AND (1000 SZA CLA JMP I BER /BOT OK, NO FRWD TAD TM JMP I [IOERR FRWD, 0 JMS I ENTRY SKPKOD 0 -1 SMA SKP CLA JMP I [IOERR JMP I FRWD PAGE SET, JMS I [SPACE DCA VNO /V3C JMS I [GETDEV JMS I [GETC JMS I [BRANCH -":;COLN -" ;COLN -"-;HYPH 0 JMP I [SYNTAX /NO : OR BLANK AFTER NAME COLN, STA JMS I [SPACE /IGNORE OPTIONAL SPACES JMS I [GETC SNA JMP I [SYNTAX TAD (-"- SNA CLA JMP HYPH JMS I [BACKC COLN2, DCA NAM1 DCA NAM2 TAD (MAIN-1 /LOOK FOR DEVICE TYPE IN MAIN TABLE MNLUP, DCA XR1 TAD I XR1 SMA SZA JMP NOTYP /NOT FOUND TAD DEVTYP SNA CLA JMP FNDTYP TAD XR1 TAD (3 /POINT TO NEXT ENTRY JMP MNLUP FNDTYP, TAD I XR1 /GET GENERIC NAME DCA NAM1 TAD I XR1 DCA NAM2 DCA AUXFLG TAD I XR1 /GET PTR TO DEVICE TABLE INTO, DCA PTR DCA NO TAD LINPTR DCA SAVPTR /SAVE SCAN POINTER JMS I [GETTWO TAD (-1617 SNA CLA /ARE NEXT TWO CHARS 'NO'? JMS SAWNO /YES TAD SAVPTR /NO DCA LINPTR /RESTORE PTR SCNLUP, TAD I PTR SNA /GET NEXT KEYWORD POINTER JMP NOKEY ISZ PTR /POINT TO PTR TO ROUTINE JMS I [KEYSRCH JMP NOF /NOT FOUND TAD I PTR /FOUND DCA PTR /GET PTR TO ROUTINE JMS I (HREAD /READ HANDLER JMS I PTR /CALL ROUTINE JMS I (HWRITE /REWRITE HANDLER JMP I [GOAWAY HYPH, JMS I [ALPHA JMP I [BADV DCA VNO TAD VNO SNA JMP I [BADV AND [17 DCA VNO JMS I [SPACE /IGNORE SPACE JMP COLN2 NOKEY, TAD AUXFLG SNA CLA JMP NOO JMS I [PRINT TEXT \? UNKNOWN ATTRIBUTE FOR DEVICE \ *.-1 NAM1, 0 NAM2, 0 0 JMP I [GOAWAY SAWNO, 0 ISZ NO STA JMS I [SPACE TAD LINPTR DCA SAVPTR JMP I SAWNO NOTYP, CLA ISZ AUXFLG TAD (AUX /SEARCH AUXILIARY TABLE JMP INTO NOF, ISZ PTR TAD SAVPTR DCA LINPTR JMP SCNLUP AUXFLG, 0 NOO, ISZ AUXFLG TAD (AUX DCA PTR JMP SCNLUP PAGE HREAD, 0 TAD DBLK SNA JMP RESERR DCA BLOCK JMS I (7607 200 /READ 2 PAGES L7200, 7200 /INTO 7200-7577 BLOCK, 0 /FROM THIS BLOCK ON SYSTEM DEVICE JMP I [SYSERR TAD DHI AND (177 /GET RELATIVE ENTRY PT TAD L7200 DCA ENTRY TAD VNO SZA CLA /V3C JMP I HREAD /VNO ALREADY SET BY - COMMAND TAD ENTRY VLOOP, DCA VNOPTR TAD I VNOPTR CLL TAD (-33 SZL CLA JMP BACKV TAD I VNOPTR SNA JMP OLDERR DCA VNO JMP I HREAD BACKV, STA TAD VNOPTR JMP VLOOP RESERR, JMS I [PRINT TEXT /? CAN'T - DEVICE IS RESIDENT/ JMP I [GOAWAY OLDERR, CLA JMS I [PRINT TEXT /? CAN'T - OBSOLETE HANDLER/ JMP I [GOAWAY HWRITE, 0 TAD BLOCK DCA BLKTWO JMS I (7607 4200 7200 BLKTWO, 0 JMP I [SYSERR JMP I HWRITE NEWERR, CLA JMS I [PRINT TEXT /? CAN'T - UNKNOWN VERSION OF THIS HANDLER/ JMP I [GOAWAY PAGE MAIN, -0; DEVICE TTY; TTYTBL -1; DEVICE PTR; PTRTBL -2; DEVICE PTP; PTPTBL -3; DEVICE CDR; CDRTBL -4; DEVICE LPT; LPTTBL -20; DEVICE MTA; MTATBL 1 ZBLOCK 20 /TABLE ENDS WITH A POSITIVE NON-ZERO NUMBER CDRTBL, CODE;CDCODE ZBLOCK 4 0 LPTTBL, WIDTH;LPWDTH LC;LPLC LV8E;LPLV ZBLOCK 4 0 MTATBL, PARITY;MTAPAR DENSITY;MTADEN FILES;MTAFIL ZBLOCK 4 0 TTYTBL, WIDTH;TTWIDTH CODE;TTCODE ALT;TTALT ECHO;TTECHO LC;TTLC PAYGE;TTPAGE TAB;TTTAB FILL;TTFILL FLAGG;TTFLAG CTRL;TTCTRL GAG;TTGAG DELAY;TTDELAY ZBLOCK 10 0 AUX, LOC;GENLOC FILES;GENFIL READO;GENREA VERS;GENVER ZBLOCK 10 0 PAGE WIDTH, "W;"I;"D;"T;"H;0 LC, "L;"C;0 LV8E, "L;"V;4000+"8;4000+"E;0 CODE, "C;"O;"D;"E;0 ALT, "A;"L;"T;4000+"M;4000+"O;4000+"D;4000+"E;0 ECHO, "E;"C;"H;"O;0 PAYGE, "P;"A;"G;"E;0 TAB, "T;"A;"B;0 LOC, "L;"O;"C;4000+"A;4000+"T;4000+"I;4000+"O;4000+"N;0 FILES, "F;"I;"L;"E;4000+"S;0 READO, "R;"E;"A;"D;4000+"O;4000+"N;4000+"L;4000+"Y;0 VERS, "V;"E;"R;4000+"S;4000+"I;4000+"O;4000+"N;0 PARITY, "P;"A;"R;4000+"I;4000+"T;4000+"Y;0 DENSITY,"D;"E;"N;4000+"S;4000+"I;4000+"T;4000+"Y;0 FILL, "F;"I;"L;"L;0 FLAGG, "F;"L;"A;"G;0 CTRL, "C;"T;"R;"L;0 EVEN, "E;4000+"V;4000+"E;4000+"N;0 ODD, "O;4000+"D;4000+"D;0 DELAY, "D;"E;"L;"A;"Y;0 GAG, "G;"A;"G;0 PAGE LPWDTH, 0 JMS I (GETWID JMS LPTST1 TAD NUM CMA DCA I (7200 JMP I LPWDTH LPTST1, 0 TAD I (7201 SPA CLA JMP L645 TAD VNO JMS I [BRANCH -1;OLDERR -2;LPTOK ZBLOCK 4 0 JMP I [NEWERR LPTOK, JMP I LPTST1 L645, JMS I [PRINT TEXT /? CAN'T AFFECT ANNALEX LPT/ JMP I [GOAWAY ASRTST, 0 TAD DHI SPA CLA JMP I ASRTST JMS I [PRINT TEXT /? CAN'T - NOT KL8E HANDLER/ JMP I [GOAWAY GENVER, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ALPHA JMP BADV DCA NUM TAD NUM AND (40 SZA CLA JMP BADV TAD NUM AND (37 DCA I VNOPTR JMP I GENVER GENREA, 0 CDF 10 TAD I DCWPTR CLL RTL CLL RAL TAD NO RAR CML RAR RAR DCA I DCWPTR CDF 0 JMP I GENREA GENFIL, 0 CDF 10 TAD I DCWPTR CLL RAL CLL RAL /ZERO LINK TAD NO RAR CML RAR DCA I DCWPTR CDF 0 JMP I GENFIL BADV, CLA JMS I [PRINT TEXT /? BAD VERSION LETTER/ JMP I [GOAWAY CRLF, 0 TAD [215 JMS I (TYPE TAD [212 JMS I (TYPE JMP I CRLF PAGE LPLV, 0 JMS I (LPTST1 TAD NO CLL RTL RTL TAD (4 DCA I (7201 JMP I LPLV LPLC, 0 JMS I (LPTST1 TAD NO CLL RTL RTL RAL CIA DCA I (7202 JMP I LPLC TTALT, 0 JMS I [TTST1 JMP I [NOTIMPL JMP I TTALT TTECHO, 0 JMS I [TTST1 TAD NO SZA CLA TAD (SKP CLA-SZA TAD (SZA DCA I (7200+120 JMP I TTECHO TTPAGE, 0 JMS I (ASRTST TAD VNO JMS I [BRANCH -1;OLDERR -2;OLDERR -3;OLDERR -4;PAGOK ZBLOCK 2 0 JMP I [NEWERR PAGOK, TAD I (7200+216 TAD (-SNA SZA CLA JMP I [REASEM TAD NO SNA CLA TAD (SZA CLA-CLA TAD (CLA DCA I (7200+216 JMP I TTPAGE TTTAB, 0 JMS I [TTST1 JMS I [GETC SNA JMP TTEO TAD (-"/ SNA CLA JMS I [GETC TAD (-"N SZA CLA JMP I [SYNTAX JMP NOTEC TTEO, TAD NO SNA CLA TAD (5000 TAD L200 JMS I (TECO NOTEC, JMS I [SRCH L200, 200;100;7 JMP I [REASEM DCA TEMP STA CLL RAL /-2 TAD TEMP DCA T2 TAD TEMP TAD (3 DCA T3 TAD NO SNA CLA JMP SETAB TAD TEMP TAD (-4 DCA T4 TAD T4 AND (77 TAD (1200 /TAD TTY240 DCA I T2 TAD (SZA CLA DCA I T3 JMP I TTTAB SETAB, TAD TEMP TAD (-12 DCA T4 TAD I T4 DCA I T2 TAD (SKP CLA DCA I T3 JMP I TTTAB PAGE TTFILL, 0 JMS I [TTST1 JMS I [SRCH 200;100;1377 JMP I [REASEM TAD (-1 DCA TEMP TAD NO CLL RAL TAD (2 TAD TEMP DCA T2 TAD I T2 DCA I TEMP JMP I TTFILL REASEM, JMS I [PRINT TEXT /? CAN'T - MUST REASSEMBLE KL8E SOURCE/ JMP I [GOAWAY TTDELAY,0 JMS I [TTST1 JMP I [NOTIMPL JMP I TTDELAY /ENTER WITH PTR TO POSSIBLE KEYWORD IN AC KEYSRCH,0 DCA KPTR KL, TAD I KPTR ISZ KPTR SNA JMP GOTKEY CIA DCA TEMP JMS I [ALPHA /IS IT ALPHANUMERIC? JMP EOK /NO TAD TEMP /COMPARE CLL RAL /LOW ORDER 11 BITS SNA CLA JMP KL /MATCHED, KEEP LOOKING JMP I KEYSRCH /DIDN'T MATCH EOK, JMS I [BACKC TAD TEMP CIA /INPUT STREAM RAN OUT OR HIT SPACE SPA CLA JMP GOTKEY /SPACE OR EOL MATCH FLAGGED CHARACTER JMP I KEYSRCH KPTR, 0 GOTKEY, JMS I [SCAN STA /SKIP EXTRA STUFF JMS I [SPACE ISZ KEYSRCH /TAKE GOOD RETURN 2 JMP I KEYSRCH PTRTBL, ZBLOCK 4 0 PTPTBL, ZBLOCK 4 0 PAGE TTGAG, 0 JMS TTST1 JMP I [NOTIMPL JMP I TTGAG TTFLAG, 0 JMS TTST1 JMS I [SRCH 200;200;247 JMP I [REASEM TAD (-2 DCA TEMP TAD NO SNA CLA TAD (SZA CLA-CLA TAD (CLA DCA I TEMP JMP I TTFLAG TTLC, 0 JMS TTST1 JMS I [SRCH 200;200;377 JMP I [REASEM TAD (5 DCA TEMP TAD I TEMP CLL TAD [200 SNL CLA JMP I [REASEM TAD NO SNA CLA TAD [40 /SNA CLA TAD (7610 /SKP CLA DCA I TEMP JMP I TTLC TTCTRL, 0 JMS TTST1 JMP I [NOTIMPL JMP I TTCTRL TTWIDTH,0 JMS GETWID JMS TTST1 TAD NUM AND [7 SZA CLA JMP I [BADWID TAD NUM TAD [-200 SNA CLA JMP I [BADWID JMS I [SRCH 200;200;7600 JMP I [REASEM IAC DCA TEMP TAD I TEMP AND [177 TAD (177+7200 DCA T2 TAD TEMP IAC DCA T3 TAD NUM CIA DCA I T3 TAD I T3 DCA I T2 JMP I TTWIDTH GETWID, 0 TAD NO SZA CLA JMP I [SYNTAX JMS OPTEQ JMS I [NUMBER SNA JMP I (BADWID DCA NUM TAD FLG SZA CLA JMP I [SYNTAX /NO DIGITS TAD NUM AND [7400 SZA CLA JMP I [NUMBIG JMP I GETWID TTST1, 0 JMS I (ASRTST TAD VNO JMS I [BRANCH -1;OLDERR -2;OLDERR -3;TTOK -4;TTOK /V3C ZBLOCK 4 0 JMP I [NEWERR TTOK, JMP I TTST1 OPTEQ, 0 JMS I [GETC TAD (-"= SZA CLA JMP NOE JMS I [SPACE JMP I OPTEQ NOE, JMS I [BACKC JMP I OPTEQ PAGE BADWID, JMS I [PRINT TEXT /? ILLEGAL WIDTH/ JMP I [GOAWAY OPRIN, 0 DCA N3 TAD (-4 DCA OKNT OPLP, TAD N3 JMS DGP TAD N3 RTL RAL DCA N3 ISZ OKNT JMP OPLP JMP I OPRIN DGP, 0 RTL RTL AND [7 TAD [60 JMS I [TYPE JMP I DGP OKNT, 0 N3, 0 NUM2, 0 GTEM, 0 SRCH, 0 TAD I SRCH ISZ SRCH TAD (7200-1 DCA XR1 TAD I SRCH ISZ SRCH CIA DCA CNT TAD I SRCH CIA DCA TEMP ISZ SRCH SRLUP, TAD I XR1 TAD TEMP SNA CLA JMP SRFND ISZ CNT JMP SRLUP JMP I SRCH SRFND, ISZ SRCH TAD XR1 JMP I SRCH GENLOC, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ONUM DCA NUM2 TAD FLG SZA CLA JMP I [SYNTAX JMS I [GETC DCA TEMP TAD TEMP SNA JMP ENOL TAD (-"= SZA CLA JMP I [SYNTAX ENOL, TAD DHI SPA CLA TAD (-200 TAD (-200 CLL TAD NUM2 SZL CLA JMP I [NUMBIG TAD NUM2 TAD (7200 /BASE OF HANDLER DCA NUM2 TAD TEMP SNA CLA JMP ODT GETNEW, JMS I [ONUM DCA NUM TAD FLG SZA CLA JMP I GENLOC JMS I [GETC SZA CLA JMP I [SYNTAX TAD NUM DCA I NUM2 JMP I GENLOC ODT, TAD I NUM2 JMS OPRIN TAD ("/ JMS I [TYPE TAD I [READ DCA GTEM /SAVE CHAIN STATUS JMS I [READ TAD [LINBUF DCA LINPTR TAD GTEM DCA I [READ JMP GETNEW PAGE MTAPAR, 0 TAD NO SZA CLA JMP I [SYNTAX JMS MTST1 TAD LINPTR DCA SAVPTR TAD (EVEN JMS I [KEYSRCH SKP JMP SETE TAD SAVPTR DCA LINPTR TAD (ODD JMS I [KEYSRCH JMP I [SYNTAX TAD (400 SETE, TAD (2 DCA I (7200 JMP I MTAPAR MTST1, 0 TAD VNO JMS I [BRANCH -1;OLDERR -2;OLDERR -3;OLDERR -4;MTOK -5;MTOK -6;MTOK ZBLOCK 4 0 JMP I [NEWERR MTOK, JMP I MTST1 MTADEN, 0 JMS MTST1 TAD NO SZA CLA JMP I [SYNTAX JMP I [NOTIMP JMP I MTADEN MTAFIL, 0 JMS MTST1 TAD NO DCA I (7201 JMP I MTAFIL BADCOD, JMS I [PRINT TEXT /? UNKNOWN CARD CODE/ JMP I [GOAWAY /SUPPOSED TO WORK ON ALL VERSIONS CDCODE, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I (OPTEQ JMS I [NUMBER TAD (-32 /026 SNA JMP C026 TAD (32-35 /029 SZA CLA JMP BADCOD JMS CHANGE LIST1;LIST2 JMP I CDCODE C026, JMS CHANGE LIST1;LIST3 JMP I CDCODE CHANGE, 0 TAD I CHANGE DCA P1 ISZ CHANGE TAD I CHANGE DCA P2 ISZ CHANGE CHLUP, TAD I P1 SNA JMP I CHANGE TAD (7200 /BASE OF HANDLER DCA P3 TAD I P2 DCA I P3 ISZ P1 ISZ P2 JMP CHLUP P1, 0 P2, 0 P3, 0 PAGE LIST1, 304;305;306 314;315;316 324;325;326;327 334;335;336 0 LIST2, 3203;4007;3502 7514;0577;3637 0104;1211;3374;0641 7316;3410;1376 LIST3, 7735;4076;0774 3314;1002;0305 3204;1273;3606;1341 3716;1175;3401 TECNAM, FILENAME TECO.SV TECO, 0 DCA SA TAD (TECNAM DCA ARG1 CLA IAC /LOOKUP ON SYS CIF 10 JMS I USR 2 ARG1, TECNAM /STARTING BLOCK 0 JMP I TECO /NOT FOUND TAD ARG1 DCA BLKN JMS I (7607 100 /READ 1 PAGE FROM TECO 7000 /BUFFER BLKN, 0 JMP I [SYSERR TAD BLKN DCA BLKN2 TAD SA DCA I (7002 /REL LOC 2 IS S.A. JMS I (7607 4100 7000 BLKN2, 0 JMP I [SYSERR JMP I TECO SA, 0 PAGE /7000-7177 BUFFER FOR TECO CCB /7200-7577 BUFFER FOR HANDLER FIELD 0 *200 $ |
Added src/os8/uni/CUSPS/CREF.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 | /2 PDP-8 OS/8 CROSS REFERENCE / / / / / / / / / /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. / / / / / / / / / / /CREF IS A CROSS REFERENCING PROGRAM FOR THE OS/8 ASSEMBLERS, /PAL8 AND SABR. THE PURPOSE OF CREF IS: / 1) PROVIDE A SEQUENCE NUMBERED (DECIMAL) OUTPUT LISTING / 2) PROVIDE A LIST OF ALL USER DEFINED SYMBOLS AND LITERALS / AND THE SEQUENCE NUMBER OF THE LINES IN WHICH THEY OCCUR /FIXES FOR MAINTENANCE RELEASE: /1. 1975 COPYRIGHT, VERSION 4, EDIT 1 /2. UNIFIED PAGE SIZE INTO ONE PLACE (& MADE IT WORK) /3. OUTPUT EXTRA FORM FEED AT END /4. MADE /A MEAN KEEP CREFLS.TM INSTEAD OF /E /FIXES FOR V3D: /INSTALLED ALL PUBLISHED PATCHES /DETAILS OF CREF. /CORE UTILIZED /FIELD 0 /0-3377: MAINLINE CREF CODE /4200-4577: INITIALIZATION CODE.EXECUTED ONCE AT BEGINNING /5600-6177: LATER OVERWRITTEN /DEVICE HANDLERS + BUFFERS ALLOCATED ACCORDING /TO REQUIREMENTS OF DEVICES. /USES 3400-5577 FOR INPUT HANDLER, OUTPUT HANDLER, + INPUT BUFFER /7200-7577: OUTPUT BUFFER /5600-7174: USED FOR REFERENCE STORAGE /FIELD 1 /0-NSYM*4+10 NSYM=NO. OF SYMBOLS.(USER+PERMANENT+LITERALS). /7424-7577 PSEUDO OP TABLE /THE REMAINDER IS USED FOR REFERENCES DURING PASSES GREATER THAN ONE /SYSTEM SCRATCH USED. /IF CREF DECIDES THAT MORE THAN 2 PASSES ARE REQUIRED, THE SYMBOL /TABLE IS SEGMENTED AT AN OPTIMUM POINT, AND PART IS SAVED /IN SCRATCH BLOCKS 27-50 FOR A THIRD (OR LARGER) PASS. /MAJOR ROUTINES AND CODE SECTIONS /MAIN-START OF TEXT PROCESSING.CHECKS FOR VALID LINE.READS AND WRITES /TEXT LINES /CVTSEQ CONVERTS SEQUENCE NUMBERS FROM OCTAL TO DECIMAL AND / WRITES THEM INTO THE OUTPUT BUFFER /GETLIN- GET A LINE OF INPUT INTO LINE BUFFER /WRTLIN- WRITE A LINE OF TEXT INTO OUTPUT BUFFER /ANALYZ- LINE SCANNING BEGINS.ALL SYMBOLS COLLECTED HERE /PACK- CHARACTER PACKING ROUTINE. THE SCHEME USED MAPS LETTERS /A-Z AND [,],\,^ INTO 0-37. 0-9 INTO 40-51 / THE PACKING IS: CHAR1-300^52+CHAR2-300 /SYMCHK- BINARY SYMBOL TABLE SEARCH /ENTRY- MAKES ENTRIES IN USER SYMBOL TABLE /BUMP- BUMPS REFERENCE COUNTER OF SYMBOLS IN PASS 1 /ENDPAS- TERMINATES A PASS THROUGH INPUT /PASSN2- FILLS IN REFERENCE STORAGE ARE DURING PASSES / AFTER PASS ONE /DUMP- DUMPS CREF TABLE TO OUT BUFFER /SWITCHES IN CREF: /Q=INPUT IS SABR CODE /R=INPUT IS RALF CODE /P=DISABLE LISTING OUTPUT. RE ENABLE FOR CREF TABLE /X=DON'T CREF LITERALS /M=MAMMOTH FILE(2 PASSES) /E=DON'T ELIMINATE CREFLS.TM /U=/P + NO SYMBOL TABLE DECIMAL PAGLEN=66 /V3C MOST PAPER HAS 66 LINES PER PAGE OCTAL PAGLEN=PAGLEN-6 /HEADINGS VERSN="5 PATCHL="B /PAGE ZERO FOR CREF *10 /AUTO INDEX REGISTERS XRLINE, SYMTAB-1 /USED TO MOVE UP SYMBOL TABLE XRLIT, -1 /DITTO XRSYM1, 0 XRSYM2, 0 /THESE ARE USED IN SEARCHING SYMBOLS OUSAVX, 7611 /USED TO SAVE ARGS FOR /M *20 TXTBEG, LINBUF+12 /TEXT STARTS HERE MARGIN, LINBUF-1 /LINE BUFFER COUNT, 0 /GENERAL COUNTER CHAR, 0 /HOLDS CHARACTER TO EXAMINE SEQNO, 0 /SEQUENCE NO. SAVE, 0 TEMP, 0 TEMP1, 0 /THESE THREE ARE TEMPORARY STORAGE DSWIT, 0 RSWIT, 0 /CD SWITCH WORDS MLF, -212 /-LINE FEED SYMCNT, -6 /ALLOW 6 CHARACTER SYMBOLS ISYM, SYM1 /POINTER TO SYMBOL COLLECTOR PSWCH, 0 /PACK SWITCH..LEFT OR RIGHT HALF SYM1, 0 SYM2, 0 SYM3, 0 /COLLECT SYMBOLS HERE USER, 0 /USER MUST FOLLOW SYM3! 110 /INITIAL SYMBOL TABLE ENTRIES PSEUDO, 0 0 /THESE 2 GET FILLED IN AT INITIALIZATION PASN2, PASSN2 /IF NOT PASS 1 GO HERE WITH A SYMBOL PASSG1, -1 /=0 IF NOT PASS1 MAXFLD, 0 /-# OF FIRST NON-EXISTENT FIELD CONST, 0 /EITHER 0 OR 96(10) FLDPTR, 0 /POINTER TO CORE FIELD USR, 200 /MONITOR IN CORE..CHANGED TO 7700 DOLLAR, DOLL1 SYMFLD, 2 /FIELDS WITH SYMBOLS: BITS 5-11 MASKF, 0 /MASK FOR ABOVE WORD /THESE ARE THE DEFAULT PARAMETERS FOR THE I/O ROUTINES /AJUSTED ACCORDING TO REQUIREMENTS OF DEVICES REQUESTED OUCTL=4200 OUBUF=7200 OUDEVH=4000 /VARIABLE-MAY ALSO BE 3600 OUFLD=OUCTL&70 INCTL=0400 INBUF=4600 /ALSO 4200 INDEVH=3400 INRECS=2 /ALSO 3 INFLD=INCTL&70 /(SUBJECT TO CHANGE WITHOUT NOTICE!) SYMADD, 0 /CONTAINS SYMBOL ADDRESS SYMNUM, 0 /ABOVE MOD 4 K0=USER BUFFER, 0 /POINTER FOR UNPACKING R=52 RAD=52 /RADIX FOR CONVERTING SYMBOLS ADDER, 0 SYSM, 0 BASE, 0 /THESE ARE USED TO END A PASS SYMLIM, 0 /UPPER LIMIT FOR SYMBOL REF TABLE FINI, 0 IOSR, 0 JMS I [7607 CNTROL, 4010 /THIS IS ON PAGE ZERO MAINLY CTPTR, 4 /BECAUSE CTPTR IS USED A LOT SCRATCH=27 SCRATCH /SYSTEM SCRATCH FOR OVERFLOW SKP /ERROR ON SYS!!! JMP I IOSR HIOERR, JMS I [ERROR HNDERR LNPRPG, -PAGLEN /# LINES OF TEXT PER PAGE LINES, -PAGLEN /V3C MASTER COPY THOUS, 6030 /CONVERSION TABLE..OCTAL-DECIMAL 7634 7766 7777 FPUT, STORIT /INITIALLY POINTS TO DCA I XRLINE M12=THOUS+2 M1=THOUS+3 DPAT, 0 DCA I (NOFIRM DCA I (NOFORM JMP I DPAT *200 JMP I (ST1 /INITIALIZATION GETS DESTROYED BREAK, JMP I (CHAIN /CHAIN ENTRY POINT ZBLOCK 7 /BREAK TABLE. HOLDS SYMBOL /NUMBERS DURING VARIOUS PASSES /OF CREF. THE ENTRIES ARE THE NUMBER /OF THE LARGEST SYMBOL /WHOSE REFERENCES ARE IN A PARTICULAR /FIELD. THE 0TH ENTRY CORRESPONDS TO /FIELD 0. ERROR, 0 CLA CDF 0 TAD I ERROR DCA BUFFER TAD [-6 DCA SYMCNT /12 CHARACTER MESSAGES TAD TTY /POINT TO TTY OUT ROUTINE DCA [OCHAR TAD I BUFFER JMS I [DIVIDE /CONVERT AND PRINT MESSAGE ISZ SYMCNT JMP .-3 JMP I [7605 TTY, TTYPRT /THE INPUT LINE IS STORED HERE. XRLINE POINTS TO VARIOUS /PLACES THROUGHOUT THE SCAN, AND CHAR HOLDS THE CORRESPONDING /CHARACTER WHILE WE EXAMINE IT. LINBUF=. LITBUF=.+6 VERTST=.+4 *251 FILEXT, 0 CDF 10 TAD I (7604 CDF 0 SNA TAD (1423 CDF 10 DCA I (7604 CDF 0 JMP I FILEXT P2ADJ, 0 TAD I (PASS2 SNA JMP I P2ADJ DCA I (OUBLK /LAST BLOCK WRITTEN TO CDF 10 TAD I OUSAVX CDF 0 DCA I (OUELEN /SIZE OF HOLE CDF 10 TAD I OUSAVX DCA LNPRPG /NO. LINES IN LAST BLK WRITTEN TAD I OUSAVX /NO. BLKS WRITTEN SO FAR CDF 0 JMP I (MP2 /NO ENTER MORCOR, 0 CLA CLL IAC DCA MAXFLD /IN CASE NOT DEFINED TAD I (7777 AND (70 SNA JMP I MORCOR /USE OLD WAY TO DETERMINE CLL RTR RAR /NEED IT HI 3 DCA MAXFLD JMP I (DONCOR OTYPE, 0 CDF 10 TAD I [7600 /DETERMINE WHAT TYPE OF DEVICE AND [17 DCB=7760 TAD (DCB-1 DCA Q TAD I Q /CHECK DEVICE CONTROL BLOCK CDF 0 JMP I OTYPE Q, 0 *400 /MAIN IS THE START OF CREF.(IF SABR, NXTLIN IS START). /AT MAIN WE SCAN A LINE OF TEXT FOR BINARY DATA. IF NONE IS FOUND, /THE LINE IS WRITTEN OUT AND A NEW LINE READ. IF BINARY IS FOUND, /THE SEQUENCE NUMBER OF THE LINE IS PLACED IN THE OUTPUT /BUFFER AND THE ANALYSIS BEGINS AT ANALYZ. MAIN, JMS I [FORM /FORM FEED (CR/LF) JMS I [HEADER /SKIP HEADER JMS I (GETLIN /AND ONE CR/LF NOTBIN, JMS WRTLIN NXTLIN, JMS I (GETLIN TAD I XRLINE DCA CHAR JMS I [CHECK /CHECK FOR ALPHA LINE 301 -336 JMP NOALPH NOFIRM, ISZ LNPRPG /NEED A FORM FEED YET? JMP NOTBIN /NOT YET JMS I [FORM /NOW!!! JMP NOTBIN NOALPH, TAD CHAR TAD MCTLD /IF RUB OUT, USED /D SNA JMP I [ENDPAS /CAN'T OUTPUT SYM TABLE TAD (163 /CHECK FOR FORM FEED SNA JMP MAIN /YES.. TAD (-41 /IF ------, HE USED /T(DUMMY!) SNA CLA JMP MAIN /GIVE HIM A FORM FEED NOFORM, ISZ LNPRPG /=0 AFTER PASS1 NEW PAGE? SKP /SKIP A FORM FEED JMS I [FORM ISZ SEQNO /BUMP SEQUENCE JMP MAIN2 TAD [140 DCA CONST MAIN2, JMS I [PASTST /STILL PASS ONE? JMP MAIN3 TAD SEQNO JMS CVTSEQ TAD [-3 /3 SPACES JMS I [SPACE MAIN3, TAD CHAR TAD [-215 SNA CLA JMP NOTBIN JMP I [ANALYZ MCTLD, -377 /RUB OUT /THIS ROUTINE CONVERTS SEQUENCE NUMBERS TO DECIMAL NUMBERS AND /PUTS THEM INTO THE OUTPUT BUFFER. IT IS USED WHEN PRINTING /THE CREF TABLE ALSO /THE CALLING SEQUENCE IS: AC=OCTAL NUMBER TO BE CONVERTED. /THE OUTPUT IS AUTOMATICALLY 4 DIGITS. POSPT=TEMP1 DIGPT=MASKF CVTSEQ, 0 TAD CONST DCA SAVE /TEMP STORE TAD CONST SZA CLA TAD [4 DCA DIGIT1 DCA DIGIT1+1 DCA DIGIT1+2 DCA DIGIT1+3 /ZERO CONVERSION AREA TAD [-4 DCA COUNT TAD SAVE CLL /SEE IF SEQUENCE IS ABOVE 8000(10) TAD CONST /EITHER 0 OR 140(8) SNL JMP CVT2 /O.K. DCA SAVE /CORRECTED NUMBER TAD [10 DCA DIGIT1 /PUT AN 8 INTO THERE FOR PRINTING CVT2, CLA TAD (DIGIT1 DCA DIGPT TAD (THOUS DCA POSPT TAD SAVE RPEAT, CLL TAD I POSPT /POINTS TO -1000,-100,-10, OR -1 SNL /IF LINK ON,WE DID TOO MUCH JMP ADDUP /COLLECT THE CONVERTED DIGIT ISZ I DIGPT /BUMP THE COUNTER DIGIT1-DIGIT1+3 JMP RPEAT ADDUP, CIA /RESTORE THE LAST ONE TAD I POSPT CIA ISZ POSPT ISZ DIGPT ISZ COUNT /DONE ALL 4? JMP RPEAT TAD [-4 /YES..OUTPUT THE CONVERTED NUMBERS DCA COUNT TAD (DIGIT1 DCA DIGPT SPCLUP, TAD I DIGPT TAD ZSPRES /LEADING ZERO SUPPRESSION DCA ZSPRES TAD ZSPRES SNA CLA /ZSPRES IS 0 UNTIL A VALID # IS FOUND TAD (-20 TAD I DIGPT TAD [260 JMS I [OCHAR ISZ DIGPT ISZ COUNT JMP SPCLUP DCA ZSPRES JMP I CVTSEQ DIGIT1, 0 0 0 0 ZSPRES, 0 /WRTLIN TRANSFERS INPUT LINE TO OUTPUT BUFFER WRTLIN, 0 TAD MARGIN DCA XRLINE /RESET MARGIN TO LEFT OLINE, TAD I XRLINE /PICK UP TEXT CHARACTER DCA CHAR TAD CHAR SNA /IF NULL,WAS PREMATURE TERMINATOR JMP FLUSH /YES. READ AND WRITE THE REST JMS I [OCHAR /OUTPUT THE CHARACTER TAD CHAR TAD MLF /WAS THIS END OF LINE? SZA CLA JMP OLINE /NO..LOOP AGAIN JMP I WRTLIN FLUSH, JMS I [HEADER JMP I WRTLIN /OVERFLOW NOT IN BUFFER *600 /ANALYZ IS A WORK HORSE. IN IT CHARACTERS ARE EXAMINED AND /SYMBOLS ARE BUILT UP. IF A SYMBOL OR A REFERENCE TO A /SYMBOL IS FOUND,THE APPROPRIATE ACTION IS TAKEN;I.E. /EITHER ENTERING A NEW SYMBOL, BUMPING THE RFERENCE COUNTER, /OR BOTH. ANALYZ, TAD SEMISV /IF #0, LAST WAS SEMICOLON SNA TAD TXTBEG /IF=0, START NORMALLY DCA XRLINE SCAN, TAD I XRLINE DCA CHAR JMS I [CHECK /ALPHANUMERIC CHECK 301 -332 SKP /NONE..TEST FOR SPECIAL CHARS JMP PAKIT /FOUND A LETTER PACK AWAY JMS I [CHECK /TEST FOR 0-9 260 -271 SKP /NOPE..COULD BE SABR JMP SCAN1 SCAN3, JMP TSTIT /IF SABR, THIS LOC IS AND 0 JMS I [CHECK /TEST FOR [,],\,AND ^ 333 -336 SKP JMP PAKIT /VALID SABR CHARACTERS TSTIT, JMS REPACK TAD CHAR /IS THIS A ;? TAD (-273 /IF SO, SAVE PLACE ON LINE SZA CLA JMP .+3 /IF ; SAVE PLACE ON LINE TAD XRLINE DCA SEMISV TAD SYM1 /IS THERE A LEGAL SYMBOL? SNA CLA JMP TSTEND /NO..LOOK FOR A LINE FEED TAD CHAR TAD (-257 SNA CLA /A COMMENT? IAC /YES..NEED SPECIAL RETURN DCA SLSWIT JMS I [SYMCHK /THIS IS EITHER A REFERENCE OR A /DEFINITION OR A PERMANENT SYMBOL,PSEUDO PSEUDO /CHECK PSEUDOS FIRST HC1, JMP USSYM /NOT A PSEUDO-OP /BECOMES JMP PATCH IF /M USED TAD SYMADD TAD [3 DCA SAVE /SYMCHK RETURNS ADDRESS OF SYMBOL IN SYMADD CDF 10 TAD I SAVE DCA SAVE CDF 0 JMS I (CLEAR /WIPE OUT PSEUDO OP JMP I SAVE /PERFORM THE NECESSARY OP FOR PSEUDO PATCH, TAD SYM1 RTL PATCH1, CLA SZL SPA /LG-LH SPLIT JMP B USSYM, JMS I [PASTST JMP I PASN2 JMS I [SYMCHK USER /CHECK PERMANENT AND USER SYMBOLS JMP NTER /DIDN'T FIND IT; SO WE HAVE TO ENTER IT JMS I (TSTPRM /FOUND;TEST FOR PERMANENT SYMBOL JMP B /WAS A PERMANENT SYMBOL JMP BMPIT /FOUND AND NOT PERMANENT;INCREASE THE /REFERENCE COUNTER BY ONE NTER, JMS I [ENTRY /ENTER THE SYMBOL BY PUSHING DOWN ALL /THE ONES BELOW IT BMPIT, JMS I [BUMP /AND INCREASE THE REFERENCE COUNT B, JMS I (CLEAR /SETUP FOR NEXT TAD SLSWIT /WAS LAST A /? SZA CLA JMP I (NOTBIN JMP SCANER TSTEND, TAD CHAR TAD MLF /ARE WE DONE WITH THIS LINE? SZA CLA JMP .+3 /IF LF, CLEAR OUT SEMICOLON CLRSEM, DCA SEMISV JMP I (NOTBIN TAD CHAR TAD (-257 SNA /COMMENT LINE? JMP CLRSEM TAD (15 /A "? SNA ISZ XRLINE /YES..SKIP NEXT LETTER TAD [-2 /A $? SNA JMP I DOLLAR TAD [-4 SNA /TEST FOR ( JMP I (LIT1 TAD (-63 SZA CLA /TEST FOR [ JMP SCANER /NONE OF THEM KEEP GOING JMP I (LIT2 SCAN1, TAD SYM1 /IF WE DON'T HAVE A SYMBOL SNA CLA /DON'T PACK THIS CHARACTER JMP SCAN PAKIT, TAD CHAR JMS I [PACK /PACK A CHARACTER JMP SCAN REPACK, 0 /RESET SYMBOL AREA TAD [-6 DCA SYMCNT /SYMBOL COUNTER..6 CHARS TAD (SYM1 DCA ISYM DCA PSWCH JMP I REPACK SEMISV, 0 SLSWIT, 0 SCANER, TAD CHAR /IF LAST WAS ; READ IN OVERLAY TAD (-273 SNA CLA JMP I (NOTBIN JMP SCAN SUB3, 0 /SUBTRACTS 3 FROM CTPTR TAD [-3 TAD CTPTR DCA CTPTR JMP I SUB3 *1000 /THE PACKING SCHEME IS THE SAME AS THAT USED IN PAL8. THAT IS /IN EACH WORD WE HAVE 2 CHARS. CHAR1-300^45+CHAR2-300. /PERMANENT SYMBOLS HAVE THE FIRST WORD SET TO A NEGATIVE. PACK, 0 DCA BLAH TAD SYMCNT SMA CLA /OVERFLOW PROTECT JMP I PACK TAD BLAH AND [77 /STRIP IT TAD (-37 /INCLUDE VALID SABR CHARS SMA SZA TAD (-20 /NUMBERS GET MAPPED: 40-51 TAD (37 /LETTERS ARE MAPPED:01-37 ISZ PSWCH /WHICH HALF? JMP LEFT TAD I ISYM DCA I ISYM ISZ ISYM JMP PCKOUT LEFT, CLL RAL /*2 DCA TLOW TAD TLOW CLL RTL DCA SAVE /*10 TAD SAVE CLL RTL /*40 TAD SAVE TAD TLOW /*52!! DCA I ISYM CLA CMA /RESET FLIP FLOP DCA PSWCH PCKOUT, ISZ SYMCNT NOP JMP I PACK BLAH, 0 /SYMCHK IS THE BINARY SEARCH ROUTINE FOR CREF. SYMBOLS /ARE A GROUP OF FOUR ENTRIES:THE FIRST THREE WORDS ARE /THE STRIPPED-40 REPRESENTATION OF THE SYMBOL. THE LAST /IS THE REFERENCE COUNTER (IN THE CASE OF A USER SYMBOL) OR /A -1 (IN THE CASE OF A PERMANENT SYMBOL). IN PSEUDO OPS /THE FOURTH WORD DESCRIBES THE DESTINATION OR ACTION /TO BE PERFORMED BY THAT PSEUDO OP. /THE TABLE USER,0 HAS ENTRIES WHICH ARE THE SYMBOL NUMBER /AND NOT THE ABSOLUTE CORE LOCATION OF A SYMBOL. /CALLING SYMCHK: / JMS SYMCHK / TABLE /FIRST WORD OF TWO WHICH GIVES THE LIMITS /MOD 4 OF THE APPROPRIATE TABLE /SYMCHK RETURNS WITH THE NUMBER OF THE SYMBOL IN SYMNUM /AND THE CORE ADDRESS OF THE SYMBOL IN SYMADD. IF THE /SYMBOL IS NOT FOUND, THESE WORDS CONTAIN THE PROPER LOCATION /FOR THE SYMBOL. SYMCHK, 0 TAD I SYMCHK DCA THI DCA LAST TAD I THI /GET LIMITS OF TABLE DCA TLOW /LOW LIMIT ISZ THI TAD I THI DCA THI /HIGH LIMIT COMP, TAD TLOW CIA TAD THI CLL RAR /HALF DIFFERENCE BETWEEN THE LIMITS SNA /IF THIS IS ZERO, WE'RE DONE ISZ LAST /THIS WILL BE LAST TRY TAD TLOW /FORM THE NUMBER OF THE ENTRY DCA SYMNUM /WE ARE GOING TO TEST NOW JMS SETXR /SET UP INDICES FOR TEST ISZ COUNT /WE ONLY WANT -3 IN COUNT! S1, CLL CDF 10 TAD I XRSYM2 /SYMBOL TABLE ENTRY CDF 0 AND [3777 /MASK PERMANENT SYMBOL BIT CMA /USE ONE'S COMPLEMENT TAD I XRSYM1 /OUR COLLECTED SYMBOL CMA /0 AC IF EQUAL SZA CLA /WATCH THE LINK!! JMP COMPR /NOW TEST FOR HI OR LOW COMPARISON ISZ COUNT JMP S1 ISZ SYMCHK /TAKE FOUND ENTRY JMP OUT1 COMPR, TAD LAST /LAST GASP? SZA CLA JMP OUT2 /YEP TAD SYMNUM /LINK TELLS THE TALE! SNL JMP COMP-1 /ADJUST HIGH LIMIT DCA TLOW JMP COMP OUT2, TAD SYMNUM SZL IAC DCA SYMNUM OUT1, TAD SYMNUM /ADDING THE FIRST ENTRY AFTER SZA /AN EXPUNGE WILL CAUSE SYMNUM TO BE 0 /AUTOMATICALLY IT HAS TO BE 1 JMP .+3 ISZ SYMNUM JMP OUT1 CLL RTL /FORM SYMADD FROM SYMNUM DCA SYMADD /CORE ADDRESS OF THE SYMBOL ISZ SYMCHK JMP I SYMCHK THI, 0 TLOW, 0 LAST, 0 /THESE TABLES DEFINE THE LIMITS OF CORE STORAGE IN CREF. /BASTBL GIVES THE START LOC WHERE REFERENCES WILL BE STORED. /LTTBL GIVES THE LO CORE LIMIT OF THOSE REFS. THERE IS ONE ENTRY FOR /EACH FIELD BASTBL, 7174 /THIS TABLE GIVES THE BASE 7424 /LOCATIONS INEACH FIELD WHERE THE 7574 /REFERENCES BEGIN 7574 /REFS START HERE AND BUILD TOWARD LOWER 7574 /CORE ADDRESSES 7574 7574 7574 LTTBL, DOLL1 /THIS TABLE GIVES THE LOW 10 /CORE ADDRESS OF THE REFS IN EACH FIELD 4 /NOTE:ENDPAS JUGGLES THESE AROUND 4 /TO OPTIMIZE CREF STORAGE 4 4 4 4 DIVE, 0 SNA /IF 0, PRODUCE A SPACE JMP DIVSPC TAD (-37 SMA SZA TAD [-60 TAD [77 DIVSPC, TAD [240 JMP I DIVE SETXR, 0 /SETUP INDEX REGS FOR SEARC,ENTRY TAD SYMNUM /SETUP WHEN FOUND SYMBOL CLL RTL /CORE ADDRESS OF SYMBOL TAD M1 DCA XRSYM2 TAD [SYM1-1 DCA XRSYM1 TAD [-4 DCA COUNT JMP I SETXR *1200 /ENTRY IS SLOW! IT ENTERS A SYMBOL BY PUSHING DOWN WHAT IS /BELOW THE PROPER ENTRY.ENTRY CAN ONLY BE USED IN MAKING /ENTRIES IN THE PERMANENT (USER) SYMBOL TABLE. /ENTRY CONDITIONS:AC SHOULD BE CLEAR! / SYMNUM SHOULD HAVE THE SYMBOL NUMBER OF THE / PROPOSED ENTRY. SYMCHK RETURNS THIS WHEN THE / SEARCH IS UNSUCCESSFUL. ENTRY, 0 JMS I (SETXR /SETUP INDEX REGISTERS TAD USER+1 /CHECK FOR POSSIBLE OVERFLOW CMA /WE DON'T WANT TO WIPE PSEUDO TABLE TAD PSEUDO SPA SNA CLA JMP NMOR /BAD!OVERFLOW HAS OCCURRED ISZ USER+1 /OK..BUMP SYMBOL COUNT TAD USER+1 CLL RTL /CORE ADDRESS OF ENTRY DCA TEMP1 TAD TEMP1 TAD [-4 /GIVES BOTTOM OF TABLE NOW DCA SAVE TAD SAVE /TEST FOR AN 'ADD-ON' ENTRY CMA TAD SYMADD DCA COUNT /-# OF WORDS TO MOVE CDF 10 NTR1, TAD I SAVE DCA I TEMP1 /THE BAD LOOP! CMA TAD SAVE DCA SAVE /I WISH WE HAD A DSZ!(DECREMENT &SKIP ON 0 CMA TAD TEMP1 DCA TEMP1 ISZ COUNT /DONE? JMP NTR1 /UNFORTUNATELY NOT CDF 0 ENTER, CLA /NOW PUT IN OUR ENTRY TAD [-4 DCA COUNT /THE 4TH IS A 0 WORD (USER FOLLOWS SYM3) NTR2, TAD I XRSYM1 CDF 10 DCA I XRSYM2 CDF 0 ISZ COUNT JMP NTR2 JMP I ENTRY NMOR, JMS I [ERROR /SYMBOL OVERFLOW SYMERR TXT, JMS GETC TAD (-240 /IGNORE SPACES SNA CLA JMP TXT TAD CHAR CIA /STRING DELIMITER DCA DELMIT TXT2, JMS GETC TAD DELMIT /REACHED END OF STRING? SNA CLA JMP I [B /YES TAD CHAR /NO..END OF LINE? TAD [-215 SNA CLA JMP I [B JMP TXT2 GETC, 0 TAD I XRLINE DCA CHAR TAD CHAR JMP I GETC /GET A CHAR;STORE IT, RETURN IN AC DELMIT, 0 BUMP, 0 /ROUTINE TO BUMP REFERENCE COUNTERS TAD SYMADD TAD [3 DCA SAVE /ADDRESS OF REFERENCE COUNTER CDF 10 TAD I SAVE SPA CLA /IF 4000 BIT ON, AN EXTRA ENTRY HAS /ALREADY BEEN MADE FOR THIS SYMBOL JMP ONEISZ TAD CONST SNA CLA /IS SEQNO >4095? JMP ONEISZ /NOT YET TAD [4000 TAD I SAVE DCA I SAVE /MARK IT AS BEING NOTED CMA ONEISZ, TAD M1 /EITHER -1 OR -2 DCA COUNT BUMP2, TAD [3777 /THIS CODE PROTECTS AGAINST AND I SAVE />2048 REFS. IF SIGN BIT EVER BECOMES ISZ I SAVE /NEG. ON THE ISZ,KILL IT!! NOP /USELESS PROTECTION TAD [3 /IF AC GOES NEG. HE DIES!! SPA CLA JMP ERR7 ISZ COUNT JMP BUMP2 CDF 0 JMP I BUMP ERR7, CDF 0 JMS I [ERROR REFERR PTRSET, 0 /THIS ROUTINE TAKES TAD [3 /THE SYMBOL TABLE THAT DCA BUFFER /PRODUCED AND SETS UP EACH REFERENCE DCA SYMNUM /AREA WITH A POINTER INTO THE AREA CLA CMA TAD USER+1 /AND A 0 LOCATION TO HOLD THE DEFINITION CIA /SEQUENCE NO. DCA COUNT PTRST1, TAD [4 /START PICKING UP POINTERS TAD BUFFER DCA BUFFER ISZ SYMNUM /CORRESPONDING SYMBOL NUMBER JMS I (GETFLD /FORM CDF N FOR REFERENCE AREA DCA CDTFLD CDF 10 TAD I BUFFER /IF PERMANENT SYMBOL, THIS LOC=0 SNA /IF SO, SKIP IT JMP PTRST2 TAD M1 DCA SAVE CDTFLD, HLT DCA I SAVE ISZ SAVE /POINT TO INDEX WORD TAD [2 DCA I SAVE PTRST2, CDF 0 ISZ COUNT JMP PTRST1 JMP I PTRSET *1400 /ENDPAS IS ARRIVED AT WHEN A PASS THROUGH THE INPUT HAS BEEN /COMPLETED.SOME COMPLICATED DIDDLING GOES ON HERE. ENDPAS, ISZ PASSG1 JMP I (DUMP /DUMP WHAT WE HAVE JMS I (ENDFIX IAC /POINT TO END OF NEW TABLE DCA USER+1 /YES..THAT BECOMES THE TOTAL NO. /OF SYMBOLS IN OUR NEW TABLE TAD [3777 /O.K...NOW READ IN A SEGMENT AND CNTROL /NOW FORMING READ CONTROL DCA CNTROL TAD [4 /READ SYMBOLS INTO F1 AT LOC.4 DCA CTPTR JMS IOSR /DO THE READ NDPS1, DCA FLDPTR /INITIALLY AT FIELD 0 TAD [6034 DCA I [OUTSW END2, DCA ADDER /ADDER HOLDS THE COUNT OF THE NUMBER /OF REFERENCES TO THE SYMBOLS THUS FAR /EXAMINED. THIS IS COMPARED TO THE AVAILABLE /CORE IN A PARTICULAR FIELD. WHEN THAT OVER- /FLOWS WE HAVE TO EITHER MOVE TO ANOTHER FIELD /FOR THE REFERENCES OR WRITE PART OF THE SYMBOL /TABLE ONTO SYS. TAD (BASTBL TAD FLDPTR DCA TEMP1 /INITIAL BASE OF REFS TAD I TEMP1 DCA BASE TAD FLDPTR /NOW GET MASK FOR QUESTION.. CMA /DOES THIS FIELD HAVE SYMBOLS? DCA COUNT CLL CML RAL ISZ COUNT JMP .-2 DCA MASKF TAD FLDPTR /GET ADDRESS OF UPPER LIMIT TAD (LTTBL /FOR LATER DCA SYMLIM TAD FLDPTR /SET NEW LIMIT IN FIELD 1 TAD [BREAK DCA NUSER /THE NEW LIMIT FOR REFS IS DCA I NUSER /ZERO SYMBOL IN CURRENT FIELD LOC. TAD I SYMLIM FUJ1, TAD CTPTR /IF MORE THAN 2 FIELDS EXIST /THIS BECOMES A NOP. THE LIMIT IN /FIELD 1 IS AT THE BOTTOM OF THE /SYMBOL TABLE DCA LIMIT NDPS2, TAD CTPTR /CTPTR HOLD THE CORE ADDRESS OF THE /THE 4TH LOCATION OF A GIVEN SYMBOL. THIS /IS ALSO THE REFERENCE COUNTER FOR THAT SYMBOL CLL RTR /FORM SYMBOL NUMBER AND [1777 DCA COUNT /SAVE FOR LATER TAD ADDER CIA TAD BASE /NEXT REFERENCE AREA DCA SAVE /IF IT FITS IN THIS AREA /USED WHEN WE MAKE ACTUAL REF ENTRIES CDF 10 TAD I CTPTR /# REFS FOR THIS SYMBOL DCA TEMP TAD [3 TAD CTPTR DCA CTPTR TAD TEMP SPA CLA /PERMANENT SYMBOL JMP PRMSYM /YES TAD I CTPTR AND [3777 /MASK GT 4095 BIT TAD ADDER DCA ADDER /SEE IF THIS SYMBOL WILL FIT IN THE /CURRENT FIELD HOLDING REFS CDF 10 /MUST ADD UP NEW REFS ALSO TAD I CTPTR AND [3777 CDF 0 CLL TAD LIMIT /IF LINK GOES ON, REFS WON'T FIT SZL JMP CUTSYM CMA CLL /WHEN UPPER MEETS LOWER,QUIT TAD SAVE SNL CLA JMP CUTSYM /OK..QUIT! CDF 10 TAD SAVE /FITS..PUT IN BASE WHERE THIS SYMBOL'S /REFS BEGIN DCA I CTPTR ISZ ADDER ISZ ADDER /2 EXTRA FOR BOOKKEEPING PRMSYM, CDF 0 TAD COUNT /SYMBOL NUMBER..REMEMBER? DCA I NUSER TAD SYMFLD /BUT..IF THIS FIELD HAS SYMBOLS, AND MASKF /LET'S REDUCE HIS AVAILABLE SPACE SNA CLA JMP .+4 /NO SYMBOLS TAD [4 TAD LIMIT DCA LIMIT TAD COUNT /SEE IF WE ARE DONE CMA TAD USER+1 SNA JMP I (DONE /YES!! PROBABLY FORGOT SOMETHING DCA SYSM /BECOMES # SYMBOLS TO WRITE OUT IN CASE /WE RUN OUT OF ROOM ISZ CTPTR JMP NDPS2 /CYCLE FOR NEXT SYMBOL CUTSYM, CLA ISZ FLDPTR /GO TO ANOTHER FIELD TAD FLDPTR /DOES IT EXIST? CLL TAD MAXFLD SNL CLA JMP END3 /YES..GROOVY TAD SYSM /NOPE..HAVE TO WRITE REMAINDER OUT CLL RAL /CONVER TO PAGES AND (3700 /FORM CONTROL WORD FOR WRITE TAD [4110 DCA CNTROL JMS I (SUB3 /RESET CTPTR TAD I NUSER IAC /FUDGE LAST ENTRY IN TABLE DCA USER+1 /NEW END OF TABLE JMS IOSR /WRITE THE SEGMENT CDF 10 /PUT A 7777 AT END OF CURRENT SEG. CLA CMA DCA I CTPTR CDF 0 JMP I (DONE+1 /NOT DONE YET!! END3, JMS I (SUB3 JMP END2 /AND RESUME THY WORK!! NUSER, 0 LIMIT, 0 *1600 /PASSN2 IS ENTERED WHEN WE HAVE COLLECTED SOME SORT OF A /SYMBOL AND IT IS NOT PASS ONE. WE HAVE TO MAKE SURE IT /IS A USER SYMBOL OR LITERAL. IF IT IS, WE HAVE TO ENTER /THE SEQUENCE # IN THE AREA SET UP FOR REFERENCES TO THIS /SYMBOL. ALSO, IF THE REFERENCE IS A DEFINITION, THE SECOND /LOCATION IN THE REFERENCE AREA IS LOADED WITH THE SEQUENCE /NO. OF THE LINE WE ARE DOING. PASSN2, JMS I [SYMCHK USER /IS IT KNOWN TO US? JMP I [B /NO..BUT IT MIGHT BE IN A SEGMENT EITHER /ALREADY DONE OR YET TO BE DONE!! JMS TSTPRM /TEST FOR A PERMANENT SYMBOL JMP I [B /PERMANENT SYMBOL /NOTE:SAVE IS SET UP IN TSTPRM TO CONTAIN THE ADDRESS OF THE /INDEX WORD. WE USE THIS LATER ON JMS GETFLD DCA CDFN /DETERMINE WHAT FIELD THIS SYMBOL HAS ITS /REFS IN AND FORM A CDF N TAD CHAR TAD MCOMMA /IS THIS A DEFINITION? SZA TAD MEQ /AN= MAYBE? SNA CLA IAC /ONE OR OTHER..MARK AS DEFINITION DCA DEF CDF 10 TAD I SAVE /PICK UP POINTER TO REFERENCE AREA DCA SAVE TAD CDFN DCA .+1 HLT /I HATED TO DO THIS!!! TAD I SAVE SPA CLA /IF THIS IS NEGATIVE, IT MEANS THAT THE /SEQUENCE NUMBER HAS WRAPPED AROUND, BUT WE HAVE /ALREADY MADE A 0 ENTRY TO SHOW THAT JMP P2 TAD CONST /HAS THE SEQUENCE # WRAPPED? SNA CLA JMP P2 /NOT YET JMS REFENT /YES..MAKE A 0 ENTRY TAD CDFN DCA .+1 HLT TAD I SAVE /MARK AS HAVING A 0 ENTRY TAD [4000 DCA I SAVE P2, CDF 0 TAD SEQNO /NOW MAKE A REAL ENTRY JMS REFENT TAD DEF SNA CLA /SHOULD WE FILL IN THE DEFINITION LOC? JMP I [B /NO CLA CMA TAD SAVE /YES..POINT TO IT DCA SAVE TAD CDFN DCA .+1 HLT /THIS IS SLOPPY, BUT SO AM I TAD SEQNO CIA DCA I SAVE CDFZ, CDF 0 JMP I [B DEF, 0 MEQ, -21 MCOMMA, -254 /REFENT, MAKES REFERENCES IN THE SYMBOLS AREA AND BUMPS THE /FIRST LOCATION TO POINT TO THE NEXT LOC. REFENT, 0 DCA TEMP1 /SAVE SEQNO CDFN, HLT TAD I SAVE AND [3777 /MASK OFF WRAP AROUND BIT CIA TAD SAVE /FORM ADDRESS OF THIS REFERENCE DCA TEMP TAD TEMP1 DCA I TEMP ISZ I SAVE /BUMP POINTER CDF 0 JMP I REFENT /TSTPRM TESTS THE SYMBOL WE HAVE FOUND FOR BEING A PERMANENT SYMBOL /PERMANENT SYMBOLS ARE DISTINGUISHED BY HAVING THE 4000 BIT ON. TSTPRM, 0 TAD SYMADD TAD [3 DCA SAVE /WE USE THIS ON RETURN!! CDF 10 TAD I SYMADD CDF 0 SMA CLA /IS IT MINUS? ISZ TSTPRM JMP I TSTPRM /GETFLD DETERMINES WHAT FIELD A PARTICULAR SYMBOL HAS ITS /REFS IN. IT DOES IT BY COMPARING THE CURRENT SYMBOLS NUMBER /WITH THE ENTRIES IN THE BREAK TABLE. GETFLD, 0 DCA FLDPTR GF1, TAD [BREAK TAD FLDPTR /GET BREAK TABLE ENTRY DCA TEMP TAD I TEMP CIA TAD SYMNUM /SYMNUM WAS SET UP WHEN WE FOUND THE SYMBOL SPA SNA CLA JMP GF2 /FIRST NEG. VALUE GIVE FLDPTR ISZ FLDPTR /TRY NEXT JMP GF1 GF2, JMS CHDF /FORM THE CDF N JMP I GETFLD CHDF, 0 TAD FLDPTR CLL RTL RAL TAD CDFZ JMP I CHDF SPACE, 0 /GENERATES AS MANY SPACES AS ARE IN AC DCA CHDF TAD [240 JMS I [OCHAR ISZ CHDF JMP SPACE+2 JMP I SPACE CHECK, 0 TAD I CHECK /SUBROUTINE TO TEST CHAR CIA /AGAINST PRESCRIBED LIMITS TAD CHAR CLL TAD I CHECK ISZ CHECK TAD I CHECK ISZ CHECK SNL SKP CLA /VERY UNESTHETIC..BUT IT WORKS! SNA CLA ISZ CHECK JMP I CHECK DONE, ISZ FINI /SET COMPLETION FLAG JMS I (IOPEN /SET FOR REREAD JMS I (PTRSET /PREPARE REFERENCE AREAS DCA SEQNO /BACK TO BASICS DCA CONST JMP I (FIRST /READ FIRST RECORDS *2000 /DUMP DOES A LITTLE FORMATTING OF THE OUTPUT, AND DUMPS THE /CROSS REFERENCING TABLE ONTO THE OUTPUT DEVICE. /ANY FIDDLING WITH THE BUFFERS OR DEVICE HANDLERS WILL HAVE TO /BE DONE IN DUMP COUNTR=BASE REFBUF=IOSR SCHAR=ADDER DUMP, CLA CMA DCA PASSG1 /FORCES ANOTHER PASS AT ENDPAS DMP7, SKP /V3C JMP DMP8 /SKIP FIRST-TIME STUFF ISZ LINES /V3C ISZ LINES /DIF NO. LINES PER PAGE NOW JMS I [FORM /FIRST TIME THRU GETS A FORM FEED DCA DMP7 /FUTURE PASSES DON'T DMP8, TAD USER+1 CIA DCA COUNTR /# SYMBOLS TO PROCESS NOW TAD [3 DCA BUFFER /FIRST SYMBOL IS HERE JMP DMP6 /GET NO. LINES RIGHT FIRST TIME DMP5, JMS I [CRLF /V3C DMP, ISZ LNPRPG /IS FORM FEED NEEDED? SKP /NOT YET JMS I [FORM DMP6, TAD [-3 DCA SYMCNT /2 CHARACTERS PER PASS DCA CONST /RESET FOR <4096 TAD M12 DCA LINENO NXTDV, ISZ BUFFER CDF 10 TAD I BUFFER /PICK UP PACKED WORD CDF 0 SPA /PERMANENT SYMBOL? JMP DPERM /YES JMS I [DIVIDE /CONVERT 2 CHARS AND PRINT ISZ SYMCNT JMP NXTDV+1 TAD [-4 JMS I [SPACE /GENERATE(AC) SPACES TAD BUFFER CLL RTR /GET SYMBOL NUMBER AND [1777 DCA SYMNUM JMS I (GETFLD DCA CDFNA /CDF N CDF 10 TAD I BUFFER DCA REFBUF /BASE OF REFS FOR SYMBOL CDFNA, HLT TAD I REFBUF /IF THIS IS NEGATIVE, SPA CLA /WE LEFT A REF FOR A 0 ENTRY TAD M1 /IN THAT CASE,DON'T INCLUDE THAT ONE AS TAD [-2 /A REAL ENTRY. DCA SYMCNT TAD I REFBUF AND [3777 /NOW CALCULATE REAL NO. ENTRIES TAD SYMCNT CIA DCA SYMCNT CLA CMA TAD REFBUF DCA REFBUF TAD I REFBUF /SEQUENCE # OF DEF. DCA DEFSEQ DMP2, CLA CMA TAD REFBUF DCA REFBUF TAD CDFNA DCA .+1 HLT TAD I REFBUF /PICK UP A REFERENCE TAD DEFSEQ /IS THIS THE DEF? SZA CLA JMP NODEF DCA DEFSEQ /ONLY 1 DEF PER LINE TAD [3 /YES..PRINT # AFTER SEQ # NODEF, TAD [240 /IF NO, PRINT 2 SPACES DCA SCHAR TAD I REFBUF SZA CLA /IF A 0, ALL FOLLOWING REFS ARE >4095 JMP .+4 TAD [140 DCA CONST JMP DMP2 /IGNORE ZERO ENTRY!! TAD I REFBUF CDF 0 JMS I (CVTSEQ /WRITE THE DECIMAL SEQUENCE # TAD SCHAR JMS I [OCHAR /EITHER # OR SPACE CLA CMA JMS I [SPACE ISZ SYMCNT /MORE TO DO? JMP DMP0 /NO, BUT IS CR/LF REQUIRED? GETMOR, ISZ COUNTR /EXHAUSTED ALL SYMBOLS? JMP DMP5 TAD FINI /YES..ARE WE ALL DONE SNA CLA JMP I [ENDPAS /NO..READ IN NEXT SEGMENT JMP I (OCLOSE DMP0, ISZ LINENO /A CR/LF NEEDED? JMP DMP2 TAD M12 DCA LINENO /RESET ENTRIES PER LINE JMS I [CRLF /V3C ISZ LNPRPG /FORM FEED? SKP JMS I [FORM TAD M12 /AND INDENT NEXT LINE JMS I [SPACE JMP DMP2 DPERM, CLA TAD [3 /PERMANENT SYMBOL TAD BUFFER DCA BUFFER /LOOK AT NEXT ISZ COUNTR JMP NXTDV JMP GETMOR+2 FIRST, JMS I (ASHDLR /RESET INPUT FOR READ JMS I (RDREC /AND READ SOME RECORDS JMP I (NXTLIN /START READING TEXT DEFSEQ, 0 LINENO, -12 PASTST, 0 /SR WHICH DETERMINE IF PASS > 1 TAD PASSG1 SPA CLA /IF >0=> PASS >1 ISZ PASTST JMP I PASTST *2200 /I/O ROUTINES FOR OS/8 OUSETP, 0 TAD (OUCTL&3700 CIA DCA OUDWCT /SIZE OF BUFF IN DOUBLEWORDS TAD XOUBUF DCA OUPTR /INITIALIZE POINTER TAD OUJMPE DCA OUJMP /RESET 3 WAY SWITCH JMP I OUSETP OCHAR, 0 AND (377 /CALLED WITH CHARACTER IN AC DCA OUTEMP JMS I [PASTST JMP I OCHAR OUTSW, KRS /TEST FOR ^C WITH FLAG OR /JMP I OCHAR IF /P,/U OR PASS 2 /M TAD (-203 SNA CLA KSF JMP .+2 JMP I [7600 /SAVE CORE FOR SOME REASON ISZ OUJMP /BUMP 3 WAY SWITCH OUJMP, HLT JMP OCHAR1 JMP OCHAR2 OCHAR3, TAD OUTEMP /PICK UP CHARACTER CLL RTL RTL AND (7400 /3RD WORD MERGED INTO 2 BUFFER WORDS TAD I OUPOLD DCA I OUPOLD TAD OUTEMP CLL RTR RTR RAR AND (7400 TAD I OUPTR DCA I OUPTR TAD OUJMPE DCA OUJMP /RESET FOR NEW SET OF 3 CHARS ISZ OUPTR /BUMP BUFFER POINTER ISZ OUDWCT JMP OUCOMN TAD OUCT /YEP JMS OUTDMP /WRITE IT JMS OUSETP /RESET OUT BUFFER JMP I OCHAR OCHAR2, TAD OUPTR DCA OUPOLD /FOR LATER ISZ OUPTR /SECOND WORD GOES HERE OCHAR1, TAD OUTEMP DCA I OUPTR OUCOMN, JMP I OCHAR OUTEMP, 0 /TEMP STORE OUPOLD, 0 /HOLDS OLD POINTER OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUCT, OUCTL OOPEN, 0 /OPEN AN OUTPUT FILE;FETCH HANDLER TAD (OFILE DCA OUBLK /POINT TO FILE NAME TAD XOUDEV DCA OUHNDL /LEAVE ROOM FOR 2 PAGE HANDLER CDF 10 TAD I [7600 /OUTPUT DEVICE # CDF 0 CIF 10 JMS I USR /ASSIGN,FETCH HANDLER 1 OUHNDL, HLT /GETS ENTRY POINT OF HANDLER JMP HIOERR /HANDLER FAILURE OUENTR, JMS I (P2ADJ CDF 10 TAD I [7600 CDF 0 CIF 10 JMS I USR 3 /ENTER OUTPUT FILE OUBLK, OFILE OUELEN, 0 /RETURNS WITH LENGTH OF HOLE JMP OEFAIL MP2, DCA I (OUCCNT TAD OUBLK /STARTING RECORD DCA OUREC JMS OUSETP /SETUP OUTPUT AREA JMP I OOPEN XOUDEV, 4001 /MAY BE ALTERED OEFAIL, CDF 10 TAD I [7600 AND (7760 /GET LENGTH PART SNA CLA /WAS IT 0? JMP ERR3 /YEP..HE LOSES TAD I [7600 AND [17 /TRY WITH INDETERMINATE LENGTH DCA I [7600 JMP OUENTR OUTDMP, 0 /WRITE ACTUAL OUTPUT DCA OUCTLW JMS I (OUNREC /FIGURE # RECS TO WRITE TAD I (OUCCNT DCA I (OUCCNT /UPDATE CLOSE LENGTH TAD I (OUCCNT CLL CML TAD OUELEN /ROOM FOR THIS WRITE? SNL CLA JMP ERR4 /HE LOSES JMS I OUHNDL /NJ WRITE IT OUCTLW, 0 XOUBUF, OUBUF OUREC, 0 JMP HIOERR /A HANDLER BADNESS JMS I (OUNREC TAD OUREC /UPDATE OUTPUT RECORD # DCA OUREC JMP I OUTDMP ERR4, JMS I [ERROR FULERR ERR3, JMS I [ERROR ENTERR *2400 OCLOSE, TAD HCREF SZA CLA /IF NOT LAST PASS JMP NOVERS /NO NEED FOR VERSION NO. JMS CRLF TAD ("V-300^R+VERSN-"0+40 JMS I [DIVIDE TAD (PATCHL /PATCH NO.-ON PAGE JMS I [OCHAR JMS CRLF JMS FORM /V3C NOVERS, TAD HCREF SNA CLA /IF /M PASS 1 TAD (232 JMS I [OCHAR /NO 232 JMS I [OCHAR FILLIP, JMS I [OCHAR /FILL WITH 0'S TAD (177 AND I (OUDWCT SZA CLA /TO BOUNDARY YET? JMP FILLIP /NO..KEEP FILLING TAD I (OUDWCT TAD (OUCTL&3700 SNA /FULL WRITE LEFT? JMP NODUMP /YES..BUT ^Z IS OUT TAD (4000+OUFLD /FORM WRITE JMS I (OUTDMP NODUMP, CIF 10 JMS I USR 10 /LOCK IN MONITOR TAD I (OUREC CDF 10 DCA I OUSAVX CDF 0 TAD I (OUELEN CDF 10 DCA I OUSAVX TAD LNPRPG DCA I OUSAVX TAD OUCCNT DCA I OUSAVX TAD I [7600 CDF 0 ISZ HCREF JMP NOD1 CIF 10 JMS I [200 6 BLK, 0 0 NOD1, CIF 10 JMS I [200 4 /CLOSE OUTPUT FILE OFILE /POINTER TO FILE NAME OUCCNT, 0 /CLOSING LENGTH JMP ERR5 /SORRY /FOR LONG FILES(/M), IT WILL CHAIN TO ITSELF ON FIRST PASS. /ON SECOND PASS,IT WILL DELETE FILE CREFTM.LS(IF NO E) ISZ SLSWH /DELETE TEMP FILE SWITCH JMP ALDONE CLA IAC /SYS CDF 0 CIF 10 JMS I [200 4 /DELETE CREFLS.TM CHANNM 0 CLA ALDONE, JMP I [7605 HCREF, 0 SLSWH, 0 ERR5, JMS I [ERROR CLSERR ERR6, JMS I [ERROR INPERR OFILE, ZBLOCK 4 /OUTPUT FILE NAME GOES HERE FORM, 0 /GENERATE 214 IF NOT TTY JMS I [PASTST /IF PASS>1, NO FORM FEED JMP I FORM TAD TTYSWT SZA CLA JMP FORM2 TAD LNPRPG /FILL TO END OF PAGE SNA /IF 0, GENERATE 8 LINE FEEDS TAD [-4 DCA COUNT JMS CRLF ISZ COUNT JMP CRLF1 /HA! GENERATE EXTRA LINE FEED!! TAD [-6 DCA COUNT TAD ("- /GENERATE ------ JMS I [OCHAR ISZ COUNT JMP .-3 TAD [-4 DCA COUNT FORM3, JMS CRLF ISZ COUNT JMP CRLF1 TAD LINES /V3C NOP DCA LNPRPG /RESET TO TOP OF PAGE JMP I FORM FORM2, CLA CMA DCA COUNT CMA JMP FORM3 /USE [215 TO GENERATE A 214 CRLF, 0 /GENERATE CRRIAGE RET AND LINE FEED TAD [215 JMS I [OCHAR CRLF1, TAD [212 JMS I [OCHAR JMP I CRLF TTYSWT, 0 *2600 IOPEN, 0 CLA CMA DCA INCHCT /FORCE READ OF NEW FILE ISZ INEOF TAD (7617 DCA INFPTR JMP I IOPEN INPTR, INBUF ICHAR, 0 INCHAR, ISZ INJMP /PACKING SWITCH ISZ INCHCT /BUFFER EXHAUSTED? INJMPP, JMP INJMP /NOPE TAD INEOF /WAS LAST AN EOF? SNA CLA JMP INGBUF /NO..GET NEXT INPUT CDF 10 TAD I INFPTR CDF 0 SNA CLA /MORE INPUT? JMP I ICHAR /NO..EOF RETURN JMS ASHDLR /SET UP STRT RECORD INGBUF, JMS RDREC /AND READ SOME RECORDS JMP INCHAR /THIS IS DONE TO OPTIMIZE THE DECTAPE /ROCKING. INITIALIZATION DOES THESE /THE FIRST TIME. INJMP, JMP . /3 WAY SWITCH JMP ICHAR1 JMP ICHAR2 ICHAR3, TAD INJMPP DCA INJMP TAD I INPTR AND (7400 /CONTENTS OF BUFFER CLL RTR RTR TAD INCTLW RTR RTR /GETS THIRD WORD FROM 1 AND 2 ISZ INPTR /NEXT BUFFER LOC JMP INCOMN ICHAR2, TAD I INPTR AND (7400 DCA INCTLW /TEMP SAVE ISZ INPTR ICHAR1, TAD I INPTR INCOMN, AND (177 /PARITY TEST SNA /IF 200 CODE..IGNORE IT JMP INCHAR TAD [200 TAD (-232 /IS IT ^Z? SNA JMP I ICHAR /YES..NOMMORE!! TAD (232 ISZ ICHAR /SKIP EOF RETURN DCA CHAR JMP I ICHAR INCHCT, 0 INFPTR, 7617 INEOF, 0 INCTR, 0 INHAND, 0 ASHDLR, 0 CDF 10 TAD I INFPTR AND (7760 /LENGTH PART OF WORD SZA /0 IMPLIES .GTE. 256 TAD [17 CLL CML RTR RTR DCA INCTR ISZ INFPTR /BUMP TO NEXT TAD I INFPTR /GET STARTING RECORD DCA INREC ISZ INFPTR DCA INEOF CDF 0 JMP I ASHDLR XINREC, 2 /DEFAULT CONDITIONS XINCL1, 401 RDREC, 0 TAD INCTR CLL TAD XINRECS /LINK ON IF OVERFLOW AND LAST READ SNL DCA INCTR /UPDATE IF NO OVERFLOW SZL ISZ INEOF CLL CML CMA RTR /CONTROL WORD FROM OVERFLOW RTR RTR TAD XINCL1 DCA INCTLW CDF 0 JMS I INHAND INCTLW, 0 INBUFP, INBUF INREC, 0 JMP INERRX /FATAL OR EOF INBREC, TAD INREC TAD XINREC DCA INREC /UPDATE # READ TAD INCTLW AND [7600 CLL RAL TAD INCTLW AND [7600 CMA DCA INCHCT /NEW CHARACTER COUNT TAD INJMPP DCA INJMP TAD INBUFP DCA INPTR JMP I RDREC INERRX, ISZ INEOF /FATAL OR EOF SMA CLA JMP INBREC /EOF..NEXT FILE JMS I [ERROR INPERR TTYPRT, 0 /SIMPLE TTY OUTPUT ROUTINE TLS TSF JMP .-1 CLA JMP I TTYPRT *3000 HNDERR, "H-300^R+"A-300 /HANDLER FAIL "N-300^R+"D-300 "L-300^R+"E-300 "R-300^R "F-300^R+"A-300 "I-300^R+"L-300 SYMERR, "S-300^R+"Y-300 "M-300^R "O-300^R+"V-300 "E-300^R+"R-300 "F-300^R+"L-300 "O-300^R+"W-300 LPTERR, "D-300^R+"E-300 /DEV LPT BAD "V-300^R "L-300^R+"P-300 "T-300^R "B-300^R+"A-300 "D-300^R ENTERR, "E-300^R+"N-300 "T-300^R+"E-300 "R-300^R "F-300^R+"A-300 "I-300^R+"L-300 "E-300^R+"D-300 FULERR, "O-300^R+"U-300 "T-300^R "D-300^R+"E-300 "V-300^R "F-300^R+"U-300 "L-300^R+"L-300 CLSERR, "C-300^R+"L-300 "O-300^R+"S-300 "E-300^R "F-300^R+"A-300 "I-300^R+"L-300 "E-300^R+"D-300 INPERR, "I-300^R+"N-300 "P-300^R+"U-300 "T-300^R "E-300^R+"R-300 "R-300^R+"O-300 "R-300^R REFERR, 2664 /2045 REFS 3015 "R-300 "E-300^R+"F-300 "S-300^R 0 /LITERAL PROCESSORS. LITERALS ARE HANDLED ACCORDING TO THEIR /BINARY DEFINITION. A CURRENT PAGE LITERAL AT,SAY, 0377 WILL /BE CALLED _L0377. A PAGE ZERO LITERAL AT LOCATION 0100 WILL /BE CALLED _L0100 /IF ASSEMBLED WITH NEW PAL8, LITERAL INCLUDES FIELD /SO 00377 IS _00377, 10377 IS _10377 LIT2, TAD (2540 /PAGE 0..FIRST NUMBER ALWAYS 0 DCA SYM2 /_L GOES IN SYM1 FOR BOTH JMS LCHK ISZ ISYM ISZ ISYM /POINT TO SYM3 FOR LAST 2 DIGITS JMP LIT3 /COMMON CODE LIT1, JMS LCHK ISZ ISYM /POINT TO SECOND WORD TAD I XRLIT /FIRST BINARY DIGIT JMS I [PACK TAD I XRLIT AND (266 /THIS KNOCKS OFF RELATIVE ADDRESS BIT JMS I [PACK /GOES INTO RIGHT HALF OF SYM2 LIT3, TAD DSWIT /IF /D, DON'T CREF LITERALS SZA CLA JMP LITEX /DON'T DO ANYTHING BUT CLEAR COUNTERS TAD (LITBUF+1 /NOW PICK UP RELATIVE ADD BIT FROM INSTRUCT. DCA XRLIT TAD I XRLIT AND (1 TAD SYM2 DCA SYM2 /FORMING ADDRESS OF LITERAL! TAD I XRLIT JMS I [PACK TAD I XRLIT JMS I [PACK /LOAD UP SYM3 TAD ENDFIX /WILL PRINT FIELD WITH LIT IF NEW PAL8 AND (57 TAD [2426 DCA SYM1 /PUT IN _ (NEGATIVE!) JMS I (REPACK JMP I XUSSYM /DO THE BOOKKEEPING LITEX, JMS I (REPACK JMP I [B XUSSYM, USSYM /WILL BE CHANGED TO PATCH IF /L LCHK, 0 TAD MARGIN DCA XRLIT TAD I XRLIT DCA ENDFIX TAD ENDFIX TAD (-240 SNA CLA JMP LITEX JMP I LCHK GLIN5, TAD CRCNT SNA CLA JMP CROUT /NEED THIS CR ISZ CRCNT JMP CROUT /NEED CR AFTER HEADER JMP I (GETLIN CROUT, TAD [212 JMS I FPUT TAD MARGIN DCA XRLINE JMP I (GLIN6 CRCNT, 0 CHANNM, FILENAME CREFLS.TM ENDFIX, 0 /TEMP ALSO JMS I (DOLOT2 DCA .-1 /ONCE ONLY TAD SYSM SNA JMP I (NDPS1 JMP I ENDFIX *3200 OUNREC, 0 /ESTIMATE # RECS TAD I XOCTLW CLL RTL RTL RTL /ITS NOT AN ESTIMATE, BUT EXACT!! AND [17 JMP I OUNREC XOCTLW, OUCTLW DIVIDE, 0 DCA DIV45B DCA DIV45C JMP DIV45D /START UP HERE DIV45A, ISZ DIV45C /BUMP THE QUOTIENT DCA DIV45B /NEW DIVIDEND DIV45D, TAD DIV45B TAD (-52 /DIVIDE BY 52 SMA JMP DIV45A /STILL +; KEEP LOOPING TAD (52 /REMAINDER IN AC AFTER ADD JMS I (DIVE /LETTER OR NUMBER? DCA DIV45B TAD DIV45C JMS I (DIVE JMS I [OCHAR TAD DIV45B JMS I [OCHAR ISZ BUFFER JMP I DIVIDE DIV45B, 0 DIV45C, 0 GETLIN, 0 /GET A LINE OF INPUT AND STORE TAD MARGIN /IT AT LINBUF DCA XRLINE INLINE, JMS I (ICHAR JMP EN TAD RLSKIP /IF RALF HEADER,ELIM 2 LF SNA CLA JMP REGULR /NOT RALF ISZ RLSKIP /CATCH 2ND LINE JMP INLINE TAD [7776 /ELIM EXTRA CR AFTER HEADER DCA I (CRCNT REGULR, TAD CHAR /LINE FEED TERMINATES THIS ROUTINE TAD MLF SNA JMP INLINE /IGNORE LF'S ON INPUT TAD [212-215 /LF-CR SNA CLA JMP GLIN3 TAD XRLINE TAD (-375 SMA CLA JMP .+3 TAD CHAR JMS I FPUT TAD CHAR TAD [-214 SZA CLA JMP INLINE GLIN3, TAD [215 JMS I FPUT GLIN4, JMP I (GLIN5 GLIN6, TAD [200 /TEST FOR ^C KRS TAD (-203 SNA CLA KSF JMP I GETLIN JMP I [7605 /FOUND ^C RLSKIP, 0 ALLOCT, 0 JMS I (DEVCHK 7617 /CHECK INPUT DEVICE SPA CLA IAC /2 PAGE HANDLER DCA BUFCNT JMS I (DEVCHK 7600 /CHECK SIZE OF OUTPUT DEV HANDLER SPA CLA TAD [2 /2 PAGES TAD BUFCNT DCA BUFCNT CLL TAD BUFCNT RAR CLA SZL CLL /IF 1 OR 3,IN DEV IS 2 PGS TAD [200 TAD (3601 DCA I (XOUDEV TAD [-2 TAD BUFCNT SMA SZA CLA JMP I ALLOCT /2 2PAGERS IS DEFAULT TAD (4200 /IF NOT 2 2PAGERS,INBUF AT 4200 DCA I (INBUFP TAD I (INBUFP DCA I (INPTR TAD [3 DCA I (XINREC TAD (601 DCA I (XINCL1 JMP I ALLOCT BUFCNT, 0 CLEAR, 0 /ROUTINE TO CLEAN OUT OLD SYMBOL DCA SYM1 DCA SYM2 DCA SYM3 JMP I CLEAR EN, JMS DPAT /V3D JMP I [ENDPAS /THIS INITIALIZATION CODE IS DESTROYED WHEN DATA IS READ /INTO THE BUFFER. FOR THAT REASON, CREF IS NOT RESTARTABLE *4200 ST1, CDF 0 KLUD, CIF 10 JMS I USR 5 1423 /DEFAULT EXTENSION IS .LS CHAIN, CDF 10 TAD I (7617 /IF NO INPUT, RESTART CD SNA CLA JMP ST1 TAD I [7600 /IF NO OUTPUT, GIVE HIM LPT!! SZA CLA JMP ST2 CDF 0 CIF 10 JMS I [200 12 /ASSIGN-NO FETCH 1420 DEVS, 2400 0 JMP ERRTWO /DEFAULT DEVICE IS BAD TAD DEVS CDF 10 DCA I [7600 ST2, CDF 0 JMS I (SWITCH CDF 10 TAD I OUSAVX CDF 0 DCA PASS2 BLUE0, TAD [-4 DCA COUNT BLUE, CDF 10 TAD I XNAME CDF 0 DCA I (OFILE ISZ XNAME ISZ (OFILE ISZ COUNT JMP BLUE JMS I (ALLOCT JMS I (OTYPE AND (770 /CHECK FOR TTY AS OUTPUT (CAN CLA IF DEBUGGING) DCA I (TTYSWT TAD I (TTYSWT /IF LPT IS OUTPUT, SZA CLA /NO INTERNAL FORM FEEDS GENERATED DCA I (NOFORM /NOW WE MOVE UP THE PERMANENT AND PSEUDO-OP TABLES. /THE Y WERE ASSEMBLED IN FIELD 0 TO SAVE DECTAPE MOTION /WHEN LOADING. JMS I (FTEST /GET MACHINE SIZE TAD MAXFLD CIA DCA MAXFLD /- NO.FIELDS CDF 10 /ASSIGN THE INPUT HANDLER TAD I (7617 CDF 0 CIF 10 JMS I USR 1 INHNDL, INDEVH+1 HLT /YECH!!! TAD INHNDL DCA I (INHAND /SETUP ENTRY POINT JMS I (ASHDLR /SET UP FIRST READ TAD (7700 DCA USR /SAVE SYMBOL TABLE TAD I (7746 AND KLUD TAD [1000 /MARK NOT RESTARTABLE DCA I (7746 /SAVE CORE BIT TAD I XRLINE DCA COUNT /INITIAL LOAD PROVIDES PARAMETERS FOR /THE SYMBOL TABLE. THIS IS # WORDS TO MOVE JMS MOVEM TAD RSWIT SNA CLA /DETERMINE WHICH PSEUDO-OPS TAD (PPSEUD-SPSEUD TAD (SPSEUD-1 DCA XRLINE TAD I XRLINE DCA PSEUDO /TABLES INITIALLY HAVE A SHORT HEADER /WHICH CONTAINS INFORMATION ABOUT THEM /PSEUDO CONTAINS STARTING # OF FIRST TAD I XRLINE DCA PSEUDO+1 /LAST ENTRY # TAD I XRLINE DCA COUNT /# ENTRIES TO MOVE TAD I XRLINE DCA XRLIT /WHERE THEY GO IN FIELD 1 JMS MOVEM JMP I (XFIRST /READ FIRST RECORDS MOVEM, 0 TAD I XRLINE CDF 10 DCA I XRLIT CDF 0 ISZ COUNT JMP .-5 JMP I MOVEM ERRTWO, JMS I [ERROR /THIS IS AN IMPOSSIBLE ERROR LPTERR CHANCK, 0 CLL RTL /CHECK FOR /C+/E RAL SNL JMP I CHANCK //C IS MINIMUM CONDITION RTR /V3C USE /1 TO MEAN KEEP CREFLS.TM SNL CLA CMA /-1 IF NO E (I.E. DO ELIMINATE) DCA I (SLSWH JMP I CHANCK XNAME, 7601 PASS2, 0 PATCHA, TAD (35 DCA USER+1 JMP BLUE0 *4400 SWITCH, 0 JMS I (FILEXT CLA IAC CDF 10 AND I (7644 /TEST FOR /X DCA DSWIT TAD I (7643 CDF 0 JMS I (CHANCK CDF 10 CLA CLL TAD I (7644 AND (410 /P OR /U USED? SNA JMP ST3 CDF 0 AND [10 SNA CLA JMP TXONLY /JUST /P TAD XDOLL DCA I (DOLL12 /NO SYMBOL TABLE TXONLY, TAD KILOUT /YES..DISABLE PASS ONE OUTPUT DCA I [OUTSW ST3, CLA CDF 10 TAD I (7644 CDF 0 AND (300 /IF SABR (Q), SET RSWIT AND DSWIT SNA JMP HCR1 /PAL8 AND [200 /CHECK FOR RALF SNA CLA JMP RALFCD /Y ISZ RSWIT ISZ DSWIT DCA I (SCAN3 /ENABLE CHECK FOR SABR CHARS HCR1, CLA CDF 10 TAD I (7644 /CHECK FOR M- MAMMOTH FILE(HCREF) CDF 0 SMA CLA JMP I (BLUE0 /NOT LONG FILE /PUT IN NECESSARY PATCHES CLL TAD XPATCH DCA I (HC1 TAD XPTCH1 DCA I (XUSSYM CDF 10 TAD I (7645 RAR /CHECK IF PASS1 OR 2 FOR /M SNL JMP CHNPS1 /PASS 1 RAL CLL /IT'S PASS 2 DCA I (7645 /RESTORE TBL CDF 0 CIF 10 JMS I (7700 /RESTORE USR 10 TAD KILOUT DCA I [OUTSW /NO LIST TAD XDOLL DCA I (DOLL12 TAD [7720 DCA I (PATCH1 /ANOTHER PATCH JMP I SWITCH CHNPS1, CLL CML RAL DCA I (7645 /SET /9 SWITCH CDF 0 CLA CMA DCA I (HCREF /7777 DURING PASS1 JMS I (CHNSET /LOOKUP CREF.SV JMP I (PATCHA XPATCH, PATCH&177+5200 XPTCH1, PATCH XDOLL, DOLL13&177+5200 RALFCD, TAD [7776 /FOR 2 EXTRA LINE FEEDS DCA I (RLSKIP JMP HCR1 KILOUT, OCHAR&177+5600 /JMP I OCHAR /SUBROUTINE TO DETERMINE CORE SIZE FTEST, 0 JMS I (MORCOR COR0, CDF 0 TAD MAXFLD /GET FIELD TO TEST RTL RAL AND COR70 TAD COREX DCA .+1 COR1, CDF /FIELD TO TEST 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 /NON-EXISTENT FIELD TAD COR1 DCA I CORLOC ISZ MAXFLD JMP COR0 COREX, CDF 0 DONCOR, JMP I FTEST CORLOC, CORX CORV, 1400 FIELD 0 /THESE ARE THE PERMANENT AND PSEUDO OP TABLES FOR CREF /RAD IS THE BASE USED TO PACK THE CHARACTERS. FOR SABR IT MAY /HAVE TO BE MOVED TO 51 RATHER THAN 45. RAD=52 *4600 SYMTAB, -453 /INITIAL ENTRIES NOPUNCH *0 ENPUNCH ZBLOCK 4 /DUMMY ENTRY..SYMCHK NEEDS IT "A-300^RAD+"N-300+4000 /AND "D-300^RAD ZBLOCK 2 "B-300^RAD+"S-300+4000 /BSW "W-300^RAD ZBLOCK 2 "C-300^RAD+"A-300+4000 /CAF "F-300^RAD ZBLOCK 2 "C-300^RAD+"D-300+4000 /CDF "F-300^RAD ZBLOCK 2 "C-300^RAD+"I-300+4000 /CIA "A-300^RAD ZBLOCK 2 "C-300^RAD+"I-300+4000 /CIF "F-300^RAD ZBLOCK 2 "C-300^RAD+"L-300+4000 /CLA "A-300^RAD ZBLOCK 2 "C-300^RAD+"L-300+4000 /CLL "L-300^RAD ZBLOCK 2 "C-300^RAD+"M-300+4000 /CMA "A-300^RAD ZBLOCK 2 R=52 "C-300^R+"M-300+4000 /CML "L-300^R ZBLOCK 2 "D-300^R+"C-300+4000 /DCA "A-300^R ZBLOCK 2 "G-300^R+"L-300+4000 /GLK "K-300^R ZBLOCK 2 "G-300^R+"T-300+4000 /GTF "F-300^R ZBLOCK 2 "H-300^R+"L-300+4000 /HLT "T-300^R ZBLOCK 2 "I-300^R+"A-300+4000 /IAC "C-300^R ZBLOCK 2 "I-300^R+"O-300+4000 /IOF "F-300^R ZBLOCK 2 "I-300^R+"O-300+4000 /ION "N-300^R ZBLOCK 2 "I-300^R+"O-300+4000 /IOT "T-300^R ZBLOCK 2 "I-300^R+"S-300+4000 /ISZ "Z-300^R ZBLOCK 2 "J-300^R+"M-300+4000 /JMP "P-300^R ZBLOCK 2 "J-300^R+"M-300+4000 /JMS "S-300^R ZBLOCK 2 "K-300^R+"C-300+4000 /KCC "C-300^R ZBLOCK 2 "K-300^R+"C-300+4000 /KCF "F-300^R ZBLOCK 2 "K-300^R+"I-300+4000 /KIE "E-300^R ZBLOCK 2 "K-300^R+"R-300+4000 /KRB "B-300^R ZBLOCK 2 "K-300^R+"R-300+4000 /KRS "S-300^R ZBLOCK 2 "K-300^R+"S-300+4000 /KSF "F-300^R ZBLOCK 2 "L-300^R+"A-300+4000 /LAS "S-300^R ZBLOCK 2 "M-300^R+"Q-300+4000 /MQA "A-300^R ZBLOCK 2 "M-300^R+"Q-300+4000 /MQL "L-300^R ZBLOCK 2 "N-300^R+"O-300+4000 /NOP "P-300^R ZBLOCK 2 "O-300^R+"P-300+4000 /OPR "R-300^R ZBLOCK 2 "O-300^R+"S-300+4000 /OSR "R-300^R ZBLOCK 2 "P-300^R+"C-300+4000 /PCE "E-300^R ZBLOCK 2 "P-300^R+"C-300+4000 /PCF "F-300^R ZBLOCK 2 "P-300^R+"L-300+4000 /PLS "S-300^R ZBLOCK 2 "P-300^R+"P-300+4000 /PPC "C-300^R ZBLOCK 2 "P-300^R+"S-300+4000 /PSF "F-300^R ZBLOCK 2 "R-300^R+"A-300+4000 /RAL "L-300^R ZBLOCK 2 "R-300^R+"A-300+4000 /RAR "R-300^R ZBLOCK 2 "R-300^R+"D-300+4000 /RDF "F-300^R ZBLOCK 2 "R-300^R+"F-300+4000 /RFC "C-300^R ZBLOCK 2 "R-300^R+"I-300+4000 /RIB "B-300^R ZBLOCK 2 "R-300^R+"I-300+4000 /RIF "F-300^R ZBLOCK 2 "R-300^R+"M-300+4000 /RMF "F-300^R ZBLOCK 2 "R-300^R+"P-300+4000 /RPE "E-300^R ZBLOCK 2 "R-300^R+"R-300+4000 /RRB "B-300^R ZBLOCK 2 "R-300^R+"S-300+4000 /RSF "F-300^R ZBLOCK 2 "R-300^R+"T-300+4000 /RTF "F-300^R ZBLOCK 2 "R-300^R+"T-300+4000 /RTL "L-300^R ZBLOCK 2 "R-300^R+"T-300+4000 /RTR "R-300^R ZBLOCK 2 "S-300^R+"G-300+4000 /SGT "T-300^R ZBLOCK 2 "S-300^R+"K-300+4000 /SKON "O-300^R+"N-300 ZBLOCK 2 "S-300^R+"K-300+4000 /SKP "P-300^R ZBLOCK 2 "S-300^R+"M-300+4000 /SMA "A-300^R ZBLOCK 2 "S-300^R+"N-300+4000 /SNA "A-300^R ZBLOCK 2 "S-300^R+"N-300+4000 /SNL "L-300^R ZBLOCK 2 "S-300^R+"P-300+4000 /SPA "A-300^R ZBLOCK 2 "S-300^R+"R-300+4000 /SRQ "Q-300^R ZBLOCK 2 "S-300^R+"T-300+4000 /STA "A-300^R ZBLOCK 2 "S-300^R+"T-300+4000 /STL "L-300^R ZBLOCK 2 "S-300^R+"W-300+4000 /SWP "P-300^R ZBLOCK 2 "S-300^R+"Z-300+4000 /SZA "A-300^R ZBLOCK 2 "S-300^R+"Z-300+4000 /SZL "L-300^R ZBLOCK 2 "T-300^R+"A-300+4000 /TAD "D-300^R ZBLOCK 2 "T-300^R+"C-300+4000 /TCF "F-300^R ZBLOCK 2 "T-300^R+"F-300+4000 /TFL "L-300^R ZBLOCK 2 "T-300^R+"L-300+4000 /TLS "S-300^R ZBLOCK 2 "T-300^R+"P-300+4000 /TPC "C-300^R ZBLOCK 2 "T-300^R+"S-300+4000 /TSF "F-300^R ZBLOCK 2 "T-300^R+"S-300+4000 /TSK "K-300^R ZBLOCK 2 -1 -1 -1 -1 /DUMMY LOW ENTRY /PSEUDO OP TABLES. ENTRIES ARE SAME FORMAT AS PAL8 /SYMBOLS. *.+SYMTAB SPSEUD, 1706 /SABR PSEUDOS. BEGINS AT 1706*4 1737 /ENDS AT 1737*4 -150 /150 LOCATIONS LONG 7427 /STARTS LOADING AT 17430 NOPUNCH *7430 ENPUNCH ZBLOCK 4 "A-300^R+"B-300 /ABSYM "S-300^R+"Y-300 "M-300^R B /RETURN POINT "A-300^R+"R-300 /ARG "G-300^R 0 B "B-300^R+"L-300 /BLOCK "O-300^R+"C-300 "K-300^R B "C-300^R+"A-300 /CALL "L-300^R+"L-300 0 B "C-300^R+"O-300 /COMMON "M-300^R+"M-300 "O-300^R+"N-300 B "C-300^R+"P-300 /CPAGE "A-300^R+"G-300 "E-300^R B "D-300^R+"E-300 /DECIM "C-300^R+"I-300 "M-300^R B "D-300^R+"U-300 /DUMMY "M-300^R+"M-300 "Y-300^R B "E-300^R+"A-300 /EAP "P-300^R 0 B "E-300^R+"N-300 /END "D-300^R 0 EPASS, DOLL1 /BECOMES ENDPAS "E-300^R+"N-300 /ENTRY "T-300^R+"R-300 "Y-300^R B "F-300^R+"O-300 /FORTR "R-300^R+"T-300 "R-300^R B "I-300^R 0 0 B /I "I-300^R+"F-300 /IF 0 0 B "I-300^R+"N-300 /INC "C-300^R 0 B "L-300^R+"A-300 /LAP "P-300^R 0 B "O-300^R+"C-300 /OCTAL "T-300^R+"A-300 "L-300^R B "O-300^R+"P-300 /OPDEF "D-300^R+"E-300 "F-300^R FXR2, FXMR "P-300^R+"A-300 /PAGE "G-300^R+"E-300 0 B "P-300^R+"A-300 /PAUSE "U-300^R+"S-300 "E-300^R B "R-300^R+"E-300 /REORG "O-300^R+"R-300 "G-300^R B "R-300^R+"E-300 /RETRN "T-300^R+"R-300 "N-300^R B "S-300^R+"K-300 /SKPDF "P-300^R+"D-300 "F-300^R FXR3, FXMR "T-300^R+"E-300 /TEXT "X-300^R+"T-300 0 TXT -1 -1 -1 -1 /PAL8 PSEUDOS. SAME FORMAT AS OTHERS *5424 ENPUNCH PPSEUD, 1706 1737 -150 7427 NOPUNCH *7430 ENPUNCH ZBLOCK 4 "D-300^R+"E-300 /DECIMAL "C-300^R+"I-300 "M-300^R+"A-300 B "D-300^R+"E-300 /DEVICE "V-300^R+"I-300 "C-300^R+"E-300 B "D-300^R+"T-300 /DTORG "O-300^R+"R-300 "G-300^R B "E-300^R+"J-300 /EJECT "E-300^R+"C-300 "T-300^R NOTBIN /SKIP ANY MORE TEXT "E-300^R+"N-300 /ENPUNCH "P-300^R+"U-300 "N-300^R+"C-300 B "E-300^R+"X-300 /EXPUNGE "P-300^R+"U-300 "N-300^R+"G-300 XPJ, XPUNJ "F-300^R+"I-300 /FIELD "E-300^R+"L-300 "D-300^R B "F-300^R+"I-300 /FILENAME "L-300^R+"E-300 "N-300^R+"A-300 B "F-300^R+"I-300 /FIXMRI "X-300^R+"M-300 "R-300^R+"I-300 FXR, FXMR "F-300^R+"I-300 /FIXTAB "X-300^R+"T-300 "A-300^R+"B-300 FXT, FXTAB "I-300^R /I ZBLOCK 2 B "I-300^R+"F-300 /IFDEF "D-300^R+"E-300 "F-300^R B "I-300^R+"F-300 /IFNDEF "N-300^R+"D-300 "E-300^R+"F-300 B "I-300^R+"F-300 /IFNZRO "N-300^R+"Z-300 "R-300^R+"O-300 B "I-300^R+"F-300 /IFZERO "Z-300^R+"E-300 "R-300^R+"O-300 B "N-300^R+"O-300 /NOPUNCH "P-300^R+"U-300 "N-300^R+"C-300 B "O-300^R+"C-300 /OCTAL "T-300^R+"A-300 "L-300^R B "P-300^R+"A-300 /PAGE "G-300^R+"E-300 0 B "P-300^R+"A-300 /PAUSE "U-300^R+"S-300 "E-300^R B "R-300^R+"L-300 /RELOC "L-300^R+"O-300 "C-300^R B "T-300^R+"E-300 /TEXT "X-300^R+"T-300 0 TXT "X-300^R+"L-300 /XLIST "I-300^R+"S-300 "T-300^R B "Z-300^R /Z ZBLOCK 2 B "Z-300^R+"B-300 /ZBLOCK "L-300^R+"O-300 "C-300^R+"K-300 B -1 -1 -1 -1 *5600 /THIS CODE IS EXECUTED DURING PASS ONE ONLY. LATER PASSES /USE THIS AREA TO BUILD A REFERENCE TABLE. HEADER, 0 /HEADER SWITCHES FPUT TO JMS I [OCHAR TAD CPCHIT DCA FPUT /ADDRESS OF PUNCH ROUTINE JMS I CGTLIN /CALL GETLIN TAD CSTRIT /RESTORE FPUT DCA FPUT JMP I HEADER CPCHIT, PNCHIT CGTLIN, GETLIN CSTRIT, STORIT PNCHIT, 0 JMS I COCHAR JMP I PNCHIT STORIT, 0 DCA I XRLINE JMP I STORIT COCHAR, OCHAR DOLL1, TAD (ENDPAS DCA DOLLAR JMS DPAT DOLL12, TAD (KRS /BECOMES JMP .+2 IF /M PASS 2 OR /U DCA I (OUTSW /RE ENABLE OUTPUT DOLL13, CDF 10 TAD RSWIT SNA CLA JMP DOLL2 /PAL8 PSEUDOS TAD (B DCA I (FXR2 TAD (B DCA I (FXR3 TAD (ENDPAS DCA I (EPASS /END PSEUDO NOW TO ENDPAS JMP DOLOUT DOLL2, TAD (B DCA I (XPJ TAD (B DCA I (FXR TAD (B DCA I (FXT DOLOUT, CDF 0 JMS DOLOT2 JMP I (NOTBIN FUDGE, NOP XPUNJ, DCA COUNT CLA CMA TAD USER+1 /SKIP LAST ENTRY (7777) CLL RTL XPUNJ3, DCA BUFFER /POINTER INTO SYMBOLS CDF 10 TAD I BUFFER TAD (5336 /IS THIS A LITERAL? SNA CLA JMP XPUNJ1 /YES..NEXT ENTRY TAD COUNT /NO..NOW PUSH ALL LITERALS UP CLL RTL /BUT IF COUNT =0, THERE ARE NONE CMA DCA SAVE TAD (3 TAD BUFFER /SETTING UP TO DO TRANSFER. IF COUNT=0 DCA XRSYM1 /ONLY THE 7777 GETS TRANSFERRED TAD (3 DCA XRSYM2 TAD I XRSYM1 DCA I XRSYM2 ISZ SAVE /ALL COMPLETED? JMP .-3 TAD COUNT IAC /INCLUDE 7777 ENTRY! DCA USER+1 CDF 0 JMP I (B XPUNJ1, TAD (-4 TAD BUFFER ISZ COUNT JMP XPUNJ3 XFIRST, JMS I (OOPEN JMP I (FIRST+1 DOLOT2, 0 STL RTL /IF WE HAVE MORE THAN 2 FIELDS, TAD MAXFLD /WE SHALL LEAVE THE SYMBOL TABLE IN ONE /PIECE. THAT ALLOWS US TO USE THE UPPER SZL CLA /CORE PROFITABLY JMP I DOLOT2 TAD USER+1 CLL RTL TAD (4 /CLEARS SYMBOL TABLE DCA I (LTTBL+1 /FIX PERMANENT LIMIT IN FIELD 1 DCA SYMFLD /AND FAKE THAT FLD 1 HAS NO SYMBOLS TAD FUDGE /DISABLE RESET OF FIELD 1 LIMIT DCA I (FUJ1 JMP I DOLOT2 CHNSET, 0 CLA IAC /SYS DEV ONLY CIF 10 JMS I (200 2 /LOOKUP STBLK, CREFNM /GET CREF STARTING BLK 0 JMP I (ERR6 TAD STBLK DCA I (BLK JMP I CHNSET CREFNM, FILENAME CREF.SV PAGE FXMR, TAD I XRLINE /SHOULD CONTAIN FIRST CHAR IN INSTR. DCA CHAR JMS I (CHECK /CHECK IT 301 -332 JMP .+4 /NOPE;A NUMBER MAYBE? FX2, TAD CHAR JMS I (PACK JMP FXMR JMS I (CHECK 260 -271 /CHECK FOR DIGIT 0-9 SKP /NOPE. IF THERE IS A SYMBOL, THIS IS TERMINATOR JMP FX2 JMS I (REPACK TAD SYM1 SNA CLA JMP FXMR CDF 10 TAD I (7644 /M RULES FOR FIXMRI TOO CDF 0 SMA CLA JMP FXNTR /NO M TAD I (PATCH1 DCA PATCH2 /APPROPRIATE SWITCH TAD SYM1 RTL PATCH2, HLT /SPA SZA OR SMA SNL + CLA JMP I (B FXNTR, JMS I (SYMCHK USER JMS I (ENTRY /ENTER AS USER SYMBOL JMS I (BUMP JMP I (B FXTAB, CLA CMA /DON'T INCLUDE 7777 ENTRY TAD USER+1 CIA DCA COUNT /# ENTRIES TO EXAMINE DCA SAVE FXTB2, TAD (4 TAD SAVE DCA SAVE FXTB9, CDF 10 TAD I SAVE /STOP AS SOON AS LITERAL FOUND TAD (5336 SNA CLA JMP FXTB3 TAD I SAVE /IF ALREADY NEG. ITS A PERM SYMBOL SMA TAD (4000 /MAKE IT PERMANENT DCA I SAVE ISZ COUNT TAD (3 TAD SAVE DCA SAVE DCA I SAVE ISZ SAVE JMP FXTB9 /LOOP FOR DURATION FXTB3, CDF 0 JMP I (B DEVCHK, 0 TAD I DEVCHK DCA T2 /SAVE TBL START ISZ DEVCHK CDF 10 TAD I T2 /HANDLER NUMBER AND (17 DCA T2 CLA CMA TAD I (37 /TBL LOCN IN 10037 TAD T2 DCA T2 TAD I T2 CDF 0 JMP I DEVCHK T2, 0 /THAT'S ALL FOLKS!! $$$$$$$$$$$$$$$$$$ |
Added src/os8/uni/CUSPS/DIRECT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 | /DIRECT V3D FOR OS/78 V1A AND OS/8 V3D / / / / / / / / / /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. / / / / / / / / / / /JANUARY 17, 1974 H.J. / /5-AUGUST-1975 MAINT. RELEASE CHANGES S.R. /1. UPDATED COPYRIGHT DATE /2. CHANGED VERSION NUMBER TO V4 /3. INCORPORATED PATCH (SEQ #2) OF FEB 1975 DSN / (FIXES BUG RE: DEFAULTING TO TTY: AND DSK:) / / 5-APR-77 MH OS/78 FIXES (V5A) / 18-MAY-77 MH SPR 2286 (V6A) / /DIRECTORY LISTING PROGRAM / / START ADDRESS 14600; JSW 6403 / PTR=20 CNT=21 INFPTR=22 OUHAND=23 INHAND=24 EPTR=26 INSCNT=27 TEMP=30 OKFLAG=31 IFCNT=32 OSWTCH=33 INFWDS=34 BDPTR=35 GPTR1=36 XR=10 XR1=11 XR2=12 AC2=CLA CLL CML RTL AC4000=CLA CLL CML RAR ACM2=CLA CLL CMA RAL ACM3=CLA CLL CMA RTL ALTOPT=7642 OPT1=7643 OPT2=7644 EQLS=7646 /EQUALS OPTION DATE=7666 BIPCCL=7777 /CONTAINS DATE EXTENSION IN BITS 3 AND 4 (MH) BUF=5200 /THE FILE OUTPUT BUFFER /5 BLOCKS LONG, TO 7577 FIELD 1 *2000 SKP CLA /NORMAL ENTRY JMP MSTRT /CHAIN ENTRY CDCALL, JMS I (200 /SEE WHAT THE PERSON WANTS 5 STAR, 5200 /IN SPECIAL MODE MSTRT, TAD I (OPT2 /GET OPTION /W RTR SNL CLA /SKIP FOR VESION NUMBER JMP EQUALT JMS I (ERROR /PRINT VERSION NUMBER VERNO+40 TAD (215 JMS I (TYPE /SET UP FOR MULTIPLE ENTRIES ON A LINE EQUALT, TAD I (EQLS /EQUALS OPTION WORD SPA /MUST BE POSITIVE CLA CLL CML RTR /SET AC LARGE POSITIVE TAD (-10 /CHECK LEGALITY OF OPTION SMA SZA CLA /SKIP IF GOOD JMP BADEQ /SUBSTITUTE .DI IF NULL EXTENSION TAD I (7604 /GET EXTENSION SNA /SKIP IF GIVEN TAD (0411 /.DI DCA I (7604 /PUT EXTENSION BACK / GET THE DATE INCREMENT BITS CDF 0 /GET GET WORD FORM FIELD 0(MH) TAD I (BIPCCL /THE BITS WITH DATE EXT. ARE 3 AND 4 (MH) CDF 10 /BACK TO FIELD 1 (MH) RTR /SHIFT THOSE BITS SO THEY CREATE A 0,10,20, OR 30(MH) RTR /AFTER MASKING (MH) AND (0030 /MASK (MH) DCA DATINC /SAVE THE DATE EXTENSION (MH) / CHECK FOR ? IN OUTPUT SPECIFICATION TAD (-10 DCA CNT /CNT HAVING -10 PUTS US AT FIRST CHAR S1C, TAD (7605 JMS I (GTSXBT /GET A CHAR TAD (-"?!7700 /CHECK FOR ? SNA JMP QINO TAD ("?-"* SNA CLA JMP AINO ISZ CNT JMP S1C / CHECK FOR EMBEDDED * IN ANY SPECIFICATION TAD (7605 S4L, DCA PTR TAD (-10 DCA CNT ACK, TAD PTR JMS I (GTSXBT TAD (-"*!7700 SZA CLA JMP CNTUP AC2 TAD CNT SZA TAD (6 SNA CLA ISZ CNT TAD PTR JMS I (GTSXBT SZA CLA JMP AINO CNTUP, ISZ CNT JMP ACK TAD I PTR SNA CLA JMP I (NULLCK TAD (5 TAD PTR JMP S4L /THIS IS THE END OF OPERATION CODE /IT CLOSES THE FILE AND HANDLES RETURNS ENDCHK, ISZ I (ECHO TAD (232 OLOOP, JMS I (OUTCHR TAD I (OUWDCT /GET -WORDS LEFT IN BUFFER AND (177 /CHECK AGAINST NEW BUFFER # SNA /SPR 2286, CHECK CAREFULLY (MH) TAD RPOS /TO SEE IF ANY TRAILING (MH) CIA /OR DANGLING CHARS (MH) TAD (RPOS-1 /ARE LEFT OVER (MH) SZA!CLA /(MH) JMP OLOOP /KEEP GOING TO DUMP ONE TAD I (OUWDCT TAD (1200 /DONT DUMP IF AT END SZA CLA JMS DUMP /DUMP BUFFER TAD I (7600 JMS I (200 4 7601 CLEN, 0 JMP CLOERR JMP ABORT /CODE MOVED TO ANOTHER PAGE (MH) PAGE NULLCK, TAD (7201 DCA AO2 TAD (7201 DCA AO1 TAD I (7600 SNA JMP TTYHND JMS I (200 1 AO1, 7201 HLT TAD AO1 JMP CMN TTYHND, TAD (2424 DCA TTY1 TAD (3100 DCA TTY2 JMS I (200 1 TTY1, 0 TTY2, 0 AO2, 7201 JMP I (IDBLVT TAD TTY2 DCA I (7600 TAD AO2 CMN, DCA OUHAND TAD (7601 DCA BLCK TAD I (7600 JMS I (200 3 BLCK, 7601 LENGTH, 0 JMP I (NOROOM TAD BLCK DCA I (BLCKN TAD (BUF DCA I (OCPTR TAD (RPOS-1 /SPR 2286 (MH) DCA I (RPOS TAD (-1200 /NUMBER OF WORDS IN BUFFER DCA I (OUWDCT DCA I (CLEN TAD I (7605 SNA JMP FINDSK /V3C IF NO DEVICE SPECIFIED, LOOKUP 'DSK' SETDEV, DCA I (7605 TAD (7605 DOMOIN, DCA INFPTR TAD (6601 DCA AI1 TAD I INFPTR SNA JMP I (ENDCHK JMS I (200 1 AI1, 6601 HLT TAD AI1 DCA INHAND TAD (OUTCHR DCA OSWTCH JMS I (CRLF TAD I (DATE DCA I (DATNOW /SAVE CURRENT DATE (MH) TAD I (DATE /GET DATE BACK INTO AC (MH) JMS I (PDATE JMS I (CRLF JMS I (CRLF DCA I (ECOUNT CMA TAD I (EQLS SMA /SET UP NEGATIVE COUNT CMA DCA I (ALNCNT /SAVE FOR LATER TAD I (ALNCNT /SAVE FOR LATER DCA I (LNCNT /SAVE FOR LATER JMP I (PG1 AINO, JMS I (ERROR ILLA+40 JMP EOLIN QINO, JMS I (ERROR ILLQ+40 EOLIN, TAD (215 /COME HERE TO ABORT DIRECTORY JMS I (TYPE /AND PRINT CRLF JMP I (ABORT /ABORT OPERATION AND GOTO ENDUP FINDSK, DCA XX /V3C JMS I (200 /CALL USR 12 /TO DO AN INQUIRE 5723 /TO LOCATE 'DSK' XX, 0 0 JMP I (IDBLVT /NO 'DSK' IMPOSSIBLE (SO SAY NO 'TTY') TAD XX /RETURN DEVICE NUMBER OF DSK JMP SETDEV PAGE DIRCTY=0 /LOCATION OF INPUT DIRECTORY PG1, TAD I INFPTR TAD (7757 DCA TEMP TAD I TEMP SMA CLA JMP NFIN CIF 0 JMS I INHAND 1400 DIRCTY 1 JMP INDERR CDF 0 /CODE TO CHECK FOR TAD I (DIRCTY /LEGALITY OF DIRECTORY CMA CLL TAD I (DIRCTY+2 CDF 10 SNL TAD (7700 SZL CLA JMP BIDIR /DIRECTORY IS BAD / COUNT NUMBER OF INPUTS FROM SAME DEVICE TAD INFPTR SKP GETCNT, TAD PTR IAC DCA PTR TAD I PTR SZA CLA JMP NOSUB TAD (5200 DCA I PTR TAD (3 TAD PTR DCA TEMP TAD (5200 DCA I TEMP NOSUB, TAD PTR TAD (4 DCA PTR ISZ CNT TAD I (OPT2 AND (10 SZA CLA JMP NOPTIM TAD I PTR CIA TAD I INFPTR SNA CLA JMP GETCNT NOPTIM, TAD CNT CIA DCA INSCNT TAD PTR DCA I (MOIN DCA BDPTR JMP I (NBLOCK BIDIR, JMS I (ERROR BADDIR+40 JMP I (EOLIN NFIN, JMS I (ERROR NFLEIN+40 JMP I (EOLIN INDERR, JMS I (ERROR BADIRD+40 JMP I (EOLIN /THIS IS THE ERROR MESSAGE PRINTER ERROR, 0 ISZ I (ECHO CLA CLL TAD (TYPE DCA OSWTCH TAD (-100 DCA CNT PLOOP, TAD I ERROR JMS I (GTSXBT DCA DFLAG TAD DFLAG JMS I (CONVTP ISZ CNT TAD DFLAG SZA CLA JMP PLOOP ISZ ERROR JMP I ERROR DFLAG, 0 ABORT, TAD I (ALTOPT /MOVED (MH) SMA CLA JMP I (CDCALL CIF CDF 0 JMP I (7605 BADEQ, JMS I (ERROR BIGEQ+40 JMP I (EOLIN PAGE /THIS IS THE SUPERQUASIFACETED DIRECTORY PATTERN MATCHING ROUTINE /THE INPUT DIRECTORY IS SEARCHED HERE, IF A MATCH /IS FOUND USING THE INPUT GROUPING /GOT1 GETS CONTROL WITH -BLOCKS IN THE AC NBLOCK, TAD BDPTR /POINTER TO START OF DIR BLOCK DCA XR CDF 0 TAD I XR /GET BLOCK NUMBER FIRST FILE DCA BLOCK TAD I XR /NEXT SEGMENT NUMBER DCA LFLAG /IF IT 0 WE AT END ISZ XR /SKIP TENTATIVE FILE WORD TAD I XR /GET -NUMBER OF INFO WORDS CIA /MAKE POSITVE DCA INFWDS TAD XR /POINT TO FIRST IAC /ENTRY DCA EPTR BLOOP, TAD I EPTR /GET FILENAME WORD CDF 10 SNA CLA /SKIP IF FILE HERE JMP EMPTY /NO... ITS REALLY AN EMPTY TAD INSCNT /SET NUMBER OF INPUT TO LOOK DCA NCNT /AT ALL AT ONCE DCA MATFLG /CLEAR MATCH FLAG TAD INFPTR /ADDRESS OF FIRST INPUT SKP MN1, TAD GPTR2 /ADDRESS OF CURRENT INPUT TAD (5 /GTSXBT SUBR REQUIRES US TO DCA GPTR2 /POINT TO END OF FIELD TAD EPTR /POINT DIRECTORY POINTER TO TAD (4 /END OF ENTRY FOR SAME REASON DCA GPTR1 TAD GPTR1 /SET EPNEXT TO POINT TO TAD INFWDS /MINUS NUMBER OF BLOCKS IN DCA EPNEXT /FILE WORD TAD (-10 /NUMBER OF CHARS TO LOOK AT WILDNM, DCA CNT MLP, TAD GPTR2 /OK - GET A CHARACTER FROM JMS I (GTSXBT /STRING TAD (-"*!7700 /IS IT AN * SNA /SKIP IF NOT * JMP WILDA /YEP... ITS A WILD CARD TAD ("*-"? /IS IT A ? SNA /SKIP IF NOT JMP WILD /YES... FORCE MATCH ON THIS CHAR TAD ("?&77 /RESTORE VALUE CIA /NEGATE DCA CHAR /AND SAVE TAD GPTR1 /NOW GET CHAR FROM DIRECTORY CDF 0 JMS I (GTSXBT CDF 10 TAD CHAR /DO CHARS MATCH SZA CLA /SKIP IF THEY DO JMP NM1 /NO MATCH ON THIS INPUT WILD, ISZ CNT /BUMP COUNT OF CHARS & POINTER JMP MLP /COMPARE ALL 8 MEXT, ISZ MATFLG /A MATCH!!!!!!! NM1, CLA /WILD CARD COMES HERE WITH ICHY AC ISZ NCNT /HAVE WE CHECKED GROUP OF INPUTS JMP MN1 /NO CHECK WHOLE GROUP TAD MATFLG /HAVE THERE BEEN ANY MATCHES SZA CLA /SKIP IF NOT TAD (4 /WILL INVERT /V SWITCH TAD I (OPT2 /ADD SWITCH AND (4 /ISOLATE IT CDF 0 /SKIPS IF INPUT DIRECTORY ENTRY IS NOT CANDIDATE /THAT IS - IF A MATCH WAS NOT FOUND BETWEEN ANY /OF THE INPUTS AND /V WAS NOT SPECIFIED OR /A MATCH WAS FOUND AND /V WAS SPECIFIED /THIS ALLOWS /V TO MEAN EVERYTHING BUT... SZA CLA TAD I EPNEXT /GET -NUMBER OF BLOCKS CDF 10 SZA /SKIPS IF TENTATIVE OR NOT CANDIDATE JMP I (GOT1 /PROCESS FILE NENT, TAD EPNEXT /POINT EPTR TO BLOCK DCA EPTR /COUNT OF FILE JMP NEMPTY EMPTY, ISZ EPTR /ON EMPTY MAKE EPTR POINT TO BLOCK COUNT JMS I (HEMPTY /HANDLE EMPTY SLOTS NEMPTY, CDF 0 TAD I EPTR /GET BLOCK COUNT CIA /MAKE POSITIVE TAD BLOCK DCA BLOCK /KEEP SUM ISZ EPTR /POINT TO NEXT ENTRY ISZ I BDPTR /POINTS TO -NUMBER OF ENTRIES JMP BLOOP /NOT DONE WITH SEGMENT CDF 10 TAD (400 /BUMP TO NEXT SEGMENT TAD BDPTR DCA BDPTR TAD LFLAG /DID WE PROCESS LAST SEGMENT SZA CLA /SKIP IF WE DID JMP NBLOCK /PROCESS NEW SEGNENT JMP I (SAYNON /HANDLE WILD CARDS WILDA, TAD CNT /GET CURRENT CHAR POSITION TAD (6 /ADD SIZE OF FILENAME SPA /SKIP IF IN EXTENSION FIELD JMP WILDNM /THIS BUMPS TO EXTENSION JMP MEXT /THIS MEANS IT HAS TO BE A MATCH CHAR, 0 EPNEXT, 0 GPTR2, 0 LFLAG, 0 NCNT, 0 BLOCK, 0 MATFLG, 0 PAGE GOT1, DCA IFCNT /-# OF BLOCKS IN AC JMS I (DATCHK /VERIFY /C AND /O SWITCHES TAD (OUTCHR DCA OSWTCH TAD I (OPT2 SPA CLA JMP I (NENT JMS I (ADDINF /SEE IF ADDITIONAL INFO WORDS TAD I (OPT2 AND (100 /IS /R USED SNA CLA JMP NOR TAD INFPTR /FILL IN *.* FOR FILENAME IAC DCA TEMP TAD (5200 /* DCA I TEMP ISZ TEMP ISZ TEMP ISZ TEMP /POINT TO EXTENSION TAD (5200 /.* DCA I TEMP /SUBSTITUTE IT NOR, TAD GPTR1 CDF JMS I (PNMSUB TAD I (OPT1 RTL SNL CLA JMP SKPBLK JMS I (CONVTP TAD I (BLOCK JMS BSPACE /(MH) PATCH FOR /B/E SKPBLK, TAD I (OPT1 AND (100 SZA CLA JMP NODATE TAD IFCNT CIA JMS I (PRNUM TAD INFWDS SNA CLA JMP NODATE CDF TAD I GPTR1 CDF 10 JMS I (PDATE NODATE, ISZ LNCNT /IS LINE FILLED? JMP MOROLN /NO JMS CRLF TAD ALNCNT /RESET COUNT DCA LNCNT JMP I (NENT MOROLN, TAD (5 /OUTPUT 5 BLANKS JMS I (BLANK JMP I (NENT /BLANKS ROUTINE BLANK, 0 CIA DCA BLTMP JMS I (CONVTP ISZ BLTMP JMP .-2 JMP I BLANK BLTMP, 0 ALNCNT, 0 LNCNT, 0 OUTCHR, 0 JMP I RPOS RPOS1, DCA I OCPTR JMS RPOS RPOS2, DCA HOLD JMS RPOS RPOS3, RTL RTL DCA HOLD2 TAD HOLD2 AND (7400 TAD I OCPTR DCA I OCPTR ISZ OCPTR TAD HOLD2 RTL RTL AND (7400 TAD HOLD DCA I OCPTR ISZ OCPTR ISZ OUWDCT SKP JMS DUMP JMS RPOS JMP RPOS1 RPOS, RPOS1 JMP I OUTCHR OUWDCT, 0 OCPTR, 0 HOLD, 0 HOLD2, 0 BSPACE, 0 /(MH) PATCH FOR /B/E JMS I (OPRNT CLA!IAC JMS I (BLANK JMP I BSPACE PAGE GTSXBT, HLT CLL RAL TAD CNT CML RAR DCA TEMP TAD I TEMP SNL JMS ROTR6 AND (77 JMP I GTSXBT ROTR6, 0 RTR RTR RTR JMP I ROTR6 CONVTP, HLT SZA TAD (240 AND (77 TAD (240 JMS I OSWTCH JMP I CONVTP TYPE, HLT DCA HOLD1 TAD (217 JMS I (CTYPE SKP DCA ECHO TAD ECHO SNA CLA JMP I TYPE JMS I (CINTER SKP JMP I (ABORT TAD HOLD1 JMS TTY JMP I TYPE HOLD1, 0 TTY, 0 TLS TSF JMP .-1 TAD (-215 SZA CLA JMP I TTY TAD (12 JMP TTY+1 ECHO, 1 OPRNT, 0 DCA GTSXBT TAD (-4 DCA CNT OPLP, TAD GTSXBT RTL CLL RAL DCA GTSXBT TAD GTSXBT RAL AND (7 TAD (260 JMS I (CONVTP ISZ CNT JMP OPLP JMP I OPRNT /ROUTINE TO MAKE SURE USER SPECIFIED //C AND /O SWITCHES CAUSE CORRECT MATCH WITH DATE DATCHK, 0 TAD I (OPT1 /CHECK /C JMS MDATE NOP /RETURN HERE WITH AC=0 IF NO /C SZA CLA /RETURN HERE WITH AC=0 IF DATES MATCH JMP I (NENT /DATES DONT MATCH AND /C GIVEN TAD I (OPT2 /CHECK /V JMS MDATE CMA CLA /SET AC=-1 IF NO /V SNA CLA /RETURN HERE AC=0 IF DATES SAME JMP I (NENT /DATES SAME WITH /V-IGNORE FILE JMP I DATCHK /CONTINUE MDATE, 0 //O AND /V ARE AC2 RTL /IS IT OPTION ON? SMA CLA /SKIP IF IT IS JMP I MDATE /NO- RETURN WITH 0 AC ISZ MDATE /SKIP RETURN CDF 0 TAD I GPTR1 /GET DATE WORD CIA CDF 10 TAD I (DATE /COMPARE WITH MONITORS, 0 IF = JMP I MDATE PAGE PRNUM, 0 DCA NUM TAD (PWRTEN DCA PTR PRNTLP, ISZ MPNTCNT SKP AC4000 DCA PNTFLG DCA DIG DIVLPY, TAD I PTR SNA JMP I PRNUM CLL TAD NUM SNL JMP PRTDIG DCA NUM ISZ DIG JMP DIVLPY PRTDIG, CLA TAD DIG TAD PNTFLG SNA STPBLK, JMP PRBLNK TAD (260 JMS I (CONVTP CLA CLL CML RAR NXTPWR, ISZ PTR JMP PRNTLP PRBLNK, JMS I (CONVTP JMP NXTPWR NUM, 0 PNTFLG, 0 DIG, 0 MPNTCNT,0 PWRTEN, -1750;-144;-12;-1;0 PDATE, 0 SNA JMP FDATE DCA DATEY TAD DATNOW /WAS A DATE ENTERED AT BOOT TIME?(MH) SNA /SKIP IF SO(MH) JMP FDATE /NO -- DON'T PRINT DATE IF NOT ENTERED(MH) AND (7 /YES -- SAVE YR NEGATED(MH) CMA!IAC /(MH) DCA DATTMP /SAVE THIS RESULT TEMP(MH) ISZ I (STPBLK JMS I (CONVTP ACM3 DCA I (MPNTCNT TAD DATEY RTR RAR AND (37 JMS I (PRNUM TAD ("- JMS I (CONVTP TAD DATEY CLL RTL RTL RAL AND (17 DCA PRNUM TAD PRNUM TAD PRNUM TAD PRNUM TAD (DATTAB-4 DCA XR ACM3 DCA CNT TAD I XR JMS I OSWTCH ISZ CNT JMP .-3 TAD ("- JMS I OSWTCH TAD DATEY AND (7 TAD DATTMP /ADD -ENTERED YR(MH) CLL /CLEAR LINK FOR FLAG USE(MH) SZA!SMA!CLA /SKIP AND CLEAR IF ENTERED YR BIGGER,SAME(MH) CML /SET LINK IF DIR YR BIGGER THAN ENETERED YR (MH) TAD DATEY /GET DATE BACK(MH) AND (7 /GET THE YR(MH) SZL /SKIP IF ENTERED YR WAS BIG OR SAME(MH) TAD (-10 /SUBTRACT 10 OCTAL IF DIR YR WAS BIGGER(MH) TAD DATINC /ADD DATE INCREMENT(MH) TAD (106 JMS I (PRNUM CLA CMA TAD I (STPBLK DCA I (STPBLK JMP I PDATE FDATE, TAD I (LNCNT /SEE IF AT END OF LINE? IAC /AC=0 NOW IF YES SNA CLA /OUT PUT SPACES TO FILL DATE SLOT JMP I PDATE /NO NEED FOR SPACES IF AT END OF LINE TAD (12 /10 SPACES IS WHATS NEEDED JMS I (BLANK JMP I PDATE /LEAVE DATEY, 0 DATNOW, 0 /CURRENT DATE IF ONE WAS ENTERED(MH) DATINC, 0 /DATE ENXTENSION TO 1970 (0,10,20, OR 30) (MH) DATTMP, 0 /TEMP STORE (MH) PAGE CTYPE, 0 DCA T2 TAD (200 KRS CIA TAD T2 SNA CLA KSF JMP I CTYPE KCC TAD ("^ JMS I (TTY TAD T2 TAD (100 JMS I (TTY TAD (215 JMS I (TTY ISZ CTYPE JMP I CTYPE T2, 0 CINTER, 0 TAD (203 JMS CTYPE JMP UPPCK JMP SPURGE UPPCK, TAD (220 JMS CTYPE JMP I CINTER SKP SPURGE, CMA DCA I (ALTOPT ISZ CINTER JMP I CINTER HEMPTY, 0 CDF 0 TAD I EPTR CDF 10 CIA TAD ECOUNT DCA ECOUNT TAD I (OPT1 AND (200 SZA CLA JMP LISTEM TAD I (OPT2 SMA CLA JMP I HEMPTY LISTEM, TAD I (OPT1 AND (10 /IS /I GIVEN SNA CLA /IF YES PAD BY ADDIDTIONAL INFO WORDS JMP EMSG CLA CMA TAD INFWDS /NUMBER OF SPACES=5*(INFWDS-1) DCA DFLAG TAD DFLAG RTL CLL TAD DFLAG SZA /DONT OUTPUT 4096 BLANKS JMS I (BLANK EMSG, TAD (EMPTYM-1 DCA XR1 TAD (-11 DCA CNT EOLP, TAD I XR1 JMS I (OUTCHR ISZ CNT JMP EOLP TAD I (OPT1 RTL SNL CLA JMP SKIPES JMS I (CONVTP TAD I (BLOCK JMS I (BSPACE /(MH) PATCH FOR /B/E SKIPES, CDF 0 TAD I EPTR CDF 10 CIA JMS I (PRNUM ISZ I (LNCNT /AT END OF LINE JMP WORK /NO. HAVE TO DO BLANK PADDING JMS I (CRLF TAD I (ALNCNT /RESET COUNT DCA I (LNCNT JMP I HEMPTY WORK, TAD (5 /FORCES 5 BLANKS JMS I (BLANK TAD I (OPT1 AND (100 /CHECK FOR /F SZA CLA /ADD 10 SPACES TO COVER DATE JMP I HEMPTY TAD (12 JMS I (BLANK JMP I HEMPTY ECOUNT, 0 PAGE PNMSUB, 0 DCA NMEPLC RDF TAD (CDF DCA FLDFUD TAD (-10 DCA CNT PNLOOP, TAD NMEPLC FLDFUD, HLT JMS I (GTSXBT CDF 10 JMS I (CONVTP TAD (3 TAD CNT SZA CLA JMP .+3 TAD (". JMS I OSWTCH ISZ CNT JMP PNLOOP JMP I PNMSUB NMEPLC, 0 WRTERR, JMS I (ERROR OUERR+40 JMP I (EOLIN CLOERR, JMS I (ERROR CLERR+40 JMP I (EOLIN NOROOM, JMS I (ERROR SPRBLM+40 JMP I (EOLIN IDBLVT, JMS I (ERROR NOTTY+40 JMP I (EOLIN SAYNON, TAD (OUTCHR DCA OSWTCH JMS I (CRLF JMS I (CRLF TAD (-4 /FORCE PRINTING OF ONLY 1 DIGIT DCA I (MPNTCNT /FOR 0 FREE BLOCKS TAD I (ECOUNT JMS I (PRNUM JMS I (CONVTP TAD (FRBLM-1 DCA XR1 TAD (-13 DCA CNT FRBLP, TAD I XR1 JMS I (OUTCHR ISZ CNT JMP FRBLP JMS I (CRLF TAD (14 /FORM FEED JMS I (OUTCHR TAD MOIN JMP I (DOMOIN MOIN, 0 CRLF, 0 TAD (215 JMS OUTCHR TAD (212 JMS OUTCHR JMP I CRLF /ROUTINE TO DUMP ADDITIONAL INFO WORDS IF WANTED ADDINF, 0 TAD I (OPT1 AND (10 /CHECK /I SWITCH SNA CLA JMP I ADDINF CLA CMA TAD INFWDS /GET NUMBER SPA SNA /MUST BE 2 OR MORE TO PRINT JMP CLARET /RETURN CIA DCA CNTX TAD GPTR1 IAC /BUMP TO FIRST ONE DCA PGPTR1 ADDLP, CDF 0 TAD I PGPTR1 /GET WORD CDF 10 JMS I (OPRNT /PRINT IT IN OCTAL JMS I (CONVTP /OUTPUT A BLANK ISZ PGPTR1 /BUMP ISZ CNTX /COUNT NUMBER JMP ADDLP CLARET, CLA /RETRN JMP I ADDINF PGPTR1, 0 CNTX, 0 PAGE VERNO, TEXT /DIRECT V6A / BADIRD, TEXT /ERROR READING INPUT DIRECTORY/ SPRBLM, TEXT /NO ROOM FOR OUTPUT FILE/ OUERR, TEXT /ERROR WRITING FILE/ CLERR, TEXT /ERROR CLOSING FILE/ NFLEIN, TEXT /DEVICE DOES NOT HAVE DIRECTORY/ BIGEQ, TEXT /EQUALS OPTION BAD/ ILLQ, TEXT /ILLEGAL ?/ ILLA, TEXT /ILLEGAL */ BADDIR, TEXT /BAD INPUT DIRECTORY/ NOTTY, TEXT /THERE IS NO HOPE-THERE IS NO TTY HANDLER IN YOUR SYSTEM/ EMPTYM, "<;"E;"M;"P;"T;"Y;">;240;240 FRBLM, "F;"R;"E;"E;240;"B;"L;"O;"C;"K;"S "B;"A;"D /PROTECTION AGAINST BAD DATE DATTAB, "J;"A;"N "F;"E;"B "M;"A;"R "A;"P;"R "M;"A;"Y "J;"U;"N "J;"U;"L "A;"U;"G "S;"E;"P "O;"C;"T "N;"O;"V "D;"E;"C "B;"A;"D /PROTECTION AGAINST BAD DATE "B;"A;"D /PROTECTION AGAINST BAD DATE "B;"A;"D /PROTECTION AGAINST BAD DATE DUMP, 0 TAD I (LENGTH /GET LENGTH AVAILABLE SNA /IF ZERO ITS NON FILE STRUCTURE JMP NOMATR /IF ZERO DOESNT MATTER CLL TAD I (CLEN /ADD CURRENT SIZE TAD (5 /ADD # OF BLOCKS SZL CLA /WE ARE OK IF SKIPS JMP I (NOROOM TAD I (CLEN /UPDATE CLOSING LENGTH TAD (5 /BY NUMBER OF BLOCKS DCA I (CLEN /SAVE FOR CLOSE NOMATR, TAD OUWDCT TAD (5210 DCA CTLWD CIF 0 JMS I OUHAND CTLWD, 5210 BUFAD, BUF BLCKN, 0 JMP WRTERR TAD (5 TAD BLCKN /UPDATE BLOCK # BY 5 DCA BLCKN TAD (-1200 DCA OUWDCT TAD BUFAD DCA OCPTR JMP I DUMP / *4600 JMS INIT JMS INIT JMP I (2000 JMP I (2001 INIT, 0 ISZ INIT CLA CLL TAD (2000 CDF 0 DCA I (7745 TAD (6403 DCA I (7746 CDF 10 JMP I INIT $ |
Added src/os8/uni/CUSPS/DTCOPY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 | /DECTAPE COPY, V10 / / / / / / // / / / / /COPYRIGHT (C) 1966, 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. / / / / / / /DECTAPE COPY /VERSION .B07 / / /COPYRIGHT 1968 DIGITAL EQUIPMENT CORPORATION / MAYNARD, MASS. OCTOBER,1968 / THIS PROGRAM COPIES A DECTAPE FROM ONE / SPECIFIED UNIT TO ANOTHER. ALL DECTAPE / ROUTINES ARE INTERNALLY GENERATED SO THAT / IT MAY BE RUN WITHOUT THE MONITOR SYSTEM. / / STARTING ADDRESS IS 200 / DTRA=6761 DTCA=6762 DTXA=6764 DTSF=6771 DTRB=6772 DTLB=6774 WC=7754 CA=7755 / THESE AREAS ARE USED BY DATA BREAK BUFIOT=1547 /INPUT OUTPUT BUFFER BUFCHK=4563 /RE-READ BUFFER / *20 / PAGE ZERO WORKING STORAGE BADTRY, -3 /COUNT OF READ ERRORS CURBLK, 0 /CURRENT BLOCK NUMBER TRASH1, 0 /WORKING STORAGE TRASH2, 0 /WORKING STORAGE TRASH3, 0 /WORKING STORAGE BLKCNT, 0 /NUMBEROF BLOCKS TO READ /OR MINUS THAT NUMBER SORBLK, 0 /STORAGE FOR CURBLK WORDS, 0 /NUMBER OF WORDS PER BLOCK INUNIT, 0 /INPUT UNIT IN LH OCT CHAR OUTUNI, 0 /OUTPUT UNIT IN LH OCT CHAR RESTOR, 0 /NUMBER OF WORDS TO COPY RESAVE, 0 /NEGATIVE OF BLKCNT SMICAR, 0 /CHARACTER STORAGE SMISUM, 0 /RUNNING SUM SPELIN, 0 /POINTER SEAZIK, 0 /INPUT AREA SEAZOK, 0 /TEMP STORAGE DECTWC, 0 /FLAG TO DETERMINE IF VALIDATION WILL OCCUR DECTCA, 0 /CURRENT ADDRESS STORE FIRST, 0 /STARTING BLOCK NUMBER LAST, 0 /LAST BLOCK NUMBER LENGTH, 0 /NUMBER OF WORDS TO COPY PARITY, 0 /PARITY ERROR FLAG (COUNT) MSKIN, 0 /NEGATIVE OF INUNIT PARDEL, PSTACK /POINTER TO PARITY TABLE / / PAGE ZERO SUBROUTINES DIREC, 0 CLA DTRA /FIND DIRECTION AND [400 SZA CLA /BRANCH BACK ISZ DIREC /REVERSE DIRECTION EXIT JMP I DIREC /FORWARD DIRECTION EXIT / / BACKUP, 0 /SUBROUTINE REWINDS TAPE CLA DTRA AND (670 /CLEAR DIRECTION AND MOVEMENT DTXA TAD (600 /GO IN REVERSE DTXA DTSF JMP .-1 /WAIT UNTILL DONE JMS I [ERROR /BUSYWORK FOR ERRORS JMP I BACKUP /EXIT ON ENDZONE ERROR JMP BACKUP+1 *200 BEGIN, CLA CLL /INITIALIZE DTLB TLS /TELETYPE OUTPUT JMS I [SPEAK MESS0 JMS I [SPEAK MESS1 /INPUT UNIT NUMBER JMS GETNUM /CHECK INPUT UNIT NUMBER DCA INUNIT TAD INUNIT CIA /SET UP INPUT UNIT MASK DCA MSKIN JMS I [SPEAK MESS2 /OUTPUT UNIT NUMBER JMS GETNUM TAD MSKIN /MAKE SURE UNITS ARE DIFFERENT SNA JMP BEGIN /INPUT ERROR TAD INUNIT DCA OUTUNI JMS I [SPEAK /GET FIRST BLOCK NUMBER MESSA JMS I [SMIGIT NOP DCA CURBLK TAD CURBLK CIA /STORE BEGINNING MARKER DCA FIRST JMS I [SPEAK /GET LAST BLOCK NUMBER MESSB JMS I [SMIGIT CLA CMA /KLUDGE IF NO INPUT DCA LAST TAD FIRST CLL SZA TAD LAST /MAKE SURE VALID SZA SNL CLA JMP BEGIN DTLB TAD INUNIT /INIT INPUT UNIT JMS I [FIXTAP DCA WORDS /SET UP BLOCK LENGTH TAD OUTUNI /INIT OUTPUT UNIT JMS I [FIXTAP CIA /MAKE SURE BLOCK LENGTH TAD WORDS /SAME ON INPUT AND OUTPUT SZA CLA JMP BADLEN /BLOCK LENGTH ERROR JMS I [SPEAK /TYPE OUT BLOCK LENGTH MESS3 TAD WORDS JMS I [TYPNUM JMS I [SPEAK /SEND <RETURN><LINE FEED> MESS0+11 TAD WORDS CIA /COMPUTE NUMBER OF BLOCKS DCA LENGTH /TO READ AND WRITE DCA BLKCNT /CLEAR BLOCK COUNTER TAD [3014 /LOAD BUFFER SIZE TAD LENGTH SPA JMP BADLEN /TOO MANY WORDS PER BLOCK ISZ BLKCNT /TALLY TAD LENGTH SMA JMP .-3 /CONTINUE COUNTING TAD WORDS /GET NUMBER OF TAD [-3014 /WORDS TO READ CIA /AND TO WRITE DCA RESTOR /PRESERVE IN RESTOR TAD RESTOR DCA LENGTH TAD BLKCNT /SAVE NEGATIVE OF BLKCNT CIA DCA RESAVE JMS I [SPEAK MESSC JMS I [SMIGIT NOP DCA DECTWC /SET UP VERIFY FLAG / / MAIN LOOP FOR COPY LETS, TAD CURBLK /CHECK FOR PARTIAL BLOCK TO COPY TAD BLKCNT CLL CMA IAC TAD LAST SZL JMP LETT /COPY FULL LENGTH DCA LENGTH /ADJUST WORDS TO COPY TAD RESTOR CIA TAD WORDS ISZ LENGTH JMP .-2 /COMPUTE PROPER LENGTH CIA TAD WORDS DCA LENGTH TAD [REVERS /KLUDGE COPY EXIT DCA I [COPY JMP I [COPY+1 /PERFORM THIS COPY LETT, JMS I [COPY /COPY THIS BLOCKS TAD BLKCNT TAD BLKCNT /ADVANCE CURRENT BLOCK TAD CURBLK DCA CURBLK JMS DIREC JMP LETU /FORWARD EXCEEDED CHECK LETR, TAD CURBLK /REVERSE CHECK TAD FIRST CMA SZA CLA /CHECK FOR MINUS 1 JMP LETT /CONTINUE COPY JMP I [DONE /FINISHED JOB LETU, TAD CURBLK CLL CMA IAC TAD LAST SZL CLA /CHECK FOR END OF TAPE JMP LETS JMP I [REVERV / THIS SUBROUTINE GETS INPUT / AND OUTPUT UNIT NUMBERS FROM / THE TELETYPE AND VALIDATES THEM. / GETNUM, 0 JMS I [SMIGIT NOP AND [7 CLL RTR /MOVE TO LH THREE BITS RTR JMP I GETNUM / / BADLEN, JMS I [SPEAK /BLOCK LENGTH ERROR MESS3A JMP BEGIN / / / PAGE / / THIS TURN AROUND IS ENTERRED / WHEN THE LAST COPY MOVED INTO / THE FINAL DATA AREA REVERV, TAD LAST DCA CURBLK /START OF COPY BACK JMS REVALT /CHANGE INUNIT AND OUTUNI TAD INUNIT DTCA DTXA JMS I [RESET /REPOSITION TAPE TAD OUTUNI DTCA DTXA JMS I [RESET /REPOSITION TAPE REBACK, TAD CURBLK CMA /COMPUTE NEW COPY LENGTH TAD SORBLK TAD BLKCNT SNA JMP REVERS /KLUDGE IF NOTHING TO DO DCA SORBLK /MINUS # OF BLOCKS TAD SORBLK DCA BLKCNT /SAVE THIS NUMBER TAD WORDS ISZ SORBLK JMP .-2 DCA LENGTH /LENGTH FOR COPY JMS I [COPY /PERFORM IT TAD CURBLK TAD BLKCNT TAD RESAVE /ADVANCE CURBLK DCA CURBLK TAD RESAVE DCA BLKCNT TAD RESTOR DCA LENGTH JMP I [LETR /CONTINUE COPY / / / THIS TURN AROUND IS ENTERRED / WHEN THE LAST SEARCH FOR / CURRENT BLOCK CAUSED AN END / OF TAPE ERROR / REVERT, JMS DIREC SKP JMP I [DONE /FINISHED IF DIRECTION REVERSE TAD SORBLK DCA CURBLK /RESTORE CURBLK TAD OUTUNI /RESET LOCATION OF DTCA DTXA /OUTPUT DECTAPE AND JMS I [RESET /FIND LAST BLOCK TAD [4000 /BY LOOKING FOR IMAGINARY JMS I [SEARCH /BLOCK NUMBER (KLUDGING SEARCH) NOP JMP .-3 /TRY AGAIN ON ERRORS TAD SEAZIK /MUST BE LAST BLOCK NUMBER DCA CURBLK JMS REVALT /CHANGE INUNIT AND OUTUNI JMP REBACK / / / THIS TURN AROUND IS ENTERRED WHEN THE / END BLOCK FOR COPY WAS REACHED BY A / PARTIAL BUFFER COPY. / REVERS, CLA CMA /ADJUST CURBLK POINTER TAD SORBLK DCA CURBLK TAD RESAVE DCA BLKCNT /MAKE BLKCNT NEGATIVE TAD RESTOR DCA LENGTH /RESTORE COPY LENGTH JMS REVALT /CHANGE INUNIT AND OUTUNI JMP I [LETR / REVALT, 0 TAD OUTUNI TAD [400 DCA OUTUNI /REVERSE DIRECTION TAD INUNIT TAD [400 DCA INUNIT /REVERSE DIRECTION JMP I REVALT / /THIS SUBROUTINE PERFORMS THE OPERATION /OF COPYING N BLOCKS AND VALIDATING /THE OUTPUT. /WHEN END OF TAPE IS REACHED THE ROUTINE /BRANCHES TO "REVERS", OR TO REVERT /AS APPROPRIATE. / COPY, 0 KSF /CHECK FOR <^C> JMP .+5 KRB TAD [-203 SNA JMP I [7600 CLA TAD INUNIT /LOAD STAT REG A DTCA DTXA TAD [-3 DCA BADTRY /RESTORE ERROR COUNTER JMS I [DECTAP COPO, BUFIOT /INPUT AREA 30 /READ CODE NOP /NORMAL RETURN TAD PARITY /CHECK PARITY FLAG SZA JMP I [ERRPAR /FIX MESSAGE FOR PARITY ERRORS COPZ, TAD OUTUNI /(IGNORE END ZONE) DTCA DTXA /OUTPUT UNIT & DIRECTION COPYB, JMS I [DECTAP /WRITE OUTPUT TAPE BUFIOT /OUTPUT BUFFER 50 /WRITE CODE JMP COPCPR /NORMAL RETURN TAD [REVERS /END ZONE RETURN DCA COPY /FIX UP EXIT COPCPR, TAD CURBLK DCA SORBLK /STORE CURRENT BLOCK NUMBER TAD DECTWC SZA CLA JMP I COPY /NO VERIFICATION JMS I [RESET /RETURN TO FRONT END JMS I [DECTAP /READ DATA COPR, BUFCHK /INPUT AREA 30 /READ CODE JMP .+2 /NORMAL RETURN BRANCH TAD I [WC /END ZONE RETURN TAD LENGTH CIA DCA TRASH3 /COUNTER TAD COPO DCA 17 /FORWARDS POINTER TAD COPR /REREAD BUFFER DCA 16 /SET UP POINTER COPCML, TAD I 16 CIA TAD I 17 SZA JMP COPERR /MISMATCH ON READ ISZ TRASH3 /ANY MORE WORDS JMP COPCML /LOOP JMP I COPY /MADE IT! EXIT COPERR, ISZ BADTRY /HOW MANY ATTEMPTS JMP COPERS /TRY AGAIN JMS I [SPEAK MESS5 /RE-READ ERRORS JMS I [TUNIT /TYPE UNIT NUMBER AND WAIT TAD [-3 DCA BADTRY /RESTORE ERROR COUNTER COPERS, CLA JMS I [RESET JMP COPYB /WRITE OUT BLOCK AGAIN / PAGE / THIS SUBROUTINE MOVES THE DECTAPE / BACK IN PREPARATION FOR ANOTHER / READ OR WRITE. / RESET, 0 CLA CLL /CLEAR AC AND LINK TAD [400 /CHANGE DIRECTION DTXA JMS DIREC /FIND DIRECTION TAD [6 /FORWARD MAKE +3 TAD [-3 /REVERSE MAKE -3 TAD CURBLK SPA /MAKE SURE VALUE IS PLUS JMP RESEV JMS I [SEARCH /FIND THIS BLOCK SKP CLA /FOUND IT JMP RESET+4 REEXT, DTRA AND [200 /CLEAR STOP-GO FLAG TAD [400 /AND REVERSE DIRECTION DTXA JMP I RESET RESEV, JMS BACKUP /REWIND THIS TAPE JMP REEXT / / / THIS BRANCH IS TKEN WHEN / ALL COPYING IS COMPLETED DONE, JMS I [SPEAK MESS4 JMS I [SMIGIT JMP I [BEGIN JMP I [BEGIN /THIS SUBROUTINE READS NUMBERS, /NOT EXCEEDING 4098, FROM A TELETYPE /AND RETURNS THE OCTAL VALUE OF INPUT. /THE FOLLOWING SPECIAL CHARACTERS /ARE USD...<RETURN> MARKS END OF INPUT, CAUSES A <CR><LF> /IF THE <RETURN> IS THE FIRST CHARACTER THEN /DIRECT RETURN IS TAKEN, ELSE RETURN IS TO ENTRY+2 / <^C> CAUSES A BRANCH TO 7600 / SMIGIT, 0 KCC /INITIALIZE TTY INPUT DCA SMISUM /CLEAR TEMP STORAGE JMS TTYIN /GET CHAR AND [177 TAD [200 TAD [-215 /CHECK FOR <RETURN> SNA JMP SMIXIT /EXIT ON FIRST <RETURN> ISZ SMIGIT /ADVANCE EXIT POINTER SMIGOP, TAD [12 /CHECK FOR ^C SNA JMP I [7600 /BRANCH TO MONITOR TAD [-65 /CHECK FOR DIGITS CLL TAD [10 SNL JMP SMILOP /INVALID CHARACTER DCA SMICAR /TEMP STOR TAD SMISUM /GET CHARACTER STRING CLL RAL CLL RAL CLL RAL /ROTATE TO LH POSITION TAD SMICAR /APPEND CURRENT DIGIT DCA SMISUM TAD SMICAR TAD [260 /MAKE ASCII JMS TYPE /ECHO CHARACTER SMILOP, JMS TTYIN /GET NEXT CHARACTER TAD [-215 /CHECK FOR <RETURN> SZA JMP SMIGOP /CONTINUE LOOP SMIXIT, JMS I [SPEAK /SEND A <RETURN><LINE FEED> MESS0+11 TAD SMISUM /GET INPUT STRING JMP I SMIGIT /EXIT /THIS SUBROUTINE READS A CHARACTER FROM THE TTY TTYIN, 0 KSF /WAIT UNTIL READY JMP .-1 KRB /READ TTY BUFFER JMP I TTYIN /THIS SUBROUTINE TYPES OUT A /DIGIT STRING FROM THE AC /AS FOUR OCTAL CHARACTERS TYPNUM, 0 DCA SMICAR /PRESERVE STRING VALUE TAD [-4 DCA SMISUM /INITIALIZE COUNTER TYPXL, TAD SMICAR RTL RAL /GET NEXT PRINT DIGIT DCA SMICAR /RETURN TO STRING TAD [3 AND SMICAR RAL /ENTER CURRENT DIGIT TAD [260 /MAKE ASCII JMS TYPE /TYPE DIGIT ISZ SMISUM /COUNT DIGITS JMP TYPXL /COUNTINUE LOOP JMP I TYPNUM /EXIT /THIS SUBROUTINE TYPES OUT A /MESSAGE IN "TEXT" FORMAT TWO /ASCII CHARACTERS PER WORD. /SPECIAL CHARACTERS ARE NOT /PERMITTED. A CARRIGE RETURN /AND LINE FEED PRECEED THE /MESSAGE. / JMS I [SPEAK <BRANCH TO SUBROUTINE> / MESSAGE <POINTER TO MESSAGE BUFFER> /A ZERO WORD MARKS THE /END OF THE MESSAGE. / SPEAK, 0 CLA CLL TAD [215 JMS I [TYPE /CARRIGE RETURN TAD I SPEAK /GET ADDRESS OF OUTPUT DCA SPELIN ISZ SPEAK TAD [212 JMS I [TYPE /LINE FEED SPEELH, TAD I SPELIN /GET NEXT WORD SNA /CHECK FOR ZERO JMP I SPEAK /EXIT IF ZERO AND [7700 /GET LH CHARACTER CLL RTR /MOVE TO RTR /RIGHT HAND RTR /SIX BITS JMS SPEOUT /TRANSLATE AND OUTPUT TAD I SPELIN ISZ SPELIN /ADVANCE POINTER AND [77 /GET RH CHARACTER JMS SPEOUT /TRANSLATE AND OUTPUT JMP SPEELH SPEOUT, 0 TAD [-40 /CHECK FORMAT SMA TAD [-100 /KLUDGE DIGITS FORMAT<200+XX> TAD [340 /ALPHA FORMAT <300+XX> JMS I [TYPE /OUTPUT IT JMP I SPEOUT /RETURN / /THIS SUBROUTINE TYPES OUT /THE ASCII CHARACTER IN THE AC. / TYPE, 0 TSF /WAIT UNTIL READY JMP .-1 TLS /TYPE CHARACTER CLA JMP I TYPE / /THIS SUBROUTINE TYPES OUT THE /CURRENT UNIT NUMBER TUNIT, 0 CLA DTRA AND [7000 /GET CURRENT UNIT NUMBER CLL RTL /MOVE OVER RTL TAD [260 /MAKE ASCII CODE JMS I [TYPE /TYPE IT JMS I [SMIGIT /WAIT JMP I TUNIT /EXIT JMP I TUNIT / / PAGE /THIS SUBROUTINE SEARCHES DECTAPE /IN A FORWARD OR REVERSE DIRECTION. /STATUS REGISTER A SHOULD CONTAIN /UNIT SELECT NUMBER (0-2), FORWARD /OR REVERSE, AND A5=1. /THE BLOCK NUMBER FOR WHICH THE PROGRAM IS /SEARCHING MUST BE IN THE AC. /ON ERROR RETURN THE COMAND /FOLLOWING THE "JMS" IS SKIPPED, /AN END OF TAPE ERROR WILL CAUSE /THREE MOVES INTO ENDZONE AND TWO COMMANDS FOLLOWING /THE "JMS" ARE SKIPPED SEARCH, 0 CIA /FORM TWO'S COMPLEMENT DCA SEAZOK /STORE - BLOCK NUMBER DCA SEAZIK /CLEAR INPUT WORD DTRA AND [274 DTXA /CLEAR OUT A REGISTER TAD [210 /START DEVICE DTXA JMS DIREC /DETERMINE DIRECTION TAD [NOP-CIA /FORWARD...FIX TO "NOP" TAD [CIA /REVERSE...FIX TO "CIA" DCA SEATIX /FIX UP COMMAND TAD [SEAZIK /BLOCK NUMBER INPUT DCA I [CA /PUT IN CURRENT ADDRESS CLA CMA /NUMBER OF BLOCKS=1 JMS SEARUN /FIND FIRST BLOCK MARK TAD [100 /SET CONTINUOUS MODE FLAG DTXA TAD SEAZIK /BLOCK NUMBER HERE TAD SEAZOK /MINUS BLOCK NUMBER THERE SEATIX, NOP /IFSEARCHING IN REVERSE DIRECTION *.-1 CIA /IF SEARCHING IN FORWARD DIRECTION SPA /SKIP IF DONE JMS SEARUN /FIND "N" BLOCK MARKS DTRA AND [100 /CLEAR CONTINUOUS MODE FLAG DTXA JMP I SEARCH /NORMAL EXIT SEARUN, 0 DCA I [WC /NUMBER OF BLOCKS TO READ DTXA DTSF /CHECK FOR DONE JMP .-1 DTRB /READ STATUS REGISTER B SMA CLA JMP I SEARUN /DT FLAG...NORMAL EXIT JMS I [ERROR /HANDLE ALL ERRORS ISZ SEARCH /END OF TAPE ERROR ISZ SEARCH /ALL OTHER ERRORS JMP SEARUN-4 /EXIT /THIS SUBROUTINE READS OR WRITES /<N> WORDS, IN CONTROL MODE, ON /A BLOCK(S) ASSUMING THAT /THE DECTAPE IS PROPERLY /POSITIONED. IN LINE CODE: / JMS I [DECTAP / <BUFFER> ADDRESS TO READ INTO (OR WRITE FROM) -1 / <3> IF READ, <5> IF WRITE /<<NORMAL RETURN>> /<<END OF TAPE ERROR>> /AN END OF TAPE ERROR WHILE SEARCHING /CAUSES A BRANCH TO "REVERT". /STATUS REGISTER A SHOULD CONTAIN: /AO-2 UNIT NUMBER /A3 FORWARD=0, REVERSE=1 /A4 UNIMPORTANT, SHOULD BE ZERO /A5 1 /A6-8,89 UNIMPORTANT /BLOCK NUMBER IN PAGE ZERO "CURBLK" /NUMBER OF WORDS TO READ OR /WRITE IS IN PAGE ZERO "LENGTH" / DECTAP, 0 TAD I DECTAP /GET INPUT BUFFER DCA DECTCA /STORE ISZ DECTAP DECAGN, TAD CURBLK /SEARCH FOR BLOCK JMS I [SEARCH JMP DECRUN /FOUND IT JMP DECAGN JMP I [REVERT /END ZONE ERROR DECRUN, TAD SEAZIK TAD SEAZOK /CHECK TO SEE IF FOUND BLOCK SZA JMP DECEXT-3 TAD LENGTH /SET UP WORD COUNT CIA DCA I [WC TAD DECTCA /AND INPUT OUTPUT BUFFER DCA I [CA TAD I DECTAP /GET READ OR WRITE DECLOP, DTXA /START GOING DTSF JMP .-1 DTRB /GET FLAGS SMA JMP DECEXI JMS I [ERROR JMP DECEXT-1 /ENDZONE ERROR JMS I [RESET /RESTORE POINTERS JMP DECAGN ISZ DECTAP /END OF TAPE EXIT DECEXT, ISZ DECTAP CLA JMP I DECTAP /FINISHED DECEXI, CLA TAD I [WC /HAVE WE FINISHED? SZA CLA JMP DECLOP /NO-:CONTINUE READ-WRITE DTRA /YES--CLEAR STATUS AND [274 DTXA JMP DECEXT /THIS SUBROUTINE CHECKS THE CONTENTS /OF STATUS REGISTER B. / <BRANCH> JMS I [ERROR / <+1 END OF TAPE ERROR> / <+2 ALL OTHER ERRORS> /IN ADDITION: 1--A SELECT ERROR WILL /CAUSE A TYPEOUT AND HALT. 2--A PARITY /ERROR ON OUTPUT TAPE CAUSES A /BRANCH TO "COPERS"; ON INPUT TAPE /"PARITY ERROR" IS TYPED OUT. 3--GO FLIP-FLOP /AND STATUS REGISTER A6-8 WILL BE CLEARED. / ERROR, 0 CLA CLL DTRB /GET ERROR FLAGS AND [200 /PARITY ERROR FLAG SNA CLA JMP ERNOT /HANDLE OTHER ERRORS DTXA /CLEAR FLAGS, CONTINUE READ MODE DTRA /GET UNIT NUMBER AND [7000 TAD MSKIN /CHECK FOR INPUT UNIT SZA JMP I [COPERR /ERROR ON OUTPUT UNIT TAD I [WC /PUT WORD COUNT IN PUSH CIA DCA I PARDEL /DOWN STACK ISZ PARDEL /ADVANCE POINTER ISZ PARITY /SET FLAG JMP I [DECEXI /RETURN TO READ ERNOT, DTRA /GET STATUS REGISTER A AND [274 TAD [2 /DO NOT DISTURB ERROR FLAGS DTXA /CLEAR A4 AND A6-8 DTRB /GET ERROR FLAGS RTL SMA /SKIP IF END OF TAPE ERROR JMP ERROTH CLA TAD [-3 /LOAD -3 DCA ERRSOR /STORE IN COUNT TAD [200 /GO FLIP-FLOP DTXA /SET DTSF JMP .-1 ISZ ERRSOR /HAVE WE DONE THREE TIMES JMP .-5 JMP I ERROR /EXIT ERRSOR, 0 ERROTH, ISZ ERROR /CHANGE ERROR BRANCH SZL CLA CLL /MARK TRACK ERROR RTL SNL CLA JMP I ERROR /TIMING ERROR BRANCH JMS I [SPEAK /SELECT ERROR MESSAGE ERRSEL ERRUNT, JMS I [TUNIT JMP I ERROR / PAGE / VARIOUS MESSAGES MESS0, TEXT %DECTAPE COPY V10A % MESSA, TEXT %FIRST BLOCK TO COPY (OCTAL) % MESSB, TEXT %FINAL BLOCK TO COPY (OCTAL) % ERRSEL, TEXT %SELECT ERROR ON UNIT #% PMESS, TEXT %PARITY ERROR ON BLOCK % MESSC, TEXT %VERIFY OUTPUT? (0=YES, 1=NO): % MESS1, TEXT %FROM UNIT % MESS2, TEXT %TO UNIT % MESS3, TEXT %PDP-8 WORDS PER BLOCK % MESS4, TEXT %DONE% MESS5, TEXT %WRITE ERRORS ON UNIT #% MESS3A, TEXT %BLOCK LENGTH ERROR% / / PAGE / / /THIS ROUTINE TYPES OUT PARITY ERROR MESSAGES /AND RESTORES POINTERS TO THE PUSH DOWN STACK. ERRPAR, CIA DCA PARITY /SET UP STACK COUNTER CLA CMA TAD PARDEL /MOVE POINTER BACK DCA PARDEL JMS I [SPEAK /TYPE OUT MESSAGE PMESS TAD CURBLK EPLOOP, DCA EPJK TAD I PARDEL /CHECK FOR CORRECT BLOCK NUMBER TAD WORDS /ADVANCE BLOCK WORDS COUNT DCA I PARDEL TAD I PARDEL CIA /REACHED ORIGINAL VALUE? TAD LENGTH SNA CLA JMP EPTYP /TYPE BLOCK AT ERROR JMS DIREC CLL CMA RAL /ADD ONE IF FORWARD CMA /SUBTRACT ONE IF NEGATIVE TAD EPJK /NEXT BLOCK NUMBER JMP EPLOOP /CONTINUE LOOP EPTYP, TAD EPJK JMS I [TYPNUM /TYPE BLOCK NUMBER ISZ PARITY /ADVANCE COUNTER JMP ERRPAR+2 /CONTINUE LOOP JMP I EPPEXT /RETURN TO COPY EPPEXT, COPZ /REENTRY TO COPY EPJK, 0 /WORKING STORAGE /THIS SUBROUTINE READS A RANDOM /BLOCK ON DECTAPE TO DETERMINE THE BLOCK LENGTH FIXTAP, 0 TAD [610 /FIX A REG. WORD DTCA DTXA /LOAD A STAT. REG. CLA CMA DCA I [WC /SEARCH FOR 1 BLOCK TAD [BUFIOT /FIX CURRENT ADDRESS DCA I [CA /TO READ INTO BUFFER DTSF /WAIT AROUND JMP .-1 DTRB SPA CLA JMP FIXERR /HANDLE ERROR CONDITIONS TAD [30 /CHANGE TO READ MODE DTXA DTSF /WAIT TILL READ DONE JMP .-1 TAD [200 /STOP TAPE DTXA TAD I [WC /GET BLOCK LENGTH JMP I FIXTAP /EXIT FIXERR, JMS I [ERROR TAD [400 /END OF TAPE...REVERSE DIRECTION TAD [210 /START TAPE MOVING DTXA /AND CLEAR FLAGS JMP FIXTAP+3 /TRY AGAIN /PARITY ERROR WORD COUNT STACK PSTACK, 0 / /END OF PROGRAM $ |
Added src/os8/uni/CUSPS/DTFRMT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 | /TC08 DECTAPE FORMATTER, V4 / / / / / / // / / / / /COPYRIGHT (C) 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. / / / / / / /COPYRIGHT 1970 DIGITAL EQUIPMENT CORP. /MAYNARD, MASS. /REVISED APRIL 1970 / TOG-8 TO MARK AND CHECK PDP-8 DECTAPE /THIS PROGRAM WRITES TIMING AND MARK TRACKS ON /DECTAPE MOUNTED ON THE TCO1-TU55 TAPE CONTROL UNIT. X1=10 X2=11 /SYMBOL TABLE AUGMENTATION DTRA=6761 DTCA=6762 DTXA=6764 DTSF=6771 DTRB=6772 DTLB=6774 DTCX=6766 /SET 0 FOR THE LOGIN FEATURE *0 0 JMP I .+1 CONC /CONTROL "C" AND LOGIN /WORKING LOCATIONS *20 W1, 0000 W2, 0000 W3, 0000 W4, 0000 W5, 0000 W6, 0000 BLOCKS, 0000 BLOCKA, 0000 DTA, 0000 ERX, 0000 PHASE, 0000 TOTAL, 0000 VAR1, 0000 VAR2, 0000 /CONSTANTS C1, 0001 C2, 0002 C3, 0003 C4, 0004 C0017, 0017 C0070, 0070 C0077, 0077 C0007, 0007 C0030, 0030 C0400, 0400 C0700, 0700 C203, 0203 C201, 0201 C210, 0210 C260, 0260 C261, 0261 C267, 0267 C270, 0270 C271, 0271 C277, 0277 C1000, 1000 C1620, 1620 C7000, 7000 C7700, 7700 C7714, 7714 C7761, 7761 C7772, 7772 C7775, 7775 CRCOD, 0215 LETK, 0313 LFCOD, 0212 M2, -2 M3, -3 M4, -4 M6, -6 M7, -7 M14, -14 M144, -144 M300, -300 SPCOD, 0240 /INTERPAGE LINKS ADW2, W2-1 ADW3, W3-1 BADD, BUFFER-1 BFR, BUFFER CA, 7755 COMPAR, COMPRE FCON, 0000 IT, INIT1 FORMA, FORM-1 FORMB, FORM QU1, Q1 QU2, Q2 QU3, Q3 QU4, Q4 MESS, MES STX, START TURN, TRN TYOCT, TYCT TYPE, MESAGE TYPIN, TYPN WAIT, STALL WC, 7754 DBUFPT, 0 /POINTER TO CURRENT POSITION IN DTA LIST /TYPE THE CHARACTER IN THE AC ON THE KEYBOARD PRINTER RSEND, 0000 TLS /LOAD AND PRINT, CLEAR FLAG TSF /WAIT FOR CONFIRMATION JMP .-1 /ENDLESSLY TCF /CLEAR THE FLAG ANYWAY JMP I RSEND /PRINT A "?" ON THE KEYBOARD TYPER QU, .+1 IOF /KILL LOG AND CONTROL C FCTN CLA CLL /C(AC)+C(L)=0 TAD C277 /"?" JMS RSEND /TYPE THE CHARACTER JMP I .+1 /RESTART INIT /DECTAPE CONTROL WORDS DT0030, 0030 DT0060, 0060 DT0070, 0070 DT0100, 0100 DT0130, 0130 DT0140, 0140 DT0200, 0200 DT0210, 0210 DT0360, 0360 DT0510, 0510 DT0600, 0600 DT0610, 0610 /SOME SPECIAL LINKS ADBA, 2475 ADWA, 2476 ADWAB, 2477 /CONSTANTS FOR FORMULA TRANSLATION SECTION BINCON, .+1 0001 0012 0144 1750 *200 /PAGE 1 /TYPE CANNED MESSAGES..... /THANKS TO DIGITAL 8-18-U MESAGE, 0 IOF /KILL LOG AND CONTROL FUNCTION CLA CMA /SET C(AC)=-1 TAD MESAGE /ADD LOCATION DCA 10 /AUTO INDEX REGISTER TAD I 10 /FETCH FIRST WORD DCA MSRGHT /SAVE IT TAD MSRGHT RTR RTR /ROTATE 6 BITS TO THE RIGHT RTR JMS TYPECH /TYPE IT TAD MSRGHT /GET DATA AGAIN JMS TYPECH /TYPE RIGHT HALF JMP MESAGE+5 /CONTINUE MSRGHT, 0 /TEMPORARY STORAGE TYPECH, 0 /TYPE CHARACTER IN C(AC)6-11 AND C0077 SNA /IS IT END OF MESSAGE? JMP I 10 /YES: EXIT TAD M40 /SUBTRACT 40 SMA /<40? JMP .+3 /NO TAD C340 /YES: ADD 300 JMP MTP /TO CODES <40 TAD M3 /SUBTRACT 3 SZA /IS IT ZERO? JMP .+3 /NO TAD C212 /YES: CODE 43 IS JMP MTP /LINE-FEED (212) TAD M2 /SUBTRACT 2 SZA /IS IT ZERO? JMP .+3 /NO TAD C215 /YES: CODE 45 IS JMP MTP /CARRIAGE RETURN (215) TAD C245 /ADD 200 TO OTHERS >40 MTP, TLS /TRANSMIT CHARACTER TSF /WAIT FOR THE FLAG JMP .-1 /NOT SET YET CLA /SET: CLEAR C(AC) JMP I TYPECH /RETURN /CONSTANTS M40, -40 C340, 340 C212, 212 C215, 215 C245, 245 /ROUTINE WAITS UNTILL A COMPLETE MESSAGE HAS BEEN ENTERED /SIGNIFIED BY A CR. TYPN, 0 IOF /KILL THE LOG AND CONTROL C FUNCTION KCC /CLEAR AC, KEYBOARD FLAG TAD BADD /GET BUFFER ADDRESS DCA W1 /STORE FOR THE CHARACTER STRING /READ AND RESPOND WITH THE CHARACTER NTYRTN, ISZ W1 /NORMAL RETURN. INCREMENT BUFFER KSF /WAIT FOR KEYBOARD JMP .-1 /FLAG TO RAISE KRB /GOT FLAG, RESET IT, GET CHARACTER JMS RSEND /SEND CHARACTER BACK AND (177 /TAKE CARE OF PARITY TAD (200 DCA I W1 /LOAD CHARACTER INTO BUFFER AREA TAD I W1 /CHECK FOR CTRL C CIA TAD C203 SZA CLA JMP CHKSP /NO- CHECK FOR SPACE 6007 /CTRL C -CLEAR ALL FLAGS NOP /FOR OLD MACHINES CLA /JUST IN CASE DTLB /CLEAR STATUS REGISTER B JMP I (7605 /IF CHARACTER IS A SPACE, IGNORE IT CHKSP, TAD I W1 /CHARACTER INTO THE AC CIA /SUBTRACT FROM SPACE CODE (240) TAD SPCOD /COMPLETE COMPARISON SNA CLA /WAS IT A SPACE? JMP NTYRTN+1 /YES: DO NOT INCREMENT BUFFER /IF CHARACTER IS A CR, EXIT FROM ROUTINE TAD I W1 /CHARACTER TO AC CIA /SET AC TO SUBTRACT CR (215) TAD CRCOD /COMPLETE COMPARISON SZA CLA /WAS IT CR? JMP NTYRTN /NO: INCREMENT BUFFER + WAIT /CARRIAGE RETURN FOUND, EXIT FROM ROUTINE TAD LFCOD /GIVE KEYBOARD LINE FEED JMS RSEND /EXECUTE LINE FEED CLA CLL /EXIT WITH C(ACC) + AND C(L)=0 ION /RESET LOG AND CONTROL C FUNCTION JMP I TYPN /RETURN TO CALL /COMPARE A STRING OF CHARACTERS IN "BUFFER" /TO A CHARACTER STRING AFTER A JMS IN ASCII COMPRE, 0 CLA CMA /C(AC)=7777 TAD COMPRE /SUBTRACT 1 FOR INDEX REG 1 DCA 10 /AUTO INDEX 1 SET TO CHA STRING TAD BADD /AUTO INDEX 2 SET TO BUFFER-1 DCA 11 /LOAD X2 /COMPARE CHARACTERS TILL ONE DOESN'T COMPARE OR TILL /A 0 IS FOUND IN X1. IF OK, RETURN TO TWO PLUS THE /ZERO, IF BAD ONE PLUS TAD I X1 /CHARACTER FROM PROGRAM CIA /TO SUBTRACT FROM TAD I X2 /CHARACTER IN BUFFER SZA CLA /COMPARE? JMP CERR /NO:RESYNC FOR NON COMPARE EXIT TAD I X1 /YES: CHECK FOR GOOD EXIT SZA /IF 0, EXIT GOOD JMP .-6 /NO: TEST NEXT CHAACTER ISZ X1 /+1 TO X1(TOTAL 2 FROM THE 0) JMP I X1 /+1 TO X1, EXIT /ERROR FOUND. RESYNC AND EXIT NO COMPARE CERR, TAD I X1 /CHARACTER FROM PROGRAM SZA CLA /IS THIS EXIT KEY? (0000) JMP .-2 /NO: GET NEXT JMP I X1 /YES: EXIT, NOT COMPARE *400 /VARIOUS ERROR MESSAGES /"NOT DECIMAL" Q1, JMS I TYPE 1617 /NO 2440 /T 0405 /DE 0311 /CI 1501 /MA 1400 /L JMP QUX /"TO MANY WORDS" Q2, JMS I TYPE 2417 /TO 1740 /O 1501 /MA 1631 /NY 4027 / W 1722 /OR 0423 /DS 0000 /00 JMP QUX /"TO MANY BLOCKS" Q3, JMS I TYPE 2417 /TO 1740 /O 1501 /MA 1631 /NY 4002 / B 1417 /LO 0313 /CK 2300 /S0 JMP QUX /"NOT DIVISIBLE BY 3" Q4, JMS I TYPE 1617 /NO 2440 /T 0411 /DI 2611 /VI 2311 /SI 0214 /BL 0540 /E 0231 /BY 4063 / 3 0000 /00 QUX, JMS I TYPE 4345 /CR+LF 0000 /END JMP I .+1 INIT /THE CODING BELOW CREATES THE BLOCK NUMBER /CONVERSION PRIOR TO THE TAPE WRITE. MES, 0 DCA W4 /BLOCK NUMBER GIVEN IN AC TAD W4 /RESTORE TO AC AGAIN CMA /COMPLEMENTED RTL RAL /LEFT 3 DCA W5 /TEMP SAVE TAD W5 /TO AC AGAIN AND C7000 /ISOLATE HIGH CHA DCA V2 /FORWARD BLOCK NUMBER TAD W5 /SHIFTED VALUE AND C0070 /ISOLATE 6,7,8 DCA V1 /FORWARD BLOCK NUMBER TAD W4 /ORIGIONAL SET CMA /UPSIDE DOWN RTR RAR /RIGHT 3 DCA W5 /TEMP SAVE TAD W5 /TO AC AGAIN AND C0700 /ISOLATE 3,4,5 TAD V2 /COMBINE FORWARD BLOCK NUMBER TAD C0077 DCA V2 /1/2 COMPLETE TAD W5 /SHIFTED VALUE AND C0007 /ISOLATE 9, 10,11 TAD V1 /COMBINE WITH BN DCA V1 /FORWARD BLOCK NUMBER COMPLETE /CONVERT REVERSE BLOCK NUMBER CMA /-1 TO GIVEN BLOCK # TAD W4 /ORIGIONAL BLOCK # DCA W5 /TEMP SAVE TAD W5 /TO AC AGAIN RTR RTR /6 RIGHT RTR AND C0077 /ISOLATE LOW DCA V3 /HIGH REVERSE TAD W5 /COMPLEMENT ORIGIONAL -1 RTL RTL /6 LEFT RTL AND C7700 /ISOLATE HIGH DCA V4 /REVERSE COMPLETED JMP I MES /FORM USED TO WRITE 12 DATA WORDS FOR BLOCK NUMBERING FORM, 0000 0000 0000 0000 V1, 0000 V2, 0000 7777 7700 0000 V3, 0000 V4, 0000 0000 //THIS ROUTINE ALLOWS KEYBOARD INTERRUPTION /FOR LOGGING ON THE KEYBOARD, OR FOR A MAJOR /CLEAR IN THE PROGRAM. BY HITTING "CONTROL C" /A SYSTEM RESTART WILL OCCUR. CONC, TSF /IS THE PRINTER FLAG ON? JMP .+5 /NO, CHECK READER TCF /YES: RESET IT KSF /IS THE READER FLAG ON? JMP RTNS /NO: RETURN TO SEQUENCE JMP .+3 KSF HLT /OK. CHECK FOR EITHER LOG OR CONTROL C. DCA MES /SAVE C(AC) RAL /SAVE THE LINK DCA RSYC+6 /FOR LOGGING KRB /GET CHARACTER FROM KEYBOARD TLS /RETURN CHARACTER CIA /TO SEE IF TAD C203 /"CONTROL C" SNA CLA /IS IT? JMP RSYC /YES: RESYNC THE PROGRAM TAD RSYC+6 /RESTORE THE LINK RAR /FOR EXIT. TAD MES /THE AC TOO RTNS, ION /INTERRUPT ON JMP I 0 /RETURN *600 /RESYNC THE SYSTEM TO START RSYC, TSF /WAIT FOR FLAG JMP .-1 /ON LAST SENDOFF JMS I TYPE 2205 /RE 2331 /SY 1603 /NC 0000 /END TAD DTA /TO KILL EXISTING TAPE MOTION DTCX /NOW JMP I STX /RETURN TO START /WAIT FOR THE DECTAPE FLAG TO RISE STALL, 0 CLA DTRB /READ TCU "B" REGISTER SPA /ERROR? JMP ERROR /YES, DECIDE WHAT TO DO RAR /DECTAPE FLAG TO LINK SNL CLA /FLAG? JMP .-5 /NO: CONTINUE WATCH RERR, DTXA /RESET THE DECTAPE FLAG DCA ERX /CLEAR THE END TAPE FLAG JMP I STALL /GOT FLAG, EXIT /DRIVE TAPE INTO THE END ZONE, AND TURN IT /AROUND. /IF C(AC)=0400, TAPE INTO REVERSE END ZONE /IF C(AC)=0000, TAPE INTO FORWARD END ZONE TRN, 0 ISZ ERX /END ZONE IS LEGAL DCA W4 /SAVE DIRECTION TAD DT0200 /MOVE FUNCTION,GO TAD W4 /DIRECTION TO MOVE TAD DTA /DRIVE TO MOVE DTCX /CLEAR AND RESET "A" JMS I WAIT /FOR END ZONE FLAG TAD DT0610 /SEARCH, GO TAD W4 /DIRECTION TO SEARCH AND C0777 /DELETE OVERFLOW BIT TAD DTA /SET THE DECTAPE DTCX /RESET STATUS "A" DCA ERX /END ZONE NOT LEGAL NOW JMP I TRN /RETURN TO SEQUENCE C0777, 0777 /AN ERROR FLAG HAS BEEN SET. IN SOME CASES /END ZONE IS LEGAL, OTHERWISE, A RESTART ATTEMPT /MAY BE INITIATED. /DETERMINE WHICH FLAG SET THE DECTAPE FLAG ERROR, DCA W5 /SAVE "B" REGISTER TAD DTA /GOING TO KILL DTCX /TAPE MOTION TAD W5 /RESTORE "B" REGISTER RTL /POSITION BITS 1+2 SPA /END OF TAPE FLAG? JMP ZEOT /YES: GO TO ROUTINE SZL /MARK TRACK ERROR? JMP ZMKTK /YES: GO TO ROUTINE RTL /POSITION BITS 2+3 SPA /PARITY ERROR? JMP ZPAR /YES: GO TO PARITY ERROR ROUTINE SZL CLA /SELECT ERROR? JMP ZSEL /YES: GO TO ROUTINE JMP ZTIM /MUST BE TIMING ERROR /END OF TAPE FLAG FOUND, SEE IF IT'S LEGAL ZEOT, CLA CLL /CLEAR REMAINS TAD ERX /SWITCH SZA CLA /ERROR? JMP RERR /OK, IT'S LEGAL /NOT LEGAL END ZONE FLAG JMS I TYPE 0516 /EN 0440 /D 2401 /TA 2005 /PE 4000 / 0 JMP ZCOM /MARK TRACK ERROR ZMKTK, JMS I TYPE 1501 /MA 2213 /RK 4024 / T 2201 /RA 0313 /CK 4000 / 0 JMP ZCOM /PARITY ERROR ZPAR, JMS I TYPE 2001 /PA 2211 /RI 2431 /TY 4000 / 0 JMP ZCOM /SELECT ERROR ZSEL, JMS I TYPE 2305 /SE 1405 /LE 0324 /CT 4000 / 0 JMP ZCOM /TIMING ERROR ZTIM, JMS I TYPE 2411 /TI 1511 /MI 1607 /NG 4000 / 0 /TYPE "ERROR PHASE X" ZCOM, TAD PHASE /WHAT PHASE OF OPERATION TAD PFORM /WAS THE MACHINE IN DCA TFORM /WHEN ERROR OCCURED JMS I TYPE 0522 /ER 2217 /RO 2240 /R 2010 /PH 0123 /AS 0540 /E TFORM, 4060 / X 4345 /CR+LF 0000 /END JMS I TYPIN /HE CAN RESTART IF HE TYPES "RETRY" JMS I COMPAR 0322 /R 0305 /E 0324 /T 0322 /R 0331 /Y 0000 /0 JMP I IT /GUESS HE DOESN'T WISH TO TRY AGAIN /ATTEMPT RESTART. NOTE, "ATTEMPT" TAD PHASE /RESTART ACCORDING TO TAD ZFORM /WHICH PHASE WAS HE IN DCA .+3 JMP I .+2 ZFORM, .+2 0000 JMP I .+5 /PHASE 0 JMP I .+5 /PHASE 1 JMP I .+5 /PHASE 2 JMP I .+5 /PHASE 3 JMP I .+5 /PHASE 4 START PSER DOBLK DBN NOP PFORM, 4060 /HERE STARTS THIS PROGRAM. IT WILL ASK THE /OPERATOR FOR DRIVE NUMBERS, THEN ASK HIM FOR /A DIRECTION ON WHAT TO DO WITH THE DRIVES. /THE SEQUENCE FOR MARKING A TAPE WOULD APPEAR AS: /DTA? (3 OR 1 2 3 OR 2 4 7) /DIRECT? (MARK 1215) /2277 WORDS, 0256 BLOCKS.OK? YES OR NO /(YES) /THAT DATA IN PARENTHESIS IS TYPED BY THE OPERATOR /(HE DOESN'T TYPE THE PARENTHESIS) /IF HE HAD ANSWERED NO, "DIRECT?" WOULD BE TYPED OUT. /IF THE DRIVE WAS WRONG, HE WOULD TYPE RESTART. /IF HE HAD TYPED "MARK" IN RESPONSE TO "DIRECT?" THE /TAPE WOULD BE MARKED WITH THE STANDARD PDP-8 CONFIGURATION. /IF HE HAD TYPED "MARK 384" THE TAPE WOULD /BE MARKED WITH THE STANDARD PDP-10 CONFIGURATION /NOTE: THE WORD AND BLOCK NUMBERS ARE TYPED IN OCTAL /IF A MISTAKE OCCURS ON THE OPERATORS PART (WITH REFERANCE /TO BLOCK + WORD SIZE) HE WILL BE TOLD ABOUT IT *1000 /MAKE A CALL FOR THE DECTAPE NUMBERS TO BE /WORKED. START0, JMS I TYPE /PRINT TITLE 4543 4300 JMS I TYPE TEXT /DTFRMT V4A/ START, JMS I TYPE /SET UP TYPER 4543 /CR+LF 4300 /LF+END TYQU, JMS I TYPE /"DTA?" 0424 /DT 0177 /A? 4000 / END /WAIT FOR A REPLY JMS I TYPIN /GET NUMBERS TAD BADD /INITIALIZE POINTER (BFR) IAC /(BADD=BUFFER-1, SO BUMP THE AC) DCA BFR /TO START OF INPUT BUFFER DCA DCTR /INITIALIZE DTA COUNTER TO 0 DCA CRFLAG /CLEAR FLAG SO CR NOT ACCEPTIBLE CRCHK, TAD CRCOD /GET CODE FOR CAR. RETN CIA /NEGATE IT TAD I BFR /SEE IF NEXT CHAR. IN SNA /BUFFER IS CAR. RETN. JMP OKCR /YES: SEE IF C.R. LEGAL HERE DCA CRFLAG /NO: SO C.R. IS LEGAL NOW VALCHK, TAD C261 /SEE IF # IS LESS THAN CIA /ASCII 1 (261) TAD I BFR /SUBTRACT BUFFER DATA SPA CLA /IS IT LESS THAN ASII 0? JMP TYQU /YES: TELL OUTSIDE WORLD TAD C270 /NO: SEE IF GREATER THAN CMA /ASC II 8 (270) TAD I BFR /SUBTRACT BUFFER DATA SMA CLA /GREATER THAN ASCII 7? JMP TYQU /YES: TELL OUTSIDE WORLD TAD I BFR /NO: ACCEPT BUFFER RTR RTR /4 BITS RIGHT AND C7000 /ISOLATE DTA JMS REPEAT /GO CHECK FOR REPEATED DTA AND STORE # ISZ BFR /INCREMENT INPUT BUF. PTR. JMP CRCHK /GO LOOK AT NEXT CHAR. /THIS SECTION CHECKS TO SEE IF THERE HAS BEEN ANY /VALID INPUT ONCE A CARRIAGE RETURN IS SEEN OKCR, CLA /CLEAR AC TAD CRFLAG /LOAD CR FLAG; 0 MEANS NO GOOD SNA CLA JMP START /0: NO VALID INPUT; RESTART TAD DCTR /NOT 0: SO HAVE VALID INPUT TAD DBUFAD /CALCULATE END OF DTA LIST +1 DCA DBUFPT /STORE IT IN BUFFER POINTER, THEN CMA /COMPLEMENT THE AC AND DCA I DBUFPT /TERMINATE DTA LIST WITH 7777 INIT1, CLA /CLEAR AC IF COME THRU LOC IT TAD DBUFAD /AND RESET LIST POINTER DCA DBUFPT /TO START OF LIST JMS I GETDTA /GO GET A DTA NUMBER /INFORM THE OPERATOR THAT THE PROGRAM IS SET TO START /TYPE "DIRECT" AND WAIT FOR THE REPLY INIT, JMS I TYPE /MESSAGE OUT 0411 /DI 2205 /RE 0324 /CT 7740 /? 0000 /END JMS I TYPIN /WAIT FOR A REPLY JMS I COMPAR /DID HE TYPE "MARK"? 0315 /M 0301 /A 0322 /R 0313 /K 0000 /END JMP .+3 JMP I .+1 MARK /TO MARK A TAPE /SEE IF HE TYPED "RDR" (READ AND TYPE FIRST 12 /BLOCK NUMBERS IN REVERSE). JMS I COMPAR 0322 /R 0304 /D 0322 /R 0000 /0 JMP .+3 JMP I .+1 RDR /TYPE BLOCKS /SEE IF HE TYPED "RDF" (READ AND TYPE FIRST 12 /BLOCK NUMBERS FORWARD). JMS I COMPAR 0322 /R 0304 /D 0306 /F 0000 /0 JMP .+3 JMP I .+1 RDFA /TYPE BLOCKS /SEE IF HE TYPED "SAME" (MEANING MARK A TAPE /USING THE SAME CONSTANTS AS BEFORE). JMS I COMPAR 0323 /S 0301 /A 0315 /M 0305 /E 0000 /0 JMP .+3 JMP I .+1 RSTSM /TO MARK AS BEFORE /SEE IF HE TYPED "RESTART" JMS I COMPAR 0322 /R 0305 /E 0323 /S 0324 /T 0301 /A 0322 /R 0324 /T 0000 /0 JMS QU /MUST BE NONSENSE JMP START /START ALL OVER GETDTA, NUDTA /POINTER TO ROUTINE TO SWITCH UNITS CRFLAG, 0 /=0, CR NO GOOD; NOT 0, CR IS OK / *1200 /MARK WAS TYPED IN, IF W1-1 IS NOT A "K",ASSUME THAT /A NUMBER WAS TYPED IN, AND VERIFY THIS. IF W1-1 IS /A "K", ASSUME STANDARD FORMAT.(W1=LAST ENTRY INTO THE BUFFER) MARK, TAD BINCON /ADDRESS OF FIRST BINARY DCA W5 /CONSTANT FOR DEC TO BIN DCA TOTAL /WILL BE BINARY EQUIVILANT /SAVE C(X1) FOR DECREMENT THROUGH BUFFER DNC, CLA CMA /DECREMENT BUFFER ADDRESS TAD W1 /ADDRESS BY 1 DCA W1 /W1=SWEEP ADDRESS /LOOK FOR END OF PROCESSING BY LOOKING FOR A "K" IN BUFFER TAD LETK /LETTER ASCII "K" CIA /SUBTRACT FROM CHARACTER TAD I W1 /IN BUFFER SNA CLA /EQUAL? JMP DIV3 /YES: SEE IF DIVISIBLE BY 3 /VERIFY THIS CHARACTER AS BEING OF DECIMAL ORIGIN TAD C260 /ASCII FOR 0 CIA /TO SEE IF CHARACTER TAD I W1 /IS LESS THAN 260 SPA CLA /IS IT? JMP I QU1 /YES: NOT DECIMAL CHARACTER TAD C271 /ASCII FOR 9 CMA /TO SEE IF GREATER THAN TAD I W1 /9 SMA CLA /IS IT? JMP I QU1 /NOT A DECIMAL CHARACTER /CHARACTER IS DECIMAL. NOW CONVERT IT TO BINARY /REMEMBER POSITION OF CHARACTER IN BUFFER MAY BE /10,100,1000. TAD I W1 /ISOLATE THE NUMBER AND C0017 /FOR PROPER CONVERSION SNA /IF 0, NO BINARY CONVERSION NEEDED JMP IBS /YES: 0: INCREMENT BINARY CONVERSION /NOT 0, SET UP CONVERSION LOOP CLL CIA /NUMBER OF ADDITIONS DCA W4 /TO NEGATIVE FOR ISZ TAD I W5 /BINARY POSITION TO C(ACC) TAD TOTAL /ADD TO PRESENT TOTAL SZL /CHECK ON TO MANY WORDS JMP I QU2 /TO MANY WORDS CALLED FOR DCA TOTAL /KEEP RUNNING SUM ISZ W4 /LAST ADDITION? JMP .-6 /NO: ADD AGAIN /FINAL ADDITION FOR THIS POSITION COMPLETED IBS, ISZ W5 /NEXT POSITION JMP DNC /DO NEXT CHARACTER /LAST CHARACTER COMPLETED. SEE IF DIVISIBLE BY 3 /IF NOT A NORMAL INPUT DIV3, TAD TOTAL /GET TOTAL WORDS SNA /IF TOTAL 0, NORMAL INPUT TAD C201 /129 OCT. THIS TEST REDUNDANT TAD C0017 /ADD CONSTANT 15 TO TOTAL DCA TOTAL /FOR FUTURE CONSIDERATIONS DCA VAR1 /# OF WORDS/3 FOR MARK TRACK WRITING TAD TOTAL /RESTORE IN THE ACC CLL /TO DIVIDE BY 3, LINK KEEPS OVERFLOW TAD M3 /SUBTRACT 3 ISZ VAR1 /ON EACH DIVISION, KEEP RUNNING SUM SZA /IF AC = 0,NO REMAINDER SNL /WHEN LINC GOES TO 0, DIVISION ENDED SKP /NOW SEE IF IT DIVIDED EVENLY JMP .-6 /SUBTRACT 3 MORE SZA CLA /IF 0,OK. OTHERWISE ERROR JMP I QU4 /NOT DIVISIBLE BY 3 /CORRECT "VAR1" ( THE NUMBER OF WORDS/3) FOR THE +15 /ADDED JUST ABOVE AND AN INHERANT +2 DUE TO MARK TRACK /CONFIGURATION TO BE WRITTEN. TAD M7 /SUBTRACT 7 FROM PHONY SETUP TAD VAR1 /GIVING THE NUMBER OF TIMES CIA /TO BE USED LATER IN A ISZ DCA VAR1 /DATA MARK WILL BE WRITTEN /COMPUTE A VALUE FOR TOTAL NUMBER OF BLOCKS /RECORD SIZE + 15 INTO 636160 OCT. TAD C7714 /EXTENDED 64 VALUE. SETS AC#2 DCA W1 /SET FOR 640000 JMS I FORM10 /PATCH TO CHECK FOR STD.10 FORMAT TAD C1620 /VERNIER ADJUSTMENT FOR FORMULA CLL /ACC#2 CARRY FUNCTION TAD TOTAL /WORD COUNT ISZ BLOCKS /+1 TO BLOCK COUNT SKP JMP I QU3 /TO MANY BLOCKS CALLED FOR SNL /CARRY INTO ACC#2? JMP .-5 /NO: CONTINUE COUNT ISZ W1 /YES: FULLY DIVIDED? JMP .-10 /NO: CONTINUE PROCESS CLA CLL /C(ACC)+ C(L)=0 F10RTN, TAD BLOCKS /FOR MARK TRACK (COME HERE FR F10PAT IF 10 FRMT) CMA /WRITING DCA VAR2 /SEE MARK WRITE /VALUES FOR BLOCK AND RECORD SIZE HAVE BEEN /COMPUTED. TELL OUTSIDE WORLD AND GET THE OK. TAD TOTAL /SUBTRACT 15 FROM TOTAL TAD C7761 /WORDS FOOLING OPERATOR DCA TOTAL /CORRECTED FOR TAPE WRITING TAD TOTAL /FOR OCTAL TYPEOUT JMS I TYOCT /TYPE OCTAL WORDS JMS I TYPE /TYPE MESSAGE 4027 / W 1722 /OR 0423 /DS 5400 /, END TAD BLOCKS /TYPE OUT BLOCK #S IAC /TO FOOL THE OPERATOR JMS I TYOCT /IN OCTAL JMS I TYPE /TYPE MESSAGES 4002 / B 1417 /LO 0313 /CK 2356 /S. 1713 /OK 7733 /?( 3105 /YE 2340 /S 1722 /OR 4016 / N 1735 /O) 4543 /CR+LF 0000 /END JMS I TYPIN /WAIT FOR REPLY /SEE IF A YES OR NO ANSWER WAS GIVEN JMS I COMPAR 0331 /Y 0305 /E 0323 /S 0000 /END JMP I IT /SEE IF THE DRIVE IS OK RSTSM, TAD DT0060 /GIVE WRTM, NO GO TAD DTA /AND DTA # DTCX /ORDER EXECUTE DCA W1 /STALL FUNCTION CDTRD, DTRB /READ STATUS "B" SMA CLA /ERROR? JMP CIZ /NO: TIME OUT STALL JMS I TYPE /YES: INCORRECT SETUP 2305 /SE 2425 /TU 2077 /P 0000 /END JMP I .+1 START /STALL FOR A WHILE FOR THE INTERRUPT CIZ, ISZ W1 /ONE ROUND'S WORTH JMP CDTRD /OF ISZ JMP I .+1 STMK /OK, GO DO THE MARK TRACK FORM10, F10PAT *1400 /SET THE TAPE INTO MOTION. ALL VARIABLES ARE /SET. FROM THIS POINT ON, CONTROL IS EXECUTED /VIA THE WCO INTERRUPT /CLEAR OUT STATUS "A" AND RELOAD IT WITH CONTINUOUS /WRITE TIMING AND MARK TRACK COMMAND STMK, TAD DT0360 /FWD, CONT, T+M,GO,INT TAD DTA /ADD IN THE DTA DTCX /CLEAR FLAGS START MOTION DCA PHASE /FOR ERROR ROUTINE TAD VAR2 /TO MAKE A RESTART FOR THE "SAME" DCA W6 /OPTION POSSIBLE /WRITE END ZONE. WRITE ABOUT 10' OF THIS /CONFIGURATION. 4044 / 0440 ON TAPE AS / 4404 (5555) OCTAL. DCA W1 /CLEAR COUNTER, 7777= ABOUT 10' CEZ, TAD REZ /LOAD ADDRESS OF DATA DCA I CA /TO BE WRITTEN INTO THE CA TAD M3 /LOAD # WORDS TO BE WRITTEN INTO DCA I WC /WC LOCATION /WAIT FOR INTERRUPT, TEST FOR END OF /END ZONE WRITING. JMS I WAIT /FOR INTERRUPT ISZ W1 /END OF FOOTAGE? JMP CEZ /NOT END FOOTAGE, CONTINUE /OK, WRITE INTERBLOCK SYNC /WRITE INTERBLOCK SYNC. SINCE THIS CONFIGURATION /ACT AS A NOP TO THE TCU, AT THE BEGINING OF /TAPE, MORE LENGTH OF THIS IS NEEDED FOR TURN AROUND /TIME TO GUARANTEE BLOCK 0000 TO THE LIBRARY SYSTEM /THEREFORE AT THE BEGINING OF TAPE ONLY, WRITE SEVERAL /INTERBLOCK ZONES TAD M144 /NUMBER OF TIMES TO DCA W1 /WRITE INTERBLOCK SYNC JMS INBLSY /WRITE 1 INTERBLOCK SYNC ISZ W1 /CONFIGURATION, TEST END JMP .-2 /NOT TOTAL FOOTAGE. WRITE AGAIN JMP WDZ /COMPLETED, GO ON /AT NORMAL RETURN, WRITE ONLY ONE INTERBLOCK SYNC /CONFIGURATION. APPEARS AS 0404 / 0404 ON TAPE AS / 0404 2525 OCTAL INBLSY, 0 TAD IBZ /COUNTER AND WORD DCA I CA /COUNT WITH KEYS TAD M3 /FOR CONTROL DCA I WC TAD VAR1 /RESET THE WORDS DCA W5 /PER BLOCK COUNTER /WAIT FOR INTERRUPT, RETURN TO SEQUENCE JMS I WAIT /FOR INTERRUPT JMP I INBLSY /WRITE FORWARD BLOCK MARK AND REVERSE GUARD /THREE WORDS 0404 / 4004 ON TAPE AS / 4040 2632 OCTAL WDZ, TAD FBM /ADDRESS OF PATTERN DCA I CA /TO CURRENT ADDRESS TAD M3 /NUMBER OF WORDS DCA I WC /TO WORD COUNTER JMS I WAIT /DROP THROUGH AFTER WRITE /WRITE LOCK MARK, REVERSE CKSUM, REVERSE FINAL,REV PREFINAL /SIX WORDS 1. 0040 4. 0040 / 2. 0000 5. 0000 ON TAPE OCTAL / 3. 4000 6. 4000 10101010 TAD WLMRF /ADDRESS OF PATTERN DCA I CA /TO CURRENT ADDRESS TAD M6 /NUMBER OF WORDS DCA I WC /TO WORD COUNTER JMS I WAIT /DROP THROUGH AFTER WRITE / WRITE THE DATA TRACK. SINCE THE LENGTH OF EACH /RECORD IS A VARIABLE, "VAR1" KEEPS TRACK OF THE /NUMBER OF TIMES THIS CONFIGURATION WILL BE WRITTEN /"VAR1" WAS DECIDED FROM ABOVE IN THE FORMULA /TRANSLATION SECTION /THREE WORDS 4440 / 0044 ON TAPE AS / 4000 7070 OCTAL DTRK, TAD DZ /LOAD ADDRESS OF THE DATA DCA I CA /CONFIGURATION INTO CA TAD M3 /LOAD # WORDS DCA I WC /INTO WORD COUNT /WRITE ONE SET TEST "VAR1" FOR LAST SET JMS I WAIT /ONE CONFIGURATION ISZ W5 /LAST? JMP DTRK /NOW WRITE DATA MARK TRACK AGAIN / MARK TRACK CODE FOR DATA IS COMPLETE. NOW WRITE /PREFINAL, FINAL, CHECKSUM AND REVERSE CHECKSUM. /SIX WORDS 1 4440 4 4440 / 2 4444 5 4444 ON TAPE AS / 3 4044 6 4044 73737373 OCTAL TAD FEZ /LOAD ADDRESS OF DCA I CA /DATA CONFIGURATION INTO CA TAD M6 /LOAD # WORDS DCA I WC /INTO WORD COUNT JMS I WAIT /TILL COMPLETED WRITE /WRITE GUARD, REVERSE BLOCK /THREE WORDS 4040 / 0440 ON TAPE AS / 0404 5145 OCTAL TAD GRZ /DATA ADDRESS TO DCA I CA /THE CA TAD M3 /NUMBER OF WORDS DCA I WC /TO WORD COUNT JMS I WAIT /TILL COMPLETE /THIS COMPLETE SET OF DATA TRANSFERES /COMPLETES ONE BLOCK ON TAPE. SINCE THE /NUMBER OF BLOCKS IS VARIABLE, "VAR2" IS /USED TO RECYCLE. "VAR2" WAS SET UP ABOVE IN /THE FORMULA TRANSLATION SECTION JMS INBLSY /WRITE INTERBLOCK SYNC ISZ W6 /TOTAL NUMBER OF BLOCKS JMP WDZ /WRITTEN? NO: /ALL DATA BLOCKS HAVE BEEN WRITTEN. /NOW PROVIDE A BUFFER ZONE OF INTERBLOCK SYNC AT THE END /OF TAPE AS AT THE START OF TAPE TAD M144 /ABOUT TWO BLOCKS(STANDARD) WORTH DCA W1 /ABOUT 100 TIMES JMS INBLSY /WRITE ONE PATTERN ISZ W1 /AT END YET? JMP .-2 /NO CONTINUE WRITING INTERBLOCK SYNC /COMPLETED BLOCK WRITING /WRITE ANOTHER 10' OF END ZONE (FORWARD) /BEFORE LOADING BLOCK NUMBERS. /THREE WORDS 0400 / 4004 ON TAPE AS / 0040 2222 OCTAL DCA W1 /ISZ=10 FEET WEZF, TAD EZM /LOAD ADDRESS OF DATA DCA I CA /INTO CA TAD M3 /NUMBER OF WORDS DCA I WC /WORD COUNT /WRITE 1 SET, CHECK END OF 10'. JMS I WAIT /TILL COMPLETE ISZ W1 /END OF FOOTAGE? JMP WEZF /NO, CONTINUE WITH END ZONE JMP I .+1 /GO AND START BLOCK NUMBER MWTM /SEQUENCING /THESE ARE THE DATA CONFIGURATIONS FOR THE MARK TRACK /REVERSE END ZONE REZ, . 4044 /ON TAPE AS 5555 (OCT) 0440 4404 /INTERBLOCK SYNC IBZ, . 0404 /ON TAPE AS 2525 (OCT) 0404 0404 /FORWARD BLOCK MARK AND REVERSE GUARD FBM, . 0404 /ON TAPE AS 2632 (OCT) 4004 4040 /LOCK MARK, REVERSE CHECKSUM, REVERSE FINAL /AND REVERSE PREFINAL WLMRF, . 0040 /ON TAPE AS 10101010 (OCT) 0000 4000 0040 0000 4000 /DATA MARK DZ, . 4440 /ON TAPE AS 7070 (OCT) 0044 4000 /PREFINAL, FINAL, FWD CHECKSUM, AND REVERSE LOCK FEZ, . 4440 /ON TAPE AS 73737373 (OCT) 4444 4044 4440 4444 4044 /FORWARD GUARD AND REVERSE BLOCK NUMBER GRZ, . 4040 /ON TAPE AS 5145 (OCT) 0440 0404 /FORWARD END ZONE EZM, . 0400 /ON TAPE AS 2222 (OCT) 4004 0040 /SUBROUTINE TO SEE IF USER TYPED MARK 384 /TO SPECIFY STANDARD PDP-10 FORMAT F10PAT, 0 DCA BLOCKS /CLEAR LOC. BLOCKS IN CASE NOT 10-FORMAT TAD TOTAL /AND GET NUMBER TYPED BY USER TAD M617 /WAS IT 384? SZA CLA JMP I F10PAT /NO-RETURN DCA W1 /YES-CLEAR W1 FOR WAIT LOOP TAD C1101 /AND ADJUST BLOCK TOTAL FOR DCA BLOCKS /1102(OCTAL) BLOCKS. JMP I .+1 F10BAK, F10RTN M617, -617 C1101, 1101 *1600 /THE MARK TRACK HAS BEEN WRITTEN, AND TAPE IS /MOVING FORWARD IN THE FORWARD END ZONE. STOP /THE TAPE AND SEE IF THERE ARE ANY TAPES LEFT TO /MARK--IF SO GO DO THEM, ELSE TELL OPERATOR TO THROW THE /"NORMAL/WRTM/RDTM" SWITCH TO "NORMAL" /HE WILL THEN CONTINUE AFTER THIS ACTION /KILL WRITE, STOP TAPE MWTM, TAD DT0070 /STOP TAPE WITH SELECT ERROR TAD DTA /LOAD DTA INTO ORDER DTCX /EXECUTE THE ABOVE JMS NUDTA /ANY MORE DTAS TO MARK? JMP I DOMARK /YES: GO MARK THEM /MESSAGE TO OPERATOR JMS I TYPE /NO: BACK TO FIRST DTA AND CONTINUE 2305 /SE 2440 /T 2327 /SW 1124 /IT 0310 /CH 4024 / T 1740 /O 1617 /NO 2215 /RM 0114 /AL 0000 /END JMS I TYPIN /WAIT FOR CR /REVERSE TAPE FOR A FEW SECONDS TO GUARANTEE /BLOCK MARK SECT WILL BE UNDER THE HEAD PSER, TAD DT0600 /REVERSE, MOVE, GO TAD DTA /ADD DTA TO ORDER DTCX /CLEAR TCU,GET MOVING IN REVERSE /STALL A FEW SECONDS TAD M300 /AROUND 2 SECONDS DCA W2 /MAJOR STALL MSTALL, ISZ W1 /MINOR STALL JMP .-1 /LOOP MINOR DTSF SKP JMP PSER ISZ W2 /MAJOR STALL JMP MSTALL /LOOP MAJOR /TAPE OUT ON MARK TRACK NOW, TURN AND GET IT /MOVING FORWARD. AT THIS POINT, THE LAST REVERSE /BLOCK NUMBER WILL BE WRITTEN UNTILL END ZONE IS /REACHED. THEREFORE, WHEN THE BOUNCE OUT OF THE END /ZONE TAKES PLACE, THE SYSTEM WILL BE ABLE TO SYNC ON /THE REVERSE BLOCK NUMBER TO WRITE THE REST OF /THE BLOCK NUMBERS AND KNOWN GOOD DATA IN REVERSE. /THIS PROCESS WILL ELIMINATE A NEEDLESS REWIND AND /KEEP THE ENTIRE PROCESS TO TWO COMPLETE PASSES /WRITE LAST REVERSE BLOCK NUMBER GOING FORWARD TAD RZ DCA I CA TAD DT0210 /FORWARD, SEARCH, GO TAD DTA /ADD IN THE DTA DTCX /CLEAR STATUS "A" AND RELOAD IT TAD C1 /PHASE 1 ERROR DCA PHASE /FOR ERROR ROUTINE /WAIT HERE FOR DECTAPE FLAG. CHECK ALSO FOR ERRORS /SET BLOCK NUMBER (REVERSE) INTO FORM TAD BLOCKS /INTO AC WITH LAST BLOCK NUMBER JMS I MESS /CONVERT BLOCK NUMBER FOR TAPE /INTERRUPTED? ERROR? DTRB /READ STATUS "B" RAR /DECTAPE FLAG TO LINK SNL CLA /FLAG SET? JMP .-3 /NO: CONTINUE WAIT /BLOCK FOUND. SWITCH TO READ DATA WITH WC ONE LESS THAN /NUMBER OF WORDS TO BE READ. READ TILL WC=0 TAD DT0130 /TO SET STATUS "A" INTO RCYBR, DTXA /THE READ DATA MODE CLA CMA /SUBTRACT 1 FROM TOTAL TAD TOTAL /GIVING TOTAL-1 (HO HO) CMA /INVERT FOR ISZ DCA I WC /SET WC TAD C4 /NOP DCA I CA /JIMMIED TO DO NOTHING DTRB /READ "B" REGISTER AND C1000 /ISOLATE END ZONE BIT SZA CLA /END ZONE? JMP I GDBLK /YES: GO AND WRITE THE BLOCK NUMBERS TAD I WC /WAIT TILL WORD COUNT ZERO SZA CLA /EQUAL TO ZERO? JMP .-10 /NO: LOOP AGAIN /END OF BLOCK FOUND. WRITE JUNK AND REVERSE BLOCK NUMBER TAD M14 /12 WORDS TO BE WRITTEN DCA I WC /TO WORD COUNT REG. TAD FORMB /FORM TO CA DCA I CA /OF NUMBERING FORM TAD DT0070 /SWITCH TO WRITE ALL DTXA /MODE. /LOOK FOR THE DECTAPE FLAG INDICATING ANOTHER RECYCLE DTRB /NO: GET "B" AGAIN RAR /FLAG TO LINK SNL CLA /FLAG SET? JMP .-3 /NO: BE PATIENT. HAST NOT. TAD DT0070 /TO SWITCH TO READ DATA JMP RCYBR GDBLK, DOBLK DOMARK, STMK /POINTER TO START OF MARK ROUTINE /SUBROUTINE TO GET NEXT DTA UNIT # FROM INPUT LIST OR /RECYCLE TO FIRST UNIT IF ALL HAVE BEEN PROCESSED UP TO /THIS POINT--CALL SEQUENCE / JMS NUDTA /CALL THE ROUTINE / (RETN1) /RETURNS HERE IF MORE DTAS TO PROCESS / (RETN2) /RETURNS HERE IF END OF LIST /END OF LIST MEANS RESET TO FIRST AND RETURN TO (RETN2) /RETURN IS WITH DTA SET TO NEW VALUE AND AC=0 NUDTA, 0 TAD I LSTPT /GET CURRENT VALUE OF DTA LIST PTR DCA TBUFPT /STORE IT AS TEM. BUF. PTR. TAD I TBUFPT /GET A DTA # FROM THE LIST AND C0007 /ISOLATE LOW ORDER DIGIT SZA CLA /IS IT 7777? JMP LSTEND /YES: END OF LIST TAD I TBUFPT /NO: GET IT BACK DCA DTA /AND STORE AS NEW DTA # ISZ I LSTPT /INCREMENT LIST POINTER JMP I NUDTA /RETURN /COMES HERE AT END OF LIST TO RESET PTRS AND RETN TO CALL+2 LSTEND, ISZ NUDTA /INCREMENT RETURN POINTER TAD I STRTPT /GET ADR. OF START OF LIST DCA I LSTPT /STORE TO RE-INITIALIZE LIST PTR. JMP NUDTA+1 /GO GET FIRST DTA # AND RETURN STRTPT, DBUFAD /POINTER TO START OF DTA LIST TBUFPT, 0 /TEM. STORAGE FOR BUF. PTR. LSTPT, DBUFPT /POINTER TO CURRENT VALUE OF DTA LIST PTR DTABUF, 0 /START OF DTA # LIST - MAX. 9 WORDS RZ, .+1 0 /SUBROUTINE TO CHECK FOR REPEATED DTA NUMBERS /DTA # TO COMPARE TO LIST IS IN AC ON ENTRY--THIS /ROUTINE STORES THE DTA # IF IT IS NEW AND IGNORES IT /IF IT IS NOT-CALL BY JMS REPEAT WITH DTA # IN AC REPEAT, 0 DCA DNUM /TEM STORAGE FOR NEW DTA # TAD DBUFAD /INITIALIZE POINTER (DBUFPT) DCA DBUFPT /TO START OF DTA LIST TAD DCTR /LOAD NUM. OF DTAS STORED CMA /COMPLEMENT IT DCA COMCTR /STORE IN COMPARE COUNTER COMCHK, ISZ COMCTR /DONE WITH ALL COMPARES? JMP DOCOMP /NO: GO DO COMPARE TAD DNUM /YES: STORE NEW DTA# DCA I DBUFPT /AT END OF LIST ISZ DCTR /INCR. # OF DTAS STORED JMP I REPEAT /RETURN /THIS SECTION DOES THE ACTUAL COMPARISON BETWEEN /THE DTA# PASSED TO THE ROUTINE AND A NUMBER ON THE LIST DOCOMP, TAD I DBUFPT /GET NEXT DTA NUMBER FROM LIST CIA /NEGATE IT TAD DNUM /ADD IN DTA NUMBER PASSED SNA CLA /ARE THEY THE SAME? JMP I REPEAT /YES: RETURN ISZ DBUFPT /NO: INCREMENT LIST POINTER JMP COMCHK /SEE IF DONE ALL COMPARES / / COMCTR, 0 /COUNTER FOR # OF LIST COMPARISONS TO BE DONE DCTR, 0 /COUNTER FOR # OF DTAS IN LIST DBUFAD, DTABUF /START OF DTA NUM. LIST DNUM, 0 /TEM STORAGE FOR DTA # / *2000 /GO INTO SEARCH IN REVERSE MODE LOOKING FOR /THE LAST BLOCK NUMBER. WHEN FOUND, SYNC THE SYSTEM /AND WRITE ALL DATA AND BLOCK NUMBERS DOBLK, JMS I TURN /INTO REVERSE AND SEARCH MODE TAD BLOCKS /TO SET UP DCA BLOCKA /FOR BLOCK DECREMENTING TAD C2 /PHASE 2 ERROR DCA PHASE /FOR ERROR ROUTINE /LOOK FOR INTERRUPT INDICATING BLOCK NUMBER JMS I WAIT /FOR DECTAPE FLAG /SWITCH TO WRITE ALL. SYSTEM NOW IN SYNC TAD DT0140 /SWITCH TO WRITE ALL DTXA /EXECUTE ORDER NEXTBN, TAD ADF3 /ADDRESS OF FIRST 3 WORDS INCLUDING DCA I CA /THE FORWARD CHECKSUM TO BE WRITTEN TAD M3 /NUMBER OF WORDS TO BE WRITTEN DCA I WC /TO WORD COUNT JMS CEZN /CHECK FOR END ZONE TAD I WC /CHECK FOR WC=0 SZA CLA /=0? JMP .-3 /NOPE: TRY AGAIN DTXA /YUP: CLEAR THE FLAG /WRITE DATA TRACK. REMEMBER CORRECT DATA IS BEING WRITTEN TAD TOTAL /ONE FROM TOTAL NUMBER CIA /OF WORDS FOR COUNTING DCA I WC /DATA WORDS WRITTEN TAD AD7777 /ADDRESS OF SEVENS DCA I CA /DATA TO BE WRITTEN /MONITOR WORD COUNT FOR A ZERO READING /SOME OF THIS TIME IS USED TO SET THE NEXT /BLOCK NUMBER INTO THE FORM. TAD BLOCKA /CURRENT BLOCK NUMBER JMS I MESS /CONVERT INTO FORM CLA CMA /TO DECREMENT TAD BLOCKA /THE BLOCK COUNT DCA BLOCKA /DOWN TO ZERO JMP CEZB /BYPASS FOLLOWING ROUTINE /CHECK FOR END ZONE CEZN, 0 DTRB /READ STATUS "B" AND C1000 /ISOLATE END ZONE SNA CLA /HAVE IT? JMP I CEZN /NOT EZ, RETURN JMP I GDBN /COMPLETED /CHECK HERE ALSO TO SEE IF END ZONE, INDICATING /THAT THE LAST BLOCK HAS BEEN WRITTEN CEZB, JMS CEZN /END ZONE? /LOOK FOR WORD COUNT AS BEING EQUAL TO ZERO TAD I WC /WC TO C(AC) SNA CLA /END OF DATA WRITE? JMP WBN /YES: GO TO WRITE BLOCK NUMBER TAD AD7777 /RESET CURRENT ADDRESS COUNT DCA I CA /DON'T LET THE CA ADVANCE TO JMP CEZB /MUCH /DATA HAS BEEN WRITTEN. NOW WRITE REVERSE /BLOCK NUMBER, FORWARD BLOCK NUMBER, AND REVERSE /CHECKSUM. (12 WORDS) WBN, DTXA /CLEAR OUT DECTAPE FLAG TAD M14 /WILL WRITE 12 WORDS DCA I WC /FOR THIS BIT TAD FORMA /FROM A FORM CONTAINING DCA I CA /BLOCK NUMBERS /WAIT FOR END JMS CEZN /END ZONE? TAD I WC /NO: SEE IF DONE THE WRITE SZA CLA /DONE YET ? JMP .-3 /NO: PATIENCE IS A VIRTUE???? DTXA /RESET THE CURRENT FLAG JMP NEXTBN /YES: GO RECYCLE COMPLETLY GDBN, DBN / FIRST 3 WORDS TO BE WRITTEN ADF3, . 0000 0000 0077 /DATA TO BE WRITTEN ON TAPE (REVERSE) AD7777, . 7777 7777 7777 7777 /CHECK IF ALL DTAS ARE DONE BEFORE RESTARTING SETDTA, JMS I GDTA /ALL DTAS DONE? JMP I CONTNU /NO: BACK TO WRITE BLOCK #S ON NEXT JMP I IT /YES: GO ASK "DIRECT?" GDTA, NUDTA /POINTER TO SUBR FOR GETTING NEXT UNIT # CONTNU, PSER /POINTER TO START OF BLOCK # WRITE ROUTINE /TYPE ONE FOUR CHARACTER OCTAL WORD GIVEN TO THE /ROUTINE VIA C(ACC). C(ACC)=0 ON EXIT TYCT, 0 DCA TW1 /STORE WORD GIVEN TAD TW1 /TO C(ACC) AGAIN RTR RTR /6 BITS GIGHT RTR DCA TYCT1+2 /SAVE ROTATED VALUE, 1ST TWO TAD TYCT1+2 /TO C(ACC) AGAIN AND C0007 /ISOLATE SECOND CHARACTER TAD C6060 /CONVERT TO ASCII DCA TYCT1+1 /STORE AS FIRST PARTIAL 2 TAD TYCT1+2 /ROTATED VALUE STORED ABOVE RTL RAL /3 BITS LEFT AND C0700 /ISOLATE FIRST CHARACTER TAD TYCT1+1 /CONVERT 1ST TO ASCII DCA TYCT1+1 /1ST AND 2ND CHARACTERS READY TAD TW1 /ORIGIONAL WORD AND C0007 /ISOLATE 4TH CHARACTER TAD C6060 /CONVERT 4 TH TO ASCII DCA TYCT1+2 /STORE 4TH FOR A MOMENT TAD TW1 /ORIGIONAL WORD RTL RAL /POSITION IT 3RD CHARACTER AND C0700 /ISOLATE 3RD CHARACTER TAD TYCT1+2 /CONVERT TO ASCII DCA TYCT1+2 /CONVERSION COMPLETE TYCT1, JMS I TYPE /TYPE THE FOUR CHARACTERS 0 /FIRST 2 0 /SECOND 2 0 /KILL KEY JMP I TYCT /EXIT FROM ROUTINE /SOME CONSTANTS FOR THE ROUTINE TW1, 0000 C6060, 6060 *2200 /VERIFY THE TAPE AS BEING WRITTEN CORRECTLY /WITH DATA AND BLOCK NUMBERS. THE INFORMATION WRITTEN /WAS WRITTEN IN SUCH A WAY AS TO BE CORRECT /UPON READING IT BACK /TURN TAPE AND HAVE IT GOING FORWARD DBN, TAD ISZV /RESET INCREMENT DCA VISZ /BLOCK NUMBERS FORWARD DCA FCON /WILL BE ZEROS FORWARD DCA W1 /FIRST BLOCK NUMBER FORWARD TAD C0400 /TURN TO GO FORWARD DBNAUX, JMS I TURN TAD C3 /ERROR IN PHASE 3 DCA PHASE /FOR ERROR ROUTINE /SET SOME OF THE CONTROL REGS DAB, DCA I WC /WORD COUNT DON'T CARE TAD ADBA /SOME WHERE UP ABOVE DCA I CA /TO GET BLOCK NUMBERS /WAIT FOR INTERRUPT JMS I WAIT /INTERRUPT TAD W1 /FIRST OR NEXT BLOCK NUMBER CIA /TO COMPARE TAD I ADBA /GET THE BLOCK NUMBER SZA CLA /COMPARE OK? JMP BLKERZ /BLOCK ERROR FOUND /BLOCK COMPARES, NOW CHECK DATA TAD DT0030 /TO SWITCH INTO READ DTXA /DATA MODE DCA I WC /DON'T CARE ABOUT THE WC CTST, TAD ADWA /FOR COMPARING DCA I CA /FROM TAPE /EVERY TIME THE WORD COUNT MOVES /A DATA TRANSFERE HAS BEEN COMPLETED. /MAKE SURE THAT THE INFORMATION IS OK TAD I WC /GET WORD COUNT SNA CLA /STILL AT ZERO? JMP CEFR /YES: SEE IF AT END TAD FCON /NO: SEE IF DATA CIA /IS SAME AS WRITTEN TAD I ADWAB /RECEIVED DATA SZA CLA /SAME? JMP DTAR /DATA ERROR FOUND DCA I WC /YES: RESET WORD COUNT /CHECK FOR DECTAPE FLAG INDICATING END OF /BLOCK OR ERROR CEFR, DTRB /READ "B" REGISTER SPA /ERROR? JMP PARIR /PARITY ERROR, I GUESS /NO ERROR, END OF BLOCK? RAR /FLAG TO THE LINK SNL CLA /END? JMP CTST /NO: CONTINUE CHECKING TAD DT0030 /CLEAR DECTAPE FLAG DTXA /AND RETURN TO SEARCH /END OF BLOCK. SEE IF END OF TAPE TAD W1 /BLOCK NUMBER JUST TESTED VISZ, ISZ W1 /+1 OR -1 TO BLOCK COUNT SKP HLT /ABSOLUTE PANIC CIA /TO BE COMPARED WITH TAD BLOCKS /TOTAL BLOCKS SZA CLA /LAST? JMP DAB /NO, DO ANOTHER BLOCK /HERE PUT IN THE REVERSE CHECK DDSF, DTSF /WAIT FOR ANY FLAG TO APPEAR JMP .-1 /NOT YET CLA CLL /RID AC OF GARBAGE DTRB /READ THE "B" REGISTER AND C1000 /BETTER BE END ZONE SNA CLA /IS IT? JMP LNE /LAST INTERRUPT NOT END ZONE DTCX /YUP: A OK /BLOCK NUMBERS AND DATA HAVE BEEN CHECKED FORWARD /AND ARE OK. USING THE ABOVE ROUTINE FOR CHECKING /RESET A FEW THINGS AND CHECK IN REVERSE /WAS COMPLETION FOUND FORWARD? IF SO GO CHECK /IN REVERSE; IF NOT GO SEE IF ALL TAPES HAVE BEEN CHECKED. TAD FCON /IF 0'S, IT WAS FWD SZA CLA /FWD? JMP I FINCHK /N0: REVERSE-SEE IF ALL DTAS DONE /RESET THE ABOVE ROUTINE TO READ IN REVERSE CMA /DATA WILL BE AS WRITTEN DCA FCON /I.E., 7777'S TAD SJMP /INSTEAD OF INCREMENTING DCA VISZ /WE WILL DECREMENT BLOCK NUMBERS TAD BLOCKS /STARTING WITH THE HIGHEST DCA W1 /AND WILL WORK TO ZERO JMP DBNAUX /ALL SET, TRAVEL ONWARD /RETURN HERE AFTER EACH BLOCK FOR CHECKING WHEN LAST BLOCK /HAS BEN PROCESSED???????????? SJMP, JMP .+1 SNA /IF AC = 0, WE ARE DONE JMP DDSF /AND NEXT FLAG SHOULD BE END ZONE CIA /OTHERWISE, SUBTRACT ONE FROM CMA /BLOCKS GIVING BLOCKS-1......? DCA W1 /NOT DONE JMP DAB /GO DO ANOTHER BLOCK ISZV, ISZ W1 /VARIABLE TAG FINCHK, SETDTA /BLOCK ERROR FOUND BLKERZ, TAD DTA /TO RESET TAPE DTCX /MOTION TAD I ADBA /GET BAD BLOCK NUMBER JMS I TYOCT /AND TYPE IT OUT JMS TYSB /TYPE "SHOULD BE" TAD W1 /GOOD BLOCK NUMBER JMS I TYOCT /TYPE IT OUT JMS I TYPE 4002 / B 1413 /LK 4005 / E 2243 /R CR 4500 /LF+END DBERZ, JMP I .+1 ZCOM /COMMON ROUTINE TYSB, 0 JMS I TYPE 4023 / S 1017 /HO 2514 /UL 0440 /D 0205 /BE 4000 / 0 JMP I TYSB /DATA ERROR DTAR, TAD DTA /TO STOP TAPE DTCX /MOTION TAD I ADWA /GET THE BAD WORD JMS I TYOCT JMS TYSB /TYPE "SHOULD BE" TAD FCON /GOOD WORD JMS I TYOCT /TYPE IT OUT JMS I TYPE 4004 /D 0124 /AT 0140 /A 0522 /ER 4543 /CR+LF 0000 /END JMP DBERZ /PARITY ERROR FOUND PARIR, JMP I .+1 ERROR /MAIN ERROR ROUTINE /LAST INTERRUPT WAS NOT END ZONE LNE, JMS I TYPE 1401 /LA 2324 /ST 4011 / I 1624 /NT 4016 / N 1724 /OT 4005 / E 1724 /OT 4345 /LF+CR 0000 /END JMP DBERZ *2400 / TYPE OUT THE DTA UNIT NUMBER AND THE FIRST 12 BLOCK /NUMBERS IN EITHER DIRECTION. IF RDR, IN REVERSE /IF RDF, TYPE THEM OUT GOING IN THE FORWARD /DIRECTION FROM THE BEGINING OF TAPE RDFA, TAD C0400 /DIRECTION FOR TURNING DCA SAVEIT /STORE DIRECTION FOR NEXT DTA UNIT TAD SAVEIT /GET DIRECTION FOR TURNING JMS I TURN /AROUND TAD M14 /READ 12 BLOCK DCA W3 /COUNTER TAD BADD /ADDRESS OF BUFFER DCA X2 /TO AUTO INDEX 2 TAD ADW3 /ADDRESS OF W2 DCA I CA /FOR DATA XFER JMS I WAIT /FOR BLOCK INTERRUPT TAD W2 /BLOCK NUMBER DCA I X2 /STORE BLOCK NUMBER ISZ W3 /TOTAL = 12? JMP .-4 /NO: GRAB NEXT TAD DTA /KILL TAPE MOTION DTCX /HERE /TYPE OUT BLOCK NUMBERS AND DTA UNIT # JMS I TYPE /TYPE "DTA" 0424 /DT 0140 /A 0000 /END TAD DTA /GET UNIT # JMS I TYOCT /AND TYPE IT OUT JMS I TYPE 4345 /CR&LF 0000 /END TAD M14 /WILL TYPE ALL DCA W1 /TWELVE WORDS TAD BADD /ADDRESS OF BLOCK DCA X2 /NUMBERS TO INDEX 2 TAD I X2 /FIRST OR NEXT BLOCK JMS I TYOCT /TYPE IT OUT JMS I TYPE /CR AND LINE FEED 4345 /CR+LF 0000 ISZ W1 /COMPLETE? JMP .-6 /NO JMS I NEWDTA /YES: ANY MORE DTAS? JMP RDFA+2 /YES: GO GET BLOCK #S JMP I IT /NO: GO ASK FOR "DIRECT?" RDR, JMP RDFA+1 /OTHER DIRECTION SAVEIT, 0 /TEM. STORAGE FOR DIRECTION NEWDTA, NUDTA /POINTER TO SUBR. TO GET A NEW DTA UNIT # /INPUT BUFFER FOR THE TELETYPE. /NOTE ,,,,,,,THIS MUST BE AT THE END OF THE PROGRAM BUFFER, 0000 $ |
Added src/os8/uni/CUSPS/EDIT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 | /6 OS/8 SYMBOLIC EDITOR, V12 / / / / / / / // / / / / /COPYRIGHT (C) 1977 /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. / / / / / / /5 JULY 1972 EF /COPYRIGHT 1971,1972 DIGITAL EQUIPMENT CORPORATION / MAYNARD, MASSACHUSSETTS 01754 /THE SYMBOLIC EDITOR IS A LINE-ORIENTED /TEXT EDITOR WITH CHARACTER AND STRING /SEARCH CAPABILITIES. IT IS DESIGNED /TO BE COMPATIBLE WITH THE OS/8 SYSTEM. /THE DESIGN OF THE EDITOR IS SIMILAR /TO THAT OF THE PAPER TAPE SYMBOLIC /EDITOR AND THE DISK MONITOR SYSTEM /EDITOR. / OS/8 V3 CHANGES S.R. /1. ?5 ERROR REMOVED /2. ALLOW CHAINING TO EDIT /3. ADDED VERSION # COMMAND (#) /4. COMBINED ^C ROUTINES, TAKING OUT BRANCH THRU 17667 /5. ALLOWED PARITY CHARACTERS EVERYWHERE / / / FIX FOR V10 J.K. 1975 / / THE CLOSE ERROR MESAGE 2? WAS BEING / GIVEN INSTEAD OF FILE FULL MESSAGE / WHEN THE INPUT FILE FIT INTO THE EDIT BUFFER / BUT WAS TOO LARGE FOR THE AVAILIBLE SPACE ON THE / OUTPUT DEVICE. / V11 CHANGES 25-MAY-77 DAVID SPECTOR /1. ESCAPE KEY NO LONGER ECHOED /2. SCOPE MODE SUPPORTED /3. ONCE-ONLY CODE MOVED TO INPUT HANDLER / AREA IN ORDER TO FREE LOCS 3000-3177 / V12 CHANGES 27-JUN-77 EDWARD P. STEINBERGER / /ALLOWED ESCAPE(233) TO BE AN INPUT CHARACTER IN TEXT MODE. /ECHOS AS "$" ON TERMINAL OR LINEPRINTER (IF V), OUTPUT /TO FILE AS ESCAPE /THE LOADING AND SAVING PROCEDURE FROM PAPER TAPE IS: / .R ABSLDR / *PTR:/9$^ / .SAVE SYS EDIT / /THE STARTING ADDRESS IS 00200. /COMMAND DECODER RULES: /*OUTPUT FILE<UP TO 9 INPUT FILES/OPTIONS /OPTIONS: /A RETURN CONTROL TO EDITOR AFTER FILE CLOSE / (CALLS COMMAND DECODER FOR NEW FILES) / (DEFAULT IS RETURN TO MONITOR) /B CONVERT 2 OR MORE SPACES TO TAB ON INPUT /D DELETE OLD COPY OF OUTPUT FILE BEFORE / STORING NEW FILE /ERROR CODES: / 0 FAILURE IN INPUT DEVICE HANDLER / 1 FAILURE IN OUTPUT DEVICE HANDER / 2 COULD NOT CLOSE FILE / 3 COULD NOT OPEN FILE / 4 DEVICE HANDLER COULD NOT BE LOADED VERSION=12 PATCH="D /PATCH LEVEL D /COMMANDS: /A APPEND TEXT TO BUFFER /I INSERT TEXT INTO BUFFER /C CHANGE TEXT IN BUFFER /L LIST TEXT IN BUFFER /D DELETE TEXT IN BUFFER /K KILL BUFFER /M MOVE TEXT WITHIN BUFFER /G GET AND LIST TAGGED LINE IN BUFFER /B LIST # OF CORE LOCATIONS LEFT IN BUFFER /S CHARACTER SEARCH /J INTER-BUFFER STRING SEARCH /F AFTER J, SEARCH FOR NEXT OCCURRANCE / OF SAME STRING /$ INTRA-BUFFER STRING SEARCH /R READ TEXT INTO BUFFER FROM INPUT DEVICE /N WRITE BUFFER, KILL, AND READ NEXT PAGE /Y INPUT TEXT PAGE, NO OUTPUT /P WRITE TEXT BUFFER TO OUTPUT DEVICE /T PUNCH TRAILER TAPE /E OUTPUT BUFFER, TRANSFER REST OF / INPUT FILE TO OUTPUT FILE / CLOSE OUTPUT FILE /Q IMMEDIATE END OF FILE /V PRINT ON LP08 /# TYPE VERSION NUMBER /ABBREVIATIONS /.LT. LESS THAN /.LE. LESS THAN OR EQUAL TO /.GT. GREATER THAN /.GE. GREATER THAN OR EQUAL TO / R RIGHT / L LEFT /SPECIAL COMMENTS /SINCE THE EDITOR IS CODED ACROSS PAGE BOUNDARIES, IT IS /NECESSARY TO BE AWARE OF THE EFFECTS OF THE INSERTION /OR DELETION OF CODE. FOR THIS REASON, THE LIMITS /OF PERMISSABLE PAGE BOUNDARY WANDERING /ARE INDICATED WITH THE FOLLOWING CONSTRUCTION: /----------------------------------------------------------------------- /SOMEWHERE BETWEEN LINES, THE PAGE BOUNDARY MUST OCCUR /----------------------------------------------------------------------- *1 /MISCELLANEOUS POINTER AND CONSTANTS BUFEND, 6100 /WARNING FOR END OF BUFFER P7700, 7700 /MONITOR CALL LOCATION M77, -77 NOP /RESERVED FOR ODT NOP / " NOP / " C77, 77 M40, -40 C100, 100 C277, 277 /QUESTION MARK /AUTO-INDEX REGISTERS AXOUT, 0 /OUTPUT INDEX AXCOMB, 0 /COMBINE POINTER AXTEM, 0 /TEMPORARY INDEX AXIN, 0 /STORAGE INDEX /CONSTANTS M4, -4 /LETTER COUNT P177, 177 MCR, -215 M240, -240 P40, 40 C200, 200 /(START & RESTART) /LISTS /TAG SEARCH LIST- LIST7=. C240, 240 /SPACE 257 /COMMENT DELIMITER (/) /OUTPUT LIST LIST4=. ESC, 233 /ESC-V12 CTAB, 211 /TAB C215, 215 /CARRIAGE RETURN 212 /LINE FEED 214 /FORM FEED 377 /RUBOUT 216 /CONTROL N (^N) M27, -27 /LIST DELIMITER /SPECIAL CHARACTER LIST FOR /INPUT IN TEXT MODE LIST5=. /USED AT AONE 240 /SPACE LIST6=. /USED AT SFOUND 225 / ^U C214, 214 /FORM FEED BELL, 207 / ^G (BELL) C212, 212 /LINE FEED CRO, 377 /RUBOUT LIST3=. 215 /LIST BRANCHER 000 /(SEARCH CHARACTER) RST3I, RESET3 /RESET AND SAVE BUFFER MCHIN1, -CHIN-1 /LIST DELIMITER /CONSTANTS AND POINTERS CCR=C215 /CARRIAGE RETURN CLF=C212 /LINE FEED MTABS, -10 /TAB COUNTER DELT, DELP CHI1, CHIN IGNORE, CHIN+1 END, 200 KEYBD, I33 CCON, JMP I AXCOMB COM1-1 UTR1, UTRA FIN1, FIND LIS1, LIST LIS, LISTER NINE, 12 NUMB, -272 OUT1, OUT OUTL1=. LOW, OUTL CZ, NOP /CONTENTS OF START ONUM, GTOP SORTJ, SORTB PACK1, PACBUF SXS1, TAD CHAR /CONTENTS OF L3 SXS2, SLOOK&177+5200 /JMP SLOOK L3I, L3 /PATCH POINTER L2I, L2 /CONTINUE SEARCH - LETTERS ENDLNI, ENDLN SPCNO, MOR+4 /PACK SPCGO, MOR+1 /SORT /CHAR IS ALWAYS SET BY OUT, SOMETIMES BY SORTB; /IT IS ALWAYS USED BY PACK AND SORTB. CHAR, 0 MOV1=. COUNTP, 0 /NUMBER OF PAGES CNT=. /PRINT COUNTER XCT, 0 /UNPACK SWITCH XCTIN, 0 /PACK SWITCH ECHOSW, 1 /NON-ZERO TO PRINT SAVE, 0 TABIND, 0 /TABS OR SPACES SWITCH TEMP, 0 /V3 THIS, 0 /LINE POINTER. OUTDEV, OUTL /POINTER TO OUTPUT SUBROUTINE GRBAGE, GARBAG /GARBAGE COLLECTOR MARK, 0 /OBJECT LINE IN G.C. XSAV, 0 /HOLD INPUT POINTER. BUFR, 200 CFRS, FRST KILL1, KILL+3 CHKARG, CHKARX ERSW, ERROR /ERROR ROUTINE L1I, L1 EKILLL, 0 /E CMD SWITCH 1 IF E NOT ALLOWED /I-O RELATED POINTERS AND WORDS P232, 232 /V3 BUFRDI, BUFRD /OR CHIN...IN DEVICE POINTER BUFWTI, BUFWT /WRITE OUTPUT TO DEVICE CLFLI, FLCLOS /SET TO CLOSE FILE P37, 37 /V3 JMPCH, PUNCH&177+5200 /DESTROYED BY YANK /ERROR ROUTINE POINTERS SERR0I, SERR0 SERR1I, SERR1 SERR2I, SERR2 SERR4I, SERR4 GTEM=. /NEXT 6-BITS OF UNPACK DTEM=. /NEXT POINTER IN DELETE CHAIN /ERROR ROUTINE /REJECTS ILLEGAL COMMAND /AND TYPES ? ERROR=JMS . 0 ELIM, 7600 /GRP2-CLA TAD C277 JMS I OUTL1 /PRINT "?" CZONE, TAD CZ /RESET PATCHES DCA I TE1 JMPTE1, JMP I TE1 /*RETURN TO COMMAND MODE* UPAROI, UPAROW /GENERATE ^ CHARACTER MONITOR, MONIT /MONITOR EXIT ROUTINE STRIND, 0 STRFIN, SFIND1 TE1, START /VARIABLES THSN, 0 /CURRENT LINE NUMBER LSTN, 0 /LAST LINE NUMBER TCNT, 0 /TAB COUNT ADD, 0 ARG0, 0 ARG1, 0240 ARG2, -1 POTYPE, OTYPE COMM5, COM5 K7600, 7600 TEMPO, 0 K1210, 1210 X203, -203 K1320, 1320 FRST, 0 /FIRST LINE ADDRESS MOV2=TEMPO LSTCHK, 0 /DIGIT ACCEPTED FLAG *177 INIT /INITIALIZATION CODE /EITHER 3000 OR VALUE OF RESET *200 STA /V3 NORMAL START OR RESTART ADDR DCA TEMP /V3 CHAIN START ADDR JMP I 177 /START AT 3000 OR RESET /HANDLER FOR ^U (IF IN COMMAND MODE) START, NOP /V3 MAY BE MODIFIED TAD LOW /ENTER COMMAND MODE DCA OUTDEV /INITIALIZE KEYBOARD DCA TABIND /CLEAR TAB INDICATOR ISZ ECHOSW /SET UP FOR ECHO DCA LIST3+1 TAD SXS1 DCA I L3I TAD ERSW /RESET ERROR SWITCH AT L1 DCA I L1I TAD CZONE DCA I COMM5 DCA LSTCHK /CLEAR DIGIT ACCEPTED TAD CCR /OUTPUT CARRIAGE RETURN JMS I OUT1 /HANDLER FOR CARRIAGE RETURN (COMMAND MODE) TAD SIGN /OUTPUT # JMS I OUT1 GTOP, DCA ARG0 /CLEAR ARGUMENTS DCA ARG2 /HANDLER FOR SPACE OR + GEXP, TAD NONE /HANDLER FOR - GMIN, TAD CMPT DCA G2 /SET SIGN TO + OR - DBCV2, DCA TEMP CMCHK, JMS I CHI1 /INPUT ONE CHARACTER TAD NUMB CLL TAD NINE SZL /WAS IT A DIGIT? JMP COUNT /YES - CONTINUE ACCEPTING NUMBERS GLOM, CLA /NO TAD TEMP /GET ACCUMULATED NUMBER G2, HLT /(NOP) OR (CIA) TO HANDLE SIGN TAD ARG2 DCA ARG2 /STORE NEW ARGUMENT JMS SORTB /WAS LAST CHARACTER SPECIAL? LIST1-1 /YES - COMPARE TO LIST OPS1-LIST1 /AND BRANCH TO HANDLER TAD CHAR /NO - SAVE COMMAND CHARACTER DCA SAVE JMS I CHI1 /INPUT ONE CHARACTER JMS SORTB /IS IT CARRIAGE RETURN, ^C, OR ^U? LIST1A-1 /YES - EXIT TO HANDLER OPS1A-LIST1A ERROR /NO - TRY AGAIN /CHECK LEGALITY OF ARGUMENTS /ARG0 CONTAINS FIRST ARGUMENT /ARG2 CONTAINS SECOND ARGUMENT RETRN, TAD ARG0 SNA /IS ARG0=0? TAD ARG2 /YES - ARG0=ARG2 DCA ARG0 /NO TAD ARG2 CMA TAD ARG0 SMA /IS ARG0 .LE. ARG2? ERROR /NO DCA ARG1 /YES - ARG1=ARG0-ARG2-1 TAD ARG0 SPA CLA /IS ARG0 .GE. 0? ERROR /NO TAD SAVE /YES - GET COMMAND CHARACTER JMS SORTB /IS IT A LEGAL COMMAND? LIST2-1 /YES - MATCH TO LIST OPS2-LIST2 /AND BRANCH TO ITS HANDLER ERROR /NO - TRY AGAIN /COMMAND IDENTIFICATION LIST LIST2=. /COMMAND LETTERS 305 /E 301 /A 311 /I 303 /C 313 /K 304 /D 314 /L 316 /N 320 /P 322 /R 312 /J 306 /F 324 /T 315 /M 307 /G 323 /S 331 /Y 321 /Q 302 /B 326 /V SIGN, "# /V3 VERSION # NONE, -41 /"NOP-CIA" /SORT AND BRANCH ROUTINE /LOOKS FOR MATCH BETWEEN CHAR /AND ELEMENTS OF TABLE 1 SPECIFIED /CALLING SEQUENCE: / JMS I (SORTB / TABLE1-1 / TABLE2-TABLE1 / RETURN IF NO MATCH /DISPATCHES TO CORRESPONDING ADDRESS IN TABLE 2 SORTB, 0 SZA /IS CHARACTER STORED YET? DCA CHAR /NO - STORE IT TAD I SORTB /YES ISZ SORTB DCA AXTEM /STORE TABLE 1 ADDRESS TAD I AXTEM /GET TABLE ENTRY SPA /DONE YET? JMP SEX /YES - EXIT CMPT, CIA /NO TAD CHAR /GET CHARACTER SZA CLA /DO THEY MATCH? JMP .-6 /NO - KEEP TRYING TAD AXTEM /YES - THEY MATCH TAD I SORTB /GET DISPATCH TABLE ADDRESS DCA SORTB TAD I SORTB DCA SORTB /SET RETURN ADDRESS JMP I SORTB /--RETURN--VIA DISPATCH TABLE SEX, ISZ SORTB /MATCH NOT FOUND CLA JMP I SORTB /-- /DECIMAL ADDITION ROUTINE /FOR NUMERIC ARGUMENTS OF COMMANDS /ENTER WITH INPUT DIGIT IN SORTB /EXIT WITH ACCUMULATED NUMBER IN AC COUNT, DCA SORTB ISZ LSTCHK /GOT A DIGIT NOW TAD TEMP RTL CLL TAD TEMP RAL TAD SORTB JMP DBCV2 /RETURN TO MAIN SEQUENCE /----------------------------------------------------------------- /DISPATCH LIST FOR COMMAND HANDLERS OPS2, ENDFIL /E APP /A XNS /I CNGE /C KILL /K DELE /D LIST /L COMBO /N PUNCH /P TELE /R JERK /J BARROW /F PUNCT /T MOVEM /M GETTAG /G XCRET /S YANK /Y Q /Q CORSPC /B VIEW /V VERSN /# /END OF INPUT TEXT LINE ROUTINE EOL, JMS I ENDLNI /RESET LINK CELLS ISZ LSTN /INCREMENT LINE POINTERS ISZ THSN TAD BUFEND CLL CIA TAD AXIN SNL CLA /IS THE BUFFER FULL? /------------------------------------------------------------ JMP MOR /NO - KEEP FILLING TAD BELL /YES - RING WARNING BELL JMS I OUTL1 JMP I TE1 /*RETURN TO COMMAND MODE* /CONTINUATION OF HANDLERS FOR A, C, AND I COMMANDS APP1, TAD LSTN /APPEND DCA ARG0 /RESET ARG0 TO END OF TEXT JMP INS CNGE1, JMS I DELT /CHANGE - DELETE LINES AND XNS1, TAD ARG0 /INSERT SNA CLA /ANY ARGUMENTS? INS, ISZ ARG0 /NO - INSERT AT BEGINNING OF TEXT TAD ARG0 JMS I FIN1 /FIND THE POINTER DCA THIS ISZ TABIND /SET TAB INDICATOR CDF 10 TAD I THIS /GET LINK TO BUFFER CDF 0 DCA XSAV CMA TAD ARG0 DCA THSN /SET LINE POINTER AONE, TAD BUFR /BEGIN LINE DCA AXIN DCA XCTIN MOR, JMS I BUFRDI /GET A CHARACTER JMS I SORTJ /IS IT SPECIAL? (SEE LIST) LIST5-1 INLIST-LIST5 /YES - GO TO ITS HANDLER JMS PACBUF /NO - PACK IT JMP MOR /FETCH ANOTHER /CHARACTER PACKING ROUTINE /CONVERTS CHARACTER IN CHAR TO INTERNAL CODE /AND CALLS PCK1 TO PACK IT INTO BUFFER /ENTER AND EXIT WITH AC CLEAR PACBUF, 0 CLL TAD AXIN /DON'T ADD CHARACTERS TAD K1210 /IF AXIN ABOVE 6570 SZL CLA /IS THERE ROOM FOR THIS ONE? ERROR /NO TAD CHAR /YES TAD M240 SPA /IS IT 200-237? JMP ESCA /YES - ATTACH 77 TAD M77 SMA SZA /IS IT 337 OR LESS? JMP ESCA /NO - ATTACH 77 TAD P40 /YES - IS IT 277? SNA CLA JMP ESCA /YES - ATTACH 77 TR1, TAD CHAR /240-337 EXCEPT 277 AND C77 /MASK OUT LEFT 6 BITS JMS PCK1 /PACK IT JMP I PACBUF /--RETURN-- ESCA, CLA /200-237, 277,340-377 TAD C77 /PACK A 77 JMS PCK1 JMP TR1 /PACK THE CHARACTER /PACK CHARACTERS INTO TEXT BUFFER /ENTER WITH 6-BIT CODE IN AC PCK1, 0 ISZ XCTIN /LEFT HALF OR RIGHT HALF? JMP ROT /LEFT HALF DCA UTRA /RIGHT HALF - STORE CHARACTER TAD UTRA /GET CHARACTER TAD ADD /GET PREVIOUS CHARACTER CDF 10 DCA I AXIN /STORE IN FIELD 1 BUFFER CDF 0 DCA ADD JMP I PCK1 /--RETURN-- ROT, CLL RTL /LEFT HALF RTL RTL /ROTATE 6 LEFT DCA ADD /RETAIN UNTIL NEXT CHARACTER CMA /IS READY DCA XCTIN /RESET L OR R SWITCH JMP I PCK1 /--RETURN-- UTEST=PACBUF /TEMPORARY /CHARACTER UNPACKING ROUTINE /CONVERTS ONE CHARACTER FROM /BUFFER FORMAT TO 8-BIT ASCII /EXIT WITH CHARACTER IN AC UTRA, 0 CLA CMA /INITIALIZE TO -1 DCA UTEST EXTR, ISZ XCT /LEFT HALF OR RIGHT HALF? JMP GET3 /RIGHT HALF CDF 10 /LEFT HALF TAD I AXOUT /GET BUFFER WORD CDF 0 DCA GTEM TAD GTEM RTR /ROTATE 6 RIGHT RTR RTR JMP GET4 /SKIP TO GETA GET3, CLA CMA /RESET L - R SWITCH DCA XCT TAD GTEM GET4, AND C77 /MASK OUT LEFT 6 BITS TAD M77 CLL SNA /WAS IT 77? ISZ UTEST /YES - WAS IT LEFT HALF? JMP GET5 /NO - CONTINUE JMP EXTR /YES - GET OTHER HALF GET5, TAD P37 ISZ UTEST /RESTORE THE CHARACTER CML SNL TAD C100 TAD C240 TAD X203 /IS IT A ^C? SNA JMP UTRA+1 /YES - IGNORE IT TAD M27 /NO - IS IT A ^Z? SNA JMP UTRA+1 /YES - IGNORE IT TAD P232 /NO - RESTORE CHARACTER JMP I UTRA /--RETURN-- /------------------------------------------------------------- /INPUT LIST FOR SPECIAL CHARACTERS IN TEXT MODE INLIST=. SPACES /SPCS CTRLU /^U FULL /FORM FULL /BELL RUB4+1 /LINE FEED RUB1 /RUBOUT EOL /CARRIAGE RETURN /HANDLER FOR FORM FEED OR ^G FULL, TAD IGNORE / TAD MCHIN1 / SNA CLA /IN APPEND MODE? JMP I TE1 /YES*RETURN TO COMMAND MODE* TAD LSTN /NO - IS BUFFER EMPTY? SNA CLA / /-------------------------------------------------------------- JMP I MORI /YES - IGNORE FORM FEED JMP I TE1 /NO*RETURN TO COMMAND MODE* MORI, MOR /SET UP TO READ FROM INPUT DEVICE /USED BY C AND R COMMANDS /CALLED WITH SEQUENCE / JMS I PSETUP / INPUT ROUTINE / CONTINUATION OF HANDLER /EXITS TO CONTINUATION OF HANDLER SETUP, 0 TAD I SETUP /GET READ AREA FROM ARGS DCA BUFRDI TAD I SETUP /LOCATION FOR IGNORED CHARACTERS IAC CLL /V12 DCA IGNORE ISZ SETUP /SETUP PROPER RETURN POINT TAD I SETUP DCA SETUP TAD BUFR TAD K1320 SZL CLA /IS BUFFER FULL? ERROR /YES - DON'T READ JMP I SETUP /--RETURN-- 0 /*** A FREE LOCATION!!!*** /SUPERVISOR FOR DELETION OF TEXT LINES DELP, 0 JMS I CHKARG /CHECK ARGUMENT VALIDITY TAD ARG0 DCA THSN /SET CURRENT LINE # TAD ARG1 /SAVE # DELETED DCA LISTER TAD ARG0 /GET POINTER TO LINE JMS I FIN1 /TO BE DELETED DCA THIS /STORE IT DELP1, CDF 10 TAD I THIS DCA MARK /CORE ADDRESS OF OBJECT LINE TAD I MARK DCA I THIS /CHAIN NEW POINTERS TO DELETE LINE TAD MARK CDF 0 JMS I GRBAGE /PHYSICALLY DELETE THE LINE ISZ ARG1 /ALL SPECIFIED LINES DELETED? JMP DELP1 /NO - CONTINUE TAD LSTN /IF 1,/D..MAKE CURRENT=0 SNA CLA DCA THSN TAD LISTER /BUMP TOTAL DOWN TAD LSTN DCA LSTN JMP I DELP /YES--RETURN-- /HANDLER FOR < EXLAS, CLA CLL CMA RAL /PRINT LAST LINE - AC=7776=-2 /HANDLER FOR > OR LINE FEED EXNEX, TAD THSN /PRINT NEXT LINE IAC SNA /IS IT AN EXISTING LINE? ERROR /NO DCA ARG0 /YES SAVE EFFECTIVE ARGUMENTS CMA DCA ARG1 /HANDLER FOR L COMMAND LIST, TAD LOW /SET KEYBOARD AS OUTPUT DCA OUTDEV ISZ TABIND /SET TAB INDICATOR JMS LISTER /OUTPUT LINE(S) JMP I TE1 /*RETURN TO COMMAND MODE* /LISTING OUTPUT ROUTINE /OUTPUTS LINES INDICATED BY ARG0,ARG1 LISTER, 0 TAD ARG0 SZA CLA /ANY ARGUMENTS? JMP L0 /YES - SET THEM UP TAD LSTCHK /ALLOW 0L? SZA CLA ERROR /NOPE TAD LSTN /NO - SET TO LIST BUFFER CIA DCA ARG1 ISZ ARG0 /SET TO LINE 1 L0, TAD ARG0 CIA TAD LSTN SPA CLA /ARGUMENTS IN RIGHT RANGE? L1, ERROR /NO -( OR JMP I TE1) TAD ARG0 JMS I FIN1 /GET POINTERS DCA THIS /SAVE POINTER CMA CDF 10 TAD I THIS /GET START DCA AXOUT TAD I AXOUT /SAVE POINTER FOR SEARCH DCA XSAV TAD AXOUT /SAVE OBJECT LINE FOR GARBAGE COLLECT DCA MARK CDF 0 CMA DCA XCT TAD ARG0 /SET POINTER DCA THSN ISZ ARG0 /SET FOR NEXT LINE /(HANDLER FOR FORM FEED DURING CHARACTER SEARCH) L2, JMS I UTR1 /UNPACK A CHARACTER JMS I OUT1 /PRINT A CHARACTER JMS I CPTSTI /WAS IT ^O OR ^C FROM KEYBOARD? JMP L3 /NO - CONTINUE TAD C317 /YES - ^O JMS I UPAROI /GENERATE ^O JMP I TE1 /*RETURN TO COMMAND MODE* L3, TAD CHAR /OR (JMP SLOOK) TAD MCR SZA CLA /WAS IT END OF LINE? JMP L2 /NO - KEEP UNPACKING ISZ ARG1 /YES - DONE YET? JMP L0 /NO - GET NEXT LINE JMP I LISTER /YES --RETURN-- CPTSTI, CTRLP /TEST FOR ^O AND ^C C317, 317 /------------------------------------------------------------ /SEARCH ROUTINES /HANDLER FOR CARRIAGE RETURN SRETN, JMS I ENDLNI /TERMINATE THIS LINE TAD MARK /AND NOW GARBAGE COLLECT JMS I GRBAGE ISZ ARG1 /DONE YET? JMP I LIS1 /NO - GET NEXT LINE JMP I TE1 /YES*RETURN TO COMMAND MODE* SLOOK, JMS I SORTJ /SEARCH DONE? LIST3-1 /(CARRIAGE RETURN OR SEARCH CHARACTER) LISTGO-LIST3 /YES - GO TO ITS HANDLER JMS I PACK1 /NO-PACK SEARCHED CHARACTERS JMP I L2I /CONTINUE SEARCH IFNZRO SLOOK&1000 <PGERR,XXX> /HANDLER FOR ^G DURING CHARACTER SEARCH /CHANGE SEARCH CHARACTER SCONT, JMS I KEYBD /FETCH NEW SEARCH CHARACTER DCA LIST3+1 /STORE IT IN LIST JMP I L2I /CONTINUE SEARCH /HANDLER FOR LINE FEED DURING SEARCH SLINE, TAD CCR DCA CHAR JMS I ENDLNI ISZ ARG0 /MOVE POINT ISZ THSN /BUMP CURRENT LINE COUNT ISZ LSTN /ADD A LINE. /HANDLER FOR _ DURING SEARCH SBAR, TAD CCR /CTRL-U JMS I OUT1 /OUTPUT CARRIAGE RETURN TAD BUFR /RESTART PACK BUFFER DCA AXIN DCA XCTIN /------------------------------------------------------------------- SFOUND, JMS I CHI1 /GET A CHARACTER JMS I SORTJ /SPECIAL SEARCH COMMAND? LIST6-1 SRNLST-LIST6 /YES - GO TO HANDLER /HANDLER FOR SEARCH CHARACTER FOUND SGOT, JMS I PACK1 /NO-PACK INSERTS JMP SFOUND /CONTINUE INPUT /TELETYPE CHARACTER FETCH ROUTINE /ENTER WITH AC CLEAR /EXIT WITH CHARACTER IN CHAR AND AC /FORCE CHANNEL 8 /BLANK TAPE & LEADER TRAILER IGNORED CHIN, 0 DCA CHAR /CLEAR CHARACTER JMS I KEYBD AND P177 /MASK PARITY SNA /IGNORE BLANK AND L/T JMP CHIN+1 TAD C200 /RESTORE CHARACTER JMS I OUT1 /ECHO INPUT TAD CHAR JMP I CHIN /--RETURN-- /SEARCH TEXT BUFFER FOR LINE /WHOSE NUMBER IS ONE LESS THAN /THE CONTENTS OF THE AC /EXIT WITH ADDRESS OF LINK CELL IN AC FIND, 0 /LOCATE LINE BUFFER CIA SMA /IS LINE NUMBER TOO SMALL? ERROR /YES DCA TEMP /NO - STORE NEGATIVE OF LINE # TAD TEMP IAC TAD LSTN SPA CLA /IS LINE NUMBER TOO LARGE? ERROR /YES TAD CFRS /NO JMP FIND1 FIND2, CDF 10 TAD I SAVE /CHAIN THROUGH LIST CDF 0 SZA /FAILSAFE FIND1, DCA SAVE ISZ TEMP /DONE YET? JMP FIND2 /NO - KEEP CHAINING TAD SAVE /YES - GET LINE NUMBER JMP I FIND /--RETURN-- CON, 6030 /CONVERSION CONSTANTS 7634 7766 7777 BOX=COUNTP VAL=ARG0 /HANDLER FOR : OR = /PRINTS REQUESTED LINE NUMBER /WHICH IS FOUND IN ARG2 ON ENTRY PRNT, TAD ARG2 DCA VAL /SET NUMBER TO BE PRINTED TAD M4 DCA CNT /SET CHARACTER COUNT TAD ADDR DCA XYZ+2 FLOOZ, DCA BOX CLL TAD VAL /IF VAL IS TOO LARGE, IT LOOKS SMA CLA /LIKE A NEG NO. THE LINK TAD K50 /DETERMINES THE END POINT IN THAT CASE TAD K7430 /7430=SZL; 7500=SMA DCA XYZ+3 JMP .+4 ISZ BOX CLL XYZ, DCA VAL TAD VAL NOP /TAD CON +() SOME DISPLACEMENT SMA /OR, IF VAL TOO BIG,SZL JMP XYZ-2 /KEEP ADDING THE SAME CONSTANT CLA TAD BOX /BOX HAS THE NUMBER COUNT TAD C260 /MAKE ASCII DIGIT JMS I OUTL1 /OUTPUT THE DIGIT ISZ XYZ+2 /ADD IN NEXT CONVERSION CONSTANT LATER ISZ CNT /DONE ALL FOUR? JMP FLOOZ /NO - KEEP CONVERTING JMP I TE1 /YES*RETURN TO COMMAND MODE* C260, 260 ADDR, TAD CON K50, 50 K7430, 7430 /CHARACTER OUTPUT ROUTINE OUT, 0 DCA CHAR /ESC PATCH 25-MAY-77 DS / TAD ECHOSW / SNA CLA /ECHO SUPPRESSED? JMS I .+1 /DS ESCPA /DS JMP I OUT /YES--RETURN-- JMS I SORTJ /NO - IS IT A FORMAT CHARACTER? LIST4-1 /YES - EXIT TO ITS HANDLER OUTLIS-LIST4 ISZ TCNT /NO - COUNT ONE LETTER TAD CHAR OUTX, JMS I OUTDEV /OUTPUT THE CHARACTER JMP I OUT /--RETURN-- /CARRIAGE RETURN HANDLER OUTCRL, TAD CCR JMS I OUTDEV /OUTPUT CARRIAGE RETURN DCA TCNT /CLEAR TAB COUNTER TAD CLF /OUTPUT LINE FEED JMP OUTX /TAB HANDLER - TAB/RUBOUT OUTRT, TAD CTAB JMS I OUTDEV /OUTPUT TAB CIF 10 JMS I POTYPE /TEST TYPE OF OUTPUT SPA CLA /IS IT DIRECTORY DEVICE? JMP I OUT /YES--RETURN-- TAD CRO /NO - OUTPUT RUBOUT JMP OUTX /TAB HANDLER - SPACES OUTTAB, TAD TABIND SNA CLA /OUTPUT TAB/RUBOUT INSTEAD? JMP OUTRT /YES - GO TO OTHER TAB HANDLER TAD TCNT /NO - TAD MTABS /REDUCE SPACE COUNT TO 8 OR LESS SMA JMP .-2 DCA TCNT TAD C240 /OUTPUT SPACES JMS I OUTDEV ISZ TCNT /DONE YET? JMP .-3 /NO - CONTINUE JMP I OUT /YES--RETURN-- /----------------------------------------------------------------------- /I-O SUBROUTINES /HANDLER FOR S COMMAND XCRET, JMS I KEYBD /GET THE SEARCH CHARACTER DCA LIST3+1 /SAVE IT IN LIST TAD SXS2 DCA I L3I /MAKE LISTER JUMP TO SLOOK TAD BUFR DCA AXIN /BUILD NEW TEXT IMAGE HERE DCA XCTIN TAD CHI1 /READ POINT IS CHIN IAC DCA IGNORE JMP I LIS1 /LIST OF SPECIAL CHARACTERS FOR G COMMAND TAGLIST=. GTAG2 /SPACE GTAG2 // GTAG2 /ESC GTAG2 /TAB GTAG2 /CARRIAGE RETURN /----------------------------------------------------------------------- /LOW SPEED OUTPUT ROUTINE /ENTER WITH CHARACTER IN AC OUTL, 0 TLS TSF JMP .-1 CLA JMP I OUTL /--RETURN-- /LOW SPEED INPUT ROUTINE /CHECKS FOR ^C /EXIT WITH CHARACTER IN AC I33, 0 KSF JMP .-1 JMS CTCK KRB AND P177 TAD C200 JMP I I33 /NO--RETURN-- /SET UP APPEND, CHANGE, INSERT TO WORK /EACH READS KEYBOARD, NOT DEVICE CNGEL, CNGE1-XNS1 XNSL, XNS1-APP1 /HANDLER FOR C COMMAND CNGE, TAD CNGEL /HANDLER FOR I COMMAND XNS, TAD XNSL /HANDLER FOR A COMMAND APP, TAD APPL DCA DEST /RETURN POINT ISZ ECHOSW JMS I PSETUP CHIN /KEYBOARD INPUT DEST, APP1 /SPECIAL OUTPUT LIST OUTLIS=. ESCOUT /233 - ESC - V12 OUTTAB /211 - TAB OUTCRL /215 - CARRIAGE RETURN OUTX+1 /212 - LINE FEED OUTX+1 /214 - FORM FEED OUTX+1 /377 - RUBOUT CTRLN /216 - CNTRL N /CHECK TTY FOR ^C OR ^O INPUT /EXIT TO MONITOR ON ^C /SKIP ON ^O CTRLP, 0 KSF JMP I CTRLP /--RETURN-- JMS CTCK TAD M14 /NO - IS IT ^O? SZA CLA JMP I CTRLP /NO--RETURN-- ISZ CTRLP /YES KCC JMP I CTRLP /--RETURN-- M14, -14 CTCK, 0 TAD C200 KRS TAD X203 SNA JMP I MONITOR JMP I CTCK /HANDLER FOR P COMMAND PUNCH, ISZ ECHOSW TAD BUFWTI /SETUP TO WRITE INTO OUTPUT BUFFER DCA OUTDEV PUNC, JMS I LIS /WRITE THE EDITOR BUFFER TAD C214 /OUTPUT FORM FEED JMS I OUTDEV /HANDLER FOR T COMMAND PUNCT, CDF 10 TAD I K7600 CDF 0 SNA CLA /IS THERE AN OUTPUT DEVICE? JMP I TE1 /NO*RETURN TO COMMAND MODE* TAD BUFWTI /YES - SET UP TO WRITE INTO DCA OUTDEV /OUTPUT BUFFER TAD M40 DCA CTRLP /SET TRAILER COUNTER CIF 10 JMS I POTYPE / SMA CLA /DIRECTORY DEVICE FOR OUTPUT? JMS I OUTDEV /NO - OUTPUT LEADER TRAILER ISZ CTRLP /DONE YET? JMP .-5 /NO - CONTINUE TSF /YES - RESET FLAG JMP .-1 JMP I TE1 /*RETURN TO COMMAND MODE* /HANDLER FOR R COMMAND TELE=. TELEN, TSF JMP .-1 DCA ECHOSW /INHIBIT ECHO JMS I PSETUP /SETUP TO READ FROM BUFRD /INPUT DEVICE APPL, APP1 /APPEND TEXT TO BUFFER /HANDLER FOR Y COMMAND YANK, TAD COM1 /YANK KILLS 'P' PART OF N JMP COMBOA /HANDLER FOR N COMMAND COMBO, TAD JMPCH /YANK WIPES COM1-1 COMBOA, DCA I CCON+1 TAD ARG0 SNA /ANY ARGUMENTS IAC /NO - ASSUME 1 CIA DCA COUNTP /SET NUMBER OF PAGES TO YANK TAD CCON /(JMP I AXCOMB) DCA I TE1 /SET TE1 TO ALLOW LOOPING COMB, TAD CCON+1 /THROUGH PUNCH, KILL, READ DCA AXCOMB /CYCLE DCA ARG0 /CLEAR ARGUMENTS DCA ARG2 DCA LSTCHK /DON'T INHIBIT LISTER! DCA TABIND /CLEAR IN CASE OF MULTIPLE N / JMP PUNC /OUTPUT BUFFER JMP PUNCH /12D FIX COM1, JMP I KILL1 /KILL BUFFER JMP TELEN /READ NEW BUFFER FULL ISZ COUNTP /DONE YET? JMP COMB /NO - CONTINUE CLA CLL CML RAL /YES-AC=1 - RESET CURRENT LINE NUMBER DCA THSN /.=1 ON RETURN COM5, TAD CZ /RESTORE TE1 DCA I TE1 JMP I TE1 /*RETURN TO COMMAND MODE* /IT IS VITAL TO KEEP DUMB1 AND COM5 ON THE SAME PAGE DUMB1, JERK1 PSETUP, SETUP /V3 /----------------------------------------------------------------------- LIST1=. 212 /LINE FEED 240 /SPACE 253 /PLUS (+) 254 /COMMA (,) 255 /MINUS (-) 256 /PERIOD (.) 257 /SLASH (/) 274 /< 275 /= 276 /> 000 /(DUMMY ENTRY) 375 /ALTMODE ASR-33 376 /ALTMODE ASR-35 233 /ESCAPE KEY 242 /DOUBLE QUOTE (") 244 /DOLLAR SIGN ($) 377 /RUBOUT 272 /COLON (:) LIST1A, 215 /CARRIAGE RETURN 225 /^U 203 /^C /HANDLER FOR G COMMAND GETTAG, ISZ THSN TAD ARG0 SNA /ANY ARGUMENTS TAD THSN /NO - BEGIN WITH NEXT LINE (.+1) DCA ARG0 /YES - SET ARGUMENTS SKP GTAG2, ISZ ARG0 IAC TAD ARG0 JMS I FIN1 /GET NEXT LINE DCA AXOUT CMA DCA XCT JMS I UTR1 /UNPACK FIRST CHARACTER JMS I SORTJ /DOES IT BEGIN A TAG? LIST7-1 /NO - TAGLIST EXITS TAGLIST-LIST7 /TO GTAG2 JMP I LIS1 /YES - PRINT LINE MP1=ARG1 MP2=ARG0 MP3=ARG2 /HANDLER FOR M COMMAND /ENTER WITH FIRST LINE TO MOVE IN MOV1 /LAST LINE TO MOVE IN MOV2 /MOV2 .GT. MOV1 /DESTINATION LINE IN ARG2 MOVEM, TAD MOV1 CIA /ARG2 MAY NOT BE BETWEEN TAD ARG2 /MOV1 AND MOV2 SPA CLA /IS MOV1 .GT. ARG2? /----------------------------------------------------------------------- JMP .+6 /YES - O.K. TAD MOV2 CMA TAD ARG2 SPA SNA CLA /IS MOV2 .LT. ARG2? ERROR /NO-FAULTY LOGIC IN COMMAND TAD MOV1 /YES JMS I FIN1 DCA MP1 /STORE FIRST LINE POINTER IAC TAD MOV2 JMS I FIN1 DCA MP2 /STORE LAST LINE POINTER TAD ARG2 JMS I FIN1 DCA MP3 /STORE DESTINATION LINE POINTER CDF 10 /ALL FOUND TAD I MP1 /SWAP POINTERS- DCA TEMP /RESET THE LINK COORDS TAD I MP2 DCA I MP1 TAD I MP3 DCA I MP2 TAD TEMP DCA I MP3 CDF 0 JMP I TE1 /*RETURN TO COMMAND MODE* SRNLST=. SBAR /BACK ARROW (_) L2 /FORM FEED SCONT /BELL SLINE /LINE FEED RUB1 /RUB OUT LISTGO=. SRETN /CARRIAGE RETURN SGOT /SEARCH CHARACTER FOUND /HANDLER FOR RUBOUT IN TEXT OR SEARCH RUB1, TAD AXIN CIA TAD BUFR TAD XCTIN SZA CLA /IS THERE ANYTHING ON THIS LINE? TAD ECHOSW /OR ECHO INHIBITED? SNA CLA JMP I IGNORE /YES-IGNORE RUBOUT /SCOPE PATCH 25-MAY-77 DS / TAD SPLAT /NO- / JMS I OUT1 /OUTPUT BACKSLASH JMS I .+1 /DS RUBPA /DS /DELETE CHAR FROM BUFFER TAD AXIN /GET LAST WORD OF INPUT DCA MOV1 CDF 10 DCA I BUFR /PREVENTS INFINITE RUBOUTS TAD I MOV1 ISZ XCTIN /WHICH HALF OF WORD? JMP RUB2 AND C77 TAD M77 SZA CLA /TEST EXTENSION JMP RUB4 RUB3, CMA DCA XCTIN CMA TAD AXIN DCA AXIN TAD I MOV1 AND P7700 RUB4, DCA ADD CDF 0 JMP I IGNORE /CHIN+1 RUB2, AND P7700 TAD C100 SZA CLA JMP RUB3 DCA I MOV1 JMP RUB3+1 /HANDLER FOR SPACE IN TEXT MODE SPACES, TAD ECHOSW CLA /OR SZA CLA IF B OPTION JMP I SPCNO /PACK IT - (MOR+4) CMA /SET COUNTER SP2, DCA CNT JMS I BUFRDI /GET LAST CHARACTER TAD M240 SNA CLA /WAS IT SPACE? JMP SP2 /YES-IGNORE EXTRA SPACES /----------------------------------------------------------------------- TAD CHAR /NO DCA SAVE /SAVE NON-SPACE ISZ CNT /WAS THERE MORE THAN 1 SPACE? TAD M27 /YES- STORE TAB TAD C240 /NO-STORE SPACES DCA CHAR JMS I PACK1 TAD SAVE JMP I SPCGO /SORT - (MOR+1) /HANDLER FOR $ (PART OF M COMMAND) MOVE, TAD ARG0 /ARG2 .GE. ARG0 CIA TAD ARG2 SPA CLA /ARE LINES TO BE MOVED LEGITIMATE ERROR /NO TAD ARG0 /YES- DCA MOV1 /SET POINTER TO FIRST LINE TAD ARG2 DCA MOV2 /SET POINTER TO LAST LINE JMP I ONUM /CONTINUE COMMAND INPUT OPS1, EXNEX /LINE FEED GEXP /SPACE GEXP /PLUS FIRS /COMMA GMIN /MINUS PERI /POINT(.) SLAS /SLASH EXLAS /BACKUP(<) PRNT /= EXNEX /ALT(>) DBCV2 /DUMMY AMODE /ALTMODE ASR-33 AMODE /ALTMODE ASR-35 AMODE /ESCAPE KEY DBLQUO /" MOVE /DOLLAR SIGN ELIM /COMMAND RUBOUT PRNT /: GTOP-2 /CARRIAGE RETURN START /^U MONIT /^C (MONITOR RESTART) OPS1A, RETRN /RETURN /----------------------------------------------------------------------- OLDTE1, START /^U MONIT /^C /HANDLER FOR E COMMAND ENDFIL, TAD EKILLL /IS E COMMAND ALLOWED? SZA CLA ERROR /NO-NO INPUT SPECIFIED CLA CMA /YES-RESET ARGUMENTS DCA ARG0 TAD JMPTE1 /SKIP LISTER IF EMPTY BUFFER DCA I L1I TAD FLCLSI /CLOSE FILE SETUP DCA ELIM /CLOSES FILE ON READ FAILURE JMP I COMBOP COMBOP, COMBO FLCLSI, JMP I CLFLI AONEI, AONE /HANDLER FOR ^U IN TEXT MODE CTRLU, JMS CTRLU1 /GENERATE A ^U JMP I AONEI /AND CONTINUE /PRINT ^U CTRLU1, 0 TAD C325 JMS I UPAROI /PRINT ^U TAD CCR /AND A CR/LF JMS I OUT1 JMP I CTRLU1 /--RETURN-- C325, 325 /CHECK VALIDITY OF ARGUMENTS /FOR D COMMAND CHKARX, 0 TAD ARG0 CIA IAC TAD ARG1 TAD LSTN SPA CLA /DO LINES EXIST? ERROR /NO JMP I CHKARX /YES--RETURN-- /HANDLER FOR . PERI, TAD THSN SKP /HANDLER FOR / SLAS, TAD LSTN DCA TEMP /SAVE LINE NUMBER DCA CHAR ISZ LSTCHK /GOT EITHE . OR / IN ARGS JMP I .+1 /FETCH REST OF ARGUMENT GLOM /END OF A NEW TEXT LINE /PACK CARRIAGE RETURN INTO BUFFER /SET LINK CELLS AROUND NEW LINE /ENTER WITH: / CHAR CONTAINS CARRIAGE RETURN / THIS CONTAINS ADDRESS OF LINK / CELL OF PRECEDING TEXT LINE / XSAV CONTAINS ADDRESS OF LINK / CELL OF FOLLOWING TEXT LINE / BUFR CONTAINS ADDRESS OF LINK / CELL OF NEW TEXT LINE ENDLN, 0 JMS I PACK1 /PACK CARRIAGE RETURN CDF 10 TAD ADD SZA DCA I AXIN TAD BUFR /RESET LINK CELL DCA I THIS /OF PREVIOUS LINE TAD XSAV DCA I BUFR /RESET LINK CELL OF NEW LINE TAD BUFR DCA THIS /RESET POINTER TO LINK CELL ISZ AXIN TAD AXIN DCA BUFR /RESET FOR NEXT LINE DCA XCTIN /CR CHARACTER SWITCH CDF 0 JMP I ENDLN /--RETURN-- /HANDLER FOR ^C /AND OTHER EXITS TO MONITOR MONIT, JMS FXSTWD /SET JOB STATUS TO SAVE CORE TSF /MAKE SURE TTY FLAG IS SET JMP .-1 JMP I K7600 /****EXIT TO MONITOR**** /CLEAR BIT 11 OF JOB STATUS WORD FXSTWD, 0 CIF 10 JMS I JSWSET /IF NONZERO TEXT,SAVE BUFFER JMP I FXSTWD /--RETURN-- SPCP1A, SPACES+1 BUFRD1, BUFRD+1 /RESET POINTERS AND SAVE BUFFERS RESET3, JMS FXSTWD CIFTEN, CIF 10 /CLEAR BIT 11 OF JSW JMS I P7700 /CALL USER SERVICE ROUTINES 10 /*LOCK USR IN CORE* TAD CIFTEN /RESET POINTERS DCA I BUFRD1 DCA EKILLL TAD OLDTE1 DCA TE1 TAD CZ DCA I TE1 TAD K7600 DCA ELIM TAD K7600 DCA I SPCP1A TAD LOW DCA OUTDEV ISZ ECHOSW TAD JMPCH DCA I CCON+1 ISZ FXSTWD /WASTE TIME FOR TTY FLAG JMP .-3 CIF CDF 10 JMP I .+1 /GO CALL COMMAND DECODER START1 JSWSET, INSET /----------------------------------------------------------------------- /----------------------------------------------------------------------- /READ,WRITE,AND RELATED ROUTINES OURECS=4 /SIZE OF OUTPUT BUFFER *2000 /HANDLER FOR Q COMMAND Q, JMS I FXSWDI /CLEAR BIT 11 OF JSW CDF 10 TAD I K7600 CDF 0 SNA CLA /WAS AN OUTPUT DEVICE SPECIFIED? ERROR /NO- FLCLOS, TAD LSTN SNA CLA /IS BUFFER EMPTY? JMP FLCLS1 /YES-CLOSE FILE TAD FLCLI /NO- DCA TE1 /SET UP RETURN FROM P COMMAND JMP I .+1 EPATCH /V12D PATCH / PUNCH /WRITE CURRENT BUFFER /CLOSE FILE ON E OR Q COMMAND FLCLS1, JMS I PTCH1 /GO TO PATCH TO HANDLE FILE FULL CLA CMA /TELL SYSTEM I/O MONITOR IS IN CORE CDF 10 DCA I P7700 CDF 0 JMP I K7600 /****EXIT TO MONITOR*** / PTCH1, PATCH1 /INPUT ROUTINE FROM DEVICE /VIA INPUT DEVICE HANDLER BUFRD, 0 CIF 10 JMS I ICHARI /FETCH A CHARACTER JMP ERRD /ERROR IN READING FROM BUFFER DCA CHAR /INTERFACE LOCATION TAD CHAR AND P177 SNA /IS IT L/T? JMP BUFRD+1 /YES-GET NEXT CHARACTER TAD C200 /NO RESTORE CHARACTER JMP I BUFRD /--RETURN-- ERRD, SPA CLA /FATAL OR EOF? JMP I SERR0I /FATAL-OUTPUT ERROR MESSAGE TAD ERSW /DISABLE FURTHER READS DCA BUFRD+1 TAD I COMM5 /IF THIS IS NEGATIVE, DO ONE SMA CLA /MORE SEARCH (POSSIBLY) IN THE CASE JMP BUFRD+1 /THAT NO FINAL FORM FEED EXISTS CLA IAC /SET CURRENT LINE TO 1 AND SEARCH DCA THSN /ONCE MORE JMP I .+1 SFIND2 ICHARI, ICHAR /CHARACTER ROUTINES FLCLI, FLCLS1 /OUTPUT ROUTINE TO DEVICE /VIA OUTPUT DEVICE HANDLER BUFWT, 0 CIF 10 JMS I OCHARI /OUTPUT A CHARACTER JMP ERWT /OUTPUT FAILED BUFRTN, TAD BUFWTI /RESET OUTPUT DEVICE HANDLER POINTER DCA OUTDEV JMP I BUFWT /--RETURN-- ERWT, SPA CLA /FATAL, OR NO MORE ROOM? JMP I SERR1I /FATAL-OUTPUT ERROR MESSAGE JMS I FXSWDI /FIX JOB STATUS WORD-NO MORE ROOM TAD I TE1 /STORE POINTERS DCA PTE1 TAD ELIM DCA PELIM TAD TE1 DCA PPTE1 CDF 10 ISZ I PANICI /SET PANIC DUMP TAD MORECS /PREPARE TO CLOSE PRESENT OUT FILE TAD I OCNTI /THIS GIVES OPTIMUM CLOSE LENGTH SPA JMP PATCH2 DCA I OCNTI TAD I OREC /WRITE A ^Z DCA CLSREC /DIRECTLY TO THE DEVICE TAD I OHNDL /HANDLER ENTRY POINT DCA TEMPO CDF 0 JMS I TEMPO /CALL OUTPUT DEVICE HANDLER 4110 /THE BUFFER IS A PAGE OF THE EDITOR 7000 /WITH A 232 IN THE FIRST LOCATION CLSREC, 0 /RECORD NUMBER HERE JMP I SERR1I /**WRITE FAILURE** 1* CDF CIF 10 JMS I OCLSI /CLOSE THE FILE IN PANIC MODE JMP I SERR2I /**FILE CLOSE FAILED**2* CIF 10 JMS I C200 /CALL USER SERVICE ROUTINES 11 /*DISMISS USR FROM CORE* PATCH2, CLA CDF 0 TAD POINT /PRINT OUT"FULL" AND RETURN DCA AXIN TAD I AXIN /FETCH CHARACTER SNA /DONE YET? JMP I RST3I /YES-RESET & CALL COMMAND DECODER JMS I OUTL1 /NO - OUTPUT CHARACTER JMP .-4 /GET NEXT CHARACTER FXSWDI, FXSTWD OCNTI, OUCCNT PANICI, PANIC OCHARI, OCHAR MORECS, -OURECS+1 /THIS ALLOWS US TO 'MANUALLY' WRITE /A FORM FEED AND A ^Z. POINT, FULLST-1 OREC, OUREC OHNDL, OUHNDL /RESET POINTERS STORED PREVIOUSLY BUFRET, TAD PPTE1 DCA TE1 TAD PTE1 DCA I TE1 TAD PELIM DCA ELIM JMP BUFRTN PPTE1, 0 PELIM, 0 PTE1, 0 OCLSI, OCLOSE /V3 FILE CLOSE ROUTINE /----------------------------------------------------------------------- /ERROR MESSAGE- FULL - FULLST, 306 /F 325 /U 314 /L 314 /L 215 /CARRIAGE RETURN 212 /LINE FEED 0 /DELIMITER SRCBUF, ZBLOCK 24 /SEARCH BUFFER /SPECIAL CHARACTER LIST FOR STRING SEARCH SLST=. 247 /" 242 /' 377 /RUBOUT 203 /^C 225 /^U /----------------------------------------------------------------------- NEXBUF, DUMB1&177+5600 /JMP I DUMB1 /DISPATCH LIST FOR STRING SEARCH OSLST, QUO1 /" QUO2 /' FORGET /RUBOUT MONIT /^C RLEAS /^U IN STRING SEARCH /GENERATE ^ FOLLOWED BY THE CHARACTER /WHICH IS IN AC ON ENTRY UPAROW, 0 DCA TEMPO /SAVE CHARACTER TSF JMP .-1 TAD C336 JMS I OUTL1 /PRINT ^ TAD TEMPO JMS I OUTL1 /PRINT CHARACTER JMP I UPAROW /--RETURN-- C336, 336 /HANDLER FOR ^U DURING STRING SEARCH RLEAS, JMS I (CTRLU1 JMP I (START /^U GETS US BACK TO # /HANDLER FOR ALTMODE AMODE, DCA STRIND /NEED SETUP JMS I STRFIN /SEARCH FOR STRING ERROR TAD THSN /RESULT IS LINE NUMBER JMP I .+1 /LINK TO COMMAND STRUCTURE GTOP+1 /HANDLER FOR J COMMAND JERK, DCA STRIND /SETUP FOR SEARCH JERK1, JMS I STRFIN /SEARCH FOR STRING JMP GMOR /GET NEXT BUFFER TSF JMP .-1 /JUST TO BE SURE TAD CZ /RESTORE MONITOR EXIT DCA I TE1 JMP I TE1 /*POSSIBLE RETURN TO COMMAND MODE* /GET NEXT BUFFER FOR S SEARCH GMOR, TAD I CNTRI SNA CLA /IS BUFFER EMPTY? ERROR /NO ISZ STRIND /YES-BYPASS SETUP TAD NEXBUF DCA I COMM5 /SET UP READ OF ONE BUFFER IAC DCA ARG0 TAD EKILLL SZA CLA /IS THERE AN OUTPUT DEVICE? JMP I .+2 /NO JMP I .+2 /YES YANK /NO OUTPUT COMBO /THERE IS OUTPUT /HANDLER FOR F COMMAND BARROW, ISZ STRIND /CONTINUES LOOKING FOR EXISTING STRING ISZ THSN /INCREMENT FOR NEXT LINE JMP JERK1 CNTRI, CNTR /HANDLER FOR " DBLQUO, ISZ THSN /USES STRING NOW IN BUFFER ISZ STRIND /NO SETUP REQUIRED JMP AMODE+1 /HANDLER FOR B COMMAND CORSPC, CLL TAD BUFR TAD K1320 SZL CLA /IS ANY CORE LEFT? JMP ZROCOR /NO TAD BUFR /YES-SET UP NUMBER OF LOCATIONS CIA /IN ARG2 TAD BUFEND TAD K360 ZROCOR, DCA ARG2 JMP I .+1 PRNT K360, 360 /HANDLER FOR K COMMAND KILL, TAD ARG0 /IN CASE HE TYPED N,MK SZA CLA /INSTEAD OF N,ML. SAVE HIM!! ERROR TAD END /RESET BUFFER POINTERS DCA BUFR /TO REFLECT EMPTY BUFFER DCA LSTN DCA THSN CDF 10 /ZERO FIELD 1 POINTER DCA I CFRS CDF 0 JMP I TE1 /*RETURN TO COMMAND MODE* /ROUTINE TO REASSIGN INPUT HANDLER /AFTER A PANIC DUMP AND RESTART PIASGN, CDF CIF 10 TAD I PINEOF SZA CLA /IS THERE A HANDLER TO RESTORE? JMP I PIRETN /NO - BACK TO FIELD 1 TAD I IHPAGE /YES - DCA PIHND /GET HANDLER PAGE TAD I IDVNO CDF 0 /I/O MONITOR IS IN CORE AT THIS POINT JMS I C200 /CALL USER SERVICE ROUTINES 1 /*FETCH HANDLER* PIHND, 0 JMP I SERR4I /**DEVICE HANDLER ERROR**+** TAD PIHND CDF CIF 10 DCA I PIHNDL /PUT NEW HANDLER ADDRESS BACK JMP I PIRETN /AND RETURN PIRETN, PANOPN /GO OPEN OUTPUT FILES PIHNDL, INHNDL IHPAGE, I1 /I1 CONTAINS "INDEVH+1" IDVNO, INDEV PINEOF, INEOF /HANDLER FOR # COMMAND VERSN, TAD ("V /V3 JMS I OUTL1 /V3 PRINT V TAD (VERSION&70%10+260 /V3 JMS I OUTL1 /V3 PRINT VERSION # TAD (VERSION&7+260 JMS I OUTL1 /V3C PRINT 2ND NUMBER OF VERSION # TAD (PATCH /V3 JMS I OUTL1 /V3 PRINT PATCH LEVEL JMP I TE1 /V3 RESTART *2400 /----------------------------------------------------------------------- /----------------------------------------------------------------------- /STRING SEARCH ROUTINE /CALLED BY $(ALTMODE) AND J COMMAND HANDLERS SFIND1, 0 ISZ ECHOSW TAD STRIND /IS SETUP NECESSARY SZA CLA JMP SFIND2 /NO. TAD MSCNT DCA BUFCNT /SET COUNTER TAD SBUF DCA AXIN /BEGIN SEARCH BUFFER TAD ATSIGN JMS I OUTL1 /OUTPUT $ ISZ TABIND RLOOP, JMS I CHI1 /FETCH CHARACTER FROM TTY JMS I SORTJ /IS IT SPECIAL FOR SEARCH STRING? SLST-1 /YES-HANDLE IT OSLST-SLST ISZ BUFCNT /NO-SEARCH BUFFER FULL? JMP STORE /NO-STORE THIS CHARACTER CLA CMA DCA BUFCNT /YES-DON'T ALLOW ANY MORE JMP RLOOP-1 /BUT KEEP ECHOING HIS STORE, TAD CHAR /STORE CHARACTER IN SEARCH BUFFER DCA I AXIN JMP RLOOP /HANDLER FOR " QUO2, TAD THSN /START AT .+1 /HANDLER FOR ' QUO1, IAC /START AT .=1 DCA THSN TAD AXIN CIA /MAKE UP COUNT OF NO. CHARS NOW IN TAD SBUF /SEARCH BUFFER DCA CNTR DCA I AXIN /END STRING WITH A 0 SFIND2, TAD CNTR SNA CLA /IS BUFFER EMPTY? JMP ER1 /YES-PREPARE TO EXIT JMS NUCHAR /NO GET FIRST STRING CHARACTER TAD THSN JMS I FIN1 /GET APPROPRIATE POINTER DCA THIS /THE TRICK IS TO GET THE NEXT DCA CHFND CDF 10 /POINTER SO THAT WE NEVER HAVE TO GO TAD I THIS /BACK TO THE FIND ROUTINE COMBAK, DCA TMP2 TAD I TMP2 DCA NEXTPT CDF 0 TAD THSN CIA TAD LSTN SPA CLA /LAST LINE? JMP ER1 /YES-FINISHED WITH BUFFER TAD TMP2 /NO DCA AXOUT /SET TO UNPACK CHARACTERS CMA DCA XCT UPK1, JMS I UTR1 /UNPACK A CHARACTER DCA TMP2 TAD TMP2 TAD MCR SZA CLA /END OF LINE? JMP NOCR /NO ISZ THSN /YES-INCREMENT LINE COUNTER JMS NUCHAR /FORGET PREVIOUS MATCHES ON NEW LINE DCA CHFND CDF 10 TAD NEXTPT /AND GET NEXT LINE JMP COMBAK NOCR, TAD TMP2 /CHARACTER OTHER THAN CARRIAGE RETURN TAD TMP1 /GET A CHARACTER FROM SEARCH BUFFER SZA CLA /DO THEY MATCH JMP UPK /NO ISZ CHFND /YES-BUMP A RANDOM POINTER CLA CMA DCA FMATCH /SIGNIFY FIRST MATCH JMS NUCHA /GET NEXT SEARCH CHARACTERR JMP UPK1 /AND ANOTHER BUFFER CHARACTER UPK, ISZ FMATCH /WAS THIS FIRST MATCH? JMP NOTSO /NO-NO PROBLEM TAD XCT /YES-DON'T LET THE POINTERS BE SPA CLA /BE CHANGED JMP WREK CMA TAD AXOUT DCA AXOUT CMA WREK, DCA XCT NOTSO, JMS NUCHAR /GET FIRST CHARACTER OF SEARCH STRING DCA CHFND JMP UPK1 /TRY AGAIN STFIN, TAD CHFND /END OF STRING-DO COUNTS MATCH? TAD CNTR SNA CLA JMP GOOD /YES-SEARCH SUCCESSFUL ER1, TAD LSTN /IF BUFFER EMPTY, SET .=0 SZA CLA IAC DCA THSN SKP /CAUSE ERROR RETURN (?) GOOD, ISZ SFIND1 /INCREMENT RETURN JMP I SFIND1 /--RETURN-- /GET NEXT SEARCH CHARACTER NUCHA, 0 TAD .-1 /SET TO RETURN FROM NUCHAR DCA NUCHAR JMP NEXX /GET FIRST CHARACTER OF SEARCH STRING NUCHAR, 0 TAD SBUF DCA AXIN NEXX, TAD I AXIN SNA /END OF STRING? JMP STFIN /YES CIA /NO - NEGATE SEARCH CHARACTER DCA TMP1 /AND STORE IT JMP I NUCHAR /--RETURN-- ENDA=SRCBUF-1 ATSIGN, 244 TMP1, 0 TMP2, 0 CNTR, 0 FMATCH, 0 BUFCNT, 0 NEXTPT, 0 CHFND, 1 /MUST BE NONZERO INITIALLY SBUF, ENDA MSCNT, -24 /HANDLER FOR RUBOUT IN SEARCH STRING FORGET, TAD CCR JMS I OUT1 /OUTPUT CARRIAGE RETURN JMP SFIND1+1 *2600 /----------------------------------------------------------------------- /----------------------------------------------------------------------- THISX=COUNTP THISX2=DTEM RELCNT=LPT /GARBAGE COLLECTION ROUTINE /ENTER WITH NUMBER OF LINE TO BE DELETED /IN AC GARBAG, 0 DCA LINPTR /SAVE OBJECT LINE ADDRESS TAD LINPTR DCA AXCOMB /SCAN LINE LOOKING FOR 7715 OR 1500 (CR) IAC /CNT HOLDS DCA CNT /TOTAL # LOCS IN THIS LINE CDF 10 COLECT, ISZ CNT TAD I AXCOMB /GET A WORD TAD K63 SNA /IS IT 7715? JMP FINONE /YES-END OF LINE TAD K6215 SZA CLA /NO-IS IT 1500? JMP COLECT /NO-TRY NEXT WORD FINONE, TAD CNT /YES MINUS CNT GIVES AMOUNT CIA /TO REDUCE CERTAIN POINTERS DCA RELCNT CDF 0 IAC /GO THROUGH LIST OF POINTERS JMS I FIN1 /& OFFSET POINTERS WHICH WILL BE MOVED CDF 10 /MOVED ALONG WITH TEXT GBG2, DCA THISX /SAVE POINTER TAD I THISX /GET ADDRESS OF THIS LINE SNA /DONE WITH STRING? JMP GBGEND /YES JMS CGEPTR /DECREASE POINTER IF NECESSARY DCA I THISX /STORE NEW POINTER TAD THISX2 JMP GBG2 /DO NEXT LINE GBGEND, CDF 0 /ALL POINTERS ARE REDUCED. NOW, CLL CML TAD BUFR /PHYSICALLY MOVE CORE TO CIA /CORRESPOND WITH POINTERS TAD AXCOMB /AXCOMB POINTS TO FIRST LOC. TO GO SMA SNL /POINTERS O.K.? ERROR /NO DCA XCT /YES-SET UP OTHER POINTERS CDF 10 CMA TAD LINPTR DCA AXOUT TAD I AXCOMB /MOVE TEXT DCA I AXOUT ISZ XCT /ALL TEXT MOVED? JMP .-3 /NO-CONTINUE MOVING CDF 0 /YES TAD AXOUT DCA BUFR /RESET TOP OF BUFFER TAD BUFR /REDUCE AXIN FOR CHARACTER SEARCH DCA AXIN TAD THIS /NOW DECREASE THIS IF IT IS NECESSARY JMS CGEPTR DCA THIS JMP I GARBAG /--RETURN-- LINPTR, 0 K63, 63 CGEPTR, 0 /THIS ROUTINE DETERMINES IF THE DCA THISX2 /OF THE AC MUST BE DECREASED BY RELCNT. CLL /IF THISX2 IS GREATER THAN LINPTR TAD THISX2 /DECREASE THISX2 BY RELCNT. CIA TAD LINPTR /THIS EFFECTIVELY DECREASE ALL POINTERS SNL CLA /WHICH HAVE TO BE RELOCATED TAD RELCNT TAD THISX2 JMP I CGEPTR /HANDLER FOR V COMMAND VIEW, TAD (LPT /SET UP LISTER TO EXIT TO LPT DCA OUTDEV ISZ TABIND JMS I LIS /LIST BUFFER TAD C214 /AND OUTPUT A FORM FEED JMS I OUTDEV JMP I TE1 /*RETURN TO COMMAND MODE* /LINE PRINTER OUTPUT ROUTINE /ENTER WITH CHARACTER IN AC /EXIT WITH AC CLEAR LPT, 0 6666 /LLS 6661 /LSF JMP .-1 CLA JMP I LPT /--RETURN-- /HANDLER FOR , FIRS, TAD ARG2 JMP I ONUM K6215, 6215 /THE FOLLOWING GIVES ERROR MESSAGES FOR I/O RELATED ERRORS /EACH IS A FATAL ERROR AND WILL ALWAYS EXIT THROUGH /7600, SAVING THE TEXT BUFFER. /N IS THE ERROR IDENTIFICATION CODE /N=0=> FAILED IN READING DEVICE /N=1=> FATAL WRITE ERROR /N=2=> FILE CLOSE ERROR /N=3=> FILE OPEN ERROR /N=4=> DEVICE HANDLER ERROR SERR4, IAC SERR3, IAC SERR2, IAC SERR1, IAC SERR0, DCA TEMPO TLS TSF JMP .-1 TAD C215 JMS I OUTL1 /OUTPUT CARRIAGE RETURN TAD CLF JMS I OUTL1 /OUTPUT LINE FEED TAD C277 JMS I OUTL1 /OUTPUT? TAD TEMPO TAD P260 JMS I OUTL1 /SEND ERROR CODE TAD C303 JMS I UPAROI /SEND ^C JMP I MONITO /****EXIT TO MONITOR**** P260, 260 C303, 303 DELE, JMS I DELT /DELETE THE LINES TSF JMP .-1 JMP I TE1 CTRLN, TAD C316 JMS I UPAROI /ECHO ^N JMP I .+1 OUTX+1 C316, 316 / PATCH1, 0 CIF 10 JMS I OCLSE /CLOSE FILE SKP JMP I PATCH1 /FILE CLOSED OK -RETURN SPA CLA JMP SERR2 /**FILE CLOSE FAILED**2* JMP I NOROOM /RAN OUT OF SPACE WHILE CLOSING / NOROOM, ERWT+2 OCLSE, OCLOSE / /12D PATCH EPATCH, DCA TABIND JMP I .+1 PUNCH / /*********************************************************************** /THE CODE AT 3000 IS ONCE ONLY CODE. IT TAKES THE FIELD 1 /PART OF THE CODE WHICH IS INITIALLY IN FIELD 0 AND MOVES /IT UP TO THE PROPER LOCATIONS IN FIELD 1. *3000 /----------------------------------------------------------------------- /----------------------------------------------------------------------- INIT, TAD (3177 /COLD LOAD STARTS AT 3200 DCA AXIN TAD (6577 /CODE SHOULD BE IN 6600 OF FIELD 1 DCA AXOUT TAD (7000 /MOVE 1000 LOCATIONS UP DCA COUNTA LOOP, CDF 0 TAD I AXIN /MOVE CODE CDF 10 DCA I AXOUT ISZ COUNTA /DONE YET? JMP LOOP /NO DCA AXIN /YES-RESET COUNTERS DCA AXOUT CDF 0 /PUT A NOP INTO LOC. 203 TAD (NOP DCA I (START TAD RST3I /CHANGE START ADDRESS TO SAVE BUFFER DCA 177 CIF CDF 10 JMP I K6600 /STARTING ADDRESS IS 16600 K6600, 6600 /FIELD 1 STARTING ADDRESS COUNTA, 0 /ERR5, CDF 0 /SET NOT RESTARTABLE BIT IF CHAIN / TAD I (1000 / TAD I (7746 / DCA I (7746 / JMP I (SERR5 /AND GIVE ?5^C /MISCELLANEOUS PATCHES (NOT ONCE-ONLY!) /ESCAPE PATCH 25-MAY-77 DS ESCPA, 0 ISZ ESCPA /SKIP OVER PATCH ADDR TAD ECHOSW /IS ECHO SUPPRESSED? SNA CLA JMP I ESCPA /YES, RETURN TAD CHAR /NO, TEST FOR ESC TAD (-233) SNA CLA /V12 JMP .+3 /V12 ISZ ESCPA /PRINT UNLESS IT IS ESC JMP I ESCPA TAD I CHI1 /V12 - TAD CHIN TAD (-CMCHK-1 SZA CLA /COMMAND MODE? ISZ ESCPA /NO, OUTPUT IT JMP I ESCPA /YES, DON'T OUTPUT IT NOW /V12 /SCOPE PATCH 25-MAY-77 DS RUBPA, 0 ISZ RUBPA /SKIP OVER PATCH ADDR CDF 10 /LOOK AT "SCOPE" BIT IN TAD I (7726) /RESIDENT MONITOR CDF 00 AND (200) SZA CLA JMP RP1 TAD SPLAT /NO SCOPE, PRINT BACKSLASH RP2, JMS I OUT1 /PRINT JMP I RUBPA /DONE, DELETE THE CHAR RP1, TAD (210) /SCOPE, PRINT BACK SPACE JMS I OUT1 TAD (240) /THEN A SPACE JMS I OUT1 TAD (210) /THEN ANOTHER BACK SPACE JMP RP2 SPLAT, 334 /ACKNOWLEDGE RUBOUT /ROUTINE TO HANDLE ESCAPE OUTPUT /V12 - 27-JUN-77 ES ESCOUT, TAD OUTDEV TAD (-OUTL SZA TAD (OUTL-LPT SZA CLA /OUTPUT TO TERMINAL OR LINEPRINTER? TAD (233-"$ /NO, OUTPUT ESC TAD ("$ /YES, OUTPUT "$" JMP OUTX /DO IT /MORE STUFF MAY BE INSERTED HERE /LITERALS PAGE *3200 /******************************************************************** /CODE MOVED TO 16600-16762 NOPUNC *6600 ENPUNC /OURECS=4 /SETUP FOR USING GENERAL INPUT, OUTPUT ROUTINES INBUF=4200 /INPUT BUFFER AT 04200 INCTL=0600 /INPUT CONTROL - 6 PAGES INRECS=3 /3 RECORDS INTO FIELD 0 INDEVH=3200 /INPUT HANDLER AT 03200 OUBUF=5600 /OUTPUT BUFFER AT 05600 OUCTL=5000 /OUTPUT CONTROL - 8 PAGES OUDEVH=3600 /OUTPUT HANDLER AT 03600 MPARAM=7643 /OPTION SWITCHES JMS I L7700 /CALL USER SERVICE ROUTINES 10 /*LOCK USR IN CORE* CDF 0 /V3 ISZ I PTEMP /V3 WERE WE CHAINED TO? JMP CHN /V3 YES CDF 10 /V3 NO START1, JMS I L200 /CALL USER SERVICE ROUTINES 5 /*COMMAND DECODER* 0 CHN, CDF 10 TAD K7620 /RESET OUTDMP DCA I THOLE TAD I P7600A /OUTPUT LIST AND C17 SZCL, SZA CLA /IS THERE AN OUTPUT DEVICE? JMP NXTOP /YES CDF 0 /NO-DISALLOW E COMMAND ISZ I EKILSW CDF 10 NXTOP, TAD I PARAM RAL /B BIT TO BIT 0 DCA DVHAND /SAVE PARAM. SWITCH TAD DVHAND SMA CLA /WAS /B OPTION SPECIFIED? JMP NEWOP /NO P7600A, 7600 /YES- TAD SZCL /SET UP TO CONVERT SPACES TO TABS CDF 0 DCA I SPCP1 CDF 10 NEWOP, TAD DVHAND RTL SMA CLA /WAS /D OPTION SPECIFIED? JMP FILOP /NO TAD I OHANDL /YES-HANDLER BROUGHT IN FOR D OPTION DCA DVHAND TAD I P7600A /DEVICE NUMBER JMS I L200 /CALL USER SERVICE ROUTINES 1 /*ASSIGN* DVHAND, 0 JMP ISERR4 /**DEVICE HANDLER ERROR**4** TAD I P7600A /GET DEVICE NUMBER JMS I L200 /CALL USER SERVICE ROUTINES 4 /*CLOSE* 7601 0 JLSTN, LSTN /PAGE ZERO. 'AND' SOME ADDRESS FILOP, TAD PANIC /PANIC CASE? SNA JMS I IOPENI /SET BUFFER POINTERS OR RESTORE HANDLER SZA CLA /YES- JMP GINDVH /RESTORE INPUT DEVICE HANDLER IN PANIC MODE PANOPN, JMS I OOPENI /OPEN OUTPUT FILES SMA CLA /ERROR RETURN SKP /NORMAL RETURN JMP ISERR3 /**FILE OPEN ERROR**3** TAD PANIC /PANIC CASE? SNA CLA JMP NOPAN /NO TAD I P7600A /YES IF NO OUTPUT,DON'T ALLOW HIM SNA CLA /TO DESTROY HIS TEXT JMP START1 TAD K5000 /SET TO WRITE BUFFER JMS I ODMP /DUMP IT JMP ISERR1 /**FATAL WRITE ERROR**1** CLA IAC NOPAN, DCA DVHAND DCA PANIC /CLEAR PANIC SWITCH JMS I L200 /CALL USER SERVICE ROUTINES 11 /*DISMISS USR FROM CORE* JMS I OUSTPI /RE-INITIALIZE OUTPUT POINTERS CLA IAC JMS I SETJSI CDF 0 /IF LSTN#0, CLEAR FRST TAD I JLSTN /BUT IN FIELD 1 SNA CLA DCA FRST CIF CDF 0 TAD DVHAND SNA CLA /PANIC MODE? JMP I STRTUP /NO-START THE EDITOR TLS JMP I .+1 /YES - RESUME OUTPUT BUFRET GINDVH, CDF CIF 0 JMP I .+1 PIASGN ISERR3, JMS I L200 /CALL USER SERVICE ROUTINES 11 /*DISMISS USR FROM CORE* CIF CDF 0 JMP I ASERR3 /**FILE OPEN ERROR**3** ISERR4, JMS I L200 /CALL USER SERVICE ROUTINES 11 /*DISMISS USR FROM CORE* CIF CDF 0 JMP I ASERR4 /**DEVICE HANDLER ERROR**4** ISERR1, JMS I L200 /CALL USER SERVICE ROUTINES 11 /*DISMISS USR FROM CORE* CIF CDF 0 JMP I ASERR1 /**FATAL WRITE ERROR**1** SETJSI, SETJSB L200, 200 STRTUP, START PANIC, 0 SPCP1, SPACES+1 IOPENI, IOPEN OOPENI, OOPEN EKILSW, EKILLL ODMP, OUTDMP OHANDL, O1 C17, 17 PARAM, MPARAM L7700, 7700 ASERR1, SERR1 ASERR3, SERR3 ASERR4, SERR4 K5000, 5000 /OUTPUT BUFF CONTROL WORD OUSTPI, OUSETP THOLE, TSTHOL K7620, 7620 PTEMP, TEMP /*********************************************************************** *3400 /*********************************************************************** /CODE MOVED TO 17000-17173 NOPUNC *7000 ENPUNC 232 /THIS PAGE IS ^Z BUFFER /SET UP ROUTINE FOR OUTPUT /INITIALIZES CHARACTERS POINTERS OUSETP, 0 TAD I PANICJ /IS IT PANIC DUMP TIME? SZA CLA /IF YES, DONT RESET POINTERS JMP I OUSETP /--RETURN-- TAD C1 /GET SIZE OF BUFFER IN DOUBLEWORDS CIA /NEGATE IT DCA OUDWCT TAD C2 DCA OUPTR /INITIALIZE WORD POINTER TAD OUJMPE DCA OUJMP /INITIALIZE THREE-WAY CHARACTER SWITCH JMP I OUSETP /--RETURN-- /OUTPUT A CHARACTER /ENTER WITH CHARACTER IN 8-BIT ASCII /IN AC OCHAR, 0 AND C377 /MASK OUT EXTRA BITS DCA OUTEMP KRS TAD M203 SNA CLA KSF JMP .+3 CIF CDF 0 JMP I C7600 RDF /NO- TAD CDIF0 DCA OUCRET TAD OUTINH /IS OUTPUT INHIBITED? SZA CLA JMP PSTOP /NO CDF OUFLD /YES-SET DATA FIELD TO BUFFER'S FIELD ISZ OUJMP /BUMP THE CHARACTER SWITCH OUJMP, HLT /3 WAY CHARACTER SWITCH JMP OCHAR1 JMP OCHAR2 OCHAR3, TAD OUTEMP CLL RTL RTL AND K7400 TAD I OUPOLD DCA I OUPOLD /UPDATE FIRST WORD OF TWO WITH HIGH /ORDER 4 BITS OF 3RD CHAR TAD OUTEMP CLL RTR RTR RAR AND K7400 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 OUCT /LOAD CONTROL WORD FOR A FULL WRITE JMS I DMPO /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 /--RETURN-- OUTEMP, 0 OUPOLD, 0 OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUTINH, 0 /FETCH OUTPUT DEVICE CONTROL WORD OTYPE, 0 RDF TAD CDIF0 DCA OTRTN CDF 10 TAD I C7600 /FETCH OUTPUT DEVICE NUMBER AND P17 TAD DCBM1 /+DCB-1 DCA OUTEMP /FETCH DEVICE CONTROL WORD TAD I OUTEMP OTRTN, HLT /RESTORE CALLING FIELDS JMP I OTYPE /--RETURN-- PSTOP, CIF 0 /PRINTS ? WHEN NO OUTPUT DEV ERROR INSET, 0 DCA OTYPE /SAVE AC RDF TAD CDIF0 DCA INSTRT /SET RETURN FIELDS CDF 0 TAD I PLASTN CDF 10 SNA CLA /IS THERE ANYTHING IN BUFFER? IAC /NO-NO NEED TO SAVE USR AREA JMS SETJSB /YES- TAD OTYPE /RESTORE AC INSTRT, CIF CDF 0 /RESTORE CALLING FIELDS JMP I INSET /--RETURN-- /SET JOB STATUS BIT 11 TO SAVE OR NOT SAVE /ENTER WITH AC=0 OR 1, DEPENDING ON BUFFER SETJSB, 0 DCA JSBTM /SAVE AC CDF 0 CLA CLL CMA RAL AND I PJSBTS /CLEAR BIT 11 OF JSW TAD JSBTM /SET ACCORDING TO AC DCA I PJSBTS CDF 10 JMP I SETJSB /--RETURN-- JSBTM, 0 PJSBTS, 7746 PLASTN, LSTN DCB=7760 C1, OUCTL&3700 C2, OUBUF C377, 377 M203, -203 CDIF0, CDF CIF 0 K7400, 7400 OUCT, OUCTL C7600, 7600 P17, 17 DCBM1, DCB-1 DMPO, OUTDMP PANICJ, PANIC /*********************************************************************** *3600 /*********************************************************************** /CODE MOVED TO 17200-17376 NOPUNC *7200 ENPUNC /OPEN OUTPUT FILE O17, 17 OOPEN, 0 OU7600, 7600 TAD OU7601 DCA OUBLK TAD O1 DCA OUHNDL /SET OUTPUT HANDLER ENTRY CDF 10 TAD I OU7600 /GET DEVICE NUMBER WORD OF OUTPUT FILE ENTRY SNA /IS THERE AN OUTPUT DEVICE? JMP ONOFIL /NO - INHIBIT OUTPUT JMS I O200 /CALL USER SERVICE ROUTINES 1 /*ASSIGN,FETCH HANDLER* OUHNDL, 2600 /OUTPUT DEVICE HANDLER ENTRY JMP I SERR4A /**DEVICE HANDLER ERROR**4** OUENTR, TAD I OU7600 JMS I O200 /CALL USER SERVICE ROUTINES 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 O2 /ZERO OUTPUT INHIBIT FLAG TAD OUBLK DCA OUREC /INITIALIZE OUTPUT RECORD NUMBER JMS I O3 ISZ OOPEN OORETN, JMP I OOPEN OEFAIL, TAD I OU7600 AND O7760 /GET REQUESTED LENGTH SNA CLA /WAS IT AN INDEFINITE REQUEST JMP ONTERR /YES - CANNOT ENTER THE FILE TAD I OU7600 O200, AND O17 /MAKE THE REQUESTED LENGTH ZERO DCA I OU7600 JMP OUENTR /TRY, TRY AGAIN ONTERR, CLA CLL CML RAR /AC=2 JMP OORETN /TAKE THE ERROR RETURN WITH AC<0 ONOFIL, ISZ I O2 JMP OORETN /TAKE THE ERROR RETURN WITH AC=0 OUTDMP, 0 DCA OUCTLW /STORE THE CONTROL WORD JMS OUNREC /COMPUTE NO. OF RECORDS TAD OUCCNT DCA OUCCNT TAD OUCCNT CLL CML TAD OUELEN TSTHOL, SNL CLA /IF ZERO OR POSITIVE,GIVE ERROR JMP OUERR CDF CIF 0 CDF 10 JMS I OUHNDL /CALL OUTPUT DEVICE HANDLER OUCTLW, 0 /CONTROL WORD OUBUF /BUFFER ADDRESS OUREC, 0 /RECORD NUMBER JMP OUERR /THERE ARE NO SOFT OUTPUT HANDLER ERRORS JMS OUNREC TAD OUREC DCA OUREC /UPDATE OUTPUT RECORD NUMBER ISZ OUTDMP /BUMP OUTDMP TO NORMAL RETURN OUERR, JMP I OUTDMP /--RETURN-- /CLOSE OUTPUT FILE OCLOSE, 0 TAD K7660 /SET UP SNL SZA CLA FOR CLOSE DCA TSTHOL CDF 10 TAD I PANICC SZA CLA JMP NODUMP TAD I O2 SZA CLA /IS OUTPUT INHIBITED? JMP OCISZ /YES - CLOSE IS A NOP TAD O232 /OUTPUT A ^Z JMS I O4 JMP OCRET /AND SOME 0'S JMS I O4 JMP OCRET FILLLP, JMS I O4 JMP OCRET JMS I O5 /GET TYPE OF OUTPUT DEVICE SPA CLA TAD O100 /IF ITS A DIRECTORY DEVICE FORCE A RECORD TAD O77 /BOUNDARY-OTHERWISE HALF RECORD AND I O6 SZA CLA /UP TO THE BOUNDARY YET? JMP FILLLP /NO - FILL WITH ZEROS TAD I O6 /GET DOUBLEWORD COUNT LEFT TAD O7 SNA /A FULL WRITE LEFT? JMP NODUMP /YES - DON'T DO IT - ^Z IS ALREADY OUT TAD O8 /PUT IN FIELD BITS AND WRITE BIT JMS OUTDMP JMP OCRET /ERROR OCCURRED WHILE DUMPING THE BUFFER NODUMP, JMS I O7700 /CALL USER SERVICE ROUTINES 10 /*LOCK USR IN CORE* TAD I OU7600 /DEVICE NUMBER JMS I O200 /CALL USER SERVICE ROUTINES 4 /*CLOSE OUTPUT FILE* OU7601, 7601 /POINTER TO THE OUTPUT FILE NAME OUCCNT, 0 SKP /ERROR WHILE CLOSING THE FILE OCISZ, ISZ OCLOSE OCRET, CIF CDF 0 /RESTORE CALLING FIELDS JMP I OCLOSE /--RETURN-- PANICC, PANIC /CONVERT OUTPUT CONTROL WORD /TO NUMBER OF RECORDS OUNREC, 0 TAD OUCTLW CLL RTL RTL RTL AND O17 JMP I OUNREC /--RETURN-- K7660, SNL SZA CLA O1, OUDEVH+1 O7700, 7700 O2, OUTINH O3, OUSETP O7760, 7760 O232, 232 O4, OCHAR O5, OTYPE O100, 100 O77, 77 O6, OUDWCT O7, OUCTL&3700 O8, 4000+OUFLD SERR4A, ISERR4 /*********************************************************************** INFLD=INCTL&70 /FIELD OF INPUT BUFFER OUFLD=OUCTL&70 /FIELD OF OUTPUT BUFFER /*********************************************************************** /CODE MOVED TO 17400 -17574 *4000 NOPUNC *7400 ENPUNC /PREPARE TO OPEN NEW INPUT FILE 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 I7617 DCA INFPTR /RESET FILE POINTER JMP I IOPEN /--RETURN-- INPTR, 0 INDEV, 0 /INPUT A CHARACTER ICHAR, 0 IN7600, 7600 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 INNEWF, CDF 10 TAD I1 DCA INHNDL /INITIALIZE HANDLER ADDRESS TAD I INFPTR /GET NEXT CD INPUT FILE ENTRY DCA INDEV /SAVE IT FOR PANIC TAD INDEV SNA /ANY MORE? JMP EOFERR /NO - OUT OF INPUT JMS I PINSET /YES-SAVE BUFFER IF NECESSARY JMS I I7700 /CALL USER SERVICE ROUTINE 1 /*ASSIGN, FETCH HANDLER* INHNDL, 0 JMP I SERR4B /**DEVICE HANDLER ERROR**+** TAD I INFPTR AND I7760 /GET LENGTH PART OF WORD SZA /LENGTH OF 0 MEANS LENGTH >=256 TAD I17 /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 INGBUF, TAD INCTR CLL TAD I2 SNL DCA INCTR /RESTORE INCTR IF IT HASN'T OVERFLOWED SZL /IS THIS THE LAST READ? ISZ INEOF /YES - SET END-OF-FILE FLAG 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 I3 DCA INCTLW CDF CIF 0 CDF 10 JMS I INHNDL /CALL INPUT DEVICE HANDLER INCTLW, 0 /CONTROL WORD INBUFP, INBUF /INPUT BUFFER INREC, 0 /NUMBER OF RECORDS JMP INERRX /SOME KIND OF HANDLER ERROR INBREC, TAD INREC TAD I2 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 ERROR SMA CLA /WHICH TYPE WAS IT? JMP INBREC /END OF FILE - RESUME PROCESSING INERR, CLA CLL CML RAR /BAD - GIVE ERROR RETURN WITH NEGATIVE AC EOFERR, JMP INRTRN INJMP, HLT /3 WAY CHARACTER SWITCH JMP ICHAR1 JMP ICHAR2 ICHAR3, TAD INJMPP DCA INJMP TAD I INPTR 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 I377 TAD IM232 SNA /IS THE CHARACTER A ^Z? JMP INNEWF /YES - GET A NEW FILE TAD I232 /RESTORE THE CHARACTER ISZ ICHAR /BUMP RETURN TO NORMAL RETURN INRTRN, CDF CIF 0 /RESTORE CALLING FIELDS JMP I ICHAR /--RETURN-- INCHCT, -1 INFPTR, 7617 INEOF, 1 INCTR=IOPEN PINSET, INSET I7617, 7617 I1, INDEVH+1 I7760, 7760 I17, 17 I2, INRECS I3, INCTL+1 I377, 377 IM232, -232 I232, 232 I7700, 7700 SERR4B, ISERR4 $ /*********************************************************************** |
Added src/os8/uni/CUSPS/EPIC.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 | /EPIC PROGRAM, V5A / / / / / / / // / / / / /COPYRIGHT (C) 1973, 1975, 1977 /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. / / / / / / /EPIC PROGRAM /COPYRIGHT 1973,1977 /DIGITAL EQUIPMENT CORP. /MAYNARD, MASS.01754 PTAPE=1 *0 VERS, 10 *10 NDX0, 0 NDX1, 0 NDX2, 0 *20 BCC1, 0 BCC2, 0 BLKLEN, 13 BUFFLD, 10 BUFPTR, 0 BYTCNT, 0 CLOC=BYTCNT CHKC, CTRLC CRLF, TYCRLF DATBUF, HDATA DOCRC, CRC EBLKHI, 0 EFLG, -1 EOTFLG, 0 EQBLK, 0 ERCODE, 0 EOLWD=ERCODE FLEN, 0 FNPTR, 0 FRMPTR, 0 MODF=FRMPTR GETCD, DECOD HANADR, 0 IDOFLG, 0 MODB=IDOFLG IMPFLG, 0 INCHR, 0 INPTR, 0 IOERR, PHYSIO LPWT, LPWAIT LSPFLG, 0 MAXCNT, 0 MAXLEN, -MXPBLK MIFLG, 0 M4, -4 NAME, 0 OCNT, 0 OUDEV, 0;0;0 OUTCHR, 0 OUTPTR, 0 PARCHR, 0 MSKWD=PARCHR PARPTR, PARADR PATFLG, 0 P17, 17 P200, 200 RDCHR, 0 SRWD=RDCHR RDPBLK, PREAD RDSWIT, SWITCH RELBLK, HDATA+5 RBLK, 0 SATOL, 0 SBLK, 0 SLPTR, 0 SMTOX, 0 SYTO9, 0 TMP0, 0 TMP1, 0 TMP2, 0 TMP3, 0 TMP4, 0 TNAME, TYPNAM TYDEV, TYPDEV TYPTXT, TTOTXT USR, DOUSR USRDEV, 0 WRCHR, 0 PAGE START, NOP CIF 10 /START OF PROG JMS I (7700 USRIN TAD MAXLEN DCA MAXCNT TLS PLS RFC DECOD, TAD (-PTAP TAD MODE SZA CLA JMP .+4 TAD LSPFLG SZA CLA JMS I LPWT JMS I CRLF TSF JMP .-1 CIF 10 JMS I P200 DECODE 0 TLS /INIT. TTY JMS I (SETDV JMS I (CHKMI CDF 10 TAD I (MTOX CDF 0 CLL RTR RAR SNL JMP NOVERS JMS I CRLF JMS I TYPTXT /IF /V,TYPE VERSION NUMBER VERSON JMS I CRLF NOVERS, TAD (FNAME DCA NAME TAD (7600 /GET NAME DCA NDX0 TAD NAME DCA TMP2 TAD DATBUF DCA TMP3 TAD VERS DCA I TMP3 ISZ TMP3 TAD M4 DCA TMP0 CDF 10 TAD I (YTO9 RAL /CHK /Z SMA CLA JMP .+3 DCA EQBLK DCA EBLKHI TAD I (ATOL AND (20 /H ? SZA CLA FOURK /YES DCA TMP1 CLA CLL CMA RAR /=3777 AND I (7642 /HI EQUALS N TAD TMP1 SZA DCA EBLKHI TAD I (7642 DCA TMP1 TAD I (7646 SZA DCA EQBLK /=N LO ORD TAD I (ATOL DCA SATOL TAD I (YTO9 DCA SYTO9 TAD I (MTOX DCA SMTOX JMS I (DODFN TAD TMP1 SMA CLA JMP GOTMOD TAD (MODTBL-1 /GET NEW MODE DCA TMP1 TAD SYTO9 RAL CLL CML RAL ISZ TMP1 SMA /FOUND IT ? JMP .-3 CLA TAD I TMP1 DCA MODE JMS I CRLF GOTMOD, JMP I MODE MODTBL, PTAP FED COMPAR IFNZRO PTAPE < DECOD > DECOD DECOD DECOD DECOD DECOD DECOD MODE, DECOD VERSON, TEXT "V 5A " 0 PAGE DODFN, 0 TAD I (7601 SZA CLA JMP LOP0 TAD SYTO9 SPA CLA JMP LOP0 ISZ TMP2 ISZ TMP3 ISZ TMP0 JMP .-3 CDF JMP I DODFN LOP0, CDF 10 TAD I NDX0 CDF DCA I TMP2 TAD I TMP2 DCA I TMP3 ISZ TMP2 ISZ TMP3 ISZ TMP0 JMP LOP0 JMP I DODFN HSPRDR, 0 JMS IOWAIT RSF RRB DCA INCHR RFC TAD INCHR JMP I HSPRDR HSPPCH, 0 DCA OUTCHR JMS IOWAIT PSF TAD OUTCHR PLS CLA JMP I HSPPCH LSPRDR, 0 JMS IOWAIT KSF KRB DCA INCHR TAD INCHR JMP I LSPRDR LSPPCH, 0 DCA OUTCHR JMS IOWAIT TSF TAD OUTCHR TLS CLA JMP I LSPPCH IOWAIT, 0 TAD I IOWAIT DCA IOTSKP ISZ IOWAIT TAD IOTSKP RTL RAL AND (700 TAD VERS IOTSKP, 0 JMP .-1 CLA JMP I IOWAIT CTRLC, 0 KSF JMP I CTRLC TAD [200 /FORCE BIT 8 ON KRS TAD (-203 SZA CLA JMP I CTRLC KCC CTRLC0, JMS I CRLF TAD (336 JMS I (LSPPCH TAD (303 JMS I (LSPPCH JMS I CRLF TSF JMP .-1 JMP I .+1 7605 PAGE /HERE FOR SYS:<PTP PTIN, TAD LSPFLG SNA CLA JMP .+4 IAC DCA I (OUTTBL TAD (LSPRDR-HSPRDR TAD (HSPRDR DCA RDCHR TAD I (OUTTBL DCA USRDEV RFC JMS I RDPBLK /GET 1ST PBLK JMS RDERR TAD DATBUF /GET NAME DCA NDX0 TAD NAME DCA TMP1 TAD M4 DCA TMP0 TAD I NDX0 DCA I TMP1 ISZ TMP1 ISZ TMP0 JMP .-4 ISZ NDX0 /BY RELBLK TAD I NDX0 DCA BLKW /FILE LEN TAD PATFLG SZA CLA /RDING A PATCH? TAD (LOOKUP-ENTER TAD (ENTER /ENTER=NO PATCH JMS I USR CLL TAD FLEN TAD BLKW SNA /DOES IT FIT? JMP .+3 SZL CLA JMP NOFIT TAD BLKW DCA FLEN DCA RBLK TAD FLEN CIA DCA FCNT JMS I (ICHKB /SEE IF WE GOT /THE RIGHT BLK LOP3, TAD SBLK /ABS STR BLK TAD I RELBLK DCA BLKW /=BLK TO DO JMS I HANADR 4200 /WRITE 1 BLK BUFADR BLKW, 0 JMP I IOERR ISZ RBLK ISZ FCNT JMP BY3 TAD (CLOSE JMS I USR JMP I GETCD BY3, JMS I RDPBLK SKP JMP LOP3 MTHREE TAD ERCODE /EOT IS ONLY /LEGAL ERROR SNA CLA JMP IFEOT JMS RDERR /RETRY JMP LOP3-1 IFEOT, TAD PATFLG SZA CLA JMP I GETCD /PATCH MODE /TERMS ON EOT JMS I TYPTXT EOTMSG JMS I TYPTXT NTMSG JMS I CRLF CLA CMA JMS I LPWT JMS I RDPBLK JMS RDERR JMP LOP3-1 RDERR, 0 MTWO DCA ERCNT LOP4, TAD ERCODE TAD (AMSG DCA TMP0 TAD I TMP0 DCA .+2 JMS I TYPTXT 0 JMS I CRLF CLA CMA JMS I LPWT JMS I RDCHR CLA JMS I RDPBLK SKP JMP I RDERR ISZ ERCNT JMP LOP4 JMP I IOERR ERCNT, 0 FCNT, 0 NOFIT, TAD (16 JMS I TYDEV TAD NAME JMS I TNAME JMS I TYPTXT BIGMSG TAD USRDEV JMS I TYDEV JMP I GETCD PAGE PTAP, JMS I RDSWIT PSTBL TAD I NAME SNA CLA JMP I (PTIN /PTAP INPUT TAD I (OUTTBL DCA USRDEV TAD LSPFLG SNA CLA TAD (HSPPCH-LSPPCH TAD (LSPPCH DCA WRCHR PLS TAD (LOOKUP JMS I USR TAD PATFLG SNA CLA /PUNCH PATCH ? JMP NOPAT CLL TAD EQBLK /CHK FOR =N TAD FLEN /OUT OF RANGE SNL CLA /? JMP .+4 JMS I TYPTXT BEQMSG JMP I GETCD TAD EQBLK NOPAT, DCA TMP0 TAD TMP0 TAD SBLK DCA BLKR /1ST BLK TO PCH TAD TMP0 /PUT REL BLK DCA I TMP3 /IN HDR TAD FLEN CIA /=FILE LEN ISZ TMP3 DCA I TMP3 ISZ TMP3 DCA I TMP3 /0 TO LST HDR /WORD TAD PATFLG /ONLY 1 BLK SZA /PATCHES AT A DCA FLEN /TIME TAD LSPFLG SNA CLA JMP .+3 LOP2, CLA CMA JMS I LPWT /ON PUNCH TAD MAXLEN CIA TAD MAXCNT SZA CLA /PCH L/T ? JMP .+3 /NO JMS WLT JMS WLT LOP1, JMS I HANADR /READ 1 BLK 200 /OF FILE BUFADR BLKR, 0 JMP I IOERR ISZ BLKR JMS I (PWRITE ISZ I RELBLK ISZ FLEN JMP BYDUN TAD EOTFLG SNA CLA /PCH EOT ? JMS EOT /YES JMP I GETCD BYDUN, ISZ MAXCNT JMP LOP1 JMS EOT /PHYSICAL END /OF PTP TAD LSPFLG SZA CLA JMS I LPWT JMS I TYPTXT EOTMSG JMS I CRLF JMP LOP2 /NEXT PTP WLT, 0 TAD LTCNT DCA TMP0 TAD P200 JMS I WRCHR JMS I CHKC ISZ TMP0 JMP .-4 JMP I WLT LTCNT, -LTLEN EOT, 0 TAD (377 JMS I WRCHR JMS WLT JMS WLT JMS WLT TAD MAXLEN DCA MAXCNT JMP I EOT PAGE PREAD, 0 /READ A PTP BLK JMS I RDCHR SNA JMP PREAD+1 /ITS L/T TAD (-200 SNA JMP PREAD+1 /L/T RAR CLL /201 PCH MUST SNA CLA /SEPARATE L/T /AND DATA JMP ONBLK TAD (-377 /ONLY OTHER TAD INCHR /POSSIBILTY IS SNA CLA /END OF PTP IAC /EOT CODE IAC /L/T ERR BYTERR, IAC BLKERR, DCA ERCODE JMP I PREAD /P+1=ERR RTN ONBLK, JMS I (ISETB DCA PARFLG JMS GETBYT ISZ BYTCNT JMP .-2 JMS I RDCHR CIA TAD BCC1 SZA CLA JMP BLKERR JMS I RDCHR CIA TAD BCC2 SZA CLA JMP BLKERR TAD PARFLG SPA CLA JMP BYTERR ISZ PREAD /GOOD BLK JMP BLKERR+1 GETBYT, 0 TAD LSPFLG SNA CLA JMS I CHKC DCA PARCHR TAD M4 DCA CNTR0 LOP6, MTHREE DCA CNTR1 LOP5, JMS I RDCHR DCA I FRMPTR ISZ FRMPTR TAD INCHR JMS I DOCRC ISZ CNTR1 JMP LOP5 MTHREE TAD FRMPTR DCA FRMPTR JMS PACK ISZ CNTR0 JMP LOP6 JMS I RDCHR JMS I DOCRC TAD INCHR CIA TAD PARCHR SNA CLA JMP NOPAR CLA CMA DCA PARFLG TAD ABORT SPA CLA JMP BYTERR FOURK NOPAR, TAD INCHR DCA I PARPTR ISZ PARPTR JMP I GETBYT /HERE TO PACK 3 8 BIT FRAMES INTO /2 12 BIT WORDS PACK, 0 TAD I FRMPTR RTL CLL RAL /1ST FRM TO DCA I BUFPTR /B1-B8 ISZ FRMPTR TAD I FRMPTR /PUT HI HALF OF RTR CLL /2ND FRM INTO RTR /B9-B11 AND LNK RAR DCA HOLDW2 TAD HOLDW2 /PUT 1ST FRM IN AND (7 /B0-B7,AND PUT TAD I BUFPTR /HI HALF OF 2ND RAL /IN B8-B11 DCA I BUFPTR /YOU AINT SEEN TAD I BUFPTR /NOTHING YET. JMS I (DOPAR TAD HOLDW2 /LO HAF OF 2ND AND (7400 /FRM IS IN ISZ FRMPTR /B0-B3. PUT TAD I FRMPTR /WITH 3RD FRM ISZ BUFPTR DCA I BUFPTR TAD I BUFPTR JMS I (DOPAR ISZ FRMPTR ISZ BUFPTR JMP I PACK PARFLG, 0 CNTR0, 0 CNTR1, 0 ABORT, -1 HOLDW2, 0 PAGE PWRITE, 0 /HERE TO WRITE /1 BLK OF PTP JMS ISETB JMS I (WLT TAD (201 /START OF DATA /BLK CHAR JMS I WRCHR JMS PUTBYT ISZ BYTCNT JMP .-2 TAD BCC1 JMS I WRCHR TAD BCC2 JMS I WRCHR JMP I PWRITE ISETB, 0 TAD (FRMADR DCA FRMPTR TAD (PARADR DCA PARPTR TAD DATBUF DCA BUFPTR DCA BCC1 DCA BCC2 TAD (-NBYTS DCA BYTCNT JMP I ISETB LPWAIT, 0 HLT RFC CLA JMP I LPWAIT PUTBYT, 0 DCA PARCHR TAD M4 DCA CNTR2 LOP7, TAD I BUFPTR JMS DOPAR TAD I BUFPTR /PUT 2 WORDS IN RTR CLL /3 8 BIT FRMS RTR DCA F2 TAD F2 /B0-B7 OF 1ST AND (377 /FOR FRM 1 DCA F1 TAD F2 /LO 4 BITS OF RAR /WORD 1 AND (7400 /TO B0-B3 OF DCA F2 /FRM 2 TAD F1 JMS I WRCHR TAD F1 JMS I DOCRC ISZ BUFPTR TAD I BUFPTR JMS DOPAR TAD I BUFPTR /PUT B0-B3 AND (7400 /OF WD2 RTR CLL /INTO B4-B8 RTR TAD F2 /NOW PUT LO 4 RTR /BITS OF WD1 RTR /(B0-B3) AND HI /4 BITS OF W2 /INTO B4-B11 JMS I WRCHR TAD OUTCHR /=CHR JST PCHED JMS I DOCRC TAD I BUFPTR AND (377 /LO 8 OF 2ND JMS I WRCHR TAD OUTCHR /=F3 JMS I DOCRC ISZ BUFPTR ISZ CNTR2 JMP LOP7 TAD PARCHR JMS I WRCHR TAD PARCHR JMS I DOCRC JMS I CHKC JMP I PUTBYT CNTR2, 0 F2, 0 F1, 0 /HERE TO COMPUTE PARITY (EVEN ODD) /12 BIT WORD IS IN AC. /AFTER EACH (SPA,CML,RAR) SEQUENCE /AC B0=0 IF THE /NUMBER OF ALREADY PROCESSED 1 /STATE BITS IS EVEN. OTHERWISE AC B0=1. DOPAR, 0 DCA TMP0 TAD (-13 /-13 BECAUSE 2 /BITS ARE /PROCESSED /INITIALLY DCA TMP1 TAD TMP0 RTR /LNK HOLDS /NEWBIT,AC B0 /HOLDS STATUS /TO DATE. SPA /CHNG FROM ODD /TO EVEN ? CML /YES CHANGE /STATUS RAR /GET NXT ISZ TMP1 /DONE ? JMP .-4 /NO CMA RAL /SET LNK=1=EVEN CLA /LNK=0=ODD TAD PARCHR /UPDATE PARITY RAL DCA PARCHR JMP I DOPAR PAGE TTOTXT, 0 TAD I TTOTXT DCA TMP0 ISZ TTOTXT LOP8, TAD I TMP0 RTR RTR RTR JMS DOHAF JMP I TTOTXT TAD I TMP0 JMS DOHAF JMP I TTOTXT ISZ TMP0 JMP LOP8 DOHAF, 0 AND (77 SNA JMP I DOHAF ISZ DOHAF TAD (-40 SPA TAD (100 TAD (240 JMS I (LSPPCH JMP I DOHAF TYCRLF, 0 TAD (215 JMS I (LSPPCH TAD (212 JMS I (LSPPCH JMP I TYCRLF PHYSIO, JMS I TYPTXT IOMSG JMP I GETCD TYPNAM, 0 DCA TMP2 TAD TMP2 DCA TMP0 MTHREE DCA TMP1 LOP9, TAD I TMP0 RTR RTR RTR JMS DOHAF JMP DOEXT TAD I TMP0 JMS DOHAF JMP DOEXT ISZ TMP0 ISZ TMP1 JMP LOP9 DOEXT, TAD P3 TAD TMP2 DCA TMP0 TAD I TMP0 SNA CLA JMP P3+1 TAD P256 /. JMS I (LSPPCH TAD I TMP0 RTR RTR RTR JMS DOHAF P256, 256 TAD I TMP0 JMS DOHAF P3, 3 TAD (240 JMS I (LSPPCH JMP I TYPNAM OCTOUT, 0 RAL DCA TMP0 TAD M4 DCA TMP1 LOP11, TAD TMP0 RTL RAL DCA TMP0 RAL DCA TMP2 TAD TMP0 AND (7 TAD (260 JMS I (LSPPCH TAD TMP2 RAR CLL ISZ TMP1 JMP LOP11 TAD (240 JMS I (LSPPCH JMP I OCTOUT PAGE /HERE TO SEE IF WE READ THE CORRECT /BLK OF THE CORRECT FILE. ICHKB, 0 TAD PATFLG /DONT CHK IF SZA CLA /IN PATCH MODE JMP I ICHKB LOP12, TAD M4 DCA TMP0 TAD LSPFLG SNA CLA JMS I CHKC TAD DATBUF /COMPARE NAMES DCA NDX0 TAD NAME DCA TMP1 LOP10, TAD I NDX0 CIA TAD I TMP1 SZA CLA JMP NAMERR ISZ TMP1 ISZ TMP0 JMP LOP10 TAD RBLK /CHK BLK CIA TAD I RELBLK SNA CLA JMP I ICHKB /GOOD BLK JMS I TYPTXT NMSG TAD RBLK JMS I (OCTOUT JMS I TYPTXT FMSG TAD I RELBLK JMS I (OCTOUT RECHK, JMS I CRLF CLA CMA JMS I LPWT JMS I RDPBLK JMS I (RDERR JMP LOP12 NAMERR, JMS I TYPTXT NMSG TAD NAME JMS I TNAME JMS I TYPTXT FMSG TAD DATBUF IAC JMS I TNAME JMP RECHK /CRC GENERATOR /COURTESY OF MARIO S. ROOT /COUSIN TO MARIO LEONARD CRC, 0 DCA TMP0 TAD (-7 DCA TMP1 TAD TMP0 AND BCC2 CIA CLL RAL TAD TMP0 TAD BCC2 CLL RTR SPA CML RAR ISZ TMP1 JMP .-4 SPA JMP .+4 DCA TMP1 TAD BCC1 JMP .+5 DCA TMP1 TAD BCC1 RAR CML RAL DCA BCC2 TAD TMP1 AND (60 CLL RTL DCA BCC1 TAD BCC1 AND BCC2 CIA CLL RAL TAD BCC1 TAD BCC2 DCA BCC2 TAD TMP1 CLL RTR RTR DCA BCC1 TAD BCC1 CLL RAR CLL RAR DCA TMP1 TAD TMP1 AND BCC1 CIA CLL RAL TAD BCC1 TAD TMP1 DCA BCC1 JMP I CRC PAGE /CHK FOR MASTER INPUT DEVICE ONLY CHKMI, 0 TAD (INTBL-1 DCA NDX0 TAD I NDX0 SNA CLA JMP BY1 /NO MI TAD (-10 DCA TMP0 ISZ NDX0 TAD I NDX0 /MUST HAVE NO SZA CLA /OTHER IN DEVS JMP BY1 /FOUND 1 ISZ TMP0 JMP .-5 CLA CMA /MI ONLY SET BY1, DCA MIFLG /MI FLAG JMP I CHKMI DOUSR, 0 /HERE TO DO A DCA N1-1 /USR CALL TAD NAME /EITHER LOOKUP DCA N1 /,ENTER OR TAD FLEN /CLOSE DCA N1+1 TAD USRDEV JMS I (GETHAN CIF 10 TAD USRDEV AND P17 JMS I P200 0 N1, 0;0 JMP USRERR TAD N1 DCA SBLK TAD N1+1 DCA FLEN JMP I DOUSR USRERR, JMS I TYPTXT USRMSG TAD N1-1 JMS I (OCTOUT TAD USRDEV JMS I TYDEV TAD NAME JMS I TNAME JMS I CRLF JMP I GETCD PAGE SETDV, 0 JMS CHKP37 7600-1 /OUTPUT INFO OUTTBL-1 4 -3 JMS CHKP37 7617-1 /INPUT INFO INTBL-1 1 -11 JMP I SETDV CHKP37, 0 DCA TMP0 TAD (TM-1 DCA NDX1 TAD I CHKP37 /P37 ADDR DCA NDX0 ISZ CHKP37 TAD I CHKP37 DCA TMP1 /PERM TBL ISZ CHKP37 TAD I CHKP37 DCA TMP3 /ENTRY LEN-1 ISZ CHKP37 TAD I CHKP37 DCA TMP2 /-NUM TO DO XLOP2, CDF 10 TAD I NDX0 SZA /BLANK ENTRY ? ISZ TMP0 /NO CDF DCA I NDX1 /TMP SAV TAD NDX0 /ADV PTR TO NXT TAD TMP3 DCA NDX0 ISZ TMP2 /DONE? JMP XLOP2 /NO TAD TMP0 /WAS P37 SNA CLA /BLANK ? JMP BY0 /YES USE SET OF /DEV LAST /SPECIFIED TAD TMP1 DCA NDX1 TAD (TM-1 DCA NDX0 TAD I CHKP37 DCA TMP0 TAD I NDX0 /NEW UNIT DCA I NDX1 DCA I NDX1 /0 TO SBLK ISZ TMP0 JMP .-4 DCA I NDX1 BY0, ISZ CHKP37 JMP I CHKP37 /ROUT TO INTERPRET PS/8 SWITCHES SWITCH, 0 TAD I SWITCH /PTR TO TBL DCA TMP0 ISZ SWITCH CLL TAD (7757 AND SATOL TAD SMTOX SNA SZL CLA JMP I SWITCH /NONE TO READ XLOP0, TAD I TMP0 SNA /END OF TBL ? JMP I SWITCH /YES DCA TMP1 /PTR TO FLAG CLA CMA /SET TO YES DCA I TMP1 /STATE XLOP1, ISZ TMP0 TAD I TMP0 /AC=P37 SW ADDR ISZ TMP0 /=PTR TO MASK SNA /MORE ARGS FOR /THIS SWIT ? JMP XLOP0 /NO DO NXT DCA TMP2 TAD I TMP2 AND I TMP0 /CLR NON SWITCH /BITS CIA /COMP WITH MASK TAD I TMP0 SZA CLA /IF ALL OK /LEAVE SWITCH /ALONE DCA I TMP1 JMP XLOP1 PAGE WRITE, 0 TAD WRITE DCA READ FOURK JMP READ+1 READ, 0 DCA RWBIT JMS I CHKC TAD I READ DCA DVPTR ISZ READ TAD I DVPTR /UNIT JMS I (GETHAN ISZ DVPTR TAD I DVPTR /PUT NUM BLKS AND P17 /IN B1-B5 RTL CLL RTL RTL RAL TAD BUFFLD TAD RWBIT DCA IOLST ISZ DVPTR TAD I DVPTR DCA IOLST+2 /SBLK JMS I HANADR IOLST, 0 2000 0 JMP .+3 ISZ READ /NON ERR RTN JMP I READ CLA JMS I TYPTXT IOMSG MTWO TAD DVPTR DCA TMP0 TAD I TMP0 JMS I TYDEV TAD I NAME SNA CLA JMP .+3 TAD NAME JMS I TNAME TAD IOLST+2 JMS I (OCTOUT TAD RWBIT SMA CLA JMP DONALL TAD (337 JMS I (LSPPCH /BACK ARROW DONALL, JMS I CRLF JMP I READ RWBIT, 0 DVPTR, 0 PAGE GETHAN, 0 AND P17 DCA TMP1 TAD TMP1 TAD (DEVRES-1 DCA TMP0 CDF 10 TAD I TMP0 /IS HANDLER IN CDF /IN CORE ? SZA JMP NOFET /YES MTWO TAD TMP1 SNA CLA TAD (1200 TAD (6001 /ENABLE 2 PG HANDLERS DCA .+5 TAD TMP1 CIF 10 JMS I P200 FETCH 0 JMP FETERR TAD .-2 NOFET, DCA HANADR JMP I GETHAN FETERR, JMS I TYPTXT USRMSG TAD (FETCH JMS I (OCTOUT JMP I GETCD /ABORT /COMMAND TYPDEV, 0 AND P17 TAD (DMTBL-1 DCA TMP0 TAD I TMP0 DCA .+2 JMS I TYPTXT 0 JMP I TYPDEV PAGE COMPAR, JMS I RDSWIT CSTBL TAD I (OUTTBL DCA USRDEV TAD USRDEV DCA CD1 TAD (INTBL DCA INPTR TAD I NAME SNA CLA JMP CDEV TAD (LOOKUP JMS I USR TAD SBLK DCA CD1+2 TAD I INPTR DCA CD2 CDF 10 TAD I (7620 CDF DCA CD2+2 JMS DOCOMP CDEV, JMP I GETCD DOCOMP, 0 LOP14, JMS I (READ CD1 JMP I GETCD TAD (2400 DCA I (IOLST+1 JMS I (READ CD2 JMP CERR CLA CMA DCA BADB TWOK DCA I (IOLST+1 TAD (1777 DCA NDX0 TAD (2377 DCA NDX1 TAD (-400 DCA ZCNT CDF 10 LOP13, TAD I NDX0 CIA TAD I NDX1 SZA CLA JMP BADCOM LOP15, ISZ ZCNT JMP LOP13 CDF ISZ CD1+2 ISZ CD2+2 ISZ FLEN JMP LOP14 JMP I DOCOMP BADCOM, CDF ISZ BADB JMP BYBLK TAD CD1 JMS I TYDEV TAD CD1+2 JMS I (OCTOUT TAD CD2 JMS I TYDEV TAD CD2+2 JMS I (OCTOUT JMS I CRLF BYBLK, TAD BADFO SZA CLA JMP I GETCD TAD BADBO SZA CLA JMP DOMORE TAD (400 TAD ZCNT JMS I (OCTOUT TAD NDX0 DCA TMP0 CDF 10 TAD I TMP0 CDF JMS I (OCTOUT TAD NDX1 DCA TMP0 CDF 10 TAD I TMP0 CDF JMS I (OCTOUT JMS I CRLF DOMORE, JMS I CHKC CDF 10 JMP LOP15 CERR, TWOK DCA I (IOLST+1 JMP I GETCD CD1, 0;1;0 CD2, 0;1;0 BADB, 0 BADBO, 0 BADFO, 0 ZCNT, 0 PAGE /FILE EDITOR FOR OS/8. FED, TAD I (OUTTBL AND P17 DCA USRDEV TAD I NAME SZA CLA JMP ITSNAM TAD USRDEV TAD (DLTBL-1 DCA TMP0 TAD I TMP0 DCA FLEN DCA SBLK JMP .+3 ITSNAM, TAD (LOOKUP JMS I USR DCA SRWD CLA CMA DCA MSKWD DCA MODF TAD USRDEV DCA OUDEV IAC DCA OUDEV+1 JMS I (RD LOP16, JMS I (GINP JMS I (G6BIT JMP GOTCMD DCA ENDCT TAD (CMDTBL-2 DCA NDX0 ISZ NDX0 TAD I NDX0 CIA TAD ENDCT SZA CLA JMP .-5 TAD I NDX0 DCA CMDTBL-1 GOTCMD, JMS I CMDTBL-1 JMP LOP16 QMARK CMDTBL, 2200 R 2700 W 0300 C 2300 SR 1700 O 0500 EX ENDCT, 0 QMARK QMARK, 0 TAD (277 JMS I (LSPPCH JMS I CRLF JMP I QMARK C, 0 /STATUS COMMAND TAD RBLK JMS I (OCTOUT TAD MODF SNA CLA JMP .+3 TAD (306 JMS I (LSPPCH TAD MODB SNA CLA JMP .+3 TAD (302 JMS I (LSPPCH TAD (240 JMS I (LSPPCH TAD CLOC JMS I (OCTOUT TAD SRWD JMS I (OCTOUT TAD MSKWD JMS I (OCTOUT JMS I CRLF JMP I C PAGE GETC, 0 /GET AN INPUT TAD I BUFPTR /CHAR TAD EOLWD SNA CLA JMP I GETC TAD I BUFPTR DCA INCHR ISZ BUFPTR TAD INCHR TAD (-254 /, SNA CLA JMP I GETC ISZ GETC TAD INCHR JMP I GETC G6BIT, 0 /8 TO 6 BIT JMS GETC JMP I G6BIT AND (77 RTL CLL RTL RTL DCA TMP0 JMS GETC JMP EX6 AND (77 TAD TMP0 DCA TMP0 JMS GETC JMP EX6 JMS BUPTR JMS BUPTR JMS BUPTR JMP I G6BIT EX6, TAD TMP0 ISZ G6BIT JMP I G6BIT GOCTAL, 0 /GET OCTAL DIGIT TAD BUFPTR DCA TMP2 JMS GETC JMP I GOCTAL JMS BUPTR LOP17, DCA TMP1 JMS GETC JMP FOCT TAD (-260 DCA TMP0 TAD TMP0 AND (7770 SNA CLA JMP .+4 TAD TMP2 DCA BUFPTR JMP I GOCTAL TAD TMP1 RTL CLL RAL TAD TMP0 JMP LOP17 FOCT, ISZ GOCTAL TAD TMP1 JMP I GOCTAL BUPTR, 0 CLA CMA TAD BUFPTR DCA BUFPTR JMP I BUPTR RD, 0 /READ A BLK DCA TMP0 /=REL BLK TO DO CLL TAD FLEN TAD TMP0 SNL CLA JMP .+3 JMS I (QMARK JMP I RD TAD TMP0 DCA RBLK TAD RBLK TAD SBLK DCA OUDEV+2 JMS I (READ OUDEV JMP I IOERR DCA MODB DCA CLOC JMP I RD R, 0 /R COMMAND JMS GOCTAL TAD RBLK JMS RD JMP I R W, 0 /WRITE COMMAND TAD MODB SNA CLA JMP .+5 JMS I (WRITE OUDEV JMP I IOERR CLA CMA DCA MODF TAD RBLK IAC JMS RD DCA MODB JMP I W EX, 0 /EXIT TO DECODE TAD MODB SNA CLA JMP I GETCD JMS I (WRITE OUDEV JMP I IOERR JMP I GETCD PAGE GINP, 0 /GET KBRD INPUT TAD MAXLEN DCA OCNT TAD (BUFADR DCA BUFPTR JMS I [LSPRDR AND [177 TAD [200 DCA INCHR TAD INCHR TAD (-212 SNA JMP LFEND TAD (212-203 SNA JMP I [CTRLC0 TAD (203-215 SNA JMP LFEND-1 TAD (215-225 SZA JMP TRYRUB TAD (336 JMS I (LSPPCH TAD (325 JMS I (LSPPCH JMS I CRLF JMP GINP+1 TRYRUB, TAD (225-377 SZA CLA JMP PUTC TAD MAXLEN CIA TAD OCNT SNA CLA JMP GINP+5 CLA CMA TAD OCNT DCA OCNT CLA CMA TAD BUFPTR DCA BUFPTR TAD (334 JMS I (LSPPCH JMP GINP+5 PUTC, TAD INCHR JMS I (LSPPCH TAD INCHR TAD (-240 SNA CLA JMP GINP+5 TAD INCHR DCA I BUFPTR ISZ BUFPTR ISZ OCNT JMP GINP+5 IAC LFEND, DCA I BUFPTR TAD I BUFPTR CIA DCA EOLWD TAD (BUFADR DCA BUFPTR JMS I CRLF JMP I GINP O, 0 /OPEN LOC N JMS I (GOCTAL JMP .+3 AND (377 LOP20, DCA CLOC JMS DOLOC TAD EOLWD SZA CLA JMP I O TAD CLOC IAC AND (377 SZA JMP LOP20 JMS I (W JMP LOP20+1 DOLOC, 0 JMS GETWRD JMS I (OCTOUT TAD (257 JMS I (LSPPCH JMS GINP JMS I (GOCTAL JMP I DOLOC JMS PUTWRD JMP I DOLOC GETWRD, 0 TAD CLOC TAD I (IOLST+1 DCA TMP0 CDF 10 TAD I TMP0 CDF JMP I GETWRD PUTWRD, 0 DCA TMP0 TAD CLOC TAD I (IOLST+1 DCA TMP1 TAD TMP0 CDF 10 DCA I TMP1 CDF CLA CMA DCA MODB JMP I PUTWRD PAGE SR, 0 /SEARCH COMM. JMS I (GOCTAL SKP DCA SRWD JMS I (GOCTAL SKP DCA MSKWD TAD EOLWD DCA ISVEOL DCA MATFLG TAD SRWD AND MSKWD CIA DCA BCC1 CLA CMA DCA SRBFLG LOP18, JMS I (GETWRD AND MSKWD TAD BCC1 SNA CLA JMP SRMAT LOP19, ISZ CLOC TAD CLOC AND (377 SZA CLA JMP LOP18 TAD (377 DCA CLOC TAD ISVEOL SZA CLA JMP EXS JMS I (W TAD CLOC SNA CLA JMP LOP18-2 JMP EXS SRMAT, TAD SRBFLG SNA CLA JMP .+3 TAD RBLK JMS I (OCTOUT CLA CMA DCA MATFLG DCA SRBFLG TAD CLOC JMS I (OCTOUT JMS I CRLF JMS I (DOLOC TAD EOLWD SNA CLA JMP LOP19 EXS, TAD MATFLG SNA CLA JMS I (QMARK JMP I SR SRBFLG, 0 MATFLG, 0 ISVEOL, 0 PAGE /TABLES FOR FPIP DLTBL, -6260 /DEVICE LENGTHS -6260 /FOR UNITS 1-17 0 /SYS,DSK,TTY 0 /LPT -1341;-1341 /DTA0- -1341;-1341 /DTA7 -1341;-1341 -1341;-1341 0 0 0 DMTBL, SYMSG DKMSG TTMSG LPMSG D0MSG D1MSG D2MSG D3MSG D4MSG D5MSG D6MSG D7MSG PPMSG PRMSG CDMSG AMSG, PARMSG PARMSG LTMSG EOTMSG PSTBL, EOTFLG SATOL 200 /E 0 LSPFLG SATOL 1 /L 0 PATFLG SMTOX 400 /P 0;0 CSTBL, BADBO SATOL 2000 /B 0 BADFO SATOL 4000 0;0 TM, 0 0 0 0 0 0 0 0 0 OUTTBL, 1;0 0;0 0;0 0 INTBL, 5;0 0;0 0;0 0;0 0;0 0;0 0;0 0;0 0;0 0 S0FLG, 0 /CM SYMSG, TEXT "SYS:" 0 DKMSG, TEXT "DSK:" 0 TTMSG, TEXT "TTY:" 0 LPMSG, TEXT "LPT:" 0 D0MSG, TEXT "DTA0:" 0 D1MSG, TEXT "DTA1:" 0 D2MSG, TEXT "DTA2:" 0 D3MSG, TEXT "DTA3:" 0 D4MSG, TEXT "DTA4:" 0 D5MSG, TEXT "DTA5:" 0 D6MSG, TEXT "DTA6:" 0 D7MSG, TEXT "DTA7:" 0 PPMSG, TEXT "PTP:" 0 PRMSG, TEXT "PTR:" 0 CDMSG, TEXT "CDR:" 0 EOTMSG, TEXT "END OF TAPE " 0 NTMSG, TEXT "ENTER NEXT " 0 BIGMSG, TEXT "IS TOO BIG FOR " 0 PARMSG, TEXT "PARITY ERROR " 0 LTMSG, TEXT "L/T ERROR " 0 USRMSG, TEXT "USR " 0 IOMSG, TEXT "I/O ERROR " 0 NMSG, TEXT "NEED: " 0 FMSG, TEXT "FOUND: " 0 BEQMSG, TEXT "BAD =BLK" 0 PARADR, 0 *PARADR+41 FNAME, 0;0;0;0;0 FRMADR, 0 *614+FRMADR AAFREE, 0 *6600-10 HDATA, 0 /TYPE (HOLDS /VERS FOR NOW) 0;0;0;0 /NAME 0 /REL BLK 0 /LEN 0 /CONTINUATION /WD 0 FOR NOW BUFADR, 0 LTLEN=124 MXPBLK=40 NBYTS=41 MTHREE=7346 /CLA CLL CMA RTL MTWO=7344 /CLA CLL CMA RAL TWOK=7332 /CLA CLL CML RTR FOURK=7330 /CLL CML CLA RAR FETCH=1 LOOKUP=2 ENTER=3 CLOSE=4 DECODE=5 CHAINE=6 ERROR=7 USRIN=10 USROUT=11 INQUIRE=12 RESET=13 PLS=6026 PSF=6021 RFC=6014 RRB=6012 RSF=6011 DEVRES=7647 ATOL=7643 MTOX=7644 YTO9=7645 IFZERO PTAPE < NSLOTS=S0END-S0FLG > $ |
Added src/os8/uni/CUSPS/FOTP.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 | /3.1 OS/8 V3 FOTP 5-AUGUST-1975 (NOT HALLOWEEN) / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / /WITH FAILSAFE CHANGES NOV 17, 1973 R.L. / FOTP (FILE ORIENTED TRANSFER PROGRAM) H.J. /CORE MAP /FROM TOP OF CORE / FIELD 2 GETS CONDITIONALLY USED AS BUFFER / FIELD 1 / 7777-7600 MONITOR / 7577-4600 INCORE OUTPUT DIRECTORY / 4577-2000 FOTP CODE / 1777-0 RESIDENT USR / / FIELD 0 / 7777-7600 MONITOR / 7577-7200 ERROR MESSAGES / 7177-0 WORK AREA AS: / / AT TOP- OUTPUT HANDLER IF NEEDED / 1 OR 2 PAGES / INPUT HANDLER IF NEEDED / 1 OR 2 PAGES / INPUT DEVICES DIRECTORY / (ONLY USED PORTION) / THE TRANSFER BUFFER IN 8K / IS WHAT EVER REMAINS. /FIXES FOR MAINTENANCE RELEASE: (S.R. 5-AUG-75) /1. CHANGED COPYRIGHT DATE /2. INCORPORATED SEQ #1 PATCH (DSN MARCH 1975) / PERMITS FOTP TO RECOVER FROM A MONITOR ERROR 6 / BY UNFAKING THE SYSTEM HANDLER /3. UPDATED FOTP VERSION NUMBER TO V8 /4. ADDED SPACE FOR A PATCH LEVEL /5. ALLOWED /T SWITCH TO WORK IN CONJUNCTION WITH /R /6. PERMITS RENAMING A FILE TO IT'S OWN NAME /7. IF NO OUTPUT DEVICE IS SPECIFIED WITH /R, / ASSUME OUT DEV=INPUT DEVICE. /8. FIXED BUG RE ADDITIONAL INFO WORDS /ADDED THE PATCH FROM DSN 21.19.1 TO ALLOW FOTP TO KNOW ABOUT LARGE /DIRECTORIES. /PAGE 0 LOCATIONS OS/8 USR WON'T MANGLE PTR=20 CNT=21 INFPTR=22 OUHAND=23 INHAND=24 FPAGE=25 EPTR=26 INSCNT=27 TEMP=30 OKFLAG=31 IFCNT=32 BUFSIZ=33 INFWDS=34 BDPTR=35 GPTR1=36 INEOF=37 /AUTO INDEX REGISTERS USR WILL ALLOW ME TO USE TEMPORARILY XR=10 XR1=11 XR2=12 /VARIOUS CONSTANTS THAT CAN BE GENERATED AC2=CLA CLL CML RTL AC4000=CLA CLL CML RAR ACM2=CLA CLL CMA RAL ACM3=CLA CLL CMA RTL / LOCATIONS REFERENCED IN OS/8 ALTOPT=7642 OPT1=7643 OPT2=7644 DATE=7666 DIRKEY=7 /"DIRECTORY SEGMENT IN CORE" KEY /SYMBOLIC FOTP LOCATIONS: OUBUFR= 4600 /OUTPUT BUFFER - IN FIELD 1 INBUFR= 0 /INPUT BUFFER - IN FIELD 0 LSTFPG= 7000 /FIRST LOC OF LAST FREE PAGE IN FIELD 0 FAKHND= 200 /LOCATION OF OS/8 FAKEOUT HANDLER VERSION= 11 /VERSION NUMBER SUBVER= 02 /SUB VERSION (PATCH LEVEL) /LOCATED AT "VERLOC" AS 60+VERSION^100+SUBVER /STARTS AT 4600 IN FIELD 1 (ONCE ONLY CODE) /SAVE INFO: / .LOAD FOTP(89P) / .SAVE SYS FOTP;14600 FIELD 1 *2000 CDCALL, JMS I (200 /SEE WHAT THE PERSON WANTS FIVE, 5 STAR, 5200 /IN SPECIAL MODE BYPSCD, JMS I (INTERC /CATCH CALLS TO 7600 TAD I (7600 /SAVE USER OUTPUT DEVICE DCA I (USEROD /-FOR LATER / CHECK FOR ? IN OUTPUT SPECIFICATION TAD (-10 /8CHARACTERS TO LOOK AT DCA CNT /CNT HAVING -10 PUTS US AT FIRST CHAR S1C, TAD (7605 JMS I (GTSXBT /GET A CHAR TAD (-"?!7700 /CHECK FOR ? SNA CLA JMP QINO /? IN OUTPUT NOT ALLOWED ISZ CNT JMP S1C / CHECK FOR EMBEDDED * IN ANY SPECIFICATION TAD (7605 S4L, DCA PTR TAD (-10 DCA CNT ACK, TAD PTR JMS I (GTSXBT TAD (-"*!7700 /CHECK TO SEE IF CHARACTER * SZA CLA /SKIP IF IT IS JMP CNTUP /GO LOOK AT NEXT AC2 TAD CNT /ARE WE AT EXTENSION SZA /SKIP IF YES TAD (6 /ARE WE AT START OF FILENAME? SNA CLA /SKIP IF NOT ISZ CNT /BUMP COUNT ONLY IF OK TAD PTR /LOOK AT NEXT CHAR JMS I (GTSXBT SZA CLA /SKIP IF ITS NULL - OK JMP AINO /ERROR CNTUP, ISZ CNT /BUMP TO NEXT CHAR JMP ACK /CONTINUE CHECKING TAD I PTR /ANY MORE INPUT SNA CLA /SKIP IF THERE IS JMP NULLCK TAD FIVE /BUMP TO NEXT ENTRY TAD PTR JMP S4L / CHECK FOR NULL OUTPUT SPECIFICATION AND MAKE *.* NULLCK, TAD I (7601 /WAS OUTPUT FILENAME GIVEN? SZA CLA /SKIP IF NONE JMP DIDEML TAD STAR /PUT AN ASTERISK IN DCA I (7601 /FILENAME TAD STAR DCA I (7604 /AND EXTENSION /THIS CODE SETS A DEFAULT OUTPUT DEVICE ON DELETE DIDEML, TAD I (7600 /IS AN OUTPUT DEVICE SPECIFIED? SZA /SKIP IF NOT JMP ODSPEC /NOTE DEVICE NUMBER IN AC TAD I (OPT1 /CHECK FOR /D AND (400 SZA CLA /SKIP IF NOT /D JMP MOV /OUTPUT=INPUT TAD I (OPT2 /V3C AND (100 /CHECK FOR /R SZA CLA /V3C MOV, TAD I (7605 /WE'LL SUBSTITUTE FIRST INPUT DEVICE FOR USER ODSPEC, AND (17 /CLEAR USER SPECIFIED LENGTH DCA I (7600 /WE KNOW BETTER /THE FOLLOWING BRINGS IN THE OUTPUT DEVICE HANDLER, /READS THE DIRECTORY INTO CORE AND VERIFIES IT. TAD (LSTFPG /SET THE FREE SPACE POINTER DCA FPAGE /TO THE LAST FREE PAGE IN FIELD 0 TAD I (7600 /IS THERE AN OUTPUT DEVICE? SZA /IF NO OUTPUT, DON'T FETCH HANDLER JMS I (ASSIGN /GET THE HANDLER AND ALLOCATE ITS SPACE DCA OUHAND /AC RETURNS HANDLER ENTRY POINT JMS I (ODIRIN /READ IN THE OUTPUT DIRECTORY TAD (7605 /INGIALIZE INPUT POINTER /THIS IS THE BEGINING OF THE INPUT FILE LOOP DOMOIN, DCA INFPTR /POINTER TO CURRENT INPUT TAD I INFPTR /WHEN 0 NO MORE INPUT SNA /SKIP IF MORE TO DO JMP I (ENDCHK /DO END PROCESSING JMS I (ASSIGN /ASSIGN AND ALLOCATE SPACE FOR INPUT HANDLER DCA INHAND /AND SAVE ITS ENTRY ADDRESS /THE FOLLOWING 2 INSTRUCTIONS HELP AVOID ALL KINDS OF /PROBLEMS WITH THE MONITOR. IF A HANDLER GETS LOADED, THE /MONITOR MAKES IT RESIDENT FOR OTHER PEOPLE AND DOESN'T DELETE /ITS RESIDENT STATUS IF A REQUEST IS MADE FOR A NEW HANDLER /TO BE LOADED OVER IT IF THE NEW HANDLER IS ALREADY RESIDENT TAD FPAGE /SAVE FREE SPACE POINTER HERE DCA SFUDG JMP I (PG1 /LINK TO NEXT SECTION SFUDG, 0 ONDERR, JMS I (ERROR ODRERR+40 /ERROR READING OUT DIR AINO, JMS I (ERROR ILLA+40 /ILLEGAL * QINO, JMS I (ERROR ILLQ+40 /ILLEGAL ? PAGE /CHECK FOR NON FILE STRUCTURED INPUT /WE CAN'T HANDLE IT PG1, TAD I INFPTR TAD (7757 DCA TEMP TAD I TEMP /IS FILE STRUCTURED BIT ON SMA CLA /SKIP IF IT IS JMP NFIN /ERROR CIF 0 JMS I INHAND /READ INPUT DEVICES DIRECTORY 1400 IDBUF, INBUFR 1 JMP INDERR /ERROR CDF 0 TAD I IDBUF /MAKE SURE THAT THE CMA CLL /DIRECTORY OF TAD I (INBUFR+2 /THE DEVICE IS CDF 10 /GOOD SNL TAD (-107 //ALLOW FOTP TO RECOGNIZE UP TO 71 (D) ENTRIES //IN A DIRECTORY SEGMENT. DSN 21.19.1 AUG78. /(SEE COMMENT ON TEST IN ROUTINE "ODIRIN") SZL CLA /SKIP IF ITS GOOD JMP BIDIR /ERROR /FIND LAST BLOCK OF DIRECTORY AC2 /LINK TO NEXT SGMENT NUMBER FNDLST, DCA PTR /SAVE IT CDF 0 TAD I PTR /IS THERE ANOTHER SEGMENT? SNA CLA /SKIP IF YES JMP ATIT /NO...WE ARE POINTING TO LAST TAD PTR /BUMP TO NEXT SEGMENT TAD (400 JMP FNDLST /LOOK AGAIN ATIT, ACM3 /AC=7775 AND PTR /AND OUT 2'S BIT TAD (400 /TOTAL SIZE OF IN CORE DIRECTRY CIA /NEGATE FOR ISZ DCA CNT TAD FPAGE /WE ARE GOING TO PACK DIRECTORY TAD (200 /RIGHT UP TO INPUT HANDLER SO TAD CNT /WE GET MAX SIZE TRANSFER BUFFER DCA FPAGE /ADJUSTED FREE CORE POINTER CMA TAD FPAGE DCA XR1 /SET UP PLACE TO MOVE TO CMA DCA XR2 /ALWAYS COMES FROM 0 TAD I XR2 /MOVE DCA I XR1 /IT ISZ CNT JMP .-3 /SET SAME DEVICE FLAG FLAG 4000 IF /D CDF 10 TAD I (OPT1 AND (400 RTL CLL /PUT /D BIT INTO AC 0 RAL DCA SDFLG / COUNT NUMBER OF INPUTS FROM SAME DEVICE /ALSO MAKE NULL INPUT FILENAMES *.* /BUT ONLY IF NOT /D TAD INFPTR /OK LETS GO THROUGH DCA PTR /THE INPUT SPECIFICATIONS GETCNT, ISZ PTR /POINT TO FILENAME WORD TAD (3 /SET TEMP TO POINT TO EXTENSION TAD PTR DCA TEMP TAD SDFLG /ARE WE DOING /D K7450, SNA /SKIP IF YES - AC NON 0 TAD I PTR /NO /D - LOOK AT FILENAME SZA CLA /ITS NULL PUT IN *.* JMP NOSUB /DONT CHANGE IT TAD (5200 /MAKE IT * DCA I PTR TAD (5200 /.* DCA I TEMP NOSUB, CLA IAC /TEMP+1 POINTS TO NEW INPUT TAD TEMP DCA PTR /NOTE CNT WAS SET BY ISZ'ING TO ZERO ISZ CNT /KEEP COUNT OF DEVICES IN GROUP TAD I (OPT2 /CHECK FOR /U (UGLY SWITCH) AND (10 SZA CLA /SKIP IN NO /U JMP NOPTIM /WERE FORCED TO DO ONE AT A TIME TAD I PTR /COMPARE DEVICE NUMBERS CIA /IN A GROUPING TAD I INFPTR SNA CLA /SKIP IF NEW GROUP JMP GETCNT /WE'LL DO ALL THE SAME AT ONCE NOPTIM, TAD CNT CIA /NEGATE COUNT DCA INSCNT /AS NUMBER OF INPUTS TO DO AT ONCE TAD PTR /SAVE WHERE TO CONTINUE FOR REST DCA I (MOIN /THE FOLLOWING CHECKS TO SEE IF A OPERATION /IS BEING DONE FROM A DEVICE TO ITSELF TAD I (7600 /GET DEVICE NUMBER TAD (7646 /HANDLER ENTRY POINT TABLE DCA TEMP TAD I INFPTR /GET INPUT ENTRY POINT TAD (7646 DCA PTR TAD I PTR /CHECK INPUT ENTRY POINT AGAINST CIA TAD I TEMP /OUTPUT ENRTY POINT SNA CLA /SKIP IF THEY ARE DIFFERENT ISZ SDFLG /SET SAME DEVICE FLAG, AC11 TAD FPAGE /SET POINTER TO DCA BDPTR /START OF DIRECTORY DCA TYPFND /CLEAR FOUND FILE FLAG JMP I (NBLOCK /LINK TO SOME MORE TYPFND, 0 SDFLG, 0 /NEGATIVE MEANS /D, ODD MEANS OUTPUT DEV=INPUT DEV NFIN, JMS I (ERROR NFLEIN+40 /NON FILE STRUCTED INPUT INDERR, JMS I (ERROR BADIRD+40 /ERROR READING INPUT DIR BIDIR, JMS I (ERROR BIDIRM+40 /NOT A GOOD DIRECTORY PAGE /THIS IS THE SUPERQUASIFACETED DIRECTORY PATTERN MATCHING ROUTINE /THE INPUT DIRECTORY IS SEARCHED HERE, IF A MATCH /IS FOUND USING THE INPUT GROUPING /GOT1 GETS CONTROL WITH -BLOCKS IN THE AC NBLOCK, STA TAD BDPTR /POINTER TO START OF DIR BLOCK DCA XR CDF 0 TAD I XR /GET COUNT OF NUMBER OF ENTRIES DCA ENTCNT /SAVE LOCALLY TO AVOID HERB'S BUG TAD I XR /GET BLOCK NUMBER FIRST FILE DCA BLOCK TAD I XR /NEXT SEGMENT NUMBER DCA LFLAG /IF IT 0 WE AT END ISZ XR /SKIP TENTATIVE FILE WORD TAD I XR /GET -NUMBER OF INFO WORDS CIA /MAKE POSITVE DCA INFWDS TAD XR /POINT TO FIRST IAC /ENTRY DCA EPTR BLOOP, TAD I EPTR /GET FILENAME WORD CDF 10 SNA CLA /SKIP IF FILE HERE JMP EMPTY /NO... ITS REALLY AN EMPTY TAD INSCNT /SET NUMBER OF INPUT TO LOOK DCA NCNT /AT ALL AT ONCE DCA MATFLG /CLEAR MATCH FLAG TAD INFPTR /ADDRESS OF FIRST INPUT SKP MN1, TAD GPTR2 /ADDRESS OF CURRENT INPUT TAD (5 /GTSXBT SUBR REQUIRES US TO DCA GPTR2 /POINT TO END OF FIELD TAD EPTR /POINT DIRECTORY POINTER TO TAD (4 /END OF ENTRY FOR SAME REASON DCA GPTR1 TAD GPTR1 /SET EPNEXT TO POINT TO TAD INFWDS /MINUS NUMBER OF BLOCKS IN DCA EPNEXT /FILE WORD TAD (-10 /NUMBER OF CHARS TO LOOK AT WILDNM, DCA CNT MLP, TAD GPTR2 /OK - GET A CHARACTER FROM JMS I (GTSXBT /STRING TAD (-"*!7700 /IS IT AN * SNA /SKIP IF NOT * JMP WILDA /YEP... ITS A WILD CARD TAD ("*-"? /IS IT A ? SNA /SKIP IF NOT JMP WILD /YES... FORCE MATCH ON THIS CHAR TAD ("?&77 /RESTORE VALUE CIA /NEGATE DCA CHAR /AND SAVE TAD GPTR1 /NOW GET CHAR FROM DIRECTORY CDF 0 JMS I (GTSXBT CDF 10 TAD CHAR /DO CHARS MATCH SZA CLA /SKIP IF THEY DO JMP NM1 /NO MATCH ON THIS INPUT WILD, ISZ CNT /BUMP COUNT OF CHARS & POINTER JMP MLP /COMPARE ALL 8 MEXT, ISZ MATFLG /A MATCH!!!!!!! NM1, CLA /WILD CARD COMES HERE WITH ICHY AC ISZ NCNT /HAVE WE CHECKED GROUP OF INPUTS JMP MN1 /NO CHECK WHOLE GROUP TAD MATFLG /HAVE THERE BEEN ANY MATCHES SZA CLA /SKIP IF NOT TAD (4 /WILL INVERT /V SWITCH TAD I (OPT2 /ADD SWITCH AND (4 /ISOLATE IT CDF 0 /SKIPS IF INPUT DIRECTORY ENTRY IS NOT CANDIDATE /THAT IS - IF A MATCH WAS NOT FOUND BETWEEN ANY /OF THE INPUTS AND /V WAS NOT SPECIFIED OR /A MATCH WAS FOUND AND /V WAS SPECIFIED /THIS ALLOWS /V TO MEAN EVERYTHING BUT... SZA CLA TAD I EPNEXT /GET -NUMBER OF BLOCKS CDF 10 SZA /SKIPS IF TENTATIVE OR NOT CANDIDATE JMP I (GOT1 /PROCESS FILE NENT, TAD EPNEXT /POINT EPTR TO BLOCK DCA EPTR /COUNT OF FILE SKP EMPTY, ISZ EPTR /ON EMPTY MAKE EPTR POINT TO BLOCK COUNT CDF 0 TAD I EPTR /GET BLOCK COUNT CIA /MAKE POSITIVE TAD BLOCK DCA BLOCK /KEEP SUM ISZ EPTR /POINT TO NEXT ENTRY ISZ ENTCNT /BUMP THE NUMBER OF ENTRIES JMP BLOOP /NOT DONE WITH SEGMENT CDF 10 TAD (400 /BUMP TO NEXT SEGMENT TAD BDPTR DCA BDPTR TAD LFLAG /DID WE PROCESS LAST SEGMENT SZA CLA /SKIP IF WE DID JMP NBLOCK /PROCESS NEW SEGNENT TAD I (SFUDG /RESET FREE CORE POINTER DCA FPAGE /TO PRESERVE INPUT HANDLER IF PRESENT JMP I (SAYNON /HANDLE WILD CARDS WILDA, TAD CNT /GET CURRENT CHAR POSITION TAD (6 /ADD SIZE OF FILENAME SPA /SKIP IF IN EXTENSION FIELD JMP WILDNM /THIS BUMPS TO EXTENSION JMP MEXT /THIS MEANS IT HAS TO BE A MATCH CHAR, 0 EPNEXT, 0 GPTR2, 0 LFLAG, 0 NCNT, 0 BLOCK, 0 MATFLG, 0 ENTCNT, 0 PAGE GOT1, DCA IFCNT /-# OF BLOCKS IN AC JMS I (DATCHK /VERIFY IF /C OR /O ALSO MATCH ISZ I (TYPFND /COMES BACK IF THEY DO - /TURN OFF NO FILES MSG FOR THIS INPUT GROUP TAD I (OPT2 /CHECK FOR /T AND (20 SNA CLA /SKIP IF /T TAD INFWDS /SEE IF DATE PRESENT CDF 0 SZA CLA /SKIP IF NO DATE OR /T TAD I GPTR1 CDF 10 SZA /SKIP IF NO DATE OR /T DCA I (DATE /GIVE MONITOR FILES DATE TAD (-4 /MAKE 2 COPIES DCA CNT /OF THE INPUT CMA /FILE NAME IN TAD EPTR /FIELD 1 TO DCA XR /WORK WITH THEM TAD (SPOT-1 /MAKE THEM AT SPOT DCA XR1 /AND SPOT1 TAD (SPOT1 /SPOT1 WILL ALWAYS DCA PTR /CONTAIN THE ORIGINAL MOVENT, CDF 0 /AND SPOT WILL TAD I XR /CONTAIN THE CDF 10 /UPDATED VERSION AS DCA I PTR /REFLECTED FROM TAD I PTR /THE OUTPUT SPECIFICATION ISZ PTR /- DCA I XR1 /- ISZ CNT /- JMP MOVENT /- TAD I (7601 /GET OUTPUT FILENAME TAD (-5200 /WAS IT * SNA CLA /SKIP IF NOT JMP TSTEXT /YES... LEAVE FILENAME ALONE TAD I (7601 /REPLACE INPUT NAME DCA I (SPOT /WITH GIVEN TAD I (7602 /OUTPUT DCA I (SPOT+1 /SPECIFICATION TAD I (7603 DCA I (SPOT+2 /- TSTEXT, TAD I (7604 /SEE IF EXTENSION TAD (-5200 /WAS * SNA CLA /SKIP IF IT WASNT JMP .+3 /LEAVE INPUT DEFAULT ALONE TAD I (7604 /REPLCE EXTENSION DCA I (SPOT+3 /WITH GIVEN EXTENSION DCA TRFLG /CLEAR THE TRANSFER FLAG TAD I (OPT2 /IS /R ON? AND (100 TAD I (SDFLG /OR /D OR INPUT DEV=OUTPUT DEV? SNA /SKIP IF ANY JMP SETGD /WE ARE DEFINITELY OK SMA CLA /IF /D THEN CHECK OUTPUT TAD (SPOT1-SPOT /OTHERWISE INPUT JMS I (LOOKUP JMP NSETGD /NO OUTPUT FILE GIVEN SNA /AC=BLOCK NO OF FILE OR 0 IF NONE JMP I (NENT /NO FILE - DO NOTHING DCA TEMP /SAVE - WE MIGHT NEED IT TAD I (SDFLG /IF OPERATION IS TRANSFER THEN /TRFLG IS SET IF FILE HAS NOT /MOVED; IF /D TRFLG MUST NOT BE /SET ; WE DONT CARE ABOUT /RENAME - ITS IRRELEVANT. SMA CLA /SKIP IF /D- WILL CAUSE TRFLG=0 TAD TEMP /GET THE BLOCK FILE IS NOW AT CIA /CHECK AGAINST ORIGINAL TAD I (BLOCK /LOCATION SNA CLA /SKIP IF IT MOVED - NOTE THAT /IF THIS SKIPS THE USER IS DOING /A PLAY WITH DEATH OPERATION SETGD, ISZ TRFLG /ENABLE TRANSFERING OF THE FILE NSETGD, TAD I (SDFLG /SET UP TO PROMPT OR LIST SPA CLA /SKIP IF NOT /D TAD (SPOT-SPOT1 /USE OUTPUT NAME TAD (SPOT1+4 /USE INPUT NAME JMS I (PRINTE /SEE IF HE WANTS TO BE PROMPTED FLSRSM, TAD I (OPT2 RTL /PUT /N INTO LINK AND (400 /ISOLATE /R OPTION SZA CLA /SKIP IF NOT /R JMP I (RENAME /GO TO RENAME CODE TAD I (SDFLG /CHECK FOR NO /D AND SAME DEV SPA SNA CLA /SKIP IF NO /D AND SANE DEV TAD I (7600 /IS THERE AN OUTPUT? SNA SZL /SKIP IF NO /N AND OUTPUT DEV /DIDNT SKIP IF NO /D AND SAME DEVICE JMP NODEL /DONT DELETE JMS I (FAKUSR /FAKE USR HANDLER CALLS JMS I (200 /CALL USR 4 /CLOSE SPOT /OUTPUT FILE NAME 0 CLA SKP /O.K. TO GET CLOSE ERROR NOW ISZ I (WRTDIR /SIGNAL CHANGE MADE TO DIRECTRY JMS I (UNFAK /FIXUP HANDLER ADDRESS AGAIN NODEL, CLA TAD TRFLG /SET AC NOT 0 IF TRANSFER GO AHEAD JMP I (NPG /LINK TO SOME MORE TRFLG, 0 PAGE /THIS PAGE OF CODE PERFORMS FILE MOVES FROM /INPUT TO OUTPUT NPG, SNA CLA /SKIP IF WE CAN DO TRANSFER JMP NFUNCT /GO PROCESS NEXT ENTRY /THE FOLLOWING SMALL STRANGE PIECE OF CODE /DYNAMICALLY ALLOCATES THE BUFFER ACCORDING /TO THE FREE SPACE IN FIELD 0 (INCLUDING /DIRECTORY SHRINKING) OR ALLOCATES 15 BLOCKS /IN FIELD 2 IF ITS AVAILABLE. F2C1, TAD (7400 /BECOMES TAD EPTR IF ONLY 8K AND (7400 /CALCULATE FREE SPACE RAL CLL /SIZE RTL /AND SAVE RTL /IT DCA BUFSIZ TAD IFCNT /SET THE OUTPUT CIA /FILE COUNT DCA OFCNT /AS POSITIVE NIMBER OF BLOCKS TAD OFCNT /SET THE NUMBER AND (7400 /OF BLOCKS SNA CLA /UP FOR ENTER TAD OFCNT /IF IT IS LESS RTL CLL /THAN 256 OR RTL /SET IT TO 0 DCA TEMP /FOR FILES GREATER THAN 256 TAD (SPOT /SET THE ADDRESS OF THE DCA SBLKN /OUTPUT NAME TAD I (7600 /IS THERE AN OUTPUT FILE? SNA /SKIP IF THERE IS JMP NFUNCT /DO NO TRANSFER TAD (7757 /INDEX INTO TENTATIVE FILE DCA MSIZE /TABLE IN ORDER TO TAD I MSIZE /CLEAR OUT ANY AND (7770 /TENTATIVE WE DONT WANT DCA I MSIZE /THIS COMES IF AN I/O ERROR HIT TAD I (7600 /DO THE ENTER JMS I (FAKUSR /MAKE USR USE IN CORE HANDLER TAD TEMP /ADD IN BLOCK COUNT JMS I (200 3 /ENTER SBLKN, SPOT MSIZE, 0 JMP I (NOROOM /ENTER FAILED TAD I (SVDATE /RESTORE REAL DATE TO MONITOR DCA I (DATE JMS I (UNFAK /REMOVE OUR FAKE HANDLER JMS I (ADDINF /COPY ADDITIONAL INFO WORDS TAD IFCNT /SEE IF ENTER SIZE STL CIA /GIVEN BACK IS TAD MSIZE /ENOUGH - HANDLES >255 AND SNL SZA CLA /NON FILE STRUCTURED JMP I (NOROOM /LENGTHS. NOT ENOUGH DCA INEOF /CLEAR INPUT END OF FILE TAD SBLKN /SET THE OUTPUT BLOCK NUMBER DCA OBLCKN TAD I (BLOCK /SET THE INPUT BLOCK NUMBER DCA BLOCKN /THE FOLLOWING PIECE OF CODE IS A TRICKY PIECE /THAT CALCULATES THE NUMBER OF BLOCKS TO READ MOVEIT, TAD IFCNT /GET THE NUMBER OF BLOCKS CLL /ITS NEGATIVE TAD BUFSIZ /ADD ON BUFFER SIZE SNL /SKIP IF MORE ROOM AVAILABLE THAN NEEDED DCA IFCNT /OTHERWISE RESAVE NEW COUNT SZL /SKIP IF NOT AT END OF FILE ISZ INEOF /SET END OF FILE INDICATOR CIA /MAKES -BUFSIZ+COUNT TAD BUFSIZ /MAKES COUNT OF NUMBER OF BLOCK RTR CLL /BUILD THE RTR /INPUT CONTROL RTR /WORD F2C2, TAD (20 /BECOMES NOP IF ONLY 8K DCA INCTLW /SET INPUT CONTROL WORD JMS I (CINTER /CHECK FOR ^C SKP /SKIP IF NOT JMP I (CTCDE /ABORT OPERATION CIF 0 JMS I INHAND /READ INPUT HUNK INCTLW, 0 0 BLOCKN, 0 JMP I (RDERR /WELL- SCRATCH THAT FILE TAD BLOCKN /UPDATE BLOCK COUNT TAD BUFSIZ DCA BLOCKN AC4000 /SET THE OUTPUT TAD INCTLW /CONTROL WORD DCA OUCTLW JMS I (CINTER /CHECK FOR ^C SKP /SKIP IF NOT JMP I (CTCDE /ABORT OPERATION ISZ I (MUSTWT /SIGNAL REAL OUTPUT DONE CIF 0 JMS I OUHAND /WRITE A HUNK OF FILE OUCTLW, 0 0 OBLCKN, 0 JMP I (WRTERR /WHAT A CRUMBY OUTPUT DEVICE TAD OBLCKN /UPDATE THE TAD BUFSIZ /OUTPUT FILE DCA OBLCKN /BLOCK NUMBER TAD INEOF /SEE IF THATS ALL FOLKS SNA CLA /SKIP IF WE TRANSFERED FILE JMP MOVEIT /DO SOME MORE TAD I (7600 /OK - LETS MAKE IT PERMANENT JMS I (FAKUSR /TELL USR TO USE INCORE HANDLER JMS I (200 4 /CLOSE SPOT OFCNT, 0 JMP I (CLOERR /THIS IS IMPOSSIBLE (I HOPE) JMS I (UNFAK /ENABLE SYSTEM USE OF REAL HANDLER ISZ I (WRTDIR /SET WE CHANGED DIRECTORY FLAG NFUNCT, JMP I (NENT /I KNOW ITS INEFFICIENT TO JUMP HERE /BUT- IT'S CLEAN... PAGE /HERE COMES GOBBS AND GOBBS OF GOODY LITTLE ROUTINES /FIRST WE HAVE A NICE LITTLE ROUTINE WHICH WILL DO /HANDY LITTLE THINGS LIKE FETCH A HANDLER /AND IN ADDITION ALLOCATE THE SPACE FOR IT. /JUST IMAGINE THIS CAN BE YOURS FOR THE LOW LOW PRICE /OF 23 INSTRUCTIONS ASSIGN, 0 DCA TEMP /SAVE DEVICE NUMBER TAD TEMP JMS I (200 12 /INQUIRE ABOUT HANDLER HADDR1, 0 JMP I (CLOERR /CANT HAPPEN (I HOPE) TAD HADDR1 /DID WE GET BACK ADDRESS SZA /SKIP IF NOT- NON-RESIDENT JMP I ASSIGN /YES... RETURN ITS ENTRY POINT SKP TWOPAG, IAC /TURN ON 2-PAGE BIT TAD FPAGE /GET FREE SPACE POINTER DCA HADDR2 /SET FOR FETCH TAD FPAGE /TAKE AWAY TAD (-200 /PAGE FROM DCA FPAGE /FREE SPACE TAD TEMP /GET DEVICE NUMBER JMS I (200 1 /FETCH HADDR2, 0 JMP TWOPAG /FAILED- MUST BE 2-PAGER TAD HADDR2 /RETURN ENTRY POINT ADDRESS JMP I ASSIGN /THIS UTILITY ROUTINE RETURNS A SIS BIT /CHARACTER FROM ANY FIELD (SET ON ENTRY) /FROM ADDRESS IN AC-COUNT(IN HALF WORDS) GTSXBT, HLT CLL RAL /DOUBLE POINTER ADDRESS TAD CNT /ADD NEGATIVE DISPLACEMENT CML RAR /GET WORD ADDRESS AGAIN DCA TEMP /SAVE IT TAD I TEMP /GET WORD SNL /SKIP IF WE WANT RIGHT HALF JMS ROTR6 /MAKE LEFT HALF RIGHT HALF AND (77 /GET LOW SIX BITS JMP I GTSXBT ROTR6, 0 RTR RTR RTR JMP I ROTR6 /THIS TAKES A SIX BIT CHAR IN AC AND CONVERTS /IT TO ASCII TO TYPE IT CONVTP, HLT SZA /CONVERT 0 TO BLANKS TAD (240 AND (77 TAD (240 JMS I (TYPE /TYPE IT JMP I CONVTP /TYPE TAKES A CHARACTER IN THE AC AND CALLS /TTY TO TYPE IT IF ^O IS NOT IN AFFECT /ALSO CHECKS FOR ^C AND ^P TYPE, HLT DCA READKB /SAVE CHARACTER JMS I (CINTER /SEE IF ^C SKP /NO JMP I (CTCDE /ABORT OPERATION IF ^C OR ^P TAD (217 /^O JMS I (CTYPE /SEE IF TYPED SKP /SKIP IF NOT DCA ECHO /CLEAR ECHO SWITCH TAD ECHO /IS ECHO IN EFFECT SNA CLA /SKIP IF YES JMP I TYPE /IGNORE CHARACTER IF ^O TAD READKB /TYPE CHAR JMS TTY JMP I TYPE TTY, 0 DCA TCHAR /SAVE CHAR TAD TCHAR /GET CHAR BACK /** NEXT 4 LOCATIONS REPLACED IF BATCH ACTIVE BY: TTYOUT, TLS /** SKP TSF /** 7400 /ADDRESS OF BATCH OUTPUT ROUTINE JMP .-1 /** CIF TOPFIELD CLA /** JMS I .-2 TAD TCHAR /GET CHAR AGAIN TAD (-215 /IF WE JUST TYPED A C.R. TYPE SZA CLA /A L.F. JMP I TTY TAD (12 JMP TTY+1 TCHAR, 0 /GET A CHARACTER FROM KEYBOARD AND /CHECK FOR ^C AND ^P READKB, HLT KSF JMP .-1 JMS I (CINTER /IS IT ^C SKP /SKIP IF NOT JMP I (CTCDE /YES KRB /READ IT AND (177 /AND GET RID OF TAD (200 /PARITY JMP I READKB /ROUTINE TO MAKE SURE USER SPECIFIED //C AND /O SWITCHES CAUSE CORRECT MATCH WITH DATE DATCHK, 0 TAD I (OPT1 /CHECK /C JMS MDATE NOP /RETURN HERE WITH AC=0 IF NO /C SZA CLA /RETURN HERE WITH AC=0 IF DATES MATCH JMP I (NENT /DATES DONT MATCH AND /C GIVEN TAD I (OPT2 /CHECK /V JMS MDATE CMA CLA /SET AC=-1 IF NO /V SNA CLA /RETURN HERE AC=0 IF DATES SAME JMP I (NENT /DATES SAME WITH /V-IGNORE FILE JMP I DATCHK /CONTINUE MDATE, 0 //O AND /V ARE AC2 RTL /IS IT OPTION ON? SMA CLA /SKIP IF IT IS JMP I MDATE /NO- RETURN WITH 0 AC ISZ MDATE /SKIP RETURN CDF 0 TAD I GPTR1 /GET DATE WORD CIA CDF 10 TAD I (SVDATE /COMPARE WITH MONITORS, 0 IF = JMP I MDATE ECHO, 1 PAGE /THIS IS THE CORE DEVICE HANDLER /THE USR IS MADE TO COME HERE BY A CALL TO FAKUSR. /THIS HANDLER SWAPS THE DESIRED BLOCK INTO /THE USR AREA AND WRITES THE BLOCK BACK INTO THE /INCORE DIRECTORY. /THE CODE SET UP IN FIELD 0 TO CALL THE HANDLER IS: / *FAKHND / 0 /ENTRY POINT / TAD FAKHND /GET RETURN ADDRESS / CIF CDF 10 / JMP I .+1 /PLOP UP TO BODY OF HANDLER IN FIELD 1 / FAKBDY FAKBDY, DCA RETLOC /SAVE ARGUMENT ADDRESS TAD I RETLOC /GET CONTROL WORD RAL /R/W BIT INTO LINK CLA RAL /R/W BIT INTO AC11 TAD DCAXR1 /IF WRITE MAKE DCA XR2 ELSE XR1 DCA DCASPT /SAVE WHERE WE NEED IT ISZ RETLOC /BUMP TO LOCATION (ALWAYS 1400 FROM USR) ISZ RETLOC /BUMP TO BLOCK NUMBER TAD I RETLOC /GET IT ISZ RETLOC /BUMP TO ERROR RETURN ISZ RETLOC /NOW TO GOOD RETURN (WE WONT FAIL) CLL RTR /MULTIPLY BY 400(8) RTR RAR TAD (4177 /ADD ON TO BEGINING OF DIRECTRY DCAXR1, DCA XR1 /SAVE IN BOTH XR1 TAD XR1 DCA XR2 /AND XR2 TAD (1377 /NOW SAVE USR BLOCK AREA DCASPT, HLT /IN EITHER XR1 OR XR2 (R OR W) TAD (-400 /SET WORD TRANSFER COUNT DCA CNT TAD I XR2 /GET A WORD DCA I XR1 /PUT A WORD ISZ CNT JMP .-3 JMP I RETLOC /GO BACK TO USR /THIS ROUTINE DOES THE SETUP OF THE INCORE /DIRECTORY HANDLER AND CHANGES THE REAL /HANDLERS ENTRY POINT IN THE MONITOR SO THAT /THE USR WILL CALL IT. FAKUSR, 0 DCA UNFAK /SAVE DEVICE NUMBER TAD UNFAK /INDEX INTO MONITORS RESIDENCY TAD (7646 /TABLE DCA TABAD TAD WRTDIR /SEE IF DEVICE HAS DIRECTORY SPA CLA /SKIP IF IT DOES JMP NOSUBST /!!!DONT CHANGE IF NON-FILE DEV TAD (FAKHND /PUT OUR HANDLERS ADDRESS IN DCA I TABAD /MONITORS TABLE NOSUBST,CDF 0 TAD (1200 /PUT IN HANDLER INTERFACE CODE DCA I (FAKHND+1 /INTO FIELD 0 AS GIVEN ABOVE TAD (CIF CDF 10 DCA I (FAKHND+2 TAD (5604 DCA I (FAKHND+3 TAD (FAKBDY DCA I (FAKHND+4 CDF 10 TAD UNFAK /RETURN WITH DEVICE NUMBER IN AC JMP I FAKUSR UNFAK, 0 CLA /V3C TAD OUHAND /RESET MONITORS TABLE TO DCA I TABAD /POINT TO REAL HANDLER DCA TABAD /V3C JMP I UNFAK TABAD, 0 RETLOC, 0 /ENTER HERE IF A BRANCH TO 7600 OR 7605 OCCURS FIXDIR, JMS UNFAK /JUST IN CASE JMS I (CINTER /CHECK FOR ^C NOP AC4000 /EITHER WAY GO BACK TO DCA I (ALTOPT /MONITOR BUT AFTER WE HANDLE DIRECTORY CTCDE, TAD MUSTWT /IS MUST WRITE SET? SNA CLA /SKIP IF /Q OR MUST WRITE TAD WRTDIR /CHECK TO SEE IF WE HAVE TO SPA SNA CLA /WRITE THE DIRECTORY JMP ENDCHK /CONTINUE DCA WRTDIR /KEEP OLD DIRECTORY JMS I (ERROR /TELL HIM DSVED+40 ENDCHK, ISZ I (ECHO /TURN ON ECHO JMS DIROUT /WRITE OUT THE OUTPUT DIRECTORY JMS I (RESTORE /RESTORE 7600 IN FIELD 0 TAD I (OPT2 /GET OPTION /W RTR SNL CLA /SKIP FOR VESION NUMBER JMP NOVER DCA I (OPT2 /STOPS RECUSION WITH ^P JMS I (ERROR /PRINT VERSION NUMBER VERNO+40 TAD (215 JMS I (TYPE NOVER, TAD I (ALTOPT /GO BACK TO MONITOR? SMA CLA /SKIP IF YES JMP I (CDCALL /CALL THE CD AGAIN CIF CDF 0 /RETURN TO MONITOR JMP I (7605 MUSTWT, 0 SVDATE, 0 WRTDIR, 0 DIROUT, 0 /ROUTINE TO WRITE THE OUTPUT DIRECTORY TAD WRTDIR /AC>0 IF WE HAVE TO WRITE IT SPA SNA CLA /SKIP TO WRITE DIRECTORY JMP I DIROUT CIF 0 JMS I OUHAND /WRITE DIRECTORY BACK ONTO DEVICE 5410 4600 1 JMP I (ODERR /IS HE IN TROUBLE... DCA WRTDIR /CLEAR WRITE DIRECTORY FLAG JMP I DIROUT /RETURN PAGE /ROUTINE WHICH ECHOES ^(CHAR) AND SKIP RETURNS IF /ONE WE WANTED CTYPE, 0 DCA T2 /SAVE CHARACTER TAD (200 /GT RID OF PARITY KRS /SEE WHATS IN BUFFER CIA TAD T2 /COMPARE AGAINST DESIRED ONE SNA CLA /SKIP IF NOT ONE KSF /IS FLAG UP? JMP I CTYPE /NO... JUST RETURN KCC /CLEAR CHARACTER TAD ("^ /OUTPUT ^ JMS I (TTY TAD T2 TAD (100 /CHAR JMS I (TTY TAD (215 JMS I (TTY ISZ CTYPE /SKIP RETURN JMP I CTYPE T2, 0 /ROUTINE USED TO DETERMINE IF ^C OR ^P TYPED CINTER, 0 TAD (203 /CHECK FOR ^C JMS CTYPE JMP UPPCK /NO CHECK FOR ^P JMP SPURGE /YES SET ALTMODE BIT UPPCK, TAD (220 JMS CTYPE JMP I CINTER /NOT EITHER ^P OR ^C SKP /IF ^P CLEAR ALTMODE BIT SPURGE, CMA /SET BIT DCA I (ALTOPT ISZ CINTER /SKIP RETURN JMP I CINTER /THIS ROUTINE MODIFIES THE THE MONITOR RETURN /LOCATIONS TO COME BACK TO FOTP AND SAVES WHAT /WAS THERE SO RESTORE CAN RESTORE THEM INTERC, 0 TAD I (DATE DCA I (SVDATE /SAVE MONITOR DATE CDF 0 TAD I (7600 /SAVE 7600,7601,7602,7605 DCA SCODE /AND REPLACE WITH TAD (CIF CDF 10 /CIF CDF 10 DCA I (7600 /JMP I .+1 TAD I (7601 /FIXDIR DCA SCODE+1 /7605 GETS JMP 7600 TAD (5602 /THIS ENABLES FOTP TO WRITE DCA I (7601 /OUT DIRECTORY AN MANUAL ABORT TAD I (7602 /OR IF HANDLER PICKS UP ^C DCA SCODE+2 /AND TRIES TO GO TO MONITOR TAD (FIXDIR DCA I (7602 TAD I (7605 DCA SCODE+3 TAD (5200 DCA I (7605 CDF 10 JMP I INTERC /THIS ROUTINE SIMPLY RESTORES THE MONITOR /LOCATIONS TO THEIR ORIGINAL VALUE RESTORE,0 TAD I (SVDATE /RESTORE DATE DCA I (DATE CDF 0 TAD SCODE DCA I (7600 /RESTORE LOCATIONS TAD SCODE+1 DCA I (7601 TAD SCODE+2 DCA I (7602 TAD SCODE+3 DCA I (7605 CDF 10 JMP I RESTORE SCODE, 0;0;0;0 /THIS IS THE MAGIC MESSAGE PRINTER /IT IS ACTUALLY USED MORE THAN JUST FOR ERROR MESSAGES /IF THE MESSAGE ENDS WITH A % THEN THE OPERATION /IS ABORTED OTHERWISE CONTROL IS RETURNED /TO THE CALLER AND NO CRLF IS GIVEN /ALL MESSAGES COMMING THROUGH HERE ARE ECHOED ERROR, 0 CLA CLL /JUNK MIGHT BE IN AC TAD I (ECHO /SAVE ECHO STATUS SO WE CAN DCA I (ECTMP /RESTORE IT AFTER MESSAGE ISZ I (ECHO /TURN ON ECHO TAD (-100 /USED SO WE CAN USE GTSXBT TO DCA CNT /UNPACK THE MESSAGES PLOOP, TAD I ERROR /CONTAINS ADDRESS OF MESSAGE CDF 0 /IN FIELD 0 JMS I (GTSXBT /GET CHARACTER CDF 10 TAD (-45 /IS IT % SNA /SKIP IF NOT JMP CRLF /WE HIT EOM AND CALLER NO WANT CONTROL TAD ("%&77 /RESTORE CHARACTER DCA DFLAG /SAVE IT FOR LATER TAD DFLAG /PRINT IT, 0 PRINTS AS BLANK JMS I (CONVTP ISZ CNT /BUMP TO NEXT CHAR IN MESSAGE TAD DFLAG /ARE WE AT END SZA CLA /SKIP IF WE ARE JMP PLOOP /DO ANOTHER CHARACTER ISZ ERROR /SKIP ADDRESS OF MESSAGE JMP I ERROR /RETURN CRLF, TAD (215 /PRINT CR JMS I (TYPE /LF JMP I (ENDCHK /FINISH PROCESSING DFLAG, 0 PAGE /THIS ROUTINE PRINTS A FILENAME.EXTENSION PNMSUB, 0 DCA NMEPLC /SAVE ADDRESS OF NAME TAD (-10 /SET CHAR COUNT DCA CNT PNLOOP, TAD NMEPLC /GET THE SIXBIT CHAR JMS I (GTSXBT SZA /SKIP IF NULL CHAR JMS I (CONVTP /PRINT CHAR TAD (3 /SEE IF AT START OF TAD CNT /EXTENSION SZA CLA /SKIP IF SO JMP .+3 TAD (". /PRINT THE DOT JMS I (TYPE ISZ CNT JMP PNLOOP /KEEP GOING JMP I PNMSUB NMEPLC, 0 ECTMP, 0 RDERR, JMS I (ERROR INERR+40 /ERROR READING FILE DYSTF1, TAD (SPOT1+4 /PRINT INPUT FILE NAME DYSTUF, JMS I (PNMSUB TAD (215 JMS I (TYPE TAD ECTMP /RESTORE ECHO FLAG AS DCA I (ECHO /SAVED ON ENTRY TO ERROR JMP I (NENT /GO TO NEXT FILE WRTERR, JMS I (ERROR OUERR+40 /ERROR WRITING FILE POUTNM, TAD (SPOT+4 /PRINT OUTPUT FILE NAME JMP DYSTUF NORUMX, JMS I (ERROR /NOT ENOUGH ROOM FOR SPRBLM+40 /FILE ON OUTPUT DEVICE JMP DYSTF1 /ROUTINE WHICH PRINTS NO FILES MSG IF NECESSARY /IT WONT PRINT MESSAGE IF ANY FILE IN A SO CALLED /INPUT GROUP MATCHES(A BUG?) SAYNON, TAD I (TYPFND /GET INPUT MATCH FLAG SZA CLA /SKIP IF NOTHING MATCHED JMP GOBCK /DONT DO MESSAGE TLP, JMS I (ERROR /PRINT MESSAGE NOFILE+40 TAD INFPTR /POINT TO END OF INPUT ENTRY TAD (5 /TO MAKE GTSXBT WORK CORRECTLY DCA INFPTR TAD INFPTR /PRINT THE FILE NAME JMS I (PNMSUB TAD (OTAB-2 /NOW PRINT /V,/C,/O IF DCA XR2 /ANY OF THEM SPECIFIED NOPT1, ISZ XR2 /FIX POINTER WHEN SWITCH NOT ON NOPT, TAD I XR2 /GET ADDRESS OF OPTION SNA /SKIP IF NOT AT END JMP CRIT /WE ARE AT END DCA TEMP TAD I TEMP /GET OPTION WORD AND I XR2 /AND WITH OPTION BIT SNA CLA /SKIP IF OPTION GIVEN JMP NOPT1 /DO ANOTHER TAD ("/ /PRINT / JMS I (TYPE TAD I XR2 /OPTION JMS I (TYPE JMP NOPT /DO ANOTHER CRIT, TAD (215 /END WITH A CRLF JMS I (TYPE TAD ECTMP /RESTORE ECHO FLAG THAT ERROR DCA I (ECHO /SAVED ISZ INSCNT /PRINT MESSAGE FOR ALL FILES JMP TLP /IN GROUP GOBCK, TAD I (USEROD /GET USER SPECIFIED DEVICE SNA CLA /SKIP IF HE GAVE ONE TAD I (SDFLG /IF HE DIDNT WE CANT HANDLE /D SPA CLA /SKIP IF NO /D TAD I MOIN /YEP. /D BETTER NOT BE ANY MORE INPUT SZA CLA /THERE WASN'T - O.K. JMP DELERR /WARN HIM OF THE SHORTCOMING TAD MOIN /GET SAVED INPUT POINTER JMP I (DOMOIN /AND DO SOME MORE INPUTS DELERR, JMS I (ERROR CNTDEL+40 /MULTIPLE DEVICE DELETE TAD (215 JMS I (TYPE JMS I (ERROR CNTDE2+40 USEROD, 0 MOIN, 0 /TABLE OF SWITCHES FOR "NO FILES" MESSAGE OTAB, OPT2 4 "V OPT1 1000 "C OPT2 1000 "O 0 PAGE /THIS ROUTINE HANDLES THE /L AND /Q OPTIONS /IF EITHER IS ON IT PRINTS THE NAME /THEN IF ITS /Q IT PRINTS A ? AND WAITS FOR /A RESPONSE. IF Y IT RETURNS, ANYTHING ELSE /AND IT GOES TO PROCESS THE NEXT DIRECTORY ENTRY PRINTE, 0 DCA I (NMEPLC /SAVE ADDRESS OF NAME TAD I (OPT1 /CHECK /L RAR SZL CLA /SKIP IF NO /L JMP PIT /PRINT NAME TAD I (OPT2 /CHECK /Q AND (200 SNA CLA /SKIP IF /Q JMP I PRINTE /RETURN ISZ I (ECHO /IF /Q FORCE ECHO ON PIT, TAD I (NMEPLC /NOW PRINT FILENAME JMS I (PNMSUB DCA OKFLAG /CLEAR OKFLAG TAD I (OPT2 /WAS IT /Q? AND (200 SNA CLA /SKIP IF /Q JMP FUNCT2 /JUST PRINT CRLF TAD ("? /PRINT ? JMS I (TYPE CMA /SET OKFLAG NO GOOD DCA OKFLAG JMS I (READKB /GET A CHAR TAD (-"Y /IS IT Y? SNA CLA /SKIP ON NO ISZ OKFLAG /IT WAS Y, SET OK AND SKIP TAD ("N-"Y /GET N TAD ("Y /GET Y JMS I (TYPE /ECHO IT FUNCT2, TAD (215 /PRINT CRLF JMS I (TYPE TAD OKFLAG /OKFLG=0 MEANS YES SZA CLA /SKIP IF TO PROCESS FILE JMP I (NFUNCT /SKIP THIS FILE JMP I PRINTE /RETURN ODERR, CLA DCA I (WRTDIR /FIX RECURSION JMS I (ERROR ODIERR+40 /ERROR WRITING DIRECTORY BODIR, JMS I (ERROR BODORM+40 /BAD OUTPUT DIRECTORY CLOERR, JMS I (ERROR SERR+40 /SYSTEM ERROR HLT /DONT LET HIM CONTINUE JMP .-1 /IT CAN ONLY GET WORSE SPOT, ZBLOCK 4 /ROOM FOR OUTPUT FILE NAME SPOT1, ZBLOCK 4 /ROOM FOR INPUT FILE NAME /CODE TO HANDLE OUT OF ROOM CONDITION ON OUTPUT DEVICE NOROOM, JMS I (UNFAK /RESTORE THE REAL OUTPUT HANDLER TAD I (OPT1 AND (100 /CHECK FOR THE /F OPTION SPECIFIED SNA CLA JMP I (NORUMX /NO - GIVE AN ERROR MESSAGE JMS I (DIROUT /FAILSAFING - WRITE OUT THE OUTPUT DIRECTORY JMS I (ERROR /PRINT THE MESSAGE FLSFMS+40 /"MOUNT NEXT OUTPUT VOLUME" JMS I (READKB /GET AN ANSWER CLA /ANY CHAR EXCEPT ^C OR ^P IS YES TAD (215 JMS I (TYPE /PRINT CRLF JMS ODIRIN /READ IN THE NEW OUTPUT DIRECTORY JMP I (FLSRSM /RECOMPUTE THE PENDING TRANSFER. ODIRIN, 0 /SUBROUTINE TO READ IN THE OUTPUT DIRECTORY TAD I (7600 /GET OUTPUT DEVICE NUMBER SNA /IS IT PRESENT? JMP NOUTFL /NO - DON'T READ OUTPUT DIRECTORY TAD (7757 /ADD ADDRESS OF MONITOR TABLE DCA TEMP /TO INDEX INTO IT TAD I TEMP /FILE STRUCTURED BIT IS 0 SMA CLA /SKIP IF DIRECTORY DEVICE JMP NOUTFL /WE DONT WANT TO READ OR WRITE DIRECTORY CIF 0 JMS I OUHAND /READ DIRECTORY 1410 ODBUF, OUBUFR 1 JMP I (ONDERR /ERROR TAD I ODBUF CMA CLL /CHECK FOR LEGAL OUTPUT DIRECTORY - FIRST TAD I (OUBUFR+2 /WORD OF AN OS/8 DIRECTORY IS .LT. 50 SNL /AND THE THIRD WORD MUST BE .LT. 7, TAD (-107 //DSN 21.19.1 AUG 78 TO ALLOW 71 (D) ENTRIES/SEGMENT /SO WE CAN CHECK FOR THE SUM OF THOSE SZL CLA /WORDS BEING .LT. 64 JMP I (BODIR /ERROR - CANT BE DIRECTORY SKP NOUTFL, AC4000 /WRTDIR MINUS MEANS DONT WRITE DCA I (WRTDIR /DIRECTORY DCA I (MUSTWT /CLEAR THE MUST WRITE FLAG DCA DIRKEY /CLEAR THE OS/8 DIRECTORY KEY JMP I ODIRIN /RETURN PAGE /SUBROUTINE TO DO LOOKUPS ON OUTPUT DEVICE /DOES IMMEDIATE RETURN IF NO OUTPUT DEVICE /OTHERWISE RETURNS WITH BLOCK OF FILE IN AC OR /0 IN AC MEANING NOT FOUND OR NON-FILE STRUCTURED DEVICE LOOKUP, 0 TAD (SPOT /ADDRESS OF FILE NAME DCA PLACE TAD I (7600 /GET OUTPUT DEVICE SNA /SKIP IF PRESENT JMP I LOOKUP /NO OUTPUT DEVICE JMS I (FAKUSR /FAKE OUT THE USR JMS I (200 2 /LOOKUP PLACE, SPOT 0 DCA PLACE /NOT FOUND, 0 PLACE JMS I (UNFAK /RESTORE RESIDENT HANDLER ISZ LOOKUP /SKIP RETURN TAD PLACE /WITH BLOCK IN AC JMP I LOOKUP /HERE IS WHAT WE HAVE ALL BEEN WAITING FOR ////////////////////////////////////// / / / RENAME / / / ////////////////////////////////////// RENAME, JMS LOOKUP JMP I (CLOERR /SUPER SYSTEM DISASTER DCA OBLOCK /V3C SAVE BLOCK OF NEW NAME (IF ANY) TAD (SPOT1-SPOT /LOOKUP INPUT FILE JMS LOOKUP JMP I (CLOERR /SUPER SYSTEM DISASTER CIA /LOOKUP INPUT NAME ON OUTPUT DEVICE TAD OBLOCK /IS IT SAME SPOT AS NEW NAME ON OUTPUT DEVICE? SZA CLA /V3C JMS EXERR /NO, MAYBE ALREADY EXISTS TAD I (1404 /GET ADDRESS OF FILE TAD 17 /FROM MONITOR BY THE TAD (-4 /DOCUMENTED METHOD DCA TEMP TAD (SPOT-1 /GET NEW OUTPUT NAME DCA XR1 TAD (-4 /SET UP COUNT OF WORDS TO MOVE DCA CNT RNAM, TAD I XR1 /MOVE THEM DCA I TEMP ISZ TEMP ISZ CNT JMP RNAM /CONTINUE TILL DONE TAD I (1404 /V3C SNA CLA /BUT IS THERE ROOM FOR DATE? JMP NONUDA /NO, NO ADDITIONAL INFO WORDS TAD I (DATE /YES, MOVE DATE DCA I TEMP /INTO NEW FILENAME ENTRY NONUDA, JMS WRKEY /V3C ISZ I (WRTDIR /INDICATE DIRECTORY CHANGED JMP I (NFUNCT /DO NEXT FILE WRKEY, 0 /V9 TAD DIRKEY /GET "SEGMENT IN CORE" KEY AND (7 /ISOLATE SEGMENT NUMBER DCA SEGNO /NUMBER FOR WRITE CIF 0 JMS I 51 /CALL HANDLER USR USED TO DO 4210 /LOOKUP, THIS POINTS TO FOTPS 1400 /INCORE DIRECTORY HANDLER SEGNO, 0 /REWRITE UPDATED DIRECTORY BLOCK JMP I (CLOERR /SYSTEM ERROR JMP I WRKEY EXERR, 0 /BLOCK NUMBERS DIFFERENT TAD OBLOCK /LOOK AT BLOCK NUMBER OF EXISTING FILE SNA CLA /DID IT REALLY EXIST? JMP I EXERR /NO, OK TO RENAME TO THIS NAME JMS I (ERROR /YES, TRYING TO RENAME TO EXISTING NAME RENERR+40 /FILE ALREADY EXISTS JMP I (POUTNM OBLOCK, 0 /TEMPORARY, HOLDS BLOCK NUMBER OF ALREADY /EXISTING FILE WITH SAME NAME AS PROPOSED NEW NAME /ON OUT PUT DEVICE (OR 0 IF NONE) /THIS ROUTINE TRANSFERS THE ADDITIONAL /INFORMATION WORDS OF THE INPUT FILE WHEN COPYING /IT IF THERE ARE ANY ADDINF, 0 CLA IAC /AC=1 TAD I (1404 /GET NUMBER OF WORDS FROM OUTPUT DIRECTORY SMA /SKIP IF 2 OR MORE JMP NOTRAN /WE DONT TOUCH IT DCA LOOKUP /SAVE NEGATIVE NUMBER TO MOVE TAD LOOKUP /ADD NUMBER TO LOC 17 TAD 17 /TO FIND ADDR(SECOND) DCA PPTR1 /USE 17 TAD INFWDS /GET NUMBER OF AIW IN INPUT CIA /NEGATE IAC /ADD 1 SMA /SKIP IF MORE THAN 1 AIW JMP ZEROUT /ZERO OUTPUT AIW DCA TEMP /SAVE COUNT MOVEM, ISZ GPTR1 /BUMP PTR (1ST TIME PAST DATE) CDF 0 TAD I GPTR1 /GET WORD ZLOOP, CDF 10 DCA I PPTR1 /PUT IT INTO OUTPUT DIRECTORY ISZ PPTR1 ISZ LOOKUP /HAS OUTPUT COUNT OVERFLOWED? JMP MORE /MORE OUTPUT TO DO JMS WRKEY /V9 NOTRAN, CLA /EXIT JMP I ADDINF /WERE DONE MORE, ISZ TEMP /BUMP INPUT COUNT JMP MOVEM /IT HASNT OVERFLOWED ZEROUT, CLA CMA /NO MORE INPUT WORDS- DCA TEMP /SO FIX UP TO ZERO REST OF OUTPUT WORDS JMP ZLOOP /DO ALL THE OUTPUTS PPTR1, 0 PAGE /** THIS IS THE STARTING ADDRESS OF FOTP!!! FOTP, JMS INIT /REGULAR ENTRY POINT JMS INIT /CHAIN ENTRY POINT JMP I (CDCALL /CALL COMMAND DECODER JMP I (BYPSCD /DONT CALL COMMAND DECODER INIT, 0 ISZ INIT /DO SKIP RETURN CLA CLL CDF 0 TAD I (7777 /GET BATCH CONTROL WORD AND (70 TAD FCIF0 /FORM CIF TO BATCH FIELD DCA BATCIF TAD I (7777 CDF 10 RTL SNL CLA /BATCH RUNNING? JMP NOBTCH /NO BMOVLP, TAD BATOUT DCA I TTOUTP /MOVE IN SUBSTITUTE TTY OUTPUT CODE ISZ BMOVLP ISZ TTOUTP ISZ TTCNT4 JMP .-5 STA NOBTCH, DCA CORFUJ / =0 IF NO BATCH, -1 IF BATCH MOVMSG, TAD I ONCE /MOVE MSGS TO LOWER FIELD CDF 0 DCA I ONLY CDF 10 TAD I M1 CDF 0 /MOVE CORE DETERMINER DCA I M1 /INTO FIELD 0 ALSO CDF 10 ISZ M1 ISZ ONCE ISZ ONLY ISZ CODE JMP MOVMSG TAD (2000 /SET RESTART LOCATION CDF 0 DCA I (7745 TAD (6403 /SET JSW DCA I (7746 CDF 10 FCIF0, CIF 0 JMS I (CORE TAD CORFUJ /COMPUTE AMOUNT OF CORE EXCLUDING BATCH FIELD TAD (-1 SZA CLA /SKIP IF WE HAVE ONLY 8K (OR 12K AND BATCH) JMP I INIT TAD (TAD EPTR /PATCH LOCATIONS IN FOTP DCA I (F2C1 /TO WORK WITH ONLY 8K TAD (NOP DCA I (F2C2 JMP I INIT /START M1, .&7600 ONCE, MSGS ONLY, LSTFPG+200 CODE, 7400 CORFUJ, 0 TTCNT4, -4 TTOUTP, TTYOUT BATOUT, SKP /OUTPUT TO BATCH LOG 7400 BATCIF, HLT TTYOUT+1&177+4600 /JMS I .-2 /SUBR TO DETERMINE MACHINE SIZE - RETURNS NUMBER OF /BANKS IN AC. /MUST RUN IN FIELD 0. CORE, 0 TAD C6203 RDF DCA CORRTN CDF 0 TAD I (7777 AND (70 SNA /DOES LOCATION 7777 SPECIFY CORE SIZE? JMP CORELP /NO CLL RTR /YES - BELIEVE IT. RAR JMP CORRTN CORELP, CDF 0 /NEEDED FOR PDP-8L TAD TRYFLD /GET FLD TO TST CLL RTL RAL AND COR70 /MASK USEFUL BITS TAD CORELP DCA .+1 /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 7400 /HACK FOR PDP-8,.NO-OP TAD .-1 /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 CORRTN, 0 JMP I CORE CORLOC, COR70+2 /ADR TO TST IN EACH FLD 1400 /7000+7400+1400=0 TRYFLD, 1 /CURRENT FLD TO TST C6203, 6203 PAGE /FOTP'S ERROR MESSAGES /THESE RESIDE IN FIELD 0 LOCATIONS 7200-7577 MSGS, NOPUNCH *LSTFPG+200 ENPUNCH ILLQ, TEXT /ILLEGAL ?%/ ILLA, TEXT /ILLEGAL *%/ SERR, TEXT /SYSTEM ERROR/ RENERR, TEXT /ALREADY EXISTS-/ VERNO, 0617;2420;4026 /FOTP V VERLOC, VERSION+60^100+SUBVER /ONE-DIGIT VERSION NUMBER AND 1 CHAR PATCH LEVEL 0 BADIRD, TEXT /ERROR READING INPUT DIRECTORY%/ ODRERR, TEXT /ERROR READING OUTPUT DIRECTORY%/ ODIERR, TEXT /ERROR WRITING OUTPUT DIRECTORY%/ SPRBLM, TEXT /NO ROOM, SKIPPING-/ INERR, TEXT /ERROR ON INPUT DEVICE-SKIPPING-/ OUERR, TEXT /ERROR ON OUTPUT DEVICE-SKIPPING-/ NFLEIN, TEXT /USE PIP FOR NON-FILE STRUCTURED INPUT%/ NOFILE, TEXT /NO FILES OF THE FORM:/ BIDIRM, TEXT /BAD INPUT DIRECTORY%/ BODORM, TEXT /BAD OUTPUT DIRECTORY%/ CNTDEL, TEXT /DELETES PERFORMED ONLY ON INPUT DEVICE GROUP 1/ CNTDE2, TEXT /CAN'T HANDLE MULTIPLE DEVICE DELETES%/ DSVED, TEXT /ORIGINAL DIRECTORY PRESERVED%/ FLSFMS, TEXT /MOUNT NEXT OUTPUT VOLUME:/ FIELD 1 /SELF-STARTING BINARY LOADER STUFF FOR ABSLDR *FOTP $ |
Added src/os8/uni/CUSPS/FUTIL.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 | /FUTIL - FILE UTILITY - V08A DECIMAL VERSION=08 OCTAL PATCH="B&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. / 9-DEC-2018 LHN / DSN 35.13.1 applied here to correct the starting address / and job status word when assembling Futil. / / ASSEMBLY INFORMATION: / / .R PAL8 [VERSION 9] / *FUTIL<FUTIL/L/K/P;06400=0400$ / .SA ... FUTIL / / THE LISTING FILE REQUIRES ABOUT 725 BLOCKS, THE BIN- / ARY FILE ABOUT 35 BLOCKS AND THE CREF LISTING FILE ABOUT / 960 BLOCKS. CREFING REQUIRES EITHER "/M" OR "/X" FOR / CREF V3. /MEMORY ALLOCATION: / /00000-06310 PROGRAM PROPER /06310-06577 ARGUMENT STRING BUFFER /06400-06777 --- ONCE ONLY CODE FOR CHAIN --- /06600-07177 DDEV HANDLER AREA, 2 PAGES /07200-07577 DEVICE HANDLER AREA, 2 PAGES / /10000-11777 USR AREA & ERROR MESSAGES (SWAPPED) /12000-12377 CCB/HEADER CODE, OPEN, CLOSE & OUTPUT /12600-15700 TEXT STRINGS, LISTS /15700-16377 STRING MASK, COMMAND BUFFERS, PDL /16400-16577 CCB BUFFER, 1 PAGE /16600-17177 DDEV BUFFER, 2 PAGES /17200-17577 I/O BUFFER, 2 PAGES /PAGE 0: POINTERS, CONSTANTS, VARIABLES, SWITCHES, ADDRESSES *0 OVLFLG, 0 /OVERLAY FLAG FOR SAVE FILES DPSGN, 0 LASTOP, 0 THISOP, 0 ZBLOCK 3 /USED BY ODT /VARIABLES & SWITCHES PDLPT, 0 /P.D.L. POINTER DPNT, RUBO-1 /USED UNIVERSALLY (SCOPE INITIALIZATION) SPNT, SCOPLS-1 /USED BY 'XSTRIN', 'XSMASK', 'READ', 'TERMT' SCANX1, BATLS-1 /USED BY 'SORTJ' (BATCH INITIALIZATION) SCANX2, 0 /USED BY 'XSTRIN' GETPNT, 0 /USED BY 'GET' & 'BKLOC' COMIR, 0 /USED FOR USER LINE INPUT COMOUT, COMB-1 /USED FOR USER LINE SCAN TYPSW, 0 /ODT COMMAND OCT-SYM SWITCH (0=OCT) ERMODE, 0 /ERROR MESSAGE MODE SWITCH (0=LONG) TEMP, 0 TEMP1, 0 TEMP2, 0 TEMP3, 0 ACC1, 0 /24 BIT ACCUMULATORS ACC2, 0 ACCX1, 0 ACCX2, 0 NAM1= ACC1 /DEFINITIONS FOR NAME BUFFER: NAM2= ACC1+1 / THESE LOCATIONS ARE USED FOR A NAM3= ACC1+2 / 6 CHARACTER FILE (OR DEVICE) NAM4= ACC1+3 / NAME & A 2 CHAR EXTENSION. OPER1, 0 OPER2, 0 TEMPV1, 0 /24 BIT TEMPORARY STORAGE FOR TEMPV2, 0 / "SET TEMP ..." & "EVAL T" CHAR, 0 CNT, 0 CNTR, 0 CNTRA, 0 NCNT, 0 /LINE POSITION COUNTER FCNT, 0 /FORMAT NUMBER (INIT TO PACKED ASCII) OUTPNT, PACOUT /POINTER TO DEFAULT OUTPUT ROUTINE MODSW, 0 /MODES: NORMAL=0,MAPPED=+,OFFSET=-. CHARSW, 0 /CHARACTER PACK & UNPACK SWITCH CRSWT, 0 /= -1 IF GWORD TERMINATOR WAS A SPACE SHUT, 0 /= -1 IF SOMETHING OPEN MODIF, 0 /= -1 IF SOMETHING WAS MODIFIED ABSSW, 0 /ABSOLUTE OR RELATIVE LOCATION FOR SEARCHES DSWIT, 0 /DUMP SWITCH: "DUMP","LIST" & "SHOW ERR" -> 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 = <VERSION><PATCH>" 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 <BADERR,__CAN'T RUN> /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 </NO PASS1 ERROR! RELOC TYPEB /*** REALLY IN FIELD 1 *** > 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/uni/CUSPS/HELP.HL.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 | &ABSLDR ABSLDR.SV @CALLING COMMANDS: .LOAD DEV:BINFILE.BN,... .LOAD BINFILE.BN,... /FROM DSK @SWITCHES: /8 PROG DOESN'T USE BELOW 02000 /9 PROG DOESN'T USE BELOW 12000 /G GO /I CORE IMAGE FILE /P PROG DOESN'T DESTROY EXTENDED BATCH RESIDENT /R RESET /S MULTIPLE BINARIES/FILE /N FORCE LOADING TO FIELD N (N IS AN OCTAL DIGIT) =FNNNN SET STARTING ADDRESS &BASIC BASIC.SV @CALLING COMMANDS: .BASIC .R BASIC @INTERNAL COMMANDS: BYE EXIT FROM BASIC LIST LIST CURRENT PROGRAM'S STATEMENTS NAME RENAME CURRENT PROGRAM NEW PREPARE FOR A NEW PROGRAM OLD RETRIEVE AN OLD PROGRAM RUN RUN CURRENT PROGRAM SAVE SAVE CURRENT PROGRAM SCRATCH DELETE CURRENT PROGRAM .HELP BCOMP PRINTS BASIC COMPILER ERROR MESSAGES .HELP BRTS PRINTS BASIC RUN-TIME ERROR MESSAGES &BCOMP BCOMP.SV (ERRORS) @ERRORS: CH ERROR IN CHAIN STATEMENT DE ERROR IN DEF STATEMENT DI ERROR IN DIM STATEMENT FN ERROR IN FILE NUMBER OR FILE NAME FP INCORRECT FOR STATEMENT FR ERROR IN FUNCTION ARGS IF ERROR IN IF STATEMENT IO I/O ERROR LS MISSING EQUALS SIGN IN LET LT STATEMENT TOO LONG MD MULTIPLY DEFINED LINE NUMBER ME MISSING END STATEMENT MO OPERAND EXPECTED AND NOT FOUND MP PARENTHESIS ERROR MT OPERAND OF MIXED TYPE NF NEXT STATEMENT WITHOUT FOR NM MISSING LINE NUMBER OF OUTPUT FILE ERROR PD PUSHDOWN STACK OVERFLOW QS STRING LITERAL TOO LONG SS SUBSCRIPT OR FUNCTION ARG ERROR ST SYMBOL TABLE OVERFLOW SY SYSTEM INCOMPLETE TB PROGRAM TOO BIG TD TOO MUCH DATA IN PROGRAM TS TOO MANY CHARS IN STRING LITERALS UD ERROR IN UDEF STATEMENT UF FOR STATEMENT WITHOUT NEXT US UNDEFINED STATEMENT NUMBER UU USE STATEMENT ERROR XC EXTRA CHARS AFTER LOGICAL END OF LINE &BRTS BRTS.SV (ERRORS) @ERRORS: BO NO MORE FILE BUFFERS AVAILABLE CI INQUIRE FAILURE IN CHAIN. DEVICE NOT FOUND CL LOOKUP FAILURE IN CHAIN. FILENAME NOT FOUND. CX CHAIN ERROR DA ATTEMPT TO READ PAST END OF DATA LIST DE DEVICE DRIVER ERROR DO NO MORE ROOM FOR DRIVERS DV ATTEMPT TO DIVIDE BY 0 EF LOGICAL END OF FILE EM ATTEMPT TO RAISE A NEGATIVE NUMBER TO A REAL POWER EN ENTER ERROR FB ATTEMPT TO USE A FILE ALREADY IN USE FC CLOSE ERROR FE FETCH ERROR FI ATTEMPT TO CLOSE OR USE AN UNOPENED FILE FM ATTEMPT TO FIX NEGATIVE NUMBER FN ILLEGAL FILE NUMBER FO ATTEMPT TO FIX NUMBER GREATER THAN 4095 GR RETURN WITHOUT A GOSUB GS TOO MANY NESTED GOSUBS IA ILLEGAL ARGUMENT IN UDEF FUNCTION CALL IF ILLEGAL DEV:FILENAME SPECIFICATION IN INQUIRE FAILURE IO TTY INPUT BUFFER OVERFLOW LM ATTEMPT TO TAKE LOG OF A NEGATIVE NUMBER OE DRIVER ERROR WHILE OVERLAYING OV NUMERIC OR INPUT OVERFLOW PA ILLEGAL ARGUMENT IN POS FUNCTION RE ATTEMPT TO READ PAST END OF FILE SC STRING TOO LONG AFTER CONCATENATING SL STRING TOO LONG OR UNDEFINED SR ATTEMPT TO READ STRING FROM NUMERIC FILE ST STRING TRUNCATION ON INPUT SU SUBSCRIPT OUT OF DIM STATEMENT RANGE SW ATTEMPT TO WRITE STRING INTO NUMERIC FILE VR ATTEMPT TO READ VARIABLE LENGTH FILE WE ATTEMPT TO WRITE PAST END OF FILE &BOOT BOOT.SV @CALLING COMMANDS: .BOOT/DV @SWITCHES: /CA TA8E CASSETTE CAPS-8 /DK ANY DISK /DL LINCTAPE DIAL /DM ANY DISK DISK MONITOR /DT ANY TAPE /LT LINCTAPE /PT PT8E (LOADS BINLDR) /RE RK8E DISK /RF RF08,DF32 DISKS /RK RK8 DISK /RX RX8E FLOPPY DISK /TD TD8E DECTAPE /TY TYPESET (UNIT 4) /VE VERSION # /TC TC08 DECTAPE ALL SYSTEMS /ZE ZEROES CORE (FIELD 0) DEVICES ARE UNIT 0 IF NOT SPECIFIED DV. HALT AFTER LOADING BOOTSTRAP &BUILD BUILD.SV @INTERNAL COMMANDS: $ALTER GRP,LOC $ALTER GRP,LOC=VALUE $BOOT $BUILD $CTL ACTNAM $CTL ACTNAM=VALUE $CORE N $DCB ACTNAM $DCB ACTNAM=VALUE $DELETE ACTNAM,... $DSK ACTNAM $DSK GRP:NAME $EXAMINE GRP,LOC $INSERT GRP $INSERT GRP:NAME,... $LOAD DEV:FILENM.BN $LOAD ACTNAM $NAME ACTNAM=NEWNAM $PRINT $QLIST $REPLACE ACTNAM,...=GRP:NEWNAM,,, $SIZE ACTNAM $SIZE ACTNAM=VALUE $SYS GRP $SYS GRP:NAME,... $UNLOAD GRP $UNLOAD GRP:NAME,... @ERRORS: ?BAD ARG NO DEVICE NAME IN LOAD COMMAND ?BAD INPUT INPUT NOT A VALID BINARY FILE ?BAD LOAD BINARY HANDLER NOT IN CORRECT FORMAT ?BAD ORIGIN ORIGIN IN BINARY FILE NOT IN RANGE 200-577 ?CORE NOT ENOUGH MEMORY AVAILABLE ?DSK DSK IS NOT FILE STRUCTURED ?HANDLERS MORE THAN 15 HANDLERS ARE ACTIVE I/O ERROR ERROR DURING LOAD ?NAME MISSING NAME NO ROOM TOO MANY DEVICE HANDLERS LOADED NAME NOT FOUND DEVICE OR FILE NAME NOT FOUND ?PLAT TOO MANY PLATTERS SPECIFIED FOR DEVICE ?SYNTAX BAD SYNTAX ?SYS HANDLER IS NOT A SYSTEM HANDLER OR TWO SYSTEM HANDLERS ARE ACTIVE OR HANDLER CORESIDENT WITH NON-ACTIVE SYS SYS ERROR I/O ERROR OCCURED WITH SYSTEM HANDLER. PRESS CONTINUE TO RETRY SYS NOT FOUND NO ACTIVE HANDLER BY NAME OF SYS DURING BOOTSTRAP & &CCL OS/8 MONITOR COMMANDS CMD PROG EXPL ASSIGN KBM ASSIGNS LOGICAL NAME BACKSP CAMP BACKSPACES DEV BASIC BASIC ENTERS BASIC SYSTEM BOOT BOOT BOOTSTRAPS TO DEV CCL CCL DISABLES CCL COMPARE SRCCOM COMPARES FILES COMPILE PAL8 COMPILES PROG F4/FORT BASIC RALF SABR COPY FOTP COPIES FILES CREATE EDIT OPENS FILE FOR EDITING CREF PAL8 ASSEMBLES AND CHAINS TO CREF CREF CREF'S LISTING DATE KBM/CCL SPECIFIES DATE DEAS CCL DEASSIGNS LOGICAL DEVICES DELETE FOTP DELETES FILES DIRECT DIRECT PRINTS DIRECTORIES DUPLIC RXCOPY COPIES RX DISKS EDIT EDIT EDITS FILE EOF CAMP WRITES END-OF-FILE EXECUTE PAL8 COMPILES AND EXECUTES F4/FORT BASIC RALF SABR ABSLDR LOADS AND EXECUTES LOAD(ER) GET KBM GETS CORE-IMAGE HELP HELP LIST'S HELP FILE LIST FOTP LISTS FILES LOAD ABSLDR LOADS FILES LOAD(ER) MAKE TECO MAKES NEW FILE FOR EDITING MAP BITMAP PRINTS BITMAP MEMORY CCL SPECIFIES MACHINE CORE SIZE MUNG TECO MUNGS FILE WITH TECO MACRO ODT KBM RUNS OCTAL DEBUGGER PAL PAL8 RUNS PAL8 PRINT LPTSPL RUNS 'LPTSPL' IF PRESENT PUNCH FOTP PUNCHES DATA R KBM RUNS PROGRAM FROM SYS: RENAME FOTP RENAMES FILES RESORC RESORC PRINTS RESOURCES OF SYSTEMS REWIND CAMP REWINDS DEV RUN KBM RUNS PROGRAM SAVE KBM SAVES CORE IMAGE SET SET ALTERS PARAMETERS SKIP CAMP SKIPS RECORDS SQUISH PIP SQUISHES DEV START KBM STARTS PROG SUBMIT BATCH STARTS BATCH JOB TECO TECO EDITS FILE TYPE FOTP TYPES FILES UA CCL REMEMBERS COMMAND UB CCL UC CCL UNLOAD CAMP UNLOADS DEV VERSION CCL TYPES VERSION # ZERO PIP ZEROES DEV @SWITCHES: -L OUTPUT TO LPT: -S OUTPUT TO TV: -T OUTPUT TO TTY: -P OUTPUT TO PTP: -D OUTPUT TO DUMP: -N OUTPUT TO NULL: -LS PRODUCE LISTING -NB NO BINARY YET -MP PRODUCE MAP -EXT SET DEFAULT EXTENSION @FEATURES: /X PASS SWITCH OPTION X TO PROGRAM (XYZ) PASS SWITCH OPTIONS TO PROGRAM [N] MAX OUTPUT SIZE =NNN PASS OCTAL NUMBER TO PROGRAM #NNN TAKE INTERNAL OCTAL FORM OF FILENAME @FILE REPLACE IN CMD LINE BY FILE'S CONTENTS $ COMPLEMENT DEFAULT ALTMODE SWITCH &CREF CREF.SV @CALLING COMMANDS: .CREF DEV:BINFILE.BN,DEV:LISTFILE.LS,DEV:TEMPFILE.TM<DEV:INFILE.PA .CREF DEV:INFILE.PA /LISTING TO LINE PRINTER ONLY .CREF INFILE.PA /LISTING TO LINE PRINTER, INPUT FILE ON DSK @SWITCHES: /E DON'T DELETE CREFLS.TM /M MAMMOTH (TWICE AS MANY SYMBOLS, TWICE AS SLOW) /P NO PASS 1 LISTING /Q SABR /R RALF /U NO LISTING OR SYMBOL TABLE /X NO LITERALS &DIRECT DIRECT.SV @CALLING COMMANDS .DIR DEV:LISTFILE.DI<DEV:FILETYPE /* IS WILD NAME OR EXTENSION .DIR FILETYPE /? IS WILD CHARACTER @SWITCHES: /B INCLUDE STARTING BLOCK NUMBERS (OCTAL) /C LIST ONLY FILES WITH CURRENT DATE /E INCLUDE EMPTIES /F FAST MODE /I PRINT ADDITIONAL INFO WORDS /L USUAL MODE /M LIST EMPTIES ONLY /O LIST ONLY FILES WITH OTHER THAN TODAY'S DATE /R LIST REMAINDER OF FILES AFTER FIRST ONE (BUT USE /C,/O) /U TREAT EACH INPUT SPECIFICATION SEPARATELY /V LIST FILES NOT OF FORM SPECIFIED /W GIVE VERSION NUMBER =N USE N COLUMNS &EDIT &CREATE EDIT.SV @CALLING COMMANDS: .EDIT DEV:OUTFILE.PA<DEV:INFILE.PA .CREATE OUTFILE.PA @SWITCHES: /A RETURN TO EDITOR ON CLOSE /B CONVERT 2 OR MORE SPACES TO TAB /D PREDELETE @ERRORS: ?0 INPUT ERROR ?1 OUTPUT ERROR ?2 CLOSE ERROR ?3 OPEN ERROR ?4 COULDN'T LOAD DEVICE HANDLER @INTERNAL COMMANDS: A APPEND TEXT B LIST # OF CORE LOCATIONS LEFT C CHANGE TEXT D DELETE TEXT E OUTPUT BUFFER, TRANSFER REST OF DATA, AND CLOSE F AFTER J, SEARCH FOR NEXT OCCURRRENCE OF SAME STRING G GET AND LIST TAGGED LINE I INSERT J INTER-BUFFER STRING SEARCH K KILL BUFFER L LIST TEXT M MOVE TEXT N WRITE BUFFER, KILL AND READ NEXT PAGE P WRITE TEXT BUFFER TO OUTPUT Q IMMEDIATE END OF FILE R READ TEXT FROM INPUT DEVICE S CHARACTER SEARCH T PUNCH TRAILER TAPE V PRINT ON LP08 Y INPUT TEXT PAGE, NO OUTPUT # PRINT VERSION NO. &EPIC EPIC.SV @SWITCHES: /0$ PAPER TAPE I/O TO/FROM OS/8 FILES /E DON'T PUNCH EOT /H SET HIGH BIT=N /L LOW SPEED /P PUNCH PATCH /Z REL BLOCK=0 =N REL BLOCK TO PATCH NO OUT FILE IS READ FILE</1$ EDIT 'FILE' C CURRENT STATUS E EXIT TO CD O,N OPEN BLOCK N R,N READ BLOCK N S,N,M SEARCH FOR N WITH MASK M W WRITE FILE1<FILE2/2$ COMPARE FILE1 AND FILE2 /A ABORT /B BAD BLOCKS ONLY &FORT FORT.SV @CALLING COMMANDS: .COMPILE DEV:BINFILE.BN,DEV:LISTFILE.LS,DEV:MAPFILE.MP<DEV:INFILE.FT .EXE INFILE.FT @SWITCHES: /G GO /K KEEP FORTRN.TM /L LOAD @ERRORS: ALOG ATTEMPT TO COMPUTE LOG OF NEGATIVE NUMBER IOER INPUT/OUTPUT ERROR CHER CHAIN ERROR FMT1 INVALID FORMAT STATEMENT FMT2 ILLEGAL CHARACTER IN I FORMAT FMT3 ILLEGAL CHARACTER IN E OR F FORMAT DIVZ ATTEMPT TO DIVIDE BY 0 EXP ARGUMENT TO EXP TOO LARGE OVFL FLOATING POINT OVERFLOW FLPW ATTEMPT TO RAISE NEGATIVE NUMBER TO REAL POWER SQRT ATTEMPT TO TAKE SQUARE ROOT OF NEGATIVE NUMBER FIX ATTEMPT TO FIX NUMBER GREATER THAN 2047 &FRTS FRTS.SV @SWITCHES: /C CARRIAGE CONTROL SWITCH /E IGNROE ERRORS /H HALT BEFORE STARTING /P PUNCH TO PAPER TAPE &F4 &FORTRAN F4.SV @CALLING COMMANDS: .COMPILE DEV:RALFFILE.RL,DEV:LISTFILE.LS,DEV:MAPFILE.MP<DEV:INFILE.FT .COMPILE INFILE.FT /FROM DSK @SWITCHES: /A RETURN TO KBM AFTER COMPILATION /F PRODUCE RALF LISTING /N SUPPRESS INTERNAL STATEMENT NUMBERS /Q OPTIMIZE .HELP F4ERR PRINTS FORTRAN IV COMPILER ERROR MESSAGES &F4ERR F4.SV (ERRORS) @ERRORS: AA MORE THAN 6 SUBROUTINE ARGUMENTS ARE ARRAYS AS BAD ASSIGN STATEMENT BD BAD DIMENSIONS BS ILLEGAL STATEMENT IN BLOCK DATA SUBPROGRAM CL BAD COMPLEX LITERAL CO SYNTAX ERROR IN COMMON STATEMENT DA BAD SYNTAX IN DATA STATEMENT DE ILLEGAL STATEMENT AT END OF DO DF BAD DEFINE FILE STATEMENT DH HOLLERITH FIELD ERROR IN DATA STATEMENT DL DATA LIST AND VARIABLE LIST ARE NOT SAME LENGTH DN DO-END MISSING OR INCORRECTLY USED DO SYNTAX ERROR IN DO OR IMPLIED DO DP DO LOOP PARAMETER NOT INTEGER OR REAL EX SYNTAX ERROR IN EXTERNAL STATEMENT GT SYNTAX ERROR IN GOTO STATEMENT GV ASSIGNED OR COMPUTED GOTO VARIABLE NOT INTEGER OR REAL HO HOLLERITH FIELD ERROR IE ERROR READING INPUT FILE IF IMPROPER STATEMENT USED WITH LOGICAL IF LI ARGUMENT TO LOGICAL IF IS NOT LOGICAL LT INPUT LINE TOO LONG (TOO MANY CONTINUATIONS) MK MISSPELLED KEYWORD ML MULTIPLY DEFINED LINE NUMBER MM MISMATCHED PARENTHESES MO EXPECTED OPERAND IS MISSING MT MIXED VARIABLE TYPES OF ERROR WRITING OUTPUT FILE OP ILLEGAL OPERATOR OT OPERAND TYPE WRONG FOR GIVEN OPERATOR PD COMPILER STACK OVERFLOW, STATEMENT TOO BIG OR TOO MANY NESTED LOOPS PH BAD PROGRAM HEADER LINE QL NESTING ERROR IN EQUIVALENCE STATEMENT QS SYNTAX ERROR IN EQUIVALENCE STATEMENT RD ATTEMPT TO REDEFINE THE DIMENSIONS OF A VARIABLE RT ATTEMPT TO REDEFINE THE TYPE OF A VARIABLE RW SYNTAX ERROR IN READ/WRITE STATEMENT SF BAD ARITHMETIC STATEMENT FUNCTION SN ILLEGAL SUBROUTINE NAME IN CALL SS ERROR IN SUBSCRIPT EXPRESSION ST COMPILER SYMBOL TABLE FULL SY SYSTEM ERROR; PASS MISSING OR NO ROOM FOR OUTPUT TD BAD SYNTAX IN TYPE DECLARATION STATEMENT US UNDEFINED STATEMENT NUMBER VE VERSION ERROR &LIBRA LIBRA.SV @SWITCHES: /C CONTINUE INPUT SPECIFICATIONS /I INSERTION DECISION /R REPLACE MODULE /Z REPLACE LIBRARY =N EXTRA BLOCKS &LOAD LOAD.SV @CALLING COMMANDS: .LOAD DEV:OUTFILE.LD<DEV:INFILE1.RL,... @SWITCHES: /C MORE INPUT TO LOAD /G CHAIN TO RUN-TIME SYSTEM /L ACCEPT LIBRARY FILE /O MORE OVERLAYS /S SYMBOL MAP /U IGNORE RULES GOVERNING SUBROUTINE CALLS BETWEEN OVERLAYS &LOADER LOADER.SV @CALLING COMMANDS: .LOAD MAPFILE.MP<INFILE.RL,... @SWITCHES: /G GO /H 2 PAGE HANDLERS /I OS/8 FILE INPUT /L 1ST INPUT FILE IS LIBRARY FILE /M PRODUCE MAP /O OS/8 FILE OUTPUT /P OUTPUT COUNT OF FREE PAGES /R RESTART /U OUTPUT UNDEFINED SYMBOLS /N LOAD IN FIELD N (0-7) OR HIGHER =N SET STARTING ADDRESS &MAP &BITMAP BITMAP.SV @CALLING COMMANDS: .MAP MAPFILE.MP<INFILE.BN,... @SWITCHES: /N FORCES MAPPING OF ALL FILES TO FIELD N (0-7) /R RESET INTERNAL MAP /S ALLOW MULTIPLE BINARIES PER FILE /T INVERT TTY-STYLE OUTPUT SWITCH &ODT ODT @CALLING COMMANDS: .ODT @INTERNAL COMMANDS: NNNNN/ OPEN LOC / REOPEN LAST OPENED LOC NN<CR> DEPOSIT NN IN OPEN LOC, CLOSE LOC NN<LF> DEPOSIT NN IN OPEN LOC, CLOSE LOC, OPEN AND DISPLAY NEXT LOC NN;... DEPOSIT NN IN OPEN LOC, CLOSE AND OPEN NEXT LOC <CR> CLOSE PREVIOUSLY OPENED LOC <LF> CLOSE LOC, OPEN NEXT LOC N+ OPEN CUR LOC+N N- OPEN CUR LOC-N ^ CLOSE LOC, OPEN LOC ADDRESSED BY CONTENTS _ CLOSE LOC, OPEN POINTED TO BY CONTENTS NNG GO NNB ESTABLISH BREAKPOINT B REMOVE BREAKPOINT A OPEN AC L OPEN LINK C CONTINUE FROM BREAKPOINT NNC CONTINUE, ITERATE NN TIMES M OPEN SEARCH MASK <LF> OPEN LOWER SEARCH LIMIT <LF> OPEN UPPER SEARCH LIMIT NNW SEARCH CORE FOR NN MASKED BETWEEN LIMITS D OPEN DATA FIELD (0010=FIELD 1) F OPEN FIELD FOR ^, _, W (0010=FIELD 1) ^O SUPRESS PRINTING &PAL8 &PAL PAL8.SV @CALLING COMMANDS: .PAL DEV:BINFILE.BN,DEV:LISTFILE.LS,DEV:TEMPFILE.TM<DEV:INFILE.PA/C .PAL DEV:BINFILE.BN,DEV:LISTFILE.LS<DEV:INFILE.PA .PAL INFILE.PA /FROM DSK .HELP PALERR PRINTS PAL8 ERROR MESSAGES @SWITCHES: /B TREAT ! AS BYTE SHIFT /C CHAIN TO CREF /D DDT-COMPATIBLE SYMBOL TABLE /E ENABLE ERROR MSG ON LINK GENERATED /F DISABLE 0-FILL IN TEXT /G GO /H NON-PAGINATED OUTPUT /J DON'T LIST LINES CONDITIONALIZED OUT /K USE EXTRA CORE /L LOAD /N NO LISTING /O DISABLE ORIGIN 200 AFTER FIELD /S NO SYMBOL TABLE /T NO FORM FEEDS /W DON'T REMEMBER LITERALS &PALERR PAL8.SV (ERRORS) @ERRORS: BE TABLES OVERLAPPED CF CREF.SV NO ON SYS: DE DEVICE ERROR DF DEVICE FULL IC ILLEGAL CHARACTER ID ILLEGAL REDEFINITION IE ILLEGAL EQUALS II ILLEGAL INDIRECT IP ILLEGAL PSEUDO-OP IZ ILLEGAL PAGE ZERO REF LD SYS:ABSLDR.SV NOT FOUND LG LINK GENERATED PE PAGE EXCEEDED PH END OF SOURCE CONDITIONALIZED OUT RD REDEFINITION SE SYMBOL TABLE EXCEEDED UO UNDEFINED ORIGIN US UNDEFINED SYMBOL ZE PAGE 0 EXCEEDED &PIP PIP.SV @SWITCHES: /A ASCII MODE /B BINARY MODE /C ELIM TRAILING BLANKS /D DELETE OUTPUT FILE BEFORE TRANSFER /G IGNORE ERRORS /I IMAGE MODE /O OKAY TO COMPRESS OR ZERO /S SQUISH /T CONVERT TABS TO SPACES, ETC. /V VERSION # /Y COPY SYSTEM HEAD /Z ZERO OUTPUT DIRECTORY BEFORE TRANSFER =N # OF ADDITIONAL INFO WORDS (/Z OR /S) =N SIZE TO CLOSE OUTPUT FILE (/I) &PIP10 PIP10.SV @SWITCHES: /B BINARY MODE /D DELETE OLD OUTPUT FILE BEFORE TRANSFER /F FAST PDP-10 DIRECTORY /I IMAGE MODE /L LIST PDP-10 DIRECTORY /P PRESERVE LINE NUMBERS /Z ZERO PDP-10 DIRECTORY BEFORE TRANSFER &DUPLIC &RXCOPY RXCOPY.SV @CALLING COMMANDS: .DUPLIC OUTDEV:<INDEV: @SWITCHES: /M MATCH WITH NO IMPLIED COPY /N COPY WITH NO IMPLIED MATCH /P PAUSE BEFORE AND AFTER ACCESSING DISKS /R READ OUTPUT DEVICE WITH NO IMPLIED COPY OR MATCH /V PRINT VERSION NUMBER &SABR SABR.SV @CALLING COMMANDS: .COMPILE BINFILE.RL,LISTFILE.LS,MAPFILE.MP<INFILE.SB .EXE DEV:BINFILE.RL,DEV:LISTFILE.LS,DEV:MAPFILE.MP<DEV:INFILE.SB @SWITCHES: /F INPUT IS FROM FORT /G CHAIN TO LOADER AND GO /L CHAIN TO LOADER /N NO LISTING /S NO SYMBOL TABLE @ERRORS: A WRONG NO. OFARG'S C BAD CHAR D I/O ERROR E NO END STMNT I ILLEGAL SYNTAX L SYS:LOADER.SV NOT FOUND M MULTIPLY DEFINED SYMBOL S SYMBOL OVERFLOW U UNDEFINED SYMBOL &SET SET.SV @CALLING COMMANDS: .SET DEV PARAMETER(S) .SET DEV NO PARAMETER(S) @PARAMETERS: READONLY DECLARE DEVICE TO BE READ ONLY FILES DECLARE DEVICE TO BE FILE STRUCTURED DVC CHANGE DEVICE CODES VERSION X CHANGE VERSION LOCATION N[=M] EXAMINE OR CHANGE LOCATIONS LV8E DECLARE LINE PRINTER TO BE AN LV8E LA8A DECLARE LINE PRINTER TO BE LA180 ON DKC8-AA LA78 SAME AS .SET LPT NO LA8A WIDTH N SET WIDTH OF LINE PRINTER OR TTY LC DECLARE LINE PRINTER OR TTY TO HAVE LOWER CASE ECHO RESTORE TTY CHARACTER ECHOING PAGE RESTORE TTY ^S AND ^Q FACILITIES TAB IN TTY PRINT TABS (DON'T SIMULATE WITH SPACES) FILL IN TTY APPEND FILL CHARACTERS AFTER TABS FLAG IN TTY FLAG LOWER CASE CHARACTERS SCOPE ERASE CHARACTER ON TTY RUBOUTS ESC PRINT ESC(ASCII 033) WITHOUT CONVERTING IT TO $ SIGN ARROW PRINT CONTROL CHARACTERS WITH UP ARROW (E.G. ^C, ^S) HEIGHT [M] SET TTY SCREEN HEIGHT PAUSE [N] SET TTY PAUSE TIME COL N SET DIRECT TO USE N COLUMNS (.SET TTY COL 2) CODE N CHANGE TTY IOTS OR CARD READER CODES PARITY EVEN/ODD SET MAGTAPE PARITY OS8 DECLARE SYS TO BE OS/8 OS78 DECLARE SYS TO BE OS/8 INIT XXXXX CAUSE SYS TO EXECUTE XXXXX ON BOOTSTAPPING &SRCCOM &COMPAR SRCCOM.SV @CALLING COMMANDS: .COMPAR DEV:OUTFILE.PA<DEV:INFILE1.PA,DEV:INFILE2.PA .COMPAR OUTFILE.PA<INFILE1.PA,INFILE2.PA /FILES ON DSK @SWITCHES: /B COMPARE BLANK LINES /C DON'T COMPARE (SLASHED) COMMENTS /S DON'T COMPARE TABS AND SPACES /T CONVERT TABS TO SPACES ON OUTPUT /X DON'T COMPARE OR PRINT COMMENTS @ERRORS: ?0 INSUFFICIENT CORE ?1 INPUT ERROR FILE 1 (OR LESS THAN 2 INPUT FILES) ?2 INPUT ERROR FILE 2 ?3 OUTPUT FILE TOO LARGE ?4 OUTPUT ERROR ?5 CAN'T OPEN OUTPUT FILE &BATCH &SUBMIT BATCH.SV @CALLING COMMANDS: .SUBMIT SPOOLDEV:<INPUTDEV:FILE.BI @SWITCHES: /C CARDS /E DON'T ABORT ON MONITOR, CD AND CCL ERRORS /P PTR /Q NO BATCH LOG /H HUSH /T OUTPUT TO TTY /U UNATTENDED /6 USE 026 CARD CODES &TECO &MAKE &MUNG TECO.SV @CALLING COMMANDS: .TECO DEV:OUTFILE.PA<DEV:INFILE.PA .TECO FILE.PA /ON DSK .MAKE DEV:OUTFILE.PA .MAKE OUTFILE.PA /ON DSK .MUNG DEV:INFILE.PA,TECO MACRO ARGUMENT TEXT @ERRORS: ?ILL ILLEGAL COMMAND ?UTC UNTERMINATED COMMAND ?IQN ILLEGAL Q-REGISTER NAME ?PDO INTERNAL PUSH DOWN OVERFLOW (RECURSION) ?MEM MEMORY OVERFLOW ?STL SEARCH STRING TOO LONG ?ARG ARGUMENT ERROR ?IFN ILLEGAL FILE NAME ?SNI SEMICOLON NOT IN ITERATION ?BNI CLOSE BRACKET NOT IN ITERATION ?POP POINTER OFF PAGE ?QMO Q-REGISTER OVERFLOW ?UTM UNTERMINATED MACRO ?OUT OUTPUT ERROR ?INP INPUT ERROR ?FER FILE ERROR ?FUL OUTPUT COMMAND WOULD HAVE OVERFLOWED ?NAY NEGATIVE ARGUMENT TO Y ?IEC ILLEGAL E CHARACTER ?IQC ILLEGAL " CHARACTER ?NAE NO ARGUMENT BEFORE = ?NAU NO ARGUMENT BEFORE U ?NAQ NO ARGUMENT BEFORE " ?SRH FAILING SEARCH ?NAP NEGATIVE OR 0 ARGUMENT TO P ?NAC NEGATIVE ARGUMENT TO , ?NIC NEGATIVE OR 0 ITERATION COUNT ?NAS NEGATIVE OR 0 COUNT TO SEARCH ?WLO CAN'T WRITE OUT ERROR MESSAGE OVERLAY ?NFO NO FILE FOR OUTPUT &FOTP &LIST © &RENAME &TYPE &DELETE FOTP.SV @CALLING COMMANDS: .COPY DEV:OUTFILE.EX<DEV:INFILE.EX /* IS WILD NAME OR EXTENSION .REN DEV:NEWFILE.EX<DEV:OLDFILE.EX /? IS WILD CHARACTER .DEL DEV:FILE.EX .LIST DEV:FILE.EX /= .COPY LPT:<DEV:FILE.EX .TYPE DEV:FILE.EX /= .COPY TTY:<DEV:FILE.EX @SWITCHES: /C MATCH ONLY FILES WITH CURRENT DATE /D DON'T TRANSFER (I.E. AT MOST ONLY DELETE) /F REQUEST NEW DEVICE IF OUT OF ROOM /L TYPE LOG OF INPUT FILENAME MATCHES (*) /N NO PRE-DELETE /O MATCH ONLY FILES WITH OTHER THAN TODAY'S DATE /Q QUERY USER ABOUT FILE BEFORE OPERATION (*) /R RENAME /T USE TODAY'S DATE /U TREAT EACH INPUT SPECIFICATION SEPARATELY /V MATCH FILES NOT OF FORM SPECIFIED /W PRINT VERSION # NOTES: (*) /D CAUSES LOG OF OUTPUT FILES (IF /L ALSO) IF INDEV: EQUALS OUTDEV:, THEN /N IS FORCED. IF NO INPUT FILE, *.* IS FORCED EXCEPT FOR /D IF OUTPUT DEVICE SPECIFIED, BUT NO FILE, *.* IS ASSUMED. ^P ABORT OPERATION, FIX OUTPUT DIRECTORY ^C FIX OUTPT DIRECTORY, RETURN TO OS/8 ^O SUPPRESS TYPEOUT &ASSIGN &DATE &DEASSIGN &GET &MEMORY &R &RUN &SAVE &START &SQUISH &UA &ZERO KEYBOARD MONITOR AN OTHER COMMANDS @CALLING COMMANDS: .ASSIGN DEV NAME /ASSIGN NAME TO DEVICE .DAY DD-MON-YY /ENTER DATE INTO SYSTEM .DEASSIGN /DEASSIGN LOGICAL DEVICE NAMES .GET DEV FILE.EX /LOAD CORE IMAGE .MEMORY N /SPECIFY HIGHEST MEMORY FIELD AVAILABLE .R FILE /EXECUTE FILE.SV FROM SYS .RUN DEV FILE.EX /EXECUTE FILE.EX FROM THE DEVICE .SAVE DEV FILE.EX /SAVE CORE IMAGE .SQUISH DEV: /COMPRESS FILE STORAGE ON DEVICE .START FNNNN /START EXECUTION .UA COMMAND /SAVE COMMAND(.UA<CR> EXECUTES IT) .ZERO DEV: /ZERO DEVICE'S DIRECTORY |
Added src/os8/uni/CUSPS/HELP.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 | / OS/8 HELP PROGRAM / / 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 HEREIN 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 ASSUMES NO RESPONSIBILITY FOR THE USE / OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED / BY DIGITAL. / / COPYRIGHT (C) 1977 BY DIGITAL EQUIPMENT CORPORATION / / / VERSION #1 B. M. 1/1/77 / VERSION #2A M. H. 4/22/77 / (CHANGE TAG VERS WHEN CHANGING VERSION NUMBERS) / / THIS PROGRAM CAN BE CALLED DIRECTLY OR CHAINED TO BY CCL TO / PRINT INFORMATION ON RANDOM SUBJECTS THE USER ASKS ABOUT. / / START ADDRESS:200 JSW:3401 / CORE LIMITS:200-7377 / / THIS PROGRAM REQUIRES AN INPUT FILE TO RUN. FOR OS/8 THE FILE / SHOULD BE NAMED "HELP8.HL" FOR OS/78 THE NAME SHOULD BE "HELP78.HL". / / THE FORMAT OF THE FILE IS: / <SP><CR><LF> / &COMMAND NAME / &ADDITIONAL COMMAND NAMES(IF ANY) / TEXT OF HELP INFO / &NEXT COMMAND NAME / TEXT OF NEXT HELP INFO / ETC. / / NOTE: TOO SPEED UP PROCESSING A HASHING ALGORITHM IS USED / WHICH REQUIRES THAT WHEN MULTIPLE COMMANDS REFERENCE A / SINGLE SUBFILE, THE SUBFILE MUST APPEAR IN THE HELP FILE / ALPHABETICALLY ACCORDING TO THE 1ST COMMAND STRING LETTER / CLOSEST TO Z. / THAT IS, SUBFILES MUST BE ARRANGED ALPHABETICALLY ACCORDING TO / THE HIGHEST LETTERED 1ST CHARACTER OF THE COMMAND. / USR= 200 /ADDRESS OF USR OS78= 7771 /ADDRESS OF WD WITH OS/78 FLAG BIT(4) (MH) FETCH= 1 /FETCH A HANDLER LOOKUP= 2 /LOOKUP A FILE NAME ENTER= 3 /ENTER A FILE CLOSE= 4 /CLOSE A FILE DECODE= 5 /CALL THE COMMAND DECODER HASH= 3 /HASH CODE SUBTRACTION FACTOR(MH) *10 NAMPTR, 0 /POINTER TO CMD DECODER INPUT NAMES XR1, 0 /RANDOM INDEX REGISTER XR2, 0 /ANOTHER RANDOM INDEX REGISTER *30 COUNT, 0 /RANDOM WORD COUNT FOR ANYTHING CHAR, 0 /TEMPORARY PLACE TO PUT A CHARACTER WILD, 0 /IF NONZERO, NAME HAS '*' OR '?' IN IT WASHLP, 0 /NONZERO IF HELP WAS FOUND ON THIS WORD NAME, ZBLOCK 6 /NAME HELP WAS REQUESTED ON TXTNAM, ZBLOCK 10 /CURRENT SCRIPT FILE NAME BEING LOOKED AT NAMCNT, 0 /NUMBER OF NAMES IN THE COMMAND DECODER AREA BLKCNT, 0 /NUMBER OF AVAILABLE BLOCKS ON OUTPUT OUTADR, 0 /ADDRESS OF OUTPUT HANDLER LINCNT, 0 /COUNT OF NUMBER OF NAMES ON '*' OR 'HELP' LINE LINMAX, -5 /MAXIMUN NUMBER OF NAMES/LINE ON '*' OR 'HELP' LINE FILNAM, ZBLOCK 4 /OUTPUT FILE NAME WDCTR, 0 /WORD COUNTER IN INPUT BLOCK CHTEM, 0 /TEMPORARY SPOT FOR CHARACTER IN 2/3 UNPACK DEVHND, 0 /OUTPUT DEVICE HANDLER ADDRESS CHPTR, 0 /BUFFER POINTER FOR READING CHARACTERS TEMP, 0 /TEMP STORE / MAIN LOOP OF PROGRAM STADR=200 *STADR START, SKP CLA /NORMAL ENTRY POINT JMP START1 /CHAINED ENTRY (CMD DECODE DONE BY CCL) CIF 10 /SEE WHAT TO DO JMS I (USR DECODE 5200 0 START1, JMS I (INIT /DO ALL INITIALIZATION AND SETUP MAINLP, JMS I (NXTNAM /GET NEXT NAME FROM COMMAND DECODER AREA JMP I (EXIT /NO NAMES LEFT JMS I (RESET /RESET THE INPUT FILE POINTERS TO THE BEGINNING TAD NAME /CHECK FOR '*' OR 'HELP" NAME INDICATING LIST OF HELPS TAD (-"* SNA!CLA JMP HELPLS /NAME BEGAN WITH '*' TAD NAME /NOT '*' LOOK FOR HELP (MH) TAD (-"H SZA!CLA JMP MAIN1 /NO 'HELP' TAD NAME+1 TAD (-"E SZA!CLA JMP MAIN1 TAD NAME+2 TAD (-"L SZA!CLA JMP MAIN1 TAD NAME+3 TAD (-"P SNA!CLA JMP HELPLS /WAS 'HELP" GO PRINT LIST (MH) TAD NAME /IS 1ST CHAR A "?"?(MH) TAD (-"? /(MH) SNA!CLA /(MH) JMP MAIN1 /YES -- DON'T TRY TO HASH FILE (MH) TAD NAME /NO -- HASH START BLK OF FILE BY (MH) AND (77 /MAKING 1ST CHAR OF NAME SIXBIT (MH) DCA TEMP /MULTIPLY BY 1.5 (MH) TAD NAME /THEN SUBTRACT "HASH"(3) (MH) AND (77 /(MH) CLL!RAR /(MH) TAD TEMP /(MH) TAD (-HASH /(MH) SPA /(MH) CLA /IF RESULT IF MINUS, SET TO ZERO (MH) TAD I (BLK /ADD REAL START BLK OF FILE (MH) DCA I (BLK /REPLACE NEW BLOCK(MH) MAIN1, JMS I (FINDNM /GET A NAME FROM THE SCRIPT FILE JMP NOHELP /HIT THE END OF THE FILE INSTEAD OF NAME JMS I (COMPAR /COMPARE THIS NAME WITH THE ONE HE HAD JMP MAIN1 /NOT A MATCH, TRY NEXT ONE JMS I (PRINT /PRINT THE HELP INFORMATION FOR THAT NAME TAD WILD /IF A WILD CARD TYPE NAME (I.E. '?') THEN SZA CLA / THEN KEEP SEARCHING PAST 1ST MATCH SINCE THERE JMP MAIN1 / MAY BE MORE. JMP MAINLP /NOT A WILD CARD, GET NEXT CMD DECODER NAME / HIT THE END OF THE SCRIPT FILE / IF DOING A WILD CARD NAME, SOME HJELP MAY HAVE ALREADY BEEN PRINTED. IF / NOT, PRINT AN ERROR MESSAGE ON THE TELETYPE (OR WHATEVER) NOHELP, TAD WASHLP /SEE IF HELP WAS ADMINISTERED SZA CLA JMP MAINLP /YES IT WAS, TRY NEXT NAME ON LIST JMS I (TYPE /TYPE THE ERROR MESSAGE ON THE TTY SORRY-1 DCA TXTNAM /PUT ON ZERO TERMINATER JMS I (TYPE NAME-1 /TYPE WHAT HELP MISSED JMS I (TYPE CRLF-1 /TYPE CARR RETURN, LINE FEED JMP MAINLP /NOW CONTINUE ON WITH IT / IF A '*' OR 'HELP' WAS TYPED AS HELP NAME, THEN PRINT A LISTING / OF ALL THE INFO IN THE HELP FILE FOR THE USER TO PICK FROM. HELPLS, JMS I [OUTSTR /PRINT THE HEADING MESSAGE AVAIL-1 TAD LINMAX /MAX NO. NAMES PER LINE DCA LINCNT /INITIAL COUNT OF NAMES PER LINE HELP1, JMS I (FINDNM /GET NEXT NAME JMP HELP2 /AT END OF FILE JMS I (NAMLST /PRINT THE NAME JMP HELP1 HELP2, TAD LINCNT /CHECK IF LAST CHAR WAS CRLF SNA!CLA JMP MAINLP /IT WAS, DON'T DO ANOTHER JMS I [OUTSTR CRLF-1 JMP MAINLP PAGE / CLOSE ALL FILES AND RETURN TO MONITOR / EXIT, TAD (32 /WRITE AN AND OF FILE TO THE OUTPUT JMS I [PCH TAD (-600 /CLOSE FILE BY WRITING 600(8) NULLS DCA COUNT JMS I [PCH /WRITE IT ISZ COUNT JMP .-2 TAD I [BLKSRT /COMPUTE ACTUAL FILE LENGTH FOR CLOSE CIA TAD I [OUTBLK /CURRENT BLOCK NUMBER IAC DCA OLEN CIF CDF 10 TAD I [7600 CDF 0 JMS I (USR /CLOSE THE FILE CLOSE FILNAM OLEN, 0 /THE LENGTH NOP /ERROR ON CLOSE... CAN'T HAPPEN(MH) JMP I (7605 /RETURN TO OS/8 / SEARCH FOR A <LF>& IN THE FILE / THIS IS THE START OF SOME HELP INFO FOR A SUBJECT WHICH IS NAMED AFTER / THE &. COPY THE NAME INTO 'TXTNAM' SO COMPARES CAN BE DONE LATER. / SKIP IF THE END OF FILE ISN'T FOUND ON THE WAY. FINDNM, 0 DCA TXTNAM /CLEAR THE NAME OUT DCA TXTNAM+1 DCA TXTNAM+2 DCA TXTNAM+3 DCA TXTNAM+4 DCA TXTNAM+5 DCA TXTNAM+6 FIND1, JMS I [GCH /LOOK FOR A <LF>& IN THE FILE TAD (-232 /CHECK FOR END OF FILE SNA JMP I FINDNM /RETURN IF FOUND TAD (232-212 /CHECK FOR LINE FEED SZA CLA JMP FIND1 /NOT IT FIND5, JMS I [GCH /TRY FOR THE & NOW TAD (-"& SNA CLA JMP FIND2 /FOUND A LF,& TAD ("&-232 /MAKE SURE THIS ISNT THE END OF FILE SNA CLA JMP I FINDNM /END OF FILE FOUND, RETURN JMP FIND1 /KEEP LOOKING FOR NAME FIND2, TAD (TXTNAM-1 /MOVE THE NAME INTO 'TXTNAM' DCA XR1 TAD (-7 /MAX OF 7 CHARACTERS DCA COUNT FIND3, JMS I [GCH /GET A NAME CHARACTER TAD (-215 /CHECK IF THE END OF LINE <CR> SNA CLA JMP FIND4 /END OF LINE, THATS IT TAD CHAR DCA I XR1 /SAVE CHARACTER IN TXTNAM ISZ COUNT JMP FIND3 /IF MORE CHARACTERS LEFT FIND4, ISZ FINDNM /BUMP RETURN ADDRESS FOR FOUND RETURN JMP I FINDNM PAGE / COMPARE TWO STRINGS, ONE IN NAME AND ONE IN TXTNAM. CHECK FOR WILD / CARD STUFF LATER WHEN THIS PART IS WORKING. / SKIP IF NAMES ARE EQUAL COMPAR, 0 TAD [NAME-1 /SET UP REGISTERS FOR COMPARE DCA XR1 TAD (TXTNAM-1 DCA XR2 TAD (-6 DCA COUNT COMP1, TAD I XR1 /GET A CHARACTER AND COMPARE WITH ONE FROM DCA CHAR TAD CHAR TAD (-"? /WILDCARD SZA CLA JMP COMP3 /NO WILDCARD ISZ XR2 ISZ WILD JMP COMP2 COMP3, TAD CHAR CIA / THE OTHER STRING TAD I XR2 SZA CLA JMP I COMPAR /NO MATCH, NORMAL RETURN COMP2, ISZ COUNT JMP COMP1 ISZ COMPAR /EQUAL RETURN IS RETRN ADDR+1 JMP I COMPAR / GET THE NEXT NAME FROM THE COMMAND DECODER AREA / STOP ON EITHER A ZERO OR THE NAME GOING TO ZERO NXTNAM, 0 ISZ NAMCNT /COUNT NAMES, ONLY 5 IN THE AREA SKP JMP I NXTNAM /RETURN, NO MORE NAMES CLA CLL CMA RTL /NUMBER OF WORDS OF NAME(-3) DCA COUNT TAD [NAME-1 DCA XR1 CDF 10 TAD I NAMPTR /GET 1ST CHARACTER OF NAME CDF 0 SNA JMP NXTN3 /MAYBE OUT OF NAMES(MH) NXTN1, DCA CHAR /SAVE THE WORD TAD CHAR RTR RTR RTR /ISOLATE HIGH 6 BITS JMS SIXTO8 DCA I XR1 /PUT IN NAME BUFFER TAD CHAR /NOW DO OTHER HALF JMS SIXTO8 DCA I XR1 /2ND CHARACTER OF WORD ISZ COUNT SKP JMP NXTN2 /NO MORE CHARACTERS IN NAME CDF 10 TAD I NAMPTR /LOOP IS STRANGE (SHOULD USE DEVICE WORD FOR CHECK) CDF 0 JMP NXTN1 NXTN2, ISZ NAMPTR /BUMP POINTER TO NEXT NAME IN AREA ISZ NAMPTR ISZ NXTNAM /BUMP RETURN ADDRESS FOR FOUND NAME JMP I NXTNAM NXTN3, TAD NAMCNT /CHECK FOR "HELP<CR>" OR "TTY:<<CR>"(MH) TAD (4 /IF 1ST TRY AT A NAME THEN NULL COMMAND WAS INPUT(MH) SZA!CLA JMP I NXTNAM /WASN'T NULL -- RETURN, END OF NAMES DCA NAME /WAS NULL -- CLEAR OUT NAME BUFFER DCA NAME+1 DCA NAME+2 DCA NAME+3 DCA NAME+4 DCA NAME+5 JMP NXTN2 /PREPARE TO RETURN(MH) SIXTO8, 0 /CONVERT 6BIT TO 8BIT AND (77 SNA /SNA IF NOT A NULL JMP I SIXTO8 /ELSE RETURN 8BIT NULL TAD (240 AND (77 TAD (240 JMP I SIXTO8 / PRINT ALL THE STUFF BETWEEN LINES OF THE OUTPUT DEVICE / THIS CONTINUES UNTIL A <LF>& IS SEEN OR AND OF FILE IS READ PRINT, 0 ISZ WASHLP /SET FLAG SAYING HE WAS HELPED PRINT3, JMS I [GCH /FIND 1ST LF WITHOUT FOLLOWING &, THEN PRINT(MH) TAD (-212 /WAS CHAR LF?(MH) SZA!CLA /(MH) JMP PRINT3 /NO -- READ NEXT CHAR(MH) JMS I [GCH /YES -- LOOK FOR &(MH) TAD (-"& /(MH) SNA!CLA /(MH) JMP PRINT3 /IT WAS & SO CONTINUE(MH) JMS I (OUTSTR /IT WASN'T & SO BEGIN PRINTING(MH) CRLF-1 TAD CHAR /(MH) SKP /(MH) PRINT1, JMS I [GCH /GET A CHARACTER JMS I [PCH /PRINT THE CHARACTER TAD CHAR /CHECK FOR <LF> TAD (-212 SZA CLA JMP PRINT1 JMS I [GCH /TRY FOR EITHER & OR END OF FILE OR FF TAD (-"& /CHECK FOR A & SNA JMP I PRINT /STOP ON <LF> & FOUND TAD (+32 /CHECK FOR <FF> ("&-"<FF> (MH) SNA /(MH) JMP I PRINT /(MH) TAD (-16 /-<EOT>+<FF> (MH) SNA JMP I PRINT /RETURN IF END OF FILE TAD (232-"@ SNA CLA JMP PRINT1 /SKIP "@" IF 1ST CHAR ON LINE TAD CHAR /GET THE CHARACTER BACK TO PRINT JMS I [PCH /PRINT IT JMP PRINT1 PAGE / TYPE A MESSAGE ON THE TELETYPE / THE MESSAGE IS ONE CHARACTER PER WORD, TERMINATED WITH A ZERO TYPE, 0 TAD I TYPE /GET THE MESSAGE ADDRESS ISZ TYPE /BUMP RETURN ADDRESS DCA XR1 TYPE1, TAD I XR1 /GET A CHARACTER SNA JMP I TYPE /END OF THE MESSAGE TLS /PRINT THE CHARACTER TYPE2, TSF JMP TYPE2 CLA JMP TYPE1 /LOOP /PRINT THE NEXT NAME ON THE OUTPUT DEVICE AND CHECK TO SEE IF / A CRLF IS NEEDED. EACH NAME IS TERMINATED WITH A TAB CHAR NAMLST, 0 TAD TXTNAM /CHECK FOR NULL NAME (MH) SZA!CLA /(MH) JMP NAMLS1 /NOT NULL NAME (MH) JMS OUTSTR /WAS NULL -- PRINT "<NONE>" (MH) NULNAM-1 /(MH) JMP NAMLS2 /PROCEED (MH) NAMLS1, JMS OUTSTR /PRINT THE NAME ON THE DEVICE TXTNAM-1 NAMLS2, JMS OUTSTR /PRINT A TAB AFTER NAME TAB-1 ISZ LINCNT /BUMP NUMBER PRINTED SO FAR JMP I NAMLST /NO YET, JUST RETURN TAD LINMAX /RESET TO MAX NUMBER OF NAMES PER LINE DCA LINCNT JMS OUTSTR /TYPE CRLF CRLF-1 JMP I NAMLST /NOW RETURN / PRINT A STRING ON THE OUTPUT DEVICE BY STUFFING THE CHARACTERS / IN THE OUTPUT FILE. THE ADDRESS-1 IS FOLLOWING THE JMS OUTSTR, 0 TAD I OUTSTR /GET THE ADDRESS ISZ OUTSTR DCA XR1 /POINTER TO NAME OUTS1, TAD I XR1 /GET A CHARACTER SNA JMP I OUTSTR /RETURN IF DONE JMS I [PCH /PRINT THE CHARACTER JMP OUTS1 PAGE / GET A CHARACTER FROM THE INPUT FILE GCH, 0 TAD CHAR /RETURN A EOF IF THE LAST WAS EOF TAD (-232 SZA CLA JMP I GIVCH /NOT EOF, GET NEXT CHARACTER TAD (232 /GET END OF FILE JMP I GCH GIVCH, INITBF /INITIALLY SET UP BUFFERS AND (377 /MASK THE CHARACTER DCA CHAR /SAVE CHARACTER TAD CHAR JMP I GCH /RETURN INITBF, TAD (-2000 /SET WORD COUNT FOR BLOCK(MH) DCA WDCTR TAD BUFAD DCA CHPTR /CHARACTER POINTER FOR BUFFER TAD I (BLKBGN /FIND OUT IF DATA TRANSFER WILL(MH) CMA!IAC /PASS END OF FILE, IF SO REDUCE(MH) TAD I (FSIZE /SIZE OF TRANSFER.(MH) DCA TEMP /SAVE -ST. BLK.-FILE SIZE(MH) TAD RDFCT /GET TRANSFER LENGTH IN BLKS(MH) CLL!RTL /(MH) RTL /(MH) RTL /(MH) TAD BLK /ADD CURRENT BLK(MH) TAD TEMP /SUBTRACT (ST. BLK OF FILE + SIZE)(MH) SPA!SNA /(MH) JMP INITOK /PROCEED -- DON"T CHG. TRANSFER LEN(MH) CLL!RTR /CHANGE TRANSFER LENGTH SO IT WON'T(MH) RTR /PASS END OF FILE(MH) RTR /(MH) CMA!IAC /(MH) TAD RDFCT /(MH) DCA RDFCT /ENTER THIS INTO FUNCTION WD.(MH) INITOK, JMS I DEVHND /CALL THE HANDLER TO READ A BLOCK RDFCT, 2000 /8 BLOCKS(MH) BUFAD, BUFFER BLK, 0 /BLOCK NUMBER JMP RDERR /ERROR RETURN(MH) NXTCH, TAD I CHPTR JMS GIVCH TAD (7400 AND I CHPTR /GET THE HIGH ORDER PART DCA CHTEM ISZ CHPTR TAD I CHPTR JMS GIVCH TAD I CHPTR AND (7400 CLL RTR RTR TAD CHTEM /GET OTHER HALF RTR RTR JMS GIVCH /GIVE THIRD CHARACTER OF GROUP ISZ CHPTR ISZ WDCTR /BUMP WORD COUNTER JMP NXTCH /LOOP TAD RDFCT /INCREMENT BLOCK NUMBER(MH) CLL!RTL /(MH) RTL /(MH) RTL /(MH) TAD BLK /(MH) DCA BLK /ENTER INTO FUNCTION WD(MH) JMP INITBF /READ IT IN PAGE / ROUTINE TO INITIALIZE ALL OF THIS STUFF / POINTERS GET SET AND THE FILES OPENED. INIT, 0 TAD (OUTHSP+1 DCA OUTHND TAD (OUTHSP+1 /HANDLER ADDRESS DCA OUTHN1 CDF 10 TAD I [7600 /GET OUTPUT DEVICE SNA JMP TTYDFL CIF 10 CDF 0 JMS I (USR /FETCH THE HANDLER FETCH OUTHN1, OUTHSP+1 JMP FETERR /ERROR RETURN(MH) TAD OUTHN1 /GET HANDLER ADDRESS JMP COMMON /COMMON CODE FOR BOTH FETCHES / DEFAULT TO THE TTY WHEN NO OUTPUT DEVICE IS SPECIFIED TTYDFL, TAD TTYNM /SET UP THE DEVICE NAME DCA TTY TAD TTYNM+1 DCA TTY+1 CIF 10 /FETCH THE OUTPUT HANDLERS CDF 0 JMS I (USR FETCH TTY, DEVICE TTY /DEFAULT TO THE TTY OUTHND, OUTHSP+1 /PLACE TO PUT THE HANDLER JMP NOTTY /IF TELETYPE HANDLER DOESNT EXIST TAD TTY+1 /SET UP DEVICE NUMBER FOR COMMON CODE CDF 10 DCA I [7600 CDF 0 TAD OUTHND /GET HANDLER ENTRY POINT COMMON, DCA OUTADR TAD (OUTBUF DCA I (OCPTR TAD (-200 /OUTPUT BUFFER COUNT DCA I (OUWDCT TAD (7600 DCA XR1 /COPY NAME FROM FIELD 1 CMD DEC AREA CDF 10 TAD I XR1 SNA TAD (1014 /HL.LS IS DEFAULT NAME IF NONE THERE DCA FILNAM TAD I XR1 DCA FILNAM+1 TAD I XR1 DCA FILNAM+2 TAD I XR1 /COPY EXTENSION SNA TAD (1423 /USE .LS AS DEFAULT EXTENSION DCA FILNAM+3 CDF 0 TAD (FILNAM /INITIALIZE THE ENTER DCA BLKSRT CDF CIF 10 TAD I (7600 CDF 0 JMS I (USR /DO ENTER WITH DEVICE NO IN AC ENTER BLKSRT, 0 /STARTING BLOCK FILLNG, 0 /LENGTH OF FILE JMP NOROOM /DEVICE FULL TAD BLKSRT DCA I [OUTBLK /INITIAL OUTPUT BLOCK TAD FILLNG DCA BLKCNT /NEGATIVE FILE LENGTH IN BLOCKS TAD (7605 /SET NXTNAM POINTER TO THE NEXT NAME DCA NAMPTR TAD (-5 DCA NAMCNT /NUMBER OF CHARACTERS IN NAME CIF 10 JMS I (USR /FETCH THE SYSTEM DEVICE HANDLER FETCH / TO GET THE DEVICE NUMBER TO LOOKUP HELP FILE DEVNAM, DEVICE SYS /(MH) DEVH, 0 /HANDLER ADDRESS FOR READING JMP FETERR /FETCH ERROR(MH) TAD DEVNAM+1 /GET THE SYS DEVICE NUMBER CIF 10 /LOOKUP HELP FILE WITH IT JMS I (USR LOOKUP BLKBGN, HELP8 /STARTING BLOCK OF THE FILE(MH) FSIZE, 0 /-NUMBER OF BLOCKS(MH) JMP NOSCRP /THE SCRIPT FILE (HELP FILE) ISNT THERE TAD DEVH DCA DEVHND /COPY TO PG 0 FOR ADDRESSABILITY JMP I INIT /THATS IT NOSCRP, JMS I (TYPE /TYPE MESSAGE SAYING HELP FILE NOT THERE NOSC-1 JMP I (7605 /RETURN TO NONITOR NOTTY, JMS I (TYPE TTYMIS-1 JMP I (7605 TTYNM, DEVICE TTY NOROOM, JMS I [TYPE /DEVICE FILL DEVFUL-1 JMP I (7605 /RETURN TO MONITOR PAGE / RESET THE INPUT FILE TO THE FIRST BLOCK AND RESET ALL THE CHARACTER / UNPACKING STUFF TO THE 1ST CHARACTER OF THE FILE RESET, 0 TAD I (BUFFER /RESET BUFFER POINTER TO START DCA CHPTR DCA WASHLP /SET NOT YET HELPED DCA CHAR /SET TO STOP EOF STUFF TAD (-2000 /RESET WORD COUNT FOR 8 BLOCKS(MH) DCA WDCTR TAD I (BLKBGN /RESET STARTING BLOCK OF FILE DCA I (BLK TAD (2000 /RESET TRANSFER LEN FOR 8 BLOCKS(MH) DCA I (RDFCT /(MH) TAD (INITBF /SET UP TO REREAD BLOCK 0 OF FILE DCA I (GIVCH JMP I RESET / PUT A CHARACTER OUT TO THE OUTPUT DEVICE / THIS IS A COOROUTINE TYPE GUY JUST LIKE THE INPUT HANDLER PCH, 0 JMP I RPOS /DISPATCH RPOS1, DCA I OCPTR /PUT 1ST CHARACTER IN BUFFER JMS RPOS RPOS2, DCA HOLD /SAVE THE 2ND CHARACTER JMS RPOS RPOS3, RTL /PACK THE CHARACTERS RTL DCA HOLD2 TAD HOLD2 AND (7400 TAD I OCPTR DCA I OCPTR /PART WAY DONE ISZ OCPTR TAD HOLD2 RTL RTL AND (7400 /NOW THE 2ND WORD TAD HOLD DCA I OCPTR ISZ OCPTR /BUMP POINTER AGAIN ISZ OUWDCT SKP JMS DUMP /IF AT THE END OF THE BUFFER RPOS4, JMS RPOS JMP RPOS1 RPOS, RPOS1 /INITIALLY SET TO THE 1ST CHARACTER JMP I PCH /RETURN TO THE USER OUWDCT, 0 /OUTPUT BUFFER WORD COUNTER OCPTR, 0 /OUTPUT CHARACTER BUFFER POINTER HOLD, 0 /TEMPORARY PLACE TO PUT A CHARACACTER HOLD2, 0 /SAME AS ABOVE / DUMP THE OUTPUT BUFFER TO THE OUTPUT FILE DUMP, 0 ISZ BLKCNT /SEE IF ANY ROOM LEFT TO DUMP TO SKP JMP DUMPER /IF OUT OF ROOM JMS I OUTADR /CALL THE HANDLER 4200 OUTBFA, OUTBUF /OUTPUT BUFFER ADDRESS OUTBLK, 0 /OUTPUT BUFFER BLOCK NUMBER JMP WRERR /WRITE ERROR(MH) TAD OUTBFA /RESET INPUT POINTER DCA OCPTR TAD (-200 /RESET THE WORD COUNT DCA OUWDCT ISZ OUTBLK /BUMP OUTPUT BLOCK NUMBER JMP I DUMP /RETURN DUMPER, JMS I (TYPE /TYPE ERROR MESSAGE DEVFUL-1 /FILE FULL ERROR JMP I (7605 WRERR, JMS I (TYPE /WRITE ERROR (MH) MWRERR-1 /(MH) JMP I (7605 /(MH) FETERR, JMS I (TYPE /FETCH ERROR (MH) MFEERR-1 /(MH) JMP I (7605 /(MH) RDERR, JMS I (TYPE /(READ ERROR (MH) MRDERR-1 /(MH) JMP I (7605 /(MH) MWRERR, "W; "R; "I; "T; "E; 240; "E; "R; "R; 215; 212; 0 MFEERR, "F; "E; "T; "C; "H; 240; "E; "R; "R; 215; 212; 0 MRDERR, "R; "E; "A; "D; 240; "E; "R; "R; 215; 212; 0 PAGE TTYMIS, "N;"O;" ;"T;"T;"Y;" ;"H;"A;"N;"D;215;212;0 NOSC, "N;"O;" ;"H;"E;"L;"P; 240; "F; "I; "L; "E; 215;212;0 NULNAM, 242; "N; "O; "N; "E; 242; 0 AVAIL, " ; "H; "E; "L; "P; ".; "S; "V; 215; 212 240; 215; 212 "C; "A; "L; "L; "I; "N; "G; 240; "C; "O; "M; "M; "A; "N; "D; "S; ": 215; 212; ".; "H; "E; "L; "P; 240; "P; "A; "R; "A; "M; "E; "T; "E; "R 215; 212 240; 215; 212 "P; "A; "R; "A; "M; "E; "T; "E; "R; "S; ":; 215; 212; 0 CRLF, 215;212;0 TAB, 211;0 SORRY, 215;212;"N;"O;240;"H;"E;"L;"P;240;"-;240;0 DEVFUL, "D;"E;"V;"I;"C;"E;240;"F;"U;"L;"L;215;212;0 HELP8, FILENAME HELP.HL VERS, 0201 /VERSION 2A (MH) PAGE OUTHSP, ZBLOCK 400 /OUTPUT HANDLER SPACE OUTBUF, ZBLOCK 400 /OUTPUT BUFFER FOR LISTING BUFFER=. /INPUT BUFFER FOR HELP FILE, 8 BLKS OR 4000 WDS (MH) $ |
Added src/os8/uni/CUSPS/MCPIP.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 | /7 OS/8 MCPIP MAGTAPE AND CASSETTE PIP / / / / / / / / / /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. / / / / / / / / / / / S.R. / REVISED FEB. 11, 1974 / SECOND REVISION: 7-AUG-75 /1. INSTALLED PATCH SEQ #1 , SEPT. 1974 DSN / (NOW TRANSFERS LAST 2 BYTES CORRECTLY IN IMAGE MODE) /2. BUMPED VERSION NUMBER TO V5 /3. FIXED /L BUG IF DEVICE NOT MAGTAPE OR CASSETTE / / 12-DEC-2018 LHN - installed DSN date patch 21.21.1 M / KCLR=6700 /CLEAR ALL /CLEAR STATUS A AND B REGISTERS. KSDR=6701 /SKIP ON DATA FLAG KSEN=6702 /SKIP ON ERROR KSBF=6703 /SKIP ON READY FLAG KLSA=6704 /LOAD STATUS A FROM AC 4-11 /CLEAR AC, THEN /LOAD 8 BIT COMPLEMENT OF STATUS A /BACK INTO AC KSAF=6705 /SKIP ON ANY FLAG OR ERROR KGOA=6706 /ASSERT THE CONTENTS OF STATUS A, /TRANSFER DATA IF READ OR WRITE KRSB=6707 /READ STATUS B INTO AC 4-11 FIXMRI CALL=4400 FIXMRI EXIT=5400 FIXMRI INCR=2000 /CORE ALLOCATION /00000-01777 COMMAND DECODER /02000-02377 OUTPUT HANDLER /02400-02777 INPUT HANDLER /03000-03777 CASSETTE OUTPUT BUFFER /04000-04777 CASSETTE INPUT BUFFER /05000-05577 STAND ALONE CASSETTE HANDLER /05600-07577 LOOKUP, ENTER, CLOSE /07600-07777 OS/8 /10000-11777 USR /12000-14577 PIPC /14600-17577 OS/8 INPUT/OUTPUT BUFFER /17600-17777 OS/8 /USR HAS THE FOLLOWING FREE LOCATIONS: /0-6 /10-17 (BUT GET DESTROYED) /20-37 TEMP=20 TEMP1=21 TEMP2=22 TEMP3=23 / STARTING ADDRESS = 12000 / JOB STATUS WORD = 6003 INHAND=2400 OUTHAND=2000 COBUF=3000 CIBUF=4000 PIPVERSION=6 PATCHLEV=77&"B SPCODE=6 CLCODE=0 REWCOD=1 FICODE=3 EOCODE=5 RECCOD=2 /V3 CHANGES: /1. SHRUNK 0S/8 BUFFER TO 3000 WORDS /2. ADDED VERSION NUMBER (/V) /3. MADE INDEPENDENT OF MAGIC LOCATIONS IN CASSETTE HANDLER /4. ADDED MAGTAPE SUPPORT OF CASSETTE FILE STRUCTURE /5. ALTMODE MEANS RETURN TO KBM /6. ^C DOESN'T CLOSE CASSETTES UNLESS WE ALREADY WROTE ON IT /7. FIXED BUG THAT CSA2 THRU CSA7 DIDN'T WORK /8. CR ALONE TO CD GIVES NO ERROR MESSAGE /9. ADDED ^O AND ^C SUPPORT TO MESSAGE PRINTOUT /10. GIVE ERRORS ON ILLEGAL * OR ? IN NAME /11. USES TTY: AS DEFAULT OUTPUT DEVICE ON /L /PROPOSED: /8. ALLOW *.* FOR CASSETTE INPUT /9. SUPPORT OF UNLABELED MAGTAPE STANDARD /10. /7 OR /9 SPECIFIES CHANNEL /FIXES SINCE FIELD TEST : /1. ^C ALWAYS BRINGS YOU BACK TO KBM /2. FIXED BUG RE CHECK FOR FILE FULL /3. MADE COMPATIBLE WITH NEW TM8E HANDLER /4. TIME-OUT ON CASSETTE READ /5. BE NICE-GUY IF OS/8 LOOKUP FAILURE /THIS ROUTINE LEAVES WITH INTERRUPTS OFF AND DEVICE SELECTED /AND READY. /THE NEW UNIT NUMBER (0-7) IS IN THE AC. /THE UNIT NUMBER IS IN BITS 8-11 OF THE AC. /RETURN 1 IS MADE IF THE UNIT IS NOT READY. /CINUSE IS SET TO 1. /THE HANDLER MUST NOT ALREADY BE IN USE. /THE DATA FIELD IS INTERROGATED /AND A RETURN CIF CDF IS BUILT /AND STORED IN LOCATION RETCIF *5000 FIXDVC, 0 DCA DVC RDF TAD (CIF CDF CDF 0 DCA TMP TAD I FIXDVC DCA ERRET ISZ FIXDVC TAD TMP DCA I ERRET TAD DVC SNA JMP CHECKR RAR /MOVE UNIT TO LINK; DEVICE TO AC AND (3 /MASK OFF DEVICE CODE DCA DVC /SAVE DEVICE CODE SZL TAD (100 DCA I (ABUNIT /SET UNIT IN BIT 5 TAD DVC CLL RTL RAL /UGLY DCA DVC /MOVE TO BITS 6-8 TAD (IOTBL DCA IOTPTR IOTLOOP,TAD I IOTPTR SNA /END OF TABLE? JMP CHECKR /YES DCA TMP TAD I TMP AND (7707 /MASK OUT OLD DVC TAD DVC /INSERT NEW ONE DCA I TMP /REPLACE ISZ IOTPTR /POINT TO NEXT ONE JMP IOTLOOP TMP, 0 DVC, 0 /DEVICE CODE IOTPTR, 0 CHECKR, JMS I (CLEAR TAD (200 JMS I (LOADA /SELECT DRIVE JMS I (CHECKB AND (7735 /IGNORE EOT/BOT FLAG /AND WLO TAD (-1 SZA CLA JMP I ERRET /NOT READY ISZ I (CINUSE JMP I FIXDVC ERRET, 0 /ERROR RETURN LOCATION FIDDLE, 0 CIF 10 JMS I (FID2 /NEED ROOM TAD (CIBUF+11 DCA 10 TAD FAST SZA CLA JMP DIREOL TAD (40 DCA I 10 TAD I (CIBUF+20 DCA I 10 TAD I (CIBUF+20 AND (177 SZA TAD (-40 SZA CLA TAD ("/-40 TAD (40 DCA SLSH TAD I (CIBUF+21 DCA I 10 TAD SLSH DCA I 10 INCR 10 INCR 10 TAD SLSH DCA I 10 TAD I (CIBUF+22 DCA I 10 TAD I (CIBUF+23 DCA I 10 DIREOL, TAD (15 DCA I 10 TAD (12 DCA I 10 TAD (32 DCA I 10 FIDLV, EXIT FIDDLE /0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 /F I L E N A M E S D D M M Y Y /F I L E N A . M E S M M / D D / Y Y CR LF ^Z FAST, 0 /0 MEANS F NOT SPECIFIED SLSH, "/ IOTBL, IOT0 IOT1 IOT4 IOT5 IOT6 IOT6C IOT7 0 PAGE UTIL, 0 DCA TEMPU DCA REWSW /ZERO REWIND SWITCH TAD I UTIL TAD (-10 SNA ISZ REWSW ISZ UTIL TAD (210 DCA TEMPFN TAD TEMPU JMS I (FIXDVC /FIX DEVICE CODE UTEND /UNIT NOT READY TAD (UT DCA CRET /SET RETURN ADDRESS STA DCA I (RW /NOTE FACT THAT OP AINT READ TAD TEMPFN JMS I (LOADA JMS GO /INITIATE UTIL JMP CRET+1 ISZ UTIL UTEND, HLT JMP I UTIL UT, JMS CHECKB /LOOK AT STATUS B AND (50 /CHECK FOR CL, EMPTY, OR WLO /GIVE NO ERROR ON WLO ************ /BAD FOR WRGAP SNA JMP OK /NO ERRORS TAD (-40 SZA CLA JMP NOTOK /ERROR NOT CL TAD REWSW SNA CLA /CL OK IF DID REWIND NOTOK, STA OK, JMS CLEAR TAD CINUSE SMA CLA JMP UTEND-1 TAD BSTATE /ERROR JMP UTEND TEMPU, 0 TEMPFN, 0 REWSW, 0 /1 MEANS OPERATION IS REWIND CHECKB, 0 IOT7, KRSB /READ STATUS B INTO AC 4-11 DCA BSTATE /SAVE STATUS B TAD BSTATE JMP I CHECKB CLEAR, 0 DCA CINUSE /LEAVE STATUS CONDITION IN AC; -1 MEANS ERROR IOT0, KCLR /CLEAR STATUS A AND B JMP I CLEAR GO, 0 IOT6, KGOA /ASSERT CONTENTS OF STATUS A CLA JMP I GO CHK, 0 JMS I (CHECKB AND (374 IOT1, KSDR SKP /DATA FLAG NOT UP - JMP I CHK TAD (-20 SNA CLA /IS IT END OF FILE? JMP I (ERRR /YES, ERROR - BUT DON'T RETRY TAD BSTATE JMP I CHK CINUSE, 0 /1 MEANS HANDLER IN USE BSTATE, 0 /STATUS OF REGISTER B ON ERROR DTEM, 0 DOPTION,JMS I (CONVRT 7601 DCA DTEM TAD I (OUNIT JMS I (LOOKUP JMP I (XER4 JMP MBNF /NOT FOUND INCR DTEM JMS I (DELET JMP I (XER77 /OUTPUT ERROR MBNF, TAD DTEM SNA CLA /ANYTHING DELETED? JMP I (XER24 /NO JMS UTIL REWIND CLA CIF CDF 10 /YES JMP I (DECODE CRET, 0 CDF 0 TAD (-200 /COUNT OF HOW LONG TO WAIT DCA I (OUTER IOL, JMS I (CTRLC JMS I (TIMEOUT IOT5, KSAF JMP IOL EXIT CRET PAGE HANDLER,0 DCA TUN TAD I HANDLER /GET FUNCTION CONTROL WORD AND L70 /ISOLATE FIELD OF BUFFER TAD LCDF DCA WCDF TAD I HANDLER /RETRIEVE FUNCTION CONTROL WORD RAL /READ/WRITE BIT TO LINK CLA RAL DCA RW /RW=1 IF WRITE ISZ HANDLER /POINT TO BUFFER ADDRESS TAD I HANDLER /GET BUFFER ADDRESS DCA BUFFER /SAVE IT ISZ HANDLER /POINT TO ERROR RETURN TAD TUN JMS I (FIXDVC LV /NOT READY TAD WCDF DCA BFIELD TAD WCDF DCA BFLD STA CLL RTL /TAD (-3 DCA ERKNT JMS SETUP /SET UP READ OR WRITE JMP I (CRET+1 ISZ HANDLER /POINT TO GOOD RETURN LV, HLT JMP I HANDLER RW, 0 /1 IF WRITE (-1 IF UTIL) ERKNT, -3 SETUP, 0 TAD RW TAD (WRITEX DCA I (CRET /SET RETURN ADDRESS TAD BUFFER DCA BPTR TAD BSIZE CMA /WANT TO READ ONE MORE TAD RW DCA BKNT TAD RW DCA OUTSW TAD RW CLL RTL RTL /WRITE FN CODE=20 TAD (200 /SELECT AND INTERRUPT ENABLE JMS I (LOADA WCDF, HLT TAD RW SZA CLA TAD I BPTR LCDF, CDF 0 JMS I (GO JMP I SETUP READX, JMS I (CHK AND L374 SZA JMP ERRX IOT6C, KGOA /GET CHAR JUST READ DCA BYTE ISZ BKNT SKP JMP RWCRC BMODE, TAD BYTE TUN, BFLD, HLT DCA I BPTR ISZ BPTR L374, 374 JMP I (CRET+1 /CRET ALREADY SET UP BSIZE, 200 OUTSW, 0 /1 MEANS WE BEGAN TO WRITE RWCRC, TAD (260 /ENABLE, ENABLE INTER, READ CRC JMS I (LOADA JMS I (GO JMS I (CRET JMS I (CHK CRCMN, JMS I (GO JMS I (CRET JMS I (CHECKB AND (7775 /IGNORE WLO TAD (-1 ERRX, SNA CLA /ERRORS? JMP ERRR+1 /NO - CLEAN BILL OF HEALTH ISZ ERKNT /TRY 3 TIMES JMP I (ERRCOV /RETRY ERRR, STA /ERROR WHILE READING CRC JMS I (CLEAR TAD I (CINUSE SMA CLA JMP LV-1 TAD I (BSTATE JMP LV WRITEX, JMP READX JMS I (CHK SZA JMP ERRX ISZ BKNT SKP JMP WCRC BFIELD, HLT ISZ BPTR L70, 70 TAD I BPTR JMS I (GO JMP I (CRET+1 WCRC, TAD (260 JMS I (LOADA JMP CRCMN BKNT, 0 /NUMBER OF CHARS EXPECTED BPTR, 0 /NEXT LOCATION IN BUFFER TO STORE INTO BYTE, 0 /TEMPORARILY HOLDS BYTE FOUND BUFFER, 0 PAGE / LOOKUP, ETC. F1=10 READ=0 WRITE=4000 REWIND=10 BACKFIL=30 WRGAP=40 BACKBLOCK=50 SKPFIL=70 HSIZE=40 OBUFFER=4600 /LOCATION OF OS/8 I/O BUFFER BINBUF=OBUFFER OBUFLEN=3000 HOBUFLEN=OBUFLEN%2 MAXBLK=OBUFLEN%400 FILNUM, 0 / ENTER / TAD UNIT / JMS I (ENTER / <ERROR RETURN> / <NORMAL RETURN> / ENTER FILENAME AS SPECIFIED IN SINCH / USER MUST SET SINCH BUT ONLY FIRST 25 (OCTAL) LOCATIONS. ENTER, 0 JMS I (LOOKUP JMP ERET /ERROR WHILE READING JMP NTF JMS I (DELET JMP ERET /ERROR WHILE DELETING NTF, JMS BACK JMP ERET /ERROR BACKING UP JMS I QH1 /WRITE NEW HEADER WRITE SINCH JMP ERET /CASSETTE NOT READY TAD I (RECSIZ DCA I (BSIZE INCR ENTER ERET, EXIT ENTER RDOR, 0 AND (374 /CASSETTE ONLY TAD (-200 SZA CLA /WAS ERROR JUST CRC? EXIT BACK /NO EXIT RDOR /YES, OK CONTINUE BACK, 0 BK4, JMS I QU1 BK2, BACKFIL /GO BACK TO FILE GAP EXIT BACK BK3, JMS I QU1 BACKBLOCK /BACK TO LAST RECORD JMP BKERR TAD I (RECSIZ DCA I (BSIZE JMS I QH1 /READ LAST RECORD OF PREV FILE READ+F1 /DON'T STORE IN BUFFER BINBUF JMS RDOR /^******* /ERROR READING LAST BLOCK NEWGAP, JMS I QU1 WRGAP /WRITE A NEW GAP EXIT BACK BK9, TAD (HSIZE DCA I (BSIZE INCR BACK EXIT BACK BKERR, AND (3775 /CASSETTES ONLY TAD (-41 SZA CLA /WAS ERROR CLEAR LEADER? EXIT BACK JMP NEWGAP BK1, JMP BK9 /FOR MAGTAPES: /BK2_BACKBLOCK /BK3_BK1 CLOSE, 0 JMS I QU1 WRGAP JMP CLRET /ERROR WHILE WRITING GAP TAD (HSIZE DCA I (BSIZE JMS I QH1 WRITE /WRITE SENTINEL ZER JMP CLRET JMS I QU1 REWIND JMP CLRET INCR CLOSE /SKIP ERROR RETURN CLRET, EXIT CLOSE CRED, 0 TAD I (INRECSZ DCA I (BSIZE TAD I (IUNIT JMS I QH1 READ CIBUF JMP INER TAD (CIBUF DCA I (CIPTR TAD I (INRECSZ CIA DCA I (CIKNT / CLA IAC / DCA DATAFLG EXIT CRED INER, AND EOFBIT SZA CLA /REAL ERROR? JMP I (XER4 /YES / TAD DATAFLG / SNA CLA /READ ANY DATA? / JMP INTO /NO REWIND / DCA DATAFLG /YES, COULD CLOSE OUTPUT AND OPEN NEXT INPUT INTO, CLA TAD I (IUNIT JMS I QU1 REWIND CLA TAD I (BIPTR CIF CDF 10 /NO, MERELY END-OF-FILE TAD (-OBUFFER+377 CLL RTL RTL RAL AND (17 DCA I (INTEN /NUMBER OF BLOCKS GOT JMP I (XFIN LOADA, 0 TAD ABUNIT IOT4, KLSA CLA JMP I LOADA EOFBIT, 254 /CHANGED TO 3673 FOR MAGTAPE /DATAFLG,0 /1 MEANS READ DATA QU1, UTIL QH1, HANDLER ABUNIT, 0 PAGE / LOOKUP / TAD UNIT / JMS I (LOOKUP / I/O ERROR RETURN / <NOT FOUND RETURN> / <FOUND RETURN> / ALWAYS LOOKS FOR THING SPECIFIED IN SINCH LOOKUP, 0 DCA P1 CDF 10 TAD I (7644 CDF 0 AND (10 /IS /U SPECIFIED? SZA CLA JMP GOODRT /YES, DO NOTHING TAD P1 JMS I QU2 REWIND JMP ERRIT TAD (HSIZE /SET LENGTH OF RECORD HEADER DCA I (BSIZE DCA I (FILNUM FL1, JMP FL2 /ZERO THIS LOCATION FOR MAGTAPES FLOOP, JMS I QU2 SKPFIL JMP ERRIT FL2, INCR I (FILNUM JMS I QH2 READ INCH JMP ERRIT TAD (INCH DCA P1 TAD I P1 SNA CLA /SENTINEL FILE? JMP NFNDRET /YES, NOT FOUND TAD (SINCH /NO, IS THIS THE ONE WANTED? DCA P2 TAD (-10 DCA SCNT SLOOP, TAD I P1 CIA TAD I P2 AND (177 /ONLY LAST 7 BITS NEED MATCH SZA CLA JMP FLOOP /FILE KEY NOT ONE DESIRED INCR P1 INCR P2 ISZ SCNT JMP SLOOP GOODRT, INCR LOOKUP /SKIP NOT FOUND RETURN NFNDRET,INCR LOOKUP /SKIP ERROR RETURN ERRIT, CLA TAD I (RECSIZ DCA I (BSIZE /BE NICE TO USER LRET, EXIT LOOKUP /BYE-BYE ERRT, AND EOTBIT /REAL ERROR? SZA CLA JMP ERRIT /YES JMP NFNDRET /NO, MERELY END-OF CASSETTE /END OF CASSETTD IS SIGNALLED BY /A SENTINEL FILE /B DOUBLE FILE GAP /C EOT EOTBIT, 314 /CHANGE TO 3663 FOR MAGTAPE P1, 0 P2, 0 SCNT, 0 DELET, 0 JMS I (BACK EXIT DELET JMS I QH2 /WRITE EMPTY HEADER WRITE+10 EMPTINCH EXIT DELET /ERROR WHILE DELETING CLL STA RAL /-2 TAD LOOKUP DCA LOOKUP JMP FLOOP /JUMP INTO LOOKUP TO CONTINUE ZER, 0 QH2, HANDLER QU2, UTIL FL3, JMP FL2 ERRCOV, JMS I (CLEAR JMS I (CTRLC TAD (250 JMS I (LOADA JMS I (GO /BACKSPACE BLOCK JMS I (CRET /WAIT JMS I (CHECKB AND (374 /KILL WRITE-LOCK BIT SZA CLA JMP I (ERRR JMS I (SETUP /RE-SET UP OPERATION JMP I (CRET+1 /GO AWAY TIMEOUT,0 ISZ INNER JMP I TIMEOUT ISZ OUTER JMP I TIMEOUT TAD I (RW / I/O HAS TAKEN A LOT OF TIME SZA CLA /IS IT A READ OP? JMP I TIMEOUT /NO, RETURN JMP I (ERRR /YES, ERROR INNER, 0 OUTER, -200 // DSN PATCH 21.21.1 M DSN13, 0 // TAD I DSN14 // RTR // RTR // AND DSN15 // JMP I DSN13 // DSN14, 7777 // DSN15, 0030 // PAGE /SEND CONTENTS OF OS/8 BUFFER TO CASSETTE /VIA CASSETTE OUTPUT BUFFER CWRITE, 0 TAD (OBUFFER DCA BUPTR /PT TO BEGIN OF BUFFER CDF 10 TAD I (INTEN /GET NO. OF BLOCKS READ SNA JMP CWLV CDF 0 CLL RTR RTR RAR /CONVERT TO WORDS IAC AND (7776 /ROUND UP TO EVEN NO. CLL RAR /DIVIDE BY TWO CIA /USE AS COUNT OF DOUBLE-WORDS DCA BUKNT /2000 TWO-WORD ENTRIES CWLOOP, CDF 10 TAD I BUPTR JMS CWR /SENT TO CASSETTE OUTPUT BUFFER CDF 10 TAD I BUPTR AND (7400 DCA TEMP1 INCR BUPTR /PT TO 2ND HALF TAD I BUPTR JMS CWR CDF 10 TAD I BUPTR AND (7400 CLL RTR RTR TAD TEMP1 RTR RTR JMS CWR INCR BUPTR /PT TO NEXT DOUBLE-WORD ISZ BUKNT /AT END OF BUFFER? JMP CWLOOP /NO CWLV, CIF CDF 10 EXIT CWRITE /YES, RETURN BUPTR, 0 /PTS INTO OBUUFER BUKNT, 0 /INSERT CHAR IN CASSETTE OUTPUT BUFFER /AND OUTPUT BUFFER IF BUFFER FULL CWR, 0 AND (377 CDF 0 DCA CWTMP TAD LDRFLG SZA CLA JMS I (LDRTST CDF 10 TAD I (7643 RTL /PUT /B OPTION IN LINK CDF 0 SNL CLA JMP GOK TAD CWTMP TAD M200 SNA CLA JMP I (PREFIN GOK, TAD CWTMP2 JMS CWR2 TAD CWTMP1 DCA CWTMP2 TAD CWTMP DCA CWTMP1 CWREX, EXIT CWR CWR2, 0 SPA JMP CWRIGN /IGNORE -1 CDF 0 DCA I COPTR /INSERT CHAR IN COBUF INCR COPTR ISZ COKNT /COBUF FULL? EXIT CWR2 /NO, SO RETURN JMS CWRI M200, CWRIGN, 7600 /CLA EXIT CWR2 CWRI, 0 TAD COKNT TAD RECSIZ SNA CLA EXIT CWRI /DO NOTHING IF BUFFER EMPTY TAD RECSIZ DCA I (BSIZE TAD I (OUNIT JMS I QH3 /YES, WRITE OUT BUFFER WRITE /WRITE FROM FIELD 0 PCOBUF, COBUF /LOCATION COBUF JMP XER7 /OUTPUT ERROR TAD PCOBUF DCA COPTR /BUFFER IS NOW EMPTY TAD RECSIZ CIA DCA COKNT EXIT CWRI RECSIZ, 0 /RECORD SIZE ON OUTPUT COPTR, COBUF /PTS TO NEXT FREE LOCATION IN COBUF COKNT, -1000 /NUMBER OF EMPTY SLOTS LEFT IN COBUF XER7, CIF CDF 10 AND (40 SZA CLA /CLEAR LEADER? JMP I (ER5 /YES, DEVICE FULL JMP I (ER7 /OUTPUT ERROR XER4, CIF CDF 10 JMP I (ER4 XER8, CIF CDF 10 JMP I (ER8 LDRFLG, 0 /NON-ZERO IF IGNORING LEADER CWTMP1, -1 CWTMP2, -1 CWTMP, 0 QH3, HANDLER PAGE PREFIN, TAD (200 JMS I (CWR2 /WRITE OUT TRAILER JMP CFIN2 /BUT NO CHECKSUM CFIN, TAD I (CWTMP2 /V3C JMS I (CWR2 TAD I (CWTMP1 /V3C JMS I (CWR2 CFIN2, JMS I (CWRI TAD I (OUNIT XCLOSE, JMS I (CLOSE JMP I (XER8 XLV, CIF CDF 10 JMP I (DECODE CTRTEM, CREAD, 0 TAD (OBUFFER DCA BIPTR TAD (-OBUFLEN DCA BIKNT ZRLUP, CDF 10 DCA I BIPTR /ZERO BUFFER CLA IAC AND I (7643 SZA CLA TAD (DCRE-CRE /GOT L OPTION TAD (CRE CDF 0 DCA XCRE /PT TO INPUT SUBR INCR BIPTR ISZ BIKNT JMP ZRLUP TAD (OBUFFER DCA BIPTR TAD (-HOBUFLEN DCA BIKNT /# OF DOUBLE-WORDS CRLOOP, JMS I XCRE CDF 10 DCA I BIPTR JMS I XCRE DCA TEMP2 JMS I XCRE DCA TEMP3 CDF 10 TAD TEMP3 RTL RTL AND (7400 TAD I BIPTR DCA I BIPTR INCR BIPTR TAD TEMP3 RTR RTR RAR AND (7400 TAD TEMP2 DCA I BIPTR INCR BIPTR ISZ BIKNT JMP CRLOOP /REITERATE CIF CDF 10 TAD (MAXBLK DCA I (INTEN /READ 10 BLOCKS EXIT CREAD /ALL DONE BIPTR, 0 /PTS INTO OBUFFER BIKNT, 0 XCRE, CRE CTRLC, 0 KSF EXIT CTRLC TAD (7600 KRS TAD (-7603 SZA CLA EXIT CTRLC JMS I (CLEAR TAD I (OUNIT SPA CLA JMP I (7600 TAD I (OUNIT DCA CTRTEM STA DCA I (OUNIT TAD CTRTEM JMS I (CLOSE JMP I (XER8 JMP I (7600 LOPTION,TAD I (IUNIT JMS I QU3 REWIND JMP I (INER CLA IAC DCA I (CIBUF LM1, JMP LM2 /ZERO FOR MAGTAPE JMS I QU3 SKPFIL JMP I (INER LM2, CIF CDF 10 JMP I (CHLOOP LM3, JMP LM2 QU3, UTIL PAGE CIKNT, -1 /ONE'S COMPLEMENT OF # OF BYTES LEFT IN CIBUF CIPTR, CIBUF /PTS TO NEXT BYTE IN CIBUF TO BE READ CRE, 0 CDF 0 TAD FTFLG /FIRST TIME THROUGH? SZA CLA JMP FT /YES TAD TLRFLG SNA CLA JMP EPI /TRAILER ISZ CIKNT SKP JMS I (CRED TAD I CIPTR JMS CHKSUM JMS CHKTLR TAD I CIPTR INCR CIPTR / AND (377 EXIT CRE /READ DIRECTORY DCRE, 0 CDF 0 ISZ CIKNT SKP JMS DCRED TAD I CIPTR TAD (-32 SNA JMP DCRE+1 /ALLOW '32' TO SHORTEN BUFFER TAD (32 SNA TAD (232 INCR CIPTR EXIT DCRE FT, DCA FTFLG TAD (200 /SEND LEADER EXIT CRE CHKSUM, 0 DCA CHTEM TAD CHTEM AND (200 SNA CLA TAD CHTEM TAD CHECKSUM DCA CHECKSUM EXIT CHKSUM CHTEM, 0 CHECKSUM,0 FTFLG, 1 /1 IF FIRST TIME HERE CHKPTR, CHKTBL TLRFLG, 0 CHKTBL, 0 /CHECKSUM LEFT PART 0 /CHECKSUM RIGHT PART 200 /TRAILER 32 /CTRL/Z -1 /TABLE END CHKTLR, 0 CDF 10 TAD I (7643 CDF 0 RTL /B SWITCH TO LINK SNL CLA EXIT CHKTLR TAD I CIPTR TAD (-200 SZA CLA EXIT CHKTLR DCA TLRFLG TAD (CHKTBL DCA CHKPTR TAD CHECKSUM RTR RTR RTR AND (77 DCA CHKTBL TAD CHECKSUM AND (77 DCA CHKTBL+1 EPI, TAD I CHKPTR SPA JMP I (INTO INCR CHKPTR EXIT CRE DCRED, 0 TAD (40 DCA I (BSIZE TAD I PCIBUF SNA CLA JMP I (INTO TAD I (IUNIT JMS I QH4 READ PCIBUF, CIBUF JMP I (INER TAD PCIBUF DCA CIPTR TAD I CIPTR SZA CLA TAD (-23 TAD (-2 DCA CIKNT JMS I (FIDDLE TAD I CIPTR SNA CLA EXIT DCRED JMS I QU4 SKPFIL JMP I (INER EXIT DCRED QH4, HANDLER QU4, UTIL /THIS WAS VERY UNOPTIMAL ADDING IN MAGTAPE SUPPORT /AFTER THE PROGRAM WAS ALL DONE AND BURIED. /IT COULD HAVE BEEN DONE IN A MUCH BETTER METHOD /IF IT WAS DESIGNED IN BEFORE THE PROGRAM WAS WRITTEN. PAGE /FIRST ARG: PTS TO OS/8 FILENAME IN FIELD 1 CONVRT, 0 STA TAD I CONVRT DCA ONPTR INCR CONVRT TAD (SINCH DCA CNPTR TAD (-4 DCA CKNT CONLUP, CDF 10 INCR ONPTR TAD I ONPTR CDF 0 RTR RTR RTR JMS CNV DCA I CNPTR INCR CNPTR CDF 10 TAD I ONPTR CDF 0 JMS CNV DCA I CNPTR INCR CNPTR ISZ CKNT JMP CONLUP TAD (40 DCA I CNPTR CDF 10 TAD I (7643 CDF 0 RTL SNL CLA EXIT CONVRT / NOT /B CDF 10 TAD I (7643 RAL CLA TAD I ONPTR CDF 0 SZA CLA EXIT CONVRT /EXTENSION SPECIFIED SZL EXIT CONVRT / /A CLL STA RAL TAD CNPTR DCA CNPTR TAD ("B /SET EXTENSION TO .BIN DCA I CNPTR INCR CNPTR TAD ("I DCA I CNPTR INCR CNPTR TAD ("N DCA I CNPTR EXIT CONVRT CNV, 0 AND (77 SZA /CHANGE 0 TO BLANK TAD (40 AND (77 TAD (40 EXIT CNV ONPTR, 0 CNPTR, 0 CKNT, 0 LOOK4ME,JMS CONVRT 7606 TAD IUNIT JMS I (LOOKUP JMP I (XER4 JMP XER24 TAD I (INCH+12 /GET H.O. INPUT RECORD SIZE CLL RTR RTR RAR TAD I (INCH+13 DCA INRECSZ TAD INRECSZ SNA JMP XER40 /RECORD SIZE 0 CLL TAD (-1001 SZL CLA JMP XER10 CIF CDF 10 JMP I (CHLOOP XER24, CIF CDF 10 JMP I (ER24 XER25, CIF CDF 10 JMP I (ER3 OUNIT, 0 IUNIT, 0 /IN CASE OF CASSETTES, CONTAINS UNIT (AS CHAR) /IN CASE OF MAGTAPE, CONTAINS HANDLER ENTRY ADDRESS /OUNIT IS -1 DURING A ^C CLOSE /-1 MEANS DON'T CLOSE ON ERROR INRECSZ,200 /RECORD SIZE ON INPUT XER40, CIF CDF 10 JMP I (ER40 XER10, CIF CDF 10 JMP I (ER10 F1CTRLC,0 JMS I (CTRLC CIF CDF 10 EXIT F1CTRLC PAGE SINCH, ZBLOCK 16 40;40;40;40;40;40 ZBLOCK 14 INCH, ZBLOCK 40 LDRTST, 0 TAD I (CWTMP TAD (-200 SNA CLA /LEADER? JMP I (CWREX /YES, EXIT CWR DCA I (LDRFLG /NO EXIT LDRTST ENTERO, TAD (COBUF DCA I (COPTR JMS I (CONVRT 7601 JMS I (MAKDAT TAD I (RECSIZ CLL RTL RTL RAL AND (17 DCA I (SINCH+12 TAD I (RECSIZ AND (377 DCA I (SINCH+13 CDF 10 TAD I (FILTYP CDF 0 DCA I (SINCH+11 DCA I (SINCH+14 DCA I (SINCH+15 CDF 10 TAD I (VRSNO CDF 0 DCA I (SINCH+24 TAD I (OUNIT JMS I (ENTER JMP I (XER25 CIF CDF 10 DCA I (OSWITCH JMP I (CONT1 PAGE ZOPTION,TAD I (OUNIT JMS I QU5 REWIND JMP XER77 /OUTPUT ERROR CDF 10 TAD I (7601 CDF 0 SNA CLA JMP NOFILE JMS I (CONVRT 7601 JMS I (LOOKUP JMP I (XER4 JMP I (XER24 JMS I QU5 SKPFIL JMP I (XER24 TAD (40 DCA I (BSIZE JMS I QH5 READ INCH JMP XER77 CLO3, JMS I (BACK JMP XER77 JMS I QH5 WRITE ZER JMP XER77 NOFILE, JMP I (XCLOSE MAKDAT, 0 CDF 10 TAD I (DATE CDF 0 SNA JMP SETOBL DCA SKNT TAD (SINCH+16 DCA SPTR TAD SKNT RTR RAR AND (37 JMS TWO /INSERT DAY TAD SKNT RTL RTL RAL AND (17 JMS TWO /INSERT MONTH TAD SKNT AND (7 / / TAD (106 JMP DSN11 //DSN PATCH 21.21.1 M STARTS HERE DSN10, / JMS TWO /INSERT YEAR EXIT MAKDAT SETOBL, TAD (-6 /SET DATE TO BLANKS DCA SKNT TAD (SINCH+16 DCA SPTR SELOOP, TAD (40 DCA I SPTR INCR SPTR ISZ SKNT JMP SELOOP EXIT MAKDAT SPTR, 0 SKNT, 0 TEM2, 0 TENS, 0 TWO, 0 DCA TEM2 TAD (60 DCA TENS TAD TEM2 TWOLUP, TAD (-12 SPA JMP NEG INCR TENS JMP TWOLUP NEG, TAD (72 DCA TEM2 TAD TENS DCA I SPTR INCR SPTR TAD TEM2 DCA I SPTR INCR SPTR EXIT TWO XER77, CIF CDF 10 JMP I (ER7 /OUTPUT ERROR QU5, UTIL QH5, HANDLER MHANDLER,0 /AC CONTAINS HANDLER ENTRY ADDRESS CIF 10 JMP I (MHAN /KLUDGEY LINK TO FIELD 1 MUTIL, 0 /AC CONTAINS ETC. CIF 10 JMP I (MUT // DSN PATCH 21.21.1 M DSN11, DCA SKNT // JMS I DSN12 // TAD SKNT // TAD (160 // JMP DSN10 // DSN12, DSN13 // PAGE FIELD 1 XR=10 *2000 START, JMP DEC2 /NORMAL STARTING ADDRESS CHAIN, JMP NODEC /CHAIN STARTING ADDRESS DECODE, STL CLA RAR AND I (7642 SZA CLA JMP KBM /RETURN TO KBM ON $ / WOULD BE NICE HERE TO TELL CD/BATCH NOT TO SPOOL DEC2, CALL (200 5 /COMMAND DECODE 5200 /USING SPECIAL MODE NODEC, TAD (OUTHAND+1 DCA ENTR /RESET PTR TO HANDLER LOCATION STA DCA I (OSWITCH JMS I (CHKSW /CHECK FOR SWITCH OPTIONS CDF 0 DCA I (OUTSW STA DCA I (OUNIT CDF 10 TAD I (7666 DCA I (DATE FET, TAD I (7600 /GET DEVICE NUMBER OF OUTPUT FILE SNA /WAS ONE SPECIFIED? JMP NOF /NO - NO OUTPUT FILE CALL (200 1 /FETCH HANDLER ENTR, OUTHAND+1 /INTO PAGES 2400 AND 2600 /REPLACED BY HANDLER STARTING ADDRESS JMP I (ER6 /OUTPUT DEVICE DOESN'T EXIST TAD I (7644 AND (1000 SZA CLA JMP I (FOXOUT /O SPECIFIED STL CLA RTR AND I (7645 TAD I (7601 SNA CLA JMP NOCAS /NO OUTPUT NAME TAD (7600 JMS I (CHKNAM JMP I (STARER /*.* TAD I (7600 JMS I (TCAS /CASSETTE? JMP I (FIXOUT /YES JMP I (FXMOUT /MAGTAPE NOCAS, TAD (7601 /NO DCA OBLK /GET PTR TO OUTPUT FILE NAME TAD ENTR DCA I (OENTRY /STORE AWAY OUTPUT HANDLER ENTRY PT TAD (OWRITE DCA PWRITE TAD (FINIO DCA I (XFINIO TAD I (7643 RTL SNL CLA JMP NOB TAD I (7604 /GET EXT SZA CLA JMP NOB TAD (216 /SET TO .BN DCA I (7604 NOB, TAD I (7600 /GET DEVICE NUMBER AGAIN CALL (200 3 /OPEN OUTPUT FILE OBLK, 7601 /PTS TO OUTPUT FILE NAME /REPLACED BY STARTING BLOCK NUMBER LEN, 0 /REPLACED BY NEGATIVE OF LENGTH OF OUT AREA JMP I (ER3 /FILE OPEN ERROR DCA I (REALEN /ZERO REAL LENGTH TAD OBLK DCA I (OBLOCK /SET STARTING BLOCK NUMBER CONT1, JMS I (GETIN / INITIALIZE INPUT STUFF CHLOOP, CIF CDF 0 JMS I (F1CTRLC CALL PREAD CIF CDF 0 JMS I (F1CTRLC CALL PWRITE JMP CHLOOP PREAD, OREAD PWRITE, OWRITE NOF, STL CLA RTR AND I (7645 SNA CLA JMP I (ER1 JMP I (FOXOUT /Z IMPLIES O KBM, CIF CDF 0 JMP I (7605 PAGE UDIG, 0 GETSWDIG,0 DCA UDIG TAD I (7645 AND (1774 SNA EXIT GETSWDIG /NO UNIT INCR GETSWDIG RTL RAL LUDIG, SZL JMP GOTUD INCR UDIG RAL JMP LUDIG G7600, GOTUD, 7600 TAD UDIG TAD (60 EXIT GETSWDIG FOXOUT, JMS GETSWDIG JMP I (ER1 /NO OUTPUT UNIT JMP GOTOU FIXOUT, TAD I (ENTR JMS I (GETDVC GOTOU, CDF 0 DCA I (OUNIT CDF 10 JMS I (SETCAS YAHAOU, TAD I (7643 AND (400 SZA CLA JMP DOPT STL CLA RTR AND I (7645 SZA CLA JMP ZOPT TAD I G7600 RTR RTR AND (377 /ISOLATE FILE TYPE DCA FILTYP /SAVE IT JMS I (GETLEN TAD (CW DCA I (PWRITE TAD (CFINIO DCA I (XFINIO TAD I (7643 RTL /B TO LINK SZL CLA CLA IAC CIF CDF 0 DCA I (LDRFLG STA DCA I (CWTMP1 STA DCA I (CWTMP2 DCA I (CHECKSUM JMP I (ENTERO / RETURN TO CONT1 FXMOUT, TAD I (ENTR CDF 0 DCA I (OUNIT CDF 10 JMS I (SETMAG TAD I (ENTR /GET LOCATION OF MAGTAPE HANDLER JMS SETDEN JMP YAHAOU SETDEN, 0 AND G7600 DCA MTA TAD I (7644 AND (10 SZA CLA /IS /U SPECIFIED? IAC /YES, USE DENSITY 3 TAD (2 /NO, USE DENSITY 2 DCA DEN CDF 0 TAD PARITY CLL RAR /LINK ON IF PARITY SPECIFIED SZL TAD PAR SNL TAD I MTA /GET RELATIVE LOC 0 AND (400 /ISOLATE PARITY TAD DEN /FORCE CORE DUMP MODE DCA I MTA /STORE BACK DENSITY AND PARITY CDF 10 JMP I SETDEN FILTYP, 0 BINTYP, 0 /SET BINARY TYPE - DON'T TOUCH LINK IAC IAC DCA FILTYP EXIT BINTYP DOPT, CIF CDF 0 JMP I (DOPTION ZOPT, CIF CDF 0 JMP I (ZOPTION MTA, 0 /FIRST LOC OF MAGTAPE HANDLER PARITY, 0 /0 MENAS NOT SPECIFIED, 1 MEANS SPECIFIED PARITY PAR, 0 /0 OR 400 SPECIFYING PARITY DEN, 2 /DENSITY PAGE FID2, 0 TAD I (CIBUF AND (177 /DF=0 TAD (-52 SNA CLA JMS EMPTY TAD I (CIBUF+10 DCA I (CIBUF+11 TAD I (CIBUF+7 DCA I (CIBUF+10 TAD I (CIBUF+6 DCA I (CIBUF+7 TAD (". DCA I (CIBUF+6 CIF 0 JMP I FID2 EMPTY, 0 TAD I (FAST SNA CLA JMP I EMPTY STA DCA I (CIKNT TAD (32 DCA I (CIBUF CIF 0 JMP I (FIDLV GETLEN, 0 CLL STA RAR /3777 AND I (7642 /GET H.O. OPTION DCA VRSNO TAD I (7646 /GET = OPTION (L.O. 12 BITS) CLL TAD (-1001 SZL CLA /LESS THAN 1001? JMP I (ER10 /NO, ERROR TAD I (7646 /YES SNA TAD (200 /200 IS DEFAULT RECORD SIZE CDF 0 DCA I (RECSIZ TAD I (RECSIZ CIA DCA I (COKNT CDF 10 EXIT GETLEN FINIO, JMS I (OWRITE TAD I (7600 /GET OUTPUT DEVICE NUMBER CALL (200 4 /CLOSE 7601 /PTR TO FILE NAME REALEN, 0 /LENGTH OF NEW OUTPUT FILE JMP ER8 /CLOSE ERROR JMP I (DECODE ER8, JMS I (PRINT TEXT /?CLOSE ERROR/ ER5, JMS I (PRINT TEXT /?OUTPUT DEVICE FULL/ ER30, JMS I (PRINT TEXT /?OUT=IN/ VRSNO, 0 ER6, JMS I (PRINT TEXT /?FETCH ERROR/ ER24, STA DCA I (SPSWTCH /RETURN FROM PRINT JMS I (PRINT TEXT /?FILE NOT FOUND/ ISZ I (FUDSW /FIXUP CASSETTE JMP I (CLO PAGE OREAD, 0 TAD (MAXBLK DCA INTEN /TRY TO READ 10 BLOCKS TAD (MAXBLK^200+10 DCA READSZ TAD I (7605 AND (17 TAD (7757 DCA TEMP /GET DCB ADDR TAD I TEMP /GET DCB AND (1000 SZA CLA JMP ER4 /INPUT DEVICE IS WRITE-ONLY TAD I TEMP SMA CLA JMP YES /NOT FILE-STRUCTURED TAD I (INLEN TAD (MAXBLK SMA SZA CLA /CAN I READ IN 10 BLOCKS? JMS SHORT /NO YES, CIF 0 /YES JMS I IENTRY /CALL INPUT HANDLER READSZ, 2010 /READ 20 PAGES INTO FIELD 1 OBUFFER /LOCATION 4000 IBLOCK, 0 /INPUT BLOCK NUMBER JMP QER4 /INPUT ERROR TAD IBLOCK TAD INTEN DCA IBLOCK /UPDATE BLOCK NUMBER TAD I (INLEN TAD INTEN DCA I (INLEN /UPDATE LENGTH LEFT TAD INTEN TAD (-MAXBLK SZA CLA JMP XFIN EXIT OREAD /RETURN INTEN, 10 /NUMBER OF BLOCKS JUST READ XFINIO, FINIO SHORT, 0 TAD I (INLEN /HOW MANY BLOCKS LEFT? CIA /MAKE POSITIVE DCA INTEN /THAT'S AS MUCH AS WE CAN READ TAD INTEN SNA XFIN, JMP I XFINIO /NO MORE CLL RTR RTR RTR /CONVERT TO PAGES IN BITS 1-5 TAD (10 /ADD IN FIELD 1 BIT DCA READSZ EXIT SHORT /RETURN IENTRY, 0 /PTS TO INPUT HANDLER ENTRY POINT QER4, SMA CLA JMP SFIN /NON-FATAL END-OF FILE ER4, JMS I (PRINT TEXT /?INPUT ERROR/ ER26, JMS I (PRINT TEXT /?TOO MANY FILES/ SFIN, TAD (7600 DCA TPTR SLUP, STA TAD TPTR DCA TPTR TAD I TPTR SNA CLA JMP SLUP TAD TPTR TAD (-OBUFFER+1 SNA JMP ALLZ TAD (377 /CHANGED FROM PIPC'S 376 CLL RTL RTL RAL AND (17 DCA INTEN JMP XFIN ALLZ, CLA IAC JMP .-3 TPTR, 0 ER3, JMS I (PRINT TEXT /?ENTER ERROR/ PAGE GETIN, 0 /OPEN INPUT FILE DCA DATE TAD I (7605 /ANY MORE FILES SPECIFIED? SNA CLA JMP NOIN /NO TAD I (7612 SZA CLA JMP I (ER26 /2ND INPUT FILE IS BAD TAD (7605 JMS I (CHKNAM JMP I (STARER /*.* TAD (7606 DCA IN /SET PTR TO FILE NAME TAD (INHAND+1 DCA IN3 TAD I (7605 /GET DEVICE NUMBER CALL (200 1 /FETCH NEW DEVICE HANDLER IN3, INHAND+1 /INTO PAGES 3200 AND 3400 /REPLACED BY ENTRY PT TO INPUT HANDLER JMP I (ER6 /FETCH ERROR TAD I (7643 AND (10 SZA CLA JMP I (FOXIN /I SPECIFIED CLA IAC /V3C AND I (7643 /LOOK AT /L OPTION TAD I (7606 SNA CLA JMP NOCAS2 /IF NO NAME IS GIVEN AND /L IS NOT SPECIFIED, THEN USE /MAGTAPE OR CASSETTE HANDLER AS IS, I.E. AS /A NON-FILE-STRUCTURED OS/8 DRIVER. TAD I (7605 JMS I (TCAS /CASSETTE? JMP I (FIXIN /YES JMP I (FIXMIN /MAGTAPE NOCAS2, CLA IAC AND I (7643 SZA CLA JMP ER11 /V3C /L SPECIFIED WHEN DEVICE WAS NOT MAGTAPE OR CASSETTE TAD (OREAD DCA I (PREAD TAD IN3 /GET NEW HANDLER ENTRY PT DCA I (IENTRY /STORE AWAY TAD I (7605 /GET DEVICE NUMBER AGAIN CALL (200 2 /PERFORM A LOOKUP IN, 0 /PTR TO FILE NAME /REPLACED BY INPUT BLOCK NUMBER IN2, 0 /REPLACED BY NEGATIVE OF INPUT FILE LENGTH JMP LKERR /LOOKUP ERROR TAD IN /GET NEW INPUT BLOCK DCA I (IBLOCK /STORE AWAY TAD IN2 /GET NEW INPUT FILE LENGTH DCA INLEN TAD I (1404 /GET # OF ADDITIONAL WORDS SNA JMP NONE TAD 17 DCA POINTER TAD I POINTER /GET FILE CREATION DATE SNA JMP NONE SETDAT, DCA DATE EXIT GETIN NONE, TAD I (7666 /USE TODAY'S DATE JMP SETDAT LKERR, CLA TAD I (7611 SZA CLA JMP I (ER24 /FILE NOT FOUND TAD I (7643 /TRY .BN RTL SNL CLA JMP I (ER24 / NOT /B TAD (216 DCA I (7611 JMP GETIN+1 INLEN, 0 DATE, 0 /OS8 DATE OF INPUT FILE POINTER,0 NOIN, CLA IAC AND I (7643 SNA CLA JMP I (ER21 JMP I (FOXIN / /L SPECIFIED ER11, JMS I (PRINT /V3C TEXT /?L OPTION OUT OF CONTEXT/ PAGE /ENTER WITH INTEN BLOCKS TO WRITE OWRITE, 0 TAD I (INTEN /HOW MUCH IS THERE TO WRITE? SNA EXIT OWRITE /NOTHING DCA OUTEN /SAVE NUMBER OF BLOCKS TO WRITE TAD I (7600 AND (17 TAD (7757 DCA TEMP STL CLA RTR AND I TEMP SZA CLA JMP I (ER7 /OUTPUT DEVICE IS READ-ONLY TAD OUTEN CLL RTR RTR RTR /CONVERT TO PAGES TAD (4010 /FIELD 1 (WRITE DIRECTLY FROM INPUT BUFFER) DCA WRSIZ TAD I (LEN SNA CLA JMP NFS /NON-FILE STRUCTURED TAD I (REALEN TAD OUTEN STL TAD I (LEN SNL SZA CLA JMP I (ER5 NFS, CIF 0 JMS I OENTRY /CALL OUTPUT HANDLER WRSIZ, 6010 /WRITE 20 PAGES FROM FIELD 1 OBUFFER /LOCATION 4000 OBLOCK, 0 /OUTPUT BLOCK NUMBER JMP I (ER7 /OUTPUT ERROR TAD OBLOCK TAD OUTEN DCA OBLOCK /UPDATE OUTPUT BLOCK NUMBER TAD I (REALEN TAD OUTEN DCA I (REALEN /UPDATE LENGTH WROTE EXIT OWRITE OENTRY, 0 OUTEN, 0 FOXIN, JMS I (GETSWDIG JMP I (ER21 JMP GOTIU FIXIN, TAD I (IN3 /GET INPUT HANDLER ADDRESS JMS I (GETDVC GOTIU, CDF 0 DCA I (IUNIT CDF 10 JMS I (SETCAS YAHAIN, CDF 0 TAD I (OUNIT CIA TAD I (IUNIT SNA CLA JMP I (ER30 STA DCA I (CIKNT DCA I (CHECKSUM CLA IAC DCA I (TLRFLG CDF 10 TAD (CR DCA I (PREAD TAD I (7643 RTL CLA RAL CDF 0 DCA I (FTFLG CDF 10 JMS I (GETLEN TAD I (7643 AND (100 / F OPTION? CDF 0 DCA I (FAST CDF 10 CLA IAC AND I (7643 CIF CDF 0 SZA CLA JMP I (LOPTION JMP I (LOOK4ME /RETURN TO CHLOOP FIXMIN, TAD I (IN3 CDF 0 DCA I (IUNIT CDF 10 JMS I (SETMAG TAD I (IN3 JMS I (SETDEN JMP YAHAIN PAGE PRINT, 0 CLA CDF 10 DCA CTOFLG /ALLOW ECHOING JMS CRLF PRLUP, TAD I PRINT RTR RTR RTR JMS PRIN TAD I PRINT JMS PRIN INCR PRINT JMP PRLUP PRIN, 0 AND (77 SNA JMP PRFIN TAD (240 AND (77 TAD (240 DCA TM KSF JMP NOBOTH TAD (200 KRS TAD (-203 SNA JMP KBM2 TAD (203-217 SZA CLA JMP NOBOTH TAD ("^ JMS TYPE TAD ("O JMS TYPE JMS CRLF ISZ CTOFLG NOBOTH, TAD TM JMS TYPE EXIT PRIN PRFIN, JMS CRLF DCA FUDSW TAD I (SPSWTCH SNA CLA JMP CLO DCA I (SPSWTCH /SWITCH NON-ZERO MEANS RETURN INCR PRINT /POINT TO RETURN JMP I PRINT /DO A CLOSE IF OUTPUT CASSETTE OPEN CLO, CDF 0 TAD I (OUNIT CDF 10 SPA CLA JMP I (DECODE TAD OSWITCH SZA CLA JMP I (DECODE CDF 0 TAD I (OUTSW CDF 10 SNA CLA /DID WE WRITE ON OUTPUT CASSETTE? JMP I (DECODE /NO CIF CDF 0 TAD I (OUNIT DCA TEMP STA DCA I (OUNIT TAD FUDSW SZA CLA JMP I (CLO3 TAD TEMP JMP I (XCLOSE OSWITCH,-1 /0 MEANS OUTPUT CASSETTE OPEN KBM2, CIF CDF 0 JMP I L7600 /RETURN TO OS/8 FUDSW, 0 /1 MEANS GOT OS/8 LOOKUP FAILURE TYPE, 0 DCA TM TAD CTOFLG SZA CLA EXIT TYPE /NOT ECHOING TAD TM TLS TSF JMP .-1 L7600, 7600 EXIT TYPE CRLF, 0 TAD (215 JMS TYPE TAD (212 JMS TYPE EXIT CRLF CTOFLG, 0 /1 MEANS DON'T ECHO TM, 0 ER7, JMS PRINT TEXT /?OUTPUT ERROR/ CFINIO, CIF CDF 0 JMS I (CWRITE CIF CDF 0 JMP I (CFIN /FINISH OUTPUT AND WRITE SENTINEL /RETURN TO DECODE PAGE ER10, JMS I (PRINT TEXT /?RECORD SIZE TOO BIG/ /ENTRY POINT REL 1: UNIT 1 /ENTRY POINT REL 7: UNIT 0 GETDVC, 0 IAC DCA TEMP STL CLA RTL /2 AND TEMP RAR DCA UNIT /DETERMINE IF UNIT 0 OR 1 TAD TEMP AND (7600 DCA TEMP CDF 0 LOOKIO, ISZ TEMP TAD I TEMP /SEARCH HANDLER FOR ANY IOT AND (7700 TAD (-6700 SZA CLA JMP LOOKIO TAD I TEMP /GET CASSETETE IOT CDF 10 AND (30 /V3 BUG FIX FROM V2 CLL RTR TAD UNIT TAD (60 EXIT GETDVC /LEAVE IT IN AC UNIT, 0 CHKNAM, 0 /DON'T ALLOW *'S OR ?'S DCA XR /IN OUTPUT OR INPUT NAME TAD I XR TAD (-5200 SNA JMP STARNM /ENTIRE NAME IS * TAD (5200 JMS CHKSTR TAD I XR JMS CHKSTR TAD I XR JMS CHKSTR TAD I XR JMS CHKSTR ISZ CHKNAM JMP I CHKNAM /NAME GOOD, RETURN 2 CHKSTR, 0 DCA TEM TAD TEM CLL RTR RTR RTR JMS CHC TAD TEM JMS CHC JMP I CHKSTR CHC, 0 AND (77 TAD (-52 SNA JMP STARER /* IN NAME TAD (52-77 SZA CLA JMP I CHC /OKAY STARER, JMS I (PRINT TEXT /?ILLEGAL * OR ?/ STARNM, ISZ XR ISZ XR TAD I XR TAD (-5200 SZA CLA JMP STARER /NOT *.* JMP I CHKNAM /TAKE SPECIAL RETURN ON *.* TEM, 0 CHKSW, 0 /CHECK SWITCHES TAD I (7644 AND (4 /CHECK FOR /V SZA CLA JMS I (VERSN /PRINT MCPIP VERSION # TAD I (7644 AND (400 /CHECK FOR /P /NOTE /P = 400 SAME AS ODD PARITY CODE SZA JMP ODDPAR TAD I (7643 AND (200 /CHECK FOR /E SZA CLA JMP EVPAR GOTP, NOP JMP I CHKSW ODDPAR, /400 IN AC EVPAR, DCA I (PAR CLA IAC DCA I (PARITY JMP GOTP PAGE SPSWTCH,0 /NON-ZERO MEANS RETURN FROM PRINT /RET 1: CASSETTE /RET 2: MAGTAPE /RET 3: NEITHER TCAS, 0 AND (17 /ISOLATE TAD (7757 /ADD IN BASE OF DCB TABLE DCA TEMP /TO GET DCB ADDRESS TAD I TEMP /GET DCB AND (770 /ISOLATE UNIT TYPE TAD (-270 /CASSETTE HANDLER TYPE IS 27 SNA JMP ITSCAS TAD (270-200 SZA CLA INCR TCAS /NOTHING SPECIAL INCR TCAS /MAGTAPE ITSCAS, EXIT TCAS VERSN, 0 STA DCA SPSWTCH /RETURN FROM PRINT JMS I (PRINT TEXT \OS/8 MCPIP V\ *.-1 PIPVERSION+60^100+PATCHLEV 0 JMP I VERSN ER1, TAD I (7605 SNA CLA JMP I (DECODE /NO OUT AND NO IN CLA IAC AND I (7643 /WAS /L SPECIFIED? SZA CLA JMP SETTY /YES JMS I (PRINT TEXT /?NO OUTPUT FILE/ ER40, JMS I (PRINT TEXT /?CANNOT HANDLE VARIABLE-LENGTH RECORDS/ SETTY, TAD (3100 DCA Y JMS I (200 12 /INQUIRE TT, 2424 Y, 3100 /DEVICE TTY 0 JMP ER99 TAD Y /GET DEVICE NO. OF TTY: DCA I (7600 JMP I (FET ER99, JMS I (PRINT TEXT /?TTY DOES NOT EXIST/ ER21, JMS I (PRINT TEXT /?NO INPUT FILE/ CW, 0 CIF CDF 0 JMS I (CWRITE EXIT CW CR, 0 CIF CDF 0 JMS I (CREAD EXIT CR PAGE SETCAS, 0 TAD (UTIL JMS SETU TAD (HANDLER JMS SETH CDF 0 TAD (BACKFIL DCA I (BK2 TAD I (BK4 DCA I (BK3 TAD (254 DCA I (EOFBIT TAD I (FL3 DCA I (FL1 TAD (314 DCA I (EOTBIT TAD I (LM3 DCA I (LM1 CDF 10 JMP I SETCAS SETMAG, 0 TAD (MUTIL JMS SETU TAD (MHANDLER JMS SETH CDF 0 TAD (BACKBLOCK DCA I (BK2 TAD I (BK1 DCA I (BK3 TAD (3673 DCA I (EOFBIT DCA I (FL1 TAD (3663 DCA I (EOTBIT DCA I (LM1 CDF 10 JMP I SETMAG SETU, 0 DCA SETH CDF 0 TAD SETH DCA I (QU1 TAD SETH DCA I (QU2 TAD SETH DCA I (QU3 TAD SETH DCA I (QU4 TAD SETH DCA I (QU5 CDF 10 JMP I SETU SETH, 0 DCA SETU CDF 0 TAD SETU DCA I (QH1 TAD SETU DCA I (QH2 TAD SETU DCA I (QH3 TAD SETU DCA I (QH4 TAD SETU DCA I (QH5 CDF 10 JMP I SETH PAGE MH, 0 MHAN, SZA DCA MENTRY TAD I (MHANDLER DCA MH /PICK UP ARGS VIA MH TAD I MH /GET FN WORD TAD (SPCODE /ADD SPECIAL CODE DCA MARG1 ISZ MH TAD I MH /GET CORE LOC DCA MARG2 ISZ MH /PT TO ERROR RETURN TAD I (BSIZE /GET BLOCKSIZE CIA DCA MARG3 /STORE NEG CDF 10 CIF 0 JMS I MENTRY /CALL MAGTAPE HANDLER MARG1, HLT MARG2, HLT MARG3, HLT SKP /TAKE ERROR RETURN ISZ MH /NORMAL RETURN CIF CDF 0 JMP I MH /GO BACK TO FIELD 0 MENTRY, 0 MU, 0 MUT, SZA DCA MENTRY /DF=0 TAD I (MUTIL /PICK UP ARGS DCA MU /VIA 'MU' TAD I MU /GET UTILITY FUNCTION ISZ MU CDF 10 TAD (-REWIND SNA JMP REWT TAD (REWIND-BACKFIL SNA JMP BAKFT TAD (BACKFIL-WRGAP SNA JMP WRGT TAD (WRGAP-BACKBLOCK SNA JMP BAKBT TAD (BACKBLOCK-SKPFIL SZA CLA HLT /IMPOSSIBLE SKPFT, STL CLA RAR /4000=WRITE BAKFT, TAD (WRITE+FICODE-REWCOD REWT, TAD (REWCOD-EOCODE WRGT, TAD (EOCODE-RECCOD-WRITE BAKBT, TAD (RECCOD+WRITE DCA MRG1 CIF 0 JMS I MENTRY MRG1, HLT MCA, HLT /IRRELEVANT MWC, -1 SKP /ERROR RETURN ISZ MU CIF CDF 0 JMP I MU /RETURN EMPTINCH,52;105;115;120;124;131;40;40;40;14 0;0;0;0;40;40;40;40;40;40 ZBLOCK 14 PAGE *2000 $ |
Added src/os8/uni/CUSPS/MSBAT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 | /MARK SENSE BATCH AND PIP / / / / / / / // / / / / /COPYRIGHT (C) 1974, 1975, 1977 /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. / / / / / / /MARK SENSE BATCH AND PIP JANUARY 9, 1974 / / / / AUTHOR: / MARK B. ROSENTHAL / DIGITAL EQUIPMENT CORPORATION / / VERSION 3A M.H. 28-APR-77 / VERSION 3B / / / / / / / / / / / / / L7775=CLA CLL CMA RTL L7776=CLA CLL CMA RAL L7777=CLA CLL CMA L0002=CLA CLL CML RTL L0001=CLA CLL IAC CONTCH=3 /CONTINUATION CHARACTER RUBOUT=7 /RUBOUT BITS JOBBIT=0200 /BIT POSITION OF $JOB IN COLUMN 1 EOFCHR=6004 /END OF FILE CARD CHARACTER IS _ TABCHR=6010 /TAB CHARACTER FFCHR=3010 /FORM FEED CHARACTER NOCHR=6400 /# CHARACTER RCSE=6672 /CARD READER SELECT AND SKIP IF READY RCSD=6671 /CARD READER SKIP IF CARD DONE RCRD=6674 /CARD READER CLEAR CARD DONE FLAG RCSF=6631 /CARD READER SKIP IF DATA READY RCRB=6634 /CARD READER READ BINARY KCF=6030 /CLEAR KEYBOARD FLAG SYSNO=CLA CLL IAC /OS8 DEVICE NUMBER FOR SYS: DSKNO=CLA CLL CML RTL /OS8 DEVICE NUMBER FOR DSK: FETCH=1 LOOKUP=2 ENTER=3 CLOSE=4 DECODE=5 CHAIN=6 USRIN=10 USROUT=11 F0=0 F1=10 JSBITS=7746 /JOB STATUS WORD *10 XR1, 0 XR2, 0 XRCDR, 0 XROPT, 0 *20 ERROR=JMS I .; XERR CONVRT=JMS I .; XCONVR OUT=JMS I .;OUTAD, XOUT SAVFLD=JMS I .;XSAVDF USR=JMS I .; 200 KEYWD, 0;0;0;0 TEMP1, 0 TEMP2, 0 TEMP3, 0 TEMP4, 0 TEMP5, 0 OPTCNT, 0 /OUTPUT BUFFER COUNT OPTSW, 0 /OUTPUT BUFFER THREE WAY SWITCH KEYADR, 0 KEYVAL, 0 ERRFLG, 0 ERRCNT, 0 CONFLG, 0 LNCNT, 0 USRFLG, 0 OFILE, ZBLOCK 5 /OUTPUT FILE DEVICE, LENGTH, AND NAME CDRFLG, -1 /CDRIN TO PASSES LAST CARD IF 0 BCLSW, 0 CDREOF, -1 DEVENT, 0 /ENTRY ADDRESS OF OUTPUT DEVICE HANDLER IOERR, 0 /ERROR NUMBER VERNO9, ISZ IOERR IOER8, ISZ IOERR CDRER7, ISZ IOERR OPTER6, ISZ IOERR OPTER5, ISZ IOERR OPTER4, ISZ IOERR OPTER3, ISZ IOERR OPTER2, ISZ IOERR OPTER1, JMP I .+1 IOERR1 *200 START, ISZ USRFLG;SKP /IS THE USR IN CORE? JMP CD /YES CIF 10;JMS I (7700;USRIN /LOCK USR IN CORE CD, L7777 /SET FLAG FOR USR IN CORE DCA USRFLG CIF 10;USR;DECODE;0 /DELETE TENTATIVE FILES TAD (7577 /COPY OUTPUT FILE #1 (NAME AND DEVICE) DCA XR1 CDF F1 TAD I (7644 /TEST /V SWITCH AND (4 SZA CLA JMP VERNO9 /YES - PRINT VERSION NUMBER TAD I XR1 SNA /IF NOT SPECIFIED, DSKNO /USE DEVICE DSK: DCA OFILE TAD I XR1 SNA /WAS A NAME GIVEN? JMP OPTER1 /NO INIT1, DCA OFILE+1 TAD I XR1 DCA OFILE+2 TAD I XR1 DCA OFILE+3 TAD I XR1 DCA OFILE+4 TAD (OFILE+1 DCA BLOKNO /SET FILE NAME ADDRESS TAD I (7605 /GET SECOND OUTPUT DEVICE SPECIFICATION DCA I (7600 /MOVE TO FIRST FOR SPOOLING IN BATCH CDF TAD BLOKNO /GET ADDRESS OF FILE NAME DCA I (CLOSNM /AND SAVE FOR CALL TO CLOSE TAD (OPTDEV&7600+1 /SET DEVICE HANDLER SPACE DCA DEVHDL TAD OFILE CIF 10;USR;FETCH /FETCH DEVICE HANDLER DEVHDL, OPTDEV&7600+1 /2 PAGES JMP OPTER2 /ERROR - CANNOT FETCH HANDLER TAD DEVHDL /MOVE ENTRY ADDRESS DCA DEVENT /TO PAGE ZERO TAD OFILE /ENTER THE FILE NAME AS TENTATIVE CIF 10;USR;ENTER BLOKNO, OFILE+1 /FILE NAME, STARTING BLOCK RETURNED HERE FILLEN, 0 /RETURNS FILE LENGTH HERE JMP OPTER3 /CANNOT ENTER FILE CIF 10;USR;USROUT /DISMISS THE USR DCA USRFLG /CLEAR USR IN CORE FLAG CDF 10 TAD BLOKNO /SAVE STARTING BLOCK NO. FOR BATCH DCA I (7620 TAD OFILE /SAVE DEVICE NO. FOR BATCH AND (17 DCA I (7617 TAD I (7643 /GET OPTIONS CDF F0 AND (2100 / /B OR /F SNA DCA I (EOFJMP /IF NEITHER, THEN WE CHAIN TO BATCH CLL RTL /GET /B OUT OF AC SZA CLA /IF AC=0 START WITH BASIC KEYWORDS TAD (FORKEY-BASKEY TAD (BASKEY-15 DCA KEYADR JMP I (INIT5 PAGE INIT5, TAD (BPRI2 /TAILOR IT FOR BATCH PROCESSING DCA I (BPRKEY /"PRINT #4," TAD (BINP2 DCA I (BINKEY /"INPUT #3," TAD (BSTO2 DCA I (BSTKEY /"CLOSE# 4\STOP" TAD (BEND2 DCA I (BENKEY /"CLOSE #4\END" CDF F1 DCA I (CBAS5 /NO JUMP DCA I (DATL48 /NO JUMP TAD (CL2M1A /".R LOADER_*GENIOX" DCA I (CL2SX TAD I (7643 /TEST /I OPTION (INTERACTIVE) AND (10 SNA CLA JMP INIT6 TAD BASJMP /SET UP FOR FILES 0 & 1 DCA I (CBAS5 /SET UP THE JMP TAD BASJM1 /SET UP JUMP DCA I (DATL48 TAD (CL2M1 /".R LOADER_*" DCA I (CL2SX CDF F0 TAD (BPRI DCA I (BPRKEY TAD (BINP DCA I (BINKEY TAD (BSTO DCA I (BSTKEY TAD (BEND DCA I (BENKEY INIT6, CDF 10 TAD I (7644 /TEST /T OPTION AND (20 SNA CLA TAD (BATLPT-BATTTY TAD (BATTTY CIF CDF F1 JMS I (MOVODV TAD I (7645 /TEST /2 OPTION AND (200 SNA CLA JMP INIT3 TAD (CF2 /FORTRAN 2 DCA I (FORADR TAD (CL2 DCA I (LOAADR TAD (DATX2 JMP INIT4 INIT3, TAD (CF4 /FORTRAN 4 DCA I (FORADR TAD (CL4 DCA I (LOAADR TAD (DATX4 /INITIALIZE $DATA INIT4, DCA I (DATFTN TAD I (DATFTN DCA I (DATADR TAD (SAVARA DCA I (SAVPNT DCA I (NAMCNT CDF F0 DCA BCLSW /NO BCL CARDS YET L7777 DCA CDREOF /RESET EOF SWITCH TAD I (BLOKNO /SET STARTING BLOCK NUMBER DCA I (OPTBLK TAD (OPTBUF-1 DCA XROPT TAD (-200 DCA OPTCNT L7775 DCA OPTSW DCA ERRCNT /CLEAR COUNT OF CARDS IN ERROR JMP I (READY BASJMP, JMP CBAS7&177+INIT5 BASJM1, JMP DATL49&177+INIT5 PAGE READY, JMS I (CDRIN /READ A CARD JMP I (EOF /END OF FILE SENSED TAD I XRCDR /GET COLUMN 1 DCA KEYWD /SAVE AS KEYWORD BITS TAD XRCDR DCA XR2 /TRANSLATE LINE NUMBER TAD (-5 DCA TEMP1 DCA LNCNT /CLEAR COUNT DCA KEYWD+3 /CLEAR COLUMN 2-6 KEYWORD BITS LNLP, TAD I XRCDR /GET LINE NO. COLUMN DCA TEMP2 /SAVE CHAR TAD (6000 AND TEMP2 /GET KEYWORD BITS CLL RAL RTL TAD KEYWD+3 CLL RTL DCA KEYWD+3 TAD (1777 AND TEMP2 /GET CHAR SNA JMP LNLPEN /IGNORE BLANKS CONVRT /TRANSLATE JMP LNLPEN /IGNORE RUBOUTS TAD (-"9 SMA SZA JMP LNERR /NOT A NUMBER TAD ("9-"0 SPA JMP LNERR /NOT A NUMBER TAD ("0 LNLP1, DCA I XR2 /INSERT CHARACTER IN OUTPUT BUFFER ISZ LNCNT /COUNT THIS CHARACTER LNLPEN, ISZ TEMP1 /GOT ALL LINE NUMBER COLUMNS? JMP LNLP /NO - LOOP. JMP I (KEYTRA /GO TRANSLATE KEYWORD LNERR, ERROR JMP LNLP1 MAKNA2, 0 /FIELD 1 OUTPUT ROUTINE FOR MAKNAM CIF CDF F1 JMS I (MAKNA3 JMP I MAKNA2 OOUT2, 0 OUT CIF CDF F1 JMP I OOUT2 GETCD1, 0 TAD I XRCDR CIF CDF F1 JMP I GETCD1 /FOR RETURN TO CALLING FIELD /PRESERVES AC AND LINK WHILE PUTTING /CIF CDF TO DATA FIELD AT ADDRESS /SPECIFIED AS FIRST WORD AFTER CALL XSAVDF, 0 DCA XSAVD1 RDF TAD (CIF CDF DCA XSAVD2 CDF TAD I XSAVDF ISZ XSAVDF DCA XSAVD3 TAD XSAVD2 DCA I XSAVD3 TAD XSAVD1 JMP I XSAVDF XSAVD1, 0 XSAVD2, 0 XSAVD3, 0 PAGE XERR, 0 K7600, 7600 TAD ("? /OUTPUT A "?" ISZ ERRFLG /FLAG ERROR ON THIS CARD JMP I XERR TIME=12 CDRIN, 0 /READ A CARD INTO THE BUFFER SAVFLD;CDRCIF /SAVE DATA FIELD FOR RETURN DCA ERRFLG /CLEAR ERROR FLAG FOR THIS CARD ISZ CDREOF /HAVE WE SEEN EOF? JMP CDRCIF /YES - STILL EOF ISZ CDRFLG /SHOULD WE PASS LAST CARD? JMP REINIT /YES CDRIN6, JMS CDRIN5 /RESET TIME OUT COUNTERS TAD (-50 /YES - READ IT INTO THE CDR BUFFER DCA TEMP1 /40 COLUMNS (DECIMAL) TAD (CDRBUF-1 DCA XRCDR CDRIN3, RCSE /CARD READY? JMP CDRIN4 /TEST TIME OUT JMS CDRIN5 /RESET TIME OUT COUNT CDRIN1, JMS KBRD /TEST KEYBOARD (AFTER TIME OUT LOOP) RCSD /CARD DONE? SKP JMP CDRIN7 /YES - TOO FEW COLUMNS RCSF /CHARACTER READY? JMP CDRIN1 /NO - TRY CARD DONE JMS CDRIN5 /RESET TIME OUT COUNT RCRB /YES - READ BINARY CDRIN2, DCA I XRCDR /AND STORE IT ISZ TEMP1 /DON'T READ MORE THAN BUFFER CAN HOLD JMP CDRIN1 /TRY CARD DONE AGAIN RCSD /WAIT FOR END OF CARD - OR ELSE! JMP .-1 RCRD /IF THIS ISN'T CLEARED, /FORTRAN IV BECOMES VERY UNHAPPY! JMP CDRIN8 CDRIN7, RCRD /FORTRAN IV AGAIN ISZ TEMP1 /ALLOW ONE COLUMN TOO FEW (EDU30 - 39 COL) JMP CDRER7 /ERROR! DCA I XRCDR CDRIN8, TAD (CDRBUF-1 /INIT BUFFER POINTERS AGAIN DCA XRCDR TAD (-50 DCA TEMP1 TAD (-EOFCHR /TEST FOR FIRST COLUMN=EOFCHR AND REST =0 EOFLP, TAD I XRCDR /GET NEXT COLUMN SZA CLA JMP REINIT /NON-ZERO - NOT EOF ISZ TEMP1 JMP EOFLP /LOOP JMP CDRCIF /END OF FILE CARD REINIT, TAD (CDRBUF-1 DCA XRCDR ISZ CDRIN /SKIP RETURN IF NOT EOF L7777 /RESET EOF SWITCH CDRCIF, 0 DCA CDREOF L7777 /SET TO READ A NEW CARD NEXT TIME DCA CDRFLG JMP I CDRIN CDRIN4, JMS KBRD /TEST TIME OUT JMP CDRIN3 /TRY SELECTING CARD AGAIN CDRIN5, 0 /RESET TIME OUT DCA TIMOUT TAD (-TIME DCA TIMOU2 JMP I CDRIN5 KBRD, 0 KSF /KEYBOARD? JMP KBRDTM /NO - TIME KRS /IS IT ^C? AND (177 TAD (-3 SNA CLA JMP I K7600 /YES - RETURN TO OS-8 KBRDTM, ISZ TIMOUT /TIMED OUT YET? JMP I KBRD /NO ISZ TIMOU2 JMP I KBRD /LIKEWISE KCF /IGNORE ANYTHING TYPED BEFORE THIS TAD (207 /NOTHING - WAKE HIM UP JMS I (TOUT TAD (MSGJAM /IT COULD BE JAMMED DCA TEMP1 JMS I (TTYOUT KBRD1, KSF /WAIT FOR A CHARACTER OR READER JMP KBRD3 KBRD2, KRS /GET THE CHAR AND (177 /WITHOUT PARITY TAD (-3 /IS IT ^C? SNA JMP I K7600 /YES - TO MONITOR KCF /IF ^C - LEAVE FLAG SO OS-8 WILL SEE IT. ELSE CLEAR IT TAD (3-32 /IS IT ^Z? SNA CLA JMP CDRCIF /YES - EOF JMP CDRIN6 /GO BACK AND TIME OUT AGAIN KBRD3, RCSE /SELECT A CARD? JMP KBRD1 /NO - TRY KEYBOARD TAD (-50 /RESET COUNT DCA TEMP1 TAD (CDRBUF-1 /AND POINTER DCA XRCDR JMP CDRIN3+2 /YES - RE-ENTER ROUTINE WITH SUCCESSFUL SELECT CDRJA1, KSF JMP .-1 JMP KBRD2 TIMOUT, 0 TIMOU2, 0 PAGE KEYTRA, TAD I XRCDR /GET KEYWORD COLUMN DCA KEYWD+1 TAD I XRCDR /DITTO DCA KEYWD+2 /CONVERT KEYWORD BITS TO NUMBER TAD (KEYWD-1 /POINT INDEX REGISTER TO KEYWORD BUFFER DCA XR1 TAD (-4 /SET COUNT OF WORDS DCA TEMP1 DCA KEYVAL /ZERO KEYWORD VALUE WRDLP, TAD (-14 /SET BIT COUNT DCA TEMP2 TAD I XR1 /GET WORD BITLP, ISZ KEYVAL /BUMP BIT VALUE CLL RAL /SHIFT INTO LINK SZL /IS THIS ONE ON? JMP KEYFND /YES - KEYWORD FOUND ISZ TEMP2 /COUNT BITS JMP BITLP ISZ TEMP1 /COUNT WORDS JMP WRDLP JMS I (LNOUT /SEND THE LINE NO. JMP I (TEXTRA /ALL BITS OFF - NO KEYWORD KEYBAD, ERROR OUT JMP KEYBLK TAD I XR1 /GET NEXT WORD KEYFND, SZA CLA /TEST THIS WORD JMP KEYBAD /ERROR - MORE THAN ONE KEYWORD MARKED ISZ TEMP1 /COUNT WORDS JMP KEYFND-1 /AND LOOP /OUTPUT THE KEYWORD TAD KEYVAL /IS IT A BATCH CONTROL LANGUAGE COMMAND? TAD (-14 SMA SZA CLA JMP KEYOUT L7777 /FOUND A BCL CARD DCA BCLSW /GENERATE "$END" BEFORE CLOSING FILE CIF CDF F1 JMP I (BCLTRA /YES - HANDLE THAT SPECIALLY KEYOUT, JMS I (LNOUT /SEND LINE NUMBER TAD KEYADR TAD KEYVAL DCA TEMP1 TAD I TEMP1 /GET ADDRESS OF KEYWORD SNA JMP KEYBAD /IF ZERO - UNUSED KEYWORD DCA TEMP1 /ELSE SAVE IT TAD TEMP1 /IS THIS "INPUT" OR "PRINT TAD (-BPRI2 /BEING FUDGED UNDER BASIC? SNA JMP NOSGN /PRINT - CHECK FOR NUMBER SIGN TAD (BPRI2-BINP2 SZA CLA JMP KEYOU5 /NONE - ALL'S WELL NOSGN, TAD (-40 /SET COUNT DCA TEMP3 NOSGN1, TAD I XRCDR /IS NEXT CHAR BLANK? SZA JMP NOSGN2 /NO - IS IT # ISZ TEMP3 JMP NOSGN1 JMP NOSGN3 /REST IS BLANK NOSGN2, TAD (-NOCHR /IS IT "#"? SZA CLA JMP NOSGN3 /NO TAD TEMP1 /YES - USE "INPUT" OR "PRINT" TAD (-BPRI2 SZA CLA TAD (BINP-BPRI TAD (BPRI DCA TEMP1 NOSGN3, TAD (CDRBUF+7 DCA XRCDR KEYOU5, JMS I (UNPACK /AND OUTPUT KEYWORD KEYBLK, TAD (" /INSERT BLANK AFTER KEYWORD OUT JMP I (TEXTRA PAGE UNPACK, 0 /OUTPUT PACKED 6-BIT ASCII TEXT TAD I TEMP1 /IS FIRST CHAR = 00? AND (7700 SZA CLA JMP KEYOU1 /NO - NORMAL 6-BIT TRANSLATE TAD (211 /YES - THIS IS TAB RATHER THAN END OUT /OUTPUT IT JMP KEYOU3 /AND GET SECOND CHARACTER KEYOU1, TAD I TEMP1 /GET FIRST CHARACTER CLL RTR RTR RTR JMS KEYOU2 /AND OUTPUT IT KEYOU3, TAD I TEMP1 /GET SECOND CHARACTER JMS KEYOU2 /AND OUTPUT IT ISZ TEMP1 /POINT TO NEXT TWO CHARACTERS JMP KEYOU1 /ETC. KEYOU2, 0 AND (77 /MASK FOR THE LOW ORDER BITS SNA JMP I UNPACK /CHARACTER IS 00 - END OF KEYWORD TAD (-37 /<CR>? SNA TAD (215-337 /THIS WILL BE 215 WHEN WE'RE DONE SPA TAD (100 TAD (237 OUT /OUTPUT THE CHARACTER JMP I KEYOU2 TTYOUT, 0 /USE UNPACK ROUTINE TO PRINT MESSAGE ON TTY TAD (TOUT /SWITCH OUTPUT ROUTINES DCA OUTAD JMS UNPACK TAD (XOUT /RESET OUTPUT ROUTINES DCA OUTAD JMP I TTYOUT /RETURN LNOUT, 0 /OUTPUT THE LINE NUMBER SAVFLD;LNCIF TAD LNCNT /GET NUMBER OF CHARS CMA DCA TEMP1 TAD (CDRBUF /START WITH COLUMN 2 DCA XR2 LNOUT1, ISZ TEMP1;SKP /MORE DIGITS? JMP LNOUT2 /NO TAD I XR2;OUT JMP LNOUT1 LNOUT2, TAD LNCNT /ANY DIGITS? SNA CLA JMP LNCIF TAD (" ;OUT /YES - SUFFIX A BLANK LNCIF, 0 JMP I LNOUT PAGE /TRANSLATE TEXT TEXTRA, DCA CONFLG /CLEAR CONTINUATION FLAG DCA TEMP1 /CLEAR COUNT OF BLANK CHARACTERS TAD (-40 /32 COLUMNS OF TEXT (DECIMAL) DCA TEMP3 TEXLP1, TAD I XRCDR SNA /BLANK? JMP TEXBLK /YES - COUNT A BLANK TAD (-CONTCH /CONTINUATION CHARACTER? SNA JMP TEXCON /YES - ENOUGH OF THIS CARD TAD (CONTCH CONVRT /TRANSLATE THE CHARACTER JMP TEXLP2 /RUBOUT? - GET THE NEXT CHARACTER DCA TEMP2 /SAVE THE CHARACTER JMS TEXBOU /OUTPUT THE COUNTED BLANKS TAD TEMP2 OUT /OUTPUT THE CHARACTER TEXLP2, ISZ TEMP3 /COUNT COLUMNS JMP TEXLP1 TAD (215 /OUTPUT A <CR> OUT JMP TEXFIN TEXCON, JMS TEXBOU CLA CMA DCA CONFLG /SET THE CONTINUATION FLAG JMP TEXFIN TEXBLK, ISZ TEMP1 /COUNT THE BLANKS JMP TEXLP2 /GET THE NEXT CHARACTER TEXBOU, 0 /OUTPUT BLANKS TAD TEMP1 CMA DCA TEMP1 TEXBO1, ISZ TEMP1 /MORE BLANKS SKP JMP I TEXBOU /NO - RETURN TAD (" /YES - OUTPUT A BLANK OUT JMP TEXBO1 TEXFIN, TAD ERRFLG /DID THIS CARD HAVE AN ERROR? SZA CLA ISZ ERRCNT /YES - COUNT IT JMP I (READY /PROCESS NEXT CARD /CARD CODE TO ASCII CONVERSION ROUTINE XCONVR, 0 /INPUT 12 BIT CARD CODE - OUTPUT 8 BIT ASCII SAVFLD;XCOCIF /SAVE DATA FIELD FOR RETURN DCA CONVR1 /SAVE 12 BIT CARD CODE TAD (RUBOUT AND CONVR1 TAD (-RUBOUT SNA CLA /WAS CHARACTER RUBBED OUT? JMP XCOCIF /YES - RETURN 0 IN AC ISZ XCONVR /NOT RUBBED OUT - SKIP RETURN TAD CONVR1 RTL RTL AND (7 /GET ZONE BITS CLL RAL DCA CONVR2 /2*ZONE BITS TAD CONVR2 RTL TAD CONVR2 /10*ZONE BITS DCA CONVR2 TAD CONVR1 RTL RAL AND (7770 /1-9 "PUNCHES" SNA JMP CONVR3 /IF ALL OFF DON'T INCREMENT COUNT CLL RAL /SHIFT NEXT BIT INTO LINK ISZ CONVR2 /COUNT THE BIT SNL JMP .-3 /LOOP IF OFF SZA CLA JMP CONILL /IF REST OF AC IS NOT ZERO - ILLEGAL CHARACTER CONVR3, TAD CONVR2 /GET DISPLACEMENT OF CHAR IN TABLE CLL RAR /GET WORD DISPLACEMENT IN AC TAD (TRTAB /ADDRESS OF WORD DCA CONVR2 TAD I CONVR2 /GET WORD SZL JMP .+4 /IF DISPLACEMENT WAS ODD, USE LOW ORDER HALF OF WORD RTR RTR RTR AND (77 /MASK FOR LOW PART OF WORD SNA JMP CONVR4 /ZERO IN TABLE IS ILLEGAL CODE (MAYBE) TAD (240 JMP XCOCIF /RETURN WITH 8 BIT ASCII IN AC CONVR4, TAD CONVR1 /GET 12-BIT CARD CODE TAD (-TABCHR /IS IT A TAB CHAR? SNA JMP CONVR5 /YUP! TAD (TABCHR-FFCHR /HOW ABOUT A FORM FEED? SZA CLA JMP CONILL /NOPE - IT'S REALLY BAD TAD (214-211 /IT'S FORM FEED CONVR5, TAD (211 /IT'S TAB JMP XCOCIF CONILL, ERROR /SET ERROR FLAG; RETURN "?" IN AC XCOCIF, 0 JMP I XCONVR CONVR1, 0 CONVR2, 0 PAGE /OUTPUT A CHARACTER. RETURNS .+1 IF CHARACTER IS /JUST STORED IN BUFFER. RETURNS .+2 IF NO MORE SPACE IN /EMPTY. RETURNS .+3 IF BLOCK WAS WRITTEN AND THERE ARE /MORE BLOCKS IN THE EMPTY. XOUTP, 0 /OUTPUT ROUTINE ISZ OPTSW /THREE WAY SWITCH JMP XOUT1 DCA XOUT2 /SAVE CHAR IN TEMP L7777 TAD XROPT /BACK UP 2 WORDS DCA XOUT3 TAD XOUT2 /GET FIRST HALF OF CHARACTER RTL RTL AND K7400 TAD I XOUT3 /ADD IN FIRST CHARACTER DCA I XOUT3 ISZ XOUT3 TAD XOUT2 /GET SECOND HALF OF CHARACTER RTR RTR RAR AND K7400 TAD I XOUT3 /ADD IN SECOND CHARACTER DCA I XOUT3 ISZ OPTCNT /IS BUFFER FULL? JMP XOUT6 /NO - RETURN NORMALLY JMS I DEVENT /CALL DEVICE HANDLER 4200 /TWO PAGES OF OUTPUT FROM FIELD 0 OPTBUF /BUFFER ADDRESS OPTBLK, 0 /BLOCK NUMBER JMP OPTER4 /ERROR DOING OUTPUT ISZ OPTBLK /INCREMENT BLOCK NUMBER TAD (OPTBUF-1 /RESET BUFFER POINTER DCA XROPT TAD (-200 /AND BUFFER LENGTH /2 DCA OPTCNT ISZ XOUTP /SKIP RETURN IF BLOCK WRITTEN ISZ I (FILLEN /MORE BLOCKS IN EMPTY? ISZ XOUTP /YES - SKIP AGAIN XOUT6, L7775 /RESET 3-WAY SWITCH DCA OPTSW JMP I XOUTP /RETURN XOUT1, DCA I XROPT /SAVE CHARACTER IN BUFFER JMP I XOUTP XOUT2, 0 XOUT3, 0 XOUT, 0 DCA CLOSLN /SAVE CHAR IN A CONVENIENT TEMP TAD CLOSLN JMS XOUTP /OUTPUT THE CHARACTER SKP JMP OPTER5 /FILLED UP AVAILABLE SPACE BEFORE ^Z TAD CLOSLN /WAS IT <CR>? TAD (-215 SZA CLA JMP I XOUT /RETURN TAD (212 JMP XOUT+1 EOF, DCA KEYVAL /FINISH UP ANY BCL CARD IN PROGRESS DCA CONFLG /ZERO THESE TO GET US AROUND DCA LNCNT /THE TESTS IN BCLHUH CIF CDF F1 JMP I (BCLTRA EOF2, ISZ BCLSW /WERE THERE ANY BCL CARDS? JMP EOF1 /NO TAD (MEND /YES - SEND "$END" DCA TEMP1 JMS I (UNPACK EOF1, TAD (32 /^Z JMS XOUTP /OUTPUT CHAR JMP .-1 /BLOCK NOT YET FULL K7400, 7400 /BLOCK WRITTEN TAD I (BLOKNO /BLOCK WRITTEN CIA TAD OPTBLK /GET LENGTH OF FILE WRITTEN DCA CLOSLN /SET LENGTH FOR CLOSE ISZ USRFLG;SKP /IS USR IN CORE? JMP EOF3 /YES CIF 10;JMS I (7700;USRIN /BRING IN THE USR EOF3, L7777 /SET USR IN CORE FLAG DCA USRFLG TAD OFILE /GET DEVICE NUMBER CIF 10;USR;CLOSE CLOSNM, 0 /POINTER TO NAME CLOSLN, 0 /LENGTH OF FILE JMP OPTER6 TAD CLOSLN CIA RTL RTL AND (7760 /GET MINUS LENGTH IN BITS 0-7 CDF 10 TAD I (7617 DCA I (7617 /SET LENGTH AND DEVICE NO. FOR BATCH CDF JMP I (ERRDEC /CONVERT NUMBER OF ERRORS TO DECIMAL PAGE /CONVERT NUMBER OF CARDS IN ERROR TO DECIMAL AND TYPE MESSAGE ERRDEC, TAD (DECN-1 /START POWERS OF 10 AT 1000 DCA XR1 TAD (-4 DCA TEMP1 /FOUR POWERS OF 10 DCA TEMP5 /CLEAR LEADING ZEROES FLAG TAD ERRCNT /SET VALUE DCA TEMP4 TAD (TOUT /FUDGE OUTPUT CALL DCA OUTAD JMS CONDEC /CONVERT TO DECIMAL TAD (XOUT /RESTORE OUTPUT CALL DCA OUTAD TAD (NOMES /SET UP TO PRINT "NO" DCA TEMP1 TAD TEMP5 /DID WE PRINT A NUMBER? SNA CLA JMS I (TTYOUT /NO - PRINT "NO" TAD (CDMES /PRINT "CARDS IN ERROR" DCA TEMP1 JMS I (TTYOUT EOFJMP, JMP I (CD /DONE WITH THIS ONE - CALL COMMAND DECODER SYSNO /LOAD SYS: NUMBER FOR LOOKUP CIF 10;USR;LOOKUP BATBLK, BATNAM 0 JMP IOER8 TAD BATBLK DCA CHNBLK L0001 DCA I (JSBITS /KEEP USR ACROSS CHAIN CIF 10;USR;CHAIN /NOW CHAIN TO BATCH CHNBLK, 0 CONDEC, 0 /CONVERT A NUMBER TO DECIMAL SAVFLD;CONCIF /SAVE DATA FIELD FOR RETURN DIGLP, TAD I XR1 /GET THIS POWER OF 10 DCA TEMP2 /AND SAVE IT DCA TEMP3 /CLEAR THIS DIGIT DIGLP1, TAD TEMP4 /GET NUMBER TO BE CONVERTED TAD TEMP2 /DIVIDE BY SUBTRACTING SPA JMP DIGLP2 /WENT NEGATIVE - DONE ISZ TEMP3 /BUMP COUNT DCA TEMP4 /SAVE REDUCED VALUE JMP DIGLP1 DIGLP2, CLA TAD TEMP3 /GET VALUE OF THIS DIGIT SZA JMP DIGOUT /NOT A ZERO - PRINT IT TAD TEMP5 /IF ZERO - IS IT LEADING? SNA CLA JMP DIGLPE /YES - DON'T PRINT IT DIGOUT, ISZ TEMP5 /IF PRINTING, THEN ZEROES ARE NOT LEADING TAD (260 /CONVERT TO ASCII OUT DIGLPE, ISZ TEMP1 /LAST DIGIT? JMP DIGLP /NO - LOOP CONCIF, 0 JMP I CONDEC /RETURN TOUT, 0 /SEND A CHARACTER TO THE TTY TLS TSF JMP .-1 TAD (-215 /WAS THE CHARACTER <CR>? SZA CLA JMP I TOUT /NO - RETURN TAD (212 /YES - TYPE A LINE FEED JMP TOUT+1 IOERR1, CDF F0 CLA /TYPE ERROR MESSAGE TAD IOERR /GET NUMBER CLL RAL TAD (IOETAB-1 DCA XR1 TAD I XR1 /GET ADDRESS OF MESSAGE DCA TEMP1 DCA IOERR /CLEAR ERROR NUMBER JMS I (TTYOUT /PRINT IT TAD I XR1 /GO TO RESTART ADDRESS DCA TEMP1 JMP I TEMP1 PAGE OPTDEV, ZBLOCK 400 /TWO PAGES FOR DEVICE HANDLER OPTBUF, ZBLOCK 400 /TWO PAGES FOR OUTPUT BUFFER CDRBUF, DECIMAL;ZBLOCK 40;OCTAL BATNAM, TEXT "BATCH@SV";*.-1 MEND, TEXT "_$END_" NOMES, TEXT "NO" CDMES, TEXT " CARDS IN ERROR_" MSGJAM, TEXT "LOAD MORE CARDS OR TYPE ^Z_" IOEM1, TEXT "NO OUTPUT FILE SPECIFIED_" IOEM2, TEXT "CAN'T FETCH DEVICE HANDLER_" IOEM3, TEXT "CAN'T ENTER FILE_" IOEM4, TEXT "OUTPUT ERROR_" IOEM5, TEXT "FILE TOO BIG_" IOEM6, TEXT "CAN'T CLOSE FILE_" IOEM7, TEXT "CARD IN READER BACKWARDS. TYPE SPACE TO CONTINUE._" IOEM8, TEXT /"BATCH.SV" NOT ON SYS: - CAN'T CHAIN_/ VERM9, TEXT "MSBAT - VERSION 3B_@@@@@@" IOETAB, IOEM1;START IOEM2;START IOEM3;START IOEM4;START IOEM5;START IOEM6;START IOEM7;CDRJA1 IOEM8;7600 VERM9;START DECIMAL DECN, -1000 -100 -10 -1 OCTAL /CHARACTER CODE TRANSLATION TABLE TRTAB, /0 IN ROWS 12-0 0021 /?1 2223 /23 2425 /45 2627 /67 3031 /89 /1 2043 /0C 4651 /FI 5457 /LO 6265 /RU 7004 /X$ /2 1442 /,B 4550 /EH 5356 /KN 6164 /QT 6772 /WZ /3 3632 />: 0106 /!& 7540 /]@ 0000 /<FORM FEED> ? 0000 /?? /4 1641 /.A 4447 /DG 5255 /JM 6063 /PS 6671 /VY /5 3400 /<? 0000 /?? 0000 /?? 0000 /?? 0000 /?? /6 3303 /;# 0705 /'% 7337 /[? THE REAL ? 0077 /<TAB> _ 0000 /?? /7 7435 /\= 1315 /+- 1217 /*/ 7610 /^( 1102 /)" /BASIC KEYWORDS BDAT, TEXT "DATA" BCAL, TEXT "CALL" BCLO, TEXT "CLOSE" BDEF, TEXT "DEFINE" BCHN, TEXT "CHAIN" BDIM, TEXT "DIM" TEXT "NSION" BCHG, TEXT "CHANGE" BEND, TEXT "END" BEND2, TEXT "CLOSE #4\END" BFIL, TEXT "FILE" BGOS, TEXT "GOSUB" BIF, TEXT "IF" BINP, TEXT "INPUT" BINP2, TEXT "INPUT #3:" BLIS, TEXT "LIST" BNEX, TEXT "NEXT" BOLD, TEXT "OLD" BPRI, TEXT "PRINT" BPRI2, TEXT "PRINT #4:" BREA, TEXT "READ" BRES, TEXT "RESTORE" BRUN, TEXT "RUN" BFOR, TEXT "FOR" BGOT, TEXT "GOTO" BIFE, TEXT "IF END" BLET, TEXT "LET" BLIN, TEXT "LINPUT" BNEW, TEXT "NEW" BON, TEXT "ON" BRND, TEXT "RANDOM" BOV, TEXT "OVERLAY" BREP, TEXT "REPLACE" BUNS, TEXT "UNSAVE" BREM, TEXT "REMARK" BRET, TEXT "RETURN" BSAV, TEXT "SAVE" BSTO, TEXT "STOP" BSTO2, TEXT "CLOSE #4\STOP" /FORTRAN KEYWORDS FCMN, TEXT "@COMMON" FASN, TEXT "@ASSIGN" FCPX, TEXT "@COMPLEX" FBKS, TEXT "@BACKSPACE" FCNT, TEXT "@CONTINUE" FBKD, TEXT "@BLOCK DATA" FDTA, TEXT "@DATA" FCAL, TEXT "@CALL" FDEF, TEXT "@DEFINE FILE" FDO, TEXT "@DO" FEND, TEXT "@END" FEQU, TEXT "@EQUIVALENCE" FFOR, TEXT "@FORMAT" FGOT, TEXT "@GO TO" FINT, TEXT "@INTEGER" FPAU, TEXT "@PAUSE" FREAL, TEXT "@REAL" FREW, TEXT "@REWIND" FSBR, TEXT "@SUBROUTINE" FCMT, TEXT "C" /COMMENT FDIM, TEXT "@DIMENSION" FDBP, TEXT "@DOUBLE PRECISION" FEF, TEXT "@END FILE" FEXT, TEXT "@EXTERNAL" FFUN, TEXT "@FUNCTION" FIF, TEXT "@IF" FLOG, TEXT "@LOGICAL" FREAD, TEXT "@READ" FRET, TEXT "@RETURN" FSTO, TEXT "@STOP" FWRI, TEXT "@WRITE" BASKEY, /COLUMN 7 ROW BDEF /12 BIFE /11 BLET /0 BLIS /1 BNEW /2 BON /3 BOV /4 BRND /5 BREM /6 BRES /7 BRUN /8 BSTKEY, BSTO /9 /COLUMN 8 ROW BDIM /12 BINKEY, BINP /11 BLIN /0 BNEX /1 BOLD /2 BFIL /3 BPRKEY, BPRI /4 BREA /5 BREP /6 BRET /7 BSAV /8 BUNS /9 /COLUMNS 2-6 COLUMN ROW BCAL /2 12 BENKEY, BEND /2 11 BCLO /3 12 BFOR /3 11 BCHN /4 12 BGOS /4 11 BCHG /5 12 BGOT /5 11 BDAT /6 12 BIF /6 11 FORKEY, /COLUMN 7 /ROW FCAL /12 FDEF /11 FDO /0 FEND /1 FEQU /2 FFOR /3 FGOT /4 FINT /5 FPAU /6 FREAL /7 FREW /8 FSBR /9 /COLUMN 8 ROW FCMT /12 FDIM /11 FDBP /0 FEF /1 FEXT /2 FFUN /3 FIF /4 FLOG /5 FREAD /6 FRET /7 FSTO /8 FWRI /9 /COLUMN 2-6 COLUMN ROW 0 /2 12 0 /2 11 0 /3 12 FCMN /3 11 FASN /4 12 FCPX /4 11 FBKS /5 12 FCNT /5 11 FBKD /6 12 FDTA /6 11 FIELD 1 *17 OXR1, 0 OTEMP1, 0 CHAR, 0 PUTPNT, 0 GETPNT, 0 DATFTN, 0 /ADDRESS OF FORTRAN $RUN GETCHR=JMS I .;XGETCH PUTCHR=JMS I .;XPUTCH BCLIN=JMS I .;XBCLIN OPTION=JMS I .;XOPTIO MOV6=JMS I .;XMOV6 COLNAM=JMS I .;XCOLNA OUTNAM=JMS I .;XOUTNA ISIT=JMS I .;XISIT SEND=JMS I .;XSEND TSTCR=JMS I .;XTSTCR CDRTRA=JMS I .;BCLTRA+1 ISNUM=JMS I .;XISNUM OUT1=JMS I .;OOUT1 *200 /PUT A CHARACTER INTO A 6-BIT BUFFER PUTCH1=XGETCH PUTCH4=CON628 XPUTCH, 0 TAD (-215 /IF <CR>, IT BECOMES 37 SZA TAD (215-337 TAD (337 AND (77 /AND OFF 6 BITS DCA PUTCH1 /SAVE IT IN A TEMP TAD PUTPNT /GET POINTER TO CHARACTER IN 6-BIT BUFFER ISZ PUTPNT /AND BUMP POINTER CLL RAR /GET WORD DISPLACEMENT TAD I XPUTCH /ADD IN BASE ADDRESS ISZ XPUTCH /BUMP RETURN ADDRESS DCA PUTCH4 /SAVE ADDRESS OF WORD CONTAINING CHAR SZL /LINK HAS FIRST OR LAST HALF INDICATOR JMP PUTCH2 TAD PUTCH1 /FIRST HALF - ROTATE CHAR INTO HIGH BITS CLL RTL;RTL;RTL DCA PUTCH1 TAD I PUTCH4 /GET ANY CHARACTER ALREADY THERE AND (77 JMP PUTCH3 PUTCH2, TAD I PUTCH4 AND (7700 /GET CHARACTER ALREADY THERE PUTCH3, TAD PUTCH1 /ADD IN NEW CHARACTER DCA I PUTCH4 /STORE THEM BOTH JMP I XPUTCH /AND RETURN /GET A CHARACTER FROM A 6-BIT BUFFER XGETCH, 0 TAD XGETCH /MOVE RETURN ADDRESS TO CON628 DCA CON628 TAD GETPNT /GET POINTER TO CHARACTER ISZ GETPNT /BUMP IT FOR NEXT TIME JMP CON628+1 /ENTER CONVERSION ROUTINE /CONVERT 6-BIT ASCII TO 8-BIT /AC HAS POINTER TO CHARACTER /ARGUMENT IS BASE ADDRESS OF BUFFER CO628X=XGETCH CON628, 0 CLL RAR /GET WORD DISPLACEMENT IN AC TAD I CON628 /ADD BASE ADDRESS OF BUFFER ISZ CON628 /BUMP RETURN ADDRESS DCA CO628X /SAVE ADDRESS TAD I CO628X /GET WORD CONTAINING CHARACTER SZL /LINK HAS INDICATOR FOR FIRST OR LAST CHAR JMP .+4 RTR;RTR;RTR /FIRST CHAR - PUT IN LOW BITS AND (77 JMS XSEND3 /GET PROPER 8-BIT REPRESENTATION DCA CHAR /SAVE IT TAD CHAR /RETURN WITH IT IN AC JMP I CON628 /RETURN XSEND3, 0 TAD (-37 SNA TAD (215-337 SPA TAD (100 TAD (237 JMP I XSEND3 GETCDR, 0 CIF CDF F0 JMS I (GETCD1 /GET A CHAR FROM THE CDR BUFFER JMP I GETCDR OOUT1, 0 CIF CDF F0 JMS I (OOUT2 JMP I OOUT1 MOVODV, 0 DCA .+2 MOV6;0;BATOUT CIF F0 /RETURN DF=1 JMP I MOVODV XTSTCR, 0 GETCHR;BCLBUF TAD (-215 SNA CLA ISZ XTSTCR L7777 TAD GETPNT DCA GETPNT JMP I XTSTCR PAGE /SUBROUTINE OPTION WILL SCAN THE BATCH CONTROL LANGUAGE /BUFFER FOR OPTIONS SPECIFIED IN IT'S CALL. AN OPTION IS /RECOGNIZED AS ANY ITEM WHICH FOLLOWS A "/". IT'S NAME /IS COMPOSED OF ANY CHARACTERS OTHER THAN "/" , "," , /"=",OR <CR>. THE NAME IS TERMINATED BY ANY ONE OF THE /PREVIOUS DELIMITERS. IF IT IS TERMINATED BY A "=" AND /THE SUBROUTINE CALL INDICATES THAT IT EXPECTS A FILE NAME, /THEN THE FILE NAME FOLLOWS THE "=" AND IS TERMINATED BY A /"/" , "," , OR <CR>. THE SUBROUTINE CALL IS FOLLOWED BY A /POINTER TO A LIST OF ADDRESSES. THIS LIST IS TERMINATED BY /A ZERO ENTRY. EACH ENTRY POINTS TO AN OPTION CONTROL /BLOCK IN THE FOLLOWING FORM: / OPTION CONTROL WORD / (FILE NAME SPACE IF NEEDED - 6 WORDS) / TEXT "OPTION NAME" / /THE FORMAT OF THE OPTION CONTROL WORD IS AS FOLLOWS: / BIT 0: ON RETURN THIS BIT WILL BE SET IF / THE OPTION WAS FOUND, AND CLEARED / IF NOT / BIT1: ON RETURN THIS BIT IS SET IF A NAME / WAS GIVEN WITH THE OPTION / BIT 2: SET IF OPTION HAS ALLOCATED 6 WORDS / FOR A POSSIBLE FILE NAME. CLEARED / IF NOT / BITS 6-8: NUMBER OF CHARACTERS -1 OF SHORT / FORM OF OPTION / BITS 9-11: DIFFERENCE BETWEEN SIZES OF / SHORT AND LONG FORMS / THE SUM OF BITS 6-8 AND BITS 9-11 / SHOULD TOTAL THE LENGTH OF THE / LONG FORM-1 / /THE FILE NAME SPACE MAY BE INITIALIZED TO SOME DEFAULT /DEVICE, NAME, AND EXTENSION. / XOPTIO, 0 /TURN OFF ALL OPTIONS TAD I XOPTIO /GET ADDRESS OF LIST OF OPTION ADDRESSES DCA OPTLIS /SAVE IT OPTIO1, TAD I OPTLIS /GET OPTION ADDRESS ISZ OPTLIS /POINT TO NEXT ONE SNA JMP OPTIO2 /DONE TURNING OFF ALL OPTIONS DCA OPTCTL TAD I OPTCTL /GET OPTION CONTROL WORD AND (1777 /CLEAR FIRST BIT DCA I OPTCTL JMP OPTIO1 /LOOP /SEARCH BCL BUFFER FOR "/" OPTIO2, DCA GETPNT /START AT BEGINNING OF BATCH CONTROL LINE OPTIO3, GETCHR;BCLBUF /GET A CHARACTER FROM THE BUFFER ISIT /IS IT "/" OR <CR>? OPTIS3;OPTIS4-1 JMP OPTIO3 /NO - KEEP LOOKING OPTI3A, TAD GETPNT /YES - SAVE IT'S POSITION DCA OPTBEG TAD I XOPTIO /GET ADDRESS OF LIST AGAIN DCA OPTLIS /AND SAVE IT /FOUND A "/" - TRY ALL OPTIONS OPTIO4, TAD OPTBEG /START COMPARISON OF OPTION WITH CHARACTER AFTER "/" DCA GETPNT TAD I OPTLIS /GET ADDRESS OF OPTION CONTROL WORD ISZ OPTLIS /AND BUMP POINTER FOR NEXT TIME SNA /IS THE LIST ENDED? JMP I (OPTIER /YES - OPTION WAS INVALID DCA OPTCTL /NO - SAVE ADDRESS OF CONTROL WORD TAD I OPTCTL /GET CONTROL WORD RTL SPA CLA /DOES IT HAVE SPACE FOR A FILE NAME TAD (6 /YES - ADD SIZE OF THE SPACE TAD OPTCTL /ADD ADDRESS OF OPTION IAC /BUMP ONE FOR CONTROL WORD DCA OPTTEX /SAVE ADDRESS OF OPTION TEXT TAD I OPTCTL /GET LENGTH FOR UNIQUE OPTION FROM CONTROL WORD RAR;RTR AND (7 CMA /NEGATE IT (INCREMENTED BY ONE) DCA OPTCT1 /SAVE IN COUNTER DCA OPTCT2 /ZERO CHARACTER POSITION /COMPARE OPTION WITH CONTENTS OF BCL BUFFER OPTIO5, JMS OPTI6A SZA CLA /ARE THEY THE SAME? JMP OPTIO4 /NO - TRY NEXT OPTION ISZ OPTCT1 /HAVE WE SUCCEEDED FAR ENOUGH FOR IT TO BE UNIQUE? JMP OPTIO5 /NO - KEEP COMPARING TAD GETPNT /SAVE CURRENT BUFFER POSITION DCA OPTTM2 TAD I OPTCTL /GET REMAINING LENGTH FROM CONTROL WORD AND (7 CMA DCA OPTCT1 OPTIO6, ISZ OPTCT1 /DONE WITH REMAINING CHARACTERS? SKP JMP OPTIO7 /YES - SUCCESS JMS OPTI6A SNA CLA /ARE THEY THE SAME? JMP OPTIO6 /YES - KEEP GOING TAD OPTTM2 /NO - MOVE POINTER BACK TO SHORT FORM DCA GETPNT JMP OPTIO7 OPTI6A, 0 TAD OPTCT2 ISZ OPTCT2 JMS I (CON628 OPTTEX, 0 CIA DCA OPTTM1 GETCHR;BCLBUF TAD OPTTM1 JMP I OPTI6A OPTRET, ISZ XOPTIO /INCREMENT RETURN ADDRESS DCA GETPNT /SET POINTER TO BEGINNING OF BUFFER JMP I XOPTIO OPTLIS, 0 OPTCTL, 0 OPTBEG, 0 OPTCT1, 0 OPTCT2, 0 OPTTM1, 0 OPTTM2, 0 /TEST DELIMITER AFTER OPTION OPTIO7, GETCHR;BCLBUF /GET NEXT BUFFER CHARACTER ISIT /IS IT "=", "," ,"/", OR <CR>? OPTIS1;OPTIS2-1 JMP I (OPTIER /NONE OF THESE OPTIO8, TAD I OPTCTL /YES - GET CONTROL WORD RTL SMA CLA /DOES IT TAKE A FILE NAME? JMP I (OPTIER /NO - ERROR TAD OPTCTL /GET ADDRESS OF FILE NAME SPACE IAC DCA .+2 COLNAM /AND COLLECT A NAME INTO IT OPTTM3, 0 JMP I (OPTIER /ERROR RETURN TAD I OPTCTL /TURN ON NAME BIT AND (1777 TAD (2000 DCA I OPTCTL OPTIO9, TAD I OPTCTL /GET CONTROL WORD AND (3777 TAD (4000 /TURN ON OPTION FOUND BIT DCA I OPTCTL JMP I (OPTI10 PAGE /ON ERROR, REPORT IT OPTIER, TAD I (OPTBEG /OPTION BEGINS AT THIS POSITION JMS OUTERR /OUTPUT THE ERROR OPTERM /SQUISH THE CURRENT OPTION OUT OF BCL BUFFER OPTI10, L7777 /BACK UP OVER "/" TAD I (OPTBEG /POINT TO BEGINNING OF OPTION JMS BCLSQU /SQUISH OUT THIS OPTION L7777 TAD I (OPTBEG JMP I (OPTIO2 /GO LOOK FOR MORE OPTIONS /SQUISH OUT A PORTION OF THE BCL BUFFER / TAD X /POSITION OF FIRST CHAR OF SQUISH / JMS BCLSQU /GETPNT POINTS TO FIRST CHAR SURE TO BE KEPT AFTER /SQUISH CHARS. ONE CHAR PRECEDING IT IS TESTED, /AND IS KEPT IF IT IS A "/" OR <CR> BCLSQU, 0 DCA PUTPNT /AC POINTS TO BEGINNING OF AREA TO BE SQUISHED TAD PUTPNT /SAVE THE POINTER DCA OUTERR L7777 TAD GETPNT DCA GETPNT /TEST LAST CHAR OF STUFF TO BE SQUISHED GETCHR;BCLBUF ISIT /IS IT "/", OR <CR>? BCLIS1;BCLIS2-1 BCLSQ1, GETCHR;BCLBUF /GET A CHAR TAD (-215 /IS IT <CR>? SNA CLA JMP BCLSQ3 /YES - DONE BCLSQ2, TAD CHAR /RESTORE CHAR PUTCHR;BCLBUF /PUT THE CHAR IN THE BUFFER JMP BCLSQ1 /GET ANOTHER CHAR BCLSQ3, TAD (215 /PUT A <CR> PUTCHR;BCLBUF TAD OUTERR /RESTORE POINTER DCA GETPNT JMP I BCLSQU /RETURN /SEND AN ERROR MESSAGE INCLUDING PART OF THE BCL BUFFER /TO THE OUTPUT BUFFER / TAD X /POSITION OF FIRST CHAR IN BUFFER TO BE SENT / JMS OUTERR / A /ADDRESS OF ERROR MESSAGE TO PRECEDE IT / /SIX-BIT ASCII OUTERR, 0 DCA GETPNT /SET BEGINNING OF BCL LINE TO OUTPUT TAD I OUTERR /GET ERROR MESSAGE ADDRESS ISZ OUTERR SEND /PRINT IT OUTER1, GETCHR;BCLBUF /GET A CHARACTER ISIT /IS IT "," ,"/", OR <CR>? OUTIS1;OUTIS2-1 TAD CHAR /NO - SEND CHAR OUT1 JMP OUTER1 OUTER2, TAD (215 OUT1 JMP I OUTERR /RETURN /TEST A CHAR AND JUMP IF IN LIST / JMS XISIT / A1 /ADDRESS OF LIST OF NEGATIVE OF CHARS / /TERMINATED BY A POSITIVE OR ZERO / A2-1 /ADDRESS -1 OF LIST OF / /TRANSFER ADDRESSES XISIT, 0 DCA ISIT1 /SAVE CHAR TAD I XISIT /GET LIST OF CHARS ISZ XISIT DCA ISIT2 TAD I XISIT /GET LIST OF ADDRS - 1 ISZ XISIT DCA ISIT3 ISIT4, TAD I ISIT2 /GET THE NEXT CHAR ISZ ISIT2 ISZ ISIT3 SMA JMP ISIT5 /END OF LIST SIGNALLED BY ENTRY>=0 TAD ISIT1 /IS IT THE CHAR? SZA CLA JMP ISIT4 /NO - TRY THE NEXT TAD I ISIT3 /GET SEND ADDRESS DCA XISIT ISIT5, CLA JMP I XISIT ISIT1, 0 ISIT2, 0 ISIT3, 0 PAGE /COLLECT A NAME FROM THE BUFFER / JMS XCOLNA / X /ADDRESS OF SPACE TO RECEIVE NAME / JMP ERR /INVALID NAME XCOLNA, 0 TAD I XCOLNA DCA .+3 MOV6;ZER6;0 TAD I XCOLNA /ARGUMENT IS ADDRESS TO PUT NAME ISZ XCOLNA DCA COLPU1+2 /SAVE IT FOR USE AS PUTCHR ARG L7776 /SET NAME - EXTENSION SWITCH FOR NAME DCA COLSW TAD (COLIS1 /SET TO COLLECT ANYTHING DCA COLIS3 /I.E. DEVICE, FILE, OR EXTENSION TAD (COLIS2-1 DCA COLIS3+1 TAD GETPNT /SAVE POINTER TO BEGINNING OF NAME DCA COLNP1 COLGE1, TAD GETPNT /SAVE POINTER TO BEGINNING OF SECTION DCA COLNP2 /OF NAME COLGE2, GETCHR;BCLBUF /GET A CHAR ISIT /IS IT ":",".","/", "," , OR <CR>? COLIS3, 0;0 JMP COLGE2 COLDEV, JMS COLMOV;0;-4-1 /MOVE 4 CHARS TO POSITION 0 ISZ COLIS3 /REMOVE ":" FROM LIST ISZ COLIS3+1 JMP COLGE1 /COLLECT NEXT PART OF NAME COLFIL, JMS COLMOV;4;-6-1 /MOVE 6 CHARS TO POSITION 4 ISZ COLSW /NEXT TIME COLLECT EXTENSION TAD (COLIS1+2 /REMOVE "." FROM LIST DCA COLIS3 TAD (COLIS2+1 DCA COLIS3+1 JMP COLGE1 /COLLECT NEXT PART OF NAME COLEXT, ISZ COLSW /ARE WE COLLECTING NAME OR EXTENSION? JMP COLEX1 /NAME JMS COLMOV;12;-2-1 /MOVE 2 CHARS TO POSITION 12 JMP COLEX2 COLEX1, JMS COLMOV;4;-6-1 /MOVE 6 CHARS TO POSITION 4 COLEX2, ISZ XCOLNA /NO ERRORS JMP COLEX3 COLERR, CLA TAD COLNP1 /POINT TO BEGINNING OF NAME JMS I (OUTERR /SEND IT AS ERROR MESSAGE COLERM COLEX3, TAD COLNP1 /POINT TO BEGINNING OF NAME JMS I (BCLSQU /SQUISH IT OUT JMP I XCOLNA /RETURN COLMOV, 0 TAD I COLMOV /FIRST ARG IS POSITION ISZ COLMOV DCA PUTPNT TAD I COLMOV /SECOND ARG IS COUNT ISZ COLMOV DCA COLCT1 TAD CHAR /GET DELIMITER CIA DCA COLCH1 /SAVE FOR TEST TAD CHAR TAD (-"Z DCA COLCH2 /ANOTHER TEST TAD COLNP2 /POINT TO BEGINNING OF THIS PART DCA GETPNT COLMV1, GETCHR;BCLBUF /GET NEXT CHAR TAD COLCH1 /SUBTRACT THE DELIMITER SNA JMP I COLMOV /DELIMITER - WE'RE DONE TAD COLCH2 /CHAR-"Z" SMA SZA JMP COLERR /NOT ALPHA-NUMERIC TAD ("Z-"A SMA JMP COLPUT /ALPHABETIC TAD ("A-"9 SMA SZA JMP COLERR /NOT NUMERIC TAD ("9-"0 SPA JMP COLERR /NOT NUMERIC COLPUT, CLA ISZ COLCT1 /HAVE WE USED UP OUR COUNT? JMP COLPU1 /NO - PUT THE CHAR L7777 /YES - SET COUNTER TO SKIP DCA COLCT1 JMP COLMV1 /GET NEXT CHAR COLPU1, TAD CHAR PUTCHR;0 /PUT THE CHAR IN THE USER SPACE JMP COLMV1 /GET THE NEXT CHAR COLSW, 0 /FILE NAME OR EXTENSION SWITCH COLNP1, 0 /POINTER TO BEGINNING OF NAME COLNP2, 0 /POINTER TO BEGINNING OF NAME PART COLCH1, 0 /TEMP LOC FOR COLMOV COLCH2, 0 /DITTO COLCT1, 0 /DITTO PAGE XMOV6, 0 TAD I XMOV6 /GET "FROM" ADDRESS ISZ XMOV6 DCA MOV61 TAD I XMOV6 /GET "TO" ADDRESS ISZ XMOV6 DCA MOV62 TAD (-6 DCA MOV63 MOV64, TAD I MOV61 DCA I MOV62 ISZ MOV61 ISZ MOV62 ISZ MOV63 JMP MOV64 JMP I XMOV6 /RETURN MOV61, 0 MOV62, 0 MOV63, 0 XBCLIN, 0 DCA PUTPNT /START AT BEGINNING OF BCL BUFFER JMS I (SENDKY /SEND THE KEYWORD DCA MOV61 /CLEAR THE BLANK COUNTER BCLIN5, JMS BCLIN3 /GET NEXT CARD AND PUT IT INTO BCL BUFFER JMP BCLIN7+2 /CARD NOT CONTINUED - DONE CIF F0 JMS I (CDRIN /READ ANOTHER CARD JMP BCLIN7+2 /EOF TAD (-10 DCA BCLIN4 BCLIN6, JMS I (GETCDR /GET FIRST 8 CHARS SZA CLA /TEST FOR ZERO JMP BCLIN7 /NON-ZERO - ERROR ISZ BCLIN4 JMP BCLIN6 JMP BCLIN5 /OK - PUT IT IN BUFFER BCLIN7, CDF F0 DCA I (CDRFLG /SET CDRIN TO RETURN THIS CARD AGAIN CDF F1 TAD (215 /PUT A <CR> PUTCHR;BCLBUF TAD (215;OUT1 DCA GETPNT /SET POINTER TO BEGINNING JMP I XBCLIN /RETURN BCLIN4, 0 BCLIN3, 0 TAD (-40 DCA BCLIN4 BCLIN9, JMS I (GETCDR /GET NEXT CDR CHAR SNA JMP BCLI13 /BLANK TAD (-CONTCH SNA JMP BCLI10 /CONTINUATION TAD (CONTCH CIF F0 JMS I (XCONVR JMP BCLIN8 /RUBOUT DCA XMOV6 /SAVE THE CHAR JMS BCLI14 /SEND THE BLANKS TAD XMOV6 OUT1 /SEND IT TAD XMOV6 PUTCHR;BCLBUF /PUT IT TAD PUTPNT TAD (-BCLSIZ^2+2 /BCL BUFFER FULL? SMA CLA JMP BCLI11 /FULL - ERROR BCLIN8, ISZ BCLIN4 /COUNT COLUMNS JMP BCLIN9 /LOOP JMP I BCLIN3 BCLI10, ISZ BCLIN3 /SKIP RETURN FOR CONTINUATION DCA MOV61 /CLEAR THE BLANK COUNTER SEND;BCL10E /"_$" TAD (211;OUT1 /<TAB> JMP I BCLIN3 /RETURN BCLI11, SEND;BCL11E /SEND ERROR BCLI12, CIF F0 JMS I (CDRIN /GET THE NEXT CARD JMP BCLIN7+2 JMS I (GETCDR /GET THE NEXT COLUMN DCA BCLIN4 /SAVE THIS COLUMN TAD (JOBBIT /IS THIS A $JOB CARD? AND BCLIN4 SNA CLA JMP BCLI12 /NO - FLUSH TO $JOB TAD (-JOBBIT-1 AND BCLIN4 SZA CLA JMP BCLI12 JMP BCLIN7 /YES - DONE BCLI13, ISZ MOV61 /ANOTHER BLANK JMP BCLIN8 BCLI14, 0 TAD MOV61 CMA DCA MOV61 BCLI15, ISZ MOV61;SKP JMP I BCLI14 TAD (" ;OUT1 JMP BCLI15 PAGE BCLTRA, JMP I .+1 /GO FINISH UP LAST BCL COMMAND BCLHUH /HUH? - I.E. WHICH COMMAND WAS IT? CIF CDF F0 JMP I (TEXFIN /TO COPY A DECK UNTIL THE NEXT BCL /COMMAND - JMS BCLTRA+1 BCLHU1, 0 /JMS HERE WITH ARG = TRANSFER ADDRESS TAD I BCLHU1 /GET TRANSFER ADDRESS DCA BCLHU1 TAD (BCLHUH /ON NEXT BCL CARD - NOTHING TO FINISH DCA BCLTRA+1 CIF CDF F0 /FIELD 0! JMP I BCLHU1 /GO GO GO BCLHUH, CDF F0 TAD I (KEYVAL /GET KEYWORD VALUE CDF F1 TAD (BCLGO /USE IT TO GET TRANSFER ADDRESS DCA OTEMP1 TAD I OTEMP1 DCA OTEMP1 CDF F0 TAD I (CONFLG /WAS LAST CARD CONTINUED? CDF F1 SZA CLA JMS BCLHU2 /YES - ERROR CDF F0 TAD I (LNCNT /DID THIS CARD HAVE A LINE NUMBER? CDF F1 SNA CLA JMP I OTEMP1 /YES - GO TO IT! CIF CDF F0 JMS I (LNOUT /OUTPUT THE LINE NUMBER JMS BCLHU2 /WHAT'S IT DOING WITH A NUMBER ANYWAY? JMP I OTEMP1 /NOW WE GO. BCLHU2, 0 CDF F0 ISZ I (ERRFLG CDF F1 SEND;BCLHM1 /"?_" JMP I BCLHU2 BCLEOF, JMS BCLHU1;EOF2 CERR, JMS BCLHU1;KEYBAD XOUTNA, 0 TAD I XOUTNA /GET ADDRESS OF NAME ISZ XOUTNA DCA OUTNA2 TAD GETPNT /SAVE BUFFER INPUT POINTER DCA OUTNA6 DCA OUTNA3 /SET FLAG FOR NO NAME JMS OUTNA4;0;-4 /SEND 4 CHARS FROM POSITION 0 TAD OUTNA3 SNA CLA JMP .+3 /NO DEVICE - NO ":" TAD (": OUT1 JMS OUTNA4;4;-6 /SEND 6 CHARS FROM POSITION 4 TAD (12 /SET UP TO GET EXTENSION DCA GETPNT JMS OUTNA1 /GET FIRST CHAR JMP OUTNA5 /NO EXTENSION CLA TAD (". OUT1 JMS OUTNA4;12;-2 /SEND 2 CHARS FROM POSITION 12 OUTNA5, TAD OUTNA6 /RESTORE BUFFER INPUT POINTER DCA GETPNT JMP I XOUTNA OUTNA1, 0 GETCHR OUTNA2, 0 TAD (-300 /IS IT NULL? SNA JMP I OUTNA1 /YES - DONE ISZ OUTNA1 /SKIP RETURN TAD (300 JMP I OUTNA1 OUTNA3, 0 /NAME PRESENT SWITCH OUTNA4, 0 TAD I OUTNA4 /GET CHAR POSITION ISZ OUTNA4 DCA GETPNT TAD I OUTNA4 /GET NO OF CHARS ISZ OUTNA4 DCA OUTN41 OUTN42, JMS OUTNA1 /GET A CHAR JMP I OUTNA4 /NULL - DONE OUT1 ISZ OUTNA3 /SET NAME PRESENT ISZ OUTN41 JMP OUTN42 JMP I OUTNA4 /DONE - RETURN OUTN41, 0 OUTNA6, 0 PAGE XSEND, 0 SZA /IF AC =0, ADDRESS IS ARG OF CALL JMP XSEND4 TAD I XSEND /GET MESSAGE ADDRESS ISZ XSEND XSEND4, DCA OTEMP1 XSEND1, TAD I OTEMP1 CLL RTR;RTR;RTR JMS XSEND2 TAD I OTEMP1 JMS XSEND2 ISZ OTEMP1 JMP XSEND1 XSEND2, 0 AND (77 SNA JMP I XSEND /NULL ENDS MESSAGE JMS I (XSEND3 /GET 8-BIT REPRESENTATION OUT1 JMP I XSEND2 MAKNAM, 0 TAD (DECN /START CONVERSION AT 100 CDF F0 DCA I (XR1 L7775 /CONVERT 3 DIGITS DCA I (TEMP1 ISZ NAMCNT /BUMP NAME COUNTER TAD NAMCNT DCA I (TEMP4 L0001 DCA I (TEMP5 /SAVE LEADING ZEROES TAD (MAKNA2 DCA I (OUTAD CDF F1 TAD I MAKNAM /MOVE DEFAULT NAME TO OUTPUT AREA DCA .+3 MOV6;FILNAM;0 TAD I MAKNAM ISZ MAKNAM DCA MAKNA3+2 TAD (7 /PUT NUMBER AT POSITION 7-9 DCA PUTPNT CIF F0 JMS I (CONDEC /OUTPUT NUMBER TAD (XOUT /RESTORE OUTPUT ROUTINE CDF F0 DCA I (OUTAD CDF F1 JMP I MAKNAM /RETURN MAKNA3, 0 PUTCHR;0 CIF CDF F0 JMP I MAKNA3 NAMCNT, 0 XISNUM, 0 TAD (-"9 SMA SZA JMP XISNU1 TAD ("9-"0 SMA ISZ XISNUM XISNU1, CLA JMP I XISNUM SAVNAM, 0 TAD SAVPNT DCA SAV1+2 /PUT NAME IN LIST TAD SAVPNT TAD (-SAVTOP /ARE WE AT TOP OF LIST? SNA JMP I SAVNAM /YES - DON'T SAVE NAME TAD (SAVTOP+6 DCA SAVPNT /ADVANCE POINTER FOR NEXT TIME TAD I SAVNAM /GET NAME TO SAVE DCA SAV1+1 ISZ SAVNAM SAV1, MOV6;0;0 JMP I SAVNAM SAVPNT, SAVARA /POINT TO SAVE AREA UNSNAM, 0 TAD I UNSNAM ISZ UNSNAM DCA UNSNA1+2 /POINT TO SPACE TO RECEIVE NAME TAD SAVPNT TAD (-6-SAVARA SPA JMP UNSNA2 /EMPTY - RETURN TAD (SAVARA DCA SAVPNT /BACK UP TAD SAVPNT DCA UNSNA1+1 /SET ADDRESS FROM WHICH NAME WILL COME UNSNA1, MOV6;0;0 ISZ UNSNAM /SKIP RETURN UNLESS EMPTY UNSNA2, CLA JMP I UNSNAM PAGE / / / $DECK / / CDECK, BCLIN /GET THE LINE OPTION;CDEOPT /ANALYZE THE OPTIONS TSTCR /END OF LINE? JMP CDECK1 /NO - GET A NAME CDECK3, MOV6;CDEDEF;NAME1 /YES - MOVE DEFAULT NAME JMP CDECK2 CDECK1, COLNAM;NAME1 /COLLECT A NAME JMP CDECK3 /FAIL - BAD NAME CDECK2, SEND;CDEM1 /".R PIP_*" OUTNAM;NAME1 /SEND THE NAME SEND;CDEM2 /"<BAT:_" TAD I (OPFOR /WAS "/FOR" SPECIFIED? SMA CLA TAD (BASKEY-FORKEY /NO - USE BASIC TAD (FORKEY-15 CDF F0 DCA I (KEYADR CDF F1 CDRTRA /TRANSLATE THE CARDS SEND;CMEOD /"$EOD_" TAD I (OPNOL /WAS "/NOLIST" SPECIFIED? SPA CLA JMP I (BCLHUH /YES - DONE TAD ("*;OUT1 JMS I (PIPOUT;BATOUT /SEND NAME OF LISTING DEVICE TAD ("<;OUT1 OUTNAM;NAME1 /SEND NAME OF FILE TAD (215;OUT1 JMP I (BCLHUH / / / $BASIC / / CBAS, BCLIN /GET BCL LINE OPTION;CBAOPT /ANALYZE OPTIONS TSTCR /END OF LINE? JMP CBAS2 /NO - GET NAME CBAS1, MOV6;CBATK;NAME1 /MOVE IN BAT: SEND;CBAM1 /.R PIP *PROG.BA< OUTNAM;NAME1 /SEND NAME JMP CONT CBAS2, COLNAM;NAME1 /COLLECT THE NAME JMP CBAS1 /FAIL - USE DEFAULT CBAS3, SEND;CBAM1 /".R PIP_*PROG.BA<" SEND;CBAM6 CONT, TAD (215;OUT1 CBAS5, JMP CBAS7 /SET OR CLOBBERED IN INIT TAD (211;OUT1 SEND;CBAM3 /'FILE #0,"DATA.DA"\FILEV #1,"' OUTNAM;BATOUT /"TTY:" OR "LPT:" SEND;CBAM4 /'"_' CBAS7, TAD (BASKEY-15 CDF F0 DCA I (KEYADR /SET KEYWORD LIST CDF F1 CDRTRA /TRANSLATE CARDS SEND;CMEOD /"$EOD_" SEND;CBAM7 SEND;CBAM5 OUTNAM;NAME1 SEND;CBAM8 TAD I (OPNOL /WAS "/NOLIST SPECIFIED?" SPA CLA JMP CBAS4 SEND /SEND AN EOD (MH) CMEOD /(MH) SEND /SEND AN .R PIP * (MH) CDEM1 /(MH) JMS I (PIPOUT;BATOUT SEND;CBAM2 /"<PROG.BA_" CBAS4, TAD (DATBAS DCA I (DATADR /SET "$DATA" ROUTINE JMP I (BCLHUH /DONE / / / $RUN (AFTER $BASIC) / / DATBAS, BCLIN OPTION;ZER6 /NO OPTIONS SEND;DATBM1 /".R PIP_*DATA.DA<BAT:_" CDRTRA /TRANSLATE THE CARDS SEND;DATBM2 /"$EOD_.R BCOMP_*PROG.BA_" TAD DATFTN /$RUN IS FORTRAN NOW DCA I (DATADR JMP I (BCLHUH /DONE PAGE / / / $FORTRAN (FORTRAN IV) / / CF4, BCLIN /GET BCL LINE OPTION;CF4OPT /ANALYZE OPTIONS TSTCR /END OF LINE? JMP CF42 CF41, JMS I (MAKNAM;NAME1 /YES - MAKE A NAME JMP CF43 CF42, COLNAM;NAME1 /NO - COLLECT A NAME JMP CF41 /BAD NAME - MAKE ONE CF43, SEND;CF4M1 /".R PIP_*" OUTNAM;NAME1 /SEND THE NAME TAD ("<;OUT1 TAD I (OPSRC;RAL /WAS A SOURCE FILE GIVEN SMA CLA JMP CF44 /NO OUTNAM;OPSRC+1 /YES - SEND IT TAD (215;OUT1 JMP CF45 CF44, SEND;CF4M2 /"BAT:_" CF45, TAD (FORKEY-15 /FORTRAN CARDS CDF F0 DCA I (KEYADR CDF F1 CDRTRA /TRANSLATE THE CARDS SEND;CF4M3 /"$EOD_.R F4_*" OUTNAM;NAME1 TAD I (OPNOL /WAS "/NOLIST" SPECIFIED? SPA CLA JMP CF46 /YES - DON'T GENERATE LIST FILES TAD (",;OUT1 TAD I (OPLIS RAL SPA CLA /WAS A NAME GIVEN? JMP CF47 /YES - GET IT MOV6;BATOUT;OPLIS+1 /NO - GIVE LIST DEV CF47, OUTNAM;OPLIS+1 /SEND NAME OF LISTING FILE CF46, TAD ("<;OUT1 OUTNAM;NAME1 TAD I (OPRALF /PRODUCE RALF LISTING? SMA CLA JMP CF48 /NO SEND;CF4M4 /"/F" CF48, TAD (215;OUT1 TAD (DATF4 DCA I (DATADR /SET "$DATA" ADDRESS JMS I (SAVNAM;NAME1 /SAVE NAME FOR "$LOAD" JMP I (BCLHUH /DONE / / / $RUN (FORTRAN II) / / DATF2, BCLIN JMS I (CL2S /DO $LOAD STUFF JMP DATL21 DATL2, BCLIN OPTION;ZER6 /NO OPTIONS IF ALREADY LOADED JMP DATL21 DATX2, BCLIN JMS I (DATNAM /GET A NAME TAD I (NAMELD /WAS A DEVICE SPECIFIED? SZA CLA JMP DATL21 /YES TAD (0423 /NO - USE "DSK" DCA I (NAMELD TAD (1300 DCA I (NAMELD+1 DATL21, SEND;DTF2M1 /".RUN " OUTNAM;NAMELD TAD (215;OUT1 CDRTRA /WITH GENIOX, INPUT IS FROM BATCH STREAM SEND;CMEOD /"$EOD_" TAD DATFTN /$DATA IS NOW FORTRAN DCA I (DATADR JMP I (BCLHUH PAGE / / / $LOAD (FORTRAN IV) / / /THIS SUBROUTINE IS USED WITH EITHER A $LOAD OR $RUN CL4S, 0 OPTION;CL4OPT /ANALYZE OPTIONS SEND;CL4SM1 /".R LOAD_*" TAD I (OPIMAG /WAS "/IMAGE" FILE SPECIFIED RAL SMA CLA JMP CL4S1 /NO MOV6;OPIMAG+1;NAMELD /YES - MOVE NAME JMP CL4S2 CL4S1, MOV6;CL4DEF;NAMELD /USE DEFAULT NAME CL4S2, OUTNAM;NAMELD /SEND THE NAME OF THE IMAGE FILE TAD I (OPLIS /WAS "/LIST" FILE GIVEN? SMA CLA JMP CL4S4 TAD I (OPLIS;RAL SPA CLA JMP CL4S3 MOV6;BATOUT;OPLIS+1 CL4S3, TAD (",;OUT1 OUTNAM;OPLIS+1 CL4S4, TAD I (OPSSYM /LIST SYSTEM SYMBOLS? SMA CLA JMP CL4S11 /NO SEND;CL4SM8 /"/S" CL4S11, SEND;CL4SM2 /"<_*" TAD I (OPLIB;RAL /WAS "/LIBRARY" FILE SPECIFIED? SMA CLA JMP CL4S5 OUTNAM;OPLIB+1 /SEND NAME OF LIBRARY SEND;CL4SM3 /"/L_*" CL4S5, TAD I (OPNOA /WAS "/NOAUTO" SPECIFIED? SPA CLA JMP CL4S7 /YES - DON'T BOTHER WITH SAVED NAMES CL4S6, JMS I (UNSNAM;NAME1 /GET A SAVED NAME JMP CL4S7 /OUT OF NAMES OUTNAM;NAME1 /SEND IT SEND;CL4SM4 /"/C_*" JMP CL4S6 CL4S7, TSTCR;SKP /END OF LINE? JMP CL4S10 GETCHR;BCLBUF /GET NEXT CHARACTER DCA CHRSAV GETCHR;BCLBUF TAD (-"= SZA CLA JMP CL4S8 TAD CHRSAV ISIT;CLIS1;CLIS2-1 /IS IT "L" OR "O" CL4S8, L7776 TAD GETPNT /BACK UP 2 DCA GETPNT CL4S9, COLNAM;NAME1 JMP CL4S7 /BAD NAME OUTNAM;NAME1 /SEND THE NAME SEND;CL4SM4 /"/C_*" JMP CL4S7 CL4SL, SEND;CL4SM5 /"/O" CL4SO, SEND;CL4SM6 /"_*" L7776 TAD GETPNT /BACK 2 JMS I (BCLSQU JMP CL4S9 CL4S10, SEND;CL4SM7 /"$_" DCA I (NAMCNT JMP I CL4S /RETURN /$LOAD CL4, BCLIN /GET THE LINE JMS CL4S /ANALYZE IT TAD (DATL4 /SET "$DATA" ADDRESS DCA I (DATADR JMS I (BCLHU1;TEXFIN CHRSAV, 0 PAGE / / / $RUN (FORTRAN IV) - FORMERLY CALLED $DATA / / /THIS SUBROUTINE IS CALLED FROM DATF4 - THE REAL $RUN PROCESSOR DAT4, 0 TAD (-12^7 /ZERO OUT CONTROL WORD DCA DEVASC /FOR EACH DEVICE NUMBER TAD (DEVASN-1 DCA OXR1 DEVAS1, DCA I OXR1 ISZ DEVASC JMP DEVAS1 BCLIN /GET THE INPUT LINE DAT41, GETCHR;BCLBUF /GET A CHAR DAT411, ISIT;OPTIS3;DATIS1-1 /IS IT "/" OR <CR>? JMP DAT41 /NO DAT42, L7777 TAD GETPNT /SAVE POINTER TO "/" DCA DEVAST GETCHR;BCLBUF ISNUM JMP DAT411 /IT'S NOT A NUMBER TAD CHAR TAD (-"0 CIA DCA DEVASC TAD DEVASC CIA CLL RAL;RTL TAD DEVASC /NUMBER*7 TAD (DEVASN DCA DEVASC DAT47, GETCHR;BCLBUF /GET ANOTHER CHAR ISIT;DATIS2;DATIS3-1 /IS IT "N","C", OR "="? JMP DAT411 /NO DAT44, TAD I DEVASC /"N" SETS BIT 1 AND (5777 TAD (2000 DCA I DEVASC JMP DAT47 DAT45, TAD I DEVASC /"C" SETS BIT 2 AND (6777 TAD (1000 DCA I DEVASC JMP DAT47 DAT46, TAD GETPNT /SAVE POINTER TO POSSIBLE NAME DCA DEVASP GETCHR;BCLBUF /GET THE NEXT CHAR ISNUM JMP DAT48 /NOT A NUMBER TAD CHAR /SAVE THE NUMBER DCA DEVASS GETCHR;BCLBUF ISIT;DATIS4;DATIS5-1 /IS IT "," "/" OR <CR>? DAT48, TAD DEVASP /RESET NAME POINTER DCA GETPNT TAD I DEVASC /ZERO OUT NUMBER AND (7400 DCA I DEVASC TAD DEVASC;IAC /GET POINTER TO DEVICE BLOCK DCA .+2 COLNAM;0 /COLLECT NAME JMP DAT49 /BAD NAME DAT412, TAD I DEVASC /NAME OR NUM OK - SET BIT 0 AND (3777 TAD (4000 DCA I DEVASC DAT49, TAD DEVAST /SQUISH JMS I (BCLSQU JMP DAT41 DAT410, TAD I DEVASC /ADD NUMBER TO CONTROL WORD AND (7400 TAD DEVASS DCA I DEVASC JMP DAT412 DAT43, JMP I DAT4 DEVASP, 0 DEVASC, 0 DEVASS, 0 DEVAST, 0 /SEND A NAME AND SEND /T OPTION IF DEVICE IS TTY: PIPOUT, 0 TAD I PIPOUT /GET ADDRESS OF NAME ISZ PIPOUT DCA PIPPNT OUTNAM /SEND IT PIPPNT, 0 TAD I PIPPNT /GET CHAR OF DEVICE TAD (-2424 /IS IT "TT"? SZA CLA JMP I PIPOUT /NO ISZ PIPPNT TAD I PIPPNT TAD (-3100 /IS IT "Y@"? SZA CLA JMP I PIPOUT /NO SEND;PIPM1 /"/T" JMP I PIPOUT PAGE /$RUN (FORTRAN IV) DATF4, JMS I (DAT4 /PROCESS DEVICE NUMBER STUFF JMS I (CL4S /DO LOAD STUFF JMP DATL46 DATL4, JMS I (DAT4 OPTION;ZER6 /NO OPTIONS JMP DATL46 DATX4, JMS I (DAT4 /DO DEVICE NUMBER STUFF JMS DATNAM /COLLECT A NAME DATL46, SEND;DTF4M1 /".R PIP_*DATA.DA<BAT:_" CDRTRA /TRANSLATE CARDS SEND;DTF4M2 /"$EOD_.R FRTS_*" OUTNAM;NAMELD /SEND LOADER NAME DATL48, JMP DATL49 /ZEROED OR CREATED IN INIT SEND;DTF4M6 /"_*DATA.DA/4_*" OUTNAM;BATOUT SEND;DTF4M7 /"/5" JMP DTL410 DATL49, SEND;DTF4M8 /"_*/5=4" DTL410, SEND;DTF4M3 /"_*" TAD (-12 /TRANSLATE THE DEVICE NUMBERS DCA DATF4C TAD (DEVASN-7 DCA DATF4P DATL41, TAD (7 TAD DATF4P DCA DATF4P TAD I DATF4P SMA CLA /WAS THIS ONE SPECIFIED? JMP DATL47 /NO TAD I DATF4P AND (377 /WAS IT A NUMBER? SNA JMP DATL42 DCA CHAR /YES - SAVE IT TAD ("=;OUT1 TAD CHAR;OUT1 JMP DATL43 DATL42, TAD DATF4P;IAC /POINT TO NAME DCA .+2 OUTNAM;0 /SEND IT DATL43, TAD I DATF4P /"N"? RAL SMA CLA JMP DATL44 /NO TAD ("<;OUT1 DATL44, TAD I DATF4P /"C"? RTL SMA CLA JMP DATL45 /NO SEND;DTF4M4 /"/C" DATL45, TAD ("/;OUT1 TAD DATF4C TAD ("0+12;OUT1 SEND;DTF4M3 /"_*" DATL47, ISZ DATF4C JMP DATL41 SEND;DTF4M5 /"$_" TAD DATFTN /"$DATA" IS NOW FORTRAN DCA I (DATADR JMP I (BCLHUH DATF4C, 0 DATF4P, 0 DATNAM, 0 OPTION;ZER6 /NO OPTIONS TSTCR;SKP /IS THERE A NAME? JMP DATNO /NO COLNAM;NAMELD /YES - COLLECT IT JMP DATNO /INVALID NAME JMP I DATNAM /RETURN DATNO, SEND;DATNO1 /"?NO PROGRAM TO RUN_" JMS I (BCLHU1;TEXFIN PAGE / / / $FORTRAN (FORTRAN II) / / CF2, BCLIN OPTION;CF2OPT /ANALYZE OPTIONS TSTCR /END OF LINE? JMP CF22 CF21, JMS I (MAKNAM;NAME1 /CREATE A NAME JMP CF23 CF22, COLNAM;NAME1 /COLLECT A NAME JMP CF21 /FAIL - CREATE A NAME CF23, SEND;CF2M1 /".R PIP_*" OUTNAM;NAME1 TAD ("<;OUT1 TAD I (OPSRC;RAL /WAS A SOURCE FILE GIVEN? SMA CLA JMP CF24 /NO OUTNAM;OPSRC+1 TAD (215;OUT1 JMP CF25 CF24, SEND;CF2M2 /"BAT:_" CF25, TAD (FORKEY-15 /FORTRAN CARDS CDF F0 DCA I (KEYADR CDF F1 CDRTRA /TRANSLATE THE CARDS SEND;CF2M3 /"$EOD" TAD I (OPNOL /WAS "/NOLIST" SPECIFIED? SPA CLA JMP CF27 SEND;CF2M4 /"_*" TAD I (OPLIS;RAL /WAS A LISTING FILE GIVEN? SPA CLA JMP CF26 /YES MOV6;BATOUT;OPLIS+1 /NO - USE LISTING DEVICE CF26, JMS I (PIPOUT;OPLIS+1 TAD ("<;OUT1 OUTNAM;NAME1 CF27, SEND;CF2M5 /"_.R FORT_*" OUTNAM;NAME1 TAD I (OPNOL /NOLIST? SPA CLA JMP CF28 /YES TAD I (OPSABR /WAS "/SABR" SPECIFIED? SMA CLA JMP CF28 /NO TAD (",;OUT1 OUTNAM;OPLIS+1 CF28, TAD ("<;OUT1 OUTNAM;NAME1 TAD (215;OUT1 TAD (DATF2 DCA I (DATADR /ENABLE $DATA JMS I (SAVNAM;NAME1 /SAVE THE NAME FOR $LOAD JMP I (BCLHUH /DONE / / / $EOD / $MSG / / CEOD, CMSG, JMS SENDKY /OUTPUT THE BCL KEYWORD JMS I (BCLHU1;TEXTRA / / / $JOB / / CJOB, TAD (SAVARA /RESET SAVED NAMES DCA I (SAVPNT DCA I (NAMCNT /ZERO MAKNAM COUNTER TAD DATFTN /$RUN IS NOW FORTRAN DCA I (DATADR BCLIN /SEND THE LINE TO THE BATCH STREAM SEND;MJOB1 /".R FOTP_*FIL???.*/D_" JMS I (BCLHU1;TEXFIN SENDKY, 0 CDF F0 TAD I (KEYVAL CDF F1 TAD (BCLKEY-1 DCA OTEMP1 TAD I OTEMP1 SEND TAD (" ;OUT1 JMP I SENDKY PAGE / / / $LOAD (FORTRAN II) / / /THIS SUBROUTINE IS CALLED BY CL2 OR DATF2 CL2S, 0 OPTION;CL2OPT /ANALYZE OPTIONS SEND /".R LOADER_*" OR ".R LOADER_*GENIOX" CL2SX, CL2M1 /OR CL2M1A TAD I (OPINP /WAS "/INPUT" SPECIFIED? SMA CLA JMP CL2S1 SEND;CL2M3 /"/I" CL2S1, TAD I (OPOPT /WAS "/OUTPUT" SPECIFIED? SMA CLA JMP CL2S2 SEND;CL2M4 /"/O" CL2S2, TAD I (OPTWO /WAS "/TWO" SPECIFIED? SMA CLA JMP CL2S3 SEND;CL2M5 /"/H" CL2S3, SEND;CL2M6 /"_*" TAD I (OPLIB;RAL /WAS A LIBRARY SPECIFIED? SMA CLA JMP CL2S4 OUTNAM;OPLIB+1 SEND;CL2M7 /"/L_*" CL2S4, TAD I (OPLIS /WAS "/LIST" SPECIFIED? SMA CLA JMP CL2S6 TAD I (OPLIS;RAL /WAS A NAME GIVEN? SPA CLA JMP CL2S5 /YES MOV6;BATOUT;OPLIS+1 CL2S5, OUTNAM;OPLIS+1 SEND;CL2M8 /"</M_*" CL2S6, TAD I (OPNOA /WAS "/NOAUTO" SPECIFIED? SPA CLA JMP CL2S8 CL2S7, JMS I (UNSNAM;NAME1 /GET A SAVED NAME JMP CL2S8 /EMPTY OUTNAM;NAME1 SEND;CL2M6 /"_*" JMP CL2S7 CL2S8, TSTCR;SKP /END OF LINE? JMP CL2S9 /YES COLNAM;NAME1 OUTNAM;NAME1 SEND;CL2M6 /"_*" JMP CL2S8 CL2S9, SEND;CL2M9 /"$_.SAVE " TAD I (OPIMAG;RAL /WAS AN IMAGE FILE NAME GIVEN? SMA CLA JMP CL2S10 /NO - USE DEFAULT TAD I (OPIMAG+1 /WAS A DEVICE GIVEN? SZA CLA JMP CL2S11 /YES TAD (0423 /"DS" DCA I (OPIMAG+1 TAD (1300 /"K" DCA I (OPIMAG+2 CL2S11, MOV6;OPIMAG+1;NAMELD CL2S12, OUTNAM;NAMELD TAD (215;OUT1 JMP I CL2S CL2S10, MOV6;CL2SN2;NAMELD DCA I (NAMCNT JMP CL2S12 /$LOAD CL2, BCLIN JMS CL2S TAD (DATL2 /$DATA DOES NOT DO LOAD DCA I (DATADR JMS I (BCLHU1;TEXFIN PAGE BCLBUF, ZBLOCK 400 /SPACE FOR A WHOLE BUNCH OF CONTINUATION CARDS BCLSIZ=.-BCLBUF SAVARA, ZBLOCK 6^62 /SPACE FOR SAVED NAMES SAVTOP=. /OPTION LISTS CDEOPT, OPBAS;OPFOR;OPNOL;0 /$DECK CBAOPT, OPNOL;0 /$BASIC CF4OPT, OPSRC;OPNOL;OPLIS;OPRALF;0 /$FORTRAN (F4) CL4OPT, OPIMAG;OPLIS;OPLIB;OPNOA;OPSSYM;0 /$LOAD (F4) CF2OPT, OPSRC;OPNOL;OPLIS;OPSABR;0 /$FORTRAN (F2) CL2OPT, OPINP;OPOPT;OPTWO;OPIMAG;OPLIS;OPLIB;OPNOA;0 /$LOAD (F2) /OPTIONS WITHOUT ASSOCIATED FILE NAME OPBAS, 0004;TEXT "BASIC" /B OPFOR, 0006;TEXT "FORTRAN" /F OPNOL, 0023;TEXT "NOLIST";*.-1 /NOL OPRALF, 0003;TEXT "RALF";*.-1 /R OPNOA, 0023;TEXT "NOAUTO";*.-1 /NOA OPSSYM, 0013;TEXT "SSYMB" /SS OPSABR, 0012;TEXT "SABR";*.-1 /SA OPINP, 0013;TEXT "INPUT" /IN OPOPT, 0023;TEXT "OUTPUT";*.-1 /OUT OPTWO, 0020;TEXT "TWO" /TWO /OPTIONS WITH ASSOCIATED FILE NAME OPSRC, 1002;ZBLOCK 6;TEXT "SRC" /S OPLIS, 1003;ZBLOCK 6;TEXT "LIST";*.-1 /L OPIMAG, 1013;ZBLOCK 6;TEXT "IMAGE" /IM OPLIB, 1024;ZBLOCK 6;TEXT "LIBRARY" /LIB /FILE NAMES NAME1, ZBLOCK 6 NAMELD, ZBLOCK 6 BATOUT, ZBLOCK 6 ZER6, ZBLOCK 6 BATTTY, TEXT "TTY@@@@@@@@@";*.-1 BATLPT, TEXT "LPT@@@@@@@@@";*.-1 CDEDEF, TEXT "@@@@DECK@@@@";*.-1 CBATK, TEXT "BAT@@@@@@@@@";*.-1 CL4DEF, TEXT "@@@@PROG@@LD";*.-1 FILNAM, TEXT "@@@@FIL@@@@@";*.-1 CL2SN2, TEXT "DSK@PROG@@@@";*.-1 /SPACE FOR DEVICE ASSIGNMENTS UNDER FORTRAN 4 DEVASN, ZBLOCK 7^12 /LISTS FOR ISIT CLIS1, -"L;-"O;0 CLIS2, CL4SL;CL4SO DATIS1, DAT42 /"/" DAT43 /<CR> DATIS2, -"N;-"C;-"=;0 DATIS3, DAT44;DAT45;DAT46 DATIS5, DAT410;DAT410;DAT410 OPTIS2, OPTIO8 /"=" OPTIO9 /"," OPTIO9 /"/" OPTIO9 /<CR> OPTIS4, OPTI3A OPTRET OPTIS1, -"= DATIS4, OUTIS1, -", OPTIS3, BCLIS1, -"/;-215 /LIST MUST BE TERMINATED BY A POSITIVE WORD 0 COLIS2, COLDEV /":" COLFIL /"." COLEXT /"/" COLEXT /"," COLEXT /<CR> COLIS1, -":;-".;-"/;-",;-215 /TERMINATE LIST WITH POSITIVE WORD 0 BCLIS2, BCLSQ2 /"/" BCLSQ3 /<CR> OUTIS2, OUTER2 /"," OUTER2 /"/" OUTER2 /<CR> /LIST OF BCL ROUTINE ADDRESSES BCLGO, BCLEOF /FOR FINISHING UP BEFORE CLOSING FILE CBAS /$BAS FORADR, CF4 /$FOR DATADR, DATX4 /$DATA LOAADR, CL4 /$LOAD CJOB /$JOB CMSG /$MSG CDECK /$DECK CEOD /$EOD CERR CERR CERR CERR /LIST OF BCL KEYWORDS BCLKEY, MBAS MFOR MDATA MLOAD MJOB MMSG MDECK MEOD /ERROR MESSAGES OPTERM, TEXT "?INVALID OPTION: /" COLERM, TEXT "?INVALID FILE SPECIFICATION - " BCL11E, TEXT "?_BCL LINE TOO LONG_" /MESSAGES BCLHM1, TEXT "?_" BCL10E, TEXT "_$" CF4M1, CF2M1, CDEM1, TEXT ".R PIP_*" CDEM2, TEXT "<BAT:_" CMEOD, TEXT "$EOD_" CBAM1, TEXT ".R PIP" *.-1 CBAM7, TEXT "_*PROG.BA<" CBAM2, TEXT "<PROG.BA" *.-1 CBAM8, TEXT "_" CBAM3, TEXT 'FILE #3:"DATA.DA"\FILEV #4:"' CBAM4, TEXT '"_' CBAM5, TEXT "PROG.BA," CBAM6, TEXT "BAT:," PIPM1, TEXT "/T" DTF4M1, DATBM1, TEXT ".R PIP_*DATA.DA<BAT:_" DATBM2, TEXT "$EOD_.R BCOMP_*PROG.BA_" CF2M2, CF4M2, TEXT "BAT:_" CF4M3, TEXT "$EOD_.R F4_*" CF4M4, TEXT "/F" CL4SM1, TEXT ".R LOAD_*" CL4SM2, TEXT "<_*" CL2M7, CL4SM3, TEXT "/L_*" CL4SM4, TEXT "/C_*" CL4SM5, TEXT "/O" DTF4M3, CF2M4, CL2M6, CL4SM6, TEXT "_*" DTF4M5, CL4SM7, TEXT "$_" CL4SM8, TEXT "/S" DTF4M2, TEXT "$EOD_.R FRTS_*" DTF4M4, TEXT "/C" DTF4M6, TEXT "_*DATA.DA/4_*" DTF4M7, TEXT "/5" DTF4M8, TEXT "_*/5=4" DATNO1, TEXT "?NO PROGRAM TO RUN_" CF2M3, TEXT "$EOD" CF2M5, TEXT "_.R FORT_*" CL2M1, TEXT ".R LOADER_*" CL2M1A, TEXT ".R LOADER_*GENIOX" CL2M3, TEXT "/I" CL2M4, TEXT "/O" CL2M5, TEXT "/H" CL2M8, TEXT "</M_*" CL2M9, TEXT "$_.SAVE " DTF2M1, TEXT ".RUN " MBAS, TEXT "$BASIC" MFOR, TEXT "$FORTRAN" MJOB1, TEXT ".R FOTP_*FIL???.*/D_" MEOD, TEXT "$EOD" MJOB, TEXT "$JOB" MMSG, TEXT "$MSG" MDECK, TEXT "$DECK" MLOAD, TEXT "$LOAD" MDATA, TEXT "$RUN" $ |
Added src/os8/uni/CUSPS/PAL8.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 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<HASH=1> /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)<SOURCE(.PA),.../OPTIONS /OPTIONS: /B BYTE SHIFT - ! IS 6 BIT SHIFT (!=^100+) /C CREF AFTER - "CREFLS.TM" CREATED IF NO CREF /D DDT TYPE SYMBOL - ONLY IF LISTING /E 'LG' ERROR - LINKS ARE ERRORS /F NO TEXT FILL - NO EXTRA 0 FILL IN 'TEXT' /G LOAD+GO AFTER - SAME AS /L, BUT /G PASSED TO ABSLDR /H NO PAGING - ONLY IF LISTING /J JUST WHAT LOADS - INHIBITS LISTING OF UNASSEMBLED CODE /K CHECK FOR MORE THAN 8K OF CORE (DEFAULT IS 8K) /L LOAD AFTER - "PAL8BN.TM" CREATED IF NO BINARY /N NO LISTING - ONLY IF LISTING /O NO 200 ORG - NO AUTOMATIC 200 ORIGIN AFTER 'FIELD' /S NO SYMBOL TABLE - ONLY IF LISTING /T CR-LF NOT FF - ONLY IF LISTING /W WIPE LITERALS - INHIBITS REMEMBERING OF LITERAL BOUNDS /PERMANENT PATCH LOCATIONS FOR THE ABOVE SWITCHES ARE SYMBOLS /OF THE FORM Z(SW)(PATCH) - E.G. ZT7640 IS THE LOC TO PATCH TO 7640 /TO REVERSE THE POLARITY OF THE "T" SWITCH. /PSEUDO-OPS: /DECIMAL RADIX TO BASE 10 /DEVICE 2 WORD DEVICE CODE /DTORG TYPESETTING TAPE ORIGIN /EJECT SKIPS TO A NEW PAGE, AND IF ANY TEXT FOLLOWS, / THAT TEXT BECOMES THE NEW HEADER LINE /ENPUNCH ENABLE PUNCHING /EXPUNGE REMOVE ALL SYMBOLS /FIELD SET FIELD /FILENAME 4 WORD FILE CODE /FIXMRI DEFINE MEMORY REFERENCE INSTRUCTION /FIXTAB MAKE ALL SYMBOLS PERMANENT /IFDEF CONDITIONAL ON DEFINITION /IFNDEF CONDITIONAL ON UNDEFINED /IFNZRO CONDITIONAL ON NON-ZERO /IFZERO CONDITIONAL ON ZERO /NOPUNCH DISABLE PUNCHING /OCTAL RADIX TO BASE 8 /PAGE RE-ORIGIN TO BEGINNING OF NEXT PAGE OR PAGE N /PAUSE ALTERNATE END-OF-FILE /RELOC ASSEMBLE FOLLOWING CODE AS IF LOC = ARG OF RELOC /TEXT 6 BIT TEXT /XLIST LISTING INHIBIT UNLESS THE XLIST IS / FOLLOWED BY AN EXPRESSION. THEN IF THE EXPRESSION / IS 0 START LISTING, OR NON-0 THEN INHIBIT LISTING /ZBLOCK RESERVE BLOCK OF ZEROS /SYMBOL LAYOUT: / WORD 1 BIT 0=1 PERMANENT SYMBOL / BIT 1=1 "I" OR "Z" / BITS 3-11 CHARS 1 AND 2 / / WORD 2 BIT 0=1 MEMORY REFERENCE INSTRUCTION / BITS 2-11 CHARS 3 AND 4 / / WORD 3 BIT 0=1 PSEUDO-OP / BITS 2-11 CHARS 5 AND 6 / / WORD 4 BITS 0-11 OCTAL VALUE /CHARS ARE STORED AS: / A TO Z ARE 01 TO 32 / 0 TO 9 ARE 33 TO 44 / / CHAR1^45+CHAR2 /OPERATORS: /+ TWO'S COMPLEMENT ADD /- TWO'S COMPLEMENT SUBTRACT /& BOOLEAN AND /! BOOLEAN INCLUSIVE 'OR' OR BYTE SHIFT / (SPACE) DELIMITER OR INCLUSIVE OR /^ MULTIPLY (REPEATED ADDITION) /% DIVIDE (REPEATED SUBTRACTION) /DEFINITIONS ASWAP= 40 /WATCH THIS SWAP AREA!! MDATE= 7666 /MONITOR DATE BIPCCL= 7777 /DATE EXTENSION AND BATCH IN PROG FLG IN FIELD 0 MPARAM= 7643 /COMMAND DECODER OPTION LIST DCB= 7760 /DEVICE CONTROL BLOCK JSBITS= 7746 /JOB STATUS WORD BATOUT= 7400 /BATCH LOG OUTPUT ROUTINE IN BATCH RESIDENT LNPRPG= 70 /56 LINES PER PAGE HEDLEN= 50 /40 CHARACTERS IN PAGE TITLE /(MUST BE A MULTIPLE OF 8) AC7776= STA CLL RAL AC7775= STA CLL RTL AC4000= STL CLA RAR AC3777= STA CLL RAR AC2000= STL CLA RTR AC0002= STL CLA RTL /TABLE OF ERROR MESSAGE DEFINITIONS IZ= "I-240^100+"Z-240 /ILLEGAL PAGE ZERO REFERENCE CF= "C-240^100+"F-240 /CREF.SV NOT FOUND US= "U-240^100+"S-240 /UNDEFINED SYMBOL IP= "I-240^100+"P-240 /ILLEGAL PSEUDO-OP USAGE SE= "S-240^100+"E-240 /SYMBOL TABLE EXCEEDED ZE= "Z-240^100+"E-240 /PAGE ZERO EXCEEDED PE= "P-240^100+"E-240 /CURRENT PAGE EXCEEDED IC= "I-240^100+"C-240 /ILLEGAL CHARACTER ID= "I-240^100+"D-240 /ILLEGAL DEFINITION BE= "B-240^100+"E-240 /PUSH-DOWN OVERFLOW DE= "D-240^100+"E-240 /DEVICE ERROR DF= "D-240^100+"F-240 /DEVICE FULL LD= "L-240^100+"D-240 /ABSLDR.SV NOT FOUND IE= "I-240^100+"E-240 /ILLEGAL EQUATE PH= "P-240^100+"H-240 /PHASE ERROR II= "I-240^100+"I-240 /ILLEGAL INDIRECT RD= "R-240^100+"D-240 /REDEFINITION UO= "U-240^100+"O-240 /UNDEFINED ORIGIN LG= "L-240^100+"G-240 /LINK GENERATED /ABBREVIATIONS /CR/LF CARRIAGE RETURN/LINE FEED (215,212) /F/F FORM FEED (214) /PAGE ZERO *0 INT, 15 CIF 30 /SYMBIONT CODE JMP .-1 PTR, 0 /V3C USED BY KNTR, 0 /INPUT ROUTINE OCTPR1, 0 OCTPR3, 0 FORMF6, 0 /AUTOINDEX REGISTERS /PRESET FOR ONCE ONLY CODE *10 PDLXR, PDLST /PUSH-DOWN AUTO INDEX REGISTER TAGXR, SWAP1-1 /TAG AUTO INDEX REGISTER XREG1, DSWIT1-1 /GENERAL AUTO INDEX REGISTER XREG2, DSWIT2-1 /GENERAL AUTO INDEX REGISTER /NOT USED AS AUTO INDEX REGISTERS /EXCEPT DURING ONCE ONLY CODE LAST1, DATE-1 /LAST DEFINED SYMBOL LAST2, SWAP2-1 LAST3, IFZERO HASH <SYMPRT+4-1> IFNZRO HASH <SYMNWP-1> LAST4, IFZERO HASH <SYMPR9-2-1> IFNZRO HASH <SYMDDT-1> *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 <? SNA CLA STA /YES - INCREMENT CONDITIONAL COUNTER JMP GETC13 /NO - KEEP LOOKING /CHAR IS NEGATIVE IF LOGICAL END OF LINE: / CARRIAGE RETURN / / / ; /CHAR MAY BE ZERO IF PHYSICAL END OF LINE: / CARRIAGE RETURN /PRINT A LINE OF SOURCE CODE LINPRT, 0 TAD (LINBUF-1 DCA XREG1 /SET POINTER TO LINE LINPR1, TAD I XREG1 /GET CHARACTER SNA /IS IT END OF LINE? JMP I LINPRT /YES - END LINE JMS I OERROR /NO - OUTPUT CHARACTER DCA I [LINBUF /CLEAR OUT 1ST CHAR IN LINE AS "PRINTED" FLAG JMP LINPR1 /HANDLE PHASE ERROR /AND ALL ERROR EXITS TO MONITOR SYMOFL, CLA TAD (SE /SYMBOL TABLE EXCEEDED MESSAGE MONERR, DCA MONER1 /ERROR IS SERIOUS ENOUGH TO PHASE, TAD (OTYPEO / CAUSE IMMEDIATE RETURN TO DCA OERROR / MONITOR JMS I [ERROR MONER1, PH /STORE ERROR TYPE HERE JMP I [7600 /***EXIT TO MONITOR*** /FIND CURRENT PAGE NUMBER /EXIT WITH NUMBER IN AC FINDSP, 0 TAD LOC AND [7600 JMS I [RTL6 JMP I FINDSP /--RETURN-- PAGE /********************************************************** /THIS AREA IS SWAPPED OUT DURING PASS 1 AND 2 /** NO LITERALS IN THIS PAGE, AS THERE IS A PAGE OVERLAYING IT ** SWAP1=. /PASS 3 LISTING OUTPUT LISOUT, 0 DCA LISOU2 TAD XLISTX /IS THIS COVERED BY XLIST? SZA CLA JMP I LISOUT /YES--RETURN-- ISZ LISCNT /NO-WAS PREVIOUS CHARACTER A 215? JMP LISOU1 /NO ISZ LINCNT /WAS IT END OF PAGE? JMP LISOU1 /NO ISZ THISPG /YES-START OVERFLOW PAGE BEGIAB, JMS CRLF /OUTPUT CARRIAGE RETURN/LINE FEED HSWIT1, JMS I [FORMFD /0 IF /H SWITCH OPTION TO SUPRESS PAGING ISZ LINCNT LISOU1, TAD LISOU2 /IS CHARACTER A CARRIAGE RETURN? TAD [-215 SNA JMP LISOU3 /YES - OUTPUT CR/LF TAD [215 /NO - RESTORE CHARACTER JMS I OCHAR /OUTPUT CHARACTER JMP I LISOUT /--RETURN-- LISOU3, CLA CMA DCA LISCNT /REMEMBER THE 215 FOR NEXT TIME JMS CRLF /OUTPUT CARRIAGE RETURN/LINE FEED JMP I LISOUT /--RETURN-- LISCNT, -1 LISOU2, 0 /FORM FEED OUTPUT ROUTINES FORMFD, 0 TAD LINCNT /GET LINE COUNTER TAD FORMLN SNA CLA /ARE WE AT TOP OF PAGE? JMP I FORMFD /YES - NO NEED FOR FORM FEED TAD XLISTX /IS THIS COVERED BY XLIST? SZA CLA JMP I FORMFD /YES--RETURN-- HSWITC, JMP FORMF1 /0 IF /T OR TTY:; JMP FORMF3 IF /H /OUTPUT IF TTY:OR /T OPTION TAD LINCNT TAD [-4 DCA LINCNT JMS CRLF /OUTPUT CARRIAGE RETURN/LINE FEED ISZ LINCNT JMP CRLF1 /OUTPUT LINE FEED /CRLF1 WILL RETURN TO /JMP-1 UNTIL LINCNT HAS /BEEN BUMPED SUFFICIENTLY TAD FORMM6 DCA LINCNT TAD MINUS /OUTPUT ------ JMS I OCHAR ISZ LINCNT /* NEXT 3 LOCS CHANGED IF NO /T OR TTY: FORMF1, JMP .-3 /* STA TAD [-4 /* DCA LINCNT /GENERATE ONE FORM FEED DCA LINCNT /* STA /TURN CR INTO FF JMS CRLF /OUTPUT CR/LF OR FF/LF ISZ LINCNT JMP CRLF1 /OUTPUT LINE FEED TAD FORMLN CIA DCA LINCNT FORM22, TAD [HEADER-1 /OUTPUT HEADER DCA XREG2 DCA LSTCNT FORM30, TAD I XREG2 /GET NEXT CHARACTER OF HEADING SNA /IS IT LAST + 1 JMP FORM20 /YES JMS I OCHAR /NO-OUTPUT IT TAD LSTCNT TAD [-HEDLEN /DONE "HEDLEN" CHARACTERS YET? SZA CLA JMP FORM30 /NO-CONTINUE TAD FORMHD /YES-START SYSTEM HEADER JMP FORM22 /WHICH STARTS AT HEADER+HEDLEN FORMLN, LNPRPG FORMHD, HEDLEN MINUS, "- /TTY: OR /T OUTPUTS FORM FEED AS /CARRIAGE RETURN, MULTIPLE LINE FEEDS TO END OF PAGE /------ /CARRIAGE RETURN, 5 LINE FEEDS /HEADER /NO OPTIONS TREATS F/F AS /F/F, LF, CR/LF /HEADER / /H OPTION TREATS F/F AS 2 CR/LF /USER HEADER IS "HEDLEN" CHARACTERS WIDE /ASSEMBLER HEADER ENDS WITH 0 /OUTPUT PAGE NUMBERS FORM20, TAD EDITPG /OUTPUT EDITOR PAGE NUMBER JMS FORMF4 TAD THISPG /IS THERE PAGE OVERFLOW? SNA CLA FORM21, JMP FORMF3 /NO TAD MINUS /YES JMS I OCHAR /OUTPUT - TAD THISPG /OUTPUT NUMBER OF OVERFLOW PAGE JMS FORMF4 /OUTPUT IF /H OPTION FORMF3, JMS CRLF /OUTPUT 2 CR/LF JMS CRLF JMP I FORMFD /--RETURN-- /DECIMAL PRINT ROUTINE FORMF4, 0 DCA FORMF6 /SAVE NUMBER TAD FORM8F DCA CRLF /POINT TO DIVISION LIST FORM12, DCA FORMF7 /START WITH 0 JMP .+3 FORMF5, DCA FORMF6 ISZ FORMF7 /ADD 1 TO DIGIT TAD I CRLF /SUBTRACT 1000, 100, OR 10 SNA JMP FORM11 /0 IS END OF TABLE - NO MORE DIGITS TAD FORMF6 SMA /OVERFLOW JMP FORMF5 /NO-KEEP SUBTRACTING CLA /YES-DIGIT DONE ISZ CRLF /BUMP LIST POINTER TAD FORMF7 /WAS DIGIT A 0? SNA JMP FORM12 /YES TAD ["0 /NO-MAKE IT ASCII JMS I OCHAR /OUTPUT DIGIT AC4000 JMP FORM12 /4000 IN AC FORCES SIGNIFICANCE FORM11, TAD FORMF6 /GET LAST DIGIT (UNITS PLACE) TAD ["0 JMS I OCHAR /OUTPUT DIGIT JMP I FORMF4 /--RETURN-- FORMM6, -6 FORM8F, FORMF8 /OUTPUT CARRIAGE RETURN/LINE FEED /ENTER WITH AC=-1 TO GENERATE F/F LF HEDCL2, CRLF, 0 TAD [215 JMS I OCHAR CRLF1, TAD [212 /RE-ENTRY FOR MULTIPLE LINE FEEDS JMS I OCHAR JMP I CRLF /--RETURN-- /CLEAR PAGE HEADING BUFFER FORMF7, HEDCLR, 0 TAD [-HEDLEN /SET HEADING BUFFER DCA HEDCL2 /TO TABS TAD [HEADER-1 DCA XREG2 TAD [211 DCA I XREG2 ISZ HEDCL2 JMP .-3 JMP I HEDCLR /--RETURN-- PAGE /SYMBOL TABLE OUTPUT (COLUMNAR) /*CODE TO GENERATE DDT COMPATIBLE* /**SYMBOL TABLE--SUBSTITUTED WITH* /**ONCE ONLY CODE IF NEEDED******* IFZERO HASH< SYMPRT, 0 ISZ EDITPG /NEW PAGE DCA THISPG JMS I [FORMFD TAD SMIN67 /DCA I SYMPR6-1 DCA SYMPR7 /JMS SYMPR9+6 SYMPR8, DCA SYMPR2 /TAD [377 //RUBOUT CLA CMA /JMS I OERROR DCA THISTG /CLA CMA TAD SYMPR2 /DCA THISTG CMA /TAD [215 //CARRIAGE RETURN DCA SYMPR3 /JMS I OERROR SYMPR5, ISZ SYMPR3 /JMS SYMPPP JMP SYMPR4 /JMP SYMPR9-1 TAD [-4 /JMP SYMPR6+2 DCA SYMPR3 /HSWIT1 SYMPR6, JMS SYMPPP /204 //EOT JMP SYMPRB SYMPR1, TAD [1777 AND TAG1 /OUTPUT TAG JMS I SDIV45 TAD TAG2 JMS I SDIV45 TAD TAG3 JMS I SDIV45 TAD [240 JMS I OERROR /OUTPUT SPACE TAD VALUE2 JMS OCTPRT /OUTPUT OCTAL VALUE ISZ SYMPR3 /JMP SYMPR5-2 JMP SYMPR0 /TAD SYMPR6 SYMPR9, TAD [215 /JMS I OERROR /CARRIAGE RETURN JMS I OERROR /TAD [377 //RUBOUT SYMPRB, ISZ SYMPR7 /JMS I OERROR JMP SYMPRA /JMS SYMPR9+6 HSWIT2, JMS I [FORMFD /DCA LINCNT /0 IF NOT /H TAD SMIN67 /JMP I SYMPRT //--RETURN-- DCA SYMPR7 /0 TAD SYMOFS /TAD [-200 SYMPRA, IAC /DCA SYMPR2 TAD SYMPR2 /TAD [200 //LEADER-TRAILER JMP SYMPR8 /JMS I OERROR SYMPR4, JMS SYMPPP /ISZ SYMPR2 JMP I SYMPRT /JMP SYMPR4-2 /--RETURN-- JMP SYMPR5 /JMP I SYMPR9+6 SDIV45, DIV45 SMIN67, 1-LNPRPG SYMPR0, TAD SMIN67 DCA SYMPPB JMS SYMPPP /SKIP 67(8) SYMBOLS JMP SYMPR9 ISZ SYMPPB JMP .-3 JMS I [ERROR1 JMS I [ERROR1 JMS I [ERROR1 JMP SYMPR1 /GO PRINT THE 67TH(8) SYMBOL SYMPR2= LINKSW SYMPR3= UNDFSW SYMPR7= ALPHAI SYMPPB= CHKSUM SYMPPP, 0 ISZ THISTG SYMOFS, 245 TAD THISTG CLL CIA TAD HIGHTG SNL CLA JMP I SYMPPP /--RETURN-- JMS I [FINDTG AC4000 AND TAG1 TAD TAG3 SPA SZL CLA JMP SYMPPP+1 ISZ SYMPPP JMP I SYMPPP /--RETURN-- /SYMNCL, -4 /DEFAULT IN LIU OF =N OPTION /SYMOFS, 245 /OFFSET TO FIRST SYM ON NEXT PAGE > 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 <? JMP IFTST2 /YES JMS ICMESG /PRINT IC MESSAGE AND GET NEXT CHAR IFTST9, JMS I [SPNOR /IGNORE SPACES JMP IFTST3 /TRY AGAIN IFTST2, JMS I [GETC /GET NEXT CHARACTER TAD CONDSW CIA DCA CONDTM /SET NUMBER OF NESTED CONDITIONALS CLA CMA /DECREMENT NUMBER OF NESTED CONDITIONALS TAD CONDSW DCA CONDSW TAD VALUE IFTST1, HLT /SZA CLA OR SNA CLA JMP I (MAIN /--EXIT TO MAIN-- IFTST5, TAD CONDSW /DONE WITH ALL CONDITIONALS IN NEST? TAD CONDTM SMA CLA JMP I (MAIN /YES --EXIT TO MAIN-- TAD CHAR TAD (-"< /NO - GET NEXT CHARACTER SNA /IS IT <? JMP IFTST6 /YES - HANDLE NEXT CONDITIONAL TAD ("<-"> /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 <OVLERR,__ERROR__> 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/uni/CUSPS/PIP.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 | /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 <OS78=1> /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 <ERROR!> /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 /<EMPTY>/ 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 <DIRMSG> 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/uni/CUSPS/PIP10.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 | /2 OS8 PIP10 - PDP-10 CONVERSION PROGRAM V3A / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / DTRB=6772 DTLB=6774 DTXA=6764 DTCA=6762 DTRA=6761 DTSF=6771 /WRITTEN BY MARK BRAMHALL 1970 /MODIFIED FOR TD8E BY R. LARY 1973 /DATE 75 PATCH ADDED BY S.R. AFTER 1/5/75 / / 12-DEC-2018 LHN - added DSN date patch 21.24.1 M dated / June-July 1979 (not the one dated / Dec 78/Jan 79) / /PIP10 IS A PIP FOR OS8 THAT HANDLES PDP-10 DECTAPES / /COMMAND DECODER RULES: / /*OUTPUT_INPUT,INPUT,... / /OUTPUT IS: / DEV:FILE.EXT[NN] / DEFAULT DEVICE IS DSK: / [NN] IGNORED IF PDP-10 OUTPUT / IF /L OR /F DEFAULT OUTPUT IS TTY: / /INPUT IS: / DEV:FILE.EXT / DEFAULT DEVICE IS DSK: / FOLLOWING DEFAULT DEVICES ARE THE PRECEEDING DEVICE / UP TO NINE (9) INPUT FILES / /OPTIONS ARE: / /L IS LIST DIRECTORY (ONLY VALID IF PDP-10 INPUT) / /F IS SHORT FORM DIRECTORY (ONLY PDP-10 INPUT) / /Z IS ZERO DIRECTORY BEFORE TRANSFER (ONLY IF PDP-10 OUTPUT) / /D IS DELETE OLD OUTPUT FILE BEFORE TRANSFER / /B IS BINARY MODE TRANSFER (I.E. 8 BITS PER 36 BITS) / /I IS IMAGE MODE TRANSFER (I.E. 3 12 BITS PER 36 BITS) / /P IS PRESERVE LINE NUMBERS (DEFAULT IS TO DELETE THEM) / MAINTENACE RELEASE FIXES: /1. DATE 75 STUFF /2. TD8E RELIABILITY IMPROVEMENTS /3. ANSI DATE OUTPUT FORMAT /4. INCORPORATED PATCH BY DAVID HEMBLEN [UNITED AIRCRAFT / RESEARCH LABORATORIES] TO ALLOW WRITING PDP-6 / DECTAPES ON A TD8E. /COMMAND DECODER SETS UP: / /AT "MOUTPU" THE LIST-- / LLL LLL LLD DDD OR UUU 100 000 000 / NAME (TRIMMED) NAME (EXCESS 40) / NAME NAME / NAME NAME / EXTENSION EXTENSION / 0 EXTENSION / / OS8 FILE OR PDP-10 FILE / /WHERE L IS LENGTH (8 BITS), D IS DEVICE (4 BITS), U IS UNIT (3 BITS) / /AT "MINPUT" THE LIST-- / LLL LLL LLD DDD OR UUU 100 000 000 / START BLOCK ANY BLOCK / / OS8 FILE OR PDP-10 FILE / /THE LIST ENDS WITH A ZERO (0) WORD / /AT "MPARAM" THE BLOCK-- / ABC DEF GHI JKL / MNO PQR STU VWX / YZ0 123 456 789 / /WHICH ARE THE OPTION CHARACTERS / /THE = CONSTRUCTION IS NOT IMPLEMENTED /DEFINITIONS VERSION= 3 /VERSION NUMBER SUBVER= 02 /PATCH LEVEL /LOCATED AT "VERLOC" AS 60+VERSION^100+SUBVER DIRECT=7000 /PDP-10 DIRECTORY BUFFER (FIELD 1) IBUF10=3000 /PDP-10 INPUT BUFFER (FIELD 1) INBUF=3000 /OS8 INPUT BUFFER (FIELD 1) OBUF10=5000 /PDP-10 OUTPUT BUFFER (FIELD 1) OUBUF=5000 /OS8 OUTPUT BUFFER (FIELD 1) OUDEVH=7200 /OUTPUT DEVICE (FIELD 0) INDEVH=6600 /INPUT DEVICE (FIELD 0) INCTL=1010 /INPUT CONTROL OUCTL=5010 /OUTPUT CONTROL INRECS=4 /INPUT RECORDS MDATE=7666 /MONITOR'S DATE (FIELD 1) MINPUT=7617 /INPUT LIST (FIELD 1) MOUTPU=7600 /OUTPUT LIST (FIELD 1) MPARAM=7643 /PARAMETER LIST (FIELD 1) JSBITS=7746 /0S8 JOB STATUS BITS DCB=7760 /DEVICE CONTROL BLOCK (FIELD 1) PTP=20 /DCB VALUE OF THE PAPER TAPE PUNCH /PAGE ZERO AND POINTERS *10 INDEX0, 0 /AUTO-INDEX REGISTERS INDEX1, 0 INDEX2, 0 INDEX3, 0 INDEX4, 0 INDEX5, 0 INDEX6, 0 IXR, 0 /INPUT LIST INDEX REGISTER *20 UNIT10, 0 /CURRENT PDP-10 UNIT (U400) POINT, 0 /GENERAL POINTER CNTR, 0 /GENERAL COUNTER TEMP1, 0 /TEMPORARIES TEMP2, 0 TEMP3, 0 TEMP4, 0 TEMP5, 0 TEMP6, 0 CHARNI, 0 /CHARACTER INPUT NUMBER CHARNO, 0 /CHARACTER OUTPUT NUMBER OUNIT, 0 /OUTPUT UNIT IUNIT, 0 /INPUT UNIT IBLOCK, 0 /INPUT BLOCK OBLOCK, 0 /OUTPUT BLOCK INPUT, 0 /INPUT ROUTINE POINTER OUTPUT, 0 /OUTPUT ROUTINE POINTER IPOINT, 0 /INPUT POINTER OPOINT, 0 /OUTPUT POINTER SAVELN, 0 /OPTION /P SWITCH MODE, 0 /OPTION /I AND /B SWITCH WORDS, 0 /WORDS LEFT COUNTER DATE, 0 /TODAY'S DATE FREEP, 0 /POINT TO FREE SPOT PRINT0, 0 /PRINT ROUTINE TEMPORARIES PRINT1, 0 PRINT2, 0 PRINT3, 0 PRINTC, 0 /240 FOR LEADING SPACES RBFLAG, 0 /RUBOUT FLAG CDDEVF, 0 /DEFAULT DEVICE NAME 0 CDNAME, 0 /FILE NAME 0 0 CDEXT, 0 /FILE EXTENSION 0 0 /FILLER WORD PERSW, 0 /PERIOD SWITCH DEVSW, 0 /DEVICE SWITCH CDDEV, 0 /DEVICE 0 INSEG, 0 /PDP-10 UNIT WITH DIRECTORY IN CORE PDP10D, ZBLOCK 10 /LIST OF KNOWN PDP-10 UNITS CDCNT, 0 /INPUT LIST COUNTER CDI04, 0 /POINTER SAVE XDSK, TEXT /DSK/ /DEFAULT DEVICE DSK: OCHARY, 0 /TEMPORARY DVTYPE, 0 /DEVICE TYPE HOLDER TDUNIT, 0 /0 OR 4000 TAPFUN, 0 /DECTAPE FUNCTION DATE75, 0 /1 MEANS HAD H.O. BIT ON XDATE, 0 /POINTS TO EXTRA DATE BIT HIDATE, 0 /HIGH-ORDER BIT OF TODAY'S DATE / KLUDGE FOR DATE-75 BUG: / ONLY CONSIDER 1 MORE BIT OF PRECISION / INSTEAD OF ALL 3 EXTRA BITS / SINCE OS/8 DATE WILL RUN OUT BEFORE / THAT FAILS PAGE JMP I (PIP10 /NORMAL ENTRY JMS ERROR /PIP10 CANNOT BE CHAINED TO ERMES0-1 /ERROR ROUTINES IOERR, JMS ERROR /I/O ERROR ERMES1-1 NOROOM, JMS ERROR /NO ROOM IN TAPE OR DIRECTORY ERMES2-1 NOOFIL, JMS ERROR /NO SUCH DEVICE ERMES3-1 FNOTFD, JMS ERROR /FILE NOT FOUND ERMES9-1 NOT10F, JMS ERROR /NOT A PDP-10 FILE ERMES4-1 ERDELF, JMS ERROR /ERROR DELETING A FILE ERMES5-1 NOTPSF, JMS ERROR /NOT A OS8 FILE ERMES6-1 NOOOFL, JMS ERROR /ERROR OPENING THE OUTPUT FILE ERMES7-1 SYNTAX, JMS ERROR /SYNTAX ERROR ERMES8-1 ERROR, 0 /ERROR ROUTINE CLA CDF TAD I ERROR DCA INDEX0 /POINT TO MESSAG-1 TAD (ERROR3 DCA OUTPUT /SET TTY: OUTPUT JMS ERROR4 /PRINT THE STRING JMP I (PIPCD /AND BACK TO NORMAL ERROR4, 0 /PRINT THE STRING POINTED BY INDEX0 TAD I INDEX0 DCA TEMP1 /SAVE WORD TAD TEMP1 RTR RTR RTR JMS ERROR2 /BREAK IT DOWN TAD TEMP1 JMS ERROR2 JMP ERROR4+1 /LOOP ERROR2, 0 AND [77 /USE 6 BITS SNA JMP I ERROR4 /END DCA TEMP2 TAD TEMP2 AND (40 SNA CLA TAD (100 TAD [200 /MAKE A CHAR TAD TEMP2 TAD (-337 /_ IS SPECIAL SNA TAD (215-337 TAD (337 JMS ERROR7 /PUT IT JMP I ERROR2 ERROR7, 0 DCA TEMP2 TAD TEMP2 JMS I OUTPUT TAD TEMP2 TAD (-215 SZA CLA JMP I ERROR7 TAD (212 JMP ERROR7+1 ERROR3, 0 TLS TSF JMP .-1 CLA JMP I ERROR3 /PRINT ROUTINE PRINT, 0 DCA PRINT0 PRINT7, DCA PRINTC /SET SWITCH TAD (PRINTL DCA PRINT1 CLL CLA CMA RTL DCA PRINT3 PRINT4, DCA PRINT2 JMP .+3 DCA PRINT0 ISZ PRINT2 TAD PRINT0 TAD I PRINT1 SMA JMP .-5 CLA ISZ PRINT1 TAD PRINT2 SZA JMP PRINT5 /IT IS NON-ZERO TAD PRINTC SZA JMS I OUTPUT /PRINT LEADING SPACE IF DESIRED JMP PRINT6 PRINT5, TAD ("0 JMS I OUTPUT CLL CLA CML RAR PRINT6, ISZ PRINT3 JMP PRINT4 TAD PRINT0 TAD ("0 JMS I OUTPUT JMP I PRINT PAGE /PDP-10 DECTAPE SERVICE ROUTINE / /CALL: / JMS READT /READ PDP-10 DECTAPE / BUFFER /BUFFER ADDRESS - FIELD 1 / BLOCK /BLOCK NUMBER / / JMS WRITET /WRITE PDP-10 DECTAPE / BUFFER /BUFFER ADDRESS - FIELD 1 / BLOCK /BLOCK NUMBER / /THE UNIT IS IN "UNIT10" TCON2, 2 /MUST BE AT BEGINNING OF PAGE! WRITET, 0 /WRITE PDP-10 DECTAPE CDF /BE SURE OF FIELD 0 TAD WRITET STL JMS I (TDIOCK /CHECK FOR TD IO TAD I WRITET /GET BUFFER ADDRESS DCA TBUF /AND SAVE IT JMS RWTEST /TEST DIRECTION WRITE2, JMS I (FLIP /REVERSE - FLIP BUFFER NOW TAD (50 WRITE1, DCA TAPFUN /SET FUNCTION (30=READ, 50=WRITE) DTLB /SEARCH INTO FIELD 0 TAD (TBLK DCA I TCA /TAPE BLOCK INTO "TBLK" TERR, RTL /ERROR BIT IS 0 INITIALLY RAL /SHIFT END ZONE BIT INTO LINK CML CLA /CLEAR REST OF THE JUNK TAD [200 /'GO' BIT TSTART, SNL /SKIP IF NO REVERSE DIRECTION TAD [400 /'REVERSE' BIT DTXA /START DRIVE GOING TLOOP, JMS I (DTWAIT TOUT, SPA /ERROR? JMP TERR /YES - CHECK IT DTRA /CHECK DIRECTION RTL RTL /DIRECTION BIT INTO LINK TMOD1, SZL CLA /'SNL CLA' IF REVERSE MODE TMOD4, TAD TCON2 /'CLL CLA CMA RAL' IF REVERSE MODE TAD TBLK /GET BLOCK FOUND CMA TAD I WRITET /GET BLOCK DESIRED CMA SZA CLA /SKIP IF FOUND THE BLOCK JMP TSTART /NOT FOUND - GO AGAIN TMOD2, SZL CLA /'SNL CLA' IF REVERSE MODE JMP TSTART+1 /FOUND BUT WRONG DIRECTION - REVERSE IT CLA CMA TAD TBUF /GET BUFFER ADDRESS-1 DCA I TCA /SET ADDRESS TAD (10 DTLB /SET FIELD 1 BUFFER TAD TAPFUN DTXA /SET READ OR WRITE TAD TM600 DCA I TWC /SET WORD COUNT OF 600 OCTAL WORDS DTSF /FLAG? JMP .-1 /NO - WAIT DTRB /CHECK FOR ERRORS SPA CLA JMP I (IOERR /ERROR!! TAD [200 DTXA /STOP THE DRIVE TMOD3, JMS I (FLIP /POSSIBLE FLIP AFTER READ ISZ WRITET JMP I WRITET /EXIT TCA, 7755 /DECTAPE CURRENT ADDRESS TWC, 7754 /DECTAPE WORD COUNT TBLK, 0 /SET TO BLOCK FOUND IN SEARCH TBUF, 0 /HOLDS BUFFER ADDRESS /READ ENTRY POINT READT, 0 /PDP-10 DECTAPE READ CDF /INSURE FIELD 0 TAD READT CLL JMS I (TDIOCK /CHECK FOR TD IO TAD I READT /GET BUFFER ADDRESS DCA TBUF /AND SAVE IT TAD READT DCA WRITET /MOVE RETURN ADDRESS JMS RWTEST /CHECK DIRECTION NOP /NO INITIAL FLIP IF REVERSE TAD (30 /READ FUNCTION JMP WRITE1 /GO DO REST OF THE ROUTINE RWTEST, 0 /CHECK DIRECTION TO READ/WRITE AND SEARCH ISZ WRITET JMS I (GOLDBK /GET OLD BLOCK NUMBER (NEGATIVE) TAD I WRITET /GET DESIRED BLOCK DCA TBLK /SAVE FOR FUTURE USE SZL CLA TAD (10 /FORWARD - SZL CLA TAD TMOD6 /REVERSE - SNL CLA DCA TMOD1 /SET UP FOR DIRECTION TAD TMOD1 DCA TMOD2 SNL CLA TAD WRITE2 /REVERSE - FLIP BUFFER AFTER DCA TMOD3 /FORWARD - NO BUFFER FLIP TMOD6, SNL CLA TAD (7344-1200 /REVERSE - CLL CLA CMA RAL TAD TMOD5 /FORWARD - TAD TCON2 DCA TMOD4 /X0002 OR 17776 SZL CLA ISZ RWTEST /FORWARD - 2ND EXIT IAC SNL CIA /REVERSE DIRECTION TAD I WRITET SPA TM600, CLA /NO LOWER THAN 0 DCA I TAPFUN /SET NEW LAST SERVICED BLOCK TAD TBLK /REMEMBER SAVING THIS? CLL SMA SZA /<0 AND 0 SKIP AND HAVE LINK=0 CLL CML CIA />0 BECOMES <0 AND HAS LINK=1 TMOD5, TAD TCON2 CLA RTR /LINK HAS SEARCH DIRECTION RTR TAD (10 /ADD 'SEARCH' BIT DTCA DTXA /LOAD SEARCH AND DIRECTION TAD UNIT10 /GET UNIT DTXA /ADD UNIT (ALSO FLIPS DIRECTION) JMP I RWTEST /EXIT PAGE /"OLDTBL" IS LIST OF LAST SERVICED BLOCKS OLDTBL, 0;0;0;0;0;0;0;0 /FLIP THE BUFFER ROUTINE FLIP, 0 /FLIP A 600 WORD BUFFER (FIELD 1) TAD I (TBUF /BUFFER START DCA FLIP1 /SET START TAD (577 TAD I (TBUF DCA FLIP2 /SET END (END=START+577) TAD (-300 DCA FLIP3 /SET COUNT (600/2=300) CDF 10 /BUFFER IS IN FIELD 1 FLIP6, TAD I FLIP1 /GET START JMS FLIP4 /FLIP IT DCA FLIP5 /SAVE TEMPORARILY TAD I FLIP2 /GET END JMS FLIP4 /FLIP IT DCA I FLIP1 /PUT END INTO START TAD FLIP5 DCA I FLIP2 /PUT START INTO END ISZ FLIP1 /BUMP POINTERS CLA CMA TAD FLIP2 DCA FLIP2 ISZ FLIP3 /DONE? JMP FLIP6 /NO - LOOP CDF /BACK TO FIELD 0 JMP I FLIP /EXIT FLIP1, 0 /START POINTER FLIP2, 0 /END POINTER FLIP3, 0 /COUNTER FLIP5, 0 /TEMPORARY FLIP7, 0 /FLIPPING TEMPORARIES FLIP8, 0 /" " FLIP4, 0 /FLIP A CELL DCA FLIP7 /SAVE IT TAD FLIP7 RTL RTL AND (7 /GET ...1 DCA FLIP8 /ACCUMULATE RESULT TAD FLIP7 RTR RAR AND (70 /GET ..2. TAD FLIP8 DCA FLIP8 /BUILD RESULT TAD FLIP7 AND (70 CLL RTL RAL /GET .3.. TAD FLIP8 DCA FLIP8 /BUILD RESULT TAD FLIP7 AND (7 CLL RTR RTR /GET 4... TAD FLIP8 CMA /GET NOT 4321 JMP I FLIP4 /EXIT /TD8E I/O ROUTINE - CALLS STANDARD ROUTINE TDIOCK, 0 DCA TDRET /SAVE RETURN ADDR RAR DCA TDFUN /SAVE READ/WRITE JMS I (GET10D /GET TYPE OF DECTAPE TAD (-2 SZA CLA JMP I TDIOCK /TC08 - CONTINUE TAD I TDRET DCA TDBUF /SAVE BUF ADDR ISZ TDRET JMS GOLDBK /GET OLD BLOCK # TAD I TDRET CLA RAL /GET DIRECTION TAD (110 /ONE BLOCK, FIELD 1 TAD TDFUN DCA TDFUN /SAVE FINAL FUNCTION WORD JMS I (TDUSET /SET UP HANDLER TAD TDUNIT SPA CLA TAD (DTA1-DTA0 TAD (DTA0 DCA TDIOCK /SET UP HANDLER ENTRY PTR TAD I TDRET DCA I TAPFUN TAD I TAPFUN DCA TDBLK JMS I TDIOCK TDFUN, 0 TDBUF, 0 TDBLK, 0 JMP I (IOERR ISZ TDRET JMP I TDRET TDRET, 0 GOLDBK, 0 TAD UNIT10 /GET THE UNIT WE NEED CLL RTL RTL /SHIFT INTO BITS 9-11 TAD (OLDTBL DCA TAPFUN /POINT TO THIS UNIT'S POSITION TAD I TAPFUN /GET LAST SERVICED BLOCK CLL CIA JMP I GOLDBK PAGE /GET A LINE ROUTINE GLINE, 0 /GET A LINE TAD ["* JMS I [ERROR3 /ANNOUNCE US WITH A * DCA RBFLAG /RESET RUBOUT FLAG TAD [LINBUF-1 DCA IXR /POINT TO THE BUFFER CHLOOP, KSF JMP CHLOOP /WAIT FOR TTY: TAD [200 KRS /READ TTY: DCA TEMP1 KCC TAD [SPADR-1 DCA INDEX0 /SET LIST SEARCH TAD I INDEX0 SNA JMP .+6 /END OF LIST TAD TEMP1 SNA CLA JMP I INDEX0 /FOUND SO JUMP ISZ INDEX0 JMP .-7 /LOOP JMS PRNT /PRINT IT CINSRT, TAD TEMP1 DCA I IXR /STORE THE CHARACTER TAD IXR TAD (-LINBUF-100 SZA CLA JMP CHLOOP /GET ANOTHER CHARACTER JMS CRCR JMP I (SYNTAX /ERROR CARRET, JMS CRCR CLFINI, DCA I IXR /SET END DCA I IXR JMP I GLINE /EXIT SPADR, -225;JMP CTRLU -215;JMP CARRET -377;JMP RUBOUT -375;JMP ALTMOD -376;JMP ALTMOD -233;JMP ALTMOD -200;JMP CHLOOP -217;JMP CHLOOP -337;JMP BAKARR -212;JMP LFEED -203;JMP CTRLC 0 BAKARR, JMS PRNT /"_" TAD ["< JMP CINSRT+1 /USE "<" INSTEAD CTRLC, CTRLU, TAD ["^ JMS I [ERROR3 /CONTROL CHARACTERS TAD TEMP1 TAD [100 CLRLIN, JMS I [ERROR3 JMS CRCR TAD I INDEX0 SZA CLA JMP GLINE+1 /NOT "^C" TSF JMP .-1 JMP I (7605 /TO MONITOR CRCR, 0 TAD [215 DCA TEMP1 JMS PRNT TAD [212 JMS I [ERROR3 /PRINT CR-LF JMP I CRCR ALTMOD, TAD ["$ DCA TEMP1 /ALTMODE IS "$" JMS PRNT JMP CLFINI /ENDS THE LINE RUBOUT, TAD IXR TAD (1-LINBUF SNA CLA JMP RBSPCL /SPECIAL TREATMENT TAD ("\ ISZ RBFLAG JMS I [ERROR3 /PRINT \ CLA CMA DCA RBFLAG /SET FLAG TAD IXR DCA TEMP2 TAD I TEMP2 JMS I [ERROR3 /PRINT RUBED CHAR LBCKUP, CLA CMA TAD IXR JMP CHLOOP-1 /GO GET ANOTHER RBSPCL, ISZ RBFLAG JMP CLRLIN+1 /NOT INTO RUBOUTS TAD ("\ JMP CLRLIN PRNT, 0 ISZ RBFLAG JMP .+3 TAD ("\ JMS I [ERROR3 /END OF RUBOUTS DCA RBFLAG TAD TEMP1 JMS I [ERROR3 /PRINT CHAR JMP I PRNT LFEED, JMS CRCR DCA I IXR /SET END TAD [LINBUF-1 DCA IXR TAD ["* JMS I [ERROR3 TAD I IXR /PRINT THE LINE SNA JMP LBCKUP JMP .-4 PAGE /FIND A SLOT ROUTINE /SLOT NUMBERS BETWEEN 0 AND 1101 /RETURN WITH A 5 BIT NUMBER (1 TO 26 OCTAL) / /CALL: / JMS FINDSL /FIND A SLOT / SLOT# /SLOT NUMBER / (AC) /VALUE OF SLOT RETURNED / /SLOT NUMBER OF 0 RETURNS 7777 FINDSL, 0 /FIND A SLOT CLA CMA TAD I FINDSL /GET SLOT NUMBER-1 ISZ FINDSL SPA /WAS IT 0? JMP FINDSA /YES JMS DIV7 /NO - DIVIDE BY 7 TAD (JMP I FINDS0+7 DCA DIV1 /USE REMAINDER FOR JUMPING CDF 10 /BUFFER IS IN FIELD 1 DIV1, HLT /TEMPORARY AND JUMP CELL FINDSA, CLA CMA JMP I FINDSL /EXIT WITH 7777 FOR SLOT NUMBER 0 FINDS0, FINDS1 /JUMP TABLE FINDS2 FINDS3 FINDS4 FINDS5 FINDS6 FINDS7 /DIVIDE BY 7 ROUTINE DIV7, 0 /DIVIDE BY 7 DCA DIV1 /SAVE IT TAD (DIRECT DCA POINT /POINT TO DIRECTORY TAD DIV1 DIV3, TAD (-7 /SUBTRACT 7'S SPA JMP I DIV7 /EXIT WITH REMAINDER ISZ POINT /BUMP POINTER BY 3 ISZ POINT ISZ POINT JMP DIV3 /AND LOOP /FIND SLOT ROUTINE #1 /USE WORD 1 BITS 0-4 FINDS1, TAD I POINT /GET CELL RTL RTL RTL /GET FIRST 5 BITS FINDS8, AND [37 /ONLY 5 BITS CDF /BACK TO FIELD 0 JMP I FINDSL /AND EXIT WITH VALUE IN AC /FIND SLOT ROUTINE #2 /USE WORD 1 BITS 5-9 FINDS2, TAD I POINT RTR /USE BITS 5-9 JMP FINDS8 /FIND SLOT ROUTINE #3 /USE WORD 1 BITS 10-11 AND WORD 2 BITS 0-2 FINDS3, TAD I POINT AND [3 /USE BITS 10-11 OF 1ST WORD CLL RTL RAL /SHIFT TO BITS 7-8 DCA DIV1 /SAVE IT ISZ POINT /NEXT WORD TAD I POINT CLL RTL FINDS9, RTL /GET INTO BITS 8-11 AND [17 /GET ONLY BITS 8-11 TAD DIV1 /ADD OTHER BITS JMP FINDS8 /FIND SLOT ROUTINE #4 /USE WORD 2 BITS 3-7 FINDS4, ISZ POINT /USE 2ND WORD TAD I POINT RTR /USE BITS 3-7 JMP FINDS2+1 /FIND SLOT ROUTINE #5 /USE WORD 2 BITS 8-11 AND WORD 3 BIT 0 FINDS5, ISZ POINT /USE 2ND WORD TAD I POINT AND [17 CLL RAL /GET BITS 7-10 DCA DIV1 /AND SAVE THEM ISZ POINT /NEXT WORD CLL CLA CML RAR AND I POINT /GET BIT 0 JMP FINDS9 /FIND SLOT ROUTINE #6 /USE WORD 2 BITS 1-5 FINDS6, ISZ POINT ISZ POINT /USE 3RD WORD TAD I POINT RAL JMP FINDS1+1 /FIND SLOT ROUTINE #7 /USE WORD 3 BITS 6-10 FINDS7, ISZ POINT ISZ POINT /USE 3RD WORD TAD I POINT RAR /GET RID OF LAST BIT JMP FINDS8 /DELETE A PDP-10 ENTRY / /CALL: / (AC) /POINT TO NAME-1 (FIELD 1) / JMS DELETE /DELETE A PDP-10 ENTRY / -NO- /NOT FOUND / -OK- /ENTRY DELETED DELETE, 0 /DELETE A PDP-10 ENTRY JMS I (FIND /TRY TO FIND IT FIRST JMP I DELETE /NOT FOUND ISZ DELETE /FOUND - 2ND EXIT DCA DELET1 /SAVE SLOT NUMBER CLA IAC DCA DELET2 /START AT SLOT 1 TAD (-1101 DCA DELET3 /DO 1101 SLOTS JMS FINDSL /FIND A SLOT DELET2, 0 /SLOT NUMBER CIA TAD DELET1 /IS IT ONE OF OURS? SZA CLA JMP DELET4 /NO TAD DELET2 /YES DCA .+2 /SET SLOT NUMBER AGAIN JMS I (FILLSL /FILL WITH A 0 0 0 /FILL WITH A 0 DELET4, ISZ DELET2 /NEXT SLOT ISZ DELET3 /MORE? JMP DELET2-1 /YES - LOOP CDF 10 /DIRECTORY IS IN FIELD 1 DCA I INDEX0 /REMEMBER "FIND" SETTING THIS UP? DCA I INDEX0 /REMOVE THE FILE NAME DCA I INDEX0 TAD INDEX0 TAD [77 DCA INDEX0 /POINT TO EXTENSION DCA I INDEX0 DCA I INDEX0 /REMOVE EXTENSION DCA I INDEX0 CDF JMP I DELETE /EXIT DELET1, 0 /HOLDS FOUND SLOT NUMBER DELET3, 0 /COUNTER PAGE /FILL A SLOT ROUTINE / /CALL: / JMS FILLSL /FILL A SLOT / SLOT# /SLOT NUMBER / VALUE /VALUE TO FILL SLOT WITH / /SLOT NUMBER 0 IS ILLEGAL! FILLSL, 0 /FILL A SLOT ROUTINE CLA CMA TAD I FILLSL /GET SLOT NUMBER-1 ISZ FILLSL JMS I (DIV7 /DIVIDE BY 7 TAD (JMP I FILLS0+7 DCA FILLS9 /USE REMAINDER FOR JUMPING TAD I FILLSL /GET VALUE ISZ FILLSL AND [37 /5 BIT VALUE ONLY CDF 10 /DIRECTORY IS IN FIELD 1 FILLS9, HLT /TEMPORARY AND JUMP CELL /JUMP TABLE FILLS0, FILLS1 FILLS2 FILLS3 FILLS4 FILLS5 FILLS6 FILLS7 FILLSA, 0 /TEMPORARY /FILL SLOT ROUTINE #1 /BITS 0-4 OF WORD 1 FILLS1, CLL RTR RTR /VALUE INTO BITS 0-4 RTR DCA FILLS9 /SAVE VALUE TAD I POINT AND [177 /AND OFF BITS 0-4 FILLS8, TAD FILLS9 /ADD IN VALUE DCA I POINT /SET NEW WORD CDF /BACK TO FIELD 0 JMP I FILLSL /EXIT /FILL SLOT ROUTINE #2 /BITS 5-9 OF WORD 1 FILLS2, CLL RTL /VALUE INTO BITS 5-9 DCA FILLS9 /SAVE VALUE TAD I POINT AND (7603 /AND OFF BITS 5-9 JMP FILLS8 /FILL SLOT ROUTINE #3 /BITS 10-11 OF WORD 1 AND BITS 0-2 OF WORD 2 FILLS3, DCA FILLS9 /SAVE VALUE TAD FILLS9 CLL RAR CLL RAR /GET BITS 10-11 CLL RAR DCA FILLSA /SAVE TAD I POINT AND (7774 /AND OFF BITS 10-11 TAD FILLSA /ADD IN BITS 10-11 DCA I POINT /SET NEW WORD ISZ POINT /GOTO WORD 2 TAD FILLS9 AND [7 /GET BITS 0-2 CLL RTR RTR /SHIFT THEM DCA FILLS9 /SAVE VALUE TAD I POINT AND (777 /AND OFF BITS 0-2 JMP FILLS8 /FILL SLOT ROUTINE #4 /BITS 3-7 OF WORD 2 FILLS4, CLL RTL RTL /SHIFT INTO POSITION DCA FILLS9 /AND SAVE ISZ POINT /USE WORD 2 TAD I POINT AND (7017 /AND OFF BITS 3-7 JMP FILLS8 /FILL SLOT ROUTINE #5 /BITS 8-11 OF WORD 2 AND BIT 0 OF WORD 3 FILLS5, DCA FILLS9 TAD FILLS9 /GET VALUE CLL RAR /GET BITS 8-11 DCA FILLSA /AND SAVE ISZ POINT /USE WORD 2 FIRST TAD I POINT AND [7760 /AND OFF BITS 8-11 TAD FILLSA /ADD IN THOSE BITS DCA I POINT /SET NEW WORD 2 ISZ POINT /NOW WORD 3 CLA IAC AND FILLS9 /GET BIT 0 CLL RTR /AND SHIFT INTO POSITION DCA FILLS9 /AND SAVE IT CLL CLA CMA RAR AND I POINT /AND OFF BIT 0 JMP FILLS8 /FILL SLOT ROUTINE #6 /BITS 1-5 OF WORD 3 FILLS6, CLL RTL RTL /SHIFT INTO POSITION RTL DCA FILLS9 /AND SAVE ISZ POINT ISZ POINT /USE WORD 3 TAD I POINT AND (4077 /AND OFF BITS 1-5 JMP FILLS8 /FILL SLOT ROUTINE #7 /BITS 6-10 OF WORD 3 /BIT 11 OF WORD 3 A 0 FILLS7, CLL RAL /SHIFT INTO POSITION DCA FILLS9 /AND SAVE ISZ POINT ISZ POINT /USE WORD 3 TAD I POINT AND [7700 /AND OFF BITS 6-11 JMP FILLS8 FIX75, 0 /DF 10 CDF /SET H.O. DATE WORD OF FILE TAD I (SLOTNO /ENTRY NO. OF FILE CLL RAL /*3 TAD I (SLOTNO /SINCE 1 -10 WORD= 3 -8 WORDS TAD (DIRECT-1 /POINT TO HIGH ORDER BIT OF DATE DCA FIXPTR /V3C CDF 10 STA CLL RAL /OTHER STUFF IS VERY IMPORTANT AND I FIXPTR /SO KEEP IT TAD HIDATE /OR IN THIS BIT DCA I FIXPTR /AND WRITE IT BACK JMP I FIX75 FIXPTR, 0 /POINTS TO WORD CONTAINING H.O. DATE PAT11, 0 //DSN 21.24.1 M TAD I PAT12 // AND [0200 // CLL RTR // RTR // DCA 116 // TAD TEMP1 // AND [0007 // JMP I PAT11 // PAT12, 7777 // PAGE /GET NEXT SLOT ROUTINE /GOES BY 5'S EITHER FORWARD OR BACKWARD / /CALL: / (AC) /CURRENT BLOCK NUMBER / JMS NEXTSL /GET NEXT SLOT / (AC) /NEXT BLOCK NUMBER / /GOES TO "NOROOM" IF DIRECTORY FULL NEXTSL, 0 /GET NEXT SLOT TAD NEXTDI /ADD IN DIRECTION FACTOR SPA JMP NEXTS2 /<0 MEANS REVERSE DIRECTION TAD [-1102 SMA JMP NEXTS2 />1101 MEANS REVERSE DIRECTION TAD (1102 DCA NEXTS1 /SET NEW BLOCK NUMBER JMS I (FINDSL /IS THIS SLOT FREE? NEXTS1, 0 /BLOCK NUMBER SZA CLA JMP NEXTS3 /NO - NOT FREE TAD NEXTS1 /FREE DCA NEXTS7+1 /SET BLOCK AGAIN NEXTS7, JMS I (FILLSL /FILL THIS SLOT THEN 0 /SLOT TO FILL SLOTNO, 0 /VALUE TO FILL WITH TAD NEXTDI SMA CLA /MAKE SURE DIRECTION IS -4 OR 4 TAD (10 TAD (-4 DCA NEXTDI TAD NEXTS7+1 /GET NEW BLOCK JMP I NEXTSL /EXIT NEXTS2, CLA /REVERSE DIRECTION TAD NEXTDI SMA CLA /SET 0 OR 1101 TAD (1101 DCA NEXTS1 /INTO BLOCK NUMBER TAD NEXTDI CIA /REVERSE DIRECTION JMP NEXTS3+1 /GO PRETEND WE FOUND A FULL SLOT NEXTS3, TAD NEXTDI SMA CLA /MAKE DIRECTION -1 OR 1 CLL CLA CMA RAL CMA DCA NEXTDI /DIRECTION IS -1 OR 1 TAD [-1102 DCA NEXTS4 /CHECK 1102 BLOCKS TAD NEXTS1 DCA NEXTS5 /SET START BLOCK JMS I (FINDSL /CHECK A SLOT NEXTS5, 0 /SLOT TO CHECK SNA CLA JMP NEXTS6 /FOUND A FREE SLOT ISZ NEXTS4 /TRY MORE? SKP /YES JMP I (NOROOM /NO - OUT OF ROOM TAD NEXTS5 TAD NEXTDI /ADD DIRECTION TO SLOT SPA JMP NEXTS2 /<0 IS TOO FAR TAD [-1102 SMA JMP NEXTS2 />1101 IS TOO FAR TAD (1102 DCA NEXTS5 /SET NEW BLOCK JMP NEXTS5-1 /KEEP GOING NEXTS6, TAD NEXTS5 /GET FREE BLOCK JMP NEXTS7-1 /AND SET IT NEXTS4, 0 /COUNTER NEXTDI, 0 /DIRECTION (5, -5, 1, -1) /MORE PDP-10 OUTPUT /OUTPUT CHARACTER #3 - BITS 9-11 WORD 2 AND BITS 0-3 WORD 3 OCHAR3, TAD OCHARY CLL RTR RTR AND [7 TAD I OPOINT DCA I OPOINT ISZ OPOINT TAD OCHARY AND [17 CLL RTR RTR RAR JMP I (OCHARD MONTBL, "J;"A;"N "F;"E;"B "M;"A;"R "A;"P;"R "M;"A;"Y "J;"U;"N "J;"U;"L "A;"U;"G "S;"E;"P "O;"C;"T "N;"O;"V "D;"E;"C PAGE /PDP-10 CHARACTER OUTPUT ROUTINE / /CALL: / (AC) /CHARACTER / JMS OCHR10 /OUTPUT TO PDP-10 / -RETURN- /O.K. RETURN OCHR10, 0 /OUTPUT TO PDP-10 DCA OCHARY /SAVE CHAR TAD MODE /IMAGE MODE? SZA JMP OC10A1 /YES /I OR /B TAD OCHARY /NO - USE 7 BITS AND [177 OC10A2, DCA OCHARY OC10A3, TAD CHARNO /GET CHAR NUMBER TAD (JMP I OCHARX DCA OCHARZ /USE TO SET UP JUMP CDF 10 /BUFFER IS IN FIELD 1 OCHARZ, 0 /JUMP TO THE ROUTINE OC10A1, SMA CLA /BINARY? JMP OC10A3 /NO TAD OCHARY /YES AND [377 JMP OC10A2 OCHARX, OCHAR0 OCHAR1 OCHAR2 OCHAR3 OCHAR4 /OUTPUT CHARACTER #0 - BITS 0-6 WORD 1 OCHAR0, TAD I [OBUF10+2 AND [177 /GET COUNT TAD (-177 SZA CLA JMP OCHARA /STILL ROOM IN BUFFER CDF /NO ROOM IN BUFFER TAD OBLOCK JMS I (NEXTSL /GET THE NEXT BLOCK NUMBER DCA OCHARZ /AND SAVE IT CDF 10 /BACK TO FIELD 1 TAD OCHARZ AND [7700 CLL RTR RTR RTR /GET LINK POINTER DCA I [OBUF10 TAD OCHARZ AND [77 CLL RTL RTL RTL TAD I [OBUF10+1 DCA I [OBUF10+1 /AND SET POINTER TAD OUNIT DCA UNIT10 /SET OUR UNIT TAD OBLOCK DCA .+3 /AND OUR BLOCK JMS I (WRITET /WRITE PDP-10 DECTAPE OBUF10 0 /BLOCK NUMBER IS SET CDF 10 /BACK TO FIELD 1 DCA I [OBUF10 TAD I [OBUF10+1 AND [77 DCA I [OBUF10+1 /CLEAR POINTER TAD OCHARZ DCA OBLOCK /SET NEW BLOCK TAD I [OBUF10+2 AND [7400 DCA I [OBUF10+2 /ZERO COUNT TAD (OBUF10+3 DCA OPOINT /RESET POINTER OCHARA, ISZ I [OBUF10+2 /BUMP COUNT TAD MODE /IMAGE MODE? SNA JMP OCHARB /NO SMA CLA /BINARY? JMP OC10A4 /NO DCA I OPOINT /YES ISZ OPOINT DCA I OPOINT ISZ OPOINT TAD OCHARY DCA I OPOINT /SET 8 BITS ISZ OPOINT OCHARC, CDF /BACK TO FIELD 0 JMP I OCHR10 /EXIT OC10A5, ISZ OPOINT OC10A4, TAD OCHARY JMP OCHARD OCHARB, TAD OCHARY CLL RTL RTL RAL /USE BITS 0-6 OCHARD, DCA I OPOINT /SET IT ISZ CHARNO /BUMP CHARACTER NUMBER JMP OCHARC /OUTPUT CHARACTER #1 - BITS 7-11 WORD 1 AND BITS 0-1 WORD 2 OCHAR1, TAD MODE SZA CLA JMP OC10A5 TAD OCHARY CLL RAR /GET BITS 7-11 CLL RAR TAD I OPOINT DCA I OPOINT /SET WORD 1 ISZ OPOINT /NOW WORD 2 TAD OCHARY AND [3 CLL RTR RAR /GET BITS 0-1 JMP OCHARD /OUTPUT CHARACTER #2 - BITS 2-8 WORD 2 OCHAR2, TAD MODE SZA CLA JMP OC10A6 TAD OCHARY CLL RTL RAL /GET BITS 2-8 TAD I OPOINT JMP OCHARD /OUTPUT CHARACTER #4 - BITS 4-10 WORD 3 /BIT 11 WORD 3 IS 0 OCHAR4, TAD OCHARY CLL RAL /BITS 4-10 TAD I OPOINT OC10A7, DCA I OPOINT /SET WORD 3 ISZ OPOINT DCA CHARNO /RESET CHARACTER NUMBER JMP OCHARC OC10A6, ISZ OPOINT TAD OCHARY JMP OC10A7 PAGE /PDP-10 CHARACTER INPUT / /CALL: / JMS ICHR10 /PDP-10 INPUT / -EOF- /END OF FILE RETURN / (AC) /NORMAL RETURN - CHARACTER IN AC ICHR10, 0 /PCP-10 INPUT ROUTINE TAD CHARNI TAD (JMP I ICHARX DCA ICHARY /USE CHARACTER NUMBER TO FORM JUMP CDF 10 /BUFFER IS IN FIELD 1 ICHARY, 0 /TEMPORARY AND JUMP CELL ICHARX, ICHAR0 ICHAR1 ICHAR2 ICHAR3 ICHAR4 /INPUT CHARACTER #0 - BITS 0-6 WORD 1 ICHAR0, TAD WORDS /GET NUMBER OF WORD LEFT SZA CLA JMP ICHARA /STILL MORE WORDS LEFT TAD IBLOCK /GET NEXT BLOCK SNA JMP ICHARC+1 /NONE - EOF DCA .+5 /SET NEXT BLOCK TAD IUNIT DCA UNIT10 /SET OUR UNIT JMS I (READT /READ PDP-10 DECTAPE IBUF10 0 /OUR BLOCK IS SET CDF 10 /BACK TO FIELD 1 TAD I [IBUF10+2 AND [177 DCA WORDS /SET NUMBER OF WORDS TAD I [IBUF10+1 RTR RTR RTR AND [77 DCA IBLOCK /SET NEXT BLOCK TAD I [IBUF10 AND [77 CLL RTL RTL RTL TAD IBLOCK DCA IBLOCK /SET NEXT BLOCK TAD (IBUF10+3 DCA IPOINT /RESET POINTER JMP ICHAR0 ICHARA, CLA CMA TAD WORDS DCA WORDS /COUNT DOWM ON NUMBER OF WORDS TAD MODE /IMAGE MODE? SNA JMP ICHARB /NO SMA CLA JMP IC10A1 ISZ IPOINT /YES ISZ IPOINT TAD I IPOINT /GET WORD 3 ISZ IPOINT AND [377 /USE 8 BITS ICHARC, ISZ ICHR10 /2ND EXIT CDF /BACK TO FIELD 0 JMP I ICHR10 /EXIT ICHARB, TAD SAVELN /PRESERVE OPTION? SZA CLA JMP ICHARF /YES CLL CLA CML RTL /NO TAD IPOINT DCA ICHARY /POINT TO WORD 3 TAD I ICHARY CLL RAR SNL CLA JMP ICHARF /WORD O.K. ISZ IPOINT ISZ IPOINT /IGNORE THIS WORD ISZ IPOINT JMP ICHAR0 ICHARF, TAD I IPOINT RTR RTR /GET BITS 0-6 RAR ICHARD, ISZ CHARNI /BUMP COUNTER AND [177 /USE 7 BITS TAD [200 /ADD BIT 8 JMP ICHARC /INPUT CHARACTER #1 - BITS 7-11 WORD 1 AND BITS 0-1 WORD 2 ICHAR1, TAD MODE SZA CLA JMP IC10A1 TAD I IPOINT AND [37 CLL RTL /GET BITS 7-11 DCA ICHARY ISZ IPOINT /USE WORD 2 NOW TAD I IPOINT CLL RTL RAL AND [3 /GET BITS 0-1 ICHARE, TAD ICHARY /ADD IN OTHER BITS JMP ICHARD /INPUT CHARACTER #2 - BITS 2-8 WORD 2 ICHAR2, TAD MODE SZA CLA JMP IC10A3 TAD I IPOINT RAR RTR /GET BITS 2-8 JMP ICHARD /INPUT CHARACTER #3 - BITS 9-11 WORD 2 AND BITS 0-3 WORD 3 ICHAR3, TAD I IPOINT AND [7 CLL RTL RTL /GET BITS 9-11 DCA ICHARY ISZ IPOINT /USE WORD 3 NOW TAD I IPOINT RTL RTL RAL AND [17 /GET BITS 0-3 JMP ICHARE /INPUT CHARACTER #4 - BITS 4-10 WORD 3 ICHAR4, DCA CHARNI /RESET CHARACTER COUNT TAD I IPOINT ISZ IPOINT RAR JMP ICHARD+1 IC10A3, DCA CHARNI SKP IC10A1, ISZ CHARNI TAD I IPOINT ISZ IPOINT JMP ICHARC PAGE /CLOSE A PDP-10 FILE / /CALL: / JMS CLOS10 /CLOSE A PDP-10 FILE / -RETURN- CLOS10, 0 /CLOSE A PDP-10 FILE TAD MODE /IMAGE MODE? SPA CLA JMP CLOS1A /YES - NO FILL NEEDED TAD CHARNO SNA CLA JMP CLOS1A /CHARACTER NUMBER IS 0 - FILL DONE JMS I (OCHR10 /0 FILL JMP .-4 /LOOP CLOS1A, TAD OUNIT DCA UNIT10 /SET OUR UNIT TAD OBLOCK DCA .+3 /SET THE BLOCK JMS I (WRITET /WRITE PDP-10 DECTAPE OBUF10 0 /BLOCK IS SET TAD (MOUTPU JMS I (DELETE /DELETE THE OLD FILE NOP /O.K. IF IT IS NOT THERE TAD FREEP DCA INDEX0 /POINT TO THE FREE SPOT TAD [MOUTPU DCA INDEX1 /POINT TO THE FILE NAME CDF 10 /TO FIELD 1 TAD I INDEX1 DCA I INDEX0 TAD I INDEX1 /SET THE NAME DCA I INDEX0 TAD I INDEX1 DCA I INDEX0 TAD INDEX0 TAD [77 DCA INDEX0 /POINT TO THE EXTENSION TAD I INDEX1 DCA I INDEX0 /SET THE EXTENSION TAD I INDEX1 DCA I INDEX0 TAD DATE DCA I INDEX0 /SET THE DATE JMS I (FIX75 /V3C SET HIGH ORDER BIT TOO JMS I (WRITET /WRITE PDP-10 DECTAPE DIRECT /DIRECTORY 144 /BLOCK 100 BASE 10 JMP I CLOS10 /EXIT /OPEN A PDP-10 FILE FOR OUTPUT / /CALL: / JMS OOPN10 /OPEN A PDP-10 FILE / -RETURN- OOPN10, 0 /OPEN A PDP-10 FILE TAD (ZFREE-1 JMS I (FIND /FIND A FREE SPOT JMP I (NOROOM /NO ROOM LEFT DCA I (SLOTNO /SET THIS SLOT TAD INDEX0 DCA FREEP /SAVE POINTER TO FREE SPOT CLA CMA DCA I (NEXTDI /SET DIRECTION = -1 TAD (144 JMS I (NEXTSL /FIND FIRST OPEN SLOT DCA OBLOCK /AND SET IT CDF 10 TAD I [MOUTPU DCA OUNIT /SET UNIT TAD OBLOCK AND [17 CLL RTR RTR RAR DCA I [OBUF10+2 /SET FIRST BLOCK POINTER TAD OBLOCK CLL RTR RTR AND [77 DCA I [OBUF10+1 /SET FIRST BLOCK POINTER DCA I [OBUF10 /ZERO LINK POINTER DCA CHARNO /RESET CHARACTER NUMBER TAD (OBUF10+3 DCA OPOINT /RESET POINTER CDF JMP I OOPN10 /EXIT /OPEN PDP-10 INPUT FILE / /CALL: / (AC) /POINT TO FILE NAME-1 / JMS IOPN10 /OPEN PDP-10 INPUT FILE / -NO- /NOT THERE / (AC) /ANY BLOCK OF THE FILE IOPN10, 0 /OPEN PDP-10 INPUT FILE JMS I (FIND /FIND THE FILE JMP I IOPN10 /NOT THERE DCA IOPN1B /SAVE SLOT NUMBER TAD (143 DCA IOPN1A TAD (CLA CMA DCA IOPN1D IOPN1F, JMS I (FINDSL /FIND A SLOT IOPN1A, 0 /SLOT TO FIND CIA TAD IOPN1B /IS IT US? SNA CLA JMP IOPN1C /YES IOPN1D, CLA CMA TAD IOPN1A /BUMP BLOCK NUMBER SPA JMP IOPN1E /TOO FAR TAD [-1102 SMA JMP I IOPN10 /TOO FAR - EXIT TAD (1102 DCA IOPN1A /SET NEW BLOCK JMP IOPN1F /RETRY IOPN1B, 0 /SLOT THAT WE WANT IOPN1E, CLA TAD (CLA IAC JMP IOPN1F-1 /CHANGE DIRECTION AND RETRY IOPN1C, TAD IOPN1A CDF ISZ IOPN10 JMP I IOPN10 /EXIT PAGE /CONVERT OS8 DATE TO PDP-10 DATE CVDATE, 0 SNA JMP I CVDATE /0 CONVERTS TO 0 DCA TEMP1 TAD TEMP1 /V3C RTR RAR AND [37 TAD (-1 /GET DAY DCA DATE4 /V3C / //DSN 21.24.1 M / TAD TEMP1 // / AND [7 /GET OS8 YEAR (-1970) // JMS I PAT10 // TAD 116 // DECIMAL TAD (1970-1964 OCTAL DCA DATE1 /SAVE YEAR TAD DATE1 CLL RAL /*2 TAD DATE1 /*2+1=*3 CLL RTL /*3*4=*12 DCA DATE1 /DATE1=DATE1*12 TAD TEMP1 RTL RTL RAL AND [17 /GET MONTH TAD (-1 TAD DATE1 /ADD IN MONTH DCA DATE1 TAD DATE1 CLL RAL /*2 TAD DATE1 /*2+1=*3 DCA TEMP2 TAD TEMP2 CLL RTL /*3*4=*12 TAD TEMP2 /*12+*3=*15 CLL RAL /*15*2=*30 TAD DATE1 /*30+1=*31 TAD DATE4 /V3C ADD IN DAY DCA DATE1 /DATE1=DATE1+MONTH-1 * 31 RAL /V3C LINK NOW HAS HIGH ORDER DATE BIT DCA HIDATE /ONLY WITHIN RANGE OF OS/8 TAD DATE1 /RETURN LOW ORDER 12 BITS OF DATE JMP I CVDATE DATE1, 0 DATE4, 0 /TYPE A PDP-10 DATE DATE10, 0 SZL /LINK HAD HIGH ORDER BIT TAD (4 /IF ON, WANT ADDITIONAL 11 YEARS, 4 DAYS DCA DATE1 /SAVE VALUE RAL /V3C DCA DATE75 /SAVE FACT THAT NEED 'NUTHER 11 YEARS TAD (100 /V3C BASE IS (19)64 DCA DATE2 /WILL BE YEAR DATE11, TAD DATE1 SMA CLA JMP DATE12 /MUST BE POSITIVE ISZ DATE2 /BUMP YEAR TAD DATE1 TAD (-564 /-372 DECIMAL (DAYS PER YEAR) DCA DATE1 JMP DATE11 DATE12, DCA DATE3 /WILL BE MONTH TAD DATE1 /DIVIDE BY 31 TAD (-37 SPA JMP .+4 ISZ DATE3 /BUMP MONTH DCA DATE1 JMP .-6 CLA ISZ DATE1 /+1 IS DAY TAD DATE3 /DIVIDE BY 12 TAD (-14 SPA JMP .+4 ISZ DATE2 /BUMP YEAR DCA DATE3 JMP .-6 CLA TAD DATE1 TAD (-12 SMA CLA JMP DATE9 TAD ("0 JMS I OUTPUT /PRINT LEADING 0 IF NECESSARY DATE9, TAD DATE1 JMS I (PRINT /PRINT DAY TAD ("- JMS I OUTPUT TAD DATE3 TAD DATE3 TAD DATE3 /V3C MULTIPLY BY 3 TAD (MONTBL /ADD IN BASE OF MONTH NAMES DCA MONPTR /POINT TO PROPER MONTH NAME TAD I MONPTR /GET CHAR 1 JMS I OUTPUT /PRINT IT ISZ MONPTR /POINT TO NEXT CHAR TAD I MONPTR /GET CHAR 2 JMS I OUTPUT /PRINT IT ISZ MONPTR /V3C TAD I MONPTR JMS I OUTPUT TAD ("- JMS I OUTPUT TAD DATE75 /V3C SZA CLA TAD (13 /ADD 11 YEARS IF H.O. BIT ON TAD DATE2 JMS I (PRINT /PRINT YEAR JMP I DATE10 DATE2, 0 /YEAR DATE3, 0 /MONTH MONPTR, 0 /V3C POINTS TO MONTH NAME PAT10, PAT11 //DSN 21.24.1 M PAGE DECIMAL PRINTL, -1000 -100 -10 OCTAL PRINTZ, 0 /PRINT WITH LEADING SPACES DCA PRINT0 TAD PRINTZ DCA I (PRINT TAD (240 JMP I (PRINT7 /ZERO A DIRECTORY (PDP-10) ZERO10, 0 /ZERO THE PDP-10 DIRECTORY TAD I [MOUTPU AND [17 SZA CLA JMP I (NOT10F /NOT A PDP-10 TAD I [MOUTPU DCA UNIT10 /SET UNIT TAD (DIRECT-1 DCA INDEX0 /POINT TO DIRECTORY TAD (-600 DCA CNTR /COUNT OF 600 DCA I INDEX0 /ZERO THE DIRECTORY ISZ CNTR JMP .-2 /LOOP TAD (7570 DCA I (DIRECT /SAVE BLOCKS 1 AND 2 TAD (170 DCA I (DIRECT+52 /SAVE BLOCK 144 TAD (777 DCA I (DIRECT+367 /SAVE BLOCKS 1102 ON UP CLA CMA DCA I (DIRECT+370 JMS I (WRITET /WRITE PDP-10 DECTAPE DIRECT /DIRECTORY 144 /DIRECTORY BLOCK CDF 10 JMP I ZERO10 /EXIT /DELETE A PDP-10 FILE DELE10, 0 /DELETE A PDP-10 FILE TAD I [MOUTPU AND [17 SZA JMP DELOS8 /DELETE A OS8 FILE TAD I [MOUTPU DCA UNIT10 /SET UNIT TAD [MOUTPU CDF JMS I (DELETE /DELETE THE PDP-10 FILE JMP I (ERDELF /NOT THERE JMS I (WRITET /WRITE PDP-10 DECTAPE DIRECT 144 /DIRECTORY BLOCK JMP I DELE10 /EXIT DELOS8, CIF CDF 10 JMS I (DELPS1 /DELETE A OS8 FILE JMP I DELE10 JMP I (ERDELF /ERROR DELETING THE FILE PAGE /GET THE NEXT INPUT FILE NEXIFL, 0 /GET THE NEXT INPUT FILE DCA CHARNI /RESET STUFF DCA WORDS CDF 10 CLA CMA DCA I (INCHCT DCA I (INEOF TAD (INDEVH+1 DCA INDEVX TAD I IXR /GET NEXT SNA JMP NEXIF2 /E.O.F DCA IUNIT TAD I IXR DCA IBLOCK /SET START BLOCK CDF TAD IUNIT AND [17 SNA JMP NEXIF1 /PDP-10 FILE CIF 10 JMS I [200 1 INDEVX, 0 JMP I (NOOFIL CDF 10 TAD INDEVX DCA I (INHNDL TAD IBLOCK DCA I (INREC TAD IUNIT AND [7760 SZA TAD [17 CLL CML RTR RTR DCA I (INCTR TAD (ICHRPS JMP NEXIF3 NEXIF1, TAD IUNIT DCA UNIT10 TAD IBLOCK DCA .+3 JMS I (READT IBUF10 0 /READ ANY BLOCK CDF 10 TAD I [IBUF10+2 RTL RTL RAL AND [17 DCA IBLOCK TAD I [IBUF10+1 AND [77 CLL RTL RTL TAD IBLOCK DCA IBLOCK /SET START BLOCK TAD (ICHR10 NEXIF3, DCA INPUT /SET ROUTINE POINTER ISZ NEXIFL NEXIF2, CDF JMP I NEXIFL /EXIT ICHRPS, 0 CIF CDF 10 JMS I (ICHARP SKP ISZ ICHRPS JMP I ICHRPS OCHRPS, 0 CIF 10 JMS I (OCHARP JMP I (IOERR JMP I OCHRPS PAGE PIP10, CDF 10 /STARTS HERE - JUMPED TO FROM 200 DCA HIDATE /V3C TAD I (MDATE /GET TODAY'S DATE CDF JMS I (CVDATE /CONVERT IT DCA DATE /AND STORE IT TAD (3401 /UNRESTARTABLE, DOESN'T DESTROY BATCH OR USR AREA DCA I (JSBITS PIPCD, CDF JMS I (CD /COMMAND DECODE CDF 10 TAD I (MPARAM AND (2010 CLL RAL DCA MODE /SET /I SWITCH TAD I (MPARAM+1 AND (400 DCA SAVELN /SET /P SWITCH TAD I (MPARAM AND (101 SZA CLA JMP I (LIST10 /EITHER /F OR /L TAD I [MOUTPU SZA CLA JMP PIP001 /IS AN OUTPUT FILE TAD I (MINPUT SNA CLA JMP PIPCD /NO OUTPUT OR INPUT FILES JMP I (NOOOFL /INPUT, BUT NO OUTPUT PIP001, CLL CLA CML RTR AND I (MPARAM+2 SZA CLA JMS I (ZERO10 /IT IS /Z OPTION TAD (OUDEVH+1 DCA OUDEVX TAD I [MOUTPU AND [17 SZA JMP PIPB /OUTPUT IS OS8 TAD I [MOUTPU DCA UNIT10 /SET UNIT JMS I (READT DIRECT /GET DIRECTORY INTO CORE 144 PIPA, CDF 10 TAD OUDEVX DCA I (OUHNDL TAD I (MPARAM AND (400 SZA CLA JMS I (DELE10 /DELETE A PDP-10 FILE FIRST CDF 10 TAD (MINPUT-1 DCA IXR TAD I IXR SNA CLA JMP PIPCD /NO INPUT TAD (MINPUT-1 DCA IXR /SET INPUT LIST TAD I [MOUTPU AND [17 CDF SZA CLA JMP PIPC /OUTPUT IS OS8 JMS I (OOPN10 /OPEN PDP-10 OUTPUT TAD (OCHR10 PIPD, DCA OUTPUT /SET OUTPUT ROUTINE PIPE, SZA CLA /IS IT ERROR OR EOF JMP I (IOERR /ERROR JMS I (NEXIFL /GET NEXT FILE JMP PIPF /FINAL EOF JMS I INPUT /GET INPUT JMP PIPE /EOF OR ERROR JMS I OUTPUT /OUTPUT JMP .-3 /LOOP PIPC, CIF CDF 10 JMS I (OOPNPS /OPEN OS8 OUTPUT JMP I (NOOOFL TAD (OCHRPS JMP PIPD PIPB, CDF 0 CIF 10 JMS I [200 1 /GET OS8 OUTPUT HANDLER OUDEVX, 0 JMP I (NOOFIL JMP PIPA PIPF, CDF 10 TAD I [MOUTPU /NOW CLOSE THE OUTPUT FILE AND [17 CDF SZA CLA JMP PIPG JMS I (CLOS10 JMP PIPCD PIPG, CIF CDF 10 JMS I (OCLOSE JMP I (IOERR JMP PIPCD PAGE LIST10, TAD (OUDEVH+1 DCA OUDEVY TAD (OUDEVH+1 DCA OUDEVZ TAD (3100 /RESET THINGS DCA LISTDV+1 TAD I [MOUTPU SZA JMP LIST11 /OUTPUT FILE EXISTS CDF 0 CIF 10 JMS I [200 1 LISTDV, TEXT /TTY/ /LOOKUP THE TTY: OUDEVY, 0 JMP I (NOOOFL CDF 10 TAD LISTDV+1 DCA I [MOUTPU /SET TTY: DEVICE NUMBER TAD I [MOUTPU LIST11, AND [17 SNA JMP I (NOTPSF /NOT A OS8 FILE CDF 0 CIF 10 JMS I [200 1 /LOOKUP DEVICE OUDEVZ, 0 JMP I (NOOFIL LIST12, CDF CIF 10 TAD OUDEVZ DCA I (OUHNDL JMS I (OOPNPS /OPEN OUTPUT FILE JMP I (NOOOFL TAD (OCHRPS DCA OUTPUT /SET OUTPUT ROUTINE CDF 10 TAD I (MINPUT DCA UNIT10 CDF TAD UNIT10 SNA JMP I (PIPCD /NO INPUT AND [17 SZA CLA JMP I (NOT10F JMS I (READT /READ THE DIRECTORY DIRECT 144 TAD (LISTL-1 DCA INDEX0 TAD (-40 DCA CNTR DCA I INDEX0 /CLEAR THE COUNTS ISZ CNTR JMP .-2 TAD (-1101 DCA LIST13 CLA IAC DCA LIST14 JMS I (FINDSL /FIND ALL SLOTS LIST14, 0 TAD (LISTL DCA LIST15 ISZ I LIST15 /COUNT THE NUMBER IN EACH SLOT ISZ LIST14 ISZ LIST13 JMP LIST14-1 JMS I (CRLF TAD I (LISTL JMS I (PRINTZ /PRINT FREE BLOCKS TAD (LISTM1-1 DCA INDEX0 JMS I (ERROR4 /"FREE BLOCKS" JMS I (CRLF TAD (-26 DCA LIST13 TAD (DIRECT+370 DCA INDEX6 TAD (DIRECT+2 /HIGH ORDER BIT (4096'S) OCCURS AT END OF EACH DCA XDATE /PDP-10 WORD AT BEGIN OF DIRECTORY /THIS IS END OF EVERY 3RD PDP-8 WORD LIST17, CDF 10 /MAIN LOOP TAD I INDEX6 SNA JMP I (LIST16 /DO NOT PRINT THIS BLANK ENTRY JMS I (LIST18 TAD I INDEX6 JMS I (LIST18 TAD I INDEX6 JMS I (LIST18 CDF TAD (". JMS I OUTPUT JMP I (LIST22 LIST13, 0 LIST15, 0 PAGE LIST22, CDF 10 TAD INDEX6 TAD [77 DCA INDEX5 TAD I INDEX5 /GET EXTENSION JMS LIST18 TAD I INDEX5 AND [7700 JMS LIST18 CLA IAC AND I (MPARAM SNA CLA JMP LIST19 /NO EXTRA IF NOT /L JMS LIST18 CDF TAD I (LIST13 TAD (LISTL+27 DCA LIST23 TAD I LIST23 /GET NUMBER OF BLOCKS JMS I (PRINTZ JMS LIST18 TAD I XDATE /V3C RAR /HIGH ORDER BIT OF DATE TO LINK CLA TAD I INDEX5 CDF JMS I (DATE10 LIST19, CDF JMS CRLF LIST20, CDF TAD XDATE /V3C TAD (3 /POINT TO NEXT DATE H.O. BIT DCA XDATE ISZ I (LIST13 JMP I (LIST17 /LOOP JMS CRLF JMP I (PIPG /CLOSE THE FILE LIST16, ISZ INDEX6 ISZ INDEX6 JMP LIST20 CRLF, 0 TAD [215 JMS I OUTPUT TAD [212 JMS I OUTPUT JMP I CRLF LIST23, 0 LIST18, 0 CDF DCA TEMP1 TAD TEMP1 RTR RTR RTR JMS LIST21 TAD TEMP1 JMS LIST21 CDF 10 JMP I LIST18 LIST21, 0 AND [77 TAD [240 JMS I OUTPUT JMP I LIST21 /FIND A PDP-10 ENTRY IN DIRECTORY / /CALL: / (AC) /POINT TO NAME-1 (FIELD 1) / JMS FIND /FIND A PDP-10 ENTRY / -NO- /NOT FOUND / (AC) /SLOT NUMBER IF FOUND FIND, 0 /FIND A PDP-10 FILE DCA FIND4 /SAVE POINTER TAD (DIRECT+370 DCA INDEX0 /POINT TO DIRECTORY START TAD (-26 DCA CNTR /22 DECIMAL FILES CDF 10 /DIRECTORY IS IN FIELD 1 FIND2, TAD FIND4 /GET POINTER DCA INDEX2 /POINT TO NAME,EXT TAD I INDEX0 CIA TAD I INDEX2 /CHECK WORD 1 SZA CLA JMP FIND1 /NO TAD I INDEX0 CIA TAD I INDEX2 /CHECK WORD 2 SZA CLA JMP FIND1+1 /NO TAD I INDEX0 CIA TAD I INDEX2 /CHECK WORD 3 SZA CLA JMP FIND1+2 /NO TAD INDEX0 TAD [77 DCA INDEX1 /POINT TO EXTENSIONS TAD I INDEX1 CIA TAD I INDEX2 /CHECK WORD 4 SZA CLA JMP FIND1+2 /NO TAD I INDEX1 AND [7700 CIA TAD I INDEX2 /CHECK WORD 5 SZA CLA JMP FIND1+2 /NO CLL CLA CMA RTL TAD INDEX0 DCA INDEX0 /POINT TO ENTRY AGAIN TAD CNTR TAD (27 ISZ FIND /WE FOUND IT - 2ND EXIT FIND3, CDF /BACK TO FIELD 0 JMP I FIND /EXIT FIND1, ISZ INDEX0 /EXTRA POINTER BUMPS ISZ INDEX0 ISZ CNTR /MORE FILES? JMP FIND2 /YES - LOOP JMP FIND3 /NO - NOT FOUND FIND4, 0 /POINTER TO NAME-1 PAGE LINBUF=. LISTL, ZBLOCK 105 LISTM1, TEXT / FREE BLOCKS PIP10 V/ VERLOC, *.-1 60+VERSION^100+SUBVER 3700 ERMES0, TEXT /_PIP10 CANNOT BE CHAINED TO_/ ERMES1, TEXT #_I/O ERROR_# ERMES2, TEXT /_DEVICE FULL_/ ERMES3, TEXT /_NO SUCH DEVICE_/ ERMES4, TEXT /_NOT PDP-10 FILE_/ ERMES5, TEXT /_ERROR DELETING FILE_/ ERMES6, TEXT /_NOT OS8 FILE_/ ERMES7, TEXT /_OUTPUT FILE OPEN ERROR_/ ERMES8, TEXT /_SYNTAX ERROR_/ ERMES9, TEXT /_FILE NOT FOUND_/ /ROUTINE TO SET TD8E UNIT INFORMATION FROM UNIT10 TDUSET, 0 TAD UNIT10 CLL RTL RAL AND (7 TAD (DVCTBL DCA DVCPTR RAR DCA TDUNIT /SAVE EVEN/ODD BIT TAD (TDUTBL DCA TDUPTR TDULP, TAD I TDUPTR SNA JMP I TDUSET DCA TDUT TAD I TDUT AND (7 TAD I DVCPTR DCA I TDUT ISZ TDUPTR JMP TDULP TDUPTR, 0 TDUT, 0 DVCPTR, 0 DVCTBL, 6770;6760;6750;6740 TDUTBL, DIO01 DIO02 DIO03 DIO04 DIO05 DIO06 DIO07 DIO08 DIO09 DIO10 DIO11 DIO12 DIO13 DIO14 DIO15 DIO16 DIO17 DIO18 DIO19 DIO20 DIO21 DIO22 IOTX1 IOTX2 IOTX3 IOTX4 IOTX5 IOTX6 IOTX7 IOTX8 0 PAGE /GET A CHARACTER GCH, 0 TAD I IXR /GET A CHAR TAD (-240 SNA JMP GCH+1 /IGNORE SPACES TAD (240-"/ SNA JMP SLASH TAD ("/-"( SNA JMP OPENP TAD ("( JMP I GCH /EXIT SLASH, TAD I IXR JMS SLSHCH /GET OPTION JMP GCH+1 OPENP, TAD I IXR TAD (-") SNA JMP GCH+1 /END TAD (") JMS SLSHCH /GET OPTION JMP OPENP SLSHCH, 0 SNA JMP I (SYNTAX /ERROR DCA TEMP6 TAD (MPARAM-1 DCA TEMP5 /POINT TO PARAMETERS JMS DECODE JMP I (SYNTAX SZL TAD (32 /ADD TAD (-14 ISZ TEMP5 SMA JMP .-3 /FIND DIVIDED BY 12 DCA TEMP4 CLL CML RAL ISZ TEMP4 JMP .-2 /SHIFT A BIT DCA TEMP4 /SAVE IT CDF 10 TAD TEMP4 CMA AND I TEMP5 TAD TEMP4 /OR IN THAT BIT DCA I TEMP5 CDF JMP I SLSHCH DECODE, 0 TAD TEMP6 TAD (-"9-1 CLL TAD ("9+1-"0 SZL JMP DECOD1 TAD ("0-"Z-1 CLL CML TAD ("Z-"A+1 SNL DECOD1, ISZ DECODE JMP I DECODE EXA40, 0 TAD (CDNAME DCA TEMP5 TAD (-5 DCA TEMP4 EXA401, CLL CLA CML RAR TAD I TEMP5 AND [7700 CLL RAL SZA RAR DCA TEMP3 TAD I TEMP5 TAD (40 AND [77 TAD (-40 SZA TAD (40 TAD TEMP3 DCA I TEMP5 ISZ TEMP5 ISZ TEMP4 JMP EXA401 JMP I EXA40 PAGE /GET A NAME ROUTINE GNAME, 0 DCA CDDEV /CLEAR AREA DCA CDDEV+1 CLA CMA DCA DEVSW /ALLOW DEVICES GNAME1, DCA CDNAME /CLEAR NAME,EXTENSION DCA CDNAME+1 DCA CDNAME+2 DCA CDEXT DCA CDEXT+1 CLA CMA DCA PERSW /ALLOW EXTENSIONS TAD (CDNAME DCA POINT /SET POINTER DCA CNTR /SET SWITCH GNAME2, JMS I (GCH /GET A CHAR DCA TEMP6 TAD TEMP6 SNA JMP GNAME6 /END TAD (-": SNA JMP GNAME5 /: IS DEVICE TAD (":-". SNA JMP GNAME4 /. IS EXTENSION TAD (". DCA TEMP6 /SAVE THE CHAR JMS I (DECODE JMP GNAME6-1 /NOT 0-9 OR A-Z IS END CLA TAD TEMP6 AND [77 /GET TRIMMED ASCII ISZ CNTR JMP GNAME3 /LEFT HALF TAD I POINT DCA I POINT /SET RIGHT HALF ISZ POINT JMP GNAME2 /LOOP GNAME3, CLL RTL RTL RTL DCA I POINT /SET LEFT HALF CLA CMA DCA CNTR TAD POINT TAD (-CDEXT-2 SZA CLA JMP GNAME2 /LOOP JMP GNAME2-1 /LOOP - IGNORE GNAME4, TAD CDNAME SZA CLA ISZ PERSW JMP I (SYNTAX /ERROR DCA CDEXT DCA CDEXT+1 /CLEAR EXTENSION TAD (CDEXT JMP GNAME2-2 /GET EXTENSION GNAME5, ISZ DEVSW JMP I (SYNTAX /ERROR ISZ PERSW JMP I (SYNTAX /ERROR TAD CDNAME SNA JMP I (SYNTAX /ERROR DCA CDDEV TAD CDNAME+1 DCA CDDEV+1 /SET DEVICE JMP GNAME1 /NOW GET THE NAME CLA GNAME6, DCA CDEXT+2 TAD CDEXT+1 AND [7700 DCA CDEXT+1 ISZ PERSW JMP I GNAME /EXIT DCA CDEXT DCA CDEXT+1 /CLEAR EXTENSION JMP I GNAME /EXIT PAGE CD, 0 TAD [MOUTPU-1 DCA INDEX0 TAD (-47 DCA CNTR CDF 10 DCA I INDEX0 /CLEAR AREAS ISZ CNTR JMP .-2 CDF CIF 10 JMS I [200 13 /RESET TABLES 0 DCA INSEG /NO DIRECTORY IN CORE DCA PDP10D /NO KNOWN PDP-10 DRIVES DCA PDP10D+1 DCA PDP10D+2 DCA PDP10D+3 DCA PDP10D+4 DCA PDP10D+5 DCA PDP10D+6 DCA PDP10D+7 DCA CDCNT /ZERO INPUT COUNT JMS I (GLINE /GET A LINE TAD [LINBUF-1 DCA IXR TAD I IXR SNA JMP NOBAKB /NO "<" IS LINE TAD (-"< SZA CLA JMP .-5 TAD [LINBUF-1 DCA IXR TAD XDSK DCA CDDEVF /SET "DSK" AS DEFAULT TAD XDSK+1 DCA CDDEVF+1 JMS I (GNAME /GET THE NAME TAD TEMP6 TAD (-"[ SZA CLA JMP CDX03 /NO SIZE SPECIFIED CDX01, JMS I (GCH TAD (-"] SNA JMP CDX02 /END OF SIZE TAD ("]-"0 SPA JMP I (SYNTAX /ERROR DCA TEMP1 TAD CDEXT+2 CLL RTL TAD CDEXT+2 RAL TAD TEMP1 DCA CDEXT+2 /ADD IN NUMBER TAD TEMP1 TAD (-11 SMA SZA CLA JMP I (SYNTAX /ERROR JMP CDX01 CDX02, JMS I (GCH SKP CDX03, TAD TEMP6 TAD (-"< SZA CLA JMP I (SYNTAX /ERROR JMS I (CDOUTX /SET OUTPUT STUFF NOBAKA, TAD (MINPUT-1 DCA INDEX6 TAD XDSK DCA CDDEVF /SET DEFAULT TAD XDSK+1 DCA CDDEVF+1 TAD IXR DCA CDI04 /SAVE POINTER JMS I (GCH SNA CLA JMP I CD /NO INPUT FILES TAD CDI04 DCA IXR /RESET POINTER CDI01, JMS I (GNAME /GET A FILE ISZ DEVSW JMP CDI02 /DEVICE SPECIFIED TAD CDDEVF DCA CDDEV TAD CDDEVF+1 DCA CDDEV+1 /SET DEFAULT DEVICE CDI02, TAD CDDEV DCA CDDEVF TAD CDDEV+1 DCA CDDEVF+1 /SET NEW DEFAULT ISZ CDCNT /COUNT INPUT FILES TAD CDCNT TAD (-12 SMA CLA JMP I (SYNTAX /TOO MANY FILES JMS I (CDINX /SET INPUT STUFF TAD TEMP6 SNA JMP I CD /MAIN EXIT TAD (-", SNA CLA JMP CDI01 JMP I (SYNTAX /ERROR NOBAKB, TAD [LINBUF-1 DCA IXR JMP NOBAKA PAGE CDOUTX, 0 /SET OUTPUT STUFF ISZ DEVSW JMP CDOUT9 /DEVICE SPECIFIED TAD CDNAME SNA CLA JMP I CDOUTX /NO NAME AND NO DEVICE IS NOTHING TAD CDDEVF DCA CDDEV TAD CDDEVF+1 DCA CDDEV+1 /SET DEFAULT DEVICE CDOUT9, TAD (OUDEVH+1 DCA CDOUT2 /SET OUTPUT HANDLER ADDRESS TAD [MOUTPU-1 DCA INDEX6 TAD CDDEV DCA CDOUT1 TAD CDDEV+1 DCA CDOUT1+1 /SET DEVICE CIF 10 JMS I [200 12 /FIND HANDLER CDOUT1, 0 0 CDOUT2, 0 JMP I (NOOFIL TAD CDOUT1+1 JMS I (GTDVTP /GET DEVICE TYPE AND COMPARE WITH TC08 AND TD8E SZA CLA JMP CDOUT3 /NOT DECTAPE TAD (OUDEVH+1 DCA CDOUT5 TAD CDOUT1+1 CIF 10 JMS I [200 1 /GET HANDLER CDOUT5, 0 JMP I (NOOFIL TAD CDOUT5 JMS SETUNT /SET UP PHYSICAL UNIT FROM HANDLER ENTRY POINT JMS I (ROCK /CHECK THE TAPE JMP CDOUT3 /NOT PDP-10 DECTAPE JMS I (EXA40 /EXCESS 40 CONVERSION TAD UNIT10 JMP CDOUT4 /SET PARAMETERS CDOUT3, DCA CDEXT+1 TAD CDEXT+2 /GET LENGTH TAD (-400 SPA CLA TAD CDEXT+2 /O.K. - USE LENGTH CLL RTL RTL AND [7760 /8 BIT LENGTH TAD CDOUT1+1 /ADD IN DEVICE NUMBER CDOUT4, CDF 10 DCA I INDEX6 /SET DEVICE TAD CDNAME DCA I INDEX6 /SET NAME TAD CDNAME+1 DCA I INDEX6 TAD CDNAME+2 DCA I INDEX6 TAD CDEXT DCA I INDEX6 TAD CDEXT+1 DCA I INDEX6 CDF JMP I CDOUTX /EXIT SETUNT, 0 STL TAD (-7607 SZA /IF IT IS 7607, TAD (7 /ITS UNIT 0 AND (7 CLL CML RTR RTR DCA UNIT10 TAD DVTYPE AND (10 SNA CLA JMP I SETUNT /TC08 - FINISHED CLL TAD UNIT10 AND (7000 /TD8E ENTRY POINTS ARE STRANGE - TAD UNIT10 /MUST ROTATE UNIT NUMBER LEFT 1 SZL TAD (1000 DCA UNIT10 JMS I (TDUSET /SET UP TD8E OPCODES JMP I SETUNT PAGE CDINX, 0 /SET INPUT STUFF TAD (OUDEVH+1 DCA CDIN1 TAD CDDEV DCA CDIN2 /SET DEVICE TAD CDDEV+1 DCA CDIN2+1 CIF 10 JMS I [200 1 /GET HANDLER CDIN2, 0 0 CDIN1, 0 JMP I (NOOFIL TAD CDIN2+1 JMS GTDVTP /COMPARE DCB ENTRY WITH TC08 OR TD8E SZA CLA JMP CDIN3 /NOT DECTAPE TAD CDIN1 JMS I (SETUNT /SET UP UNIT NUMBER JMS I (ROCK /CHECK THE TAPE JMP CDIN3 /NOT PDP-10 DECTAPE JMS I (EXA40 /DO EXCESS 40 TAD INSEG CIA TAD UNIT10 /IS DIRECTORY IN CORE? SNA CLA JMP CDIN8 /YES - NO READ TAD CDNAME SNA CLA JMP CDIN7 /NO NAME - NO READ JMS I (READT DIRECT /READ DIRECTORY 144 TAD UNIT10 DCA INSEG /SET DIRECTORY IN CORE CDIN8, TAD (-5 DCA CNTR TAD (CDNAME-1 DCA INDEX0 TAD (CDINXX-1 DCA INDEX1 TAD I INDEX0 CDF 10 DCA I INDEX1 CDF ISZ CNTR JMP .-5 TAD (CDINXX-1 JMS I (IOPN10 /OPEN THE PDP-10 FILE JMP I (FNOTFD CDIN7, DCA CDIN4 TAD UNIT10 JMP CDIN6 CDIN3, TAD (CDNAME DCA CDIN4 TAD CDNAME SNA CLA JMP CDIN9 /NO LOOKUP IF NO NAME TAD CDIN2+1 CIF 10 JMS I [200 2 CDIN4, CDNAME /LOOKUP CDIN5, 0 JMP I (FNOTFD TAD CDIN5 TAD (400 SPA CLA CLL RTL RTL AND [7760 /GET LENGTH TAD CDIN2+1 /ADD DEVICE CDIN6, CDF 10 DCA I INDEX6 TAD CDIN4 DCA I INDEX6 /SET BLOCK STARTING CDF JMP I CDINX CDIN9, DCA CDIN4 JMP CDIN6-1 GTDVTP, 0 TAD (DCB-1 DCA TEMP1 CDF 10 TAD I TEMP1 /GET DCB ENTRY CDF DCA DVTYPE TAD DVTYPE AND (770 TAD (-210 SZA TAD (30 JMP I GTDVTP PAGE ROCK, 0 JMS GET10D /GET ENTRY IN TAPE TYPE TABLE SNA JMP ROCK4 /UNKNOWN - ROCK IT SMA CLA ISZ ROCK JMP I ROCK /EXIT GET10D, 0 TAD UNIT10 CLL RTL RTL TAD (PDP10D DCA TEMP5 /POINT TO KNOWN TABLE TAD I TEMP5 JMP I GET10D ROCK4, CLA CMA DCA I TEMP5 TAD DVTYPE AND (10 SZA CLA /WHAT KIND OF TAPE? JMP TDCHK /TD8E TAD (OBUF10-1 DCA I (7755 TAD (10 DTLB ROCK1, RTL RAL SZL CLA TAD (-400 TAD UNIT10 TAD (210 DTCA DTXA ROCK2, JMS DTWAIT ROCK3, SPA JMP ROCK1 CLA TAD (OBUF10-1 DCA I (7755 TAD (-600 DCA I (7754 TAD (30 DTXA DTSF DTRB JMP .-1 SPA CLA JMP ROCK4 /RETRY TAD [200 DTXA /STOP DRIVE TAD I (7754 SZA CLA JMP I ROCK /OS8 UNIT CLA IAC SET10, DCA I TEMP5 ISZ ROCK JMP I ROCK /PDP-10 UNIT DTWAIT, 0 /WAIT FOR DECTAPE FLAG DTSF DTRB SKP CLA JMP I DTWAIT KSF JMP DTWAIT+1 TAD [200 KRS TAD (-203 SZA CLA JMP DTWAIT+1 TAD [200 DTXA /STOP THE TAPE JMP I [7600 TDCHK, CLA STL RTR TAD TDUNIT IOTX1, SDLC CLA IOTX2, SDRC AND (100 /CHECK FOR TAPE NOT READY SZA CLA JMP TDCHK /WAIT FOR TAPE TO COME UP TAD TDUNIT TAD (1000 IOTX3, SDLC JMS SKIP4 JMS SKIP4 IOTX4, SDSS JMP .-1 IOTX5, SDRC AND [77 TAD (-26 SZA CLA /WAIT FOR GUARD JMP IOTX4 DCA TDT TDCLP, JMS SKIP4 ISZ TDT AND [77 TAD (-51 /SEARCH FOR SOME CRAP NEAR END OF RECORD SZA CLA JMP TDCLP TAD I (UNIT IOTX6, SDLC /STOP TAPE CLA TAD TDT TAD (-611 /9 WORDS FOR GOOD LUCK SZA CLA JMP I ROCK STL RTL /SET TABLE ENTRY TO 2 FOR TD8E TAPE JMP SET10 SKIP4, 0 IOTX7, SDSQ JMP .-1 IOTX8, SDRC JMP I SKIP4 TDT, 0 PAGE FIELD 0 /DUMP PG 0 LITERALS HERE /TD8E DECTAPE ROUTINE /VERSION 01 /JULY 2 1971 GB/RL/EF /COPYRIGHT 1971 DIGITAL EQUIPMENT CORP. / MAYNARD, MASS. /ABSTRACT-- / THE ROUTINE DESCRIBED AND LISTED HERE IS A GENERAL /DATA HANDLER FOR THE TD8E DECTAPE SYSTEM. THE ROUTINE /CONTAINS SEARCH, READ, AND WRITE FUNCTIONS IN A FORMAT /WHICH IS COMPATIBLE WITH PS/8 DEVICE HANDLER CALLING /SEQUENCES. /THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE /VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS /CONTROL: /A) WHAT DRIVES (UNITS 0-7) WILL BE USED /B) THE ORIGIN OF THE TWO PAGE ROUTINE /C) WHAT MEMORY FIELD THE ROUTINE WILL RUN IN /D) THE SIZE OF THE DECTAPE BLOCK TO BE READ/WRITTEN /FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD /DEC VERSION OF THIS ROUTINE: DRIVE=10 /UNITS 0 AND 1 SELECTED ORIGIN=6200 /ENTRIES AT 6200 AND 6204 AFIELD=0 /INITIAL FIELD SETTING MFIELD=00 /AFIELD*10=MFIELD WDSBLK=600 /384 WORDS PER BLOCK /THE USE OF THE PARAMETERS IS AS FOLLOWS: / DRIVE: DRIVE DETERMINES WHICH UNITS WILL BE SELECTED / DRIVE=10 IMPLIES UNITS 0 &1 / DRIVE=20 IMPLIES UNITS 2&3 / DRIVE=30 IMPLIES UNITS 4&5 / DRIVE=40 IMPLIES UNITS 6&7 /ORIGIN: ALTERING ORIGIN CAUSES ASSEMBLY IN A DIFFERENT / MEMORY LOCATION. WHEN CHANGING ORIGIN KEEP IN MIND /THAT THIS IS A TWO PAGE ROUTINE. /AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE / LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7. /MFIELD: MFIELD IS USED IN A CIF CDF MFIELD INSTRUCTION. / THE VALUE INSERTED FOR MFIELD SHOULD BE 10(8) TIMES / THE VALUE FOR AFIELD. THE PERMISSIBLE VALUES ARE 00-70. /WDSBLK: WDSBLK GOVERNS HOW MANY WORDS THE ROUTINE THINKS ARE / IN A DECTAPE BLOCK. THE STANDARD VALUE IS 201(8) OR / 128 DECIMAL. NOTE THAT THE FUNCTION WORD BIT 10 CAN / BE USED TO SUBTRACT ONE FROM WDSBLK. THE VALUE USED / FOR WDSBLK SHOULD BE THE NUMBER OF WORDS THE TAPE WAS / FORMATTED TO CONTAIN. /IF WE WANT A HANDLER FOR UNITS 2&3 TO RESIDE IN /FIELD 2 AT LOCATION 3000 AND READ/WRITE 256(10) WORDS /PER BLOCK, THE PARAMETERS WOULD BE: / DRIVE=20 / ORIGIN=3000 / AFIELD=2 / MFIELD=20 / WDSBLK=400 /THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE /CALLING SEQUENCE FOR PS/8 DEVICE HANDLERS. /THE CALLING SEQUENCE IS: / CDF CURRENT / CIF MFIELD /MFIELD=FIELD ASSEMBLED IN / JMS ENTRY /ENTRY=ORIGIN (EVEN NUMBERED DRIVE /AND ORIGIN+4 FOR ODD NUMBERED DRIVE. / ARG1 / ARG2 / ARG3 / ERROR RETURN / NORMAL RETURN /THE ARGUMENTS ARE: /ARG1: FUNCTION WORD BIT0: 0=READ, 1=WRITE / BITS 1-5: # BLOCKS IN OPERATION / BITS 6-8: FIELD OF BUFFER AREA / BIT 9: UNUSED / BIT 10: # OF WORDS/BLOCK. / 0= WDSBLK, 1=WDSBLK-1 / BIT 11: 1=START FORWARD, 0=REVERSE /ARG2: BUFFER ADDRESS FOR OPERATION /ARG3: STARTING BLOCK FOR OPERATION /ERRORS: THE HANDLER DETECTS TWO TYPES OF ERRORS: /A) FATAL ERRORS- PARITY ERROR, TIMING ERROR, / TOO GREAT A BLOCK NUMBER / FATAL ERRORS TAKE ERROR RETURN WITH THE / AC=4000. /B) NON-FATAL- SELECT ERROR. / IF NO PROPER UNIT IS SELECTED, THE ERROR / RETURN IS TAKEN WITH CLEAR AC. /FATAL ERRORS TRY THREE TIMES BEFORE TAKING ERROR RETURN. /THE NORMAL RETURN IS TAKEN AFTER ALL INDICATED /BLOCKS HAVE BEEN TRANSFERRED. THE AC IS CLEAR. /THE TD8E IOT'S ARE: SDSS=7001-DRIVE /SKIP ON SINGLE LINE FLAG SDST=7002-DRIVE /SKIP ON TIMING ERROR SDSQ=7003-DRIVE /SKIP ON QUAD LINE FLAG SDLC=7004-DRIVE /LOAD COMMAND REGISTER SDLD=7005-DRIVE /LOAD DATA REGISTER SDRC=7006-DRIVE /READ COMMAND REGISTER SDRD=7007-DRIVE /READ DATA REGISTER /THE IOT'S IN GENERAL ARE 677X,676X,675X,AND 674X. /THE OTHERS CONTROL UNITS 2-7. BLOCK=DTA1 FIELD AFIELD *ORIGIN DTA0, 0 /ENTRY POINT FROM UNIT 0 CLA CLL /0 TO LINK JMP DTA1X C1000, 1000 DTA1, 0 /UNIT 2 ENTRY CLA CLL CML /1 TO LINK TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /LINK TO UNIT POSITION RDF TAD C6203 /GET DATA FIELD AND SETUP RETURN DCA LEAVE TAD I DTA0 /GET FUNCTION WORD DIO01, SDLD /PUT FUNCTION INTO DATA REGISTER CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER /BLOCK INTO LINK SZL CLA /KNOCK ONE OFF WDSBLK? IAC /YES TAD MWORDS DCA WCOUNT /STORE MASTER WORD COUNT ISZ DTA0 /TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /TO BLOCK NUMBER TAD I DTA0 DCA BLOCK ISZ DTA0 /POINT TO ERROR EXIT CIF CDF MFIELD /TO ROUTINES DATA FIELD DIO02, SDRD /GET FUNCTION INTO AC CLL RAL AND CM200 /GET # PAGES TO XFER DCA PGCT DIO03, SDRD C374, AND C70 /GET FIELD FOR XFER TAD C6203 /FORM CDF N DCA XFIELD /IF=0 AND DF=N AT XFER. CLA CLL CMA RTL DCA TRYCNT /3 ERROR TRIES TAD UNIT /TEST FOR SELECT ERROR DIO04, SDLC DIO05, SDRC AND C100 SZA CLA JMP FATAL-1 DIO06, SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. DCA I CXFUN TAD WCOUNT DCA I CXWCT DIO07, SDRD /GET MOTION BIT TO LINK CLL RAR JMP GO /AND START THE MOTION. DIO08, RWCOM, SDST /ANY CHECKSUM ERRORS? SZA CLA /OR CHECKSUM ERRORS? JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS /SET AT RWCOM. GETCHK SETS IT. TAD PGCT /NO ERROR..FINISHED XFER? TAD CM200 SNA JMP EXIT /ALL DONE. GET OUT DCA PGCT /NEW PAGE COUNT ISZ BLOCK /NEXT BLOCK TO XFER TAD WCOUNT /FORM NEXT BUFFER ADDRESS CIA TAD BUFF DCA BUFF CLL CML /FORCES MOTION FORWARD GO, CLA CML RTR /LINK BECOMES MOTION BIT TAD C1000 TAD UNIT /PUT IN 'GO' AND UNIT # DIO09, SDLC /LOOK FOR BLOCK NO. JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK JMS I CRDQUD CM200, 7600 /COULD HAVE SAVED A LOC. HERE DIO10, SRCH, SDSS JMP .-1 /WAIT FOR SINGLE LINE FLAG DIO11, SDRC CLL RTL /DIRECTION TO LINK. INFO BITS /ARE SHIFTED. AND C374 /ISOLATE MARK TRACK BITS TAD M110 /IS IT END ZONE? SNA /THE LINK STAYS SAME THRU THIS JMP ENDZ TAD M20 /CHECK FOR BLOCK MARK SZA CLA JMP SRCH DIO12, SDRD /GET THE BLOCK NUMBER SZL /IF WE ARE IN REVERSE, LOOK FOR 3 /BLOCKS BEFORE TARGET BLOCK. THIS /ALLOWS TURNAROUND AND UP TO SPEED. TAD C3 /REVERSE CMA TAD BLOCK CMA /IS IT RIGHT BLOCK? SNA JMP FOUND /YES..HOORAY! M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? /ABOVE SNA IS SUPERFLUOUS. JMP SRCH /YES DIO13, ENDZ, SDRC /WE ARE IN THE END ZONE CLL RTL /DIRECTION TO LINK /V3C SZL CLA /ARE WE IN REVERSE? JMP GO /YES..TURN US AROUND /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR TRY3, CLA CLL /V3C ISZ TRYCNT JMP GO /TRY 3 TIMES JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN EXIT, ISZ DTA0 CLL CML /AC=0 ON NORMAL RETURN FATAL, TAD UNIT DIO14, SDLC /STOP THE UNIT CLA CML RAR LEAVE, HLT JMP I DTA0 C6203, 6203 CRDQUD, RDQUAD WCOUNT, 0 BUFF, 0 MWORDS, -WDSBLK UNIT, 0 CXFUN, XFUNCT M20, -20 PGCT, 0 CXWCT, XWCT C100, 100 TRYCNT, -3 *ORIGIN+170 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? JMP GO /WRONG..TURN AROUND TAD UNIT /PUT UNIT INTO LINK CLL RAL /AC IS NOW 0 C70, 70 /********DON'T MOVE THIS!!!!****** C3, 3 TAD BUFF /GET BUFFER ADDRESS XFIELD, HLT /INTO NEXT PAGE *ORIGIN+200 CIF MFIELD DCA XBUFF /SAVE ADDRESS RAR /NOW GET UNIT # DCA XUNIT SDRC /V3C SDLC /V3C TAD XWCT DCA DWORDS /WORD COUNTER DIO15, REVGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD DIO16, SDRC AND K77 TAD CM32 /IS IT REVERSE GUARD? SZA CLA JMP REVGRD /NO.KEEP LOOKING TAD XFUNCT /GET FUNCTION READ OR WRITE K7700, SMA CLA JMP READ /NEG. IS WRITE DIO17, WRITE, SDRC AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS SZA CLA JMP I CFATAL /FATAL ERROR. LINK MUST BE ON / JMS RDQUAD /NO ONE EVER USES THIS WORD! / CLA STA /V3C HACK FOR PDP-6 JMS WRQUAD /V3C 7777 FOR REV CHECKSUM AND SKIP OVER LOCK TAD C1400 TAD XUNIT /INITIATE WRITE MODE DIO18, SDLC CLA CMA JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM CLA CMA DCA CHKSUM WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! JMS WRQUAD ISZ XBUFF /BUMP CORE POINTER K77, 77 /ABOVE MAY SKIP ISZ DWORDS /DONE THIS BLOCK? JMP WRLP /NOT YET..LOOP A WHILE TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? CLL RTR /IF NO, WRITE A 0 WORD SZL CLA JMS WRQUAD /WRITE A WORD OF 0 JMS GETCHK /DO THE CHECK SUM JMS WRQUAD /WRITE FORWARD CHECKSUM JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN JMS WRQUAD /V3C WRITE REST OF CHECKSUM [PDP-6] JMP I CRWCOM READ, JMS RDQUAD JMS RDQUAD JMS RDQUAD /SKIP CONTROL WORDS AND K77 TAD K7700 /TACK 7700 ONTO CHECKSUM. DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY RDLP, JMS RDQUAD JMS EQUFUN /COMPUT CHECKSUM AS WE GO DCA I XBUFF /IT GETS CONDENSED LATER ISZ XBUFF C300, 300 /PROTECTION ISZ DWORDS /DONE THIS OP? JMP RDLP /NO SUCH LUCK TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND CLL RTR /CHECKSUM THE LAST TAPE WORD SNL CLA JMP RDLP2 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK JMS EQUFUN /CHECKSUM IT RDLP2, JMS RDQUAD /READ CHECKSUM AND K7700 JMS EQUFUN JMS GETCHK /GET SIX BIT CHECKSUM JMP I CRWCOM WRQUAD, 0 /WRITE OUT A 12 BIT WORD JMS EQUFUN /ADD THIS TO CHECKSUM DIO19, SDSQ /SKIP ON QUADLINE FLAG JMP .-1 DIO20, SDLD /LOAD DATA ONTO BUS CLA /SDLD DOESN'T CLEAR AC JMP I WRQUAD RDQUAD, 0 /READ A 12 BIT WORD DIO21, SDSQ JMP .-1 DIO22, SDRD /READ DATA JMP I RDQUAD EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE CIA /IS ASSOCIATIVE, WE CAN DO IT 12 CLL RAL /BITS AT A TIME AND CONDENSE LATER. TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EQUFUN GETCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CHKSUM CMA CLL RTL RTL RTL JMS EQUFUN CLA CLL CML /FORCES LINK ON AT RWCOM TAD CHKSUM AND K7700 JMP I GETCHK CFATAL, FATAL CRWCOM, RWCOM XFUNCT, 0 CM32, -32 C1400, 1400 CHKSUM, 0 DWORDS, 0 XBUFF, 0 XWCT, 0 EQUTMP, 0 XUNIT, 0 PAGE FIELD 1 *2000 ZFREE, ZBLOCK 5 INCTR, 0 INHNDL, 0 INPTR, 0 DELPS1, 0 JMS I (200 4 MOUTPU+1 0 ISZ DELPS1 CIF CDF 0 JMP I DELPS1 ICHARP, 0 ISZ INJMP ISZ INCHCT INJMPP, JMP INJMP TAD INEOF SZA CLA JMP INEXIT INGBUF, TAD INCTR CLL TAD (INRECS SNL DCA INCTR SZL ISZ INEOF CLL CML CMA RTR RTR RTR TAD (INCTL+1 DCA INCTLW CIF 0 JMS I INHNDL INCTLW, 0 INBUFP, INBUF INREC, 0 JMP INERRX INBREC, TAD INREC TAD (INRECS DCA INREC TAD INCTLW AND (7600 CLL RAL TAD INCTLW AND (7600 CMA DCA INCHCT TAD INJMPP DCA INJMP TAD INBUFP DCA INPTR JMP ICHARP+1 INERRX, ISZ INEOF SMA CLA JMP INBREC INERR, CLL CLA CML RAR JMP INEXIT INJMP, HLT JMP INCHR1 JMP INCHR2 INCHR3, TAD INJMPP DCA INJMP TAD I INPTR AND (7400 CLL RTR RTR TAD INCTLW RTR RTR ISZ INPTR JMP INCOMN INCHR2, CDF 0 TAD I (MODE CDF 10 SMA SZA CLA JMP IC8A1 TAD I INPTR AND (7400 DCA INCTLW ISZ INPTR IC8A2, TAD I INPTR INCOMN, AND (377 TAD (-232 SNA JMP INEXIT TAD (232 ISZ ICHARP INEXIT, CIF CDF 0 JMP I ICHARP INEOF, 1 INCHCT, -1 INCHR1, CDF 0 TAD I (MODE CDF 10 SPA SNA CLA JMP IC8A2 IC8A3, TAD I INPTR ISZ INPTR JMP INEXIT-1 IC8A1, TAD INJMPP DCA INJMP ISZ INCHCT JMP IC8A3 PAGE OOPNPS, 0 TAD (MOUTPU+1 DCA OUBLK TAD I (MOUTPU JMS I (200 3 OUBLK, 0 OUELEN, 0 JMP OUEFAL DCA OUCCNT JMS I (OUSETP ISZ OOPNPS OUEEXT, CIF CDF 0 JMP I OOPNPS OUEFAL, TAD I (MOUTPU AND (7760 SNA CLA JMP OUEEXT TAD I (MOUTPU AND (17 DCA I (MOUTPU JMP OOPNPS+1 OUHNDL, 0 OUTDMP, 0 DCA OUCTLW TAD OUCCNT SNA ISZ OUCTLW TAD OUBLK DCA OUREC TAD OUCTLW CLL RTL RTL RTL AND (17 TAD OUCCNT DCA OUCCNT TAD OUCCNT CLL CML TAD OUELEN SNL SZA CLA JMP I OUTDMP CIF 0 JMS I OUHNDL OUCTLW, 0 OUBUF OUREC, 0 JMP I OUTDMP ISZ OUTDMP JMP I OUTDMP OCLOSE, 0 CDF 0 TAD I (MODE CDF 10 SMA SZA CLA JMP OULLLP+2 JMS I (OTYPE AND (770 TAD (-PTP SZA CLA TAD (232 JMS I (OCHARP JMP OURET JMS I (OCHARP JMP OURET OULLLP, JMS I (OCHARP JMP OURET JMS I (OTYPE SPA CLA TAD (100 TAD (77 AND I (OUDWCT SZA CLA JMP OULLLP TAD I (OUDWCT TAD (OUCTL&3700 SNA JMP OUDUMP TAD (4010 JMS OUTDMP JMP OURET OUDUMP, TAD I (MOUTPU JMS I (200 4 MOUTPU+1 OUCCNT, 0 SKP ISZ OCLOSE OURET, CIF CDF 0 JMP I OCLOSE PAGE OUTEMP, 0 OUJMP, HLT JMP OCHR1 JMP OCHR2 OCHR3, TAD OUTEMP CLL RTL RTL AND (7400 TAD I OUPOLD DCA I OUPOLD TAD OUTEMP CLL RTR RTR RAR AND (7400 TAD I OUPTR OC8A1, DCA I OUPTR TAD OUJMPP DCA OUJMP ISZ OUPTR ISZ OUDWCT JMP OUCOMN TAD (OUCTL JMS I (OUTDMP JMP OUCRET JMS OUSETP JMP OUCOMN OUSETP, 0 TAD (OUCTL&3700 CIA DCA OUDWCT TAD (OUBUF DCA OUPTR TAD OUJMPP DCA OUJMP JMP I OUSETP OCHARP, 0 DCA OUTEMP RDF TAD (CIF CDF 0 DCA OUCRET CDF 0 TAD I (MODE SMA SZA CLA JMP .+4 TAD OUTEMP AND (377 DCA OUTEMP CDF 10 ISZ OUJMP OUJMPP, JMP OUJMP OCHR2, CDF 0 TAD I (MODE CDF 10 SMA SZA CLA JMP OC8A2 TAD OUPTR DCA OUPOLD ISZ OUPTR OCHR1, TAD OUTEMP DCA I OUPTR OUCOMN, ISZ OCHARP OUCRET, CIF CDF 0 JMP I OCHARP OUPOLD, 0 OUPTR, 0 OUDWCT, 0 OTYPE, 0 TAD I (MOUTPU AND (17 TAD (DCB-1 DCA OUSETP TAD I OUSETP JMP I OTYPE CDINXX, ZBLOCK 5 OC8A2, ISZ OUPTR TAD OUTEMP JMP OC8A1 PAGE $-$-$ |
Added src/os8/uni/CUSPS/RESORC.BI.
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 | $JOB ASSEMBLE AND LINK RESORC.MA .MAC OUT:RESORC<IN:RESORC.MA .MAC OUT:RESOV0<IN:RESOV0.MA .MAC OUT:RESOV1<IN:RESOV1.MA .MAC OUT:RESOV2<IN:RESOV2.MA .MAC OUT:RESOVD<IN:RESOVD.MA .LINK OUT:RESORC,RESOV0,RESOV1,RESOV2,RESOVD/9/S=12000 .DEL OUT:RESO??.RB .COPY OUT:RESORC.SV<DSK:RESORC.SV .DEL DSK:RESORC.SV $END |
Added src/os8/uni/CUSPS/RESORC.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 | /15 OS/8 RESOURCES PROGRAM / / / / / / / / / /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. / / / / / / / / / / / J.M. /SAVE INFO: /INSTRUCTIONS FOR CREATING RESORC.SV V5A / .MAC RESORC / .MAC RESOV0 / .MAC RESOV1 / .MAC RESOV2 / .MAC RESOVD / .LINK RESORC,RESOV0,RESOV1,RESOV2,RESOVD/9/S=12000 /CORE MAP: /0000-1777 C.D. /2000-2377 DEVICE NAME AND LENGTH TABLE /2400-2777 OUTPUT BUFFER (DOESN'T OVERLAP BETA REGISTER) /3000-3377 INPUT HANDLER /3400-3777 OUTPUT HANDLER /4000-7377 INPUT DIRECTORY /4000-7577 INPUT HANDLERS (LOSE 2ND HALF OF LAST ONE) /FIELD 1 /10000-11777 USR /11400-11777 INPUT KBM /12000-15577 PROGRAM /15600-16177 INPUT BLOCK 0 /16200-17577 INPUT USR INPBL0=5600 INPKBM=1400 INPUSR=6200 INPHND=4000 FAST=20 DIG=21 EXTEN=22 DEVNUM=23 /DEVICE NUMBER OF HANDLER CNT=24 PDNT=25 /PTS TO DEVICE NAME TABLE TEMP=26 PUDNT=27 /PTS TO USER DEVICE NAME TABLE PDHIT=30 /PTS TO DEVICE HANDLER INFO TABLE PDCWT=31 /PTS TO DEVICE CONTROL WORD TABLE PTYP=32 LFT=33 RT=LFT+1 DVNO=35 BLOC=36 PDHRT=37 /POINTS TO DEVICE HANDLER RESIDENCY TABLE UN=6 X0=10 XR1=11 RESVERSION="A /FIXES SINCE FIELD TEST RELEASE: /1. 'INPUT ERROR' MESSAGE NO LONGER GARBLED /2. '%NON SYSTEM DEVICE' NEVER PRINTS HANDLERS /FIXES FOR MAINTENANCE RELEASE (V3C): /3. INCORPORATED PATCH SEQ NO 1 ALLOWS DISTINGUISHING BETWEEN / HIGH AND LOW SPEED PTR'S AND ADDITIONAL CASSETTES / [DSN FEB 1975] /4. FIXED LENGTHS OF DF32'S AND RF08'S [SUPERSEDES PATCH SEQ #2 / DSN APR 1975] /5. CHANGED VERSION NUMBER TO V3, UPDATED COPYRIGHT /6. ADDED DUMP, LST, AND RX-- TO INTERNAL NAME TABLES /7. ADDED DETAILS ABOUT DUMP AND FLOPPIES TO TABLES /V3D CHANGES: /8. ADDED NAMES SLU AND LQP TO TABLES /9. CAN DISTINGUISH LQP KIND OF LPTR /10. FIXED BUG ABOUT DUMPING BUFFER FULL OF NULLS /11. REMOVED LITTLE-USED 'OUT', 'DEV' FROM NAME TABLES /VERSION 5 /12. ADDED RL01 SUPPORT /13. CONVERTED TO MACREL /14. ADDED LINKER OVERLAYS /15. ADDED RX02 SUPPORT /16. ADDED VXA0 SUPPORT .EXTERNAL VERSN,SIZE,BLOCK,MODE, ENTRY /IN OV3 .EXTERNAL DIRT,KIND,CNTSLT,ZEROSL .EXTERNAL TYPTBL .GLOBAL GETTYP,PUTNAM,PUTO,PUTSP,CRLF,DPRINT .GLOBAL FREEDV,OPRINT,READI,SLOTAB,PRINT FIELD 1 *2000 START, SKP JMP NOCD /CHAIN ENTRY POINT / JMS I (7700 /WE ASSUME THE USR IS IN CORE / 10 /DON'T HAVE TO LOCK USR IN CORE IF JSW SET RIGHT CD, JMS I (200 5 /COMMAND DECODE 2331 /DEFAULT INPUT EXTENSION = 'SY' NOCD, DCA CTRLO JMS OPENO /OPEN OUTPUT FILE DCA FILENO TAD (7617 DCA INPTR /POINT TO FIRST INPUT FILE TAD I (7644 AND (4 / V OPTION? SZA CLA JMS TYPEV /OUTPUT VERSION # JMS SETSW DCA FLAG TAD I (7617 SNA CLA JMS SPCASE /NO FIRST ARG MEANS USE SYS: IN SPECIAL SENSE JMP INL2 INLOOP, TAD I INPTR /GET INPUT FILE # AND LENGTH SNA CLA JMP FINI /NO MORE INPUT JMS PRDASH INL2, TAD I INPTR AND (17 DCA DVNO /GET 4-BIT DEVICE # ISZ FILENO TAD I INPTR AND (7760 /GET NEGATIVE OF FILE LENGTH DCA FILEN ISZ INPTR TAD I INPTR /GET STARTING BLOCK OF FILE DCA SBLOCK ISZ INPTR TAD DVNO JMS GETDCW SMA CLA JMP NOFLST /DEVICE IS NOT FILE STRUCTURED JMS OPENI /GET INPUT HANDLER JMS DIRECT /ASCERTAIN DIRECTORY INFO JMS HNDLRS /ASCERTAIN HANDLERS TAD EXTEN SZA CLA JMS I (CNTSLT JMS MONVER /ASCERTAIN MONITOR VERSION # NEXT, JMS CRLF DCA FLAG JMP INLOOP NOFLST, JMS PRINT TEXT /%DEV IS NOT FILE STRUCTURED/ JMP NEXT FINI, JMS CLOSEO /CLOSE OUTPUT FILE FINIS, TAD I (7642 SMA CLA JMP CD /COMMAND LINE ENDED WITH CR CIF CDF 0 /COMMAND LINE ENDED WITH ALTMODE JMP I (7605 /GO BACK TO MONITOR /CURRENT PIP /Y FILES ARE 50 (DEC) = 62 (OCTAL) BLOCKS LONG GETDCW, 0 AND (17 TAD (7757 /GET PTR INTO DEVICE CONTROL WORD TABLE DCA DCW TAD I DCW /GET D.C.W. DCA DCW /SAVE (WHY?) TAD DCW JMP I GETDCW SETSW, 0 DCA FAST DCA EXTEN CLA IAC AND I (7643 SNA CLA JMP NOTF ISZ FAST JMP I SETSW NOTF, TAD I (7643 AND (200 SNA CLA JMP I SETSW ISZ EXTEN ISZ FAST JMP I SETSW /FAST GT 0 IF /L OR /E SWITCH SET /EXTEN=1 IF /E SWITCH SET AND /L NOT SET INPTR, 0 /POINTS TO INPUT FILE LIST FILEN, 0 /INPUT FILE LENGTH (NEG IN BITS 0-7) DCW, 0 /INPUT DEVICE CONTROL WORD FILENO, 0 /INPUT FILE NUMBER IN INPUT LIST SBLOCK, 0 /STARTING BLOCK # OF INPUT FILE FLAG, 0 /NON-ZERO MEANS SPECIAL CASE OF NO FIRST ARG SPCASE, 0 ISZ FLAG /NOTE SPECIAL CASE CLA IAC DCA I (7617 /FORCE FIRST INPUT TO BE SYS: JMP I SPCASE PAGE PRINT, 0 TAD I PRINT DCA PRT ISZ PRINT TAD PRT JMS RTR6 JMS PR JMP I PRINT TAD PRT JMS PR JMP I PRINT JMP PRINT+1 PRT, 0 RTR6, 0 TTY212, RTR RTR RTR JMP I RTR6 PR, 0 AND (77 SNA JMP I PR TAD (240 AND (77 TAD (240 JMS PUTO ISZ PR JMP I PR TPRINT, 0 /PRINT TO TELETYPE CLA TAD I TPRINT DCA PRT ISZ TPRINT TAD PRT JMS RTR6 JMS TPUT TAD PRT JMS TPUT JMP TPRINT+1 TPUT, 0 AND (77 SNA JMP PUTCR TAD (240 AND (77 TAD (240 JMS TYPE JMP I TPUT PUTCR, JMS TCRLF JMP I TPRINT TYPE, 0 DCA TYTEM TAD CTRLO SZA CLA JMP I TYPE /DON'T TYPE IF CONTROL/O FLAG SET KSF SKP JMS LOOKC TAD TYTEM A, JMS TYPE2 JMP I TYPE TYTEM, 0 CTRLO, 0 /NON-ZERO MEANS CTRLO/O WAS STRUCK TYPE2, 0 TLS TSF JMP .-1 CLA JMP I TYPE2 LOOKC, 0 KRB AND (177 TAD (-17 SNA /IS IT ^O? JMP CTROLO /YES TAD (17-3 /NO SZA CLA /IS IT ^C? JMP I LOOKC /NO CIF CDF 0 /YES JMP I (7605 CTROLO, TAD ("^ JMS TYPE2 TAD ("O JMS TYPE2 ISZ CTRLO TAD (215 JMS TYPE2 TAD TTY212 JMP A /*** NEEDS CTRL/S CTRL/Q SUPPORT TYPEV, 0 JMS PRINT TEXT /RESORC V5 / *.-2 RESVERSION&77+6500 /THIS OVERLAYS ABOVE VERSION NO /AND THE 6500 INCREASES TO 6600 /FOR THE NEXT RELEASE *.+1 JMS CRLF JMP I TYPEV CRLF, 0 TAD (215 JMS PUTO TAD TTY212 JMS PUTO JMP I CRLF TCRLF, 0 TAD (215 JMS TYPE TAD TTY212 JMS TYPE JMP I TCRLF DLST, -1750 /1000 -144 /100 -12 /10 -1 /1 0 /END PAGE CLOSEO, 0 /CLOSE OUTPUT FILE TAD (232 /PUT ^Z IN BUFFER JMS PUTO TAD (-577 /V3D DCA KNT /SEND 577 NULLS TO OUTPUT BUFFER JMS PUTO /THIS GUARANTEES TO PURGE IT ISZ KNT JMP .-2 TAD I (7600 JMS I (200 4 /CLOSE L7601, 7601 /POINTER TO OUTPUT FILE NAME OUTLEN, 0 /LENGTH OF OUTPUT FILE HLT /SYSTEM ERROR, CANNOT OCCUR JMP I CLOSEO OPENO, 0 JMS OINIT DCA OUTLEN TAD (3401 DCA OENTRY TAD I (7600 SNA CLA JMP DEFALT TAD I (7600 JMS GETDCW RAL SPA CLA JMP NOWR /READ ONLY TAD I (7600 JMS I (200 1 /FETCH DEVICE HANDLER (POSSIBLY 2-PAGE) OENTRY, 3401 /INTO PAGE 3400 HLT /SYSTEM ERROR CANNOT OCCUR O2, TAD L7601 DCA SBLKO TAD I L7601 SNA TAD (2205 /RE DCA I L7601 /DEFAULT OUTPUT NAME IS RE DCA OLEN TAD I (7604 SNA TAD (1423 /LS DCA I (7604 / .LS IS DEFAULT OUTPUT EXTENSION TAD I (7600 JMS I (200 3 /ENTER OUTPUT FILE SBLKO, 7601 /POINTS TO OUTPUT FILE NAME OLEN, 0 /COMPLEMENT OF ACTUAL OUTPUT FILE LENGTH JMP DEVFUL /OUTPUT DEVICE FULL TAD SBLKO DCA OBLOCK TAD OLEN SZA TAD (-1 DCA OLEN JMP I OPENO KNT, 0 DEFALT, TAD (3100 /SET TTY: AS DEFAULT OUTPUT DEVICE DCA DVN TAD (3401 DCA OENT JMS I (200 1 /FETCH HANDLER BY NAME 2424 /TT DVN, 3100 /DEVICE TTY: OENT, 3401 /INTO 3400 JMP NOTTY /NO TTY: ON SYS: TAD OENT DCA OENTRY TAD DVN DCA I (7600 JMP O2 OUTERR, JMS TPRINT TEXT /?OUTPUT ERROR/ JMS CRLF JMP FINIS TRY09, 0 TAD (60 CIA TAD NAM DCA DIG TAD DIG CLL TAD (-10 /TRY DIGITS 0-7 SZL CLA JMP I TRY09 TAD DIG TAD (60 TAD RT DCA RT JMP GOTIT PUTSP, 0 TAD (40 JMS PUTO JMP I PUTSP PAGE PUTO, 0 AND (377 CDF 0 JMP I PUTJMP PUTJMP, X1 X1, DCA I PUTPT1 TAD (X2 DCA PUTJMP PUTLV, CDF 10 JMP I PUTO /RETURN X2, DCA I PUTPT2 TAD (X3 DCA PUTJMP JMP PUTLV X3, DCA TMP TAD TMP CLL RTL RTL AND (7400 TAD I PUTPT1 DCA I PUTPT1 TAD TMP CLL RTR RTR RAR AND (7400 TAD I PUTPT2 DCA I PUTPT2 ISZ PUTPT1 ISZ PUTPT1 ISZ PUTPT2 ISZ PUTPT2 TAD (X1 DCA PUTJMP ISZ PUTKNT JMP PUTLV CDF 10 /BUFFER FILLED ISZ OLEN SKP JMP DEVFUL /CAN'T WRITE ANYMORE CIF 0 TAD OENTRY DCA OENTR /GET ON SAME PAGE JMS I OENTR 4200 /WRITE 1 BLOCK 2400 /FIELD 0, LOC 2400 OBLOCK, 0 /OUTPUT BLOCK # JMP OUTERR ISZ OUTLEN ISZ OBLOCK /POINT TO NEXT BLOCK JMS OINIT JMP I PUTO /RETURN OENTR, 0 PUTPT1, 0 PUTPT2, 0 PUTKNT, 0 TMP, 0 DIRECT, 0 TAD SBLOCK SZA CLA JMP I DIRECT /NO DIRECTORY INFO FOR FILES JMS I (DIRT JMP I DIRECT SLOTAB, ZBLOCK 10 /KEEPS TRACK OF USED SLOTS GETTYP, 0 CDF 0 TAD I PTYP CDF 10 JMP I GETTYP PUTNAM, 0 DCA PUTNMT TAD I PUTNMT JMS PUTPAK ISZ PUTNMT TAD I PUTNMT JMS PUTPAK JMP I PUTNAM PUTNMT, 0 /THIS PRINTS A 4 CHAR NAME, ARG IN AC. COMB, 0 /TEMP TAD LFT TAD RT SMA TAD (4000 JMP I COMB PAGE NAME, 0 DCA NAM TAD FAST SZA CLA JMP TRY1 STA TAD DEVNUM SNA CLA JMP TRY1 TAD (", JMS PUTO TRY1, TAD (LIST1 DCA NM1 LP1, TAD I NM1 SNA JMP TRY2 DCA LFT ISZ NM1 /TRY A-B TAD (-2 /CHANGE TO -4 TO TRY A-D DCA TEMP DCA RT LP1X, TAD RT TAD (100 DCA RT JMS COMB JMS TRY09 ISZ TEMP JMP LP1X JMP LP1 NAM, 0 /SPECIFIED NAME NM1, 0 TRY2, TAD (LIST2 DCA NM1 LP2, TAD I NM1 SNA JMP TRY3 DCA LFT ISZ NM1 TAD I NM1 ISZ NM1 DCA RT JMS COMB DCA TEMP TAD TEMP CIA TAD NAM SNA CLA JMP GOTIT TAD TEMP JMS TRY09 JMP LP2 /TRY0 SHOULD BE SPECIAL CASE TESTS TRY3, TAD NAM JMS RTR6 AND (37 SNA JMP TRY4 JMS SETIFA CLL RAR JMS RTR6 DCA LFT TAD NAM AND (77 JMS SETIFA TAD LFT DCA LFT DCA RT JMP GOTIT SETIFA, 0 SNA JMP I SETIFA TAD (-33 SPA JMP LETR TAD (33-60 CLL TAD (-12 SZL JMP NODI TAD (12+60-33 LETR, TAD (33 JMP I SETIFA NODI, CLA TRY4, TAD NAM JMS NNAME NAMLV, JMP I NAME CMFLG, 0 /COMB, 0 / TAD RT / SZA CLA / STA / DCA CMFLG / TAD LFT / TAD RT / ISZ CMFLG / JMP I COMB / CLL RAL / STL RAR / JMP I COMB /TURN ON BIT 0 OF 1 WORD NAME LIST1, TEXT /DTMTLTTDCSRKRFRXVX/ PRDASH, 0 JMS PRINT TEXT /----/ JMS CRLF JMS CRLF JMP I PRDASH RTL6, 0 RTL RTL RTL JMP I RTL6 PAGE DEVFUL, JMS TPRINT TEXT /?OUTPUT DEV FULL/ JMP FINIS NOWR, JMS TPRINT TEXT /?OUTPUT DEV IS READ-ONLY/ JMP FINIS NOTTY, JMS TPRINT TEXT /?TTY DOES NOT EXIST/ JMP FINIS OINIT, 0 TAD (-200 DCA PUTKNT TAD (2400 DCA PUTPT1 TAD (2401 DCA PUTPT2 TAD (X1 DCA PUTJMP JMP I OINIT READI, 0 TAD I READI DCA ARG1 ISZ READI TAD I READI DCA ARG2 ISZ READI TAD I READI DCA ARG3 ISZ READI CIF 0 JMS I IENTRY ARG1, 0 ARG2, 0 ARG3, 0 JMP INERR JMP I READI /REURN INERR, JMS TPRINT TEXT /?INPUT ERROR/ JMP FINIS OPENI, 0 /FECTH INPUT HANDLER TAD (3001 /INTO PAGES 3000, 3200 DCA IENTRY TAD DVNO JMS I (200 1 /FETCH HANDLER IENTRY, 3001 HLT /SYSTEM ERROR, CAN'T OCCUR JMP I OPENI PAGE /DECIMAL PRINT /LINK OFF MEANS PRINT LEADING SPACES /LINK ON MEANS DON'T PRINT LEADING SPACES OR ZEROS DPRINT, 0 DCA DTM RAR DCA LNK DCA ZFLG TAD (DLST DCA PLST DPL2, DCA DYG DPLUP, TAD I PLST SNA JMP I DPRINT CLL TAD DTM SNL JMP NEGG ISZ DYG DCA DTM JMP DPLUP NEGG, CLA TAD DYG TAD ZFLG SNA JMP PRBLNK TAD (60 JMS PUTO STL CLA RAR /4000 DCA ZFLG ISZZ, ISZ PLST JMP DPL2 PRBLNK, TAD LNK CLL RAL TAD L40 SNL JMS PUTO CLA JMP ISZZ DYG, 0 PLST, 0 ZFLG, 0 /4000 MEANS PASSED LEADING ZEROES LNK, 0 /PRINTS A 2-DIGIT OCTAL NUMBER WITH LEADING 0'S OPRINT, 0 DCA OTEM TAD OTEM RTR RAR JMS OPRI TAD OTEM JMS OPRI JMP I OPRINT OPRI, 0 AND (7 TAD (260 JMS PUTO JMP I OPRI PRINT4, 0 DCA DTM TAD DTM JMS RTR6 JMS OPRINT TAD DTM JMS OPRINT JMP I PRINT4 DTM, 0 PUTPAK, 0 DCA DTM TAD DTM JMS RTR6 JMS PR JMS BLNKIT TAD DTM JMS PR JMS BLNKIT JMP I PUTPAK BLNKIT, 0 TAD FAST SZA CLA TAD L40 JMS PR L40, 40 /CAN'T HURT TO CALL PR WITH A 0 JMP I BLNKIT OTEM, 0 /DIR DID NOT GET IN CORE ON /F? DEV, DCA BLCK0 TAD (66 DCA BLCK66 TAD (7 DCA KBM TAD (13 DCA USRBLK CDF 0 TAD I (4001 /GET STARTING BLOCK # OF FILES CDF 10 TAD (-7 SNA CLA JMP NONSYS /FILES START AT BLOCK 7 OF DEVICE TAD (16 /CHECK TO SEE THAT DEVICE HAS SYSTEM ON IT JMP RD NONSYS, JMS PRINT TEXT /%NON SYSTEM DEVICE/ JMP NEXT PAGE MONVER, 0 TAD FAST SNA CLA JMP I MONVER TAD I (1400 TAD (-7607 SNA JMP NOTV3 TAD (7607+60 DCA TEMPX TAD I (1400+31 DCA TMPTWO OS8, TAD ("O JMS PUTO MONV2, JMS PRINT TEXT \S/8 V\ TAD TEMPX JMS PUTO TAD TMPTWO JMS PUTO JMS CRLF JMP I MONVER TMPTWO, 0 TEMPX, 0 NOTV3, TAD (40 DCA TMPTWO /CHECK FOR PS/8 AND COS JMP OS8 LIST2, DEVICE LPT DEVICE TTY DEVICE PTR DEVICE PTP DEVICE CDR DEVICE SYS DEVICE DSK DEVICE CDP / DEVICE DEV / DEVICE OUT / DEVICE INP DEVICE BAT DEVICE NULL /SHOULD BE IN NEXT TABLE DEVICE LST /V3C DEVICE DUMP DEVICE SLU DEVICE LQP DEVICE RL0A DEVICE RL0B DEVICE RL0C DEVICE RL1A DEVICE RL1B DEVICE RL1C DEVICE RL2A DEVICE RL2B DEVICE RL2C DEVICE RL3A DEVICE RL3B DEVICE RL3C DEVICE VXA0 0 /LIST3, DEVICE NULL / DEVICE TEST / DEVICE LIST / DEVICE DUMP /V3C / ZBLOCK 2 /PATCH SPACE / 0 /INTERESTING NOTE: 'BAT', 'FOO2' AND 'RKC6' ALL HASH OUT TO 6601 /** WANT TO CHANGE AIW PRINTER TO SAY 'NO' ADDITIONAL INFO WORDS /IF THERE ARE NONE. /DTN /DKN GOTIT, TAD FAST SZA CLA JMS PUTSP TAD (LFT JMS PUTNAM TAD FAST SZA CLA JMS PUTSP JMP NAMLV BADFIL, JMS PRINT TEXT /%NOT A SYSTEM HEAD/ JMP NEXT PAGE /FORMAT OF SYSTEM HEAD FILE /REL BLK CONTENTS ABS BLK ON DEV /0 BOOTSTRAP & PAGE 0'S 0 /1-4 KEYBOARD MONITOR 7-12 /5-7 USR 13-15 /10-17 DEVICE HANDLERS 16-25 /20 ENTER 26 /21-42 SCRATCH BLOCKS 27-50 /43-45 COMMAND DECODER 51-53 /46-47 SAVE,DATE 54-55 /50 ERROR OVERLAY 56 /51 CHAIN OVERLAY 57 /52-55 ODT 60-63 /56 RESERVED FOR EXPN 64 /57 CCL SCRATCH 65 /60 12K TD8E HANDLER 66 /61 CCL OVERLAY 67 HNDLRS, 0 TAD SBLOCK SNA /IS IT A FILE? JMP DEV /NO DCA BLCK0 /YES TAD BLCK0 TAD (60 DCA BLCK66 TAD FILEN TAD (-6340 SZA CLA JMP BADFIL /FILE DOESN'T HAVE LENGTH 50 (DECIMAL) TAD BLCK0 IAC DCA KBM TAD BLCK0 TAD (5 DCA USRBLK TAD BLCK0 TAD (10 RD, DCA HNDBLK JMS READI /READ IN BLOCK 0 210 /2 PAGES INPBL0 FREEDV, /# OF FREE DEVICE NUMBERS BLCK0, 0 TAD I (INPBL0+212 /** DEPENDS ON TD8E HANDLER TAD (-3 SZA CLA /IS IT 12K TD8E? JMP NOTD8E /NO JMS READI /YES 110 /1 PAGE INPBL0 BLCK66, 66 NOTD8E, TAD I (INPBL0+200 TAD (-4207 SZA CLA JMP BADMON /BAD MONITOR ON DEVICE DCA 7 /DELETE CURRENT USR DIRECTORY SEGMENT /SINCE KBM READS OVER IT JMS READI /READ IN KEYBOARD MONITOR 211 /ONLY FIRST 2 PAGES INPKBM KBM, 7 JMS READI /READ IN USR 611 /6 PAGES INPUSR USRBLK, 13 JMS READI /READ IN ALL HANDLERS (EXCEPT 2ND PAGE OF LAST ONE) 1700 /17 PAGES INPHND HNDBLK, 16 TAD (-17 DCA CNT DCA FREEDV JMS ZEROSL DCA DEVNUM JMS SETPTS JMS HEADING LOOP, ISZ DEVNUM /PT TO NEXT HANDLER TAD I PDNT /LOOK AT DEVICE NAME SNA CLA JMP NOXXT TAD EXTEN SNA CLA JMP NONUM TAD DEVNUM JMS OPRINT NONUM, TAD I PDNT JMS NAME /PRINT NAME TAD FAST SNA CLA JMP NEXXT JMS TIPE /PRINT TYPE TAD EXTEN SNA CLA JMP PUSER JMS MODE /PRINT MODE JMS SIZE /PRINT SIZE JMS BLOCK /PRINT BLOCK # OF LOC OF HANDLER STA DCA UN JMS KIND /PRINT KIND JMS VERSN /PRINT HANDLER VERSION # JMS ENTRY PUSER, TAD I PUDNT SNA CLA JMP EOL TAD I PUDNT JMS NAME /PRINT USER NAME EOL, JMS CRLF NEXXT, ISZ PDNT ISZ PUDNT ISZ PDHIT ISZ PDCWT ISZ PDHRT ISZ CNT JMP LOOP JMS CRLF JMP I HNDLRS NOXXT, ISZ FREEDV JMP NEXXT PAGE HEADING,0 TAD FAST SNA CLA JMP I HEADING TAD EXTEN SNA CLA JMP REGLR JMS PRINT TEXT /# NAME TYPE MODE SIZ BLK KIND U V ENT USER/ JMP HDLV REGLR, JMS PRINT TEXT / NAME TYPE USER/ HDLV, JMS CRLF JMP I HEADING SETPTS, 0 TAD I (INPUSR+36 TAD (INPUSR DCA PDNT TAD FLAG SZA CLA TAD (7741-141-INPBL0 TAD (INPBL0+141 DCA PUDNT /CHANGE FOR FLAG? TAD I (INPUSR+37 TAD (INPUSR DCA PDHIT /FLAG? TAD (INPBL0+160 DCA PDCWT TAD (INPBL0+47 DCA PDHRT /DEVICE HANDLER RESIDENCY TABLE JMP I SETPTS CODE, 0 /DEVICE CODE NNAME, 0 DCA TIPE TAD ("( JMS PUTO TAD TIPE JMS PRINT4 TAD (") JMS PUTO JMP I NNAME TIPE, 0 TAD I PDCWT RTR RAR AND (77 DCA CODE TAD CODE CLL RTL TAD (TYPTBL DCA PTYP JMS GETTYP ISZ PTYP SNA JMP UNKN JMS PUTPAK JMS GETTYP JMS PUTPAK ISZ PTYP /POINT TO SIZE JMP I TIPE UNKN, JMS PUTSP TAD CODE JMS OPRINT JMS PUTSP ISZ PTYP JMP I TIPE BADMON, JMS PRINT TEXT /%BAD MONITOR/ JMP NEXT PAGE PAGE |
Added src/os8/uni/CUSPS/RESOV0.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | /1 OV0 FOR RESORC .ENTRY VERSN,SIZE,BLOCK,ENTRY,MODE .EXTERNAL GETTYP,DPRINT,OPRINT,PUTSP,PUTO .EXTERNAL SLOTAB,PRINT PDHRT=37 PDCWT=31 PTYP=32 INPBL0=5600 PDHIT=30 INPHND=4000 BLOC=36 .RSECT OV3,LEVEL=1,OVERLAY=0 FIELD 1 VERSN, 0 JMS PUTSP TAD BLOC SNA CLA JMP SYSV /TEMP (ENTRY PT IS IN FIELD 1 7600 TAD I PDHIT AND (177 TAD BLOC GOVR, DCA DTM JMS GETV CLL IAC TAD (-34 SZL CLA JMP NOOOP JMS GETV PUTVR, SZA TAD (40 TAD (40 JMS PUTO JMP I VERSN OTEM, GETV, 0 CDF 0 TAD I DTM CDF 10 JMP I GETV NOOOP, STA TAD DTM /SCAN BACKWARDS FOR HANDLER VERSION # (LT 33) JMP GOVR SYSV, TAD I PDHRT AND (177 TAD (INPBL0+200 DCA DTM TAD I DTM CLL TAD (-34 SNL CLA TAD I DTM /PRINT BAD VERSION # AS SPACE JMP PUTVR DTM, 0 SIZE, 0 JMS GETTYP CIA CLL JMS DPRINT JMS PUTSP ISZ PTYP /POINT TO KIND SUBROUTINE JMP I SIZE MODE, 0 JMS PUTSP TAD (-4 DCA MKNT TAD I PDCWT RTL RAL JMS MSET "R TAD I PDCWT RTL JMS MSET "W TAD I PDCWT RAL CML JMS MSET "F JMS PUTSP ISZ MKNT JMP .-3 JMP I MODE MSET, 0 CLA TAD I MSET DCA MCHAR ISZ MSET SZL JMP I MSET ISZ MKNT TAD MCHAR JMS PUTO JMP I MSET MKNT, 0 PAGE ET, BLOCK, 0 TAD I PDHIT RTL RTL RTL AND (17 SNA JMP SYS DCA SLTM STA TAD SLTM CLL RTR RTR RAR TAD (INPHND DCA BLOC TAD SLTM TAD (15 JMS OPRINT TAD I PDHIT SMA CLA TAD (40-"+ TAD ("+ JMS PUTO /"+" MEANS 2 PAGE HANDLER TAD SLTM TAD (SLOTAB-1 DCA SLTM ISZ I SLTM JMP I BLOCK SYS, JMS PRINT TEXT /SYS/ DCA BLOC /0 MEANS RESIDENT WITH SYS: JMP I BLOCK MCHAR, ENTRY, 0 JMS PUTSP TAD BLOC SNA CLA JMP SYSENT TAD I PDHIT EN2, DCA ET TAD ET RTR RTR RTR AND (1 SZA TAD (20 TAD (40 JMS PUTO TAD ET JMS OPRINT JMP I ENTRY SYSENT, TAD I PDHRT JMP EN2 SLTM, 0 PAGE |
Added src/os8/uni/CUSPS/RESOV1.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 | /1 .EXTERNAL PUTNAM,PUTSP,GETTYP,PUTO .ENTRY KIND .GLOBAL TYPTBL PDHRT=37 XR1=11 TEMP=26 PDHIT=30 BLOC=36 UN=6 .RSECT OV,LEVEL=1,OVERLAY=1 FIELD 1 GETD77, 0 TAD (7707 DCA MASK TAD (-6704 /V3C JMS SRCH RTR RAR AND (7 JMP I GETD77 QTTY, TAD I PDHIT SMA CLA /1 OR 2 PAGE? JMP I ($ASR /1 PAGE JMP I ($KL8E /2 PAGE QRK8E, TAD I PDHIT AND (7 CLL RAR DCA UN JMP I ($RK8E TSTUN, 0 TAD I PDHIT AND (7 DCA UN JMP I TSTUN QRK8, JMS TSTUN JMP I ($RK8 QTC08, QLINC, JMS TSTUN JMP I (NOKIND /HNDGET GETS VALUE IN HANDLER FROM REL LOC IN AC HNDGET, 0 TAD BLOC DCA TEMP CDF 0 TAD I TEMP CDF 10 JMP I HNDGET /SRCH SEARCHES THE HANDLER FOR THE NEGATIVE /OF THE NON-ZERO VALUE IN THE AC. /MASKED BY MASK. /IF FOUND, RETURN IS MADE WITH VALUE(WITHOUT MASK) IN AC /IF NOT FOUND, AC IS 0 UPON RETURN SRCH, 0 DCA LOOK4 STA TAD BLOC DCA XR1 TAD (-230 /V3C MUST SEARCH 2 PAGES; TROUBLE IF TA8E IS IN LAST SLOT DCA SRCHCNT SRCHLP, CDF 0 TAD I XR1 CDF 10 DCA TEMP TAD TEMP AND MASK TAD LOOK4 SNA CLA JMP SRCHGOT ISZ SRCHCNT JMP SRCHLP JMP I SRCH SRCHGOT,TAD TEMP JMP I SRCH SRCHCNT,-400 LOOK4, 0 / **** NOTE: ALL HANDLERS SHOULD BE PADDED OUT TO FILL PAGE / WITH ZEROES /BUILD SHOULD WRITE ZEROES IN 2ND PAGE OF ONE PAGE HANDLER /SPECIAL PURPOSE ROUTINES QPTP, QPTR, STA DCA MASK TAD (-6021 JMS SRCH SZA CLA JMP I ($PT8E JMP I ($LSPT /FOR TYPE PTR / IF HANDLER CONTAINS A 6021 IT IS A PT8E / OTHERWISE IT IS A LSPT QCR8E, TAD (104 JMS HNDGET TAD (-3203 SNA JMP I ($C029 TAD (3203-7735 SNA CLA JMP I ($C026 JMP I (NOKIND /FOR TYPE CR8E / IF REL LOC 104 IS A 3203 IT IN 029 KIND / IF REL LOC 104 IS A 7735 IT IS AN 026 KIND / OTHERWISE IT IS AN UNKNOWN KIND QLPTR, TAD I PDHIT SPA CLA /1 OR 2 PAGE? JMP I ($LQP /2 PG STA /1 PG DCA MASK TAD (-6652 /SEARCH FOR A 6652 JMS SRCH SZA CLA JMP I ($L645 /FOUND IT CLA IAC /LOOK AT REL LOC 1 JMS HNDGET TAD (-4 SNA JMP I ($LV8E TAD (4-14 SNA CLA JMP I ($LPSV JMP I (NOKIND /IF HANDLER CONTAINS A 6652 IT'S AN L645 /OTHERWISE, DEPENDS ON REL LOC 1 / IF REL LOC 1 IS A 14, IT'S A LPSV / IF REL LOC 1 IS A 4, IT'S A LV8E / OTHERWISE IT'S UNKNOWN (POSSIBLY OLD LP08 OR LS8E KIND) MASK, 0 PAGE QTD8E, JMS I (GETD77 CIA TAD (10 DCA TEMP TAD I ($TD8+1 AND (7700 TAD TEMP DCA I ($TD8+1 TAD I PDHIT RTR RAR STA TAD TEMP CML RAL /TIMES 2 + LINK DCA UN JMP I ($TD8 /FIGURE OUT KIND OF TD8E BY DEVICE CODE FOUND IN 67N1 INSTRUCTION / N TYPE / 7 TD8A / 6 TD8B /.. / 1 TD8G / 0 TD8H QTA8E, JMS I (GETD77 IAC DCA TEMP TAD I ($TA8+1 AND (7700 TAD TEMP DCA I ($TA8+1 STA TAD I PDHIT AND (177 SNA CLA CLA IAC DCA UN STA TAD TEMP CLL RAL TAD UN DCA UN JMP I ($TA8 /FIGURE OUT KIND OF TA8E BY DEVICE CODE FOUND IN 67N1 INSTRUCTION / N KIND / 0 TA8A / 1 TA8B /... / 6 TA8G / 7 TA8H RLSPC, TAD I PDHIT TAD (-50 RTR SKP RLSP, TAD I PDHIT AND (3 DCA UN JMP I (NOKIND PAGE $LQP, IAC /23 PLAT4, IAC /22 PLAT3, IAC /21 PLAT2, IAC /20 PLAT1, IAC /17 $XTRA, IAC /16 $KL8E, IAC /15 $RK8E, IAC /14 $RK8, IAC /13 $ASR, IAC /12 $TA8, IAC /11 $TD8, IAC /10 $L645, IAC /7 $LPSV, IAC /6 $LV8E, IAC /5 $C026, IAC /4 $C029, IAC /3 $LSPT, IAC /2 $PT8E, IAC /1 NOKIND, CLL RAL /PRINTS NAME FROM TABLE, ENTER WITH ENTRY # IN AC PRNAM, TAD (TABASE JMS PUTNAM JMS UNIT JMP KINDRET KIND, 0 JMS PUTSP TAD BLOC SNA CLA JMP NOKIND JMS GETTYP SNA JMP NOKIND DCA TEMP JMP I TEMP /BRANCH TO APPROPRIATE SUBROUTINE KINDRET,JMP I KIND /KIND SUBROUTINES /ENTER WITH BLOC POINTING TO HANDLER BLOCK IN CORE TABASE, 4040;4040 /0 DEVICE PT8E /1 DEVICE KS33 /2 DEVICE 029 /3 DEVICE 026 /4 DEVICE LV8E /5 DEVICE LPSV /6 DEVICE L645 /7 KTD8, DEVICE TD8 /10 KTA8, DEVICE TA8 /11 DEVICE AS33 /12 DEVICE RK01 /13 DEVICE RK05 /14 DEVICE KL8E /15 DEVICE XTRA /16 TEXT / =1/ /17 TEXT / =2/ /20 TEXT / =3/ /21 TEXT / =4/ /22 DEVICE LQP /23 UNIT, 0 JMS PUTSP TAD BLOC SNA CLA JMP TSTSUN TAD UN SPA TAD (40+1-60 ZOUN, TAD (60 JMS PUTO JMP I UNIT TSTSUN, TAD I PDHRT TAD (-7607 SZA CLA CLA IAC /ASSUME CORESIDENT HANDLERS ARE UNIT 1 JMP ZOUN /ELSE, NO UNIT PAGE .ASECT TYPTAB,LEVEL=0 FIELD 0 *2000 / DEVICE LENGTH TABLE /FORMAT OF THIS TABLE: /1,2 DEVICE GENERALIZED NAME (CORR TO TYPE) /3 NEG OF LENGTH /4 ADDRESS OF SUBR IN FIELD 1 FOR SPECIALIZATION TYPTBL, DEVICE TTY ;0000;QTTY /0 DEVICE PTR ;0000;QPTR /1 DEVICE PTP ;0000;QPTP /2 DEVICE CR8E;0000;QCR8E /3 DEVICE LPTR;0000;QLPTR /4 V3D DEVICE RK8 ;1520;QRK8 /5 DEVICE RF08;6001;PLAT1 /6 V3C DEVICE RF08;4002;PLAT2 /7 DEVICE RF08;2003;PLAT3 /10 DEVICE RF08;0004;PLAT4 /11 RF'S NOW ONLY HAVE LOGICALLY 1777 BLOCKS DEVICE DF32;7601;PLAT1 /12 DEVICE DF32;7402;PLAT2 /13 V3C DEVICE DF32;7203;PLAT3 /14 DEVICE DF32;7004;PLAT4 /15 DF'S HAVE 177 BLOCKS DEVICE TC08;6437;QTC08 /16 DEVICE LINC;6437;QLINC /17 DEVICE TM8E;0000;0 /20 DEVICE TD8E;6437;QTD8E /21 DEVICE BAT ;0000;0 /22 DEVICE RK8E;1520;QRK8E /23 DEVICE NULL;0000;0 /24 DEVICE RX8E;7022;0 /25 DEVICE RL01;-7761;RLSP /26 DEVICE TA8E;0000;QTA8E /27 DEVICE VR12;0000;0 /30 DEVICE RL01;-3751;RLSPC /31 DEVICE RX02;6044;0 /32 DEVICE VXA0;7200;PLAT3 /33 ZBLOCK 4 /34 ZBLOCK 4 /35 DEVICE DUMP;0000;0 /36 ZBLOCK 4 /37 ZBLOCK TYPTBL+400-. PAGE |
Added src/os8/uni/CUSPS/RESOV2.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 | /1 .EXTERNAL PRINT,FREEDV,READI,CRLF,OPRINT,DPRINT .EXTERNAL SLOTAB .ENTRY DIRT,ZEROSL,CNTSLT FAST=20 EXTEN=22 X0=10 .MACRO .PRINT ARG JMS I (PRINT TEXT "ARG" .ENDM .RSECT OV2,LEVEL=1,OVERLAY=2 FIELD 1 .NOLIST ME,MEB DIRT, 0 JMS I (READI 1400 /READ 6 BLOCKS 4000 /INTO 04000 1 /FROM BLOCK 1 JMS I (DVALID /CHECK IF VALID DIRECTORY TAD FAST SNA CLA JMP I DIRT /NO DIRECT IN FAST MODE JMS I (CRLF DCA USED DCA UNUSED DCA NFILES DCA NMTS DCA NSEGS STL CLA RAR /4000 LUP$: DCA DIRPTR ISZ NSEGS JMS GETDIR DCA NENTRY /- NO. OF ENTRIES IN SEGMENT JMS GETDIR DCA STBLK /STARTING BLOCK # OF FIRST FILE IN SEGMENT JMS GETDIR DCA LINK /LINK TO NEXT SEGMENT JMS GETDIR CLA /IGNORE FLAG WORD TO TENTATIVE FILE JMS GETDIR DCA AIW /# OF ADDITIONAL INFO WORDS TAD NENTRY DCA DKNT L$: JMS GETDIR SNA CLA JMP MT$ /AN EMPTY ENTRY TAD AIW CIA TAD (3 TAD DIRPTR DCA DIRPTR /POINT TO FILE LENGTH JMS GETDIR /GET NEG OF NUMBER OF BLOCKS IN FILE SNA JMP 2$ /A TENTATIVE FILE, IGNORE CIA TAD USED DCA USED ISZ NFILES JMP 2$ MT$: JMS GETDIR CIA TAD UNUSED DCA UNUSED ISZ NMTS 2$: ISZ DKNT /ANY MORE ENTRIES IN THIS SEGMENT? JMP L$ /YES TAD LINK SNA CLA JMP 3$ TAD NSEGS CMA TAD LINK /ASSUME LINKS ARE IN ORDER SZA CLA JMP I (BADDIR STA /GO TO NEXT SEGMENT TAD DIRPTR AND (7400 TAD (400 JMP LUP$ 3$: JMS I (PRINFO LVDIR, JMS I (CRLF JMS I (CRLF JMP I DIRT DKNT, 0 USED, 0 /NO. OF BLOCKS USED UNUSED, 0 /# OF UNUSED BLOCKS ON DEVICE NFILES, 0 /# OF FILES NMTS, 0 /# OF EMPTIES NSEGS, 0 /# OF DIRECTORY SEGMENTS USED NENTRY, 0 /- # OF ENTRIES IN SEGMENT STBLK, 0 /STARTING BLOCK # OF FIRST FILE IN SEGMENT LINK, 0 /LINK TO NEXT SEGMENT AIW, 0 /# OF ADDITIOANAL INFORMATION WORDS GETDIR, 0 CDF 0 TAD I DIRPTR CDF 10 ISZ DIRPTR JMP I GETDIR DIRPTR, 0 PAGE PRINFO, 0 TAD EXTEN SNA CLA JMP 2$ /JUST # OF FREE BLOCKS UNLESS /E TAD I (NFILES SNA JMP 2$ STL JMS I (DPRINT .PRINT " FILES IN " TAD I (USED STL JMS I (DPRINT .PRINT " BLOCKS" STA TAD I (NSEGS SNA CLA JMP 1$ .PRINT " USING " TAD I (NSEGS STL JMS I (DPRINT .PRINT " SEGMENTS" 1$: JMS I (CRLF 2$: TAD I (UNUSED STL JMS I (DPRINT .PRINT " FREE BLOCKS" TAD EXTEN SNA CLA JMP I PRINFO TAD I (NMTS CLL RAR SNA CLA JMP 3$ .PRINT " (" TAD I (NMTS STL JMS I (DPRINT .PRINT " EMPTIES)" 3$: CLA IAC TAD I (AIW SZA CLA JMS PRAIW JMP I PRINFO PRAIW, 0 JMS I (CRLF TAD I (AIW CIA STL JMS I (DPRINT .PRINT " EXTRA INFO WDS" JMP I PRAIW PAGE DVALID, 0 STL CLA RAR /4000 DCA I (DIRPTR JMS I (GETDIR CLL TAD (200 SNL CLA JMP BADDIR JMS I (GETDIR SNA JMP BADDIR TAD (-400 /REMEMBER COS SMA CLA JMP BADDIR JMS I (GETDIR CLA /LINKS THOROUGHLY CHECKED ELSEWHERE JMS I (GETDIR SNA JMP OKDIR TAD (-1400 CLL TAD (-1000 SZL CLA JMP BADDIR OKDIR, JMS I (GETDIR SPA SNA CLA JMP I DVALID BADDIR, .PRINT "?BAD DIRECTORY" JMP I (LVDIR SLTM, 0 SLKNT, ZEROSL, 0 TAD (-10 DCA SLTM TAD (SLOTAB-1 DCA X0 DCA I X0 ISZ SLTM JMP .-2 JMP I ZEROSL CNTSLT, 0 TAD (-10 DCA SLTM DCA SLKNT TAD (SLOTAB-1 DCA X0 L$: TAD I X0 SNA CLA ISZ SLKNT ISZ SLTM JMP L$ .PRINT "FREE DEVICE SLOTS: " TAD I (FREEDV JMS XPRINT .PRINT ", FREE BLOCK SLOTS: " TAD SLKNT JMS XPRINT JMS I (CRLF JMP I CNTSLT XPRINT, 0 SNA JMP 1$ JMS I (OPRINT JMP I XPRINT 1$: .PRINT "NONE" JMP I XPRINT PAGE |
Added src/os8/uni/CUSPS/RESOVD.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | /OVRDRV - OVERLAY DRIVER FOR RESORC /ASSUMES EVERYTHING IS IN FIELD 1 / / / / / / / / / /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 /V1B /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 .GLOBAL XFERV /THIS IS THE MAIN DRIVER SECTION .SECT SWAPER,R .GLOBAL SWPTAB 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 .FSECT TRANVC FIELD SWAPER SIZE=14 /MODIFY THIS LINE TO CHANGE THE SIZE OF THE TABLE *SIZE^4 XFERV, 0 SWAPER |
Added src/os8/uni/CUSPS/RKLFMT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 | /RK8E/RK8L DISK 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. / / / / / / / / / / /RK8E/RK8L DISK FORMATTER PROGRAM: MD-08-DHRKD-D /MAINDEC-08-DHRKD-D-D / /MODIFIED FOR OS8V3D BY ED STEINBERGER / DLSC=6740 /LOAD SECTOR COUNTER DSKP=6741 /SKIP ON TRANSFER DONE OR ERROR DCLR=6742 /CLEAR DISK CONTROL LOGIC DLAG=6743 /LOAD ADDRESS AND GO DLCA=6744 /LOAD CURRENT ADDRESS DRST=6745 /READ STATUS REGISTER DLDC=6746 /LOAD COMMAND REGISTER DMAN=6747 /LOAD MAINTENANCE / LDSC=JMS I XXLDSC IOTCHN=JMS I XCHANG LODTRK=JMS I XWRTRK REDDSK=JMS I XRDTRK RECAL=JMS I XRESTR RECEIV=JMS I XWAIT KILBUF=JMS I XKLBUF ERROR=JMS I XERRO RDSTAT=JMS I XRDST LDADD=JMS I XLDAD DSKSKP=JMS I XSDKP LDCMD=JMS I XLDCM LDCUR=JMS I XLDCA CLRALL=JMS I XCLDR PRNTER=JMS I XPRN OCTEL=JMS I XFROCT TWOCT=JMS I XTOCT TYPE=JMS I XPRINT CRLF=JMS I XCRLF APT8A=JMS I XAPT8 TIME=JMS I XTIME TICK=JMS I XTICK KAERRO=JMS I XAERRO / *0 / 304 /REV D 5001 0002 0003 / *10 / AUTO10, 0 / AUTO11, 0 / *20 / 0000 /PSEUDO SWITCH REGISTER 0 /CONTROL WORD 1 - USE PSUEDO SWITCHES **ES** 400 /CONTROL WORD 2 - SET CONSOLE PACKAGE ACTIVE **ES** 0000 /RESERVED XAPT8, APT8 XTIME, KTIME XAERRO, AERRO XTICK, KTICK XCHANG, CHANG XWRTRK, WRTTRK XRDTRK, REDTRK XRESTR, RESTOR XWAIT, WAIT XKLBUF, KLBUF XPRINT, PRINT XERRO, ERRO XRDST, RDST XSDKP, SDKP XLDCM, LDCM XLDCA, LDCA XLDAD, LDAD XCLDR, CLDR XXLDSC, XLDSC XPRN, PRN XFROCT, FROCT XTOCT, TOCT XCRLF, UPONE XLOTRK, LOTRK XHITRK, HITRK BGNBUF, WRKBUF AMOUNT, 0 SWITCH, 0 K0003, 0003 K4, 4 K0007, 0007 K0040, 0040 M313, -313 K0277, 0277 K0200, 0200 K0260, 0260 K4000, 4000 K7735, 7735 K7760, 7760 K0400, 400 K0037, 0037 KCDF, CDF M4, -4 M10, -10 DRIVNO, 0 CHAR, 0 LOWAD, 0 HIGHAD, 0 TRKCNT, 0 DSKCNT, 0 SBCNT1, 0 STCNT1, 0 STCNT2, 0 STCNT3, 0 TCNTR1, 0 TCNTR2, 0 TCNTR3, 0 TCNTR4, 0 TCNTR5, 0 / GDREG2, 0 EXBIT, 0 CMREG, 0 STREG, 0 DAREG, 0 CAREG, 0 ADREG, 0 DTREG, 0 BGNTST, FRMDSK HOMEMA, 0 DATCNT, 0 CLKCNT, -2 / XMOVE, MOVE LOC8ED, 0 XEND, ENDTST SOFT, 0 ADPOT1, DSK0A DSK0A, 0 DSK1A, 0 DSK2A, 0 DSK3A, 0 DSK4A, 0 DSK5A, 0 DSK6A, 0 DSK7A, 0 ADPOT2, DSK0B DSK0B, 0 DSK1B, 0 DSK2B, 0 DSK3B, 0 DSK4B, 0 DSK5B, 0 DSK6B, 0 DSK7B, 0 PCOUNT, 0 /USED ONLY IF ON APT / *200 / BGN, RIF DCA HOMEMA TAD HOMEMA TAD KCDF /MAKE HOMEDF DCA .+1 HLT /MAKE DF=IF /NOW TEST FOR APT SYSTEM /IF ON APT TERMINAL MESSAGES ARE SKIP /TO AVOID TIMING PROBLEMS WITH THE SYSTEM APT8A /TEST FOR APT SYSTEM JMS XC8PSW /GET SR=. *.-1 /**ES** NOP /**ES** IOTCHN /CHANGE DEVICE TO SWR3-8 CRLF CRLF PRNTER /PRINT "RK8E/RK8L DISK FORMATTER PROGRAM" MES1 /MESSAGE 1 POINTER CRLF PRNTER /PRINT "FOR ALL QUESTIONS" MES2 /MESSAGE POINTER 2 ALLAGN, TAD M10 DCA STCNT1 /COUNTER FOR AMOUNT OF DISKS DCA LOC8ED DCA STCNT2 SAMAGN, CRLF PRNTER /PRINT "FORMAT DISK ? " MES3 /MESSAGE POINTER 3 TAD STCNT2 TAD K0260 TYPE /TYPE DISK NUMBER QUES1, TAD K0277 TYPE /TYPE ? TAD ADPOT1 TAD STCNT2 DCA STCNT3 RECEIV /WAIT FOR CHARACTER JMP NOTDSK /NO NOT THIS DISK JMP QUES1 /NEITHER YES OR NO WASDSK, ISZ LOC8ED CLA CLL CMA NOTDSK, DCA I STCNT3 /YES, WAS CLEAR DISK POINTER ISZ STCNT2 /UPDATE POINTER ISZ STCNT1 /COUNT DISKS JMP SAMAGN /ASK ABOUT NEXT / DONE, CRLF PRNTER /PRINT "ARE YOU SURE ?" MES4 /MESSAGE POINTER 4 RECEIV /WAIT FOR CHARACTER JMP ALLAGN /NO, START ALL OVER JMP DONE /NEITHER TYPE ? TAD LOC8ED CIA SNA /ANY DISKS JMP BGN /NO, OPERATOR ERROR DCA LOC8ED /YES, AMOUNT LOCATED / /FIRST RECALIBRATE AND FORMAT IN WRITE ALL MODE /ALL DISK DRIVES SELECTED BY OPERATOR,. MAKE THE FIRST /TWO WORDS OF EVERY DISK SECTOR EQUAL TO THE /ABSOLUTE DISK ADDRESS. / FRMDSK, JMS I XMOVE /MOVE DISK POINTERS TAD LOC8ED DCA AMOUNT TAD AMOUNT DCA DSKCNT /COUNTER FOR AMOUNT OF DISKS DCA TCNTR4 TAD ADPOT2 DCA TCNTR5 /A FEW COUNTERS TAD I TCNTR5 SZA CLA /FORMAT THIS DISK JMP FORMAT /YES, GO NEXFRM, ISZ TCNTR5 /NO, TRY NEXT ISZ TCNTR4 JMP .-5 HLT /WHAT HAPPENED???? / FORMAT, TAD TCNTR4 AND K0003 /MASK OUT CLL RAL /MAKE DISK NUMBER DCA DRIVNO TAD TCNTR4 AND K4 SZA CLA TAD K0200 DCA EXBIT /SET EXTENDED DRIVE BIT RECAL /RECALIBRATE THIS DRIVE JMP RENEX1 /RECALIBRATE NEXT EXISTING DCA LOWAD /SETUP ADDRESS POINTER DCA HIGHAD /SETUP ADDRESS POINTER TAD M313 DCA TRKCNT /COUNTER FOR AMOUNT OF TRACKS / / WRTDSK, TICK /TIMING FOR APT IF NEEDED. -4 /OTHERWISE BOTH ARE SKIPPED LODTRK /FORMAT A TRACK JMP RENEX1 /TO NEXT DISK CLA CLL TAD LOWAD TAD K0040 DCA LOWAD /UPDATE TO NEXT TRACK SZL CLA /SET EXTENDED BIT ISZ HIGHAD /YES ISZ TRKCNT /UPDATE TRACK COUNTER JMP WRTDSK /DO NEXT TRACK RENEX1, ISZ DSKCNT /UPDATE DISK COUNTER JMP NEXFRM /DO NEXT DISK / /ROUTINE TO CHECK ADDRESSING INFORMATION ON THE DISK. /THE FIRST TWO WORDS OF EVERY SECTOR SHOULD EQUAL /THE ABSOLUTE DISK ADDRESS. ALL OTHER DATA IS /NOT CHECKED. / CHKDSK, TAD AMOUNT DCA DSKCNT /AMOUNT OF DISKS DCA TCNTR4 TAD ADPOT2 DCA TCNTR5 TAD I TCNTR5 /SOFTWARE INFORMATION SZA CLA /CHECK THIS DISK JMP CHKDAT /CHECK THIS ONE NEXCHK, ISZ TCNTR5 /UPDATE FOR NEXT DISK ISZ TCNTR4 JMP .-5 HLT /WHAT HAPPENED????? / CHKDAT, TAD TCNTR4 AND K0003 /MASK OUT CLL RAL /MAKE DRIVE NUMBER DCA DRIVNO TAD TCNTR4 AND K4 SZA CLA TAD K0200 DCA EXBIT /SET EXTENDED DRIVE BIT RECAL /RECALIBRATE JMP RENEX2 /TRY NEXT DRIVE DCA LOWAD DCA HIGHAD /SETUP STARTING DISK ADDRESS TAD M313 DCA TRKCNT /AMOUNT OF TRACKS TO DO JMP CHECK / PAGE / CHECK, TICK /TIMING FOR APT IF NEEDED. -4 /SKIPPED IF NOT REQUIRED. REDDSK /READ AND CHECK ONE CYLINDER JMP RENEX2 /TO NEXT DISK CLA CLL TAD LOWAD TAD K0040 DCA LOWAD /UPDATE TO NEXT CYLINDER SZL CLA /TIME TO SET EXTENDED BIT ISZ HIGHAD /YES, SET IT ISZ TRKCNT /UPDATE CYLINDER COUNTER JMP CHECK /CHECK NEXT ONE RENEX2, ISZ DSKCNT /UPDATE DISK COUNTER JMP NEXCHK /CHECK NEXT / / TAD 22 AND K4000 /TEST FOR APT SNA CLA /ARE WE? JMP ENDTST /NO. NORMAL RUN ISZ PCOUNT /INCREMENT PASS COUNT JMP FRMDSK /LOOP PROGRAM ENDTST, CRLF PRNTER /PRINT "PASS COMPLETE" TEXEND CRLF PRNTER /PRINT "TRY SAME SEQUENCE" MES5 RECEIV /WAIT FOR INPUT FROM OPERATOR JMP ALLAGN /NO, ASK AGAIN JMP .-5 JMP FRMDSK /TRY SAME SEQUENCE / / /SUBROUTINE FOR "ERRORS," SCOPE LOOPS, AND /ERROR TYPEOUTS. / ERRO, 0 CLA CLL IAC TAD ERRO /GET PC STORED DCA RETRN1 /STORE FOR RETURN KAERRO /NOTIFY APT OF ERROR IS NEED BE CRLF CRLF TAD I ERRO /GET TEXT POINTER AND K0007 /MASK 9-11 TAD HEDTAD /MAKE ERROR HEADER TAD DCA .+1 HLT /MODIFIED HEADER TAD DCA .+2 PRNTER /MODIFIED HEADER POINTER HLT CRLF PRNTER /PRINT PC: TEXPC TAD ERRO /GET PC POINTER OCTEL /PRINT PC STORED TAD I ERRO /GET TEXT POINTER CLL RAL SNL JMP NTGD /NOT GD: REGISTER DCA ERRO PRNTER /PRINT GD: TEXGD TAD GDREG2 OCTEL /PRINT FOUR OCTAL SKP CLA NTGD, DCA ERRO PRNTER TEXEX TAD EXBIT SZA CLA IAC OCTEL TAD XTEXT DCA PCNTR2 TAD XREG DCA AUTO10 TAD K7771 DCA PCNTR1 /COUNTER FOR # OF HEADS CLA CLL CMA RAL DCA PCNTR3 STRAUT, TAD ERRO /GET TEXT POINTER SMA JMP NOTEX /NOT THIS ONE CLL RAL DCA ERRO TAD PCNTR2 /GET TEXT MESSAGE POINTER ISZ PCNTR2 ISZ PCNTR2 DCA .+2 /STORE FOR PRNTER PRNTER /PRINT XX: HLT /MODIFIED TEXT POINTER TAD I AUTO10 OCTEL /PRINT FOUR OCTAL ISZ PCNTR3 SKP CLA CRLF AGAIN, ISZ PCNTR1 JMP STRAUT /CHECK FOR NEXT XX: JMP I RETRN1 /RETURN TO QUESTION NOTEX, CLL RAL DCA ERRO ISZ PCNTR2 ISZ PCNTR2 ISZ AUTO10 JMP AGAIN / RETRN1, 0 XTEXT, TEXCM XREG, EXBIT PCNTR1, 0 PCNTR2, 0 PCNTR3, 0 HEDTAD, TAD HEDLST HEDLST, ERTX1 ERTX2 ERTX3 ERTX4 K7771, 7771 / PAGE / /ROUTINE TO FORMAT CYLINDER /MAKE FIRST TWO WORDS OF EVERY SECTOR /EQUAL TO DISK ADDRESS. / WRTTRK, 0 CLA CLL CML RAR DCA GDREG2 /SETUP COMPARE REGISTER KILBUF /CLEAR BUFFER TAD K7735 /AMOUNT OF SECTORS TO DO DCA TCNTR1 /SETUP COUNTER DCA TCNTR2 /STARTING WITH 0 TAD K7760 /STOPPER DCA TCNTR3 /SECTOR COUNTER POINTER STOP LODR1, TAD TCNTR2 AND K0037 /MASK SECTOR BITS TAD LOWAD /ADD IN CYLINDER DCA I XLOTRK /SETUP TRACK WORD IN BUFFER TAD EXBIT /ADD IN EXTENDED BIT TAD HIGHAD TAD DRIVNO /ADD IN DRIVE NUMBER DCA I XHITRK /SETUP TRACK WORD IN BUFFER TAD I XHITRK AND K7577 TAD HOMEMA /CURRENT FIELD TAD K5000 /FUNCTION WRITE ALL LDCMD /LOAD COMMAND TAD EXBIT LDSC /LOAD EXTENDED DRIVE BIT CLA /CLEAR EXTENDED DRIVE BIT TAD BGNBUF LDCUR /LOAD CURRENT ADDRESS TAD I XLOTRK LDADD /LOAD TRACK AND GO DSKSKP /SKIP ON FLAG JMP .-1 /WAIT FOR FLAG RDSTAT /READ STATUS TAD K4000 SZA CLA /WAS STATUS 0? JMP LODER /ERROR, STATUS ON WRITE ALL ISZ TCNTR2 ISZ TCNTR3 /COUNT FIRST REVOLUTION SKP CLA /STILL IN FIRST REV. DCA TCNTR2 /SETUP FOR SECTOR "1" ISZ TCNTR2 ISZ TCNTR1 /UPDATE SECTOR COUNTER JMP LODR1 /TRY NEXT SECTOR ISZ WRTTRK JMP I WRTTRK /THIS CYLINDER DONE LODER, ERROR /ERROR, STATUS 3602 /TEXT POINTER / RECAL /CLEAR CONTROL AND DRIVE JMP I WRTTRK /TO NEXT DISK CRLF PRNTER /PRINT "TRY SAME AGAIN" ERMES1 RECEIV /WAIT FOR YES OR NO JMP LODER-2 /WAS A NO TRY SAME CYLINDER JMP .-5 /WAS NEITHER ASK AGAIN JMP WRTTRK+1 /YES, TRY NEXT K5000, 5000 K7577, 7577 / / /SUBROUTINE TO READ STATUS REGISTER / RDST, 0 IOT5, DRST /READ STATUS IOT SKP ERHLT5, JMS XC8ERR /SKIP TRAP ERROR. DCA STREG /SAVE RESULTS TAD STREG JMP I RDST /EXIT / /SUBROUTINE TO LOAD CURRENT ADDRESS REGISTER / LDCA, 0 DCA ADREG /SAVE IN ADDRESS TAD ADREG DCA CAREG /SETUP INITIAL CURRENT ADDRESS TAD ADREG IOT4, DLCA /LOAD CURRENT ADDRESS IOT JMP I LDCA /EXIT ERHLT4, JMS XC8ERR /SKIP TRAP ERROR. JMP .-1 / / /SUBROUTINE TO LOAD TRACK ADDRESS REGISTER / LDAD, 0 DCA DAREG /SAVE OUTBOUND DATA TAD DAREG IOT3, DLAG /LOAD DISK ADDRESS REGISTER JMP I LDAD /EXIT ERHLT3, JMS XC8ERR /SKIP TRAP ERROR. JMP .-1 / / /SUBROUTINE TO LOAD COMMAND REGISTER / LDCM, 0 DCA CMREG /SAVE OUTBOUND DATA DCA INMODE JMS XC8CKP /CHECK FOR CONTROL CHARACTERS. CLA CLA TAD CMREG IOT6, DLDC /LOAD COMMAND REGISTER JMP I LDCM /EXIT ERHLT6, JMS XC8ERR /SKIP TRAP ERROR. JMP .-1 / / /SUBROUTINE ISSUE "DLSC" XLDSC, 0 IOT0, DLSC JMP I XLDSC ERHLT0, JMS XC8ERR JMP .-1 /SUBROUTINE TO ISSUE "DSKP" DISK SKIP IOT / SDKP, 0 IOT1, DSKP /DISK SKIP IOT SKP /DID NOT SKIP ISZ SDKP JMP I SDKP /EXIT / /SUBROUTINE TO ISSUE "DCLR" CLEAR IOT / CLDR, 0 IOT2, DCLR /DCLR "CLEAR IOT" JMP I CLDR /EXIT ERHLT2, JMS XC8ERR /SKIP TRAP ERROR. JMP .-1 / /ROUTINE TO ZERO WORK BUFFER / KLBUF, 0 CLA CLL CMA TAD BGNBUF /START OF BUFFER -1 DCA AUTO10 /SETUP AUTO INDEX TAD K7400 DCA DATCNT /SETUP COUNTER DCA I AUTO10 /CLEAR BUFFER ISZ DATCNT /UPDATE COUNTER JMP .-2 /NOT ALL CLEARED YET JMP I KLBUF /BUFFER CLEARED K7400, 7400 / PAGE / / /ROUTINE TO READ AND CHECK A CYLINDER / REDTRK, 0 TAD K7735 DCA TCNTR1 /AMOUNT OF SECTORS TO DO DCA TCNTR2 /STARTING WITH 0 TAD K7760 DCA TCNTR3 KILBUF /CLEAR BUFFER CHKR1, CLA CLL CMA DCA SOFT /SETUP SOFT ERROR FLAG TAD BGNBUF LDCUR /LOAD CURRENT ADDRESS TAD HIGHAD /EXTENDED CYLINDER BIT TAD DRIVNO /CURRENT DRIVE TAD HOMEMA /CURRENT FIELD LDCMD /LOAD COMMAND TAD EXBIT /LOAD EXTENDED DRIVE BIT LDSC CLA /CLEAR EXTENDED DRIVE BIT TAD TCNTR2 AND K0037 /MASK SECTOR BITS OFF TAD LOWAD /ADD IN OTHER DISK ADDRESS LDADD /LOAD AND GO DSKSKP /DISK SKIP IOT JMP .-1 /WAIT FOR FLAG RDSTAT /READ STATUS TAD K4000 /ADD IN FUDGE FACTOR SNA CLA /SKIP IF ERROR JMP STAOK /STATUS O.K. TAD STREG /GET STATUS READ AND K0010 SNA CLA /WAS IT A CRC JMP STAER /NO, JUST A HARD ERROR DCA SOFT /CLEAR SOFT ERROR FLAG STAOK, TAD CMREG /GET LAST COMMAND AND K0007 TAD EXBIT /ADD EXTENDED DRIVE BIT CIA TAD I XHITRK /GET WORD READ FROM DISK SNA CLA /SKIP IF ERROR JMP FRSTOK /FIRST WORD O.K. TAD I XHITRK /GET WORD DCA DTREG /SETUP ERROR PRINTER TAD CMREG AND K0007 DCA GDREG2 /SETUP GOOD FOR PRINTER JMP DATER /NO, DATA ERROR FRSTOK, TAD I XLOTRK /GET WORD READ CIA TAD DAREG /COMPARE TO GOOD SNA CLA /SKIP IF ERROR JMP DATOK /WORD O.K. ISZ ADREG /SETUP ERROR PRINTER TAD DAREG DCA GDREG2 /SETUP GOOD WORD FOR PRINTER TAD I XLOTRK /GET WORD READ DCA DTREG /SETUP FOR PRINTER JMP DATER /DATA ERROR DATOK, TAD SOFT /GET SOFT ERROR FLAG SNA CLA /WAS IT CLEAR JMP STAER /YES, STATUS ERROR TAD TCNTR2 TAD K0003 /ADVANCE 3 SECTORS DCA TCNTR2 ISZ TCNTR3 JMP CHKR1 /MORE TO FORMAT ISZ REDTRK JMP I REDTRK /EXIT, O.K. DATER, TAD K7741 DCA TCHKT /SETUP TEXT POINTER JMP CHKER /ERROR STAER, TAD K3600 DCA TCHKT /SETUP TEXT POINTER CLA CLL CML RAR DCA GDREG2 /SETUP GOOD STATUS PRINTER CHKER, ERROR /ERROR, READ DATA TCHKT, 0 /MODIFIED TEXT POINTER RECAL /CLEAR CONTROL AND DRIVE JMP I REDTRK /TO NEXT DISK CRLF PRNTER /PRINT "TRY SAME AGAIN" ERMES3 RECEIV JMP DATER-2 /CHECK NEXT JMP .-5 /RE-PRINT JMP REDTRK+1 /TRY SAME AGAIN / /THIS ROUTINE WILL TEST FOR APT AND NOP CONSOLE /PACKAGE IF NEED BE / APT8, 0 TAD 22 SMA CLA JMP I APT8 TAD 22 AND K7377 /ON APT. NOP CONSOLE PACKAGE DCA 22 TAD 22 AND K0007 /ISOLATE DRIVE NUMBER OR /NUMBER OF DRIVES TO BE DONE DCA STCNT1 TAD 22 AND K0100 SNA CLA /SINGLE DRIVE TESTING JMP MULDSK /NO.SEVERAL TO DO TAD ADPOT1 /GET DISK POINTER TAD STCNT1 /ESTABLISH DRIVE TO DO DCA STCNT1 CLL CLA CMA /-1 DCA I STCNT1 CLL CLA CMA /ONE DISK TO DO DCA LOC8ED JMP I BGNTST MULDSK, TAD STCNT1 /DRIVE TO BE DONE CMA DCA STCNT1 TAD ADPOT1 /GET DISK POINTER TAD STCNT2 /ESTABLISH DRIVE TO BE DONE DCA STCNT3 ISZ LOC8ED CLL CLA CMA DCA I STCNT3 /DO THIS DRIVE ISZ STCNT2 ISZ STCNT1 JMP MULDSK+3 /MORE TO DO TAD LOC8ED CIA DCA LOC8ED /NUMBER TO BE DONE JMP I BGNTST K7377, 7377 PAGE / /SUBROUTINE TO PRINT TWO OCTAL / TOCT, 0 DCA SBCNT1 /SAVE AC TAD SBCNT1 RAR RTR AND K0007 TAD K0260 TYPE /PRINT FIRST BYTE TAD SBCNT1 AND K0007 TAD K0260 TYPE /PRINT SECOND BIT JMP I TOCT /EXIT / / / /ROUTINE TO DO CRLF / UPONE, 0 CLA CLL TAD K0215 TYPE TAD K0212 TYPE TYPE /TYPE ONE NULL JMP I UPONE / K0215, 0215 K0212, 0212 / /ROUTINE TO PRINT FOUR OCTAL / FROCT, 0 RTL RTL DCA UPONE TAD M4 DCA TOCT TAD UPONE AND K0007 TAD K0260 TYPE TAD UPONE RTL RAL DCA UPONE ISZ TOCT JMP .-11 TAD K0240 TYPE JMP I FROCT / /SUBROUTINE TO PRINT TEXT / PRN, 0 CLA CLL TAD I PRN /GET POINTER ISZ PRN DCA FROCT TAD I FROCT AND K7700 SNA JMP EXIT SMA CML IAC RTR RTR RTR TYPE TAD I FROCT AND K0077 SNA JMP EXIT TAD K3740 SMA TAD K4100 TAD K0240 TYPE ISZ FROCT CLA CLL JMP PRN+5 EXIT, CLA CLL JMP I PRN / K4100, 4100 K3740, 3740 / /ROUTINE TO TYPE / PRINT, 0 TLS TSF JMP .-1 TCF CLA JMP I PRINT K0240, 0240 K7700, 7700 K0077, 0077 K0010, 10 K7741, 7741 K3600, 3600 /ROUTINE TO WAIT FOR KEY FROM OPERATOR / WAIT, 0 CLA CLL KCC KSF JMP .-1 KRB TLS TSF JMP .-1 AND K0177 TAD K0200 DCA CHAR TAD CHAR DCA C8CHAR ISZ INMODE JMS XC8CNT /CHECK FOR CONTROL CHARACTERS. CLA CLA DCA INMODE KCC TCF TAD CHAR CIA TAD K0316 SNA CLA /WAS IT A NO JMP I WAIT /YES ISZ WAIT /UPDATE RETURN POINTER TAD CHAR CIA TAD K0331 SNA CLA /WAS IT A YES ISZ WAIT /WAS A YES JMP I WAIT /WAS NEITHER K0177, 0177 K0316, 0316 K0331, 0331 / PAGE / / /ROUTINE TO RECALIBRATE SELECTED DRIVE / RESTOR, 0 CLA CLL IAC /ENABLE CLEAR CONTROL CLRALL /CLEAR CONTROL TAD DRIVNO /CURRENT DRIVE TAD HOMEMA /CURRENT FIELD LDCMD /LOAD COMMAND TAD EXBIT LDSC /LOAD EXTENDED DRIVE BIT CLA CLL CML RAR /MAYBE EXPECTED STATUS DCA GDREG2 /SETUP COMPARE REGISTER CLA CLL CML RTL /ENABLE RECALIBRATE BIT CLRALL /"RECALIBRATE" DSKSKP /DISK SKIP IOT JMP .-1 /WAIT FOR FIRST DONE FLAG RDSTAT /READ STATUS TAD K2000 SNA /WAS IT BUSY AND DONE JMP RESTA /YES, THEN ITS O.K. TAD K2000 /NO, THEN IT MUST BE JUST DONE SZA CLA /WAS IT JUST DONE JMP RESTER /NO, ERROR RESTA, CLRALL /CLEAR STATUS TAD K0200 /ENABLE SET SECOND DONE FLAG TAD CMREG /ORIGINAL COMMAND LDCMD /LOAD COMMAND DSKSKP /DISK SKIP IOT JMP .-1 /WAIT FOR SECOND DONE RDSTAT /READ STATUS TAD K4000 SZA CLA /WAS IT ONLY DONE FLAG JMP RESTER /NO, ERROR STATUS CLA CLL IAC /ENABLE CLEAR CONTROL CLRALL /CLEAR CONTROL ISZ RESTOR /UPDATE FOR GOOD RECALIBRATE JMP I RESTOR /RETURN RESTER, ERROR /ERROR, STATUS 3603 /TEXT POINTER / CRLF PRNTER /PRINT "TRY RECALIBRATE" ERMES2 RECEIV /WAIT FOR INPUT JMP .+3 /TRY NEXT EXISTING DISK JMP .-5 JMP RESTOR+1 /TRY AGAIN CLA CLL IAC TAD AMOUNT /GET AMOUNT ON SYSTEM SNA /WAS THERE ONLY 1 LEFT JMP I XEND /LAST DISK DCA AMOUNT /MORE TO GO BUT CLEAR THIS ONE DCA I TCNTR5 /CLEAR DISK POINTER JMP I RESTOR /TRY NEXT ONE / / /ROUTINE TO CHANGE DEVICE CODES / CHANG, 0 JMS XC8SW /GET SWITCH REGISTER BITS. RAR SNL CLA /CHANGE DEVICE CODES? JMP I CHANG /NO. JMS XC8SW /GET SWITCHES. AND A0770 DCA CSAVE1 /SAVE DESIRED TAD CCNTR1 DCA CSAVE2 TAD CHNPOT DCA RESTOR CHANGR, TAD I RESTOR /GET ADDRESS POINTER DCA KWAIT TAD I KWAIT /GET OLD CODE AND A7007 /MASK TAD CSAVE1 /ADD IN DESIRED DCA I KWAIT /STORE DESIRED DEVICE CODE ISZ RESTOR /UPDATE POINTER ISZ CSAVE2 /UPDATE CHANGE COUNTER JMP CHANGR JMP I CHANG /EXIT TO PROGRAM. / KWAIT, 0 A7007, 7007 A0770, 0770 CSAVE1, 0 CSAVE2, 0 CCNTR1, 7771 CHNPOT, CHNPOT+1 IOT0 IOT1 IOT2 IOT3 IOT4 IOT5 IOT6 K2000, 2000 / /THIS ROUTINE WILL GENERATE TIMING IF NEEDED BY THE APT SYSTEM / KTICK, 0 CLL CLA TAD 22 /GET HARDWARE CONFIGURATION AND K4000 SNA CLA /ON APT? JMP EXTICK /NO TAD I KTICK /GET TIMING VALUE DCA COUNT /ESATABLISH TIME ISZ CLKCNT JMP EXTICK /RETURN TAD COUNT /GET VALUE OF COUNTER DCA CLKCNT /STORE IT ISZ CNT /TIMING NEED BE DONE? JMP EXTICK TIME TAD KCNT /TIMING VALUE DCA CNT /INIT SECOND COUNTER EXTICK, ISZ KTICK /MOVE BEYOND TIMING VALUE JMP I KTICK COUNT, 0 CNT, -2 KCNT, -2 K0100, 0100 / / /ROUTINE TO NOTIFY APT OF USE IF REQUIRED / KTIME, 0 IOF /DISABLE INTERUPTS RDF /GET PRESENT DATA FIELD TAD KCDF DCA .+1 /ESTABLISHES CURRENT DATA FIELD HLT CIF 70 /FIELD 7. LOCATION OF UV PROM JMS I K6500 CLL CLA JMP I KTIME / K6500, 6500 / PAGE / / /THIS ROUTINE WILL NOTIFY APT OF AN ERROR AND SEND PC TO /APT SYSTEM. ALL ERRORS WILL RESULT IN PROGRAM HLT AND A TIME OUT ON /APT. APT WILL TAKE OVER FROM THERE. / AERRO, 0 IOF /DISABLE INTERUPTS CLA TAD 22 /CHECK FOR APT SYSTEM SMA CLA JMP I AERRO /RETURN NOT ON APT TAD I KERRO /GET PC DCA SAVPC RDF /GET CURRENT DATA FIELD TAD KCDF DCA .+2 TAD SAVPC HLT /REPLACED WILL CURRENT DATA FIELD CIF 70 /CHANGE IF FOR APT RETURN TO FIELD 7 JMP I K6520 /NOTIFIES APT OF ERROR HLT / K6520, 6520 KERRO, ERRO SAVPC, 0 / / /ROUTINE TO MOVE DISK POINTERS / MOVE, 0 TAD ADPT1 DCA AUTO10 TAD ADPT2 DCA AUTO11 TAD M10 DCA MCNTR1 TAD I AUTO10 /FROM HERE DCA I AUTO11 /TO THERE ISZ MCNTR1 /4 POINTERS JMP .-3 JMP I MOVE / ADPT1, DSK0A-1 ADPT2, DSK0B-1 MCNTR1, 0 / / TEXPC, TEXT "PC:" TEXGD, TEXT "GD:" TEXEX, TEXT "EX:" TEXCM, TEXT "CM:" TEXST, TEXT "ST:" TEXDA, TEXT "DA:" TEXCA, TEXT "CA:" TEXAD, TEXT "AD:" TEXDT, TEXT "DT:" / ERTX1, TEXT "READ STATUS ERROR" ERTX2, TEXT "DISK DATA ERROR" ERTX3, TEXT "WRITE STATUS ERROR" ERTX4, TEXT "RECALIBRATE STATUS ERROR" / ERMES1, TEXT "TRY TO FORMAT SAME CYLINDER AGAIN?" ERMES2, TEXT "TRY TO RECALIBRATE SAME DISK AGAIN?" ERMES3, TEXT "TRY TO CHECK SAME CYLINDER AGAIN?" / TEXEND, TEXT "RK8E/RK8L DISK FORMATTER PASS COMPLETE" MES1, TEXT "RK8E/RK8L DISK FORMATTER PROGRAM" MES2, TEXT "FOR ALL QUESTIONS, ANSWER Y FOR YES OR N FOR NO." MES3, TEXT "FORMAT DISK " MES4, TEXT "ARE YOU SURE?" MES5, TEXT "FORMAT SAME DISK(S) AGAIN?" / PAGE / WRKBUF=. / HITRK=. LOTRK=.+1 / ENDBUF=.+377 / /CONSOL SRC -V2-R0- CONSOLE PACKAGE /LAS= CALL C8CKSW OR JMS XC8SW /THIS WILL READ THE SWITCH REGISTER FROM THE PLACE SPECIFIED /BY LOCATION 20 BIT 0. /THE PROGRAN SHOULD CHECK FOR A CONTROL CHARACTER FRON THE TERMINAL /EVERY FIVE(5) SECONDS OR SOONER. /LOCATIONS THAT NEED TO BE SET UP FOR USING THE CONSOLE PACKAGE. /CNTVAL IN XC8PASS THIS LOCATION DETERMINDS THE NUMBER OF /PROGRAM COMPLETIONS THAT ARE NEEDED BEFORE THE PASS MESSAGE IS TYPED /THE VALUE SHOULD PUT THE PASS MESSAGE OUT IN THE RANGE OF 1 TO 5 MINUTES. /THIS SHOULD BE A POSITIVE NUNBER. /C8STRT THIS IS FOUND IN CNTRL ROUTINE CONTROL R PART /IT IS THE RETURN WHEN CONTROL R IS ENTERED (RESTART PROGRAM) /THE RETURN JUMPS TO XDOSW WHICH CONTAINS C8STRT SO PUT THE LABEL C8STRT /WHERE YOU WANT TO RESTART THE PROGRAM. /SETUP1 IN XC8ERR THIS IS THE MASK BIT FOR HALT ON ERROR /PLACE THE CORRECT BIT IN THIS LOCATION FOR HALTING ON ERRORS. /SETUP2 IN XC8PASS THIS IS THE MASK FOR HALT A END OF PASS. /THE CALL TABLE IS A CONDITIONAL ASSEMBLY. /TO ASSEMBLE THE CALL REMOVE THE / BEFORE CONSOL=0. /IN COMBINING THE CONSOL PACKAGE TO A DIAGNOSTIC. /THE CALL TABLE IS TO BE AT THE BEGINNING OF A PROGRAM. /CONSOL=0 PSKF= 6661 PCLF= 6662 PSKE= 6663 PSTB= 6664 PSIE= 6665 GTF= 6004 ACL= 7701 CAF= 6007 MQL= 7421 MQA= 7501 / *3000 / /********************************************************************* /C8PASS /THIS IS CALLED AT THE END OF EACH PROGRAM COMPLETION /THE VALUE OF** CNTVAL** WILL BE DETERMINED BY THE TIME IT TAKES /THE PROGRAM TO COMPLETE THIS MANY C8PASS TO BE IN THE 1 TO 4 MINUTE /RANGE / C8PASS=JMS XC8PAS /EX. OF CALL C8PASS / HLT /HALT IF NON CONSOL PACKAGE / JMP START1 /CONTINUE RUNNING THIS PROGRAM /RETURN TO LOCATION CALL PLUS ONE WITH THE AC=0 IF NON CONSOL PACKAGE AND HLT /IF CONTINUE TO RUN THEN RETURN TO CALL PLUS2 AC=0 /THE LOCATION SETUP2 IS THE MASK BIT FOR THE HALT AT END OF PASS /CHECK THAT IT IS CORRECT FOR THE CURRENT PROGRAM /CALLS USED BY XC8PAS ARE CHKCLA-XC8CRLF-XC8OCTA-XC8SW-XC8PNT-XC8INQ- XC8PAS, 0 CLA JMS CHKCLA /IS WORD 22 BIT 3 ACTIVE CONSOLE? JMP DOPACK /IS CLASSIC JMS C8GET /GET THE REGISTERS. JMS XC8SW /DEACTIVE CONSOL CHECK SR SETTING AND (400 /FOR HALT ON END OF C8PASS SZA CLA /1= HALT 0 CONTINUE JMP I XC8PAS /GO TO HALT JMP C8BY1 /CONTINUE ON RUNNING PROGRAM DOPACK, JMS CKCOUT /CLASS CHECK C8PASS COUNT JMP C8BY1 /C8PASS COUNT NOT DONE REDO PROGRAM ISZ PASCNT /C8PASS COUNT DONE SET C8PASS COUNT JMS XC8CRLF JMS XC8PNT /C8PRNT BUFFER MESPAS / TAD PASCNT /GET NUMBER JMS XC8OCTA /CONVERT IT TO ASCII JMS XC8CRLF /DO A CARRIAGE RETURN JMS C8GET /GET THE REGISTERS. JMS XC8SW /CHECK A HALT AT END OF C8PASS SETUP2, AND (400 /MASK BIT SZA CLA /HALT =1 NO SKIP CONTINUE =0 JMS XC8INQ /STOP PROGRAM EXECUTION-LOOK FOR INPUT C8BY1, ISZ XC8PAS /BUMP RETURN JMP I XC8PAS CKCOUT, 0 TAD DOSET /CHECK IF SET UP NEEDED SZA CLA /0=SET UP C8PASS COUNT VALUE /1=C8PASS COUNT VALUE OK JMP NOSET /C8PASS COUNT VALUE ON TAD CNTVAL /GET COUNT VALUE FOR THIS PROG CMA /SET TO NEGATIVE DCA DOCNT /STORE IN HERE ISZ DOSET /INDICATE VALUE SET UP NOSET, ISZ DOCNT /COUNT THE NUMBER OF PASSES JMP C8BY1 /EXIT FOR ANOTHER PASS DCA DOSET /SET TO C8PRNT C8PASS ISZ CKCOUT /BUMP RETURN FOR JMP I CKCOUT /C8PASS C8TYPE OUT DOCNT, 0 PASCNT, 0 / DOSET, 0 CNTVAL, 0 MESPAS, TEXT "DHRKDD PASS " /********************************************************************* /C8CKSW /THIS ROUTINE CAN BE USED INPLACE OF A READ THE SWITCHES LAS. /ROUTINE THAT WILL CHECK WHERE TO READ THE /C8 SWITCHES FROM IE. FROM PANEL OR PSEUDO SWITCH REGISTER /THE SELECTION IS DETERMINED BY THE STATE OF BIT 0 IN LOCATION 21. /C8CKSW= JMS XC8SW /EX. JMS XC8SW /READ THE C8SWIT REGISTER /RETURN WITH THE CONTENTS OF SWITCH REGISTER /RETURN TO NEXT LOCATION FOLLOWING CALL WITH THE AC= TO VALUE OF C8SWIT SETTING /CALLS USED ARE-XC8CKPA- XC8SW, 0 JMS XC8CKPA /GO CHECK THE IF ANY CONTRL NOP TAD 21 /GET WD FOR INDICATOR SPA CLA /CHECK IF FROM PANEL 4000 7614 /DO LAS AND SKIP GET FROM PANEL WITH LAS TAD 20 /PSEUDO SWITCH JMP I XC8SW /EXIT WITH STATUS BIT IN AC. /********************************************************************* /C8TTYI /THIS ROUTINE WILL LOOK FOR A INPUT FROM THE TERMINAL /AND REMOVE ANY PARITY BITS, THEN MAKE IT 8 BIT ASCI. / C8TTYI= JMS XC8TTY /EX. JMS XC8TTYI /READ CHAR FROM THE CONSOL DEVICE / /RETURN TO CALL PLUS ONE AC CONTAINS THE CHAR /CALLS USED -NONE- BUT C8CHAR IS OFF PAGE AND IN ROUTINE CALLED XC8ECHO / / XC8TTY, 0 KSF /LOOK FOR KEYBOARD FLAG JMP .-1 KRB /GET CHAR AND (177 /MASK FOR 7 BITS TAD (200 /ADD THE EIGTH BIT DCA C8CHAR /STORE IT TAD C8CHAR JMP I XC8TTY /EXIT /********************************************************************* /C8PRNT /THIS ROUTINE WILL TYPE THE CONTENTS OF THE C8 PRINT BUFFER. THE LOCATION /OF THE BUFFER WILL BE IN THE ADDRS FOLLOWING THE CALL. PRINTING OF THE BUFFER /WILL STOP WHEN A 00 CHAR IS DETECTED. CHARACTERS ARE PACKED 2 PER WORD. / C8PRNT= JMS XC8PNT /EX. JMS XC8PNT /C8PRNT THE CONTENTS OF THE FOLLOWING BUFFER / MESS77 /LOCATION OF C8PRNT BUFFER /C8PRNT WILL USE THE LOCATION FOLLOWING THE CALL AS THE POINTER FOR THE /C8PRNT ROUTINE.RETURN TO CALL PLUS TWO WITH AC= 0 /CALLS USED ARE-XC8TYPE-XC8PNT XC8PNT, 0 CLA CLL TAD I XC8PNT /GET C8PRNT BUFFERS STARTING LOCATION DCA PTSTOR /STORE IN PTSTOR ISZ XC8PNT /BUMP RETURN C8DO1, TAD I PTSTOR /GET DATA WORD AND (7700 /MASK FOR LEFT BYTE SNA /CHECK IF 00 TERMINATE JMP I XC8PNT /EXIT SMA /IS AC MINUS CML /MAKE CHAR A 300 AFTER ROTATE IAC /MAKE CHAR A 200 AFTER ROTATE RTR RTR RTR /PUT CHAR IN BITS 4-11 MAKE IT 8 BIT ASCII JMS XC8TYPE /C8PRNT IT ON CONSOLE TAD I PTSTOR /GET DATA WORD AND (0077 /MASK FOR RIGHT BYTE SNA /CHECK IF 00 TERMINATOR JMP I XC8PNT //EXIT TAD (3740 /ADD FUDGE FACTOR TO DETERMINE IF 200 SMA /OR 300 IS TO BE ADD TO CHAR TAD (100 /ADD 100 TAD (240 /ADD 200 JMS XC8TYPE /C8TYPE ONLY BITS 4-11 ISZ PTSTOR /BUMP POINTER FOR NEXT WORD JMP C8DO1 /DO AGAIN PTSTOR, 0 /STOR FOR C8PRNT BUFFER /************************************************************************** /C8PAUS /THIS ROUTINE WILL CHECK IF THE CONSOL PACKAGE IS ACTIVE,IF ACTIVE /IT WILL RETURN TO CALL PLUS ONE AC= 0. AND DO THAT INSTRUCTION. /IF THE CONSOL PACKAGE IS NOT ACTIVE THE CALL WILL BE REPLACED /WITH A 7402 HALT AND THEN RETURN TO THE HALT. / C8PAUS= JMS XC8PAU / / /EX. JMS XC8PAUS /CHECK IF ON ACTIVE CONSOL IF NOT HALT HERE / ANYTHING /RETURN HERE IF ON ACTIVE CONSOL / / /CALLS USED ARE -CHKCLA- XC8PAU, 0 CLA CLL JMS CHKCLA /CHECK LOC 22 BIT 3 CONSOLE BIT JMP C8DO3 /GO DO CONSOL PART RETURN CALL +1 CMA /DEACTIVE CONSOLE PACKAGE PUT HLT IN CALL TAD XC8PAU /GET CORRECT RETURN ADDRS DCA XC8PAU /SET UP RETURN TAD (7402 /GET CODE FOR HLT DCA I XC8PAU /PUT HALT IN CALL LOCATION C8DO3, JMP I XC8PAU /GO TO HALT OR RETURN TO NEXT LOCATION PAGE /********************************************************************* /C8CNTR /THIS ROUTINE WILL CHECK FOR THE PRESENCE OF CONTROL CHARACTERS /IT WILL CHECK FOR THE FOLLOWING CHAR C-R-Q-L-S / C8CNTR= JMS XC8CNT /EX. JMS XC8CNTR /CHECK FOR CONTROL CHARACTER / JMP ANYTHING /LOC FOLLOWING CALL IS FOR CONTINUING THE PROGRAM / JMP ANYTHING /LOC. IS FOR RETURN IF INMODE SET AND NOT CNTRL CHAR / /RETURN IS TO CALL PLUS ONE IF CONTINUE /RETURN IS TO CALL PLUS TWO IF INMODE SET AND NOT CONTROL CHAR /RETURN IS TO CALL PLUS TWO IF INMODE IS NOT SET AND NO /CONTROL CHAR ..THIS WILL PRINT THE CHARACTER AND A ? /CLEAR THE AC AND RETURN CALL+2. /CALLS USED ARE-CHKCLA-XC8TYPE-XC8CRLF-C8GET-UPAROW-XC8TYI-XC8PSW- / / / XC8CNT, 0 DCA ACSAVE /SAVE THE AC JMS CHKCLA /CHECK LOC.22 BIT3 FOR CONSOLE BIT JMP .+3 /ON ACTIVE CONSOLE TAD ACSAVE /DEACTIVE CONSOLEGET AC FOR RETURN JMP I XC8CNT /EXIT NOT ON ACTIVE CONSOLE GTF DCA FLSAVE MQA DCA MQSAVE /SAVE THE MQ DCA INDEXA /SET DISPLACEMENT INTO TABLE B TAD XTABLA /GET ADDRS OF TABLE A DCA GETDAT /CONTAINS POINTER TO CONTROL CHAR REDOA, TAD I GETDAT /GET CONTROL CHAR FROM TABLE SNA /CHECK FOR A 0 END OF TABLE JMP DONEA /END OF TABLE NO CONTROL CHAR TAD C8CHAR /COMPARE CHAR TO CONTROL CHAR SNA CLA /0 IF MATCH JMP GOITA /MATCH ISZ INDEXA /NO MATCH NOT END OF TABLE REDO ISZ GETDAT /BUMP INDEX FOR EXIT WHEN CONTROL FOUND JMP REDOA /BUMP GETDAT FOR COMPARE OF NEXT CNTRL CHAR. DONEA, TAD INMODE /CHECK IF PROGRAM EXPECTS CHAR SZA CLA /1=CHAR EXPECTED 0= NO CHAR EXPECTED JMP EXITA /CHAR EXPECTED TAD C8CHAR /GET CHAR - NOT CONTROL + NOT EXPECTED JMS XC8TYPE /C8PRNT CHAR TAD (277 /GET CODE FOR "?" JMS XC8TYPE JMS XC8CRLF ISZ XC8CNT /BUMP RETURN JMP I XC8CNT /EXIT CALL+2 EXITA, ISZ XC8CNT /BUMP RETURN FOR MAIN PROGRAM CHECK OF CHAR TAD C8CHAR /PUT CHAR IN AC. JMP I XC8CNT /EXIT GOITA, TAD C8CHAR /GET THE CONTENTS OF CHAR TAD (100 /ADD 100 TO FORM A GOOD ASCII CHARACTER DCA C8CHAR /RESTORE COFFECT CHAR TAD XTABLB /GET START OF TABLE B TAD INDEXA /GET NOW FAR INTO TABLE DCA GOTOA /STORE IT TAD I GOTOA /GET THE ROUTINE STARTTING ADDRESS DCA GOTOA /STORE IT IN HERE JMP I GOTOA /GOTO CONTROL CHAR ROUTINE GOTOA, 0000 /ADD OF CNTRL ROUTINE TO EXECUTE INDEXA, 0000 /DISPLACEMENT INTO CNTRL TABLE GETDAT, 0000 /LOCATION OF ADDRS OF CONTROL CHAR. XTABLA, TABLA /ADDRS OF TABLEA XTABLB, TABLB /ADDRS OF TABLEB TABLA, 7575 /CNTRL C BACK TO MONITOR 203 7564 /CNTRL L SWITCH ERROR PRINTTING DEVICE 214 7557 /CNTRL Q START DISPLAYING CHAR. AGAIN 221 7556 /CNTRL R BACK TO BEGINNING OF PROGRAM 222 7555 /CNTRL S STOP SENDING CHAR TO DISPLAY WAIT FOR CNTRL Q 223 7573 /CNTRL E CONTINUE WITH PROGRAM 205 7574 /CONTROL D CHANGE SWITCH REGISTER ON FLY 0000 TABLB, CNTRLC CNTRLL CNTRLQ CNTRLR CNTRLS CNTRLE CNTRLD / /CONTROL Q /START SENDING CHAR. TO THE DISPLAY /THIS WILL RETURN CONTROL TO CALL THAT WAS SET BY /THE CALL FOR CONTROL S. / CNTRLQ, DCA INMODE /SET SOFT FLAG FOR UNEXPECTED CHAR TAD C8SETS /CHECK IF CONTROL S TYPED IN SZA CLA JMP BYRETR /CONTROL S TYPED IN JMS C8GET /NO CONTROL S TYPED PREVIOUSLY JMP I XC8CNTR /LEAVE VIA CNTR ENTRY ADDRESS BYRETR, DCA C8SETS /CLEAR THE SOFT FLAG JMS C8GET /RESTORE REGISTERS JMP I C8RETR /EXIT TO ADDRESS SET BY CONTROL S / / /CONTROL R /GO TO THE QUESTION C8SWIT CNTRLR, DCA TTYLPT /CLEAR THE TYPE FLAG SET TO TTY DCA C8SETS /CLEAR SOFT FLAG FOR CNTRL S DCA INMODE JMS UPAROW /PRINT THE ^ AND C8CHAR C8BY4, DCA C8SWST /CLEAR FLAG FOR CNTRL D OR R JMP I XDOSW /GO TO ADDRS OF C8SWIT XDOSW, BGN /DOSW IS LABEL FOR C8SWIT QUESTION / / /CONTROL S /STOP SENDING CHAR. TO DISPLAY UNTIL A ^Q IS RECEIVED / / CNTRLS, TAD C8SETS /IF1 DO NOT STORE IN C8RETR SZA CLA JMP C8DO7 /DONT SET UP C8RETR IAC /MAKE RETURN CALL PLUS 2 TAD XC8CNT /GET RETURN FOR THIS CALL DCA C8RETR /STORE IT HERE FOR USE BE CNTROL Q C8DO7, ISZ C8SETS /SET FLAG TO SAVE CALL JMS XC8TTYI /LOOK FOR THE INPUT JMS C8GET /GET REGISTERS JMS XC8CNTR /CHECK FOR THE CONTROL CHAR CLA JMP CNTRLS /IF NOT A CNTRL Q R C REASK C8SETS, 0 C8RETR, 0 / /SWITCH OUTPUT FROM ONE OUTPUT DEVICE TO ANOTHER - THE TWO OUTPUTS ARE THE /CONSOLE AND THE PRINTER WITH DEVICE CDOE 66. / / CNTRLL, TAD TTYLPT /GET PRESENT C8SWIT INDICATOR CMA /COMPLEMENT IT DCA TTYLPT /STOR NEW C8SWIT JMS UPAROW /C8PRNT ^ AND CHAR ON NEW DEVICE JMS C8GET /RESTORE THE REGISTERS JMP I XC8CNT /EXIT / /CONTROL E /CONTINUE RUNNING FROM A INQUIRE OR ERROR / / CNTRLE, JMS UPAROW /PRINT THE CONTROL CHAR JMS C8GET /GET THE REGISTERS JMP I XC8CNT /RETURN TO CALL PLUS ONE / /CONTROL C /RETURN TO MONITOR CONTROL C CNTRLC, DCA TTYLPT /CLEAR THE LPT FLAG TO PRINT ON DISPLAY JMS UPAROW /C8PRNT A^ AND LETTER IN CHAR CDF CIF /GO TO 0 FLD CAF /CLEAR THE WORLD JMP I (7600 /GO TO DIAGNOSTIC MONITOR /********************************************************************* / / / PAGE / /CONTROL D /CHANGE THE SWITCH REGISTER ANYTIME CNTRL D AND RETURN TO /THE PROGRAM RUNNING. CNTRLD, JMS UPAROW TAD C8SETD /CHECK IF THE RETURN ADDRS IS SAFE SZA CLA JMP C8DO11 /DO NOT CHANGE THE RETURN ADDRS TAD XC8CNT /GET THE RETURN ADDRS AND SAVE IT DCA C8RETD /SAVE THE RETURN HERE ISZ C8SETD /INDICATE RETURN SAVED DONT DISTROY C8DO11, JMS XC8PSW /GO CHANGE THE SWITCH REGISTER DCA C8SETD /CLEAR THE FLAG JMS C8GET /RESTORE THE AC MQ LINK ETC JMP I C8RETD /RETURN TO THE PROGRAM / C8SETD, 0 C8RETD, 0 /THIS WILL TYPE A UP ARROW AND THE CHAR IN C8CHAR. UPAROW, 0 /C8PRNT THE "^" AND THE CHAR C8TYPED IN TAD (336 /CODE FOR ^ JMS XC8TYPE TAD C8CHAR /C8TYPE THE CHAR JMS XC8TYPE JMS XC8CRLF JMP I UPAROW /EXIT /*********************************************************************** C8GET, 0 CLA TAD MQSAVE MQL /RESTORE MQ TAD FLSAVE RAL /RESTORE THE LINK CLA TAD ACSAVE /RESTORE THE AC JMP I C8GET /GET THE REGISTERS /******************************************************************** /C8INQU /C8INQU ROUTINE WILL PRINT A WAITING /AND THE PROGRAM IS EXPECTING A CONTROL CHAR INPUT /IF CONTINUE FROM CONTROL CHAR RETURN IS CALL PLUS ONE /IF NO CONTROL CHAR ENTERED THEN WAITING IS REPRINTED /AND PROGRAM WAITS FOR A CONTROL CHAR AGAIN. / C8INQU = JMS XC8INQ /EX. JMS XC8INQ /C8 WILL PRINT A WAITINGAND WAIT FOR INPUT / DO ANYTHING /RETURN IS CALL PLUS ONE AC =0 CONTINUE /CALLS USED ARE -CHKCLA-XC8PNT-XC8TYI-C8GET-XC8CNTR- XC8INQ, 0 CLA CLL JMS CHKCLA /CHECK LOC 22 BIT 3 CONSOLE BIT SKP /ACTIVE CONSOLE PACKAGE JMP I XC8INQ /NOT CONSOLE LEAVE JMS XC8PNT WATMES /INQUIR WAITTING JMS XC8TTYI /GET CHARACTER JMS C8GET JMS XC8CNTR /CHECK IF CONTROL CHARACTER JMP I XC8INQ /EXIT AND CONTINUE JMP XC8INQ+1 /REASK WATMES, TEXT "WAITING " /********************************************************************* /C8SWIT /ROUTINE WILL CHECK IF CONSOL IS ACTIVE IF IT IS ACTIVE DISPLAY /SW QUESTION . IN NOT ACTIVE IT WILL NOT PRINT THE SW QUESTION BUT /RETURN TO CALL PLUS ONE AC=0. /C8SWIT WILL SET UP THE PSEUDO SWITCH /REGISTER WITH THE NEW DATA ENTERED / / C8SWIT = JMS XC8PSW /EX. JMS XC8PSW /SET UP PSEUDO C8SWIT REGISTER IF /ON THE CONSOL PACKAGE. RETURN IS CALL PLUS ONE AC = 0 /CALLS USED ARE -CHKCLA-XC8PSW-XC8PNT-XC8OCTA-XC8TYPE- XC8PSW, 0 JMS CHKCLA /CHECK LOC 22 BIT 3 CONSOLE BIT SKP /ACTIVE CONSOLE JMP I XC8PSW /DEACTIVE CONSOLE PACKAGE /RETURN WITHOUT ASKING PSEUDO SWITCH TAD C8SWST /IS THE SOFT FLAG SET FOR SWITCH? SZA CLA /SKIP IF ONE ENTRY AT ATIME OK JMP C8BY4 /SECOND ENTRY WITH OUT A EXIT GO TO SW QUESTION ISZ C8SWST /FIRST ENTRY SET FLAG C8RDPS, JMS XC8PNT /C8PRNT SR= MESA TAD 20 /GET CONTENTS OF SW JMS XC8OCTA /CONVERT IT TO ASCII TAD (40 /GET SPACE JMS XC8TYPE ISZ INMODE /SET FLAG FOR CHAR EXECTED JMS XC8ECHO /LOOK FOR INPUT JMS TSTCHA /NOT CONTROL TEST IT IS LEGAL TAD C8CHAR /STORE NEW CHAR IN SW REG DCA 20 TAD (-3 /GET A MINUS 3 DCA TMPCNT /STORE IN TEMP COUNT GETCH1, JMS XC8ECHO /GET NEXT CHAR JMS TSTCHA /CHECK IF CR + GOOD CHAR TAD 20 /GET C8SWIT REGISTER RTL CLL /ROTATE IT LEFT 3 PLACES RAL TAD C8CHAR /GET CHAR + ADD IT TO PREVIOUS CONTENTS DCA 20 /SAVE NEW CONTENTS ISZ TMPCNT /BUMP COUNT JMP GETCH1 /JMP BACK + GET NEXT CHAR JMP ENDIT /END 4 CHAR C8TYPED IN TSTCHA, 0 CIA /CMPL CHAR IN AC TAD (215 /TEST IF IT IS A CARRIAGE RETURN SNA CLA /SKIP IN NOT CR. JMP ENDIT /WAS CARRIAGE RETURN TAD C8CHAR /NOT CR. GET CHAR TAD (-260 /CHECK IF IT IS IN RANGE SPA CLA /IF NOT POSITIVE C8ERR CHAR SMALLER THEN 260 JMP ERR1 /C8ERR - CHAR TOO SMALL TAD C8CHAR /GET CHAR TAD (-270 /GET A -270 + CHECK IF IT IS LARGER THEN 7 SMA CLA /SKIP IF LESS THEN 7 JMP ERR1 /C8ERR ON CHAR NOT IN RANGE TAD C8CHAR /GET CHAR AND (7 /MASK FOR RIGHT BYTE DCA C8CHAR /STORE IN CHAR /GET CHAR IN AC JMP I TSTCHA /EXIT ERR1, TAD (277 /C8PRNT JMS XC8TYPE /? JMS XC8CRLF / JMP C8RDPS /EXIT + ASK AGAIN ENDIT, JMS XC8CRLF /DO A CR LF DCA C8SWST /CLEAR THE PSW ENTRY FLAG JMP I XC8PSW /EXIT ROUTINE C8SWST, 0 TMPCNT, 0 MESA, TEXT "SR= " PAGE /C8OCTA /OCTAL TO ASCII CONVERSION /THIS ROUTINE WILL TAKE THE OCTAL NUMBER IN THE AC AND CONVERT IT TO ASCII /THE RESULT WILL BE PRINTED ON THE CONSOL TERMINAL / C8OCTA= JMS XC8OCT / /EX. JMS XC8OCTA /AC CONTAINS NUMBER TO BE CHANGE / RETURN IS TO CALL PLUS ONE AC=0 / /CALLS USED ARE -XC8TYPE- XC8OCT, 0 CLL RTL RTL /POSITION THE FIRST CHAR FOR PRINTING DCA C8TMP1 /SAVE CORRECT POSITIONED WORD HERE TAD (-4 DCA C8CKP /STORE COUNTER IN HERE C8DO4, TAD C8TMP1 /GET FIRST NUMBER AND (0007 /MASK TAD (260 /ADD THE PRINT CONSTANT JMS XC8TYPE /TYPE THE NUMBER TAD C8TMP1 / RTL RAL /PUT NEXT NUMBER IN POSITION DCA C8TMP1 /STORE IT ISZ C8CKP /DONE YET WITH FOUR NUMBERS JMP C8DO4 /NOT YET DO MORE JMP I XC8OCT /DONE WITH FOUR C8TMP1, 0 C8CKP, 0 /********************************************************************* /C8CRLF /C8TYPE CR AND LF WITH FILLERS FOLLOWING EACH LF AND CR / / C8CRLF= JMS XC8CRL / /EX. JMS XC8CRLF /C8PRNT A CR AND LF WITH FILL / /RETURN TO CALL PLUS ONE AC =0 /CALLS USED ARE -XC8TYPE- XC8CRLF,0 CLA CLL TAD (215 /GET CODE FOR CR JMS XC8TYPE TAD FILLER CMA DCA FILCNT /STORE FILLER IN HERE TAD (212 /GET CODE FOR LF C8DO2, JMS XC8TYPE ISZ FILCNT /CHECK ON FILLER CHAR JMP C8DO2 /TYPE A NON PRINTING CHAR JMP I XC8CRL /EXIT FILLER, 0004 /FILLER SET FOR 4 CHAR FILCNT, 0 /COUNTER FOR FILL //************************************************************* /C8CKPA /THIS ROUTINE WILL CHECK IF A CHARACTER WAS ENTERED FROM THE /TERMINAL. IFTHE FLAG IS SET AND THE CONSOLE PACKAGE IS /ACTIVE A CHECK IS MADE TO DETERMIND IF IT IS A CONTROL CHAR. /IF IT WAS A CONTROL CHAR THEN ITS CONTROL FUNCTION IS PERFORMED. /IF NOT A CONTROL CHARACTER OR A CONTROL E-D-L-O- IT WILL DO /THE CONTROL FUNCTION AND RETURN TO CALL PLUS 2. /A NON CONTROL CHARACTER WILL BE PRINTEDAND A "?" IT WILL RETURN TO /CALL PLUS 2. /IF NO FLAG IS SET OR THE CONSOL IS NOT ACTIVE THE RETURN IS TO /CALL PLUS 1. / C8CKPA= JMS XC8CKP /EX. JMS XC8CKPA /CALL TO CHECK IF CONTROL CHAR SET / ANYTHING(SKIP) /RETURN IF NOT FLAG OR NOT CONSOLE ACTIVE / ANYTHING(JMP EXIT SKIP CHAIN) /RETURN IF NOT CONTROL OR CONTINUE CONTROL /CALLS USED ARE -XC8TTYI-XC8CNTR-C8GET- XC8CKP, 0 DCA ACSAVE /SAVE THE AC GTF /SAVE THE FLAGS DCA FLSAVE /SAVE THE FLAGS MQA /PUT MQ IN AC DCA MQSAVE /SACE THE MQ KSF /CHECK THE KEYBOARD FLAG JMP C8BY3 /EXIT TO CALL PLUS 1 JMS CHKCLA /CHECK LOC 22 BIT 3 CONSOLE BIT SKP /ACTIVE CONSOLE PACKAGE JMP C8BY3 /EXIT TO CALL PLUS 1 JMS XC8TTYI /GET THE CHAR JMS C8GET /GET THE FLAGS JMS XC8CNTR /CHECK IF CONTROL CHAR. NOP /RETURN IF A CONTINUE CHAR. ISZ XC8CKP /BUMP RETURN FOR CALL PLUS 2 C8BY3, JMS C8GET /GET REGISTERS JMP I XC8CKP /SAY GOOD BY //********************************************************************* /C8ECHO /THIS ROUTINE WILL LOOK FOR A CHAR FROM THE KEYBOARD. STORE IT IN LOCATION CHAR /CHECK IF IT WAS A CONTROL CHARACTER - SET INMODE - PRINT CHARACTER / C8ECHO = JMS XC8ECH /EX. JMS XC8ECHO /LOOK FOR CONSOL CHAR C8PRNT IT /RETURN CALL PLUS ONE AC = CHAR C8TYPED IN /CALLS USED ARE -XC8TTYI-XC8CNTR-C8GET-XC8ECH-XC8TTYPE / XC8ECH, 0 JMS XC8TTYI /WAIT FOR CHAR FROM KEYBOARD JMS C8GET /RESTORE THE REGISTERS ISZ INMODE /SET INMODE IDENTIFING THIS AS A EXPECTED CHAR JMS XC8CNTR /GO CHECK IF IT IS A CONTROL CHAR JMP I XC8ECH /WAS A CONTROL CHAR - CONTINUE RUNNING JMS XC8TYPE /NOT A CONTROL CHAR C8PRNT IT DCA INMODE /CLEAR FLAG THAT CHAR EXPECTED TAD C8CHAR /GET CHAR IN AC JMP I XC8ECH /EXIT C8CHAR, 0 INMODE, 0 /********************************************************************* /C8TYPE /THIS ROUTINE WILL C8PRNT ON THE CONSOLE OR THE LPT WITH DEVICE CODE 66. / / C8TYPE= JMS XC8TYP /EX. JMS XC8TYPE /C8PRNT THE CHAR IN THE AC. / /RETURN CALL PLUS ONE AC =0000 /DO NOT CLEAR THE LINK IN THIS ROUTINE NEEDED BYC8OCT /CALLS USED ARE -C8HANG-XC8CNTR-XC8PNT-XC8CRLF-XC8INQU- XC8TYP, 0 DCA PNTBUF /STORE CHAR TAD TTYLPT /CHECK O=TTY 7777=LPT SZA CLA JMP XDOLPT /DO OUT PUT ON LPT TAD PNTBUF TLS TSF JMP .-1 TCF JMP C8BY5 XDOLPT, TAD PNTBUF /GET CHAR PSTB PCLF /C8PRNT IT JMS C8HANG /CHECK KEYBOARD IF HUNG PCLF /CLEAR THE FLAG C8BY5, 7600 /CLEAR THE AC JMP I XC8TYP /EXIT PNTBUF, 0 TTYLPT, 0 C8HANG, 0 CLA / TAD C8BY5 /GET CONSTANT 7600 DCA PNTBUF /PNTBUF IS NOW A COUNTER PSKF /SKIP ON PRINTER DONE SKP /NOT DONE YET JMP I C8HANG /SAW FLAG DONE ISZ C8CONT /FIRST COUNTER FAST ONE JMP .-4 /CHECK IF FLAG SET YET ISZ PNTBUF /MADE 4096 COUNTS ON FAST COUNTER JMP .-3 /KEEP IT UP FOR 5 SEC TAD XC8CNTR /GET THE RETURN ADDRESS IN CONTROL DCA C8HANG /SAVE IT IN HANG DCA TTYLPT /ALLOW PRINTING ON TTY JMS XC8PNT MESHANG /LPT ERROR JMS XC8CRLF JMS XC8INQU /PRINT WAITING JMP I C8HANG /CONTINUE TO SAVE ADDRESS C8CONT, 0 /COUNTER FOR TIMER MESHANG,TEXT "LPT ERROR" PAGE /********************************************************************* /******************************************************************* /THIS ROUTINE WILL CHECK LOCATION 22 THE HARD WARE CONFIG WORD. /TO SEE IF THE CONSOLE BIT 3 )400) IS SET IF SET THEN RETURN /TO CALL PLUS TWO FO A ACTIVE CONSOLR PACKAGE AC=0 /IF NOT SET THEN TO CALL PLUS ONE FOR A DEACTIVE CONSOLE PACKAGE. CHKCLA, 0 CLA TAD 22 /GET THE COTENTA OF LOCATION 22 AND (400 /MASK FOR BIT 3 (400 SNA CLA / ISZ CHKCLA /ACTIVE CONSOLE PACKAGE RETURN /CALL PLUS ONE (1) FOR ACTIVE JMP I CHKCLA /DEACTIVE CONSOLE PACKAGE RETURN /CALL PLUS TWO (2) /C8ERR /THIS ROUTINE WILL DETERMINE WHAT TO DO WHEN A C8ERR IS ENCOUNTERED /WILL CHECK IF CLASSIC SYSTEM, WILL CHECK C8SWIT REGISTERS. / C8ERR= JMS XC8ERR /EX. JMS XC8ERR /GO TO C8ERR CALL IF NOT CONSOL / /RETURN IS CALL PLUS ONE AC =0000 /CALLS USED ARE -CHKCLA-XC8CRLF-XC8SW-XC8INQU-XC8PNT-XC8OCTA- XC8ERR, 0 IOF DCA ACSAVE /SAVE AC GTF DCA FLSAVE /SAVE THE FLAGS MQA DCA MQSAVE /SAVE THE MQ CLA CLL CMA /SUBTRACT A 1 FOR TRUE LOCATION TAD XC8ERR /GET RETTURN LOCATION DCA PCSAVE /SAVE ADD OF C8ERR CALL JMS CHKCLA /CHECK LOC.22 BIT 3 CONSOL BIT SKP /ACTIVE CONSOLE PACKAGE JMP NTCLAS /NOT CLASSIC SYSTEM JMS C8GET /GET THE REGISTERS. JMS XC8SW /CHECK SWITCH REG FOR BIT THAT INDICATES /NO ERROR MESSAGE SETUP1, AND (0000 /MASK FOR BIT FOR NO ERROR PRINTING /IF THIS ERROR MESSAGE IS TO ALWAYS /BE PRINTED LEAVE AND VALUE AT 0000 SZA CLA /SKIP IF BIT IS 0 PRINT ERROR MESSAGE JMP C8DO10 /DO NOT PRINT JMS XC8CRLF JMS XC8PNT ERRMES /PRINT THE ERROR MESSAGE JMS XC8PNT MESPC /PRINT THE PC STSTEMENT TAD PCSAVE JMS XC8OCTA /CONVERT 4 DIGIT PC TO ASCII JMS XC8PNT MESAC /PRINT THE AC MESS TAD ACSAVE JMS XC8OCTA JMS XC8PNT MESMQ /PRINT MQ TAD MQSAVE JMS XC8OCTA JMS XC8PNT MESFL /PRINT FL TAD FLSAVE JMS XC8OCTA JMS XC8CRLF C8DO10, JMS C8GET /GET THE REGISTERS. JMS XC8SW /CHECK SWITCH REGISTER SKP CLA /SKIP IF BIT 0 SET JMP C8BY2 /LEAVE JMS XC8INQ /GO TO THE INQUIRE ROUTINE JMP C8BY2 /LEAVE NTCLAS, JMS C8GET /GET THE REGISTERS. JMS XC8SW /CHECK PSEUDO SWITCH REGISTER /CHECK THE C8SWIT REGISTER SKP CLA /SKIP IF HALT JMP I XC8ERR /NO HALT CONTINUE TAD (7402 /CODE FOR HLT DCA I PCSAVE /PUT IT IN CALL LOC. JMS C8GET JMP I PCSAVE /EXIT TO CALL AND HALT C8BY2, JMS C8GET /GET THE REGISTERS JMP I XC8ERR ERRMES, TEXT "DHRKDD FAILED " MESPC, TEXT " PC:" MESAC, TEXT " AC:" MESMQ, TEXT " MQ:" MESFL, TEXT " FL:" PCSAVE, 7777 ACSAVE, 7777 MQSAVE, 7777 FLSAVE, 7777 $$$ /#8 /#8 |
Added src/os8/uni/CUSPS/RLFRMT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 | /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/uni/CUSPS/RXCOPY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 | / 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:<DEV:/OPTION WHERE OPTIONS ARE C, P, N, M, OR V. / DEV:/R DEV:</R <DEV:/R THREE FORMATS FOR R, S, D, OR V. / / / WARNING!! / / THIS PROGRAM HAS TWO PATHOGENIC CONNECTIONS WITH THE STANDARD / RX HANDLERS / / IT IS ASSUMED THAT THE RX SYSTEM HANDLER HAS AT LOCATION 7623 / A WORD THAT CONTAINS THE 20 BIT IF BOOTED TO UNIT #1 / / IT IS ASSUMED THAT THE RX NON-SYSTEM HANDLER HAS ENTRY POINTS / CORRESPONDING TO UNIT NUMBERS AS FOLLOWS: / / UNIT LAST DIGIT OF ENTRY POINT / / 0 0 / 1 4 / 2 1 / 3 5 / / WHERE UNITS 2 AND 3 ARE A SECOND PAIR OF FLOPPIES ON A VT78 ONLY! / / MAGIC=7623 /WORD IN RX SYSTEM HANDLER HAS 20 IF BOOTED ONTO / /UNIT #1 (RIGHT-HAND ONE) OPT1=7643 /1ST COMMAND DECODER OPTION WORD OPT2=7644 /2ND COMMAND DECODER OPTION WORD OPT3=7645 /3RD COMMAND DECODER OPTION WORD BUFF=2000 /INPUT BUFFER FOR TTY MSGS TYP1=25 /DEVICE CODE FOR RX01 TYP2=32 /DEVICE CODE FOR MULTI-RX HANDLER WAS 27 (TAKEN BY TA8E) BSIZE=6400 /BUFFER SIZE IN OCTAL WORDS BSTART=20 /BUFFER START BHALF=BSIZE%2 /HALF OF BSIZE USR=200 /ENTRY POINT OF USR NOMAT=2000 /NO MATCH OPTION MASK COPY=1000 /COPY OPTION MASK MATCH=4000 /MATCH OPTION MASK; NOTE SOME CODE !KNOWS! THIS IS 4000 READ=0100 /READ OPTION MASK VERSION=0004 /VERSION OPTION MASK PAUS=0400 /PAUSE OPTION MASK SINGLE=40 /SINGLE DENSITY FORMAT ONLY DOUBLE=200 /DOUBLE DENSITY FORMAT ONLY OLDOUB=400 /ORIGINAL POSITION OF DOUBLE BIT CHANGE=1 /IN OPTION WORD, 1 MEANS MUST FORMAT OUTPUT MEDIA / / CORE LAYOUT / / FIELD 0 / / RX BUFFER 0020-6417 / ERROR MSGS 6420-7177 / TTY HANDLER 7200-7577 / SYSTEM 7600-7777 / / FIELD 1 / / RX BUFFER 0020-6417 / INIT CODE 5000-6417 / PROGRAM 6420-7577 / SYSTEM 7600-7777 / / FIELD 2&3 (OPTIONAL) / / RX BUFFER 0020-6417 / / EXECUTION ORDER / / INIT CODE STARTS AT 6000, THEN TO 5000, 5200, 5400, 7110 / / MAIN LOOP IS AT 6420 / SERVICE SUBROUINES OCCUPY MOST OF REST OF THE FIELD / / / FLOPPY IOT'S / SDN=6755 LCD=6751 STR=6753 XDR=6752 SER=6754 FLINIT=6757 / AC7776=CLL CLA CMA RAL /SET AC TO -2 AC7775=CLL CLA CMA RTL /SET AC TO -3 AC0002=CLL CLA CML RTL /SET AC TO 2 AC4000=CLL CLA CML RAR /SET AC TO 4000 / / / THE OPTION WORDS FROM THE COMMAND DECODER ARE COMBINED INTO ONE WORD / HERE CALLED 'OPTION'. THE BITS IN OPTION ARE M,N,C,P,D,R,S,0,0,V,0,0. / NOTE THAT ONLY THE 'D' BIT HAS BEEN REPOSITIONED. / / WARNING! THE MEANING OF THE M AND C BITS ON INPUT IS DIFFERENT THAN THAT / WHILE THE PROGRAM IS ACTUALLY RUNNING. ON INPUT C IS COPY AND MATCH. / ON INPUT M IS MATCH WITHOUT COPY. WHILE THE PROGRAM IS RUNNING, M / IS MATCH (INDEPENDENT OF COPY), AND C IS COPY (INDEPENDENT OF MATCH). / / SUMMARY OF CONFIGURATION DEPENDENT VARIABLES / / ISVT78 1 IF A VT78, 0 IF NOT / ISBIG 1 IF GREATER THAN 12K, 0 IF NOT / ISDOUB 0 IF SINGLE DENSITY TRANSFER, 1 IF DOUBLE / / / SUMMARY OF DERIVED VARIABLES (DO NOT APPEAR AS SUCH IN PROGRAM) / / HLFTRK (NOT ISBIG).AND.ISDOUB=1.AND.MATCH OPTION / SHORT ISDOUB=0.IOR.HLFTRK / SLOW ISVT78.AND.ISDOUB=1 / / I/O CONTROLL INFORMATION IS PLACED IN THE VARIABLES RIFN, ROFN / / RIFN 4000 IF RX02 OR RX03 HARDWARE / 0400 IF A DOUBLE DENSITY TRANSFER IS TAKING PLACE / 0020 IF UNITS 1 OR 3 / 0002 ALWAYS SET, INDICATES READ FUNCTION / 0001 IF UNITS 2 OR 3, SECOND PAIR ON VT78 / / ROFN WHICH IS THE SAME WORD FOR OUTPUT, GETS BITS IN / THE SAME FORMAT / / THE ABOVE VARIABLES RESULT IN THE SETTING OF THE FOLLOWING COUNTS / WHICH ARE PLACED HERE AND THERE IN CONVENIENT PAGES / / COUNT1 -20 IF ISDOUB=1, -10 IF NOT / COUNT2 -100 IF ISDOUB=1, -40 IF NOT / COUNT3 -400 IF ISDOUB=1, -200 IF NOT / COUNT4 -2 IF DOUBLE HEADED, -1 IF NOT / COUNT5 -2 IF HLFTRK, -1 IF NOT; / COUNT6 10 IF SHORT, 20 IF NOT / COUNT7 -1 IF SHORT, -2 IF NOT / COUNT8 3 IF SLOW, 2 IF NOT / COUNT9 SKP IF SLOW, IAC IF NOT / / FIELD 1 *5000 / / ADDITIONAL ONCE-ONLY CODE / / / / PRINT VERSION NUMBER EVEN IF SOME ERRORS / LOC3, TAD OPT2 /PRINT VERSION FIRST EVEN IF AN ERROR AND (VERSION SNA CLA /SKIP IF PRINTOUT NEEDED JMP VALID /NO, CONTINUE CHECKING TAD (VERBUF /ADDRESS OF MESSAGE IN FIELD 0 JMS TYPE / / / / VARIOUS CHECKING FOR ILLEGAL SWITCHES / VALID, TAD (-COPY-OLDOUB-1 /IS SWITCH OTHER THAN COPY OR DOUBLE? AND OPT1 /IN THE FIRST COMMAND DECODER OPTION WORD SZA CLA /SKIP IF OK JMP ERR17 TAD (-MATCH-NOMAT-PAUS-READ-SINGLE-VERSIO-1 AND OPT2 /CHECKING FOR OTHER THAN M,N,P,R,S,V SZA CLA JMP ERR17 TAD OPT3 /THIS WORD SHOULD BE 0, I.E. NO SWITCHES AT ALL SZA CLA /SKIP IF OK JMP ERR17 TAD OPT1 /DOUBLE, IF PRESENT, MUST CHANGE POSITION AND (OLDOUB /CHECK IT IN OLD POSITION SZA CLA /SKIP IF NOT THERE TAD (DOUBLE-OLDOUB /MOVE TO NEW POSITION NOFORM, TAD OPT1 /JOIN ALL SWITCHES INTO ONE WORD TAD OPT2 /COMBINING WORDS DCA OPTION /HOLD ALL TOGETHER FOR SIMPPLICITY TAD (BITTAB /LOAD UP TO TEST COMBINATIONS DCA TMP5 TAD OPTION DCA TMP6 VALLOO, TAD TMP6 CLL RAL /NEXT OPTION BIIT TO LINK DCA TMP6 TAD I TMP5 /NEXT MASK SNA /SKIP IF MORE TO DO JMP CROSS /CROSS TALK CHECKED OUT ISZ TMP5 /BUMP POINTER AND TMP6 /CHECK ILLEGAL POSSIBILITIES SNL /SKIP ONLY IF MASTER BIT IS ON CLA /GO OUT VIA JMP VALLOO SNA CLA /SKIP IF MASTER AND SOME OTHER MATCH, ILLEGAL JMP VALLOO ERR17, TAD (MSG17-MSG6 /SWITCHES ERROR MSG ERR6, TAD (MSG6-MSG5 ERR5, TAD (MSG5-MSG3 ERR3, TAD (MSG3 JMP PERR /GO PRINT ERROR / CROSS, TAD (SINGLE+DOUBLE+MATCH+READ /ANY SPECIFIED FUNCTION AND OPTION SZA CLA /SKIP IF NO JMP CROSS1 /A FUNCTION THERE, DON'T SET C TAD OPTION AND (-COPY-1 TAD (COPY DCA OPTION CROSS1, TAD (SINGLE+DOUBLE+NOMAT+READ AND OPTION /SET M IF REQUIRED SZA CLA /SKIP IF NECESSARY JMP CROSS3 /NO TAD OPTION RAL /KNOW! THAT MATCH=4000 CLL CML RAR DCA OPTION / / NOW OUTPUT DEVICE / CROSS3, TAD OUTDEV SNA JMP ERR6 /DEVICE NOT THERE AT ALL! JMS CHCKRX /IS IT REALLY AN RX? RETURN UNIT NUMBER;+2 FOR READ DCA ROFN /BUILD REST OF IT IN LATER / / NOW INPUT DEVICE (IF ANY) / CROSS2, TAD (READ+SINGLE+DOUBLE AND OPTION /AN INPUT DEVICE NEEDED SZA CLA /SKIP IF NECESSARY JMP REAFOR /READ OR FORMAT TAD INDEV SNA JMP ERR5 /DEVICE NOT PRESENT AT ALL, ERROR JMS CHCKRX /IS IT REALLY AN RX? RETURN READ CODE +UNIT # DCA RIFN TAD RIFN /CHECK IF UNIT NUMBERS THE SAME CIA /WHICH IS AN ERROR TAD ROFN SNA CLA /SKIP IF DIFFERENT JMP ERR2 JMP IICNT / REAFOR, TAD INDEV /FOR READ AND FORMAT INPUT DEVICE IS ILLEGAL SZA CLA /SKIP IF NOT PRESENT JMP ERR2 /SPECIFICATION ERROR ON EXTRA DEVICE JMP IICNT /OK, CONTINUE INITIALIZATION / / TMP5, 0 /WORK LOCATIONS TMP6, 0 / PAGE / / / ESTABLISH FUNDAMENTAL CONFIGURATION VARIABLES / IICNT, JMS I (USR /UNLOCK USR 11 TAD OPTION /IF SLASH-P, MUST GET CORRECT FLOPPY ON! AND (PAUS SNA CLA /SKIP IF SLASH-P JMP IICNT2 /NO, JUST KEEP GOING SYSOFF, JMS QUEST /ASK REMOUNT QUESTION MSG12 /ADDR OF MESSAGE JMP SYSOFF /"N" ASK AGAIN / /"Y" CONTINUE TO INITIALIZE IICNT2, CDF 70 /TEST FOR A VT78 RDF CDF 10 /BACK TO US TAD (7750 /VT78 RETURNS 30 FROM 70 ! SNA CLA IAC DCA ISVT78 / CDF 0 /FETCH CORE SIZE WORD TAD I (7777 CDF 10 /INDIRECTS HERE AND (70 TAD (7750 /MAKING + IF 16 OR MORE K OF CORE SMA CLA /SKIP IF NOT 16K IAC /16K DCA ISBIG /SAVE THAT INFO TAD ROFN /GET DEVICE STATUS TYPE FOR OUTPUT DEVICE JMS DEVSTT /RETURN CODE IN .+1, UPDATED ROFN WORD IN AC MEDOU, -1 /RETURN 0-3;SINGLE;SINGLE ON DOUB;DOUB;QUAD DCA ROFN TAD MEDOU /DEFAULT FOR MEDIN, IF NO INPUT MEDIA AT ALL DCA MEDIN TAD INDEV /IS AN INPUT DEVICE? SNA CLA /SKIP IF YES JMP ONLY1 /SPECIAL PROCESSING FOR ONE DEVICE CASES TAD RIFN /GETTING UNIT NUMBER JMS DEVSTT /CHECK FOR READY, RETURN TYPE CODE MEDIN, -1 /RETURN 0-3, SAME AS MEDOU DCA RIFN /FULL I/O SKELETON TAD MEDIN /CONVENIENCE, MAKE INPUT OUTER LEVEL INDEX RTL TAD MEDOU /INNER LEVEL INDEX TAD (ACTAB /TABLE FOR WHICH ACTION TO TAKE DCA TMP7 TAD I TMP7 /AN EXTRA INDIRECT NEEDED DCA TMP7 JMP I TMP7 /GO TO CORRECT ACTION / / DEVSTT / / CALL WITH 2 (READ CODE) + UNIT NUMBER IN AC: PARTIAL RIFN/ROFN WORD / / IF DRIVE NOT READY, ERROR OUT DIRECTLY / / RETURN WITH DEVICE TYPE IN CALL +1 / / 0 RX01 DRIVE / 1 RX02 DRIVE WITH RX01 FLOPPY / 2 DOUBLE DENSITY DRIVE AND MEDIA; EITHER BOTH NOT / BOTH MAY BE DOUBLE SIDED, BUT THAT IS IGNORED!! / 3 RX03 DRIVE AND RX03 FLOPPY / / RETURN WITH FULL RIFN/ROFN CODE IN AC / DEVSTT, 0 DCA TMP7 /SAVE CALLING CODE TAD TMP7 /BUT CHECK OUT WHICH DRIVE PAIR JMS SELECT /SELECT PAIR, IF NECESSARY; AC HAS BEEN ANDED WITH 7776 TAD (410 /DO DOUBLE DENSITY 12 BIT READ STATUS SDN /WAITING ON DONE JMP .-1 LCD SDN /WAIT AGAIN ON DONE JMP .-1 XDR /GET STATUS AND (232 /KEEPING READY, DENSITY ERROR, DOUBLE, QUAD DCA TMP8 /SAVE WHILE WE CLEAR UP DEVICE TAD (416 /DUMMY READ ERROR STATUS TO SET DONE AGAIN LCD SER /CLEAR POOSSIBLE ERROR FLAG L7600, 7600 /IT MAY SKIP! TAD TMP8 /GET BACK STATUS TAD L7600 /CHECK FOR READY SPA JMP STERR /NOT READY, PRINT ERROR CLL RTR /PUT QUAD BIT TO LINK SZL /SKIP ON NOT QUAD CLL CML CLA CMA /ALL BITS TO 1 !! FALLS THRU TO EXIT WITH 3 RTR /PUT DOUBLE BIT TO LINK SNL /SKIP ON DOUBLE JMP REJOIN /JOIN WITH OTHER CASES, AC NOW 0 CMA /MAKING SINGLE -2, DOUBLE -1, QUAD 0 TAD (3 /MAKING SINGLE 1, DOUBLE 2, QUAD 3 REJOIN, DCA I DEVSTT /RETURN 0-3 TYPE IN CALL+1 TAD I DEVSTT /GET CODE BACK TAD (FNTAB /TURN CODE INTO FUNCTION BITS DCA TMP8 TAD I TMP8 /4000 FOR DOUBLE DRIVE, 400 FOR DOUBLE TRANSFER TAD TMP7 /ORIGINAL CALLING BITS ISZ DEVSTT /HOP OVER RETURNED ARGUMENT JMP I DEVSTT /EXIT WITH CODE IN AC / / STERR, CLA /AC JUNK COMING IN TAD (MSG18-MSG19 /PRINT MESSAGE 18 ERR19, TAD (MSG19-MSG15 /PRINT MESSAGE 19 ERR15, TAD (MSG15 /PRINT MESSAGE 15 JMP PERR / TMP7, 0 TMP8, 0 / PAGE / / SPECIAL CODE FOR ONE DEVICE CASES; READ, SINGLE, DOUBLE / ONLY1, TAD OPTION /SEPARATE OUT READ AND (SINGLE+DOUBLE SNA /SKIP IF NOT READ (CAN ONLY BE ONE OF THREE BITS!) JMP READIT /READ CASE, FALL INTO OTHER CODE RAL /WATCH OUT! GOING TO SPLICE PROPER DENSITY BIT JMP TOUGH /INTO ROFN FOR LATER FORMAT / / ENTER FROM DISPATCHER, AUTO-FORMAT, AND OK / CISZ, ISZ OPTION /SET CHANGE DENSITY BIT IN OPTION WORD SAME, / / SET UP COUNT VARIABLES / IICNT4, TAD RIFN /PUT TRANSFER DENSITY BIT FROM INPUT INTO OUTPUT TOUGH, AND (400 /KEEPING THAT BIT; FORMAT ONLY CASE JOINS HERE DCA ISDOUB /TERMPORARY USE OF LATER VARIABLE TAD ROFN /OUTPUT CONTROL AND (7377 /KEEPING OTHER BITS TAD ISDOUB DCA ROFN /REPLACING MODIFIED OUTPUT WORD READIT, AC7776 /TAKE OFF READ BIT FOR OUTPUT WRITE FUNCTION TAD ROFN DCA WOFN AC7776 / TAD MEDIN /MAKE A TEMPORARY VARIABLE ISDOUB SMA CLA /SKIP IF SINGLE IAC DCA ISDOUB /WHICH IS 1 IF DOUBLE DENSITY MEDIA TAD ISDOUB /SIGNLE OR DOUBLE SZA CLA /SKIP IF SINGLE TAD (-10 /DOUBLE, MAKE -20 TAD (-10 /SINGLE, MAKE -10 DCA COUNT1 TAD COUNT1 /NOW MULTIPLY BY FOUR CLL RAL CLL RAL DCA COUNT2 TAD COUNT2 /NOW AGAIN BY FOUR CLL RAL CLL RAL DCA COUNT3 AC7775 TAD MEDIN /CHECK FOR QUAD SIZED SMA CLA /SKIP IF NOOT IAC CMA /MAKE A -2 IF YES, -1 IF NO DCA COUNT4 TAD ISBIG /MAKE VARIABLE HLFTRK SNA CLA /MISSES COLLECT IN SZA CHAIN TAD OPTION SPA CLA /!!KNOWS!! THAT MATCH BIT IS AC0 TAD ISDOUB SZA CLA IAC /HALF TRACK; SMALL MACHINE, MATCH OPTION, DOUBLE DENSITY CMA DCA COUNT5 /-2 IF HALF-TRACK, OTHERWISE -1 TAD COUNT5 /FIND OUT IF ONE OR TWO FIELDS PER SWOOP AND ISDOUB /LEAVING 1 IN AC IF TWO FIELDS CMA /SO MAKE ANOTHER -2,-1 COUNTER DCA COUNT7 TAD COUNT7 /NOW MULTIPLY IT BY -10 OCTAL TO MAKE FIELD SPAN CIA CLL RAL RTL DCA COUNT6 TAD ISVT78 /NOW CONSTRUCT INTERLEAVE, TWO OR THREE AND ISDOUB /THREE IF DOUBLE DENSITY ON A VT78 TAD (2 DCA COUNT8 AC7775 /REST OF JOB, MAKE SKP OR IAC TAD COUNT8 SZA CLA /SKIP IF IT WAS THREE INTERLEAVE TAD (IAC-SKP /TWO INTERLEAVE, WANTS AN IAC TAD (SKP /THREE INTERLEAVE, WANTS A SKIP DCA COUNT9 TAD OPTION /INITIALIZE ROFLD AND (READ /IS IT ONLY A READ SNA CLA /SKIP IF YES, CDF 0 TAD COUNT6 /MATCH, INIT AT CDF SPAN TAD (CDF 0 DCA ROFLD TAD OPTION /NEED TO REFORMAT OUTPUT DRIVE? AND (CHANGE+SINGLE+DOUBLE SNA CLA /SKIP IF YES JMP DO00 /NO, GO DO OPERATION JMP REFORM /GO TO REFORMATTER / / ISVT78, 0 /1 IF A VT78, OTHERWISE 0 ISBIG, 0 /1 IF IT HAS 16K OF CORE, 0 IF LESS ISDOUB, 0 /1 IF TRANSFER DOUBLE DENSITY / FIELD 1 *6000 / / / EQUATES FOR AUTO-INCR REG'S, SO THEY SHOW UP IN CREF / X10=10 X11=11 X17=17 / / ***** BEGIN ONCE ONLY CODE ***** / / / ENTER HERE AND GET USER INPUTS / START, CLA!SKP /NORMAL ENTRY (MUST CALL DECODER) CHAIN, JMP NODEC /CHAIN ENTRY CDF 10 JMS I (USR /CALL IT 5 5200 /DEFAULT INPUT EXT.(SPECIAL MODE) 0 /PRESERVE TENTATIVE FILES / / LOAD CONSOLE TTY HANDLER / NODEC, JMS I (USR /LOAD THE KL8E HANDLER 1 DEVICE TTY TTYEP, 7201 JMP ERRUSR /PRINT USER ERROR TAD TTYEP /MOVE ENTRY POINT FROM THIS PAGE DCA TTYENT / / LOAD OUTPUT DEVICE IF SPECIFIED / JMS CTRLC /CHECK FOR CONTROL C TYPE-IN TAD I (7600 /GET OUTPUT DEV AND (17 DCA OUTDEV TAD I (7605 /GET INPUT DEVICE AND (17 DCA INDEV TAD OUTDEV /IF NO OUTPUT DEVICE SZA CLA /IS NAMED MOVE INPUT JMP LOC10 /TO OUTPUT DEVICE TAD INDEV /MOVE IT! DCA OUTDEV DCA INDEV /ZERO INPUT DEVICE / / VALIDATE OUTPUT DEVICES AND FILES / LOC10, JMS CTRLC /CHECK FOR CONTROL C TAD (7601 /MAKE SURE THAT THERE ARE NO OUTPUT FILES DCA TMP1 /OR OTHER OUTPUT DEVICES TAD (-4 DCA TMP2 LOC1, TAD I TMP1 /GET DECODER ENTRY SZA!CLA /IS IT ZERO? JMP ERR2 /NO -- ERROR ISZ TMP1 /INCREMENT POINTER ISZ TMP2 /YES -- DONE WITH OUTPUT ENTRIES? JMP LOC1 /NO -- PROCEED /YES -- / JMS CTRLC /CHECK FOR CONTROL C TAD I (7605 /WAS THERE ANY INPUT SPECIFICATION? SNA CLA JMP LOC3A /NO TAD (7606 /YES -- MAKE SURE THAT THERE ARE NO INPUT FILES DCA TMP1 /OR OTHER INPUT DEVICES TAD (-5 DCA TMP2 LOC2, TAD I TMP1 /GET DECODER ENTRY SZA!CLA /IS IT ZERO? JMP ERR2 /NO -- ERROR ISZ TMP1 /INCREMENT POINTER ISZ TMP2 /YES -- DONE WITH INPUT ENTRIES? JMP LOC2 /NO -- PROCEED LOC3A, JMP LOC3 /YES -- CONTINUE ON NEXT PAGE / OUTDEV, 0 /OUTPUT DEVICE NUMBER INDEV, 0 /INPUT DEVICE NUMBER TMP0, 0 TMP1, 0 /TEMP STORE TMP2, 0 /TEMP STORE / ERR2, TAD (MSG2 /ILLEGAL SPECIFICATION PERR, JMS TYPE /PRINT ERROR MESSAGE JMP GOEXIT /LEAVE / ERRUSR, JMS I (USR /PRINT USER ERROR 7 2 JMP GOEXIT / / / CHCKRX / / CALL WITH DEVICE # IN AC, RETURN IF REALLY AN RX / RETURN WITH UNIT NUMBER IN AC; 20 IF RIGHT HAND DRIVE (#1) / PLUS 1 IF A SECOND PAIR ON A VT78 / PLUS ALWAYS HAVING A 2 ADDED IN FOR A READ FUNCTION / OLDRX=TYP1^10 NEWRX=TYP2^10 /TYPE CODES FOR RX HANDLERS / / / CHCKRX, 0 DCA TMP0 /SAVE DEVICE NUMBER CLA CMA TAD TMP0 /CHECK IF IT IS SYS SZA CLA /SKIP IF YES JMP NONSYS /NO, GO TO NON-SYS PROCESSING CHCKSY, CDF 0 /FETCH SKELETON WORD FROM SYS AC0002 /PUT IN READ BIT (BIT NOT SET IN MAGIC) TAD I (MAGIC CDF 10 JMP CHCKJ /JOIN UP TO MASK AND EXIT NONSYS, TAD (7757 /TABLE BASE TAD TMP0 DCA TMP1 /HOLD FOR INDIRECT TAD I TMP1 /GET STORED CODE AND (770 /KEEP TYPE BITS TAD (-NEWRX /IS IT A NEW ONE SZA /SKIP IF YES, BOUNCE DOWN SZA'S TAD (-OLDRX+NEWRX /SO SEE IF OLD ONE SZA /SKIP IF GOT A MATCH JMP ERR3 /WRONG DEVICE TYPE, ERROR OUT TAD (4001 /RE-ESTABLISH LOAD ADDRESS ARGUMENT DCA LOADAD TAD TMP0 /TRY TO LOAD HANDLER JMS I (USR 1 /LOAD CODE LOADAD, 4001 /GETS WRITTEN OVER JMP ERR3 /ERROR OUT TAD LOADAD /OUCH!! ENTRY POINT FOR UNIT 1+3, HAS A 4 IN IT!! / /ENTRY POINT FOR UNIT 2+3 HAS A 1 IN IT AND (5 /KEEP ONLY THE TWO RELEVANT BITS TAD (16 /SHIFT 4 TO 20, PUT IN 2 FOR READ CODE CHCKJ, AND (23 /KEEP 2 FOR READ CODE, 20 AND 1 FOR UNIT SPECIFIERS JMP I CHCKRX /OK, RETURN / PAGE / / / *6400 / / PUT TABLES HERE TO FIT / BITTAB / / TABLE FOR DETERMINING ILLEGAL CALLING OPTIONS / BITTAB, 6700 /WITH M; N,C,D,R,S ILLEGAL 5600 /WITH N; C,D,R,S ILLEGAL 3400 /WITH C; D,R,S ILLEGAL 0001 /WITH P; ALL ARE LEGAL 6000 /WITH D; R,S ILLEGAL 4000 /WITH R; S ILLEGAL 0 /LOOP STOPPER; ALL LEGAL WITH V, FALLS OUT OK / / ACTAB / / TABLE OF ACTION FOR 16 COMBINATIONS OF INPUT AND OUTPUT TYPES / ACTAB, SAME /IN TYPE 0, OUT TYPE 0 SAME /0,1 CISZ /0,2 CISZ /0,3 SAME /1,0 SAME /1,1 CISZ /1,2 CISZ /1,3 ERR15 /2,0 CISZ /2,1 SAME /2,2 SAME /2,3 ????? ERR15 /3,0 ERR15 /3,1 ERR15 /3,2 SAME /3,3 / / FNTAB, 0 /FUNCTION BITS BY TYPE CODE 0-3 4000 /SINGLE MEDIA BUT 4000 DOUBLE DRIVE 4400 /DOUBLE ON DOUBLE 4400 /QUAD ON QUAD, LOOP HANDLES WHICH HEAD / / DO00, TAD (-115 /TRACK LOOP CONTROL COUNT DCA TRACK / / ****** END OF ONCE ONLY CODE ****** IFNZRO .-6420&4000 <*6420> /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/uni/CUSPS/SET.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 | /11 OS8 SET (PAL8/MACREL VERSION) / /S.R. / / / S E T / / / / / / /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. / / / COPYRIGHT (C) 1977,1978 BY DIGITAL EQUIPMENT CORPORATION. / / / / / EDIT HISTORY: / 19-MAR-77 S.R. REMOVED FROM CAMP V4 / 19-MAR-77 S.R. FIXED BUG WITH SET MTA FILES / 19-MAR-77 S.R. FIXED BUG WITH SET CDR / 19-MAR-77 S.R. FIXED BUG WITH = OPTION / 19-MAR-77 S.R. CONVERTED TO MACREL CODE / 01-APR-77 S.R. TTY PAUSE / 01-APR-77 S.R. TTY HEIGHT / 01-APR-77 S.R. TTY SCOPE / 17-APR-77 S.R. REWROTE TTY PAGE / 17-APR-77 S.R. DEV: DVCODE / 17-APR-77 S.R. FINISHED TTY SCOPE / 27-APR-77 S.R. TTY COL / 27-APR-77 S.R. SYS OPTIONS (INIT, OS8, OS78) / 03-MAY-77 S.R. LA8A, LA78 / 03-MAY-77 S.R. INIT OS78 FIXES TERMINATE / 03-MAY-77 S.R. BASIC FIXES / 29-JUN-77 S.R. TTY ARROW (NOT FOR PS/8) / 29-JUN-77 S.R. TTY ESC (NOT FOR PS/8) / 29-JUN-77 S.R. DEV BLK LOC (NOT FOR PS/8) / 8-DEC-77 S.R. ADDED SYMBIONT SUPPORT / 23-MAY-78 S.R. FIXED SCOPE BUG AND 2-PAGE SYS HANDLER BUG / 8-JUN-78 S.R. FIXED WIDTH=N BUG / MUST SKIP LOCS 1000-1777 LINBUF=1000 AUXBUF=6600 IFDEF EDF <MACREL=1> IFNDEF EDF <MACREL=0> IFNZRO MACREL < .ASECT AAA > IFZERO MACREL < *0 > 0 CIF 30 JMP .-1 IFNZRO MACREL < .XSECT XSET > IFZERO MACREL < *10 > XR1, 0 XR2, 0 XR3, 0 IFNZRO MACREL < .ZSECT ZSET > IFZERO MACREL < *20 > TEMP, 0 T, 0 T2, 0 LINPTR, 0 T3, 0 FLAG, 0 SPKNT, 0 DEVTYP, 0 /DEVICE TYPE (BITS 6-11) ENTRY, 0 /HANDLER ENTRY POINT NUM, 0 TYP, 0 /0 MEANS 'F', 1 MEANS 'R' T4, 0 DEVNUM, 0 DCW, 0 /DEVICE CONTROL WORD DCWPTR, 0 USR, 200 /POINTS TO USR ENTRY POINT ESCBIT, 0 /1 MEANS USER TYPED ALTMODE CNT, 0 CTOFLG, 0 /-1 MEANS SAW ^O PTR, 0 DHIT, 0 /DEVICE HANDLER INFO TABLE - 1 DHI, 0 /DEVICE HANDLER INFO DBLK, 0 /DEVICE HANDLER BLOCK VNOPTR, 0 /PTS TO VERSION # IN HANDLER VNO, 0 /CURRENT HANDLER VERSION NUMBER SAVPTR, 0 NO, 0 /1 MEANS 'NO' FLG, 1 /1 MEANS SAW NO DIGITS RR, 0 NUCODE, 0 SCOP, 0 /NON-0 IF TTY IS SCOPE NUM2, 0 /0000-0777 /SET /1000-1377 /OS/8 LINE BUFFER /1400-1777 /PS/8 LINE BUFFER /2000-6577 /SET /6600-7177 /AUXILIARY I/O BUFFER /7000-7177 /I/O BUFFER FOR TECO CCB /7200-7577 /OS/8 HANDLER /7600-7777 /OS/8 SCPBIT=7726 /BIT 4 IFNZRO MACREL < .ASECT ASET > *200 START, SKP JMP CHN TAD ("# JMS I [TYPE JMS BIT JMS I [READ /READ A LINE INTO OS/8 LINE BUFFER CHN, TAD [LINBUF /CHAIN ENTRY ADDRESS DCA LINPTR /INITIALIZE POINTER TO LINE BUFFER JMS BIT STA JMS I [SPACE /IGNORE LEADING SPACES JMS GETTWO /GET TWO CHARS DCA TEMP JMS I [SCAN /SCAN PAST EXTRA LETTERS OR DIGITS TAD TEMP JMS I [BRANCH /GO TO APPROPRIATE ROUTINE -2305;SET /SE -2605;VERSION /VE -1005;HELP /HE 0 SNA CLA JMP I [GOAWAY JMP I [SYNTAX /NONE OF THESE BIT, 0 CDF 10 TAD I (SCPBIT CDF 0 AND [200 DCA SCOP /NOTE WHETHER TTY IS SCOPE V3D TAD I (7612 TAD (-3 SNA CLA JMS I (FIX2P /FIXUP 2-PAGE SYSTEM HANDLER DCA .-1 /ONCE JMP I BIT / GETTWO /GET TWO LETTERS OR DIGITS FROM INPUT LINE, PACK IN SIXBIT /ADVANCE PAST THEM. SUBSTITUTE NULL IF NOT FOUND. GETTWO, 0 JMS GETSIX CLL RTL RTL RTL DCA T2 JMS GETSIX TAD T2 /COMBINE JMP I GETTWO GETSIX, 0 /GET A SIXBIT LETTER OR DIGIT (OR NULL) JMS ALPHA /IS IT ALPHANUMERIC? JMP NOTALPH /NO AND [77 /YES JMP I GETSIX /TRUNCATE TO SIXBIT NOTALPH,CLA JMS BACKC JMP I GETSIX /RETURN NULL GETC, 0 /GET A CHARACTER, ADVANCE POINTER TAD I LINPTR AND [177 /ALWAYS RETURN 8-BIT SZA TAD [200 /WITH HIGH ORDER BIT ON ISZ LINPTR /ADVANCE SCAN JMP I GETC /RETURN BACKC, 0 /MOVE SCAN POINTER BACK ONE STA TAD LINPTR DCA LINPTR JMP I BACKC /RETURN /RETURN 1 NOT OF TYPE DESIRED /RETURN 2 DESIRED TYPE /IN BOTH CASES, CHAR IS LEFT IN AC ALPHA, 0 /LOOK FOR ALPHANUMERIC JMS I [GETC JMS LETTER /IS IT A LETTER? JMP TRYDIG /NO, TRY DIGIT JMP GOTAL /YES TRYDIG, JMS DIGIT /IS IT A DIGIT? JMP I ALPHA /NO, AINT LETTER OR DIGIT GOTAL, ISZ ALPHA /YES, EITHER LETTER OR DIGIT JMP I ALPHA /RETURN WITH IT IN AC LETTER, 0 /LOOK FOR LETTER TAD (-"A CLL TAD ("A-"Z-1 SNL ISZ LETTER TAD ("Z+1 /RESTORE CHAR JMP I LETTER DIGIT, 0 /LOOK FOR DIGIT TAD (-"0 CLL TAD ("0-"9-1 /(DECIMAL) SNL ISZ DIGIT TAD ("9+1 /RESTORE DIGIT TO CHARACTER FORM JMP I DIGIT /AND RETURN WITH IT IN AC HELP, JMS I [PRINT TEXT /SET DEV: [NO] ATTRIB [N]/ JMS I [PRINT TEXT /VERSION/ JMS I [PRINT TEXT /HELP/ JMP I [START PAGE SYNTAX, CLA JMS PRINT TEXT /? SYNTAX ERROR/ GOAWAY, TAD ESCBIT SZA CLA JMP I [7605 /LINE ENDED WITH ESCAPE TAD I [READ /WAS 'READ' EVER CALLED? SZA CLA JMP I [START /YES, GET A NEW LINE JMP I [7605 /NO, WE MUST'VE BEEN CHAINED TO, RECALL KBM PRINT, 0 TAD I PRINT RTR RTR RTR JMS PRIN TAD I PRINT JMS PRIN ISZ PRINT JMP PRINT+1 LV, JMS I [CRLF ISZ PRINT JMP I PRINT PRIN, 0 AND [77 SNA JMP LV TAD [240 AND [77 TAD [240 DCA T3 TAD [200 KRS TAD (-203 SNA JMP CTRLC TAD (203-217 /^O SNA CLA JMS CTRLO TAD T3 JMS I [TYPE JMP I PRIN CTRLC, TAD ["^ JMS I [TYPE TAD ("C JMS I [TYPE /ECHO "^C" JMS I [DELAYY JMP I [7600 /THEN GO AWAY CTRLO, 0 KCC /CLEAR OUT ^O TAD ["^ JMS I [TYPE TAD ("O JMS I [TYPE JMS I [CRLF STA DCA CTOFLG /STOP ECHOING JMP I CTRLO NUMBIG, JMS PRINT TEXT /? NUMBER TOO BIG/ JMP I [GOAWAY NONEX, JMS PRINT TEXT /? CAN'T - DEVICE DOESN'T EXIST/ JMP I [GOAWAY SYSERR, JMS PRINT TEXT \? I/O ERROR ON SYS:\ JMP I [GOAWAY FIX2P, 0 TAD (66 DCA I TB ISZ .-1 ISZ KTR JMP .-4 JMP I FIX2P TB, TP1;TP2;TP3;TP4 KTR, -4 PAGE SYSOS8, 0 TAD NO /REVERSE MEANING OF 'NO' SNA CLA IAC DCA NO JMS SYS78 JMP I SYSOS8 SYS78, 0 TAD [7771 JMS I [SET200 JMS I [7607 200 AUXBUF 0 JMP I [SYSERR TAD (AUXBUF+371 JMS I [SET200 JMS I [7607 4200 AUXBUF 0 JMP I [SYSERR JMS I [7607 /THERE'S A 2ND COPY 200 /IN BLOCK 11 LOCATION 56 AUXBUF 11 JMP I [SYSERR TAD (AUXBUF+56 JMS I [SET200 JMS I [7607 4200 AUXBUF 11 JMP I [SYSERR JMS I (FIXCCL JMP I SYS78 SYSINI, 0 JMS I [GETC SNA CLA JMP DEFINI /ASSUME @INIT TAD NO SZA CLA JMP I [SYNTAX /SET SYS NO INIT CMD JMS I [BACKC TAD LINPTR DCA SAVLP TAD (-6 /ALLOW A MAXIMUM OF 5 CHARS DCA SAVKN SAVLUP, JMS I [GETC SNA CLA JMP DEFDO ISZ SAVKN JMP SAVLUP JMS I [PRINT TEXT /? INITIAL COMMAND TOO BIG/ JMP I [GOAWAY SAVKN, 0 SAVLP, 0 DEFINI, TAD (INIMSG DCA SAVLP DEFDO, JMS I [7607 200 AUXBUF TP1, 0 JMP I [SYSERR TAD NO SZA CLA TAD (400-1077 TAD (1077 DCA I (AUXBUF+77 JMS I [7607 4200 AUXBUF TP2, 0 JMP I [SYSERR TAD NO SZA CLA JMP I SYSINI JMS I [7607 200 AUXBUF 11 JMP I [SYSERR STA TAD SAVLP DCA XR2 TAD (AUXBUF-1 DCA XR3 TAD (-5 DCA SAVKN MOVL, TAD I XR2 DCA I XR3 ISZ SAVKN JMP MOVL JMS I [7607 4200 AUXBUF 11 JMP I [SYSERR JMP I SYSINI INIMSG, "@;"I;"N;"I;"T;0 PAGE *1400 /THIS WON'T ALWAYS WORK UNDER PS/8: TTGGO, JMP I TTGAG TTGAG, 0 JMS I [TTST1 JMS I [PRINT TEXT /A FUNNY THING HAPPENED TO ME ON THE WAY TO THE COMPUTER ROOM./ JMS I [PRINT TEXT /A PANHANDLER CAME UP TO ME AND SAID,/ JMS I [PRINT TEXT /"CAN YOU SPARE ME $25,000 FOR A CUP OF COFFEE?"/ JMS I [PRINT TEXT /"WHY SO MUCH?", I ASKED IN AMAZEMENT./ JMS I [PRINT TEXT /"THINGS HAVE BECOME SO AUTOMATED", HE REPLIED,/ JMS I [PRINT TEXT /"THAT THE ONLY WAY I CAN ORDER IT/ JMS I [PRINT TEXT /IS WITH A COMPUTER ORDER FORM"./ JMP I (TTGGO TTESC, 0 /V3D JMS I (OLDTST JMS I [SRCH 200;200;44 JMP I [REASEM TAD (-4 DCA TEMP /SEE SOURCE OF KL8E TAD NO SZA CLA TAD (7640-CLA /YES TAD (CLA /NO DCA I TEMP JMP I TTESC TTAROW, 0 /V3D JMS I (OLDTST JMS I [SRCH 200;200;7740 JMP I [REASEM IAC DCA TEMP TAD I TEMP RAL KSPA, SPA CLA JMP I [REASEM ISZ TEMP ISZ TEMP TAD TEMP TAD (3 DCA TEMP2 TAD NO SNA CLA JMP YESARO /YES TAD KSPA /NO NOAROW, DCA I TEMP JMP I TTAROW YESARO, TAD I TEMP2 JMP NOAROW GENBLK, 0 /V3D JMS I (GENCMN TAD NUM2 DCA BLOK /GET BLOCK NUMBER TAD (LOC JMS I [KEYSRCH JMP I [SYNTAX JMS I (GENCMN /GET LOCATION TAD [-400 CLL TAD NUM2 SZL CLA JMP I [NUMBIG TAD NUM2 TAD PAUXBUF DCA NUM2 JMS I ENTRY /READ BLOCK 200 PAUXBUF,AUXBUF BLOK, 0 JMP I [SYSERR TAD TEMP SNA CLA JMS I (ODT JMS I [ONUM DCA NUM CLA IAC DCA DEVNUM /FAKE OUT - PREVENTS RE-WRITING USED HANDLER TAD FLG SZA CLA JMP I GENBLK JMS I [GETC SZA CLA JMP I [SYNTAX TAD NUM DCA I NUM2 /SET NEW VALUE TAD BLOK DCA BLOK2 JMS I ENTRY 4200 AUXBUF TEMP2, BLOK2, 0 JMP I [SYSERR JMP I GENBLK PAGE *2000 /ORIGIN PAST OS/8 LINE BUFFER AT 1000. /SKIP PAST PS/8 LINE BUFFER (AT 1400) JUST IN CASE /PS/8 USERS WISH TO PATCH THIS PROGRAM /SCAN PAST EXTRA LETTERS OR DIGITS SCAN, 0 JMS I [ALPHA JMP NOPE CLA JMP SCAN+1 NOPE, CLA JMS I [BACKC JMP I SCAN /SCAN PAST SPACES; GIVE ERROR IF NO SPACES FOUND UNLESS AC=-1 SPACE, 0 DCA FLAG /SET AC=-1 TO PREVENT ERROR ON NO SPACES FOUND DCA SPKNT /INITIALIZE SPACE COUNTER SKP /JUMP INTO LOOP GOTSP, ISZ SPKNT JMS I [GETC /GET NEXT CHAR TAD [-240 SNA CLA /IS IT A SPACE? JMP GOTSP /YES, COUNT IT JMS I [BACKC /NO, PUT IT BACK ISZ FLAG /CHECK FLAG SKP /USER DIDN'T SPECIFY FLAG JMP I SPACE /-0 MEANT DON'T CHECK IF FOUND SPACE TAD SPKNT /HOW MANY SPACES DID WE FIND? SZA CLA JMP I SPACE /SOME. OK JMP I [SYNTAX /NONE. TSK. TSK. BRANCH, 0 DCA T BR2, TAD I BRANCH ISZ BRANCH SNA JMP NOTFND TAD T SNA CLA JMP FOUND ISZ BRANCH JMP BR2 FOUND, TAD I BRANCH DCA T JMP I T /FOUND ITEM IN COLUMN 1, JUMP TO ADDRESS IN COL 2 NOTFND, TAD T JMP I BRANCH /IF NOT FOUND IN COL 1, RETURN WITH AC INTACT BADKBM, CDF 0 JMS I [PRINT TEXT /? OLD VERSION OF KBM/ JMP I [GOAWAY LLS=6666 DBTD=6574 LSF=6661 DBST=6570 LP78, 0 TAD (CMA-NOP JMS LP8A JMP I LP78 LP8A, 0 TAD (NOP /AC MAY BE NON-0 DCA LPKOD JMS I (LPTST1 TAD VNO TAD (-2 SNA CLA JMP I (OLDERR JMS I [SRCH 0;200;7700 JMP I (OLDERR TAD (3 DCA TEMP TAD I TEMP AND [7000 TAD [-7000 SZA CLA /NOP OR CMA JMP I (OLDERR TAD LPKOD DCA I TEMP ISZ TEMP TAD I TEMP AND [7000 TAD (-6000 SZA CLA JMP I (OLDERR TAD LPKOD AND [70 SZA CLA TAD (DBTD-LLS TAD (LLS DCA I TEMP ISZ TEMP TAD LPKOD DCA I TEMP JMS I [SRCH 100;100;6203 JMP I (OLDERR TAD (2 DCA TEMP TAD LPKOD AND [70 SZA CLA TAD (DBST-LSF TAD (LSF DCA I TEMP JMP I LP8A LPKOD, 0 PAGE /READ A LINE INTO OS/8 LINE BUFFER READ, 0 DCA CTOFLG /ALLOW ECHOING RD1, TAD [LINBUF DCA LINPTR DCA ESCBIT GT, JMS I [GET LOOK, JMS I [BRANCH -377;RUBOUT -217;GT /^O -203;CTRLC /^C -212;LF /LINE FEED -215;CR /CARRIAGE RETURN -375;ESCAPE /ALTMODE -376;ESCAPE /ALTMODE (2ND FLAVOR) -233;ESCAPE /ESCAPE -225;CTRLU /^U -200;GT /IGNORE NULLS -223;GT /IGNORE ^S 0 DCA TEMP /NONE OF THESE TAD LINPTR TAD (-LINBUF-377 SNA CLA /AT END OF LINE BUFFER? JMP GT /YES, DON'T ACCEPT CHAR TAD TEMP /NO, RETRIEVE CHAR JMS I [TYPE /ECHO IT TAD TEMP /INSERT IN BUFFER DCA I LINPTR ISZ LINPTR /BUMP POINTER JMP GT /NEXT CTRLU, TAD ["^ JMS I [TYPE TAD ("U JMS I [TYPE /ECHO "^U" <CR><LF> JMS I [CRLF RDA, TAD ("# JMS I [TYPE JMP RD1 BS=10 RUBOUT, TAD LINPTR TAD [-LINBUF SNA JMP BOL /AT BEGIN OF LINE TAD [LINBUF-1 DCA LINPTR /MOVE POINTER BACK ONE TAD SCOP SZA CLA RUB3X, TAD (BS-"\ TAD ["\ JMS I [TYPE /ECHO "\" RUB3, TAD SCOP SNA CLA JMP .+3 TAD [40 SKP TAD I LINPTR JMS I [TYPE /ECHO RUBBED-OUT CHARACTER TAD SCOP SNA CLA JMP GT2 TAD [BS JMS I [TYPE GT2, JMS I [GET JMS I [BRANCH -377;RUB2 -216;GT2 /IGNORE ^O -203;CTRLC /^C 0 DCA TEMP /A NEW CHAR TAD SCOP SZA CLA JMP .+3 TAD ["\ JMS I [TYPE /ENCLOSE RUBBED-OUT CHARS IN \'S TAD TEMP JMP LOOK RUB2, TAD LINPTR TAD [-LINBUF SNA JMP BOL2 TAD [LINBUF-1 DCA LINPTR TAD SCOP SNA CLA JMP RUB3 JMP RUB3X BOL2, TAD SCOP SZA CLA JMP BOL TAD ["\ JMS I [TYPE BOL, JMS I [CRLF JMP RDA ESCAPE, TAD ["$ /ECHO ESCAPE AS DOLLAR SIGN JMS I [TYPE ISZ ESCBIT /NOTE ESCAPE CR, DCA I LINPTR /INSERT 0 AT END JMS I [CRLF JMP I READ /RETURN, WE GOT LINE LF, DCA I LINPTR /TEMPORARILY INSERT A 0 SENTINEL TAD [LINBUF-1 DCA XR1 JMS I [CRLF TAD ["# JMS I [TYPE LFLP, TAD I XR1 SNA JMP I [GT /FINISHED, GET SOME MORE CHARS JMS I [TYPE /ECHO CURRENT CHARS JMP LFLP PAGE /GET A DECIMAL NUMBER, RETURN IT IN AC NUMBER, 0 DCA NUM CLA IAC DCA FLG JMS I [BACKC NM1, JMS I [GETC JMS I [DIGIT JMP EON TAD (-"0 /CONVERT TO DIGIT DCA T4 DCA FLG /NOTE PASSAGE OF A DIGIT TAD NUM AND [7000 SZA CLA JMP I [NUMBIG TAD NUM CLL RTL TAD NUM CLL RAL TAD T4 SZL JMP I [NUMBIG DCA NUM JMP NM1 EON, CLA JMS I [BACKC TAD FLG SZA DCA NUM /IF NO DIGITS, RETURN A 1 TAD NUM JMP I NUMBER / GETDEV /PARSES OFF A DEVICE NAME (1-4 CHARS) /DETERMINES IF IT EXISTS /LOADS HANDLER INTO 7200-7577 IF NOT ALREADY IN CORE /SETS ENTRY POINT ADDRESS AT 'ENTRY' /SETS DEVICE NUMBER AT 'DEVNUM' /SETS DEVICE CONTROL WORD AT 'DCW' /SETS 'DEVTYP' GETDEV, 0 JMS I [GETTWO DCA WD1 JMS I [GETTWO DCA WD2 TAD WD1 TAD WD2 DCA WD1 /COMBINE TWO WORDS INTO 1 (IN WD1) TAD WD2 SNA CLA JMP INQ TAD WD1 /OS/8 KLUDGE FOR UNIQUENESS CLL RAL STL RAR /FORCE BIT 0 ON IF 2ND WORD WAS NON-ZERO DCA WD1 INQ, DCA WD2 CIF 10 JMS I USR 12 /INQUIRE WD1, 0 /DEVICE NAME WD2, 0 /GETS DEVICE NUMBER WD3, 0 /GETS ENTRY POINT JMP I [NONEX /DEVICE DOESN'T EXIST TAD WD3 SZA /IS HANDLER ALREADY IN CORE? JMP INCORE /YES TAD WD1 DCA DW1 TAD (7201 /ALLOW TWO PAGE HANDLER IN 7200 DCA DW3 DCA DW2 CIF 10 JMS I USR 1 /FETCH DW1, 0 /DEVICE NAME DW2, 0 /GETS DEVICE NUMBER DW3, 0 /GETS ENTRY POINT JMP I [NONEX /DOESN'T EXIST TAD DW2 DCA DEVNUM TAD DW3 DCA ENTRY JMP GETYP INCORE, DCA ENTRY TAD WD2 DCA DEVNUM GETYP, TAD DEVNUM TAD (7757 DCA DCWPTR /POINT INTO DEVICE CONTROL WGRD TABLE CDF 10 TAD I DCWPTR /GET DCW DCA DCW TAD DCW RTR RAR AND [77 DCA DEVTYP STA TAD I (37 /GET ADDRESS OF DHIT DCA DHIT TAD DHIT TAD DEVNUM DCA DHI TAD I DHI CDF 0 DCA DHI TAD DHI RTL RTL RTL AND (17 SZA TAD (15 DCA DBLK JMP I GETDEV DELAYY, 0 TAD (-10 DCA OUTER ISZ ZER JMP .-1 ISZ OUTER JMP .-3 JMP I DELAYY ZER, 0 OUTER, -10 PAGE OLDTST, 0 /V3D JMS I (ASRTST TAD VNO JMS I [BRANCH -1;OLDERR -2;OLDERR -3;OLDERR -4;OLDERR -5;TSTOK ZBLOCK 4 0 JMP I [NEWERR TSTOK, JMP I OLDTST TTPAUS, 0 JMS OLDTST JMS I [SRCH 200;100;15 JMP I [REASEM TAD (-3 DCA TEMP /SEE SOURCE OF KL8E FOR EXPLANATION TAD NO SNA CLA TAD (7650-7610 /YES TAD (7610 /NO DCA I TEMP DCA NUM JMS I [GETC SNA CLA JMP NOPA /NO PAUSE VALUE TAD NO SZA CLA JMP I [SYNTAX /SET TTY NO PAUSE N JMS I [NUMBER SNA JMP BADPAUS DCA NUM TAD NUM /SCALE CORRECTLY CLL RAL TAD NUM CLL RTL DCA NUM TAD FLG SZA CLA JMP BADPAUS /NO DIGITS TAD NUM AND [6000 SZA CLA JMP BADPAUS JMS I [SRCH 300;77;7600 JMP I [REASEM TAD (5 DCA TEMP TAD NUM CIA DCA I TEMP NOPA, JMS I (BASLUK JMP I TTPAUS TAD NUM CIA DCA I (AUXBUF+1 JMS I (BASWRI JMP I TTPAUS BADPAUS,JMS I [PRINT TEXT /? BAD VALUE FOR PAUSE DURATION/ JMP I [GOAWAY ONUM, 0 DCA NUM CLA IAC DCA FLG ONM1, JMS I [GETC TAD (-"0-10 /CONVERT TO DIGIT CLL TAD [10 SNL JMP OEON DCA T4 DCA FLG TAD NUM AND [7000 SZA CLA JMP I [NUMBIG TAD NUM CLL RTL RAL TAD T4 DCA NUM JMP ONM1 OEON, CLA JMS I [BACKC TAD NUM JMP I ONUM PAGE TTCOL, 0 TAD NO SZA CLA JMP I [SYNTAX /SET TTY NO COL JMS I [GETC SNA CLA JMP BADCOL /NO COL SPECIFIED JMS I [NUMBER SNA JMP BADCOL DCA NUM TAD FLG SZA CLA JMP I [SYNTAX TAD NUM AND [7770 SZA CLA JMP BADCOL TAD (CCLNAM /READ IN CCL.SV JMS I [LOOKUP JMP CCLNF /CCL NOT FOUND TAD (2 /WANT 2ND BLOCK IN CCL DCA ARG2 /CCL LOCATIONS 12400-12777 JMS I (7607 200 /READ IN 2 PAGES AUXBUF ARG2, 0 JMP I [SYSERR TAD ARG2 DCA ARG3 TAD I (AUXBUF /GET PTR TO DIRECT COL WORD SPA JMP OLDCCL TAD (AUXBUF-2400 /RELOCATE DCA ARG2 TAD NUM DCA I ARG2 JMS I (7607 4200 AUXBUF ARG3, 0 JMP I [SYSERR JMP I TTCOL BADCOL, JMS I [PRINT TEXT /? BAD COLUMN COUNT/ JMP I [GOAWAY OLDCCL, CLA JMS I [PRINT TEXT /? WRONG VERSION OF CCL/ JMP I [GOAWAY TYPE, 0 DCA TYPEM JMS I [DELAYY DCA .-1 /DELAY FIRST TIME THRU TO LET THINGS QUIET DOWN TAD CTOFLG SZA CLA JMP I TYPE /NO ECHOING TAD TYPEM TLS TSF JMP .-1 CLA JMP I TYPE TYPEM, 0 CCLNAM, FILENAME CCL.SV CCLNF, JMS I [PRINT TEXT /? CCL.SV NOT FOUND/ JMP I [GOAWAY CCLBLK=67 FIXCCL, 0 JMS I [7607 200 AUXBUF CCLBLK JMP I [SYSERR TAD I (AUXBUF TAD (-"G SPA CLA JMP I (OLDCCL TAD (CCLTBL JMS I (FIXUP JMS I [7607 4200 AUXBUF CCLBLK JMP I [SYSERR JMP I FIXCCL PAGE ESC, "E;"S;"C;4000+"A;4000+"P;4000+"E;0 TTHGHT, 0 JMS I (OLDTST JMS I [GETC SNA CLA JMP I (BADHIT /NO HEIGHT TAD NO SZA CLA JMP I [SYNTAX /SET TTY NO HEIGHT JMS I [NUMBER SNA JMP I (BADHIT DCA NUM TAD FLG SZA CLA JMP I (BADHIT /NO DIGITS JMS I [SRCH 300;77;7600 JMP I [REASEM TAD (3 DCA TEMP TAD NUM CIA DCA I TEMP TAD I TEMP ISZ TEMP DCA I TEMP JMS I (BASLUK JMP I TTHGHT TAD NUM CIA DCA I (AUXBUF JMS I (BASWRI JMP I TTHGHT / LOC YES NO KBMTBL, AUXBUF+313; 0210; 1070 AUXBUF+314; 1313; 2020 AUXBUF+316; 1324; 7240 AUXBUF+317; 4423; 3020 AUXBUF+322; 1313; 1440 AUXBUF+224; 7555; 7403 AUXBUF+225; 1207; 1302 AUXBUF+226; 7557; 7402 AUXBUF+227; 1207; 1302 0 CDTBL, AUXBUF+135; 0210; 1102 AUXBUF+136; 1335; 2024 AUXBUF+140; 1346; 7240 AUXBUF+141; 4466; 3024 AUXBUF+144; 1335; 1420 AUXBUF+33; 7555; 7403 AUXBUF+34; 5207; 5321 AUXBUF+35; 7557; 7402 AUXBUF+36; 5207; 5321 0 CCLTBL, AUXBUF+4; 0024; 0002 AUXBUF+5; 0522; 0143 AUXBUF+6; 5551; 5363 AUXBUF+7; 5600; 6000 0 AROW, "A;"R;"R;"O;"W;0 PAGE / SCOPE BIT ON DISK: / BLOCK 0 REL 126 BIT 4 / SCOPE BIT IN MEMORY: / LOC 17726 BIT 4 TTSCOP, 0 /THE FOLLOWING CODE WOULD BE ADDED IF WE WANT TO /ALLOW CHANGING KL8E SCOPE PATTERNS / JMS I (ASRTST / TAD VNO / JMS I [BRANCH / -1;OLDERR / -2;OLDERR / -3;OLDERR / -4;OLDERR / -5;TTSCOK / ZBLOCK 2 / 0 / JMP I [NEWERR TTSCOK, JMS I (7607 200 AUXBUF /READ 2 PAGES INTO AUXILIARY BUFFER 11 JMP I [SYSERR TAD (KBMTBL JMS FIXUP JMS I (7607 4200 AUXBUF 11 JMP I [SYSERR JMS I (7607 200 AUXBUF /READ BLOCK 53 (CD) 53 JMP I [SYSERR TAD (CDTBL JMS FIXUP JMS I (7607 4200 AUXBUF 53 JMP I [SYSERR TAD NO /SET SCOPE BIT SNA CLA IAC DCA SCOP CDF 10 TAD (SCPBIT JMS SET200 CDF 0 JMS I (7607 200 AUXBUF TP3, 0 JMP I [SYSERR TAD (AUXBUF+126 JMS SET200 JMS I (7607 4200 AUXBUF TP4, 0 JMP I [SYSERR / JMS I [SRCH / 366;11;7770 / JMP I [REASEM / CLA / JMS I [SRCH / 0;200;"\ / JMP I [OLDERR / IAC / DCA TEMP / TAD NO / SNA CLA / TAD (1336-1367 / TAD (1367 / DCA I TEMP JMP I TTSCOP SET200, 0 /DF IS SPECIALLY SET DCA HLTPTR TAD I HLTPTR AND (7577 DCA TEMP TAD TEMP TAD (-HLT SZA CLA JMP I (BADKBM TAD NO SNA CLA TAD [200 TAD TEMP DCA I HLTPTR JMP I SET200 HLTPTR, 0 FIXUP, 0 DCA FIXPTR FIXLUP, TAD I FIXPTR SNA JMP I FIXUP DCA FIXLOC ISZ FIXPTR TAD NO SZA CLA ISZ FIXPTR TAD I FIXPTR DCA I FIXLOC TAD NO SNA CLA ISZ FIXPTR ISZ FIXPTR JMP FIXLUP FIXPTR, 0 FIXLOC, 0 BASNAM, FILENAME BASIC.SV BASLUK, 0 TAD (BASNAM JMS I (LOOKUP JMP I BASLUK ISZ BASLUK TAD (7 DCA BASBLK JMS I [7607 200 AUXBUF BASBLK, 0 JMP I [SYSERR TAD BASBLK DCA BASB2 TAD I (AUXBUF+2 SNA CLA JMP I BASLUK JMP I (OLDBAS BASWRI, 0 JMS I [7607 4200 AUXBUF BASB2, 0 JMP I [SYSERR JMP I BASWRI PAGE TTCODE, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ONUM SNA JMP I [SYNTAX DCA NUCODE TAD NUCODE AND [7700 SZA CLA JMP I [NUMBIG JMS I [TTST1 TAD (7200 DCA RR JMS GETIOT JMP I [OLDERR CIA DCA T2 TTLP, JMS GETIOT JMP I [OLDERR CIA DCA T3 TAD T3 CIA TAD T2 SNA JMP TTLP SMA CLA JMP .+3 TAD T3 DCA T2 /T2 CONTAINS NEG OF SMALLER IOT TAD (7200 DCA RR TTLP2, JMS GETIOT JMP I TTCODE TAD T2 SZA CLA CLA IAC TAD NUCODE CLL RTL RAL DCA T3 TAD I RR AND (7007 TAD T3 DCA I RR JMP TTLP2 GETIOT, 0 ISZ RR TAD RR TAD (-7600 SNA CLA JMP I GETIOT TAD I RR AND [7000 TAD [-6000 SZA CLA JMP GETIOT+1 TAD I RR RTR RAR AND [77 TAD (-20 CLL RAR SNA JMP GETIOT+1 RAL TAD (20 ISZ GETIOT JMP I GETIOT NOTIMPL,JMS I [PRINT TEXT /% OPERATION NOT YET IMPLEMENTED/ JMP I [GOAWAY SET, JMS I [SPACE DCA VNO /V3C JMS I [GETDEV JMS I [GETC JMS I [BRANCH -":;COLN -" ;COLN -"-;HYPH 0 JMP I [SYNTAX /NO : OR BLANK AFTER NAME BADHIT, JMS I [PRINT TEXT /? BAD HEIGHT SPECIFIED/ JMP I [GOAWAY TTALT, 0 JMS I [TTST1 JMP I [NOTIMPL JMP I TTALT PAGE COLN, STA JMS I [SPACE /IGNORE OPTIONAL SPACES JMS I [GETC SNA JMP I [SYNTAX TAD (-"- SNA CLA JMP HYPH JMS I [BACKC STA TAD DEVNUM SNA CLA JMP SYSDV COLN2, DCA NAM1 DCA NAM2 TAD (MAIN-1 /LOOK FOR DEVICE TYPE IN MAIN TABLE MNLUP, DCA XR1 TAD I XR1 SMA SZA JMP NOTYP /NOT FOUND TAD DEVTYP SNA CLA JMP FNDTYP TAD XR1 TAD (3 /POINT TO NEXT ENTRY JMP MNLUP FNDTYP, TAD I XR1 /GET GENERIC NAME DCA NAM1 TAD I XR1 DCA NAM2 DCA AUXFLG TAD I XR1 /GET PTR TO DEVICE TABLE INTO, DCA PTR DCA NO TAD LINPTR DCA SAVPTR /SAVE SCAN POINTER JMS I [GETTWO TAD (-1617 SNA CLA /ARE NEXT TWO CHARS 'NO'? JMS SAWNO /YES TAD SAVPTR /NO DCA LINPTR /RESTORE PTR SCNLUP, TAD I PTR SNA /GET NEXT KEYWORD POINTER JMP NOKEY ISZ PTR /POINT TO PTR TO ROUTINE JMS I [KEYSRCH JMP NOF /NOT FOUND TAD I PTR /FOUND DCA PTR /GET PTR TO ROUTINE STA TAD DEVNUM SZA CLA JMS I (HREAD /READ HANDLER JMS I PTR /CALL ROUTINE STA TAD DEVNUM SZA CLA JMS I (HWRITE /REWRITE HANDLER JMP I [GOAWAY SYSDV, ISZ AUXFLG TAD (SYSAUX JMP INTO /V3D ALLOW SET SYS: HYPH, JMS I [ALPHA JMP I [BADV DCA VNO TAD VNO SNA JMP I [BADV AND [17 DCA VNO JMS I [SPACE /IGNORE SPACE JMP COLN2 NOKEY, TAD AUXFLG SNA CLA JMP NOO JMS I [PRINT TEXT \? UNKNOWN ATTRIBUTE FOR DEVICE \ *.-1 NAM1, 0 NAM2, 0 0 JMP I [GOAWAY SAWNO, 0 ISZ NO STA JMS I [SPACE TAD LINPTR DCA SAVPTR JMP I SAWNO NOTYP, CLA ISZ AUXFLG TAD (AUX /SEARCH AUXILIARY TABLE JMP INTO NOF, ISZ PTR TAD SAVPTR DCA LINPTR JMP SCNLUP AUXFLG, 0 NOO, ISZ AUXFLG TAD (AUX DCA PTR JMP SCNLUP PAGE HREAD, 0 TAD DBLK SNA JMP RESERR DCA BLOCK JMS I [7607 200 /READ 2 PAGES L7200, 7200 /INTO 7200-7577 BLOCK, 0 /FROM THIS BLOCK ON SYSTEM DEVICE JMP I [SYSERR TAD DHI AND [177 /GET RELATIVE ENTRY PT TAD L7200 DCA ENTRY TAD VNO SZA CLA /V3C JMP I HREAD /VNO ALREADY SET BY - COMMAND TAD ENTRY VLOOP, DCA VNOPTR TAD I VNOPTR CLL TAD [-33 SZL CLA JMP BACKV TAD I VNOPTR SNA JMP OLDERR DCA VNO JMP I HREAD BACKV, STA TAD VNOPTR JMP VLOOP RESERR, JMS I [PRINT TEXT /? CAN'T - DEVICE IS RESIDENT/ JMP I [GOAWAY OLDERR, CLA JMS I [PRINT TEXT /? CAN'T - OBSOLETE HANDLER/ JMP I [GOAWAY HWRITE, 0 TAD BLOCK DCA BLKTWO JMS I [7607 4200 7200 BLKTWO, 0 JMP I [SYSERR JMP I HWRITE NEWERR, CLA JMS I [PRINT TEXT /? CAN'T - UNKNOWN VERSION OF THIS HANDLER/ JMP I [GOAWAY MAIN, -0; DEVICE TTY; TTYTBL -1; DEVICE PTR; PTRTBL -2; DEVICE PTP; PTPTBL -3; DEVICE CDR; CDRTBL -4; DEVICE LPT; LPTTBL -20; DEVICE MTA; MTATBL 1 ZBLOCK 20 /TABLE ENDS WITH A POSITIVE NON-ZERO NUMBER LPTTBL, WIDTH;LPWDTH LC;LPLC LV8E;LPLV LA8A; LP8A LA78; LP78 ZBLOCK 4 0 MTATBL, PARITY;MTAPAR DENSITY;MTADEN FILES;MTAFIL ZBLOCK 4 0 AUX, LOC;GENLOC FILES;GENFIL READO;GENREA VERS;GENVER DVCO;GENDVC /V3D BLK;GENBLK /V3D ZBLOCK 6 0 WIDTH, "W;"I;"D;"T;"H;0 LC, "L;"C;0 LV8E, "L;"V;4000+"8;4000+"E;0 CODE, "C;"O;"D;"E;0 ALT, "A;"L;"T;4000+"M;4000+"O;4000+"D;4000+"E;0 ECHO, "E;"C;"H;"O;0 PAYGE, "P;"A;"G;"E;0 TAB, "T;"A;"B;0 LOC, "L;"O;"C;4000+"A;4000+"T;4000+"I;4000+"O;4000+"N;0 FILES, "F;"I;"L;"E;4000+"S;0 READO, "R;"E;"A;"D;4000+"O;4000+"N;4000+"L;4000+"Y;0 VERS, "V;"E;"R;4000+"S;4000+"I;4000+"O;4000+"N;0 PARITY, "P;"A;"R;4000+"I;4000+"T;4000+"Y;0 DENSITY,"D;"E;"N;4000+"S;4000+"I;4000+"T;4000+"Y;0 FILL, "F;"I;"L;"L;0 FLAGG, "F;"L;"A;"G;0 CTRL, "C;"T;"R;"L;0 EVEN, "E;4000+"V;4000+"E;4000+"N;0 ODD, "O;4000+"D;4000+"D;0 DELAY, "D;"E;"L;"A;"Y;0 GAG, "G;"A;"G;0 PAUS, "P;"A;"U;"S;"E;0 HGHT, "H;"E;"I;"G;"H;"T;0 SCOPP, "S;"C;"O;"P;"E;0 SYSAUX, INIT; SYSINI OS8; SYSOS8 OS78; SYS78 ZBLOCK 10 0 DVCO, "D;"V;"C;4000+"O;4000+"D;4000+"E;0 COL, "C;"O;"L;4000+"U;4000+"M;4000+"N;0 LA8A, "L;"A;"8;"A;0 LA78, "L;"A;"7;"8;0 INIT, "I;"N;"I;"T;0 OS8, "O;"S;"8;0 OS78, "O;"S;"7;"8;0 PAGE LPWDTH, 0 JMS I (GETWID JMS LPTST1 TAD NUM CMA DCA I (7200 JMP I LPWDTH LPTST1, 0 TAD I (7201 SPA CLA JMP L645 TAD VNO JMS I [BRANCH -1;OLDERR -2;LPTOK -3;LPTOK ZBLOCK 4 0 JMP I [NEWERR LPTOK, JMP I LPTST1 L645, JMS I [PRINT TEXT /? CAN'T AFFECT ANNALEX LPT/ JMP I [GOAWAY ASRTST, 0 TAD DHI SPA CLA JMP I ASRTST JMS I [PRINT TEXT /? CAN'T - NOT KL8E HANDLER/ JMP I [GOAWAY GENVER, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ALPHA JMP BADV DCA NUM TAD NUM AND (40 SZA CLA JMP BADV TAD NUM AND (37 DCA I VNOPTR JMP I GENVER GENREA, 0 CDF 10 TAD I DCWPTR CLL RTL CLL RAL TAD NO RAR CML RAR RAR DCA I DCWPTR CDF 0 JMP I GENREA GENFIL, 0 CDF 10 TAD I DCWPTR CLL RAL CLL RAL /ZERO LINK TAD NO RAR CML RAR DCA I DCWPTR CDF 0 JMP I GENFIL BADV, CLA JMS I [PRINT TEXT /? BAD VERSION LETTER/ JMP I [GOAWAY CRLF, 0 TAD [215 JMS I (TYPE TAD [212 JMS I (TYPE JMP I CRLF PAGE LPLV, 0 JMS I (LPTST1 TAD NO CLL RTL RTL TAD (4 DCA I (7201 JMP I LPLV LPLC, 0 JMS I (LPTST1 TAD NO CLL RTL RTL RAL CIA DCA I (7202 JMP I LPLC TTECHO, 0 JMS I [TTST1 TAD NO SZA CLA TAD (SKP CLA-SZA TAD (SZA DCA I (7200+120 JMP I TTECHO TTPAGE, 0 JMS I (OLDTST JMS I [SRCH /V3D NEW ROUTINE 215;100;7450 JMP I [REASEM TAD (3 /POINT TO 'SZA CLA' DCA TEMP TAD NO SNA CLA TAD (SZA CLA-CLA /YES TAD (CLA /NO DCA I TEMP JMP I TTPAGE TTTAB, 0 JMS I [TTST1 JMS I [GETC SNA JMP TTEO TAD (-"/ SNA CLA JMS I [GETC TAD (-"N SZA CLA JMP I [SYNTAX JMP NOTEC TTEO, TAD NO SNA CLA TAD (5000 TAD L200 JMS I (TECO NOTEC, JMS I [SRCH L200, 200;100;7 JMP I [REASEM DCA TEMP STA CLL RAL /-2 TAD TEMP DCA T2 TAD TEMP TAD (3 DCA T3 TAD NO SNA CLA JMP SETAB TAD TEMP TAD (-4 DCA T4 TAD T4 AND (77 TAD (1200 /TAD TTY240 DCA I T2 TAD (SZA CLA DCA I T3 JMP I TTTAB SETAB, TAD TEMP TAD (-12 DCA T4 TAD I T4 DCA I T2 TAD (SKP CLA DCA I T3 JMP I TTTAB BADWID, JMS I [PRINT TEXT /? ILLEGAL WIDTH/ JMP I [GOAWAY BLK, "B;"L;"O;"C;"K;0 PAGE TTFILL, 0 JMS I [TTST1 JMS I [SRCH 200;100;1377 JMP I [REASEM TAD (-1 DCA TEMP TAD NO CLL RAL TAD (2 TAD TEMP DCA T2 TAD I T2 DCA I TEMP JMP I TTFILL REASEM, JMS I [PRINT TEXT /? CAN'T - MUST REASSEMBLE KL8E SOURCE/ JMP I [GOAWAY TTDELAY,0 JMS I [TTST1 JMP I [NOTIMPL JMP I TTDELAY /ENTER WITH PTR TO POSSIBLE KEYWORD IN AC KEYSRCH,0 DCA KPTR KL, TAD I KPTR ISZ KPTR SNA JMP GOTKEY CIA DCA TEMP JMS I [ALPHA /IS IT ALPHANUMERIC? JMP EOK /NO TAD TEMP /COMPARE CLL RAL /LOW ORDER 11 BITS SNA CLA JMP KL /MATCHED, KEEP LOOKING JMP I KEYSRCH /DIDN'T MATCH EOK, JMS I [BACKC TAD TEMP CIA /INPUT STREAM RAN OUT OR HIT SPACE SPA CLA JMP GOTKEY /SPACE OR EOL MATCH FLAGGED CHARACTER JMP I KEYSRCH KPTR, 0 GOTKEY, JMS I [SCAN STA /SKIP EXTRA STUFF JMS I [SPACE ISZ KEYSRCH /TAKE GOOD RETURN 2 JMP I KEYSRCH PTRTBL, ZBLOCK 4 0 PTPTBL, ZBLOCK 4 0 TTYTBL, WIDTH;TTWIDTH CODE;TTCODE ALT;TTALT ECHO;TTECHO LC;TTLC PAYGE;TTPAGE TAB;TTTAB FILL;TTFILL FLAGG;TTFLAG CTRL;TTCTRL GAG;TTGAG DELAY;TTDELAY PAUS;TTPAUS /V3D HGHT;TTHGHT /V3D SCOPP;TTSCOP /V3D COL;TTCOL /V3D ESC;TTESC /V3D AROW;TTAROW /V3D ZBLOCK 10 0 PAGE TTFLAG, 0 JMS TTST1 JMS I [SRCH 200;200;247 JMP I [REASEM TAD (-2 DCA TEMP TAD NO SNA CLA TAD (SZA CLA-CLA TAD (CLA DCA I TEMP JMP I TTFLAG TTLC, 0 JMS TTST1 JMS I [SRCH 200;200;377 JMP I [REASEM TAD (5 DCA TEMP TAD I TEMP CLL TAD [200 SNL CLA JMP I [REASEM TAD NO SNA CLA TAD [40 /SNA CLA TAD (7610 /SKP CLA DCA I TEMP JMP I TTLC TTCTRL, 0 JMS TTST1 JMP I [NOTIMPL JMP I TTCTRL TTWIDTH,0 JMS GETWID JMS TTST1 TAD NUM AND [7 SZA CLA JMP I [BADWID TAD NUM TAD [-200 SNA CLA JMP I [BADWID JMS I [SRCH 200;200;7600 JMP I [REASEM IAC DCA TEMP TAD I TEMP AND [177 TAD (177+7200 DCA T2 TAD TEMP IAC DCA T3 TAD NUM CIA DCA I T3 TAD I T3 DCA I T2 JMP I TTWIDTH GETWID, 0 TAD NO SZA CLA JMP I [SYNTAX JMS OPTEQ JMS I [NUMBER SNA JMP I (BADWID DCA NUM TAD FLG SZA CLA JMP I [SYNTAX /NO DIGITS TAD NUM AND [7400 SZA CLA JMP I [NUMBIG JMP I GETWID TTST1, 0 JMS I (ASRTST TAD VNO JMS I [BRANCH -1;OLDERR -2;OLDERR -3;TTOK -4;TTOK /V3C -5;TTOK /V3D ZBLOCK 4 0 JMP I [NEWERR TTOK, JMP I TTST1 OPTEQ, 0 JMS I [GETC TAD (-"= SZA CLA JMP I OPTEQ STA /V3D JMS I [SPACE JMS I [GETC /ADVANCE OVER = CLA JMP I OPTEQ PAGE OPRIN, 0 DCA N3 TAD (-4 DCA OKNT OPLP, TAD N3 RTL RTL AND [7 TAD [60 JMS I [TYPE TAD N3 RTL RAL DCA N3 ISZ OKNT JMP OPLP JMP I OPRIN OKNT, 0 N3, 0 GTEM, 0 SRCH, 0 TAD I SRCH ISZ SRCH TAD (7200-1 DCA XR1 TAD I SRCH ISZ SRCH CIA DCA CNT TAD I SRCH CIA DCA TEMP ISZ SRCH SRLUP, TAD I XR1 TAD TEMP SNA CLA JMP SRFND ISZ CNT JMP SRLUP JMP I SRCH SRFND, ISZ SRCH TAD XR1 JMP I SRCH GENCMN, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ONUM DCA NUM2 TAD FLG SZA CLA JMP I [SYNTAX JMS I [GETC DCA TEMP TAD TEMP SNA JMP I GENCMN TAD (-"= SZA TAD ("=-", SZA CLA JMP I [SYNTAX JMP I GENCMN GENLOC, 0 JMS GENCMN TAD DHI SPA CLA TAD [-200 TAD [-200 CLL TAD NUM2 SZL CLA JMP I [NUMBIG TAD NUM2 TAD (7200 /BASE OF HANDLER DCA NUM2 TAD TEMP SNA CLA JMS ODT GETNEW, JMS I [ONUM DCA NUM TAD FLG SZA CLA JMP I GENLOC JMS I [GETC SZA CLA JMP I [SYNTAX TAD NUM DCA I NUM2 JMP I GENLOC ODT, 0 TAD I NUM2 JMS OPRIN TAD ("/ JMS I [TYPE TAD I [READ DCA GTEM /SAVE CHAIN STATUS JMS I [READ TAD [LINBUF DCA LINPTR TAD GTEM DCA I [READ JMP I ODT OLDBAS, JMS I [PRINT TEXT /? OLD BASIC/ JMP I [GOAWAY VERSION,JMS I (PRINT TEXT \OS/8 SET V2A\ JMP I [START PAGE MTAPAR, 0 TAD NO SZA CLA JMP I [SYNTAX JMS MTST1 TAD LINPTR DCA SAVPTR TAD (EVEN JMS I [KEYSRCH SKP JMP SETE TAD SAVPTR DCA LINPTR TAD (ODD JMS I [KEYSRCH JMP I [SYNTAX TAD (400 SETE, TAD (2 DCA I (7200 JMP I MTAPAR MTST1, 0 TAD VNO JMS I [BRANCH -1;OLDERR -2;OLDERR -3;OLDERR -4;MTOK -5;MTOK -6;MTOK ZBLOCK 4 0 JMP I [NEWERR MTOK, JMP I MTST1 MTADEN, 0 JMS MTST1 TAD NO SZA CLA JMP I [SYNTAX JMP I [NOTIMP JMP I MTADEN MTAFIL, 0 JMS MTST1 TAD NO CIA /V3D IAC /V3D DCA I (7201 JMP I MTAFIL BADCOD, JMS I [PRINT TEXT /? UNKNOWN CARD CODE/ JMP I [GOAWAY /SUPPOSED TO WORK ON ALL VERSIONS CDCODE, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I (OPTEQ JMS I [NUMBER TAD (-32 /026 SNA JMP C026 TAD (32-35 /029 SZA CLA JMP BADCOD JMS CHANGE LIST1;LIST2 JMP I CDCODE C026, JMS CHANGE LIST1;LIST3 JMP I CDCODE CHANGE, 0 TAD I CHANGE DCA P1 ISZ CHANGE TAD I CHANGE DCA P2 ISZ CHANGE CHLUP, TAD I P1 SNA JMP I CHANGE TAD (7200 /BASE OF HANDLER DCA P3 TAD I P2 DCA I P3 ISZ P1 ISZ P2 JMP CHLUP P1, 0 P2, 0 P3, 0 GET, 0 KSF JMP .-1 KRB AND [177 TAD [200 /FORCE TO 8-BIT JMP I GET PAGE /FIXED FOR V3D: LIST1, 104;105;106 114;115;116 124;125;126;127 134;135;136 0 LIST2, 3203;4007;3502 7514;0577;3637 0104;1211;3374;0641 7316;3410;1376 LIST3, 7735;4076;0774 3314;1002;0305 3204;1273;3606;1341 3716;1175;3401 TECNAM, FILENAME TECO.SV TECO, 0 DCA SA TAD (TECNAM JMS LOOKUP JMP I TECO /NOT THERE DCA BLKN JMS I (7607 100 /READ 1 PAGE FROM TECO 7000 /BUFFER BLKN, 0 JMP I [SYSERR TAD BLKN DCA BLKN2 TAD SA DCA I (7002 /REL LOC 2 IS S.A. JMS I (7607 4100 7000 BLKN2, 0 JMP I [SYSERR JMP I TECO SA, 0 LOOKUP, 0 DCA ARG1 /PTR TO FILENAME IN AC CLA IAC /LOOKUP ON SYS CIF 10 JMS I USR 2 ARG1, 0 /STARTING BLOCK 0 JMP I LOOKUP /NOT FOUND TAD ARG1 ISZ LOOKUP JMP I LOOKUP /RETURN 2 WITH BLOCK # IN AC GENDVC, 0 TAD NO SZA CLA JMP I [SYNTAX JMS I [ONUM SNA JMP I [SYNTAX DCA NUCODE TAD NUCODE AND [7700 SZA CLA JMP I (NUMBIG TAD NUCODE TAD (-30 SPA CLA JMP I [NUMBIG TAD NUCODE CLL RTL RAL DCA NUCODE TAD (7200 DCA RR DVLUP, JMS I (GETIOT JMP I GENDVC TAD (-30 SPA CLA JMP DVLUP TAD I RR AND (7007 TAD NUCODE DCA I RR JMP DVLUP CDRTBL, CODE;CDCODE ZBLOCK 4 0 PAGE /7000-7177 BUFFER FOR TECO CCB /7200-7577 BUFFER FOR HANDLER FIELD 0 *200 $ |
Added src/os8/uni/CUSPS/SRCCOM.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 | /1 OS8 SOURCE COMPARE (SRCCOM) / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / /LAST EDITED 4/28/77 / / /COPYRIGHT 1973,1977 /DIGITAL EQUIPMENT CORPORATION /MAYNARD, MASS. 01754 / /PDP-8 SOURCE COMPARISON PROGRAM /STOLEN FROM PDP-10 SRCCOM BY R. LARY VERSION= 4 /CHANGE EVERY MAJOR EDIT PATCH="A IFNDEF CORE <CORE=2 /DEFAULT IS 8K SYSTEM> MPARAM=7643 /COMMAND DECODER PARAMETER BLOCK IFZERO CORE-2 <F1=0 /FIELD FOR FILE 1 F2=10 /FIELD FOR FILE 2 LNBEG=2000 /BEGINNING OF LINE BUFFER > IFZERO CORE-4 <F1=20 F2=30 LNBEG=20 > BUFLIM=FBLOCK-1001 /END OF LINE BUFFER INBUF=FBLOCK-1000 /INPUT BUFFER /SRCCOM FIELD 0 PAGE 0 FIELD 0 XR=10 *20 SCT, 0 /TEMPORARY OFILNM, ZBLOCK 4 /OUTPUT FILE NAME IFPTR, 0 /TEMPORARY SETUP1, NOPUNCH *7556 /JAM PARAMETERS UP AGAINST TOP OF USER CORE FBLOCK, ENPUNCH /LAYOUT OF FILE PARAMETER TABLE /THERE IS A COPY OF THIS TABLE IN FIELDS F1 AND F2. EACH COPY /CONTAINS ALL THE INFORMATION ABOUT THE FILE WHOSE BUFFERS /ARE IN THE SAME FIELD PGNUM, 1 /CURRENT INPUT PAGE CURLIN, 0 /CURRENT LINE (IN LINE BUFFER) TOPLIN, 0 /NUMBER OF LINES IN LINE BUFFER TMPLIN, 0 /TEMPORARY STORAGE FOR "CURLIN" OLDLIN, 1 /LINE OPTIMIZATION COUNTER OLDPTR, LNBEG /LINE OPTIMIZATION POINTER /THE NEXT SEVERAL WORDS ARE A SUBROUTINE /WHICH READS A BUFFER IN FROM THE INPUT FILE INTEMP, 0 /SHIFT REGISTER FOR "GCHAR" ROUTINE CIF 0 JMS I INHNDL INCHCT, 7777 /COUNT OF CHARACTERS IN BUFFER INPTR, 0 /POINTS TO CURRENT WORD IN BUFFER INREC, 0 /CONTAINS CURRENT INPUT RECORD ISZ INTEMP /SUBROUTINE SKIPS ON INPUT ERROR CIF 10 JMP I INTEMP INHNDL, 0 /POINTS TO ENTRY POINT OF INPUT HANDLER INEOF, 0 /END-OF-FILE INDICATOR INRCNT, 0 /COUNT OF RECORDS REMAINING IN THIS FILE IFNZRO .-7600 <_ERROR_> *SETUP1+.-FBLOCK/PUT ASSEMBLER LOCATION COUNTER BACK SETUP2=. /CORE ALLOCATION FOR 8K SYSTEM / FIELD 0 / /0000-0377 CONTROL CODE /0400-0777 INPUT HANDLER 1 /1000-1377 INPUT HANDLER 2 /1400-1777 OUTPUT HANDLER /2000-6555 FILE 1 LINE BUFFER /6556-7555 FILE 1 INPUT BUFFER /7556-7577 FILE 1 CONTROL BLOCK / / FIELD 1 / /0000-1377 SRCCOM PROPER /1400-1777 OUTPUT BUFFER /2000-6555 FILE 2 LINE BUFFER /6556-7555 FILE 2 INPUT BUFFER /7556-7577 FILE 2 CONTROL BLOCK / / / FORMAT OF LINE BUFFER: / THE LINE BUFFER CONSISTS OF SOURCE LINES. THE FIRST WORD / OF EACH LINE IS A LENGTH WORD GIVING THE LENGTH OF THE / LINE (INCLUDING THE LENGTH WORD ITSELF) AS A POSITIVE / NUMBER. THE NEXT WORD IS THE NUMBER OF THE SOURCE PAGE / ON WHICH THIS LINE WAS FOUND. SUBSEQUENT WORDS CONTAIN THE / CHARACTERS OF THE LINE ITSELF, PACKED ONE PER WORD. NODFMS, "N;"O;" ;"D;"I;"F;"F;"E;"R;"E;"N;"C;"E;"S;0 SETUP, 0 /ROUTINE TO SET UP FILE PARAMETERS TAD [SETUP1-SETUP2 DCA SCT TAD [TAD SETUP1 DCA INST2 TAD [FBLOCK-1 DCA XR INST2, HLT /MOVE THE SKELETON PARAMETER BLOCK DCA I XR /UP INTO THE DESIRED FIELD ISZ INST2 ISZ SCT JMP INST2 RDF TAD [6201 DCA SETCDF /SAVE FIELD NUMBER CDF 10 TAD I IFPTR CDF 0 SNA JMP I [INERR1 /NO INPUT FILE - BAD CIF 10 JMS I [200 /ASSIGN DEVICE HANDLER 1 DVPAGE, 0 HLT /NEVER HOPPEN CDF 10 TAD I IFPTR AND [7760 /COMPUTE FILE LENGTH SZA TAD [17 CLL CML RTR RTR DCA SCT /SAVE IT AWAY TEMPORARILY ISZ IFPTR TAD I IFPTR SETCDF, HLT /RESET DATA FIELD DCA I [INREC /SAVE STARTING BLOCK NUMBER TAD SCT DCA I [INRCNT /SAVE FILE LENGTH TAD DVPAGE DCA I [INHNDL /SAVE DEVICE HANDLER ENTRY POINT ISZ IFPTR JMP I SETUP /RETURN *200 /INITIALIZATION CODE SRCCOM, ISZ NOCHN CIF 10 JMS I [7700 10 /BRING USR INTO CORE SRCCD, TAD NOCHN /HAVE WE BEEN CHAINED TO? SNA CLA JMP NOSRCD /YES CIF 10 JMS I [200 5 /COMMAND DECODE 0 /NO DEFAULT EXTENSIONS NOSRCD, TAD [7617 DCA IFPTR /SET IFPTR POINTING TO FILE 1 TAD [401 DCA DVPAGE /FILE 1 HANDLER GOES IN 400-777 CDF F1 JMS SETUP /SET UP FILE 1 PARAMETER AREA TAD [1001 DCA DVPAGE /FILE 2 HANDLER GOES INTO 1000-1377 CDF F2 JMS SETUP /SET UP FILE 2 PARAMETER AREA TAD [1401 DCA OUPAGE /OUTPUT HANDLER GOES INTO 1400-1777 GTOUHN, CDF 10 TAD I [7600 /GET OUTPUT DEVICE # CDF 0 SZA /IS THERE ONE? JMP ASSOUT DCA TTYNO CIF 10 /NO - LOOK UP "TTY" JMS I [200 12 /INQUIRE 5524 /=2424+3100 = TTY TTYNO, 0 0 JMP OUERR1 /NO TELETYPE TAD TTYNO CDF 10 DCA I [7600 JMP GTOUHN /BACK TO GET IT AGAIN ASSOUT, CIF 10 JMS I [200 1 OUPAGE, 0 JMP OUERR1 TAD [-4 DCA SCT TAD [7600 DCA XR TAD [DCA OFILNM DCA INST1 CDF 10 /MOVE OUTPUT FILE NAME INTO FIELD 0 TAD I XR INST1, HLT ISZ INST1 ISZ SCT JMP INST1-1 TAD PFILNM DCA ORCNO /SET UP ENTER TAD OFILNM+3 SNA TAD [1423 /ASSUMED OUTPUT EXTENSION = .LS DCA OFILNM+3 TAD I [7600 CDF 0 CIF 10 JMS I [200 3 ORCNO, 0 /POINTS TO FILE NAME OLEN, 0 JMP OUERR1 CIF 10 JMS I [200 11 /KICK USR OUT OF CORE DCA OCOUNT CDF CIF 10 TAD ORCNO DCA I [OUREC TAD OUPAGE JMP I .+1 SRCOPT /GO SET UP OPTION SWITCHES AND COMPARE OCLOSE, CIF 10 JMS I [7700 10 /GET USR INTO CORE CDF CIF 10 TAD I [7600 /GET OUTPUT DEVICE NUMBER CDF 0 JMS I [200 4 /CLOSE OUTPUT FILE PFILNM, OFILNM OCOUNT, 0 /COUNT OF BLOCKS WRITTEN JMP OUERR1 /ERROR ON CLOSE SRCATS, ISZ NOCHN /IN CASE WE LOOP, CLEAR "CHAINED TO" FLAG CDF 10 TAD I [MPARAM-1 /GET ALTMODE FLAG CDF 0 SPA CLA JMP I [7605 /GO AWAY IF ALTMODE JMP SRCCD /GO BACK FOR MORE NOCHN, 0 INERR1, RDF CLL RTR RAR TAD [-4 OUERR1, TAD [4005 NOROOM, TAD [260 DCA SETUP TAD [277 JMS TYPE /OUTPUT "?N" WHERE N IS THE ERROR NUMBER TAD SETUP JMS TYPE TAD [215 JMS TYPE TAD [212 JMS TYPE TAD SETUP SPA CLA /IS THE USR IN CORE? JMP SRCATS /YES - DON'T LOAD IT CIF 10 JMS I [7700 /NO - LOAD IT 10 JMP SRCATS TYPE, 0 TLS TSF JMP .-1 CLA JMP I TYPE / PAGE 0 LITERALS FIELD 1 /PAGE 0 FOR SRCCOM *0 T1, 0 T2, 0 T, 0 CT, 0 XR1=11 XR2=12 *20 /*************** SRCCOM SWITCHES *************** CSW, 0 /"C" SWITCH - ON=-257, MEANING IGNORE COMMENTS / OFF=+521, MEANING COMPARE COMMENTS SSW, 0 /"S" SWITCH - ON=-240, MEANING IGNORE SPACES & TABS / OFF=-200, MEANING COMPARE SPACES&TABS TSW, 0 /"T" SWITCH - ON=20 , MEANING CONVERT TABS ON OUTPUT / OFF=0 , MEANING PRINT TABS ON OUTPUT XSW, 0 /"X" SWITCH - ON=1 , MEANING DON'T INPUT COMMENTS / OFF=0 , MEANING INPUT COMMENTS INTO CORE ALLSW, 0 /"B" SWITCH - ON=2000, MEANING COMPARE BLANK LINES / OFF=0 , MEANING IGNORE BLANK LINES NUMLIN, 0 /NUMERICAL ARGUMENT - NUMBER OF LINES CONSTITUTING /A MATCH - SET TO -3 IF NO NUMERICAL ARGUMENT MLIMIT, 0 GETCNT, 0 GETFIL, 0 CHAR, 0 IPTR, 0 NUMTMP, 0 PLNCNT, 0 PNTPGN, 0 OUHNDL, 0 /THESE 5 WORDS ARE USED BY OUTPUT ROUTINE OUCHCT, 0 OUPTR, 0 OUXPTR, 0 OUTEMP, 0 TABCT, 0 DIFFS, 0 /DIFFERENCES FOUND FLAG CTCCHK, 0 TAD [200 KRS /GET A CHAR FROM THE TELETYPE TAD [-203 /CHECK FOR EITHER PARITY ^C SNA CLA KSF /WITH THE KEYBOARD FLAG UP JMP I CTCCHK /NOPE CDF CIF 0 /YUP - RETURN TO OS/8 JMP I [7600 PAGE SETONE, 0 /ROUTINE TO FIND WHERE A LINE IS TAD I [CURLIN /GET LINE NUMBER DCA TLNNUM /SAVE IT AWAY TAD I [OLDPTR /GET THE POINTER TO THE LATEST LINE SETOPT, DCA T /SAVE THE STARTING POINTER TAD TLNNUM /GET THE TARGET LINE CMA CLL TAD I [OLDLIN /IS IT BEFORE OR AFTER THE LATEST LINE? SZL JMP SETRST /BEFORE - WE MUST START SEARCHING FROM LINE 1 DCA CT /AFTER - START SEARCHING FROM LATEST LINE TLOOP, ISZ CT JMP KEEPON /NOT THERE YET TAD TLNNUM /WE FOUND IT - MAKE THIS LINE DCA I [OLDLIN /THE NEW "LATEST LINE" TAD T /TO SPEED UP DCA I [OLDPTR /FUTURE SEARCHES. CLA CMA TAD T JMP I SETONE /RETURN POINTER FOR AUTO-XR KEEPON, TAD I T TAD T /ADD LENGTH OF THIS LINE TO POINTER DCA T /TO GET POINTER TO NEXT LINE JMP TLOOP TLNNUM, 0 /TEMPORARY FOR SETONE - DO NOT USE ANYWHERE ELSE SETRST, CLA IAC /RESET THE "LATEST LINE" POINTERS TO THE FIRST DCA I [OLDLIN /LINE, SINCE THE LINE WE SEEK IS BEFORE TAD [LNBEG /THE CURRENT "LATEST LINE" JMP SETOPT /GO BACK AND FIND THE LINE MOVEUP, 0 /SUBR TO DELETE LINES FROM CORE TAD I [CURLIN /GET FIRST LINE NOT TO BE DELETED CIA TAD I [TOPLIN DCA I [TOPLIN /REDUCE THE NUMBER OF LINES IN THE BUFFER TAD I [TOPLIN /GET NEW LINE COUNT SNA /IF ALL LINES DELETED, DON'T MOVE CORE JMP MOVXIT /JUST CLEAN UP AND GET OUT IAC JMS SETONE /GET POINTER TO LAST LINE+1 CIA DCA MLIMIT /SAVE AS LIMIT ON MOVE IAC JMS SETONE /GET POINTER TO THE FIRST LINE NOT TO DELETE DCA XR1 TAD [LNBEG-1 DCA XR2 MLOOP, TAD I XR1 DCA I XR2 /AREN'T AUTO-XRS WONDERFUL TAD XR1 TAD MLIMIT /(ACTUALLY, NO) SZA CLA JMP MLOOP MOVXIT, CLA IAC /AFTER MOVING CORE AROUND, WE MUST DCA I [OLDLIN /RESET THE "LATEST LINE" POINTERS TO THE FIRST TAD [LNBEG /LINE SINCE IT IS THE ONLY ONE WHICH DCA I [OLDPTR /HAS A KNOWN POSITION. JMP I MOVEUP COMPL, 0 /SUBROUTINE TO COMPARE TWO LINES CDF F1 JMS SETONE /GET POINTER TO CURRENT LINE IN FILE 1 TAD [2 /SKIP OVER PROLOGUE DCA XR1 CDF F2 JMS SETONE /GET POINTER TO CURRENT LINE IN FILE 2 TAD [2 /SKIP OVER PROLOGUE DCA XR2 COMP1, CDF F1 TAD I XR1 /GET A CHAR FROM FILE 1 DCA T1 COMP2, CDF F2 TAD I XR2 DCA T2 /AND A CHAR FROM FILE 2 COMP0, TAD T2 CIA TAD T1 SZA CLA /ARE THEY EQUAL? JMP COMP4 /NO COMP5, TAD T1 SZA TAD CSW /IF AT END OF LINE, OR IF AT A "/" SZA CLA /AND "IGNORE COMMENTS" SWITCH ON, JMP COMP1 JMP I COMPL /TAKE "LINES MATCH" RETURN COMP3, CDF F1 TAD I XR1 /GET THE NEXT CHAR FROM FILE 1 DCA T1 COMP4, TAD T1 TAD SSW /IF T1 IS A BLANK OR A TAB SZA TAD [27 /(27=BLANK-TAB) SNA CLA /AND WE ARE IGNORING BLANKS, JMP COMP3 /THEN IGNORE T1 TAD T2 TAD SSW /DO THE SAME WITH T2 SZA TAD [27 SNA CLA JMP COMP2 TAD T1 CIA TAD T2 /NOW THAT WE HAVE (MAYBE) ELIMINATED BLANKS SNA CLA /ARE T1 AND T2 STILL UNEQUAL? JMP COMP5 /NO - THERE'S STILL HOPE TAD T1 /YES - NOW TEST COMMENT SWITCH CMA AND T2 TAD CSW /IF T1 IS A CARRIAGE RETURN AND T2 IS A "/" SNA CLA /WITH THE COMMENT SWITCH ON WE'VE SUCEEDED JMP I COMPL /SO TAKE "LINES MATCH" RETURN TAD T2 CMA AND T1 /SAME IF T2=CARRIAGE RETURN AND T1="/" TAD CSW SZA CLA ISZ COMPL /OTHERWISE TAKE "LINES DON'T MATCH" RETURN JMP I COMPL GETTWO, 0 /SUBROUTINE TO GET A LINE FROM EACH FILE CLA CLL CMA RTL DCA GETCNT DCA GETFIL /ZERO INDICATOR AS TO WHICH FILE IS NULL CDF F1 JMS I [GLINE /GET A LINE FROM FILE 1 CDF F2 JMS I [GLINE /DITTO FILE 2 ISZ GETCNT /HOW MANY LINES DID WE GET? JMP I GETTWO /LESS THAN TWO - TAKE EOF RETURN ISZ GETTWO JMP I GETTWO /TAKE NORMAL RETURN PAGE GLINE, 0 /SUBROUTINE TO GET A LINE FROM A FILE TAD I [CURLIN CIA TAD I [TOPLIN SZA CLA /IS THE LINE IN CORE? JMP GLEXIT /YES CLA IAC JMS I [SETONE /GET POINTER TO THIS LINE DCA XR1 CLA CLL CML RTL DCA I XR1 /SET WORD COUNT TO 2 TAD XR1 DCA T /SAVE POINTER TO LENGTH WORD JMS CTCCHK /CHECK FOR ^C TYPED ISZ XR1 GLINE2, JMS GCHAR /MAIN LOOP - GET A CHARACTER JMS I [TSTXSW /SEE WHETHER WE SHOULD INPUT COMMENTS CLA CLL CMA RAL TAD CHAR TAD ALLSW /IF THE CHAR IS A CARRIAGE RETURN AND THE TAD I T /"B" SWITCH IS OFF AND THE LINE COUNT IS 2, SNA CLA /THEN WE SHOULD IGNORE THIS BLANK LINE. JMP GLINE2 TAD CHAR DCA I XR1 /SALT IT AWAY TAD XR1 CLL TAD [4-BUFLIM /COMPARE AGAINST END OF BUFFER SNL CLA JMP .+3 CDF CIF 0 /LINE OVERFLOWS CORE - BAD! JMP I [NOROOM /TELL THE WORLD ISZ I T /BUMP COUNTER OF WORDS IN LINE TAD CHAR SZA CLA /WAS IT A CARRIAGE RETURN? JMP GLINE2 /NO ISZ I [TOPLIN /YES - BUMP COUNT OF LINES IN CORE ISZ T TAD I [PGNUM DCA I T GLEXIT, ISZ GETCNT /BUMP COUNTER OF # OF LINES GOTTEN RDF TAD [6201 DCA GETFIL /INDICATE THAT THIS FILE WAS NOT NULL ISZ I [CURLIN /BUMP CURRENT LINE POINTER JMP I GLINE GCHAR, 0 /SUBROUTINE TO GET A CHAR FROM A FILE TAD I [INPTR DCA IPTR /SAVE POINTER TO CURRENT BUFFER WORD ISZ I [INCHCT /BUMP CHAR COUNTER JMP GETIN TAD I [INEOF /END OF BUFFER SZA CLA /END OF FILE?? JMP GEOF+1 /YES CLA CLL CML RTL TAD I [INRCNT /BUMP COUNT OF REMAINING RECORDS BY 2 SZL /OVERFLOW? ISZ I [INEOF /YES - SET END OF FILE FLAG SNL DCA I [INRCNT /RESTORE COUNTER IF NO OVERFLOW CLL CMA CML RTL RTL RTL TAD [401 /COMPUTE INPUT CONTROL WORD RDF DCA I [INCHCT TAD [INBUF DCA I [INPTR /PUT BUFFER ADDRESS INTO CALLING SEQUENCE RDF TAD [6203 DCA .+1 NOP /SET INSTRUCTION FIELD TO DATA FIELD JMS I [INTEMP /CALL SUBR TO READ IN BUFFER JMP .+4 /NO ERROR SPA CLA /FATAL ERROR? JMP I [INERR /YES ISZ I [INEOF /NO - SET END OF FILE FLAG ISZ I [INREC ISZ I [INREC /BUMP RECORD NUMBER BY 2 TAD [10 DCA I [INTEMP /INITIALIZE SHIFT REGISTER TAD I [INCHCT CLL RAL TAD I [INCHCT AND [7600 CMA DCA I [INCHCT /COMPUTE CHAR COUNT FROM BUFFER CONTROL WD JMP GCHAR+1 /START ALL OVER WITH NEW BUFFER GETIN, TAD I [INTEMP SPA /IF WE HAVE A CHAR IN THE SHIFT BUFFER DCA I IPTR /WRITE OVER THE CURRENT BUFFER WORD WITH IT DCA I [INTEMP /AND ZERO THE SHIFT BUFFER TAD I IPTR /GET THE CURRENT BUFFER WORD AND [7400 CLL RAL TAD I [INTEMP RTL /SHIFT THE HIGH ORDER 4 BITS RTL /INTO THE SHIFT BUFFER SMA /DID WE GET A COMPLETE CHARACTER? ISZ I [INPTR /NO - BUMP WORD POINTER DCA I [INTEMP TAD I IPTR AND [177 /USE LOW ORDER 7 BITS OF THE CURRENT WORD SZA /AS THE CHARACTER TAD [-177 /IGNORING BLANK TAPE, RUBOUTS, LINE-FEEDS SZA /AND VERT. TABS TAD [177-13 SZA IAC SNA JMP GCHAR+1 TAD [12-14 SNA JMP FFEED /FORM FEED IS SPECIAL TAD [14-32 SNA JMP GEOF /^Z SIGNIFIES END-OF-FILE TAD [32-15 SZA TAD [215 /AND CARRIAGE RETURN IS MAPPED INTO 0 DCA CHAR JMP I GCHAR FFEED, ISZ I [PGNUM /BUMP THE PROPER PAGE COUNT ON A FORM FEED JMP GCHAR+1 /BUT OTHERWISE IGNORE IT GEOF, ISZ I [INEOF /SET END-OF-FILE FLAG CLA CMA DCA I [INCHCT /FORCE AN EMPTY BUFFER JMP I GLINE /RETURN FROM GLINE WITHOUT SETTING GETFIL PAGE / INITIALIZATION STARTC, JMS I [OUSETP /INITIALIZE OUTPUT BUFFER POINTERS CLA IAC DCA PNTPGN /FUDGE PNTPGN WHILE PRINTING HEADER LINES TAD [HEDING-1 JMS I [PNTHDG /PRINT SRCCOM HEADING LINE JMS I [GETTWO /GET TITLE LINES JMP FINISH /ONE FILE IS EMPTY - ABORT COMPARISON CDF F1 JMS I [PNTTXT /PRINT FILE 1 HEADER CDF F2 JMS I [PNTTXT /AND FILE 2 HEADER DCA PNTPGN /INITIALIZE PAGE NUMBER STA DCA DIFFS /INITIALIZE FLAG TO NO DIFFERENCES / MAIN LOOP MAIN, CDF F1 JMS I [MOVEUP CDF F2 JMS I [MOVEUP /DELETE ANY USELESS LINES MAINST, CDF F1 DCA I [CURLIN CDF F2 DCA I [CURLIN JMS I [GETTWO /GET TWO INPUT LINES JMP MAIN15 /ONE FILE IS EMPTY JMS I [COMPL /COMPARE THE LINES JMP MAIN /EQUAL - DELETE AND CONTINUE DCA DIFFS /UNEQUAL - CLEAR "NO DIFFERENCES" FLAG MAIN10, JMS I [GETTWO /GET TWO MORE LINES JMP MAIN15 /ONE FILE RAN OUT CDF F1 DCA I [CURLIN /INITIALIZE FILE 1 LINE NO. MAIN12, ISZ I [CURLIN /BUMP TO NEXT LINE IN FILE 1 JMS I [COMPL /COMPARE NEW LINE FROM FILE 2 JMS MULTI /WITH THIS LINE FROM FILE 1 CDF F2 /AND IF MATCH IS FOUND CHECK MULTIPLE LINES TAD I [CURLIN CIA CDF F1 TAD I [CURLIN SZA CLA /THROUGH WITH FILE 1 LINES? JMP MAIN12 /NO CDF F2 CLA IAC DCA I [CURLIN /NOW INITIALIZE FILE 2 LINE NO. MAIN14, TAD I [CURLIN CIA CDF F1 TAD I [CURLIN SNA CLA /HAVE WE EXHAUSTED FILE 2 LINES? JMP MAIN10 /YES - NO MATCH AT ALL JMS I [COMPL /NO - COMPARE ALL FILE 2 LINES JMS MULTI /AGAINST NEW FILE 1 LINE CDF F2 /AND, IF MATCH, CHECK MULTIPLE LINES ISZ I [CURLIN /GO TO NEXT FILE 2 LINE JMP MAIN14 /AND LOOP MAIN15, TAD GETFIL SNA /FIND WHICH FILE WAS EMPTY JMP FINISH /BOTH - ALL DONE DCA MAIN18 CDF F1 TAD I [CURLIN CDF F2 SZA CLA TAD I [CURLIN SNA CLA /IS EITHER FILE EXHAUSTED IN CORE? JMP MAIN18 /YES - PRINT ALL OF OTHER FILE TAD MAIN18 /GET CDF OF LONG FILE CIA TAD [4402+F1+F2 /COMPUTE CDF OF SHORT FILE DCA MAIN17 MAIN17, NOP TAD I [CURLIN CMA CLL TAD I [TOPLIN SNL CLA /IS CURLIN < TOPLIN? JMP MAIN10 /NO - WE STILL HAVE SOME COMPARING TO DO ISZ I [CURLIN JMS I [COMPL JMS MULTI JMP MAIN17 MAIN18, NOP /SET DF TO DATA FIELD OF LONG FILE JMS I [PNTTXT /PRINT IT JMP MAIN FINISH, CDF F1 TAD I [CURLIN CDF F2 TAD I [CURLIN SZA CLA /ARE BOTH CORE BUFFERS EMPTY? JMS I [PNTBTH /NO - PRINT THEM JMP I [EOCOMP / MULTI-LINE COMPARATOR MULTI, 0 CDF F1 TAD I [CURLIN DCA I [TMPLIN CDF F2 TAD I [CURLIN DCA I [TMPLIN /STORE CURLIN AWAY IN A TEMPORARY TAD NUMLIN DCA NUMTMP /GET COUNT OF LINES TO COMPARE JMP MULT6 MULT2, JMS I [GETTWO /GET TWO LINES JMP MULT4 /ONE FILE HAS NO MORE JMS I [COMPL /COMPARE THEM JMP MULT6 /THEY COMPARE - KEEP GOING MULT4, JMS SWAPCT /RESET OLD CURLIN JMP I MULTI MULT6, ISZ NUMTMP /LINE COUNT EXHAUSTED? JMP MULT2 /NO - KEEP COMPARING JMS SWAPCT /RESTORE OLD CURLIN JMS I [PNTBTH /PRINT OUT DIFFERENCES TAD [-10 JMS I [PNTAST /PRINT OUT SEPARATOR JMS SWAPCT /RE-SWAP FOR DELETION JMP MAIN /DELETE THRU MATCHING LINES AND CONTINUE SWAPCT, 0 CDF F1 JMS SWAPX /SWAP CURLIN AND TMPLIN FOR FILE 1 CDF F2 JMS SWAPX /DITTO FOR FILE 2 JMP I SWAPCT SWAPX, 0 TAD I [CURLIN DCA NUMTMP TAD I [TMPLIN DCA I [CURLIN TAD NUMTMP DCA I [TMPLIN JMP I SWAPX PAGE PNTBTH, 0 /PRINT BOTH TEXT BUFFERS TAD [212 JMS I [OCHAR /SEPARATOR CDF F1 JMS PNTTXT /PRINT FILE 1 BUFFER TAD [-4 JMS PNTAST /PRINT SEPARATOR CDF F2 JMS PNTTXT /PRINT FILE 2 BUFFER TAD [212 JMS I [OCHAR /SEPARATOR JMP I PNTBTH PNTTXT, 0 /PRINT A TEXT BUFFER TAD I [CURLIN CIA DCA PLNCNT /GET # OF LINES TO PRINT PNTLP, DCA TABCT /ZERO TAB COUNTER (IN CASE "T" SW ON) RDF CLL RTR RAR /GET FILE NUMBER TAD [261 /260 FOR 12K VERSION JMS I [OCHAR TAD [251 JMS I [OCHAR /PRINT RPAR TAD PLNCNT IAC JMS I [SETONE /GET POINTER TO LINE IAC DCA XR1 TAD I XR1 /GET THE PAGE NUMBER OF THE LINE DCA T TAD T CIA TAD PNTPGN SNA CLA /DID THE PAGE NUMBER JUST CHANGE? JMP PNTTAB /NO - DON'T PRINT IT TAD TENTAD DCA PNTTAD TAD T DCA PNTPGN /UPDATE THE CURRENT PAGE NUMBER CLA CLL CMA RTL DCA CT /PRINT 3 DECIMAL DIGITS DIGLP1, DCA T1 JMP .+3 DIGLP2, DCA T ISZ T1 TAD T PNTTAD, HLT /ADD IN A POWER OF 10 SMA JMP DIGLP2 /KEEP GOING PN7200, CLA ISZ PNTTAD /GOT A DIGIT - GO TO NEXT POWER OF 10 TAD T1 TAD [260 JMS I [OCHAR /PRINT DIGIT ISZ CT /THROUGH? JMP DIGLP1 /NO PNTTAB, TAD TSW SNA CLA /SHOULD WE SIMULATE TABS? JMP PNTCHR /NO TAD [240 /YES - PRINT A BLANK JMS I [OCHAR TAD TABCT AND [7 SZA CLA /KEEP PRINTING BLANKS UNTIL WE REACH A MULTIPLE OF JMP PNTTAB /EIGHT COLUMNS. PNTCLP, TAD I XR1 /GET A CHARACTER FROM THE LINE SNA /END? JMP PNTCR /YES TAD [-211 SNA /IS IT A TAB? JMP PNTTAB /YES PNTCHR, TAD [211 /NO - RESTORE THE CHAR JMS I [OCHAR JMP PNTCLP /PRINT IT AND LOOP PNTCR, TAD [215 /PRINT CRLF JMS I [OCHAR TAD [212 JMS I [OCHAR ISZ PLNCNT JMP PNTLP /LOOP FOR EACH LINE IN BUFFER JMP I PNTTXT PNTAST, 0 /ROUTINE TO PRINT ASTERISKS DCA CT /SAVE COUNTER TAD ["* JMS I [OCHAR ISZ CT JMP .-3 /PRINT REQUIRED NUMBER OF ASTERISKS TAD [215 JMS I [OCHAR /TERMINATE THE LINE TAD [212 JMS I [OCHAR DCA PNTPGN /KILL CURR. PAGE NUMBER JMP I PNTAST EOCOMP, ISZ DIFFS /ANY DIFFERENCES? JMP .+4 /YES CDF 0 /MESSAGE IN FIELD 0 TAD [NODFMS-1 JMS I [PNTHDG /NO - PRINT MESSAGE TAD PN7200 /ROUTINE TO FINISH UP OUTPUT DCA CT TAD [214 JMS I [OCHAR /TERMINATE THE OUTPUT FILE TAD [232 /WITH A FORM FEED AND A ^Z JMS I [OCHAR ISZ CT JMP .-2 /FILL WITH ZEROS TO FORCE BUFFER OUT CDF CIF 0 JMP I .+1 /GO TO FIELD 0 TO FINISH UP AS WE WILL BE OCLOSE /OVERLAYED BY THE USR DURING THE CLOSE TENTAD, TAD .+1 /TABLE OF POWERS OF TEN -144 -12 -1 INERR, RDF /INPUT ERROR - ERROR NUMBER=FILE NUMBER CLL RTR RAR IFZERO CORE-2 <IAC> IFZERO CORE-4 <TAD [-1> CDF CIF 0 JMP I [NOROOM /GO TO COMMON ERROR ROUTINE PNTHDG, 0 /ROUTINE TO PRINT A LITERAL LINE DCA XR1 /POINTER TO LINE IN AC TAD PNTHDG DCA PNTTXT /WE WORK BY FAKING OUT PNTTXT STA DCA PLNCNT /SET LINE COUNTER TO 1 JMP PNTCLP PAGE OCHAR, 0 /LOW LEVEL OUTPUT ROUTINE AND [377 DCA OUTEMP ISZ TABCT /BUMP TAB COUNTER RDF TAD [6201 DCA OCDF CDF 10 TAD OUCHCT /GET CHAR COUNTER - CHAR COUNTER COUNTS RTR /FOUR TIMES FOR EACH THREE CHARACTERS. CML /WHEN THE LOW ORDER BITS OF THE COUNT ARE 10, SZL SPA CLA /ITS TIME TO SQUEEZE A CHAR INTO THE HIGH JMP OUNORM /ORDER BITS - OTHERWISE JUST STORE IT ISZ OUCHCT /WE MUST SQUEEZE - BUMP OUCHCT AN EXTRA TAD OUTEMP /TIME RTL RTL AND [7400 TAD I OUXPTR /FIRST WORD OF DOUBLET DCA I OUXPTR TAD OUTEMP RTR RTR RAR AND [7400 TAD I OUPTR /SECOND WORD OF DOUBLET JMP OUCOMN OUNORM, TAD OUPTR DCA OUXPTR /REMEMBER LAST WORD ISZ OUPTR TAD OUTEMP OUCOMN, DCA I OUPTR ISZ OUCHCT /BUMP CHAR COUNT JMP OCDF /RETURN CIF 0 /CHAR COUNT OVFLO - OUTPUT BUFFER JMS I OUHNDL 4210 1400 OUREC, 0 JMP OUERR2 JMS OUSETP /INITIALIZE FOR NEXT BUFFER ISZ OUREC /BUMP RECORD NUMBER CDF 0 ISZ I [OCOUNT /BUMP CLOSING COUNT ISZ I [OLEN /AND LENGTH OF HOLE JMP OCDF OUERR2, CLL CML RTL /OUTPUT ERROR OR FILE TOO BIG - GENERATE IAC /A 3 OR A 4 MESSAGE, RESPECTIVELY CDF CIF 0 JMP I [NOROOM OCDF, HLT /RESTORE DATA FIELD JMP I OCHAR /RETURN OUSETP, 0 TAD [7000 /4 COUNTS FOR 2 WORDS DCA OUCHCT TAD [1377 DCA OUPTR JMP I OUSETP TSTXSW, 0 /SUBROUTINE TO IGNORE COMMENTS ON INPUT TAD CHAR /IF "X" SWITCH SET TAD [-257 SNA CLA TAD XSW /IF XSW IS OFF OR THE CURRENT CHAR ISN'T A / SNA CLA JMP I TSTXSW /RETURN JMS I [GCHAR TAD CHAR /SKIP CHARACTERS UNTIL CARRIAGE RETURN SZA CLA JMP .-3 TSTXLP, CLA CLL CMA RAL TAD I T SNA CLA /ARE WE AT THE BEGINNING OF A LINE? JMP I TSTXSW /YES - GLINE WILL DELETE IT IF NECESSARY TAD XR1 DCA TX TAD I TX TAD [-240 SZA /IS THE PREVIOUS CHARACTER A SPACE TAD [240-211 SZA CLA /OR A TAB? JMP I TSTXSW /NO CMA TAD XR1 DCA XR1 /BACK UP CHAR PTR CMA TAD I T DCA I T /AND CHAR CTR JMP TSTXLP /LOOP TX, 0 SRCOPT, DCA OUHNDL TAD I [MPARAM CMA AND [1000 /"C" OPTION TAD [-257 DCA CSW CLA CLL CML RTR AND I [MPARAM DCA ALLSW /"B" OPTION TAD I [MPARAM+1 CMA AND [40 /"S" OPTION TAD [-240 DCA SSW TAD I [MPARAM+1 AND [20 /"T" OPTION DCA TSW CLA IAC AND I [MPARAM+1 DCA XSW /"X" OPTION TAD I [MPARAM+3 CIA /GET NEGATIVE OF NUMERICAL ARGUMENT SNA CLA CLL CMA RTL /DEFAULT VALUE IS 3 DCA NUMLIN /TO NUMBER OF LINES NECESSARY FOR A MATCH JMP I .+1 STARTC HEDING, "S;"R;"C;"C;"O;"M;" ;"V;VERSION+"0;PATCH;212;0 /PAGE 0 LITERALS FOR FIELD 1 $-$-$ /END OF ASSEMBLY OF SRCCOM |
Added src/os8/uni/CUSPS/TDCOPY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 | /TD8E DECTAPE COPY, V4 / / / / / / // / / / / /COPYRIGHT (C) 1972, 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. / / / / / / /DEFINITIONS FOR PAL8 AND PAL10 BSW=7002 MQL=7421 MQA=7501 CAM=7621 SWP=7521 ACL=7701 CAF=6007 CDI=6203 KCF=6030 SDSS=6771 SDST=6772 SDSQ=6773 SDLC=6774 SDLD=6775 SDRC=6776 SDRD=6777 FIXTAB HALT=HLT /UNIT NUMBER DEFINITIONS FOR TD8E IOT'S UNIT01=0770 UNIT23=0760 UNIT45=0750 UNIT67=0740 LIMIT=7600 *11 X11, 0 X12, 0 /PAGE 0 CONSTANTS AND VARIABLES *20 INPUT, 0 /INPUT UNIT CONSTANT OUTPUT, 0 /OUTPUT UNIT CONSTANTS 0 0 0 0 0 0 OCOUNT, 0 /NUMBER OF OUTPUT UNITS SPECIFIED OPOINT, 0 LIST, OUTPUT-1 OUTNUM, 0 IBLOCK, 0 /STARTING INPUT BLOCK OBLOCK, 0 /STARTING OUTPUT BLOCK NUMBER, 0 /NUMBER OF BLOCKS TO TRANSFER FIELDS, 0 /-(HIGHEST FIELD AVAILABLE) COUNT, 0 /TEMPORARY COUNTERS COUNT1, 0 / " COUNT2, 0 / " COUNT3, 0 / " COUNT4, 0 / " UNIT, 0 /UNIT CONSTANT--THIS TRANSFER VERF, 0 /VERIFY SWITCH (1=YES,0=NO) WDCNT, 0 /-(NUMBER OF WORDS PER BLOCK) RW, 0 /READ/WRITE BIT--THIS TRANSFER FLD0, 0 /# OF BLOCKS IN FIELD 0 BUFFER FLDN, 0 /# OF BLOCKS IN FIELD N BUFFER BUF0, 0 /START OF FIELD 0 BUFFER BUFN, 0 /START OF FIELD N BUFFER XNUMB, 0 /# OF BLOCKS LEFT TO TRANSFER BLOCKN, 0 /STARTING BLOCK NUMBER--THIS TRANSFER NUMB1, 0 NUMB2, 0 VB, 0 END0, 0 /BEGINNING OF FIELD 0 VERIFY BUFFER ENTRY, 0 /ENTRY TO TD8E HANDLER INB, 0 OUTB, 0 OHOLD, 0 MESSG1, TEXT @TD8E COPY V4A@ MESSG3, TEXT @ 12-BIT WORDS PER BLOCK@ *200 START, TLS JMS CRLF JMS I [MESSGE MESSG1 /@TD8E COPY@ JMS CRLF DCA COUNT JMP I [END /ONCE ONLY CODE FOR MULTIPLE FIELD TEST START1, JMS QUEST MESSG4 /@FROM UNIT:@ SWP JMS UNITNO /MAKE UNIT NUMBER CONSTANT DCA INPUT TAD LIST DCA OPOINT SKP AGAIN, JMS ERR4 /*ILLEGAL RESPONSE* DCA OCOUNT DCA COUNT JMS I [MESSGE MESSG5 /@TO UNITS:@ MORE2, JMS I [ANSWER JMP AGAIN ACL JMS UNITNO /MAKE UNIT NUMBER CONSTANT MQL /STORE IN MQ MQA /RESTORE TO AC CIA TAD INPUT SNA CLA /IS OUTPUT UNIT = INPUT UNIT ? JMP MORE2+1 /YES--ERROR ISZ OPOINT ISZ OCOUNT /COUNT ONE MORE OUTPUT UNIT TAD OCOUNT TAD [-10 SPA CLA /WERE MORE THAN 7 UNITS SPECIFIED? JMP .+3 JMS CRLF /YES--CARRIAGE RETURN JMP OALL /IGNORE EXTRA ONE SWP /NO-- DCA I OPOINT /STORE UNIT CONSTANT IN LIST TAD COUNT CIA TAD OCOUNT SPA SNA CLA /ALL UNITS IN? JMP MORE2 /YES OALL, DCA COUNT JMS I [MESSGE MESSG6 /@FIRST INPUT BLOCK:@ JMS I [ANSWER JMP WHOLE /COPY WHOLE TAPE TAD COUNT SNA CLA /WERE TOO MANY SPECIFIED? JMP .+5 JMS I [MESSGE /YES ERROR4 /@ILLEGAL RESPONSE@ JMS CRLF JMP OALL /REPEAT THE QUESTION ACL /NO DCA IBLOCK /STORE JMS QUEST MESSG7 /@FIRST OUTPUT BLOCK:@ ACL DCA OBLOCK JMS QUEST MESSG8 /@NUMBER OF BLOCKS TO COPY:@ ACL SNA /WERE 0 BLOCKS SPECIFIED? JMP QUEST1 /YES--REPEAT QUESTION DCA NUMBER JMP .+4 WHOLE, DCA IBLOCK DCA OBLOCK DCA NUMBER /0 MEANS WHOLE TAPE JMS QUEST MESSG9 /@VERIFY OUTPUT (YES=1,NO=0):@ ACL AND [7 DCA VERF JMP I (SETUP /OUTPUT CARRIAGE RETURN/LINE FEED CRLF, 0 TAD (215 JMS I [TYPE TAD [212 JMS I [TYPE JMP I CRLF /--RETURN-- ERR4, 0 JMS I [MESSGE ERROR4 /@ILLEGAL RESPONSE@ JMS CRLF /OUTPUT CARRIAGE RETURN/LINE FEED TAD [-4 TAD ERR4 DCA ERR4 DCA COUNT JMP I ERR4 /--RETURN-- QUEST, 0 TAD I QUEST DCA MNUM ISZ QUEST JMS I [MESSGE MNUM, 0 JMS I [ANSWER QUEST1, JMS ERR4 TAD COUNT SZA CLA JMP QUEST1 JMP I QUEST /--RETURN-- /CONVERT UNIT NUMBER TO A WORD OF THE FORM /000 XXX XXX 000 OR /100 XXX XXX 000 /WHERE XY0 IS THE THIRD DIGIT OF THE IOT /AND 0 OR 1 REFLECTS THE TD8E UNIT NUMBER /ENTER WITH THE UNIT NUMBER IN THE AC /EXIT WITH SPECIAL CODE IN AC UNITNO, 0 AND [7 /MASK OUT ALL EXTRANEOUS BITS CLL RAR /SAVE 0/1 BIT IN LINK MQL /STORE ROTATED WORD, CLEAR AC RAR SWP /PRESERVE 0/1 BIT IN MQ TAD TABX /GET DEVICE NUMBER CORRECTLY DCA CRLF TAD I CRLF MQA /OR IN 0/1 BIT JMP I UNITNO /--RETURN-- TABX, UNITS /SKIP 4 LINES AND FETCH MARK TRACK SKIPQ, 0 IOTR5, SDSQ JMP .-1 IOTR6, SDRC JMP I SKIPQ /--RETURN-- *400 /USER RESPONSE HANDLER /USES MQ FOR TEMPORARY STORAGE /EXIT WITH RESPONSE IN MQ /EXIT TO CALL+1 IF JUST CARRIAGE RETURN /OR ILLEGAL CHARACTER, CARRIAGE RETURN /OR ;,CARRIAGE RETURN /EXIT TO CALL+2 IF GOOD DATA, CARRIAGE RETURN /INCREMENT COUNT AND EXIT TO CALL+2 IF GOOD DATA; /ILLEGAL CHARACTERS CAUSE WHOLE ANSWER TO BE IGNORED /AND EXIT TO CALL+1 ANSWER, 0 CAM /CLEAR AC AND MQ TAD CLEAR DCA SWITCH MORE, JMS LISTEN /FETCH A CHARACTER TAD (-215 SZA /IS IT A CARRIAGE RETURN? JMP .+5 /NO TAD [212 /YES--OUTPUT LINE FEED JMS TYPE SWITCH, NOP /SET UP EXIT ADDRESS JMP I ANSWER /--RETURN-- TAD (215-260 SPA /IS CHARACTER LESS THAN 260? JMP BAD /YES--ILLEGAL CHARACTER TAD [260-270 /NO SMA /IS IT MORE THAN 269? JMP SEMI /YES--CHECK FOR SEMICOLON TAD (270 /RESTORE CHARACTER AND [7 /MASK OUT EXTRANEOUS BITS CLL SWP AND (777 /MASK OUT FIRST DIGIT IF THERE ARE 4 RAL /ROTATE 3 LEFT RTL MQA /FETCH NEW CHARACTER MQL /STORE RESULT IN MQ TAD SKIP /SET UP TO SKIP ON RETURN DCA SWITCH JMP MORE /FETCH ANOTHER CLEAR, NOP SKIP, ISZ ANSWER BAD, CLA /ILLEGAL CHARACTER JMS I [CRLF JMP I ANSWER /--RETURN-- /TEST FOR SEMICOLON SEMI, TAD (270-273 SZA CLA /IS CHARACTER A SEMICOLON? JMP BAD /NO--ILLEGAL CHARACTER ISZ COUNT /YES--INCREMENT COUNTER JMP SWITCH /EXIT FROM ANSWER ROUTINE /TELETYPE INPUT AND ECHO HANDLER LISTEN, 0 KSF JMP .-1 JMS I [PARITY TLS /ECHO CHARACTER JMS CHECK /CHECK FOR CTRL/C AND CTRL/S JMP I LISTEN /--RETURN-- /CHECK FOR CTRL/C AND CTRL/S /ENTER WITH INPUT CHARACTER IN AC /EXIT TO HANDLER OR WITH CHARACTER IN AC CHECK, 0 TAD (-203 SNA /IS IT CTRL/C? JMP I CTRLC /YES--HANDLE IT TAD (203-223 SNA /IS IT CTRL/S? JMP I [REPEAT /YES--HANDLE IT TAD (223 /RESTORE CHARACTER JMP I CHECK /--RETURN-- CTRLC, LIMIT /MESSAGE OUTPUT HANDLER /EXPECTS MESSAGE ADDRESS TO BE IN LOCATION AFTER CALL /EXITS TO CALL+2 MESSGE, 0 TAD I MESSGE DCA FINDER /SET UP POINTER ISZ MESSGE DCA LOC /SET L/R SWITCH TO L (EVEN) LNEXT, TAD I FINDER /GET WORD BSW RHALF, AND [77 SNA /IS CHARACTER 0 (TERMINATOR)? JMP I MESSGE /YES--RETURN-- DCA CHAR TAD CHAR AND (40 SNA CLA /IS IT A LETTER? TAD [100 /YES--301-337 TAD [200 /NO--240-277 TAD CHAR /RESTORE CHARACTER JMS TYPE /OUTPUT IT ISZ LOC TAD LOC RAR SZL CLA /WHICH HALF WAS THAT? JMP .+3 ISZ FINDER /RIGHT JMP LNEXT TAD I FINDER /LEFT JMP RHALF FINDER, 0 LOC, 0 CHAR, 0 /TELETYPE OUTPUT ROUTINE TYPE, 0 TSF JMP .-1 TLS CLA JMP I TYPE /--RETURN-- /INSERT IOT'S ACCORDING TO TABLES /UNIT CONTAINS APPROPRIATE UNIT CODE /COUNT CONTAINS -(NUMBER OF IOT'S TO TRANSFER) /COUNT1 CONTAINS ADDRESS OF ADDRESS TABLE /UNIT CONTAINS UNIT CODE OF CURRENT UNIT INSERT, 0 TAD I COUNT1 DCA COUNT3 TAD UNIT MQL TAD I COUNT3 /MAKE NEW IOT AND (7007 MQA CIA TAD I COUNT3 /COMPARE WITH IOT FROM PROGRAM SNA CLA /ARE THE IOT'S THE SAME AS THE LAST UNIT? JMP I INSERT /YES--RETURN-- INS1, TAD I COUNT1 DCA COUNT3 TAD I COUNT3 /GET IOT FROM PROGRAM AND (7007 /RETAIN ONLY SIGNIFICANT BITS MQA /OR IN UNIT NUMBER DCA I COUNT3 /PUT IT IN PROGRAM ISZ COUNT1 /BUMP COUNTERS ISZ COUNT /DONE YET? JMP INS1 /NO JMP I INSERT /YES--RETURN-- PAGE /COUNT THE NUMBER OF WORDS PER BLOCK /PLACE IT IN MWORDS /BE SURE ALL TAPES MATCH INPUT FORMAT SETUP, TAD LIST DCA OPOINT /SET POINTER TO I/O LIST DCA COUNT2 /CLEAR COUNTER TAD OCOUNT CMA DCA OUTNUM /SET # OF UNITS SET4, TAD (TABLE1-END1-1 /SET UP COUNTERS FOR IOT FIX DCA COUNT TAD (TABLE1 DCA COUNT1 TAD I OPOINT DCA UNIT JMS I [INSERT /PUT THE PROPER IOT'S IN THE FOLLOWING ROUTINE DCA WDCNT /CLEAR WORD COUNT TAD UNIT AND [4000 TAD (2000 IOTX7, SDLC CLA IOTX8, SDRC RTL SZL /DOES UNIT EXIST? JMP .+3 /YES SELERR, JMS I [ERR3 /@SELECT ERROR UNIT N@ JMP SETUP AND (400 SZA CLA /TURNED ON? JMP SELERR /NO TAD UNIT /GET 0 OR 1 UNIT BIT (0 OR 4000) AND [4000 TAD [1000 /GET GO BIT IOTX1, SDLC /START READING FORWARD JMS SKIP4 /SKIP 8 LINES TO AVOID GARBAGE JMS SKIP4 IOTX3, SDSS /LOOK FOR FORWARD BLOCK NUMBER (26) JMP .-1 IOTX4, SDRC AND [77 TAD (-26 SZA CLA /FOUND YET? JMP IOTX3 /NO--KEEP LOOKING SET2, JMS SKIP4 /YES--START COUNTING LINES BY FOURS ISZ WDCNT NOP AND [77 TAD (-51 SZA CLA /FOUND GUARD YET? JMP SET2 /NO TAD UNIT /YES AND [4000 IOTX2, SDLC /STOP UNIT CLA TAD COUNT2 SZA /IS THIS THE INPUT UNIT? JMP SET5 /NO TAD (-11 /YES--SAVE THE COUNT TAD WDCNT CIA DCA COUNT2 JMP SET3 /FIRST OUTPUT UNIT SET5, TAD (-11 /NOT INPUT UNIT TAD WDCNT SZA CLA /SAME NUMBER OF WORDS AS INPUT UNIT? JMP ERR5 /NO*ILLEGAL FORMAT* SET3, ISZ OPOINT /NEXT UNIT ISZ OUTNUM /DONE YET? JMP SET4 /NO TAD COUNT2 /YES--PRINT MESSAGE DCA I [MWORDS /SET UP NUMBER OF WORDS PER BLOCK TAD I [MWORDS CIA JMS I [PRINT /PRINT 4 DIGIT NUMBER OF BLOCKS JMS I [MESSGE /YES--PRINT REST OF MESSAGE MESSG3 JMS I [CRLF /IF WHOLE TAPE IS TO BE COPIED, IT IS NECESSARY TO /COMPUTE THE NUMBER OF BLOCKS ON THE TAPE (NB) /USING THE NUMBER OF WORDS PER BLOCK (WB) /AND THE FORMULA: /OCTAL: NB=[63 6160/(WB+17)]+2 /DECIMAL: NB=[212,080/(WB+15)]+2 TAD NUMBER SZA CLA /COPY WHOLE TAPE? JMP VERFQ /NO-- DCA COUNT /YES--COMPUTE NUMBER OF BLOCKS ON TAPE TAD I [MWORDS CIA TAD (17 DCA COUNT1 /GET NUMBER OF WORDS PER BLOCK+17 TAD (-64 DCA COUNT2 TAD (-6160 SUB, CLL TAD COUNT1 ISZ COUNT /COUNT A BLOCK--TOO MANY? SKP /NO JMP ERR5 /YES--ERROR SZL ISZ COUNT2 JMP SUB CLA CLL TAD COUNT /COUNT IS [63 6160/WB+17]+1 IAC /ADD 1 MORE DCA NUMBER /STORE AS # OF BLOCKS TO TRANSFER JMP I .+1 VERFQ ERR5, CLA JMS I [MESSGE ERROR5 /*ILLEGAL FORMAT UNIT* JMS I [DECODE /PRINT UNIT NUMBER JMS I [CTRLR /WAIT FOR CTRL/R JMS I [CRLF /CARRIAGE RETURN/LINE FEED JMP SETUP /TRY AGAIN /READ FOUR LINES AND FETCH MARK TRACK SKIP4, 0 IOTX5, SDSQ JMP .-1 IOTX6, SDRC JMP I SKIP4 /--RETURN-- PAGE /IS TAPE TO BE VERIFIED? /SET UP DEPENDING ON RESPONSE VERFQ, TAD VERF SZA CLA /VERIFY? JMP YES /YES-- TAD (NOP /NO-- DCA I VERF1A TAD (OUTN DCA I VERF2A JMP CONT YES, TAD (RAR DCA I VERF1A TAD (VERIFY DCA I VERF2A CONT, JMP I .+1 DOIT VERF1A, VERF1 VERF2A, VERF2 /WAIT FOR CTRL/R CTRLR, 0 JMS I [LISTEN /FETCH CHARACTER TAD [-222 SZA CLA /IT IT CTRL/R? JMP .-3 /NO--WAIT FOR ONE JMS I [CRLF /CARRIAGE RETURN/LINE FEED JMP I CTRLR /--RETURN-- REPEAT, DCA COUNT JMS I [CRLF JMS I [QUEST /@REPEAT (YES=1;NO=0):@ MESS11 ACL AND [7 SZA CLA JMP I [CLEAN /YES JMP I [START+4 /NO--RESTART MESSG6, TEXT @FIRST INPUT BLOCK:@ MESSG7, TEXT @FIRST OUTPUT BLOCK:@ MESSG8, TEXT @NUMBER OF BLOCKS TO COPY:@ MESSG9, TEXT @VERIFY OUTPUT (YES=1,NO=0):@ MESS10, TEXT @DONE@ MESS11, TEXT @REPEAT (YES=1,NO=0):@ ERROR1, TEXT @VERIFY ERROR BLOCK @ ERROR2, TEXT @TAPE ERROR BLOCK @ ERROR3, TEXT @SELECT ERROR UNIT @ PAGE /SETUP FOR ACTUAL READ/WRITE/VERIFY OPERATION DOIT, TAD [LIMIT-END /SET UP NUMBER OF BLOCKS JMS DIV1 /IN FIELD 0 BUFFER DCA FLD0 TAD M200 JMS DIV1 /AND IN FIELD N BUFFERS DCA FLDN TAD IBLOCK /SET UP RUNNING COUNTERS AND POINTERS DCA INB /FOR NEXT INPUT BLOCK TAD OBLOCK DCA OUTB /FOR NEXT OUTPUT BLOCK TAD NUMBER DCA NUMB1 /FOR NUMBER OF BLOCKS LEFT TO TRANSFER JMP .+4 ALLDUN, TAD XNUMB SNA CLA /DONE WITH ALL BLOCKS YET? JMP REWIND /YES /READ--- READX, TAD LIST /NO--SET UP POINTER TO OUTPUT UNITS DCA OPOINT TAD OCOUNT CMA DCA OUTNUM TAD INB DCA BLOCKN TAD NUMB1 /SET POINTERS FOR TRANSFER DCA XNUMB TAD NUMB1 DCA NUMB2 /SAVE COUNTER FOR WRITE TAD INPUT /SELECT INPUT UNIT DCA UNIT DCA RW /SET R/W BIT TO READ TAD [END /SET START OF BUFFERS IN CASE DCA BUF0 /THEY WERE CHANGED BY VERIFY DCA BUFN JMS I [READY /FILL THE BUFFERS TAD XNUMB /SAVE THE POINTERS DCA NUMB1 TAD BLOCKN DCA INB OUTN, ISZ OPOINT ISZ OUTNUM /DONE WITH ALL UNITS YET? JMP .+4 /NO--CONTINUE WRITING TAD OHOLD /YES DCA OUTB JMP ALLDUN /READ ANOTHER BUFFER LOAD WRITEX, TAD OUTB DCA OHOLD TAD OHOLD /WRITE DCA BLOCKN /RESET POINTERS TAD OUTB DCA VB /SAVE COUNTER FOR VERIFY TAD NUMB2 DCA XNUMB TAD I OPOINT /SELECT OUTPUT UNIT DCA UNIT CLA CLL CML RAR /AC=4000 DCA RW /SET R/W BIT TO WRITE JMS I [READY TAD BLOCKN DCA OHOLD JMP I .+1 VERF2, VERIFY /SEE HOW MANY BLOCKS WILL FIT INTO BUFFER /ENTER WITH BUFFER SIZE IN AC /EXIT WITH # OF BLOCKS IN AC DIV1, 0 DCA COUNT1 DCA COUNT TAD COUNT1 /TOTAL WORDS DIV2, CLL TAD I [MWORDS /-NUMBER OF WORDS PER BLOCK SNL /RUN OUT OF ROOM? JMP .+3 /YES-- ISZ COUNT /NO--COUNT A BLOCK JMP DIV2 CLA CLL /IGNORE LESS THAN A BLOCK LEFT TAD COUNT VERF1, RAR /DIVIDE BY 2 IF VERIFY (NOP IF NO VERIFY) JMP I DIV1 /--RETURN-- /END OF OPERATION /REWIND TAPES TO INITIAL END ZONE REWIND, TAD OCOUNT CMA DCA COUNT2 /SET NUMBER OF TAPES STILL SPINNING RLIST, CLA CMA TAD LIST DCA OPOINT /SET POINTER TO UNIT LIST TAD OCOUNT IAC CMA DCA OUTNUM /SET NUMBER OF UNITS IN LIST RUNIT, JMS I [PARITY JMS I [CHECK /CHECK TTY FOR CTRL/S OR CTRL/C ISZ OUTNUM /DONE WITH WHOLE LIST YET? SKP CLA /NO JMP RLIST /YES--START THROUGH LIST AGAIN ISZ OPOINT TAD I OPOINT /GET UNIT CODE RTL SZL CLA /STILL SPINNING? JMP RUNIT /NO--TRY NEXT TAPE TAD I OPOINT /YES DCA UNIT TAD [-6 DCA COUNT TAD [RTAB DCA COUNT1 JMS I [INSERT /PUT PROPER IOT'S IN THIS ROUTINE TAD I OPOINT AND [4000 /UNIT/READ TAD [3000 /REVERSE/GO IOTR1, SDLC JMS I [SKIPQ JMS I [SKIPQ /WAIT FOR DRIVE TO GET UP TO SPEED IOTR2, SDSS JMP .-1 IOTR3, SDRC /GET MARK TRACK BITS AND [77 TAD [-22 SZA CLA /END ZONE? JMP RUNIT /NO--NEXT UNIT CLA CLL CML RTR /AC=2000 MQA /UNIT CODE STILL IN MQ FROM INSERT DCA I OPOINT /SET STOPPED BIT TAD I OPOINT AND [6000 IOTR4, SDLC /STOP UNIT M200, 7600 /CLA ISZ COUNT2 /ALL TAPES STOPPED? JMP RUNIT /NO--NEXT UNIT JMS I [MESSGE /YES MESS10 /@DONE@ JMP I [REPEAT PAGE /VERIFICATION ROUTINES VERIFY, TAD VB /SET POINTERS AND COUNTERS FOR TRANSFER DCA BLOCKN TAD NUMB2 DCA XNUMB DCA RW TAD END0 /SET BEGINNINGS OF VERIFY BUFFERS DCA BUF0 TAD (3700 DCA BUFN TAD CDF0 DCA COMP2 JMS I [READY /READ VERIFY BUFFERS FULL TAD COUNT1 /GET # OF BLOCKS IN LAST BUFFER FILLED DCA COUNT3 CMA /SET AUTOINDEX POINTERS TO BUFFERS TAD [END DCA X11 CMA CLL TAD END0 DCA X12 TAD COUNT CMA TAD FIELDS DCA COUNT /SET NUMBER OF FIELDS WHICH WERE FILLED JMS COMP4 /GET NUMBER OF BLOCKS TAD FLD0 CIA DCA COUNT4 /SET COUNTER JMS COMP /COMPARE THE BUFFERS COMP3, TAD COUNT SNA CLA JMP I [OUTN JMS COMP4 /GET NUMBER OF BLOCKS TAD FLDN CIA DCA COUNT4 TAD COMP2 /EACH FIELD------ TAD (10 DCA COMP2 /SET CDF INSTRUCTION PROPERLY CMA CLL /SET AUTOINDEX POINTERS TO BUFFERS DCA X11 TAD (3677 DCA X12 JMS COMP JMP COMP3 /DO THE NEXT FIELD /ENTER WITH AC CLEAR /EXIT TO CALL+1 WITH AC CLEAR IF /NORMAL BUFFER FILL /EXIT TO CALL+2 WITH # OF BLOCKS IN AC IF /LAST BUFFER COMP4, 0 ISZ COUNT /LAST FIELD FILLED? JMP I COMP4 /NO--RETURN-- TAD XNUMB /YES--OUT OF BLOCKS? SZA CLA JMP I COMP4 /NO--RETURN-- TAD COUNT3 /YES--GET ACTUAL # OF BLOCKS ISZ COMP4 /INCREMENT RETURN ADDRESS JMP I COMP4 /--RETURN-- /COMPARE PORTION OF VERIFY ROUTINE COMP, 0 TAD I [MWORDS /SET NUMBER OF WORDS PER BLOCK COUNTER DCA COUNT2 COMP2, HALT /SHOULD CONTAIN CDF N TAD I X11 /GET CORRESPONDING WORDS FROM EACH BUFFER CIA TAD I X12 CDF0, CDF 0 SZA CLA /DO WORDS MATCH? JMP ERR1 /NO--VERIFY ERROR TRY, ISZ COUNT2 /DONE WITH BLOCK? JMP COMP2 /NO--CONTINUE ISZ COUNT4 /DONE WITH ALL BLOCKS? JMP COMP+1 /NO JMP I COMP /YES--RETURN-- ERR1, JMS I [MESSGE ERROR1 /*VERIFY ERROR BLOCK * TAD COUNT4 /GET CURRENT BLOCK NUMBER CIA TAD I (BLOCKS /FROM BLOCK THIS OPERATION STARTED WITH JMS PRINT /PRINT 4 DIGIT BLOCK NUMBER JMS I [MESSGE ERROR6 /*UNIT * JMS I [DECODE /PRINT UNIT NUMBER WAIT, JMS I [LISTEN /WAIT FOR RESPONSE DCA PRINT JMS I [CRLF TAD PRINT TAD [-224 SNA /WAS IT CTRL/T? JMP I [WRITEX /YES--TRY AGAIN TAD [2 SZA CLA /WAS IT CTRL/R? JMP WAIT /NO--WAIT FOR A GOOD RESPONSE JMP TRY /YES--IGNORE AND CONTINUE /PRINT A 4 DIGIT OCTAL NUMBER /ENTER WITH NUMBER IN AC PRINT, 0 DCA I [MESSGE /TEMPORARY STORAGE TAD [-4 DCA I [ANSWER /SET DIGIT COUNTER TAD I [MESSGE RAL DCA I [CRLF FOUR, TAD I [CRLF RAL RTL DCA I [CRLF TAD I [CRLF AND [7 TAD [260 JMS I [TYPE /PRINT ONE DIGIT ISZ I [ANSWER /DONE YET? JMP FOUR /NO JMP I PRINT /YES--RETURN-- /CLEAN UP UNIT TABLES AFTER REWIND CLEAN, TAD LIST DCA OPOINT TAD OCOUNT CMA DCA OUTNUM /SET POINTER AND COUNTER CLEAN1, TAD I OPOINT /GET UNIT CODE AND (4770 /MASK OUT EXTRANEOUS BITS DCA I OPOINT /REPLACE IT ISZ OPOINT ISZ OUTNUM /DONE YET? JMP CLEAN1 /NO JMP I [DOIT /YES--NEXT OPERATION PAGE /FILL ALL N FIELDS ONCE /ENTER WITH AC CLEAR /# OF BLOCKS FOR FIELD 0 IN FLD0 /# OF BLOCKS FOR OTHERS IN FLDN /ADDRESSES OF BUFFERS IN BUF0, BUFN /R/W BIT (0 OR 4000) IN RW READY, 0 TAD [IOTLOC-TABEND-1 DCA COUNT TAD [IOTLOC DCA COUNT1 JMS I [INSERT /PUT PROPER IOT'S IN HANDLER TAD UNIT SPA CLA /EVEN OR ODD UNIT NUMBER? CLL IAC RTL /ODD TAD [ORIGIN /EVEN DCA ENTRY /SET UP ENTRY TO HANDLER TAD RW MQL /STORE UNIT BIT FOR LATER CMA TAD FIELDS /SET COUNTER FOR # OF FIELDS DCA COUNT CLL TAD FLD0 /ADJUST NUMBER OF BLOCKS TO JMS SUB1 /TRANSFER DEPENDING ON NUMBER TAD FLD0 /LEFT TO BE TRANSFERRED JMS SUB2 /RESET FUNCTION WORD TAD BUF0 /SET UP BUFFER POINTERS JMS SUB3 JMS TRANS /TRANSFER DATA--FIELD 0 ZOOM, ISZ COUNT /BEGINNING OF LOOP FOR EACH FIELD ABOVE 0 SKP /DONE YET? JMP I READY /YES--RETURN-- TAD FIELDS CIA CLL TAD COUNT IAC RAL RTL /GET FIELD SETTING READY MQL /STORE IN MQ TAD FUNCTN /GET PREVIOUS FUNCTION WORD AND [4000 /GET R/W BIT MQA /OR IN FIELD SETTING MQL /STORE CLL TAD FLDN /ADJUST NUMBER OF BLOCKS TO TRANSFER JMS SUB1 TAD FLDN JMS SUB2 /AND RESET FUNCTION WORD TAD BUFN JMS SUB3 /SET UP BUFFER POINTERS JMS TRANS /TRANSFER DATA--FIELDS 1-N JMP ZOOM /FILL ANOTHER FIELD SUB1, 0 CIA TAD XNUMB CLL CML /SET LINK=1 SMA /ARE THERE LESS BLOCKS LEFT THAN A FIELD FULL? DCA XNUMB /NO--REDUCE COUNT OF BLOCKS LEFT JMP I SUB1 /YES-TRANSFER BLOCKS LEFT--RETURN-- SUB2, 0 DCA COUNT1 /LINK=1 IF BLOCKS LEFT, 0 IF NONE SNL /DONE WITH ALL BLOCKS YET? DCA XNUMB /YES--BUMP SWITCH TAD COUNT1 /NO BSW MQA /PUT # OF BLOCKS INTO FUNCTION WORD DCA FUNCTN /START REVERSE JMP I SUB2 /--RETURN-- SUB3, 0 DCA BUFADD TAD BLOCKN /SET STARTING BLOCK NUMBER DCA BLOCKS TAD COUNT1 TAD BLOCKN DCA BLOCKN /RESET STARTING BLOCK FOR NEXT TIME JMP I SUB3 /--RETURN-- /CALL TO THE HANDLER TRANS, 0 JMS I [PARITY /CHECK TELETYPE JMS I [CHECK /WAS ^C OR ^S TYPED? JMS I ENTRY FUNCTN, 0 /FUNCTION WORD BUFADD, 0 /BUFFER ADDRESS BLOCKS, 0 /STARTING BLOCK NUMBER JMP ERR /ERROR RETURN JMS I [PARITY /CHECK TELETYPE JMS I [CHECK /WAS ^C OR ^S TYPED? CLA TAD XNUMB SZA CLA /DONE YET? JMP I TRANS /NO--RETURN-- ISZ COUNT JMP I READY /--RETURN-- JMP I READY /--RETURN-- /TRANSFER ERROR HANDLER ERR, SNA CLA /FATAL ERROR? JMP SELECT /NO JMS I [MESSGE /YES ERROR2 /*TAPE ERROR BLOCK * TAD I (BLOCK JMS I [PRINT /PRINT BLOCK NUMBER JMS I [MESSGE ERROR6 /*UNIT * JMS DECODE /PRINT UNIT NUMBER JMS I [CRLF JMP I [REWIND SELECT, JMS ERR3 ISZ FUNCTN /TURN AROUND AND TRY AGAIN JMP FUNCTN-1 ERR3, 0 JMS I [MESSGE ERROR3 /*SELECT ERROR UNIT * JMS DECODE /PRINT UNIT NUMBER JMS CTRLR /WAIT FOR CTRL/R JMP I ERR3 /--RETURN-- /DECODE UNIT NUMBER FOR PRINTING /PRINT UNIT NUMBER BEFORE RETURNING DECODE, 0 CLL TAD UNIT RAL MQL /SAVE ROTATED CODE IN MQ RAL SWP /SAVE EVEN/ODD BIT IN MQ RAR /WORK ON IOT CODE RTR IAC CMA AND [7 MQA /INCLUDE EVEN/ODD BIT TAD [260 /MAKE ASCII DIGIT JMS I [TYPE JMP I DECODE /--RETURN-- PAGE /TD8E DECTAPE HANDLER /SLIGHTLY MODIFIED VERSION OF DEC-E8-UZTA-D /COPYRIGHT 1971 DIGITAL EQUIPMENT CORPORATION / MAYNARD, MASSACHUSETTS 01754 /THE CALLING SEQUENCE IS: / JMS ENTRY / FUNCTION WORD / BUFFER ADDRESS / STARTING BLOCK / ERROR RETURN / NORMAL RETURN (AC CLEAR) /FUNCTION WORD: / BIT 0: 0=READ, 1=WRITE / BITS 1-5: # OF BLOCKS TO BE TRANSFERRED / BITS 6-8: FIELD OF BUFFER AREA / BITS 9-10: UNUSED / BIT 11: 1=START FORWARD, 0=START REVERSE /ERRORS: /THE HANDLER DETECTS TWO TYPES OF ERRORS: /FATAL ERRORS: / PARITY ERROR / TIMING ERROR / TOO GREAT A BLOCK NUMBER /FATAL ERRORS TAKE ERROR RETURN WITH AC=4000 /NON-FATAL ERROR: / SELECT ERROR (IMPROPER UNIT NUMBER OR NO UNIT NUMBER) /NON-FATAL ERROR TAKES ERROR RETURN WITH AC=0 PAGE MFIELD=0 ORIGIN=. DTA0, 0 /ENTRY POINT FROM UNIT 0 CLA CLL /0 TO LINK JMP DTA1X C1000, 1000 DTA1, 0 /UNIT 2 ENTRY CLA CLL CML /1 TO LINK TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA YUNIT /LINK TO UNIT POSITION RDF TAD C6203 /GET DATA FIELD AND SETUP RETURN DCA LEAVE TAD YUNIT /GET FUNCTION WORD IOT4, SDLC /PUT FUNCTION INTO DATA REGISTER TAD I DTA0 IOT1, SDLD CLA TAD MWORDS DCA WCOUNT /STORE MASTER WORD COUNT ISZ DTA0 /TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /TO BLOCK NUMBER TAD I DTA0 DCA BLOCK ISZ DTA0 /POINT TO ERROR EXIT CIF CDF MFIELD /TO ROUTINES DATA FIELD IOT2, SDRD /GET FUNCTION INTO AC CLL RAL AND CM200 /GET # PAGES TO XFER DCA PGCT IOT3, SDRD C374, AND C70 /GET FIELD FOR XFER TAD C6201 /FORM CDF N DCA XFIELD /IF=0 AND DF=N AT XFER. CLA CLL CMA RTL DCA TRYCNT /3 ERROR TRIES IOT5, SDRC AND C100 SZA CLA JMP FATAL-1 IOT6, SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. DCA I CXFUN TAD WCOUNT DCA I CXWCT IOT7, SDRD /GET MOTION BIT TO LINK CLL RAR JMP GO /AND START THE MOTION. RWCOM, SDST /ANY CHECKSUM ERRORS? SZA CLA /OR CHECKSUM ERRORS? JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS /SET AT RWCOM. GETCHK SETS IT. TAD PGCT /NO ERROR..FINISHED XFER? TAD CM200 SNA JMP EXIT /ALL DONE. GET OUT DCA PGCT /NEW PAGE COUNT ISZ BLOCK /NEXT BLOCK TO XFER TAD WCOUNT /FORM NEXT BUFFER ADDRESS CIA TAD BUFF DCA BUFF CLL CML /FORCES MOTION FORWARD GO, CLA CML RTR /LINK BECOMES MOTION BIT TAD C1000 TAD YUNIT /PUT IN 'GO' AND UNIT # IOT8, SDLC /LOOK FOR BLOCK NO. JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK JMS I CRDQUD CM200, 7600 /COULD HAVE SAVED A LOC. HERE SRCH, SDSS JMP .-1 /WAIT FOR SINGLE LINE FLAG IOT9, SDRC CLL RTL /DIRECTION TO LINK. INFO BITS /ARE SHIFTED. AND C374 /ISOLATE MARK TRACK BITS TAD M110 /IS IT END ZONE? SNA /THE LINK STAYS SAME THRU THIS JMP ENDZ TAD M20 /CHECK FOR BLOCK MARK SZA CLA JMP SRCH IOT10, SDRD /GET THE BLOCK NUMBER SZL /IF WE ARE IN REVERSE, LOOK FOR 3 /BLOCKS BEFORE TARGET BLOCK. THIS /ALLOWS TURNAROUND AND UP TO SPEED. TAD C3 /REVERSE CMA TAD BLOCK CMA /IS IT RIGHT BLOCK? SNA JMP FOUND /YES..HOORAY! M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? /ABOVE SNA IS SUPERFLUOUS. JMP SRCH /YES ENDZ, SDRC /WE ARE IN THE END ZONE CLL RTL /DIRECTION TO LINK CLA /ARE WE IN REVERSE? JMP GO /YES..TURN US AROUND /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR TRY3, CLL CLA ISZ TRYCNT JMP GO /TRY 3 TIMES CLL CLA JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN EXIT, ISZ DTA0 CLL CML /AC=0 ON NORMAL RETURN FATAL, TAD YUNIT SDLC /STOP THE UNIT CLA CML RAR LEAVE, HLT JMP I DTA0 /--RETURN-- C6201, 6201 C6203, 6203 CRDQUD, RDQUAD WCOUNT, 0 BUFF, 0 MWORDS, 0 YUNIT, 0 CXFUN, XFUNCT M20, -20 PGCT, 0 CXWCT, XWCT C100, 100 TRYCNT, -3 BLOCK=DTA1 *ORIGIN+170 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? JMP GO /WRONG..TURN AROUND TAD YUNIT /PUT UNIT INTO LINK CLL RAL /AC IS NOW 0 C70, 70 /********DON'T MOVE THIS!!!!****** C3, 3 TAD BUFF /GET BUFFER ADDRESS XFIELD, HLT /INTO NEXT PAGE *ORIGIN+200 XUNIT=EQUFUN DCA XBUFF IOT16, SDRC IOT17, SDLC RAR /NOW GET UNIT # DCA XUNIT REVGRD, SDSS JMP REVGRD /LOOK FOR REVERSE GUARD IOT11, SDRC AND K77 TAD CM32 /IS IT REVERSE GUARD? SZA CLA JMP REVGRD /NO.KEEP LOOKING TAD XWCT DCA WORDS /WORD COUNTER TAD XFUNCT /GET FUNCTION READ OR WRITE K7700, SMA CLA JMP READ /NEG. IS WRITE WRITE, SDRC AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS SZA CLA JMP I CFATAL /FATAL ERROR. LINK MUST BE ON JMS RDQUAD /NO ONE EVER USES THIS WORD! C7600, 7600 TAD C1400 TAD XUNIT /INITIATE WRITE MODE IOT12, SDLC CLA CMA JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM CLA CMA DCA CHKSUM WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! JMS WRQUAD ISZ XBUFF /BUMP CORE POINTER K77, 77 /ABOVE MAY SKIP ISZ WORDS /DONE THIS BLOCK? JMP WRLP /NOT YET..LOOP A WHILE TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? CLL RTR /IF NO, WRITE A 0 WORD SZL CLA JMS WRQUAD /WRITE A WORD OF 0 JMS GETCHK /DO THE CHECK SUM JMS WRQUAD /WRITE FORWARD CHECKSUM JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN JMP I CRWCOM READ, JMS RDQUAD JMS RDQUAD JMS RDQUAD /SKIP CONTROL WORDS AND K77 TAD K7700 /TACK 7700 ONTO CHECKSUM. DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY RDLP, JMS RDQUAD JMS EQUFUN /COMPUT CHECKSUM AS WE GO DCA I XBUFF /IT GETS CONDENSED LATER ISZ XBUFF C300, 300 /PROTECTION ISZ WORDS /DONE THIS OP? JMP RDLP /NO SUCH LUCK TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND CLL RTR /CHECKSUM THE LAST TAPE WORD SNL CLA JMP RDLP2 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK JMS EQUFUN /CHECKSUM IT RDLP2, JMS RDQUAD /READ CHECKSUM AND K7700 JMS EQUFUN JMS GETCHK /GET SIX BIT CHECKSUM JMP I CRWCOM WRQUAD, 0 /WRITE OUT A 12 BIT WORD JMS EQUFUN /ADD THIS TO CHECKSUM IOT13, SDSQ /SKIP ON QUADLINE FLAG JMP .-1 IOT14, SDLD /LOAD DATA ONTO BUS CLA /SDLD DOESN'T CLEAR AC JMP I WRQUAD RDQUAD, 0 /READ A 12 BIT WORD SDSQ JMP .-1 IOT15, SDRD /READ DATA JMP I RDQUAD EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE CIA /IS ASSOCIATIVE, WE CAN DO IT 12 CLL RAL /BITS AT A TIME AND CONDENSE LATER. TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EQUFUN GETCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CHKSUM CMA CLL RTL RTL RTL JMS EQUFUN CLA CLL CML /FORCES LINK ON AT RWCOM TAD CHKSUM AND K7700 JMP I GETCHK CFATAL, FATAL CRWCOM, RWCOM XFUNCT, 0 CM32, -32 C1400, 1400 CHKSUM, 0 WORDS, 0 XBUFF, 0 XWCT, 0 EQUTMP, 0 PAGE / / PARITY, 0 KRB AND [177 TAD [200 JMP I PARITY /IOT TABLES FOR TD8E SUBROUTINE IOTLOC, IOT1 IOT2 IOT3 IOT4 IOT5 IOT6 IOT7 RWCOM IOT8 SRCH IOT9 IOT10 ENDZ FATAL+1 REVGRD IOT11 WRITE IOT12 IOT13 IOT14 RDQUAD+1 IOT15 IOT16 TABEND, IOT17 UNITS=. UNIT01 UNIT23 UNIT45 UNIT67 RTAB, IOTR1 IOTR2 IOTR3 IOTR4 IOTR5 IOTR6 /IOT TABLES FOR WORDS PER BLOCK ROUTINE TABLE1, IOTX1 IOTX2 IOTX3 IOTX4 IOTX5 IOTX6 IOTX7 END1, IOTX8 MESSG4, TEXT @FROM UNIT:@ MESSG5, TEXT @TO UNITS:@ ERROR5, TEXT @ILLEGAL FORMAT UNIT @ ERROR6, TEXT @ UNIT @ ERROR4, TEXT @ILLEGAL RESPONSE@ PAGE /ONCE ONLY CODE END, JMS I (QUEST MESSG2 /@HIGHEST FIELD AVAILABLE:@ ACL AND [7 CIA DCA FIELDS TAD (CDF DCA CDF00 TAD FIELDS SNA /MORE THAN 1 FIELD?? JMP LIM /NO--NO PROBLEM DCA COUNT1 /YES--ARE THEY ALL PRESENT? NEXT, TAD CDF00 TAD (10 DCA CDF00 /SET FOR DATA FIELD CHANGE TAD (HLT CDF00, CDF DCA I (10 /TRY LOCATION 10 TAD I (10 CDF 0 CIA TAD (HLT SNA CLA /IS FIELD THERE? JMP NEXT1 /YES--TRY NEXT ONE JMS I [MESSGE /NO ERROR4 /ILLEGAL RESPONSE JMS I [CRLF /CARRIAGE RETURN/LINE FEED DCA COUNT /CLEAR COUNT JMP END /TRY AGAIN NEXT1, ISZ COUNT1 /DONE YET? JMP NEXT /NO LIM, TAD (LIMIT-END /SET BEGINNING OF VERIFY BUFFER CLL RAR TAD [END DCA END0 TAD (NOP DCA I (START1-1 JMP I (START1 MESSG2, TEXT @HIGHEST FIELD AVAILABLE:@ FIELD 0 *200 $ |
Added src/os8/uni/CUSPS/TDFRMT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 | /TD8E FORMATTER V4 / / / / / / // / / / / /COPYRIGHT (C) 1971, 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. / / / / / / /TD8E DECTAPE FORMATTER COPYRIGHT 1971 /DIGITAL EQUIPMENT CORP. /MAYNARD , MASS X1=10 X2=11 /SYMBOL TABLE AUGMENTATION SDSS=6771 SDST=6772 SDSQ=6773 SDLC=6774 SDLD=6775 SDRC=6776 SDRD=6777 *0 0 JMP 1 /HLT PROGRAM GOT INTERRUPTED SOMEHOW 2 3 0 0 /WORKING LOCATIONS *20 W1, 0000 W2, 0000 W3, 0000 W4, 0000 W5, 0000 W6, 0000 BLOCKS, 0000 DTA, 0000 PHASE, 0000 TOTAL, 0000 VAR1, 0000 VAR2, 0000 /CONSTANTS C0017, 0017 C0070, 0070 C0077, 0077 C0007, 0007 C0700, 0700 C203, 0203 C201, 0201 C260, 0260 C261, 0261 C270, 0270 C271, 0271 C277, 0277 C1620, 1620 C7000, 7000 C7700, 7700 C7714, 7714 C7761, 7761 CRCOD, 0215 LETK, 0313 LFCOD, 0212 M2, -2 M3, -3 M6, -6 M7, -7 M14, -14 M144, -144 SPCOD, 0240 BADD, BUFFER-1 BFR, BUFFER COMPAR, COMPRE IT, INIT1 QU1, Q1 QU2, Q2 QU3, Q3 QU4, Q4 MESS, MES STX, START TYOCT, TYCT TYPE, MESAGE TYPIN, TYPN WAIT, STALL WC, 0 MTR, 0 SLRDRC, SRDRC DATRD, 0 M55, -55 M25, -25 M26, -26 M32, -32 M10, -10 M70, -70 M73, -73 M51, -51 M45, -45 M22, -22 M143, -143 M52, -52 M31, -31 M306, -306 CNT, 0 M4, -4 M307, -307 SSDSQT, SDSQT SA3LNS, A3LNS SCEXPC, CEXPC MSK77, 0077 NUD, NUDTA BLK, 0 REVBLK, 0 BCXOR, SBCXOR CHKSUM, 0 SBWORD, 0 /TYPE THE CHARACTER IN THE AC ON THE KEYBOARD PRINTER RSEND, 0000 TLS /LOAD AND PRINT, CLEAR FLAG TSF /WAIT FOR CONFIRMATION JMP .-1 /ENDLESSLY TCF /CLEAR THE FLAG ANYWAY JMP I RSEND /PRINT A "?" ON THE KEYBOARD TYPER QU, .+1 IOF CLA CLL /C(AC)+C(L)=0 TAD C277 /"?" JMS RSEND /TYPE THE CHARACTER JMP I .+1 /RESTART INIT /DECTAPE CONTROL WORDS DT1400, 1400 DT0400, 0400 DT2000, 2000 DT3000, 3000 DT1000, 1000 BINCO, BINCON SELTIM, ZTIM MARKER, ZMKTK BLKERR, ZBLK DATERR, ZDATA CHKERR, ZPAR DOMARK, STMK DBUFPT, 0 /POINTER TO CURRENT POSITION IN DTA LIST *200 /PAGE 1 /TYPE CANNED MESSAGES..... /THANKS TO DIGITAL 8-18-U JMP I .+1 PATCH MESAGE, 0 IOF CLA CMA /SET C(AC)=-1 TAD MESAGE /ADD LOCATION DCA 10 /AUTO INDEX REGISTER TAD I 10 /FETCH FIRST WORD DCA MSRGHT /SAVE IT TAD MSRGHT RTR RTR /ROTATE 6 BITS TO THE RIGHT RTR JMS TYPECH /TYPE IT TAD MSRGHT /GET DATA AGAIN JMS TYPECH /TYPE RIGHT HALF JMP MESAGE+5 /CONTINUE MSRGHT, 0 /TEMPORARY STORAGE TYPECH, 0 /TYPE CHARACTER IN C(AC)6-11 AND C0077 SNA /IS IT END OF MESSAGE? JMP I 10 /YES: EXIT TAD M40 /SUBTRACT 40 SMA /<40? JMP .+3 /NO TAD C340 /YES: ADD 300 JMP MTP /TO CODES <40 TAD M3 /SUBTRACT 3 SZA /IS IT ZERO? JMP .+3 /NO TAD C212 /YES: CODE 43 IS JMP MTP /LINE-FEED (212) TAD M2 /SUBTRACT 2 SZA /IS IT ZERO? JMP .+3 /NO TAD C215 /YES: CODE 45 IS JMP MTP /CARRIAGE RETURN (215) TAD C245 /ADD 200 TO OTHERS >40 MTP, TLS /TRANSMIT CHARACTER TSF /WAIT FOR THE FLAG JMP .-1 /NOT SET YET CLA /SET: CLEAR C(AC) JMP I TYPECH /RETURN /CONSTANTS M40, -40 C340, 340 C212, 212 C215, 215 C245, 245 /ROUTINE WAITS UNTILL A COMPLETE MESSAGE HAS BEEN ENTERED /SIGNIFIED BY A CR. TYPN, 0 IOF KCC /CLEAR AC, KEYBOARD FLAG TAD BADD /GET BUFFER ADDRESS DCA W1 /STORE FOR THE CHARACTER STRING /READ AND RESPOND WITH THE CHARACTER NTYRTN, ISZ W1 /NORMAL RETURN. INCREMENT BUFFER KSF /WAIT FOR KEYBOARD JMP .-1 /FLAG TO RAISE KRB /GOT FLAG, RESET IT, GET CHARACTER JMS RSEND /SEND CHARACTER BACK AND (177 /TAKE CARE OF PARITY TAD (200 DCA I W1 /LOAD CHARACTER INTO BUFFER AREA TAD I W1 /CHECK FOR CTRL C CIA TAD C203 SZA CLA JMP CHKSP /NO- CHECK FOR SPACE 6007 /CAF- CLEAR ALL FLAGS NOP /JUST IN CASE CLA JMP 7605 /IF CHARACTER IS A SPACE, IGNORE IT CHKSP, TAD I W1 /CHARACTER INTO THE AC CIA /SUBTRACT FROM SPACE CODE (240) TAD SPCOD /COMPLETE COMPARISON SNA CLA /WAS IT A SPACE? JMP NTYRTN+1 /YES: DO NOT INCREMENT BUFFER /IF CHARACTER IS A CR, EXIT FROM ROUTINE TAD I W1 /CHARACTER TO AC CIA /SET AC TO SUBTRACT CR (215) TAD CRCOD /COMPLETE COMPARISON SZA CLA /WAS IT CR? JMP NTYRTN /NO: INCREMENT BUFFER + WAIT /CARRIAGE RETURN FOUND, EXIT FROM ROUTINE TAD LFCOD /GIVE KEYBOARD LINE FEED JMS RSEND /EXECUTE LINE FEED CLA CLL /EXIT WITH C(ACC) + AND C(L)=0 IOF JMP I TYPN /RETURN TO CALL /COMPARE A STRING OF CHARACTERS IN "BUFFER" /TO A CHARACTER STRING AFTER A JMS IN ASCII COMPRE, 0 CLA CMA /C(AC)=7777 TAD COMPRE /SUBTRACT 1 FOR INDEX REG 1 DCA 10 /AUTO INDEX 1 SET TO CHA STRING TAD BADD /AUTO INDEX 2 SET TO BUFFER-1 DCA 11 /LOAD X2 /COMPARE CHARACTERS TILL ONE DOESN'T COMPARE OR TILL /A 0 IS FOUND IN X1. IF OK, RETURN TO TWO PLUS THE /ZERO, IF BAD ONE PLUS TAD I X1 /CHARACTER FROM PROGRAM CIA /TO SUBTRACT FROM TAD I X2 /CHARACTER IN BUFFER SZA CLA /COMPARE? JMP CERR /NO:RESYNC FOR NON COMPARE EXIT TAD I X1 /YES: CHECK FOR GOOD EXIT SZA /IF 0, EXIT GOOD JMP .-6 /NO: TEST NEXT CHAACTER ISZ X1 /+1 TO X1(TOTAL 2 FROM THE 0) JMP I X1 /+1 TO X1, EXIT /ERROR FOUND. RESYNC AND EXIT NO COMPARE CERR, TAD I X1 /CHARACTER FROM PROGRAM SZA CLA /IS THIS EXIT KEY? (0000) JMP .-2 /NO: GET NEXT JMP I X1 /YES: EXIT, NOT COMPARE *400 /VARIOUS ERROR MESSAGES /"NOT DECIMAL" Q1, JMS I TYPE 1617 /NO 2440 /T 0405 /DE 0311 /CI 1501 /MA 1400 /L JMP QUX /"TO MANY WORDS" Q2, JMS I TYPE 2417 /TO 1740 /O 1501 /MA 1631 /NY 4027 / W 1722 /OR 0423 /DS 0000 /00 JMP QUX /"TO MANY BLOCKS" Q3, JMS I TYPE 2417 /TO 1740 /O 1501 /MA 1631 /NY 4002 / B 1417 /LO 0313 /CK 2300 /S0 JMP QUX /"NOT DIVISIBLE BY 3" Q4, JMS I TYPE 1617 /NO 2440 /T 0411 /DI 2611 /VI 2311 /SI 0214 /BL 0540 /E 0231 /BY 4063 / 3 0000 /00 QUX, JMS I TYPE 4345 /CR+LF 0000 /END JMP I .+1 INIT /THE CODING BELOW CREATES THE BLOCK NUMBER /CONVERSION PRIOR TO THE TAPE WRITE. MES, 0 DCA W4 /SAVE WORD CLL TAD W4 CMA RTR RTR AND C7000 DCA V1 TAD W4 CMA RTL RAL AND C0700 DCA V2 TAD W4 CMA RTR RAR AND C0070 DCA V3 TAD W4 CMA RTL RTL AND C0007 TAD V1 TAD V2 TAD V3 JMP I MES V1, 0000 V2, 0000 7777 7700 0000 V3, 0000 0000 PATCH, CLA TAD .+4 DCA 1 JMP I .+1 START HLT /TYPE ONE FOUR CHARACTER OCTAL WORD GIVEN TO THE /ROUTINE VIA C(ACC). C(ACC)=0 ON EXIT TYCT, 0 DCA TW1 /STORE WORD GIVEN TAD TW1 /TO C(ACC) AGAIN RTR RTR /6 BITS RIGHT RTR DCA TYCT1+2 /SAVE ROTATED VALUE, 1ST TWO TAD TYCT1+2 /TO C(ACC) AGAIN AND C0007 /ISOLATE SECOND CHARACTER TAD C6060 /CONVERT TO ASCII DCA TYCT1+1 /STORE AS FIRST PARTIAL 2 TAD TYCT1+2 /ROTATED VALUE STORED ABOVE RTL RAL /3 BITS LEFT AND C0700 /ISOLATE FIRST CHARACTER TAD TYCT1+1 /CONVERT 1ST TO ASCII DCA TYCT1+1 /1ST AND 2ND CHARACTERS READY TAD TW1 /ORIGIONAL WORD AND C0007 /ISOLATE 4TH CHARACTER TAD C6060 /CONVERT 4 TH TO ASCII DCA TYCT1+2 /STORE 4TH FOR A MOMENT TAD TW1 /ORIGIONAL WORD RTL RAL /POSITION IT 3RD CHARACTER AND C0700 /ISOLATE 3RD CHARACTER TAD TYCT1+2 /CONVERT TO ASCII DCA TYCT1+2 /CONVERSION COMPLETE TYCT1, JMS I TYPE /TYPE THE FOUR CHARACTERS 0 /FIRST 2 0 /SECOND 2 0 /KILL KEY JMP I TYCT /EXIT FROM ROUTINE /SOME CONSTANTS FOR THE ROUTINE TW1, 0000 C6060, 6060 *600 STALL, 0 CLA TAD I 12 /WORD TO BE WRITTEN SDSQ /WAIT FOR QUADLINE FLAG JMP .-1 SDLD /LOAD DATA REGISTERS SDST /CHECK FOR TIMING ERROR SKP JMS I SELTIM /TIMING ERROR CLA JMP I STALL /GO GET NEXT WORD /WAIT TILL WORD COUNT REGISTER GOES TO ZERO /BLOCK NUMBER ERROR ZBLK, 0 CLA TAD DTA SDLC /STOP MOVEMENT OF TAPE JMS I TYPE 2003 /PC 4000 /END CLA CMA TAD ZBLK JMS I TYOCT JMS I TYPE 4040 /DOUBLE SPACE 0214 /BL 1703 /OC 1340 /K 1625 /NU 1502 /MB 0522 /ER 4000 /END JMP ZCOM /DATA ERRORS ZDATA, 0 CLA TAD DTA SDLC /STOP THE TAPE JMS I TYPE 2003 4000 CLA CMA TAD ZDATA JMS I TYOCT JMS I TYPE 4040 0401 /DA 2401 /TA 4000 /END JMP ZCOM /MARK TRACK ERROR ZMKTK, 0 CLA TAD DTA SDLC /STOP THE TAPE JMS I TYPE 2003 /PC 4000 /END CLA CMA TAD ZMKTK JMS I TYOCT JMS I TYPE 4040 1501 /MA 2213 /RK 4024 / T 2201 /RA 0313 /CK 4000 / 0 JMP ZCOM /PARITY ERROR ZPAR, 0 CLA TAD DTA SDLC /STOP THE TAPE JMS I TYPE 2003 /PC 4000 /END CLA CMA TAD ZPAR JMS I TYOCT JMS I TYPE 4040 0310 /CH 0503 /EC 1323 /KS 2515 /UM 4000 /0 JMP ZCOM /TIMING ERROR ZTIM, 0 CLA TAD DTA SDLC /STOP THE TAPE JMS I TYPE 2003 4000 CLA CMA TAD ZTIM JMS I TYOCT JMS I TYPE 4040 2411 /TI 1511 /MI 1607 /NG 4000 / 0 /TYPE "ERROR PHASE X" ZCOM, TAD PHASE /WHAT PHASE OF OPERATION TAD PFORM /WAS THE MACHINE IN DCA TFORM /WHEN ERROR OCCURED JMS I TYPE 0522 /ER 2217 /RO 2240 /R 2010 /PH 0123 /AS 0540 /E TFORM, 4060 / X 4543 /CR+LF 0000 /END JMP I .+1 RETRY PFORM, 4060 /HERE STARTS THIS PROGRAM. IT WILL ASK THE /OPERATOR FOR DRIVE NUMBERS, THEN ASK HIM FOR /A DIRECTION ON WHAT TO DO WITH THE DRIVES. /THE SEQUENCE FOR MARKING A TAPE WOULD APPEAR AS: /UNIT? (0 OR 1 OR 0 1) /FORMAT? (MARK 1215) /2277 WORDS, 0256 BLOCKS.OK? YES OR NO /(YES) /THAT DATA IN PARENTHESIS IS TYPED BY THE OPERATOR /(HE DOESN'T TYPE THE PARENTHESIS) /IF HE HAD ANSWERED NO, "FORMAT?" WOULD BE TYPED OUT. /IF THE DRIVE WAS WRONG, HE WOULD TYPE RESTART. /IF HE HAD TYPED "MARK" IN RESPONSE TO "FORMAT?" THE /TAPE WOULD BE MARKED WITH THE STANDARD PDP-8 CONFIGURATION. /IF HE HAD TYPED "MARK 384" THE TAPE WOULD /BE MARKED WITH THE STANDARD PDP-10 CONFIGURATION /NOTE: THE WORD AND BLOCK NUMBERS ARE TYPED IN OCTAL /IF A MISTAKE OCCURS ON THE OPERATORS PART (WITH REFERANCE /TO BLOCK + WORD SIZE) HE WILL BE TOLD ABOUT IT *1000 /MAKE A CALL FOR THE DECTAPE NUMBERS TO BE /WORKED. STAR0, JMS I TYPE /TYPE VERSION NUMBER 4543 /CR+LF 4300 /LF+0 JMS I TYPE TEXT /TDFMT V4A/ START, JMS I TYPE /SET UP TYPER 4543 /CR+LF 4300 /LF+END TYQU, JMS I TYPE /"UNIT?" 2516 /UN 1124 /IT 7740 /? 0000 /END /WAIT FOR A REPLY JMS I TYPIN /GET NUMBERS TAD BADD /INITIALIZE POINTER (BFR) IAC /(BADD=BUFFER-1, SO BUMP THE AC) DCA BFR /TO START OF INPUT BUFFER DCA DCTR /INITIALIZE DTA COUNTER TO 0 DCA CRFLAG /CLEAR FLAG SO CR NOT ACCEPTIBLE CRCHK, TAD CRCOD /GET CODE FOR CAR. RETN CIA /NEGATE IT TAD I BFR /SEE IF NEXT CHAR. IN SNA /BUFFER IS CAR. RETN. JMP OKCR /YES: SEE IF C.R. LEGAL HERE DCA CRFLAG /NO: SO C.R. IS LEGAL NOW VALCHK, TAD C260 /SEE IF # IS LESS THAN CIA /ASCII 0 (260) TAD I BFR /SUBTRACT BUFFER DATA SPA CLA /IS IT LESS THAN ASII 0? JMP TYQU /YES: TELL OUTSIDE WORLD TAD C261 /NO: SEE IF GREATER THAN CMA /ASC II 1 (261) TAD I BFR /SUBTRACT BUFFER DATA SMA CLA /GREATER THAN ASCII 7? JMP TYQU /YES: TELL OUTSIDE WORLD TAD I BFR /NO: ACCEPT BUFFER RTR AND C7000 /ISOLATE DTA JMS REPEAT /GO CHECK FOR REPEATED DTA AND STORE # ISZ BFR /INCREMENT INPUT BUF. PTR. JMP CRCHK /GO LOOK AT NEXT CHAR. /THIS SECTION CHECKS TO SEE IF THERE HAS BEEN ANY /VALID INPUT ONCE A CARRIAGE RETURN IS SEEN OKCR, CLA /CLEAR AC TAD CRFLAG /LOAD CR FLAG; 0 MEANS NO GOOD SNA CLA JMP START /0: NO VALID INPUT; RESTART TAD DCTR /NOT 0: SO HAVE VALID INPUT TAD DBUFAD /CALCULATE END OF DTA LIST +1 DCA DBUFPT /STORE IT IN BUFFER POINTER, THEN CMA /COMPLEMENT THE AC AND DCA I DBUFPT /TERMINATE DTA LIST WITH 7777 INIT1, CLA /CLEAR AC IF COME THRU LOC IT TAD DBUFAD /AND RESET LIST POINTER DCA DBUFPT /TO START OF LIST JMS I GETDTA /GO GET A DTA NUMBER /INFORM THE OPERATOR THAT THE PROGRAM IS SET TO START /TYPE "FORMAT" AND WAIT FOR THE REPLY INIT, JMS I TYPE /MESSAGE OUT 0617 /FO 2215 /RM 0124 /AT 7740 /? 0000 /END JMS I TYPIN /WAIT FOR A REPLY JMS I COMPAR /DID HE TYPE "MARK"? 0315 /M 0301 /A 0322 /R 0313 /K 0000 /END JMP .+3 JMP I .+1 MARK /TO MARK A TAPE /SEE IF HE TYPED "RDR" (READ AND TYPE FIRST 12 /BLOCK NUMBERS IN REVERSE). JMS I COMPAR 0322 /R 0304 /D 0322 /R 0000 /0 JMP .+3 JMP I .+1 RDR /TYPE BLOCKS /SEE IF HE TYPED "RDF" (READ AND TYPE FIRST 12 /BLOCK NUMBERS FORWARD). JMS I COMPAR 0322 /R 0304 /D 0306 /F 0000 /0 JMP .+3 JMP I .+1 RDFA /TYPE BLOCKS /SEE IF HE TYPED "SAME" (MEANING MARK A TAPE /USING THE SAME CONSTANTS AS BEFORE). JMS I COMPAR 0323 /S 0301 /A 0315 /M 0305 /E 0000 /0 JMP .+3 JMP I .+1 SWCHK /TO MARK AS BEFORE /SEE IF HE TYPED "RESTART" JMS I COMPAR 0322 /R 0305 /E 0323 /S 0324 /T 0301 /A 0322 /R 0324 /T 0000 /0 JMS QU /MUST BE NONSENSE JMP START /START ALL OVER GETDTA, NUDTA /POINTER TO ROUTINE TO SWITCH UNITS CRFLAG, 0 /=0, CR NO GOOD; NOT 0, CR IS OK *1200 /MARK WAS TYPED IN, IF W1-1 IS NOT A "K",ASSUME THAT /A NUMBER WAS TYPED IN, AND VERIFY THIS. IF W1-1 IS /A "K", ASSUME STANDARD FORMAT.(W1=LAST ENTRY INTO THE BUFFER) MARK, TAD I BINCO /ADDRESS OF FIRST BINARY DCA W5 /CONSTANT FOR DEC TO BIN DCA TOTAL /WILL BE BINARY EQUIVILANT /SAVE C(X1) FOR DECREMENT THROUGH BUFFER DNC, CLA CMA /DECREMENT BUFFER ADDRESS TAD W1 /ADDRESS BY 1 DCA W1 /W1=SWEEP ADDRESS /LOOK FOR END OF PROCESSING BY LOOKING FOR A "K" IN BUFFER TAD LETK /LETTER ASCII "K" CIA /SUBTRACT FROM CHARACTER TAD I W1 /IN BUFFER SNA CLA /EQUAL? JMP DIV3 /YES: SEE IF DIVISIBLE BY 3 /VERIFY THIS CHARACTER AS BEING OF DECIMAL ORIGIN TAD C260 /ASCII FOR 0 CIA /TO SEE IF CHARACTER TAD I W1 /IS LESS THAN 260 SPA CLA /IS IT? JMP I QU1 /YES: NOT DECIMAL CHARACTER TAD C271 /ASCII FOR 9 CMA /TO SEE IF GREATER THAN TAD I W1 /9 SMA CLA /IS IT? JMP I QU1 /NOT A DECIMAL CHARACTER /CHARACTER IS DECIMAL. NOW CONVERT IT TO BINARY /REMEMBER POSITION OF CHARACTER IN BUFFER MAY BE /10,100,1000. TAD I W1 /ISOLATE THE NUMBER AND C0017 /FOR PROPER CONVERSION SNA /IF 0, NO BINARY CONVERSION NEEDED JMP IBS /YES: 0: INCREMENT BINARY CONVERSION /NOT 0, SET UP CONVERSION LOOP CLL CIA /NUMBER OF ADDITIONS DCA W4 /TO NEGATIVE FOR ISZ TAD I W5 /BINARY POSITION TO C(ACC) TAD TOTAL /ADD TO PRESENT TOTAL SZL /CHECK ON TO MANY WORDS JMP I QU2 /TO MANY WORDS CALLED FOR DCA TOTAL /KEEP RUNNING SUM ISZ W4 /LAST ADDITION? JMP .-6 /NO: ADD AGAIN /FINAL ADDITION FOR THIS POSITION COMPLETED IBS, ISZ W5 /NEXT POSITION JMP DNC /DO NEXT CHARACTER /LAST CHARACTER COMPLETED. SEE IF DIVISIBLE BY 3 /IF NOT A NORMAL INPUT DIV3, TAD TOTAL /GET TOTAL WORDS SNA /IF TOTAL 0, NORMAL INPUT TAD C201 /129 OCT. THIS TEST REDUNDANT TAD C0017 /ADD CONSTANT 15 TO TOTAL DCA TOTAL /FOR FUTURE CONSIDERATIONS DCA VAR1 /# OF WORDS/3 FOR MARK TRACK WRITING TAD TOTAL /RESTORE IN THE ACC CLL /TO DIVIDE BY 3, LINK KEEPS OVERFLOW TAD M3 /SUBTRACT 3 ISZ VAR1 /ON EACH DIVISION, KEEP RUNNING SUM SZA /IF AC = 0,NO REMAINDER SNL /WHEN LINC GOES TO 0, DIVISION ENDED SKP /NOW SEE IF IT DIVIDED EVENLY JMP .-6 /SUBTRACT 3 MORE SZA CLA /IF 0,OK. OTHERWISE ERROR JMP I QU4 /NOT DIVISIBLE BY 3 /CORRECT "VAR1" ( THE NUMBER OF WORDS/3) FOR THE +15 /ADDED JUST ABOVE AND AN INHERANT +2 DUE TO MARK TRACK /CONFIGURATION TO BE WRITTEN. TAD M7 /SUBTRACT 7 FROM PHONY SETUP TAD VAR1 /GIVING THE NUMBER OF TIMES CIA /TO BE USED LATER IN A ISZ DCA VAR1 /DATA MARK WILL BE WRITTEN /COMPUTE A VALUE FOR TOTAL NUMBER OF BLOCKS /RECORD SIZE + 15 INTO 636160 OCT. TAD C7714 /EXTENDED 64 VALUE. SETS AC#2 DCA W1 /SET FOR 640000 JMS I FORM10 /PATCH TO CHECK FOR STD.10 FORMAT TAD C1620 /VERNIER ADJUSTMENT FOR FORMULA CLL /ACC#2 CARRY FUNCTION TAD TOTAL /WORD COUNT ISZ BLOCKS /+1 TO BLOCK COUNT SKP JMP I QU3 /TO MANY BLOCKS CALLED FOR SNL /CARRY INTO ACC#2? JMP .-5 /NO: CONTINUE COUNT ISZ W1 /YES: FULLY DIVIDED? JMP .-10 /NO: CONTINUE PROCESS CLA CLL /C(ACC)+ C(L)=0 F10RTN, TAD BLOCKS /FOR MARK TRACK (COME HERE FR F10PAT IF 10 FRMT) CMA /WRITING DCA VAR2 /SEE MARK WRITE /VALUES FOR BLOCK AND RECORD SIZE HAVE BEEN /COMPUTED. TELL OUTSIDE WORLD AND GET THE OK. TAD TOTAL /SUBTRACT 15 FROM TOTAL TAD C7761 /WORDS FOOLING OPERATOR DCA TOTAL /CORRECTED FOR TAPE WRITING TAD TOTAL /FOR OCTAL TYPEOUT JMS I TYOCT /TYPE OCTAL WORDS JMS I TYPE /TYPE MESSAGE 4027 / W 1722 /OR 0423 /DS 5400 /, END TAD BLOCKS /TYPE OUT BLOCK #S IAC /TO FOOL THE OPERATOR JMS I TYOCT /IN OCTAL JMS I TYPE /TYPE MESSAGES 4002 / B 1417 /LO 0313 /CK 2356 /S. 1713 /OK 7733 /?( 3105 /YE 2340 /S 1722 /OR 4016 / N 1735 /O) 4543 /CR+LF 0000 /END JMS I TYPIN /WAIT FOR REPLY /SEE IF A YES OR NO ANSWER WAS GIVEN JMS I COMPAR 0331 /Y 0305 /E 0323 /S 0000 /END JMP I IT JMP I .+1 SWCHK FORM10, F10PAT *1400 /SET THE TAPE INTO MOTION. ALL VARIABLES ARE SET. /WRITE TIMING AND MARK TRACK STMK, CLA DCA PHASE TAD DT1400 /FWD, WRITE, GO TAD DTA /GET UNIT NUMBER SDLC /LOAD COMMAND REGISTER TAD VAR2 /TO MAKE A RESTART FOR THE SAME DCA W6 /OPTION POSSIBLE /WRITE ABOUT 10 FEET OF END ZONE DCA W1 CEZ, TAD REZ /ADDRESS OF DATA JMS SETUP ISZ W1 JMP CEZ /NOT END FOOTAGE TAD M144 /OK WRITE INTERBLOCK SYNC DCA W1 JMS INBLSY ISZ W1 JMP .-2 JMP WDZ /WRITE INTERBLOCK SYNC INBLSY, 0 TAD VAR1 /RESET THE WORDS DCA W5 TAD IBZ /ADDRESS OF DATA JMS SETUP /GO OUT AND WRITE 1 JMP I INBLSY /GO DO AGAIN /WRITE FORWARD BLOCKMARK AND REVERSE GUARD WDZ, TAD FBM /ADDRESS OF PATTERN JMS SETUP /WRITE LOCKMARK, REVERSE CHECKSUM, REV FINAL, REV PREFINAL LRCFP, TAD WLMRF JMS SETUP1 /WRITE THE DATA TRACK DTRK, TAD DZ /ADDRESS OF PATTERN JMS SETUP ISZ W5 JMP DTRK /NOW WRITE DATA MARK TRACK AGAIN /WRITE PREFINAL, FINAL, CHECKSUM, AND REVERSE LOCK PFCRC, TAD FEZ /ADDRESS OF DATA JMS SETUP1 /WRITE GUARD REVERSE BLOCK GRB, TAD GRZ JMS SETUP /THIS COMPLETES 1 BLOCK, GO BACK AND WRITE THE REST JMS INBLSY /WRITE INTERBLOCK SYNC ISZ W6 /TOTAL NUMBER OF BLOCKS JMP WDZ /WRITTEN? NO: /ALL DATA BLOCKS WRITTEN NOW WRITE BUFFER ZONE OF INTERBLOCK SYNC TAD M143 /198 EXPAND CODES AT END OF BLOCKS DCA W1 JMS INBLSY ISZ W1 JMP .-2 /FINISHED BLOCK WRITTING, WRITE ANOTHER 10(1) OF END ZONES DCA W1 WEZF, TAD EZM JMS SETUP ISZ W1 JMP WEZF SDST SKP CLA JMS I SELTIM /TIMING ERROR TAD C1 DCA PHASE JMP I .+1 MWTM SETUP, 0 DCA 12 /WORD TO BE WRITTEN ON MARK TRACK TAD M3 DCA WC JMS I WAIT ISZ WC JMP .-2 JMP I SETUP SETUP1, 0 DCA 12 TAD M6 DCA WC JMS I WAIT ISZ WC JMP .-2 JMP I SETUP1 /THESE ARE THE DATA CONFIGURATIONS FOR THE MARK TRACK /REVERSE END ZONE REZ, . 4044 /ON TAPE AS 5555 (OCT) 0440 4404 /INTERBLOCK SYNC IBZ, . 0404 /ON TAPE AS 2525 (OCT) 0404 0404 /FORWARD BLOCK MARK AND REVERSE GUARD FBM, . 0404 /ON TAPE AS 2632 (OCT) 4004 4040 /LOCK MARK, REVERSE CHECKSUM, REVERSE FINAL /AND REVERSE PREFINAL WLMRF, . 0040 /ON TAPE AS 10101010 (OCT) 0000 4000 0040 0000 4000 /DATA MARK DZ, . 4440 /ON TAPE AS 7070 (OCT) 0044 4000 /PREFINAL, FINAL, FWD CHECKSUM, AND REVERSE LOCK FEZ, . 4440 /ON TAPE AS 73737373 (OCT) 4444 4044 4440 4444 4044 /FORWARD GUARD AND REVERSE BLOCK NUMBER GRZ, . 4040 /ON TAPE AS 5145 (OCT) 0440 0404 /FORWARD END ZONE EZM, . 0400 /ON TAPE AS 2222 (OCT) 4004 0040 /SUBROUTINE TO SEE IF USER TYPED MARK 384 /TO SPECIFY STANDARD PDP-10 FORMAT F10PAT, 0 DCA BLOCKS /CLEAR LOC. BLOCKS IN CASE NOT 10-FORMAT TAD TOTAL /AND GET NUMBER TYPED BY USER TAD M617 /WAS IT 384? SZA CLA JMP I F10PAT /NO-RETURN DCA W1 /YES-CLEAR W1 FOR WAIT LOOP TAD C1101 /AND ADJUST BLOCK TOTAL FOR DCA BLOCKS /1102(OCTAL) BLOCKS. JMP I .+1 F10BAK, F10RTN M617, -617 C1101, 1101 C1, 0001 *1600 /THE MARK TRACK HAS BEEN WRITTEN, AND TAPE IS /MOVING FORWARD IN THE FORWARD END ZONE. STOP /THE TAPE AND SEE IF THERE ARE ANY TAPES LEFT TO /MARK--IF SO GO DO THEM, ELSE TELL OPERATOR TO THROW THE /"OFF/WTM" SWITCH TO "OFF" /HE WILL THEN CONTINUE AFTER THIS ACTION /KILL WRITE,STOP TAPE MWTM, CLA TAD DTA /UNIT SDLC JMS NUDTA JMP I DOMARK /MESSAGE TO THE OPERATOR OFF, JMS I TYPE 2305 /SE 2440 /T 2327 /SW 1124 /IT 0310 /CH 4024 /T 1740 /O 1706 /OF 0600 /F JMS I TYPIN /WAIT FOR CR JMP I .+1 SWOFF /CHECK TO MAKE SURE THAT SWITCH IS OFF /REVERSE TAPE AND READ MARK TRACK PSER, TAD DT3000 /REVERSE GO TAD DTA /UNIT SDLC /LOAD COMMAND REGISTER DCA W1 /STALL ROUTINE TO GET UP TO SPEED SDSQ JMP .-1 SDRC ISZ W1 JMP .-4 SDSQ /SKIP ON QUAD LINE IF SET AFTER WAIT ROUTINE SKP JMP .+3 /FLAG WAS SET SDSS /READ IN A LINE OF TAPE JMP .-1 SDRC /READ THE COMMAND REGISTER SDST /CHECK FOR A TIMING ERROR SKP JMS I SELTIM /TIMING ERROR AND MSK77 /CHECK TO SEE IF TAPE IS STILL IN END ZONE TAD M55 SZA CLA JMP .-11 /NOT A 55 YET JMS I SSDSQT /YES,READ IN SOME MORE TAD M55 /IS IT END ZONE SNA CLA JMP .-3 /STILL IN END ZONE TAD MTR /GET THE MARK TRACK TAD M25 /IS IT EXPAND CODE SZA CLA JMS I SCEXPC /NOT YET,CHECK FOR A 52,AND ADVANCE 3 LINES CLA /YES IT IS EXPAND CODE TAD M306 /SET UP FOR 198 EXPAND CODES DCA CNT JMS I SSDSQT /THE TAPE SHOULD BE IN SYNC NOW TAD M25 /READ THE REST OF EXPAND CODE SZA CLA JMS I MARKER /MARK TRACK ERROR ISZ CNT /INCREMENT COUNTER JMP .-5 TAD VAR2 /NUMBER OF BLOCKS DCA W6 RSTBLK, JMS I SSDSQT /START OF A STANDARD BLOCK TAD M25 /FIRST EXPAND CODE AT BEGINNING SZA CLA /OF BLOCK JMS I MARKER /MARK TRACK ERROR JMS I SSDSQT /READ MARK BLOCK NUMBER TAD M26 SZA CLA JMS I MARKER /MARK TRACK ERROR JMS I SSDSQT /READ MARK GUARD TAD M32 SZA CLA JMS I MARKER /MARK TRACK ERROR TAD M4 DCA CNT JMS I SSDSQT /READ L,CK,F,PF TAD M10 SZA CLA JMS I MARKER /MARK TRACK ERROR ISZ CNT JMP .-5 CLA CLL TAD VAR1 RAL DCA W5 /NUMBER OF DATA MARKS JMS I SSDSQT /READ DATA MARKS TAD M70 SZA CLA JMS I MARKER /MARK TRACK ERROR ISZ W5 /COUNT FOR NUMBER OF BLOCKS JMP .-5 TAD M4 DCA CNT JMS I SSDSQT /READ PF,F,CK,L TAD M73 SZA CLA JMS I MARKER /MARK TRACK ERROR ISZ CNT JMP .-5 JMS I SSDSQT /READ REVERSE GUARD TAD M51 SZA CLA JMS I MARKER JMS I SSDSQT /READ BLOCK NUMBER TAD M45 SZA CLA JMS I MARKER /MARK TRACK ERROR JMS I SSDSQT /READ EXPAND CODE TAD M25 SZA CLA JMS I MARKER /END OF ONE BLOCK,MARK TRACK ERROR ISZ W6 /FINISHED ALL BLOCKS JMP RSTBLK /NO:DO OTHER BLOCKS TAD M307 /SET UP FOR INTERBLOCK SYNC AT END OF TAPE DCA CNT JMS I SSDSQT /CHECK FOR 199 EXPAND CODES TAD M25 SZA CLA JMS I MARKER /MARK TRACK ERROR ISZ CNT JMP .-5 JMS I SSDSQT TAD M22 SZA CLA JMS I MARKER TAD DTA SDLC JMP I .+1 WDBLKN, DBLKN /GO OUT TO WRITE DATA AND BLOCK NUMBERS FORWARD *2000 DBLKN, TAD C2 DCA PHASE TAD VAR2 /NUMBER OF BLOCKS DCA W6 DCA BLK /INITIAL BLOCK IS 0 TAD BLK JMS I MESS /COMPUTE THE COMP OBVERSE OF REV BLK DCA REVBLK SDLD TAD DT1400 /FORWARD,WRITE,GO TAD DTA /UNIT SDLC /LOAD THE COMMAND REGISTER SDRC /CHECK TO MAKE SURE WRITE IS SET RTL RAL SMA CLA JMS WLO /WRITE FAILED TO SET TAD M6 DCA CNT SDSQ /ROUTINE TO GET UP TO SPEED JMP .-1 SDLD ISZ CNT JMP .-4 SDLD SDST SKP JMS I SELTIM /TIMING ERROR LINE, SDSS /WRITE ALL ZEROES TO THE FIRST BLOCK JMP .-1 SDLD /LOAD THE DATA BUFFER SDRC SDST SKP JMS I SELTIM /TIMING ERROR AND MSK77 DCA MTR TAD MTR TAD M26 SZA CLA JMP LINE SDLD SDST SKP JMS I SELTIM /TIMING ERROR JMP WDOBLK /GO AND WRITE REVERSE GUARD WDBLK, CLA CLL /BEGINNING OF BLOCK,WRITE DATA AND BLOCK NUMBER JMS W4L /WRITE EIGHT LINES JMS W4L /END OF EXPAND CODE,BEGINNING OF BLK NUMBER TAD BLK /GET FORWARD BLOCK NUMBER JMS W4L /WRITE IT CLA JMS W4L /WRITE FIRST WORD OF REV GUARD WDOBLK, CLA JMS W4L /SECOND WORD OF REVERSE GUARD JMS W4L JMS W4L /FIRST WORD OF REVERSE CHECKSUM WDATA, TAD TOTAL /NUMBER OF DATA WORDS TO BE WRITTEN CIA DCA W5 /SET UP COUNTER JMS W4L ISZ W5 /INCREMENT COUNTER JMP .-2 CLA CLL TAD MSK77 /COME BACK TO WRITE LAST WORD AND CHECKSUM JMS W4L CLA JMS W4L /FINISH CHECKSUM JMS W4L /FIRST WORD OF REVERSE LOCK JMS W4L /LAST WORD OF RL. AND HALF OF GUARD JMS W4L /REST OF GUARD TAD REVBLK /GET REVERSE BLOCK NUMBER JMS W4L CLA CMA JMS W4L /END OF BLOCK NUMBER AND HALF OF EXPAND CODE JMS W4L /END OF EXPAND CODE ISZ BLK CLA TAD BLK JMS I MESS /COMPUTE NEW BLK NUMBER DCA REVBLK SDST SKP JMS I SELTIM /TIMING ERROR ISZ W6 /IS IT DONE WRITING BLK AND DATA JMP WDBLK /NO SDSQ JMP .-1 SDRD CLA TAD DT1000 /SEARCH FOR END ZONE TAD DTA /GET UNIT SDLC /LOAD THE COMMAND REG SDSS JMP .-1 SDRC AND MSK77 TAD M22 SZA CLA JMP .-6 JMP I .+1 DBLOCK W4L, 0 SDSQ JMP .-1 /SKIP ON QUAD LINE FLAG SDLD /LOAD THE DATA BUFFER SDST /CHECK FOR A TIMING ERROR SKP JMS I SELTIM /TIMING ERROR JMP I W4L C2, 0002 WLO, 0 TAD DTA /STOP THE TAPE SDLC /LOAD THE COMMAND REGISTER JMS I TYPE 2003 /PC 4000 /END CLA CMA TAD WLO JMS I TYOCT JMS I TYPE 4040 2722 /WR 1124 /IT 0540 /E 0000 /END JMP I .+1 ZCOM *2200 BLCSD, TAD C4 DCA PHASE CLA CLL TAD VAR2 DCA W6 /SET UP FOR THE NUMBER OF BLOCKS DCA BLK /SET BLK TO 0 TAD DT1000 /FORWARD READ TAD DTA /UNIT SDLC /LOAD THE COMMAND REG TAD BLK JMS I MESS /CALCULATE THE COMPLEMENT OBVERSE DCA REVBLK SDST SKP JMS I SELTIM /TIMING ERROR TAD M6 /WAIT TO GET UP TO SPEED DCA CNT /SET UP COUNTER SDSQ /SKIP ON A QUAD LINE FLAG JMP .-1 SDRD /READ THE DATA BUFFER TO CLEAR FLAG ISZ CNT JMP .-4 CLA BLCSDA, DCA CHKSUM JMS I SLRDRC /READ A SINGLE LINE AT A TIME TAD M26 SZA CLA /IS IT BLOCK MARK JMP SRDRC+4 /NO,GO BACK SDST SKP JMS I SELTIM /TIMING ERROR TAD DATRD CIA TAD BLK SZA CLA JMS I BLKERR /BLK NUMBER ERROR JMS I SSDSQT /READ GUARD JMS I SSDSQT /READ REVERSE LOCK JMS I SSDSQT /READ CHECKSUM SDRD /READ THE DATA BUFFER SDST SKP JMS I SELTIM /TIMING ERROR AND MSK77 JMS I BCXOR /GO OUT TO CHECKSUM ROUTINE RDATA, TAD TOTAL /NUMBER OF WORDS PER BLOCK CIA DCA W5 /SET UP COUNTER SDSQ JMP .-1 SDRD /READ THE DATA BUFFER SDST SKP JMS I SELTIM /TIMING ERROR DCA DATRD TAD DATRD /SAVE THE DATA WORD SZA CLA JMS I DATERR /DATA ERROR TAD DATRD JMS I BCXOR SDST /CHECK FOR A TIMING ERROR SKP JMS I SELTIM /TIMING ERROR ISZ W5 JMP RDATA+3 SDSQ /READ REVERSE CHECKSUM JMP .-1 SDRD /READ IT IN SDST SKP JMS I SELTIM /TIMING ERROR AND C7700 JMS I BCXOR /CHECK CHECK SUM TAD CHKSUM AND MSK77 IAC TAD C7700 SZA CLA JMS I CHKERR /CHECKSUM ERROR SDST SKP JMS I SELTIM /TIMING ERROR JMS I SLRDRC /ADVANCE A SINGLE LINE FLAG TAD M31 /LOOK FOR REV BLK NUMBER SZA CLA JMP SRDRC+4 SDST SKP JMS I SELTIM /TIMING ERROR TAD DATRD CIA TAD REVBLK /COMPARE BLOCK READ WITH ONE COMPUTED SZA CLA JMS I BLKERR /BLOCK NUMBER ERROR SDSQ JMP .-1 SDRD SDST SKP JMS I SELTIM /TIMING ERROR CLA CLL ISZ BLK TAD BLK JMS I MESS DCA REVBLK SDST SKP JMS I SELTIM /TIMING ERROR ISZ W6 JMP BLCSDA TAD DT1000 TAD DTA SDLC SDSS JMP .-1 SDRC AND MSK77 TAD M22 SZA CLA JMP .-6 JMP I .+1 RDBLKS C4, 0004 *2400 DBLOCK, TAD C3 DCA PHASE CLA CLL DCA DISBLK TAD DT3000 /REVERSE,GO TAD DTA /UNIT SDLC /LOAD THE COMMAND REGISTER CLA CLL DISLUP, SDSS JMP .-1 CLA CLL SDRD DCA DISDAT /SAVE THE DATA BUFFER SDRC AND MSK77 /MASK OUT THE MARK TRACK TAD M26 /CHECK FOR BLOCK NUMBER SZA JMP DISEND /NOT BLK MARK,CHECK FOR END ZONE TAD DISDAT /DISPLAY THE NUMBER IN THE AC ISZ DISBLK JMP .-1 JMP DISLUP /GO SEARCH FOR THE NEXT BLOCK DISEND, TAD FOUR /IS IT END ZONE SZA CLA JMP DISLUP /NO,GO GET NEXT LINE TAD DTA /STOP GET READY TO READ SDLC /LOAD THE COMMAND REGISTER JMP I .+1 BLCSD DISBLK, 0 DISDAT, 0 FOUR, 4 C3, 0003 C5, 0005 RDBLKS, TAD C5 DCA PHASE TAD VAR2 DCA W5 /SET UP FOR NUMBER OF BLOCKS IAC TAD VAR2 DCA W6 /SET UP TO CHECK BLK REVERSE TAD DT3000 /READ REVERSE GO TAD DTA /UNIT SDLC /LOAD THE COMMAND REGISTER TAD M6 DCA CNT SDSS JMP .-1 SDRC CLA ISZ CNT JMP .-5 RDBLK, SDSS JMP .-1 SDRD /READ THE DATA BUFFER AND STORE IT AWAY DCA CNT SDRC AND MSK77 TAD M26 SZA CLA /IS IT BLOCK NUMBER JMP RDBLK TAD CNT TAD W6 SZA CLA JMS I BLKERR /BLOCK NUMBER ERROR IAC TAD W6 /INCREMENT A NUMBER FOR COMPARE COUNTER DCA W6 ISZ W5 /INCREMENT BLK COUNTER JMP RDBLK SDSS JMP .-1 SDRC AND MSK77 TAD M22 SZA CLA JMP .-6 TAD DTA SDLC /LOAD THE COMMAND REGISTER WITH UNIT STOP IAC DCA PHASE JMS NUDTA JMP PSER JMP I .+1 INIT /END GO BACK TO DIRECT / / /SUBROUTINE TO CHECK FOR REPEATED DTA NUMBERS /DTA # TO COMPARE TO LIST IS IN AC ON ENTRY--THIS /ROUTINE STORES THE DTA # IF IT IS NEW AND IGNORES IT /IF IT IS NOT-CALL BY JMS REPEAT WITH DTA # IN AC REPEAT, 0 DCA DNUM /TEM STORAGE FOR NEW DTA # TAD DBUFAD /INITIALIZE POINTER (DBUFPT) DCA DBUFPT /TO START OF DTA LIST TAD DCTR /LOAD NUM. OF DTAS STORED CMA /COMPLEMENT IT DCA COMCTR /STORE IN COMPARE COUNTER COMCHK, ISZ COMCTR /DONE WITH ALL COMPARES? JMP DOCOMP /NO: GO DO COMPARE TAD DNUM /YES: STORE NEW DTA# DCA I DBUFPT /AT END OF LIST ISZ DCTR /INCR. # OF DTAS STORED JMP I REPEAT /RETURN COMCTR, 0 /COUNTER FOR # OF LIST COMPARISONS TO BE DONE DCTR, 0 /COUNTER FOR # OF DTAS IN LIST DBUFAD, DTABUF /START OF DTA NUM. LIST DNUM, 0 /TEM STORAGE FOR DTA # / / /THIS SECTION DOES THE ACTUAL COMPARISON BETWEEN /THE DTA# PASSED TO THE ROUTINE AND A NUMBER ON THE LIST DOCOMP, TAD I DBUFPT /GET NXT DTA NUMBER PASSED CIA /NEGATE IT TAD DNUM /ADD IN DTA NUMBER PASSED SNA CLA /ARE THEY THE SAME JMP I REPEAT /YES: RETURN ISZ DBUFPT /NO: INCREMENT LIST POINTER JMP COMCHK /SEE IF DONE ALL COMPARES / / *2600 RDFA, CLA CLL TAD DT3000 /REVERSE READ GO TAD DTA /GET UNIT SDLC /LOAD THE COMMAND REGISTER SDSS /SKIP ON A SINGLE LINE FLAG JMP .-1 SDRC /READ THE COMMAND REGISTER AND MSK77 TAD M22 /IS IT END ZONE SZA CLA /YES JMP .-6 /NO GO BACK AND LOOK AGAIN TAD DT1000 /FORWARD READ GO TAD DTA /UNIT SDLC /LOAD THE COMMAND REGISTER TAD M6 DCA CNT SDSS JMP .-1 SDRC CLA ISZ CNT JMP .-5 RDFA1, TAD M26 DCA W3 /SET UP COUNTER TO READ 22 BLOCKS TAD BADD /SET UP BUFFER ADDRESS DCA X2 SDSS /GO SINGLE LINE FLAGS JMP .-1 SDRD /READ THE DATA BUFFER DCA CNT SDRC /READ THE COMMAND REGISTER AND MSK77 TAD M26 /SEARCH FOR BLOCK NUMBER SZA CLA JMP RDFA1+4 /NOT BLOCK NUMBER YET GO BACK AGAIN TAD CNT /OK BLK NUMBER STORE IT AWAY DCA I X2 ISZ W3 /INCREMENT COUNTER JMP RDFA1+4 /NOT 22 BLOCKS YET TAD DTA SDLC /STOP THE DTA /TYPE OUT BLOCK NUMBERS AND DTA UNIT# JMS I TYPE 0424 /DT 0140 /A 0000 /END TAD DTA /GET UNIT NUMBER RTL JMS I TYOCT /AND TYPE IT OUT JMS I TYPE 4345 /CR&LF 0000 /END TAD M26 /WILL TYPE ALL DCA W1 /22 WORDS TAD BADD /ADDRESS OF BLOCK DCA X2 /NUMBERS TO INDEX TAD I X2 /FIRST OR NEXT BLOCK JMS I TYOCT /TYPE IT OUT JMS I TYPE /CR&LF 4345 /CR&LF 0000 /END ISZ W1 /COMPLETE JMP .-6 JMP I IT /GO ASK FOR FORMAT RDR, CLA CLL TAD DT1000 /FORWARD READ GO TAD DTA /UNIT SDLC /LOAD THE COMMAND REGISTER SDSS /SKIP ON A SINGLE LINE FLAG JMP .-1 SDRC /READ THE COMMAND REGISTER AND MSK77 TAD M22 /CHECK FOR END ZONE SZA CLA JMP .-6 /NOT YET GO BACK TAD DT3000 /REVERSE READ GO TAD DTA /UNIT SDLC /LOAD THE COMMAND REGISTER TAD M6 DCA CNT SDSS JMP .-1 SDRC CLA ISZ CNT JMP .-5 JMP RDFA1 /STORE NUMBERS IN REVERSE RETRY, JMS I TYPIN JMS I COMPAR 0322 /R 0305 /E 0324 /T 0322 /R 0331 /Y 0000 /END JMP I IT /GUESS HE DOESN'T WANT TO TRY AGAIN CLA TAD DT1000 /FORWARD READ GO TAD DTA /UNIT SDLC /LOAD THE COMMAND REGISTER TAD M6 DCA CNT /WAIT 6 LINES SDSS JMP .-1 SDRC /READ THE COMMAND REGISTER ISZ CNT JMP .-4 SDSS JMP .-1 SDRC AND MSK77 TAD M22 SZA CLA JMP .-6 TAD DT3000 TAD DTA SDLC CLA IAC DCA PHASE JMP I .+1 PSER+11 *3000 SDSQT, 0 SDSQ /ADVANCE SIX LINES JMP .-1 /SKIP ON QUAD LINE FLAG SDRC /READ COMMAND REGISTER SDST SKP JMS I SELTIM /TIMING ERROR SDSS JMP .-1 /SKIP ON SINGLE LINE FLAG SDRC SDST SKP JMS I SELTIM /TIMING ERROR SDSS JMP .-1 SDRC /READ THE COMMAND REGISTER SDST SKP JMS I SELTIM /TIMING ERROR AND MSK77 /SAVE THE MARK TRACK LAST 6 BITS DCA MTR TAD MTR JMP I SDSQT A3LNS, 0 /ADVANCE THREE LINES SDSS JMP .-1 /SKIP ON SINGLE LINE FLAG SDRC SDST SKP JMS I SELTIM /TIMING ERROR SDSS JMP .-1 SDRC SDST SKP JMS I SELTIM /TIMING ERROR SDSS JMP .-1 SDRC SDST SKP JMS I SELTIM /TIMING ERROR AND MSK77 DCA MTR TAD MTR JMP I A3LNS CEXPC, 0 TAD MTR TAD M52 SZA CLA JMS I MARKER /MARK TRACK ERROR JMS A3LNS /READ THREE MORE LINES TAD M25 /IS IT 25 NOW SZA CLA JMS I MARKER /NO ,MARK TRACK ERROR JMP I CEXPC /YES:IT IS EXPAND CODE NUMBER 1 /SIXBIT COMPLEMENT XOR SUBROUTINE /SUBROUTINE IS ENTERED WITH DATA WORD TO BE XORED IN AC /TWO SIX-BIT COMPLEMENT XORS WILL TAKE PLACE TO LOC CHKSUM /WITH THE RESULT IN CHKSUM SBCXOR, 0 CMA /COMPLEMENT WORD DCA SBWORD /AND SAV TAD SBWORD AND CHKSUM CIA CLL RAL TAD SBWORD TAD CHKSUM DCA CHKSUM TAD SBWORD RTR CLL;RTR;RTR DCA SBWORD TAD SBWORD AND CHKSUM CIA CLL RAL TAD SBWORD TAD CHKSUM AND MSK77 DCA CHKSUM JMP I SBCXOR SRDRC, 0 SDSQ SKP JMP .+3 SDSS JMP .-1 SDRD DCA DATRD SDRC AND MSK77 JMP I SRDRC NUDTA, 0 TAD I LSTPT /GET CURRENT VALUE OF DATA LIST PTR DCA TBUFPT /STORE IT AS TEM,BUF,PTR TAD I TBUFPT /GET A DTA # FROM THE LIST AND C0007 SZA CLA /IS IT A 7777 JMP LSTEND /YES END OF LIST TAD I TBUFPT /NO;GET IT BACK DCA DTA ISZ I LSTPT /INCREMENT LIST POINTER JMP I NUDTA /RETURN /COME HERE AT END OF LIST TO RESET POINTERS AND RETURN TO CALL+2 LSTEND, ISZ NUDTA /INCREMENT RETURN POINTER TAD I STRTPT /GET ADR OF START OF LIST DCA I LSTPT JMP NUDTA+1 /GO GET FIRST DTA# AND RETURN STRTPT, DBUFAD /POINTER TO START OF DATA LIST TBUFPT, 0 /TEM STORAGE FOR BOT PTR LSTPT, DBUFPT /POINTER TO CURRENT VALUE OF DTA LIST PTR /CONSTANTS FOR FORMULA TRANSLATION SECTION BINCON, .+1 0001 0012 0144 1750 DTABUF, 0 *3200 /CHECK SWITCH TO SEE IF SET TO WTM POSITION SWCHK, JMS I TYPE /TYPE OUT MESSAGE 2305 /SE 2440 /T 2327 /SW 1124 /IT 0310 /CH 4024 /T 1740 /O 2724 /WT 1500 /M JMS I TYPIN /WAIT FOR CR CLA DCA CNTERL SDLD /CLEAR SINGLE AND QUAD FLAGS SDSS SKP JMP .+4 ISZ CNTERL JMP .-4 JMP SWCHER /ERROR,TYPE ERROR MESSAGE AND GO TO SWCHK /SEE IF THE DRIVE IS OK RSTSM, SDLC /LOAD CR TO CLEAR TIMEING ERROR SDLD /LOAD DATA BUFFER TO CLEAR S Q FLAGS TAD DT0400 /SET WRITE TAD DTA /GET UNIT DCA SAV /STORE IT AWAY TAD SAV SDSS JMP .-1 SDLC TAD SAV SDLC /LOAD THE TRANSPORT SDRC /READ THE COMMAND REGISTER AND CHECK IT RTL RAL SMA /CHECK WRITE TO BE SET JMP ERCHK /WRITE IS NOT SET RAL /CHECK WLO SPA JMP ERCHK /WLO RAL /CHECK SELECT AND TIMING ERROR SPA CLA JMP ERCHK /SELECT OR TIMING ERROR JMS NUDTA /CHECK OTHER DRIVE IF ANY JMP RSTSM-11 /CHECK OTHER DRIVE JMP I .+1 STMK CNTERL, 0 SAV, 0 ERCHK, JMS I TYPE /INCORRECT SETUP 2305 /SE 2425 /TU 2077 /P 0000 /END JMP I .+1 START SWCHER, JMS I TYPE 2327 /SW 1124 /IT 0310 /CH 4016 /N 1724 /OT 4023 /S 0524 /ET 4024 /T 1740 /O 2724 /WT 1540 /M 1722 /OR 4023 /S 1116 /IN 0714 /GL 0540 /E 1411 /LI 1605 /NE 4006 /F 1401 /LA 0740 /G 0601 /FA 1114 /IL 0504 /ED 4024 /T 1740 /O 2305 /SE 2440 /T 4543 /CR LF 0000 /END JMP SWCHK SWOFF, CLA DCA CNTERL SDLD /CLEAR ANY FLAGS THAT ARE SET SDSS SKP JMP OFF /FLAG SHOULDN'T BE SET ISZ CNTERL JMP .-4 CLA JMP I .+1 PSER *3400 /INPUT BUFFER FOR TELETYPE THIS MUST BE AT THE END OF PROGRAM BUFFER, 0 $ |
Added src/os8/uni/CUSPS/TDINIT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 | /2 TD8E INITIALIZER PROGRAM, V7A / / / / / / // / / / / /COPYRIGHT (C) 1975, 1977 /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. / / / / / / /DECEMBER 21, 1973 GB/RL/EF/SR /ABSTRACT-- / THE ROUTINE DESCRIBED AND LISTED HERE IS A GENERAL /DATA HANDLER FOR THE TD8E DECTAPE SYSTEM. THE ROUTINE /CONTAINS SEARCH, READ, AND WRITE FUNCTIONS IN A FORMAT /WHICH IS COMPATIBLE WITH OS/8 DEVICE HANDLER CALLING /SEQUENCES. / EXPLANATION: /THIS IS A SAVE FILE, WHICH MUST BE PLACED AS FILE # 1 /ON THE OS/8 BINARIES TAPE. (I.E. BLOCK 7) /FOLLOWING IT MUST BE THE FOLLOWING FILES, EACH 50 (DEC) BLKS LONG: /TDROM.SY /TD12K.SY / /TO CREATE SPECIAL BLOCK 0 FOR THAT TAPE, START THIS PROGRAM AT /LOCATION 200 AND FOLLOW INSTRUCTIONS. /TO THEN PERFORM THE INITIALIZATION FROM THE LIBRARY TAPES, /MERELY PLACE THE BINARY TAPE ON UNIT 0 AND BOOTSTRAP INTO IT. /THEN FOLLOW INSTRUCTIONS. /FILES TDROM.SY AND TD12K.SY ARE MERELY SYSTEM HEADS OF THE /APPROPRIATE SYSTEMS, THEY MAY CONTAIN ANY HANDLERS. /THE BLOCK 0 SPECIAL SECONDARY BOOTSTRAP READS IN THE FIRST /3 PAGES OF TDINIT (WORDS 200-777) AND BRANCHES TO 'STARTUP'. /THIS THEN READS IN THE REMAINDER OF TDINIT WITH ERROR CHECKING. /CODE LOC BLOCK ON BINARY TAPE /CCB 16,17 (THESE ARE DECTAPE BLOCK NUMBERS, NOT OS/8 RECORDS) /0 20 SKIPPED BY BLOCK 0 /200 21 /400 22 /600 23 /1000 24 /1200 25 /1400 26 /1600 27 /2000 30 /2200 31 TDINIT MUST HAVE USEFUL PART END AT OS/8 RECORD 75 /7400 32,33 RECORD 15 CONTAINS IMAGE OF BLOCK 0 /FIXES SINCE FIELD-TEST RELEASE: /1. FIXED BUG RE CLA ON RETRY AFTER ERROR /2. ALLOWED FINAL BOOTSTRAP TO BE INTO A WRITE-LOCKED DEVICE /OS/8 V3D CHANGES: /3. FIXED BUG RE TD8E BUILD (V6B PATCH) /THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE /VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS /CONTROL: /A) WHAT DRIVES (UNITS 0-7) WILL BE USED /B) THE ORIGIN OF THE TWO PAGE ROUTINE /C) WHAT MEMORY FIELD THE ROUTINE WILL RUN IN /D) THE SIZE OF THE DECTAPE BLOCK TO BE READ/WRITTEN /FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD /DEC VERSION OF THIS ROUTINE: DRIVE=10 /UNITS 0 AND 1 SELECTED ORIGIN=400 /ENTER AT ORIGIN, ORIGIN+4 AFIELD=0 /INITIAL FIELD SETTING MFIELD=00 /AFIELD*10=MFIELD WDSBLK=201 /129 WORDS PER BLOCK /THE USE OF THE PARAMETERS IS AS FOLLOWS: / DRIVE: DRIVE DETERMINES WHICH UNITS WILL BE SELECTED / DRIVE=10 IMPLIES UNITS 0 &1 / DRIVE=20 IMPLIES UNITS 2&3 / DRIVE=30 IMPLIES UNITS 4&5 / DRIVE=40 IMPLIES UNITS 6&7 /ORIGIN: ALTERING ORIGIN CAUSES ASSEMBLY IN A DIFFERENT / MEMORY LOCATION. WHEN CHANGING ORIGIN KEEP IN MIND /THAT THIS IS A TWO PAGE ROUTINE. /AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE / LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7. /MFIELD: MFIELD IS USED IN A CIF CDF MFIELD INSTRUCTION. / THE VALUE INSERTED FOR MFIELD SHOULD BE 10(8) TIMES / THE VALUE FOR AFIELD. THE PERMISSIBLE VALUES ARE 00-70. /WDSBLK: WDSBLK GOVERNS HOW MANY WORDS THE ROUTINE THINKS ARE / IN A DECTAPE BLOCK. THE STANDARD VALUE IS 201(8) OR / 128 DECIMAL. NOTE THAT THE FUNCTION WORD BIT 10 CAN / BE USED TO SUBTRACT ONE FROM WDSBLK. THE VALUE USED / FOR WDSBLK SHOULD BE THE NUMBER OF WORDS THE TAPE WAS / FORMATTED TO CONTAIN. /IF WE WANT A HANDLER FOR UNITS 2&3 TO RESIDE IN /FIELD 2 AT LOCATION 3000 AND READ/WRITE 256(10) WORDS /PER BLOCK, THE PARAMETERS WOULD BE: / DRIVE=20 / ORIGIN=3000 / AFIELD=2 / MFIELD=20 / WDSBLK=400 /THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE /CALLING SEQUENCE FOR OS/8 DEVICE HANDLERS. /THE CALLING SEQUENCE IS: / CDF CURRENT / CIF MFIELD /MFIELD=FIELD ASSEMBLED IN / JMS ENTRY /ENTRY=ORIGIN (EVEN NUMBERED DRIVE /AND ORIGIN+4 FOR ODD NUMBERED DRIVE. / ARG1 / ARG2 / ARG3 / ERROR RETURN / NORMAL RETURN /THE ARGUMENTS ARE: /ARG1: FUNCTION WORD BIT0: 0=READ, 1=WRITE / BITS 1-5: # BLOCKS IN OPERATION / BITS 6-8: FIELD OF BUFFER AREA / BIT 9: UNUSED / BIT 10: # OF WORDS/BLOCK. / 0= WDSBLK, 1=WDSBLK-1 / BIT 11: 1=START FORWARD, 0=REVERSE /ARG2: BUFFER ADDRESS FOR OPERATION /ARG3: STARTING BLOCK FOR OPERATION /ERRORS: THE HANDLER DETECTS TWO TYPES OF ERRORS: /A) FATAL ERRORS- PARITY ERROR, TIMING ERROR, / TOO GREAT A BLOCK NUMBER / FATAL ERRORS TAKE ERROR RETURN WITH THE / AC=4000. /B) NON-FATAL- SELECT ERROR. / IF NO PROPER UNIT IS SELECTED, THE ERROR / RETURN IS TAKEN WITH CLEAR AC. /FATAL ERRORS TRY THREE TIMES BEFORE TAKING ERROR RETURN. /THE NORMAL RETURN IS TAKEN AFTER ALL INDICATED /BLOCKS HAVE BEEN TRANSFERRED. THE AC IS CLEAR. /THE TD8E IOT'S ARE: SDSS=7001-DRIVE /SKIP ON SINGLE LINE FLAG SDST=7002-DRIVE /SKIP ON TIMING ERROR SDSQ=7003-DRIVE /SKIP ON QUAD LINE FLAG SDLC=7004-DRIVE /LOAD COMMAND REGISTER SDLD=7005-DRIVE /LOAD DATA REGISTER SDRC=7006-DRIVE /READ COMMAND REGISTER SDRD=7007-DRIVE /READ DATA REGISTER /THE IOT'S IN GENERAL ARE 677X,676X,675X,AND 674X. /THE OTHERS CONTROL UNITS 2-7. INITLN=7 /LENGTH OF TDINIT INCLUDING BLOCK 0 IMAGE (IN BLOCKS) CTRLO=20 INCHAR=21 TEMPA=22 ST, CLA /IN CASE CHAINED TO JMP I (CREATE /CREATE BLOCK 0 -IN HOUSE ONLY - STARTUP,JMS I (DTA0 /TD8E S.R. IS IN 200 NOW 603 /READ 3 BLOCKS INTO 1000-2377 1000 24 /GET REST OF INIT JMP FERR /REALLY BAD! TAD (SKP CLA DCA ST /ALLOWS HIM TO RESTART AT 200 RE, JMS MSG VNO JMS I (CHKCOR /USE ROM OR 12K SYSTEM JMS MSG INIT JMS I (MOVSYS JMS MSG SWTCH JMS TTY /PAUSE TAD INCHAR TAD (-32 SNA CLA JMP I (ZERO /HE TYPED ^Z CPY, JMS MSG COPY TAD (160 DCA B1 TAD (160 DCA B2 RD, JMS I (DTA0 3612 0 B1, 0 JMS I (ER1 JMS I (DTA1 7612 0 B2, 0 JMS I (ER1 TAD B1 TAD (36 DCA B1 TAD B1 DCA B2 TAD B1 /COPY OVER ABOVE 2700 TAD (-2600 /*** SPA CLA JMP RD /KEEP GOING JMS I (DTA0 /COPY DIRECTORY 1412 0 2 JMS I (ER1 JMS I (DTA1 5412 0 2 JMS I (ER1 RESTRT, JMS MSG DISMNT /SETUP TAPES FOR INIT JMS TTY JMP I (BOOT TTY, 0 JMS MSG STRIKE KCC KSF JMP .-1 KRB AND (177 DCA INCHAR JMP I TTY MSG, 0 /MESSAGE TYPER DCA CTRLO JMS I (CRLF TAD I MSG DCA TEMPA ISZ MSG WTMSG, TAD I TEMPA CLL RTR;RTR;RTR JMS PNCH TAD I TEMPA JMS PNCH ISZ TEMPA JMP WTMSG PNCH, 0 AND (77 SNA /IGNORE NULL. _ MEANS CR/LF JMP I PNCH /? MEANS TERMINATE TAD (-37 /IS IT _? SNA JMS I (CRLF /YES TAD (-40 /MAYBE ? SNA JMP I MSG TAD (40 SPA TAD (100 TAD (237 JMS I (TTYOUT JMP I PNCH FERR, HLT CLA JMP STARTUP PAGE / THIS HANDLER USES DECTAPE BLOCKS NOT OS/8 BLOCKS ! *ORIGIN DTA0, 0 /ENTRY POINT FROM UNIT 0 CLA CLL /0 TO LINK JMP DTA1X C1000, 1000 BLOCK, DTA1, 0 /UNIT 2 ENTRY CLA CLL CML /1 TO LINK TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /LINK TO UNIT POSITION RDF TAD C6203 /GET DATA FIELD AND SETUP RETURN DCA LEAVE TAD I DTA0 /GET FUNCTION WORD SDLD /PUT FUNCTION INTO DATA REGISTER CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER /BLOCK INTO LINK SZL CLA /KNOCK ONE OFF WDSBLK? IAC /YES TAD MWORDS DCA WCOUNT /STORE MASTER WORD COUNT ISZ DTA0 /TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /TO BLOCK NUMBER TAD I DTA0 DCA BLOCK ISZ DTA0 /POINT TO ERROR EXIT CIF CDF MFIELD /TO ROUTINES DATA FIELD SDRD /GET FUNCTION INTO AC CLL RAL AND CM200 /GET # PAGES TO XFER DCA PGCT SDRD C374, AND C70 /GET FIELD FOR XFER TAD C6203 /FORM CDF N DCA XFIELD /IF=0 AND DF=N AT XFER. CLA CLL CMA RTL DCA TRYCNT /3 ERROR TRIES TAD UNIT /TEST FOR SELECT ERROR SDLC SDRC AND C100 SZA CLA JMP FATAL-1 SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. DCA I CXFUN TAD WCOUNT DCA I CXWCT SDRD /GET MOTION BIT TO LINK CLL RAR JMP GO /AND START THE MOTION. RWCOM, SDST /ANY CHECKSUM ERRORS? SZA CLA /OR CHECKSUM ERRORS? JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS /SET AT RWCOM. GETCHK SETS IT. TAD PGCT /NO ERROR..FINISHED XFER? TAD CM200 SNA JMP EXIT /ALL DONE. GET OUT DCA PGCT /NEW PAGE COUNT ISZ BLOCK /NEXT BLOCK TO XFER TAD WCOUNT /FORM NEXT BUFFER ADDRESS CIA TAD BUFF DCA BUFF CLL CML /FORCES MOTION FORWARD GO, CLA CML RTR /LINK BECOMES MOTION BIT TAD C1000 TAD UNIT /PUT IN 'GO' AND UNIT # SDLC /LOOK FOR BLOCK NO. JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK JMS I CRDQUD CM200, 7600 /COULD HAVE SAVED A LOC. HERE SRCH, SDSS JMP .-1 /WAIT FOR SINGLE LINE FLAG SDRC CLL RTL /DIRECTION TO LINK. INFO BITS /ARE SHIFTED. AND C374 /ISOLATE MARK TRACK BITS TAD M110 /IS IT END ZONE? SNA /THE LINK STAYS SAME THRU THIS JMP ENDZ TAD M20 /CHECK FOR BLOCK MARK SZA CLA JMP SRCH SDRD /GET THE BLOCK NUMBER SZL /IF WE ARE IN REVERSE, LOOK FOR 3 /BLOCKS BEFORE TARGET BLOCK. THIS /ALLOWS TURNAROUND AND UP TO SPEED. TAD C3 /REVERSE CMA TAD BLOCK CMA /IS IT RIGHT BLOCK? SNA JMP FOUND /YES..HOORAY! M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? /ABOVE SNA IS SUPERFLUOUS. JMP SRCH /YES ENDZ, SDRC /WE ARE IN THE END ZONE CLL RTL /DIRECTION TO LINK CLA /ARE WE IN REVERSE? JMP GO /YES..TURN US AROUND /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR TRY3, CLA ISZ TRYCNT JMP GO /TRY 3 TIMES JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN EXIT, ISZ DTA0 CLL CML /AC=0 ON NORMAL RETURN FATAL, TAD UNIT SDLC /STOP THE UNIT CLA CML RAR LEAVE, HLT JMP I DTA0 C6203, 6203 CRDQUD, RDQUAD WCOUNT, 0 BUFF, 0 MWORDS, -WDSBLK UNIT, 0 CXFUN, XFUNCT M20, -20 PGCT, 0 CXWCT, XWCT C100, 100 TRYCNT, -3 *ORIGIN+170 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? JMP GO /WRONG..TURN AROUND TAD UNIT /PUT UNIT INTO LINK CLL RAL /AC IS NOW 0 C70, 70 /********DON'T MOVE THIS!!!!****** C3, 3 TAD BUFF /GET BUFFER ADDRESS XFIELD, HLT /INTO NEXT PAGE *ORIGIN+200 CIF MFIELD DCA XBUFF /SAVE ADDRESS RAR /NOW GET UNIT # DCA XUNIT SDRC SDLC REVGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD SDRC AND K77 TAD CM32 /IS IT REVERSE GUARD? SZA CLA JMP REVGRD /NO.KEEP LOOKING TAD XWCT DCA WORDS /WORD COUNTER TAD XFUNCT /GET FUNCTION READ OR WRITE K7700, SMA CLA JMP READ /NEG. IS WRITE WRITE, SDRC AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS SZA CLA JMP I CFATAL /FATAL ERROR. LINK MUST BE ON JMS RDQUAD /NO ONE EVER USES THIS WORD! C7600, 7600 TAD C1400 TAD XUNIT /INITIATE WRITE MODE SDLC CLA CMA JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM CLA CMA DCA CHKSUM WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! JMS WRQUAD ISZ XBUFF /BUMP CORE POINTER K77, 77 /ABOVE MAY SKIP ISZ WORDS /DONE THIS BLOCK? JMP WRLP /NOT YET..LOOP A WHILE TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? CLL RTR /IF NO, WRITE A 0 WORD SZL CLA JMS WRQUAD /WRITE A WORD OF 0 JMS GETCHK /DO THE CHECK SUM JMS WRQUAD /WRITE FORWARD CHECKSUM JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN JMP I CRWCOM READ, JMS RDQUAD JMS RDQUAD JMS RDQUAD /SKIP CONTROL WORDS AND K77 TAD K7700 /TACK 7700 ONTO CHECKSUM. DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY RDLP, JMS RDQUAD JMS EQUFUN /COMPUT CHECKSUM AS WE GO DCA I XBUFF /IT GETS CONDENSED LATER ISZ XBUFF C300, 300 /PROTECTION ISZ WORDS /DONE THIS OP? JMP RDLP /NO SUCH LUCK TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND CLL RTR /CHECKSUM THE LAST TAPE WORD SNL CLA JMP RDLP2 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK JMS EQUFUN /CHECKSUM IT RDLP2, JMS RDQUAD /READ CHECKSUM AND K7700 JMS EQUFUN JMS GETCHK /GET SIX BIT CHECKSUM JMP I CRWCOM WRQUAD, 0 /WRITE OUT A 12 BIT WORD JMS EQUFUN /ADD THIS TO CHECKSUM SDSQ /SKIP ON QUADLINE FLAG JMP .-1 SDLD /LOAD DATA ONTO BUS CLA /SDLD DOESN'T CLEAR AC JMP I WRQUAD RDQUAD, 0 /READ A 12 BIT WORD SDSQ JMP .-1 SDRD /READ DATA JMP I RDQUAD XUNIT, EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE CIA /IS ASSOCIATIVE, WE CAN DO IT 12 CLL RAL /BITS AT A TIME AND CONDENSE LATER. TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EQUFUN GETCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CHKSUM CMA CLL RTL RTL RTL JMS EQUFUN CLA CLL CML /FORCES LINK ON AT RWCOM TAD CHKSUM AND K7700 JMP I GETCHK CFATAL, FATAL CRWCOM, RWCOM XFUNCT, 0 CM32, -32 C1400, 1400 CHKSUM, 0 WORDS, 0 XBUFF, 0 XWCT, 0 EQUTMP, 0 TBL, CPY ZER LVAL PAGE CREATE, JMS I (MSG WRITOUT JMS I (TTY JMS I (DTA1 4202 7400 0 JMS ER1 JMS I (MSG OK HLT JMP I (7605 ROMSW=17 /THIS ROUTINE COPIES THE SYSTEM ONTO UNIT 1. /IT COPIES FROM A SYSTEM HEAD FILE ON TAPE ON UNIT 0. /UNIT 0 MUST BE THE OS/8 BINARIES TAPE /1ST FILE: TDINIT.PA /2ND FILE: TDROM.SY /3RD FILE: TD12K.SY MOVSYS, 0 JMS I (TTY TAD ROMSW /GET ADDRESS OF START OF SYSTEM HEAD SNA CLA TAD (62^2 /12 K TAD (7+INITLN^2 /ROM DCA HEAD JMS I (DTA0 /READ PAGE 0 212 0 HEAD, HLT JMS ER1 CDF 10 TAD I (200 CDF 0 TAD (-4207 /CHECK FOR GOOD SYSTEM HEAD SZA CLA JMP WRGSYS JMS I (DTA1 4212 0 0 JMS ER1 STL CLA RTL /2 TAD HEAD DCA KBM JMS I (DTA0 0012 /READ 40 SYSTEM BLOCKS 7-26 (PAGES 16-55) 0 KBM, HLT JMS ER1 JMS I (DTA1 4012 0 7^2 /WRITE KBM ETC JMS ER1 TAD HEAD TAD (43^2 DCA CD JMS I (DTA0 3613 /READ 51-67 (PAGES 122-157) 0 CD, HLT JMS ER1 JMS I (DTA1 7613 0 43+6^2 JMS ER1 JMP I MOVSYS WRGSYS, JMS I (MSG WRONG JMS I (TTY JMP I (CPY ER1, 0 CLA JMS I (MSG IOERR JMS I (TTY TAD I (INCHAR TAD (-101 SNA CLA /A? JMP I (RE /YES, ABORT TAD ER1 TAD (-5 DCA ER1 /BACK UP, POINT TO CALL JMP I ER1 /RETRY CRLF, 0 TAD (215 JMS TTYOUT TAD (212 JMS TTYOUT JMP I CRLF TTYOUT, 0 DCA TM JMS I (TSTKBD TAD CTRLO SZA CLA JMP I TTYOUT TAD TM TLS TSF JMP .-1 CLA JMP I TTYOUT TM, 0 PAGE CHKCOR, 0 /DETERMINE CONFIGURATION CDF 70 /CHECK FOR ROM TAD I (7503 TAD (-SDSS SZA CLA JMP TRY12K CDF 0 JMS I (MSG ROM8K CLA IAC ENTR12, DCA ROMSW /SET INDICATOR CDF 0 JMP I CHKCOR TRY12K, CDF 20 TAD ENTR12 DCA I (7600 TAD I (7600 CIA TAD ENTR12 CDF 0 SNA CLA JMP OK12 JMS I (MSG HRDWR /NO HARDWARE AROUND! HLT JMP .-1 OK12, JMS I (MSG TD8E12 JMP ENTR12 IN, 0 ZERO, JMS I (MSG SPECIAL JMS I (TTY TAD INCHAR TAD (-62 DCA IN TAD IN SPA CIA CLL RAR /ALLOW ONLY -1, 0, 1 SZA CLA JMP ZERO+1 TAD IN TAD (TBL+1 DCA IN TAD I IN DCA IN JMP I IN /JUMP TO APPROPRIATE ROUTINE ZER, JMS I (MSG ZERY JMS I (DTA1 4202 MTDIR 2 JMS I (ER1 JMP I (RESTRT LVAL, JMS I (MSG PRES JMP I (RESTRT MTDIR, -1 70 /SYSTEM TAPE 0 0 -1 /1 EMPTY FILE 0 6437+70 /-LENGTH OF DECTAPE BOOT, TAD ROMSW SNA CLA JMP TDBOOT JMS I (DTA0 /ROM BOOT 202 7400 0 /READ IN BLOCK 0 JMS I (ER1 TAD (CDF 10 JMS MOVE 7400 JMP I (7605 TDBOOT, JMS I (DTA0 202 7400 0 JMS I (ER1 JMS I (DTA0 202 7000 66^2 JMS I (ER1 TAD (CDF 10 JMS MOVE 7000 TAD (CDF 20 JMS MOVE 7200 JMP I (7605 XRIN=11 XROUT=12 MOVE, 0 DCA MOVCDF STA TAD I MOVE DCA XRIN TAD (-200 /MOVE 200 WORDS TO LOCATION 7600 DCA MVCNT ISZ MOVE TAD (7577 DCA XROUT MOVLUP, TAD I XRIN MOVCDF, HLT DCA I XROUT CDF 0 ISZ MVCNT JMP MOVLUP JMP I MOVE MVCNT, -200 PAGE VNO, TEXT /TD8E INITIALIZER PROGRAM VERSION 7A ?/ INIT, TEXT /MOUNT A CERTIFIED DECTAPE ON UNIT 1 WRITE-ENABLED_/ TEXT /ALWAYS KEEP ORIGINAL SYSTEM DECTAPES WRITE-LOCKED?/ STRIKE, TEXT /STRIKE A CHARACTER TO CONTINUE?/ DISMNT, TEXT /REMOVE AND SAVE TAPE ON UNIT 0_/ TEXT /TAKE NEW TAPE (ON UNIT 1) WHICH WAS JUST CREATED_/ TEXT /AND PLACE IT ON UNIT 0_/ TEXT \IT IS YOUR NEW OS/8 SYSTEM TAPE?\ SWTCH, TEXT /DISMOUNT SYSTEM TAPE #2 FROM UNIT 0 AND SAVE IT_/ TEXT /MOUNT ORIGINAL SYSTEM TAPE #1 ON UNIT 0_/ TEXT /PREPARE TO COPY FILES OVER?/ OK, TEXT /OK?/ WRITOUT,TEXT /READY TO CREATE BLOCK 0 OF UNIT 1?/ COPY, TEXT /COPYING FILES FROM UNIT 0 TO UNIT 1?/ ZERY, TEXT /ZEROING DIRECTORY ON TAPE UNIT 1?/ PRES, TEXT /DIRECTORY ON UNIT 1 PRESERVED?/ WRONG, TEXT /NOT ORIGINAL OS8 SYSTEM TAPE #2_/ TEXT /MOUNT CORRECT TAPE ON UNIT 0?/ ROM8K, TEXT /8K ROM SYSTEM?/ TD8E12, TEXT /12K SYSTEM?/ HRDWR, TEXT /NEED ROM OR 12K?/ IOERR, TEXT /FATAL IO ERR_/ TEXT /TYPE A TO ABORT AND START OVER AGAIN_/ TEXT \TYPE ANY OTHER CHARACTER TO RETRY THIS I/O OPERATION?\ SPECIAL,TEXT /TYPE 1 TO COPY FILES FROM UNIT 0 TO UNIT 1_/ TEXT /TYPE 2 TO ZERO THE DIRECTORY OF UNIT 1_/ TEXT /TYPE 3 TO LEAVE THE DIRECTORY OF UNIT 1 ALONE?/ TSTKBD, 0 KSF JMP I TSTKBD KRS AND (177 TAD (-3 SNA JMP I (RE /^C TAD (3-17 SZA CLA JMP NO CLA IAC DCA CTRLO NO, KCC JMP I TSTKBD PAGE /TD8E SYSTEM INITIALIZER /THIS CODE IS PLACED ON THE BINARY TAPE /IN RECORD 0. WHEN THE 7470 OR STANDARD TD8E BOOTSTRAP /IS EXECUTED, THIS PROGRAM READS THE REST OF THE INIT /SYSTEM FROM THE FIRST FILE ON THE TAPE, AND /STARTR EXECUTION OF IT. A SHORT PROGRAM IS HERE /INCLUDED TO WRITE RECORD 0 ON THE TAPE. THE START ADDRESS /OF THAT CODE IS 200. SDSS=6771 SDST=6772 SDSQ=6773 SDLC=6774 SDLD=6775 SDRC=6776 SDRD=6777 *7420 NOPUNCH *7400 ENPUNCH TAD K177 /INIT FOR TAPE READ DCA 10 NUBLK, TAD KM200 /SET BLOCK WORD COUNT DCA WCNT NOT, JMS GET /GET BLOCK # FORWARD -26 SDRD /THE RIGHT ONE? AND KK77 TAD BLOCKK SZA CLA JMP NOT /I GUESS NOT JMS GET /RIGHT. NOW GET REV. GUARD -32 JMS RQD JMS RQD JMS RQD LP, JMS RQD DCA I 10 /READ THE INIT PROGRAM ISZ WCNT JMP LP ISZ BCNT /DONE ALL BLOCKS? JMP CONT SDLC JMP I .+1 STARTUP CONT, CLA CMA /SET FOR NEXT BLOCK TAD BLOCKK DCA BLOCKK JMP NUBLK RQD, 0 SDSQ JMP .-1 SDRD JMP I RQD GET, 0 /PICK UP A SPECIFIED TAPE FRAME TAD I GET /HOLDS 6 BIT MARK TRACK I.D. DCA RQD GTIT, SDSS JMP .-1 SDRC /FLAG IS UP. READ MARK TRACK AND KK77 TAD RQD /A MATCH? SZA CLA JMP GTIT ISZ GET JMP I GET KK77, 77 KM200, -200 BLOCKK, -21 /SKIP CORE CONTROL BLOCK AND PAGE 0 WCNT, -200 K177, 177 BCNT, -3 *200 $ |
Added src/os8/uni/CUSPS/TECO.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 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<SPACE> 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<HPY> 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 <TAB> 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/uni/HANDLERS/ASR33.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | /3 TTY HANDLER FOR BUILD / / / / / / / / / /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. / / / / / / / / / / *0 -1 DEVICE AS33;DEVICE TTY;0;1;ZBLOCK 2 TTYVERSION="A&77 /V3 FIXES: /1. NOW RECOGNIZES PARITY ^Z ON OUTPUT /2. NOW RECOGNIZES ^Z ON OUTPUT EVEN IF NOT / FOLLOWED BY 0'S /3. VERSION # IS NOW 1. *200 /TELETYPE HANDLER - NOT VERY INTELLEGENT. /ONLY RECOGNIZES ^Z AND ^C ON INPUT /AND ^C AND ^O ON OUTPUT /OH WELL, WHAT CAN YOU EXPECT IN ONE PAGE. / THE LOGIC IS VERY SIMILIAR TO THE PTR AND PTP HANDLERS. TTY360, 360 /MUST BE FIRST LOC ON PAGE! TTY, TTYVERSION TT7600, 7600 RDF TAD TTYCIF DCA TTYXIT /SAVE RETURN FIELD TAD I TTY AND TT70 TAD TTCDF DCA TTYCDF /DATA FIELD OF BUFFER CLA CLL CML RAR TAD I TTY AND TT3700 CMA DCA TTYWC ISZ TTY TAD I TTY DCA TTYCA /SAVE BUFFER ADDRESS ISZ TTY ISZ TTY JMP TTKLG TTYLP, SNL CLA JMP TTYGLP /ZER LINK MEANS READ JMS TTYTST /TEST FOR ^C TAD TTYM14 /-203-14=-217 =-"^O" SNA CLA JMP TTYCTO TAD I TTYCA /CHARACTER 1 IS LOW ORDER 8 BITS OF WORD 1 JMS TTYPCH DCA TTYGCH ISZ TTYCA TT7400, 7400 TAD I TTYCA /CHARACTER 2 IS LOW ORDER 8 BITS OF WORD 2 JMS TTYPCH CLL RTR RTR TAD TTYGCH CLL RTR RTR /CHARACTER 3 IS HIGH ORDER 4 BITS OF WORDS 1 AND 2 JMS TTYPCH /WILL SET LINK ON! TTLOOP, ISZ TTYCA /AC HAPPENS TO BE ZERO HERE TT70, 70 TTKLG, ISZ TTYWC JMP TTYLP TTYRTN, TAD TTYCDF CLL CIA SNL CLA ISZ TTY /SKIP PAST ERROR RETURN TTYXIT, HLT /RESTORE CALLING FIELDS RAL JMP I TTY TTYPCH, 0 /MUST SET LINK ON! DCA TTYTST TAD TTYTST TAD TTYM32 /ONLY CARE IF LOW ORDER 7 BITS ARE -32 AND TTY177 /SO ONLY LOOK AT THESE BITS SNA CLA JMP TTYRTN /WAS A ^Z TAD TTYTST /GET BACK ALL 12 BITS JMS TTPRNT AND TT7400 /BUT RETURN ONLY LEFT THIRD STL /**** CRUD JMP I TTYPCH TTY212, 212 IFNZRO .-TTY360-100 <ER3700,QQQQ> TTYCA, 0 TTYWC, 0 TTYTST, 0 TTYCDF, 0 TAD TTY200 KRS /TEST FOR ^C WITH FLAG UP TAD TTM203 SNA KSF JMP I TTYTST TTYCIF, CDF CIF 0 JMP I TT7600 TTPRNT, 0 TLS TSF JMP .-1 JMP I TTPRNT TTCDF, CDF 0 /FOLLOWING CODE READS TTY AND PACKS IN BUFFER. TTYGLP, JMS TTYGCH DCA I TTYCA TTYM32, JMS TTYGCH DCA TTYPCH JMS TTYGCH RTL RTL DCA TTYGCH TAD TTYGCH AND TT7400 TAD I TTYCA TT3700, DCA I TTYCA TAD TTYGCH TTY200, AND TTY360 CLL RTL RTL /CLEARS LINK TAD TTYPCH ISZ TTYCA DCA I TTYCA JMP TTLOOP IFNZRO .-TTY360-146 <TTYERR,QQQQQ> TTYGCH, 0 /MUST BE AT REL LOC 146 TAD TTYCDF TT7700, SMA CLA JMP I TTYGCH ISZ TTYTST JMP TTYKSF TAD TTY212 JMP TTECHO TTYKSF, KSF JMP .-1 JMS TTYTST TAD TTM27 SNA /IS IT A ^Z? DCA TTYCDF /YES - SET END-OF-FILE FLAG TAD TTY14 DCA TTYTST /TTYTST=-1 IF CARRIAGE RETURN KRB TTECHO, JMS TTPRNT /ECHO THE INPUT CHARACTER JMP I TTYGCH TTM203, -203 TTM27, -27 TTYM14, -14 TTY177, 177 IFNZRO .-TTY360-175 <NICE,QQ> TTYCTO, 6032 /SHOULD BE AT REL LOC 175 FOR PATCHERS JMP TTYRTN TTY14, 14 $ |
Added src/os8/uni/HANDLERS/BAT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | /1 BATCH INPUT STREAM HANDLER / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / *0 -1 /NUMBER OF DEVICES DEVICE BAT /DEVICE TYPE NAME DEVICE BAT /DEVICE NAME 2220 /READ ONLY, CODE=22 0 /ONE PAGE ZBLOCK 2 BATIN= 5400 BATVERSION="B&77 *200 BAT, BATVERSION CLA /PROTECTION RDF /GET USER'S FIELD TAD BATCDF /MAKE CDF CIF DCA BATXIT /SAVE FOR EXIT TAD BATISZ /RESET SUCCESS ISZ DCA BATXIT-1 TAD I BAT AND BA7700 CIA DCA BATWC /SAVE WORD COUNT (DIVIDED BY 2) TAD I BAT AND BA0070 TAD BATCDF /CREATE CDF TO BUFFER FIELD TAD (-2 DCA BATBUF BATISZ, ISZ BAT TAD I BAT DCA BATCA /GET ADDRESS OF BUFFER ISZ BAT ISZ BAT /IGNORE BLOCK NUMBER TAD BATWC /WAS COMMAND WRITE OR BUFFER LENGTH ZERO? BA7700, SMA CLA JMP BATER1 /YES - ERROR BATCDF, CDF CIF 0 TAD I BA7777 /IS BATCH RUNNING? RAL SMA CLA JMP BATER2 /NO - ERROR TAD I BA7777 AND BA0070 TAD BATCDF /CREATE CDF TO BATCH FIELD DCA BATCAL /CREATE CDF CIF TO BATCH FIELD BATLP, JMS BATGET /GET CHAR DCA I BATCA /SAVE IN BUFFER JMS BATGET /GET NEXT CHAR DCA BATTMP /SAVE IT FOR PACKING JMS BATGET /GET NEXT CHAR RTL RTL DCA BATTM2 /SAVE IT TAD BATTM2 AND BA7400 /ADD FIRST HALF TAD I BATCA /TO FIRST CHAR DCA I BATCA /SAVE THEM IN BUFFER ISZ BATCA /UPDATE POINTER BA7400, 7400 /PROTECT THE ISZ TAD BATTM2 /GET SECOND HALF OF CHAR RTL RTL AND BA7400 TAD BATTMP /ADD TO SECOND CHAR DCA I BATCA /SAVE IN BUFFER ISZ BATCA /UPDATE POINTER BA0070, 0070 /PROTECT THE ISZ ISZ BATWC /DONE? JMP BATLP /NO - LOOP ISZ BAT /SUCCESS RETURN (ON EOF THIS BECOMES CLA IAC) BATXIT, HLT /CDF CIF TO USER FIELD JMP I BAT /RETURN BATWC, 0 /WORD COUNT (DIVIDED BY 2) BATCA, 0 /POINTER INTO BUFFER BATTM2, BATCHR, 0 /CHAR RETURNED BY BATGET BATTMP, 0 BA7777, 7777 BATER1, BATER2, CLA STL RAR JMP BATXIT /THIS ROUTINE GETS THE NEXT CHARACTER TO BE PUT INTO THE BUFFER BATGET, 0 0 /IF LAST CHAR WAS <CR> THIS IS "JMP BATLF" BATCAL, HLT /CIF CDF BATCH FIELD (ON EOF THIS IS "JMP BATBUF") TAD I BATVFY TAD (-2214 /VERIFY MAGIC LOCATION IN BATCH SZA /AGAINST EQUALLY MAGIC CONTENTS CDF CIF 0 SZA CLA JMP BATER2 /BATCH IS DESTROYED! CDF /WE ARE IN FIELD ZERO JMS I BATINN /CALL THE BATCH INPUT ROUTINE JMP BATEOF /NO SKIP = END OF FILE DCA BATCHR /SAVE CHARACTER RETURNED TAD BATCHR TAD BMCR /CARRIAGE RETURN? SNA JMP BATCR /YES TAD BCRMLF /LINE FEED? SNA JMP BATCAL /YES - IGNORE IT TAD BLFMDO /DOLLAR SIGN? SNA CLA JMP BATDO /YES BATGEX, DCA BCRFLG /NO SPECIAL CHAR TAD BATCHR /RETURN WITH CHAR IN AC BATBUF, HLT /CDF USER BUFFER JMP I BATGET /RETURN BLFJMP, JMP BATLF BATCR, TAD BLFJMP /SET NEXT CALL TO RETURN <LF> DCA BATGET+1 CLA CMA /SET TO INDICATE <CR> JMP BATGEX BATLF, DCA BATGET+1 /ZAP THE JMP TO HERE TAD BLF /RETURN <LF> BATGEJ, JMP BATBUF BATDO, TAD BCRFLG /IS THE "$" FIRST ON THIS LINE? SNA CLA JMP BATGEX /NO - NOTHING SPECIAL TAD I BA7777 /YES - SET FLAG SO THAT RTR /THE BATCH INPUT ROUTINE STL RTL /WILL PUT THE DOLLAR-SIGN BACK DCA I BA7777 /RETURN CURRENT CHARACTER AGAIN BATEOF, TAD BATCTZ /RETURN CTRL-Z THIS TIME DCA BATCHR DCA BATXIT-1 /SET HANDLER TO RETURN TO ERROR RETURN TAD BATGEJ /SET BATGET TO RETURN ZEROES DCA BATCAL JMP BATCR+2 /AND FLAG NEW LINE FOR NEXT CALL BATINN, BATIN /ENTRY ADDRESS OF BATCH INPUT ROUTINE BATVFY, BATIN+200 BLF, 212 BMCR, -215 BCRMLF, 215-212 BLFMDO, 212-"$ BCRFLG, -1 BATCTZ, 32 /CTRL-Z $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ |
Added src/os8/uni/HANDLERS/CR8E.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 | /3 CARD READER FOR BUILD / / / / / / / / / /COPYRIGHT (C) 1974 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. / / / / / / / / / / *0 -1 DEVICE CR8E;DEVICE CDR;2030;4000;ZBLOCK 2 CDRVERSION="C&77 /V3 CHANGES: /1. VERSION # IS NOW 1 /2. FIXED BUG FOR CARDS WITH ODD NUMBER OF COLUMNS /3. CARD DONE FLAG IS CLEARED AT END *200 RCSF=6631 RCRA=6632 RCSP=6671 RCSE=6672 RCRD=6674 CDR, CDRVERSION /ENTRY POINT RELATIVE ZERO CDR770, 7700 /"SMA CLA" CLEARS THE AC CDRTMP, 0 /LESS THAN 400 - PROTECTS THE "SMA CLA" JMP CDRSET /INITIALIZATION - BECOMES "RDF" TAD CDRCIF /FORM "CIF CDF N" TO CALLING FIELDS DCA CDRXIT /SAVE CALLING FIELDS TAD CDRCCF-1 DCA CDRXIT-1 /RESTORE THE "ISZ CDR" TAD I CDR /GET FUNCTION WORD AND CDR070 /GET BUFFER FIELD BITS TAD CDRCCF /MAKE A "CDF N" DCA CDBCDF /SAVE IT IN THE GET CHAR LOOP TAD I CDR /GET FUNCTION WORD AGAIN ISZ CDR SPA /IS IT A WRITE FUNCTION? JMP CDRERR /YES - HARD ERROR AND CDR770 /GET COUNT BITS CIA DCA CDRWC /SAVE WORD COUNT (DIVIDED BY 2) TAD I CDR /GET BUFFER ADDRESS DCA CDRCA /AND SAVE IT ISZ CDR /THE BLOCK NUMBER IS IGNORED CDRCCF, CDF /WE ARE IN FIELD 0 DCA I CDRIN2 /RESET ^Z FLAG TO ZERO CDRLP, JMS I CDRIN4 /GET A CHARACTER DCA CDRTM1 /DATA FIELD STILL ZERO ON RETURN! JMS I CDRIN4 /GET NEXT CHARACTER DCA CDRTMP /AND SAVE IT JMS I CDRIN4 /GET NEXT CHARACTER RTL RTL /GET THE FIRST FOUR BITS OF IT DCA CDRTM2 /SAVE THE REST FOR LATER TAD CDRTM2 AND CDR740 /ONLY 4 BITS TAD CDRTM1 /ADD THOSE BITS TO THE 1ST CHAR CDBCDF, HLT /CDF TO BUFFER FIELD DCA I CDRCA /STORE 1ST CHARACTER ISZ CDRCA /BUMP POINTER TO BUFFER CDR740, 7400 /PROTECT THE ISZ AGAINST SKIPS TAD CDRTM2 RTL RTL /NOW GET LOW ORDER 4 BITS AND CDR7400 /AND ONLY 4 BITS TAD CDRTMP /ADD IN THE 2ND CHARACTER DCA I CDRCA /AND STORE THE WORD ISZ CDRCA /BUMP POINTER AGAIN CDR070, 70 /PROTECT THE ISZ CDF 0 /CDRGCH NEEDS 0 DF ON ENTRY! ISZ CDRWC /DONE? JMP CDRLP /NO - LOOP CDRERR, ISZ CDR /HERE WITH NEGATIVE AC ON WRITE - FATAL ERROR ISZ CDR /IF ^Z THIS IS ZEROED CDRXIT, HLT /RESTORE CALLING FIELDS JMP I CDR /EXIT CDRCA, 0 /BUFFER POINTER CDRWC, 0 /WORD COUNT DIVIDED BY 2 CDRTM1, 0 CDRTM2, 0 /SPLIT WORD TEMPORARY CDRCIF, CIF CDF 0 /TO FORM EXIT WORD CDRIN2, CDRJMP-CDRLOC /CORRECTED AT INITIALIZATION TIME CDRIN4, CDRGCH-CDRLOC 0 /** FREE LOCATIONS - COME AND GET 'EM ! 0 IFNZRO .-277 <RESORC,_ERROR_> /BUT THERE'S A CATCH CDRTBL, 0021;2223;2425;2627;3031;3203;4007;3502 2017;6364;6566;6770;7172;7514;0577;3637 1552;5354;5556;5760;6162;0104;1211;3374 0641;4243;4445;4647;5051;7316;3410;1376 /DO NOT INSERT ANYTHING BETWEEN "CDRTBL" AND "CDRBUF"!! CDRBUF=. /CARD BUFFER CDRSET, RDF /INITIALIZATION CODE TAD CDRCCF DCA CDRSE1 /SAVE CALLING FIELDS CDF /WE ARE IN FIELD 0 JMS . /FIND OUT OUR LOCATION CDRLOC, TAD CDRSE2 /ADDRESS TO MODIFY TAD CDRLOC-1 /CORRECT IT DCA CDRSE3 /SAVE IT TAD I CDRSE3 /GET DATA TO MODIFY TAD CDRLOC-1 /CORRECT IT DCA I CDRSE3 /AND RESTORE IT ISZ CDRLOC /NEXT ADDRESS ISZ CDRSE4 /MORE? JMP CDRLOC /YES - LOOP TAD CDRSET DCA CDR+3 /SET THE "RDF" CDRSE1, HLT /RESTORE CALLING FIELDS JMP CDR+3 /AND BACK TO NORMAL CDRSE3, 0 /MODIFY POINTER CDRSE4, -5 /FIVE LOCATIONS TO MODIFY CDRSE2, CDRIN2-CDRLOC /LOCATIONS TO MODIFY CDRIN4-CDRLOC CDRIN5-CDRLOC CDRABF-CDRLOC CDRTAD-CDRLOC *CDRBUF+50 /END OF THE BUFFER CDRGCH, 0 /GET A CHARACTER ROUTINE - ENTER WITH DF=0 CDRJMP, 0 /THIS IS "JMP I CDRGCH" AFTER A ^Z ISZ CDRCNT /MORE CHARACTERS IN THE INTERNAL BUFFER? JMP CDRGET /YES - GET ONE CDRGE4, ISZ CDRCT2 /GIVE A 215, 212 FOR EVERY CARD JMP CDRCLF /215, 212 ROUTINE CLL CLA CMA RTL DCA CDRCT2 /RESET COUNT TO -3 CDRGNC, TAD CDRABF DCA CDRPT /SET POINTER TO INTERNAL BUFFER CDRGE0, KSF /KEYBORAD FLAG UP? JMP CDRGE7 /NO - TRY TO READ A CARD TAD CDR760 /FORCE THE PARITY BIT ON KRS /READ STATIC FROM KEYBOARD TAD CDR175 /IS IT ^C? SNA JMP I CDR760 /YES - TO MONITOR VIA 07600 TAD CDRM27 /IS IT ^Z? SZA CLA JMP CDRGE7 /NO - GET A CARD KCC /KILL FLAG CDRGEZ, CLA CMA DCA CDRCNT /RESET COUNTS TO SKIP CLA CMA DCA CDRCT2 TAD CDRMOD DCA CDRJMP /SET TO GIVE 0'S DCA I CDRIN5 /AND A SOFT ERROR TAD CDR232 /^Z JMP I CDRGCH /EXIT CDRGE7, RCSE /SELECT A CARD JMP CDRGE0 /NO GO - TRY AGAIN DCA CDRSW /SET PACKING SWITCH CDRGCL, DCA CDRTIM /INITIALIZE TIMEOUT COUNTER CDRGE1, RCSP /CARD DONE? JMP CDRGE2 /NO - TRY FOR DATA READY RCRD /CLEAR CARD DONE FLAG CDRGE3, TAD I CDRPT /GET LAST TWO CHARACTERS SZA /BOTH SPACES? JMP CDRGE5 /NO CLA CMA TAD CDRPT DCA CDRPT /BACK UP POINTER ONE ISZ CDRCNT ISZ CDRCNT /AND TAKE COUNT DOWN BY 2 JMP CDRGE3 /TEST AGAIN OR... JMP CDRGE4 /IF COUNT IS ZERO THE A BLANK CARD CDRGE5, AND CDR077 /IS RIGHT HAND CHARACTER A SPACE? SNA CLA ISZ CDRCNT /YES A SPACE - REDUCE COUNT TAD I CDRPT /GET LAST NON-SPACE TAD CDR077 /THIS FORMS 7777 IFF WORD CONTAINS "_" AND CDRCNT /THIS MAINTAINS 7777 IFF CDRCNT IS -1 CMA SNA CLA /ARE BOTH CONDITIONS TRUE? JMP CDRGEZ /YES - MUST BE END OF FILE CDRGE6, TAD CDR077 DCA CDRSW /SET OFFSET FROM "CDRTBL" CDRGET, ISZ CDRSW /BUMP OFFSET TAD CDRSW /OFFSET INTO AC JMS CDRGE8 /GET A CHARACTER TAD CDR240 /MAKE IT ASCII CDRMOD, JMP I CDRGCH CDRGE8, 0 /GET FROM BUFFER ROUTINE CLL RAR /DIVIDE BY 2 - AND INTO LINK IS INDICATOR TAD CDRTAD /ADDRESS OF "CDRTBL" DCA CDRTM3 /SET POINTER TAD I CDRTM3 /GET WORD SZL /SHIFT? JMP .+4 /NO RTR /YES RTR RTR AND CDR077 /GET 6 BITS JMP I CDRGE8 CDRGE2, RCSF /DATA READY? JMP CDRGEX /NO - TRY FOR TIME OUT RCRA /READ ALPHA JMS CDRGE8 /GET TABLE ENTRY ISZ CDRSW /WHICH SIDE? JMP CDRGE9 /LEFT SIDE TAD I CDRPT DCA I CDRPT /FORM RIGHT SIDE JMP CDRGCL /CONTINUE CDRGE9, CLL RTL /SHIFT LEFT RTL RTL ISZ CDRPT /BUMP POINTER DCA I CDRPT /STORE LEFT SIDE CLA CLL CMA RAL /-2 V3 FROM SIS BULLETING JAN 73 TAD CDRCNT DCA CDRCNT /COUNT THE CHARACTERS CLA CMA JMP CDRGCL-1 /CONTINUE - SET SWITCH CDRCLF, CLA CMA DCA CDRCNT /SET MAIN COUNT TO SKIP TAD CDRCT2 CLL CMA RTL /ALL THIS DOES IS... TAD CDRCT2 /MAKE A 2 OR -1 TAD CDR213 /SO THIS MAKES A 215 OR 212 JMP I CDRGCH CDRGEX, /TEST TIME OUT - FIRST DELAY USING CONSTANTS CDR760, 7600 /MONITOR ADDRESS CDR077, 77 /SIX BIT MASK CDRM77, -7700 /-"_ " CDR175, 175 CDR240, 240 /ASCII SPACE CDR213, 213 /215, 212 CORRECTION FACTOR CDR232, 232 /ASCII ^Z ISZ CDRTIM /THIS LOOP TAKES AT LEAST 100MS ON AN 8/E JMP CDRGE1 DCA CDRCNT /CLEAR COUNT IN CASE PARTIAL CARD READ (E.G. JAM) JMP CDRGNC /TIMED OUT - RESTART CARD CDRTM3, CDRTIM, 0 /TIMEOUT COUNTER CDRM27, -27 /-27-3=-32 ^Z TEST CDRCNT, -1 /MAIN COUNT CDRCT2, -1 /215, 212 COUNT CDRPT, 0 /BUFFER POINTER CDRSW, 0 /SWITCH CDRABF, CDRBUF-1-CDRLOC /MODIFIED LOCATIONS CDRTAD, CDRTBL-CDRLOC CDRIN5, CDRXIT-1-CDRLOC $ |
Added src/os8/uni/HANDLERS/CS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 | /4 OS/8 CASSETTE HANDLER / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / / DEC-S8-UCASA-A-LA / COPYRIGHT 1972 / DIGITAL EQUIPMENT CORPORATION / MAYNARD MASSACHUSETTS 01754 / MOUTH/DORP IFNDEF CODE <CODE=0> KCLR=CODE^10+6700 /CLEAR ALL KSDR=CODE^10+6701 /SKIP ON DATA FLAG KSEN=CODE^10+6702 /SKIP ON ERROR KSBF=CODE^10+6703 /SKIP ON READY FLAG KLSA=CODE^10+6704 /LOAD STATUS A KSAF=CODE^10+6705 /SKIP ON ANY FLAG OR ERROR KGOA=CODE^10+6706 /ASSERT CONTENTS OF STATUS A AND XFER KRSB=CODE^10+6707 /READ STATUS B BSW=7002 /BYTE SWAP [8/E,F ONLY] /REWIND=10 /BACKFIL=30 /WRGAP=40 /BACKBLOCK=50 /SKPFIL=70 /SPECIAL CODES / 0 WRITE EOF / 1 REWIND / 2 BACKBLOCK / 3 SKIPFILE/BACKFILE / 4-7 UNUSED (TAKES LOW ORDER 2 BITS ONLY CURRENTLY) VERSION="C&77 *0 -2 /THERE ARE TWO HANDLERS 2401 7001+CODE 0323 0160+CODE+CODE /CSA0 270 /DEVICE CONTROL BLOCK (TYPE 27) 4000+7 /ENTRY POINT FOR CSA0 ZBLOCK 2 2401 7001+CODE 0323 0161+CODE+CODE /CSA1 270 4000+1 /ENTRY POINT FOR CSA1 ZBLOCK 2 *200 K3700, 3700 /MUST BE FIRST LOCATION ON PAGE UNIT, CSA1, VERSION /ENTRY POINT FOR CSA1 CLA /PROTECT CODE AGAINST IGNORANT USERS TAD CSA1 /PICK UP ARGUMENTS DCA CSA0 /VIA CSA0 STL IAC RAL /TAD (3 [8/I,L,E,F] JMP .+3 /JOIN PROCESSING WITH UNIT 1 CSA0, VERSION /ENTRY POINT FOR CSA0 STL CLA RTL /TAD (2 BSW / [8/E,F] DCA UNIT /SAVE UNIT (0 IS 200, 1 IS 300) CS, JMS T /INITIALIZATION; REPLACED BY RDF TAD KCIF /FORM RETURN FIELD INSTRUCTION DCA RETCIF /STORE IN RETURN CODE TAD I CSA0 /GET FUNCTION CONTROL WORD DCA FUN /SAVE IT TAD FUN /GET IT BACK AGAIN AND K70 /ISOLATE FIELD OF BUFFER TAD KCDF /FORM CDF TO FIELD OF BUFFER DCA BUFCDF /STORE IN APPROPRIATE SPOT ISZ CSA0 /POINT TO ARGUMENT 2 TAD I CSA0 /GET BUFFER ADDRESS DCA BUFFER /SAVE IT ISZ CSA0 /POINT TO ARGUMENT 3 TAD I CSA0 /GET BLOCK NUMBER ISZ CSA0 /POINT TO ERROR RETURN KCIF, CIF CDF 0 /SEEK TEMPORARY SAFETY IN CURRENT DATA FIELD SZA CLA JMP NOT1ST /NOT BLOCK 0 STL CLA RAR /TAD (4000 AND FUN /ISOLATE READ/WRITE BIT TAD UNIT /INSERT UNIT JMS I QCAS /CALL CASSETTE ROUTINE REWIND-. /TO PERFORM A REWIND/INITIALIZATION NOT1ST, TAD FUN K200, AND K3700 /ISOLATE NUMBER OF BLOCKS TO XFER SNA JMP SPCASE /0 BLOCKS MEANS SPECIAL THING (EOF) RECLP, DCA BLKNT /SET COUNT OF NUMBER OF BLOCKS STL CLA RAR /TAD (4000 AND FUN /ISOLATE READ/WRITE BIT TAD UNIT /INSERT UNIT JMS I QCAS /CALL CASSETTE ROUTINE RW-. /TO INITIATE READ OR WRITE RETRY, SZA /NON-ZERO AC MEANS ERROR JMP RETCIF /TOUGH LUCK BOOBIE - ERROR TAD K7700 /GET READY TO XFER 100 DOUBLE WORDS DCA DBWDCT /SET DOUBLE WORD COUNTER TAD BUFFER /GET START OF BUFFER SEGMENT DCA BPTR /SET 'BPTR' BUFCDF, HLT /CHANGE TO DATA FIELD OF USER'S BUFFER TAD FUN K7700, SMA CLA /WHICH DIRECTION IS TRANSFER? JMP READ /WANT TO READ WRITE, TAD I BPTR /WANT TO WRITE, SO GET WORD FROM BUFFER JMS I QGPCH /WRITE TAD I BPTR /GET FIRST WORD AGAIN AND P7400 /ISOLATE FIRST HALF OF BYTE 3 DCA T /SAVE FOR FUTURE REFERENCE ISZ BPTR /POINT TO NEXT LOCATION IN BUFFER TAD I BPTR /GET SECOND WORD OF BUFFER PAIR JMS I QGPCH /WRITE BYTE #2 TAD I BPTR /RETRIEVE WORD 2 AND P7400 /ISOLATE 2ND HALF OF BYTE #3 CLL RTR /CREATE MYSTIC HIDDEN BYTE 3 RTR TAD T /GOOD THING I STILL HAVE THIS CLL RTR RTR JMS I QGPCH /WRITE BYTE #3 JMP COM READ, JMS I QGPCH /READ BYTE #1 OF TRIPLE DCA I BPTR /STORE IN WORD 1 OF BUFFER PAIR JMS I QGPCH /READ BYTE #2 OF TRIPLE DCA T /SAVE IT FOR POSTERITY JMS I QGPCH /READ BYTE #3 OF TRIPLE RTL RTL /MYSTIC ROTATES DCA T2 TAD T2 AND P7400 /AND MYSTIC CONSTANTS TAD I BPTR /FIX UP BUFFER WORD 1 OF PAIR DCA I BPTR TAD T2 RTL RTL /MORE ROTATION AND P7400 /AND MORE TAD T ISZ BPTR /POINT TO SECOND WORD OF BUFFER PAIR DCA I BPTR /STORE SECOND WORD COM, ISZ BPTR /POINT TO BEGIN OF NEXT BUFFER PAIR P7400, 7400 /PROTECTION AGAINST CORE WRAP AROUND ISZ DBWDCT /BUMP DOUBLE WORD COUNT JMP BUFCDF /REITERATE JMS I QCAS /CALL CASSETTE ROUTINE CRC-. /TO CHECK CRC TAD BUFFER /GET BUFFER SEGMENT ADDRESS TAD K200 /ADD 200 TO GET TO NEXT SEGMENT DCA BUFFER /REPLACE TAD BLKNT /GET BLOCK COUNT TAD K7700 /SUBTRAT 100 SZA /ARE WE DONE? JMP RECLP /NO, REITERATE ISZ CSA0 /POINT TO NORMAL GOOD RETURN RETCIF, HLT /RETURN TO USER'S DATA AND INSTRUCTION FIELDS JMP I CSA0 /RETURN / INTIALIZATION ROUTINE - ONCE ONLY CODE / OVERLAID BY TEMPORARIES T, 0 /ENTRY POINT TO INITIALIZATION T2, TAD KRDF /REPLACE CALL BY RDF FUN, DCA CS /SO THAT WE'LL NEVER SEE YOU HERE AGAIN BUFFER, TAD T /CORRECT ADDRESS OF GPCH DBWDCT, TAD KQX1 /BY ADDING IN CS+1 QGPCH, DCA . /STORE IT HERE BLKNT, STL CLA RTL /CORRECT ADDRESS OF CAS IS 2 MORE TAD QGPCH QCAS, DCA . /THAN GPCH. STORE IT HERE. BPTR, JMP CS /RETURN TO MAIN PROGRAM KRDF, RDF KQX1, GPCH-CS-1 SPCASE, TAD FUN AND L4003 /ISOLATE R/W BIT + SPECIAL CODE TAD UNIT JMS I QCAS SPCODE-. JMP RETCIF-1 /LEAVE GRACEFULLY K70, 70 KCDF, CDF 0 L4003, 4003 PAGE GPCH, 0 /READ OR WRITE A BYTE JMP AROUND /GO TO REAL LOCATION OF THIS SUBROUTINE CAS, 0 /MUST BE AT GPCH+2; DO CASSETTE STUFF DCA TEMP /SAVE ARGUMENT IN AC CDF 0 TAD I CAS /GET UNRELOCATED RELATIVE LOCAL ENTRY POINT TAD CAS /RELOCATE IT ISZ CAS /POINT TO NORMAL RETURN LOCATION DCA GPCH /SAVE ENTRY POINT IN TEMPORARY JMP I GPCH /GO TO CORRECT ENTRY POINT RW, TAD CAS DCA RTRY /SAVE RETRY ADDRESS TAD TEMP /GET ARGUMENT PASSED VIA AC DCA FNUNIT /SAVE CLL STA RTL /TAD (7775 DCA ERKNT /SET ERROR COUNT TO -3 ERETRY, TAD FNUNIT SPA TAD (20 /READ CODE IS 0; WRITE IS 20 KLSA /LOAD STATUS A TAD FNUNIT /***KLSA CLEARS BIT 0 SMA CLA /READS HAVE TO BE INITIATED JMS CWAIT /READ JMP I RTRY /RETURN AROUND, DCA TEMP TAD FNUNIT SMA CLA JMP RDCHAR /READ TAD TEMP /WRITE JMS CWAIT JMP I GPCH /RETURN RDCHAR, JMS CWAIT TAD TEMP /GET CHAR JUST READ JMP I GPCH /RETURN WITH IT IN AC CRC, TAD FNUNIT TAD (60 KLSA /INITIATE READ/WRITE CRC TAD FNUNIT /***KLSA CLEARS BIT 0 SMA CLA JMS CWAIT /HAVE TO READ TWICE JMS CWAIT /WRITE CRC WRITES BOTH KCLR /WHY NOT? JMP I CAS /RETURN REWIND, TAD (10 JMS UTIL TAD TEMP SMA CLA JMP I CAS /MERELY REWIND IF READING JMP EOF SKIPF, TAD (20 BACKBL, TAD (10 EOF, TAD (10 BACKF, TAD (30 JMS UTIL JMP I CAS /RETURN UTIL, 0 TAD TEMP KLSA TRYAGN, KGOA JMS CTCTST KSBF /WAIT FOR READY JMP .-2 KRSB AND (10 SZA CLA JMP TRYAGN /KEEP TRYING IF ERROR CAUSED BY DRIVE EMPTY JMP I UTIL TEMP, 0 ERKNT, 0 FNUNIT, 0 RTRY, 0 SPCODE, TAD TEMP AND (3 TAD (JMP TABLE DCA J TAD TEMP AND (4300 DCA TEMP J, HLT TABLE, JMP EOF /0 WRITE EOF JMP REWIND /1 REWIND AND WRITE EOF IF BIT 0=1 JMP BACKBL /2 BACK BLOCK TAD TEMP /3 SKIP/BACK FILE DEPENDING ON BIT 0 SMA CLA JMP SKIPF /FORWARD FILE JMP BACKF /BACK FILE CWAIT, 0 KGOA /ASSERT CONTENTS OF STATUS A DCA TEMP /SAVE ANYTHING READ JMS CTCTST KSAF JMP .-2 /WAIT FOR SOMETHING TO HAPPEN KSEN /WAS IT AN ERROR? JMP I CWAIT /NO, SO RETURN ERR, DCA TEMP /YES ... ERROR KRSB AND (30 SNA JMP .+3 AND (20 JMP I RTRY /END OF FILE IS SOFT ERROR ISZ ERKNT /SHALL WE TRY AGAIN? JMP .+3 /YES STL CLA RAR /TAD (4000 JMP I RTRY /RETURN WITH NON-ZERO AC TAD FNUNIT /RETRY TAD (50 /BUT FIRST DO BACKSPACE BLOCK GAP JMS UTIL JMP ERETRY CTCTST, 0 /TEST FOR CONTROL/C L7600, 7600 TAD L7600 KRS TAD (-7603 SNA CLA KSF JMP I CTCTST CIF CDF 0 JMP I L7600 /RETURN TO OS/8 $ |
Added src/os8/uni/HANDLERS/DF32NS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | /1 DF32 NON SYSTEM HANDLER / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / / SR RF08=0 /CHANGE TO 1 FOR RF08 HANDLER /THE NUMBER OF PLATTERS MUST EITHER BE SET AT ASSEMBLY TIME, /OR MUST BE CHANGED VIA THE ALTER COMMAND IN BUILD *0 -1 IFNZRO RF08 < DEVICE RF;DEVICE RF;4064;RF&177;ZBLOCK 2 > IFZERO RF08 < DEVICE DF;DEVICE DF;4124;DF&177;ZBLOCK 2 > SCA=7751 SWC=7750 RFVERSION="A&77 *200 SYSER, CLA CLL CML RAR /4000 ISZ SYSCNT /TRY AGAIN? SKP CLA JMP SFIELD /WHY BOTHER CLA CLL CMA RTL TAD RF DCA RF /RESET PARAMETERS AND TRY AGAIN JMP RETRY SCIF, CIF 0 SYSCNT, 0 S6603, 6603 S70, 70 S7400, 7400 IFZERO RF08 <S3700, 3700> IFNZRO RF08 <S377, 0377> T1, 0 T2, 0 ZBLOCK 224-. IFNZRO .-224 <ADRERR,QQQQ> /ENTRY PT MUST BE RELATIVE 24 DF, RF, RFVERSION CLA CLL CMA RTL /-3 DCA SYSCNT /# TRYS ON ERROR RETRY, TAD I RF /HANDLER RUNS IN USER'S DATA FIELD RAL CLA RTL TAD S6603 DCA SFUN /EITHER A READ OR WRITE TAD I RF AND S70 DCA SFIELD /GET FIELD OF BUFFER TAD I RF RAL AND S7600 CIA DCA T1 /SET UP WORD COUNT CLA CMA ISZ RF TAD I RF DCA T2 /BUFFER ADDRESS-1 ISZ RF RDF TAD (CDF 0 DCA RESRDF CDF 0 TAD T1 DCA I (SWC TAD T2 DCA I (SCA RESRDF, HLT /RESTORE USER'S DATA FIELD IFZERO RF08 < TAD I RF RTL AND S3700 > TAD SFIELD 6615 /LOAD DISK EXTENDED MEMORY S7600, 7600 IFNZRO RF08 < TAD I RF RTR RTR AND S377 6643 /LOAD HIGH ORDER > TAD I RF RTR RTR RAR AND S7400 SFUN, HLT /BECOMES DISK IOT.(READ OR WRITE) RDF TAD SCIF DCA SFIELD IFZERO RF08 <6622> IFNZRO RF08 <6623> JMP .-1 KRS AND (177 TAD (-3 SNA CLA KSF JMP .+3 CIF CDF 0 /RETURN TO OS/8 IF USER TYPED ^C JMP I S7600 ISZ RF 6621 /SKIP ON ERROR IFNZRO RF08 <SKP /SENSE OF SKIP IS REVERSED> JMP SYSER ISZ RF SFIELD, HLT /RETURN TO PROPER FIELD 6601 /CLEAR TROUBLESOME FLAG JMP I RF $ |
Added src/os8/uni/HANDLERS/DF32SY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | /2 DF32 SYSTEM HANDLER / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / /MAINTENANCE RELEASE CHANGES: /1. TOOK OUT SOFSET DF32=1 RF08=0 VERSION="B&77 *0 -1 DEVICE DF32;DEVICE SYS;4124;2007;0;177 STARTB-ENDB-1 NOPUNC *6604 ENPUNC STARTB, NOP /FOR "SWAP" B6653, 6653 B7647, 7647 B7577, 7577 B200, 200 B7605, 7605 B7751, 7751 ZBLOCK 6622-. TAD I B6653 CDF 10 DCA I B7647 CDF 0 ISZ B6653 ISZ B7647 JMP .-6 /MOVE FIELD 1 RESIDENT UP IFNZRO RF08 <6643> 6615 7600 TAD B7577 DCA I B7751 TAD B200 6603 /NOW READ IN FIELD 0 RESIDENT FROM RECORD 1/2 IFNZRO RF08 <6623> IFNZRO DF32 <6622> JMP .-1 6621 IFNZRO RF08 <SKP> HLT /ERROR READING SYSTEM IN ENDB, JMP I B7605 /BOOTSTRAP FOR DISK MONITOR IS AS FOLLOWS: / LOCATION CONTENTS / 7750 7600 / 7751 6603 / 7752 6622 / 7753 5352 / 7754 5752 *200 NOPUNCH *7600 ENPUNCH ZBLOCK 7 SHNDLR, VERSION CLA CLL CMA RTL /-3 DCA SYSCNT /# TRYS ON ERROR TAD I SHNDLR RAL CLA RTL TAD S6603 DCA SFUN /EITHER A READ OR WRITE TAD I SHNDLR AND S70 DCA SFIELD /GET FIELD OF BUFFER TAD I SHNDLR RAL AND S7600 CIA DCA SWC /SET UP WORD COUNT CLA CMA ISZ SHNDLR TAD I SHNDLR DCA SCA /BUFFER ADDRESS-1 ISZ SHNDLR IFNZRO DF32 < TAD I SHNDLR RTL AND S3700> TAD SFIELD 6615 /LOAD DISK EXTENDED MEMORY S7600, 7600 IFNZRO RF08 < TAD I SHNDLR RTR RTR AND S377 6643 /LOAD HIGH ORDER> TAD I SHNDLR RTR RTR RAR AND S7400 SFUN, HLT /BECOMES DISK IOT.(READ OR WRITE) RDF TAD SCIF DCA SFIELD IFNZRO DF32 <6622> IFNZRO RF08 <6623> JMP .-1 ISZ SHNDLR 6621 /SKIP ON ERROR IFNZRO RF08 <SKP /SENSE OF SKIP IS REVERSED> JMP SYSER ISZ SHNDLR SFIELD, HLT /RETURN TO PROPER FIELD 6601 /CLEAR TROUBLESOME FLAG JMP I SHNDLR ZBLOCK 2 SYSER, CLA CLL CML RAR /4000 ISZ SYSCNT /TRY AGAIN? SKP CLA JMP SFIELD /WHY BOTHER CLA CLL CMA RTL TAD SHNDLR DCA SHNDLR /RESET PARAMETERS AND TRY AGAIN IFNZRO RF08 <IFNZRO .-7700 <NZERR>; SKP; HLT> JMP SHNDLR+3 SCIF, CIF 0 SYSCNT, 0 IFNZRO DF32 <IFNZRO .-7700 <NZERR>; SKP; HLT> S6603, 6603 S70, 70 S7400, 7400 IFNZRO DF32 <S3700, 3700> IFNZRO RF08 <S377, 377> SCA=7751 SWC=7750 $ |
Added src/os8/uni/HANDLERS/DUMP.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 | /8 DUMP LPT HANDLER FOR OS/8 / / / / / / / / / /COPYRIGHT (C) 1974,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. / / / / / / / / / / / DEC-S8-UCASA-A-LA / COPYRIGHT 1972 / DIGITAL EQUIPMENT CORPORATION / MAYNARD MASSACHUSETTS 01754 / MOUTH/DORP IFNDEF CODE <CODE=0> KCLR=CODE^10+6700 /CLEAR ALL KSDR=CODE^10+6701 /SKIP ON DATA FLAG KSEN=CODE^10+6702 /SKIP ON ERROR KSBF=CODE^10+6703 /SKIP ON READY FLAG KLSA=CODE^10+6704 /LOAD STATUS A KSAF=CODE^10+6705 /SKIP ON ANY FLAG OR ERROR KGOA=CODE^10+6706 /ASSERT CONTENTS OF STATUS A AND XFER KRSB=CODE^10+6707 /READ STATUS B BSW=7002 /BYTE SWAP [8/E,F ONLY] /REWIND=10 /BACKFIL=30 /WRGAP=40 /BACKBLOCK=50 /SKPFIL=70 /SPECIAL CODES / 0 WRITE EOF / 1 REWIND / 2 BACKBLOCK / 3 SKIPFILE/BACKFILE / 4-7 UNUSED (TAKES LOW ORDER 2 BITS ONLY CURRENTLY) / EDIT HISTORY: / 1976 S.R. ORIGINALLY WRITTEN / 19-MAR-77 S.R. FIXED BUG WITH BUFFER ENDING AT 7777 *0 -1 DEVICE DUMP;DEVICE DUMP;1360;DUMP&177+4000;ZBLOCK 2 DMPVER="C&77 *200 LINK, 0 /POINTS TO 'LINC' ON NEXT PAGE TAD I DUMP /GET FUNCTION CONTROL WORD DCA FNWD ISZ DUMP /POINT TO BUFFER STARTING ADDRESS TAD I DUMP /GET BUFFER STARTING ADDRESS DCA BUFFER ISZ DUMP /POINT TO STARTING BLOCK # TAD I DUMP /GET STARTING BLOCK NUMBER DCA BLOCK /SAVE IT IN 'BLOCK' ISZ DUMP /POINT TO USER'S ERROR RETURN RDF TAD KCIDF /FOR 'CIF CDF' TO USER'S FIELD DCA DMPRET /NEED IT TO RETURN TO HIM LATER TAD FNWD /LOOK AT FUNCTION WORD SMA /BIT 0 IS READ/WRITE BIT JMP ERRET /TAKE FATAL ERROR IF GUY TRIED TO /READ FROM 'DUMP' AND L3700 CLL RTR SNA JMP CLOSE /0 PAGES MEANS PERFORM CLOSE /OPERATION, GO AWAY CIA /STORE AWAY NEGATIVE OF /NUMBER OF LINES TO DUMP DCA KNT TAD FNWD /LOOK SOME MORE AT ALL-IMPORTANT /FUNCTION WORD L374, AND L70 /ISOLATE FIELD OF BUFFER TAD KCDF /FORM 'CDF' TO FLD OF BUFFER DCA .+1 /STORE IT IN NEXT LOCATION FNWD, BPTR, HLT /CHANGE DATA FIELD TO FLD OF BUFFER B, TAD M40 DCA RKNT JMS I LINK TAD LOW-200 CIA CLL TAD BLOCK SZL CLA TAD KLLS JMS I LINK DCA LPUT+1-200 TAD BLOCK JMS I LINK JMP BLK-200 JMS I LINK JMP CRLF-200 A, JMS INIT TAD RKNT TAD L40 /MUST BE REAL 40 JMS I LINK JMS PRINT-200 TAD KSLASH JMS I LINK JMP SPACE-200 C, TAD I BPTR /GET WORD FROM BUFFER JMS I LINK JMS PRINT-200 /PRINT IT IN OCTAL ON LIST DEVICE ISZ BPTR /POINT TO NEXT WORD IN BUFFER NOP /V3D ISZ CKNT /DONE WITH THIS ROW? JMP C /NO, GO PRINT NEXT WORD JMS I LINK JMP SPACE-200 JMS INIT D, TAD I BPTR RTR RTR RTR JMS I LINK JMP PUT6-200 TAD I BPTR JMS I LINK JMP PUT6-200 ISZ BPTR /POINT TO NEXT WORD IN BUFFER NOP /V3D ISZ CKNT /DONE WITH THIS ROW? JMP D /NO, GO ON TO NEXT WORD JMS I LINK JMP SPACE-200 JMS INIT E, TAD I BUFFER /GET WORD 1 OF PAIR JMS I LINK JMP PUTSAV-200 /PUT OUT THE CHAR AND SAVE THE WORD ISZ BUFFER /POINT TO WORD 2 OF PAIR TAD I BUFFER /GET WORD 2 OF PAIR JMS I LINK JMP PUTSAV-200 ISZ BUFFER /POINT TO BEGIN OF NEXT PAIR JMS I LINK JMP THIRD-200 /PRINT THIRD CHAR FROM /REMEMBRANCES OF LAST TWO ISZ CKNT ISZ CKNT /DONE WITH THIS ROW? JMP E /NO, GO ON TO NEXT PAIR JMS I LINK /YES JMP CRLF-200 /PRINT CARRIAGE RETURN/LINE FEED ISZ KNT /DONE WITH BUFFER YET? SKP /NO JMP OKRET /YES ISZ RKNT /DONE WITH LAST ROW OF PAGE? JMP A /NO, GO ON TO NEXT ROW IN SAME PAGE ISZ BLOCK /BUMP BLOCK NUMBER BY 1 JMP B /GO DUMP THE NEXT PAGE CLOSE, STA /-1 CHANGES CR TO FORM FEED JMS I LINK JMP CRLF-200 OKRET, ISZ DUMP /POINT TO NORMAL RETURN M40, SMA SZA CLA /AC 0 SO ALWAYS SKIPS ERRET, STL CLA RAR /FATAL ERROR HAS AC NEGATIVE DMPRET, HLT /PERFORM 'CIF CDF' TO USER'S FIELD JMP I DUMP /RETURN INIT, 0 TAD M10 DCA CKNT TAD BUFFER DCA BPTR JMP I INIT KSLASH, 57-40 KCIDF, CIF CDF 0 KCDF, CDF 0 M10, -10 L40, 40 /MUST BE REAL 40 L3700, 3700 BUFFER, 0 RKNT, 0 /ROW COUNT CKNT, 0 /COLUMN COUNT BLOCK, 0 /CURRENT BLOCK NUMBER KLLS, LLS IFZERO .-375&4000 <ERROR> *374 L70, 70 /MUST BE AT REL LOC 174 KNT, 0 /- NUMBER OF PAGES LEFT TO DUMP IFNZRO L70-374 <ERROR> DUMP, DMPVER JMS LINK /GET ADDRESS OF NEXT PAGE INTO LINK IFNZRO .-400 <ERROR> PAGE LSF=6661 /SLIP ON LPT FLAG LLS=6666 /LOAD LPT BUFFER IFDEF DMPTTY < LSF=TSF LLS=TLS > LINC, 0 DCA ARG RDF TAD HCDF TTY12, DCA TEMP HCDF, CDF 0 TAD I LINC DCA DOIT ISZ LINC L77, 77 TEMP, 0 TAD ARG CNT, DOIT, HLT POP, JMP I LINC /RETURN L177, 177 IFNZRO POP&177-15 <ERROR> /MUST BE AT 15 IN PG IFNZRO DOIT&177-14 <ERROR> IFNZRO TEMP&177-12 <ERROR> THIRD, TAD SAVE DCA ARG TAD ARG PUTSAV, AND L7600 CLL RAL TAD SAVE RTL RTL AND L177 DCA SAVE TAD ARG AND L177 /FORCE 7-BIT TAD M140 /DO RANGE CHECK CLL TAD (100 /FOR BETWEEN 40 AND 137 SNL /SKIP ON SUCCESS TTY40, M140, SZA CLA /NEVER SKIPS PUTSPC, TAD TTY40 /RESTORE CHAR OR BLANK PUTPOP, JMS LPUT TTY215, JMP POP LPUT, 0 NOP /THIS MAY BE AN 'LLS' OR 0 L7600, 7600 /CLA KBD, KSF JMP CHECKL TAD L7600 KRS TAD (-7603 SNA CLA JMP CTRLC KRB TLS AND L177 TAD (-15 SNA JMP CR TAD (15-70 CLL TAD (10 DCA TEMP SNL JMP NOT /NOT A DIGIT TAD NUM CLL RAL CLL RAL CLL RAL TAD TEMP DCA NUM JMP CHECKL CTRLC, CIF CDF 0 JMP I L7600 CR, TAD NUM DCA LOW TAD (12-77 NOT, TAD L77 TSF JMP .-1 XTRA, TLS CLA DCA NUM CHECKL, LSF JMP KBD JMP I LPUT /YES, RETURN NUM, 0 LOW, 0 PUT6, TAD TTY40 AND L77 JMP PUTSPC PRINT, 0 DCA ARG TAD TTY40 JMS LPUT TAD (-4 DCA CNT PRLUP, TAD ARG AND L7600 CLL RTL TAD L214 /14 SHIFTS TO 60 /AND L214 HAS AC0 = 0 RTL JMS LPUT TAD ARG RTL RAL DCA ARG ISZ CNT /BUG IF TRY TO USE AS L214 JMP PRLUP JMP I PRINT L214, 214 /COULD BE 'AND CNT' SAVE, 0 /MUST BE DEDICATED. USED AS SHIFT /REG AND MUST BE ALMOST 0 ON ENTRY ARG, 0 SPACE, TAD TTY40 JMS LPUT JMP PUTSPC BLK, SNA CLA DCA LOW /BLOCK 0 INITIALIZATION TAD L214 /FORM FEED JMS LPUT TAD ARG JMS PRINT / TAD (-10 / DCA TEMP / TAD TTY3 / JMS SPACE /LUP, TAD TEMP / TAD (10 /MUST BE REAL 10 / JMS PRINT / ISZ TEMP / JMP LUP CRLF, TAD TTY215 JMS LPUT TAD TTY12 JMP PUTPOP PAGE |
Added src/os8/uni/HANDLERS/KL8E.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 | /17 SUPER TTY HANDLER FOR OS/8 / / / / / / / / / /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. / / / / / / / / / / /S.W.,S.R.,H.J.,R.L.,S.R. *0 -1 DEVICE KL8E;DEVICE TTY;0;TTY&177+4000;ZBLOCK 2 /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 INDVC=03 OUTDVC=04 KSF=10^INDVC+6001 KCC=10^INDVC+6002 KRS=10^INDVC+6004 KRB=KCC KRS TSF=10^OUTDVC+6001 TCF=10^OUTDVC+6002 TPC=10^OUTDVC+6004 TLS=TCF TPC 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 <CTRL=0> > /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, KCC /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 <TAD I TTYCA> /PRINT CHAR JUST DELETED IFNZRO RUB&4000 <TAD TT10> /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 <ENTERR,QQQQ> 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, KCC /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 <JMP PRIN> /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 KSF 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 KRB /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 TLS IFNZRO DELAY < TAD (-DELAY SZA CLA STA > TTYTSF, TSF 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 KCC-6032 < CONV, CLA TAD (33 JMP I TTYGCH > IFZERO KCC-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 KRS TAD (-7603 /-7603=175 KSF CLA IAC /STUFF IN BUFFER IS UNRELIABLE IF FLAG ISN'T UP SZA JMP I TTYTST IFNZRO INDVC-3 <KCC> 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/uni/HANDLERS/L645.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | /1 ANALEX LINE PRINTER HANDLER / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / *0 -1 DEVICE L645;DEVICE LPT;1040;0;ZBLOCK 2 /V3 FIXES: /1. ADDED VERSION NUMBER /2. ADDED PARITY ^C /3. ALLOWED ^C TO WORK EVEN IF LPT OFF / S.R. LPTVERSION="A&77 *200 /LINE PRINTER HANDLER FOR "OLD STYLE" LINE PRINTER /RECOGNIZES TAB,LINE FEED,VERTICAL TAB AND FORM FEED /IGNORES CARRIAGE RETURNS, TREATS ^N AS "CARRIAGE RETURN / WITHOUT LINE FEED" CONTROL CHARACTER. LSE=6651 LCF=6652 LLB=6654 LSD=6661 LCB=6662 LPR=6664 LPT, LPTVERSION LP7700, 7700 LPT11, 11 /FALLS THROUGH HARMLESSLY, CLEARING THE AC LPT214, RDF TAD LPTCIF DCA LPTXIT TAD I LPT AND LPT70 TAD LP6201 DCA LPTCDF CLA CLL CML RAR TAD I LPT /LINK IS NOW 1 IF COMMAND WAS A "WRITE" AND LP7700 CMA DCA LPTWC /LPTWC=WORD COUNT/2 ISZ LPT TAD I LPT DCA LPTCA ISZ LPT TAD I LPT ISZ LPT SNL JMP LPTERR SZA CLA JMP LPTCDF LCB JMS LPWAIT TAD LPT214 JMS LPTPCH /FORM FEED, INITIALIZES COUNT LPTCDF, HLT JMP LPT7 LPTLP, TAD I LPTCA JMS LPTPCH TAD I LPTCA AND LP7400 DCA LPTTMP ISZ LPTCA LP7400, 7400 TAD I LPTCA JMS LPTPCH TAD I LPTCA AND LP7400 CLL RTR RTR TAD LPTTMP RTR RTR JMS LPTPCH ISZ LPTCA LPT7, 7 ISZ LPTWC JMP LPTLP LPTRTN, ISZ LPT LPTXIT, HLT JMP I LPT LPTWC, 0 LPTCA, 0 LPTPCH, 0 AND LPT177 SZA TAD LPM140 SMA JMP I LPTPCH TAD LPT106 SNA JMP LPTCTZ TAD LPT13 CLL TAD LPT6 SZL SNA JMP LPTCTL TAD LPT11 LLB JMP LPTKSF LPWAIT, -1 WEIGHT, LSD JMP NOTDON LCF ISZ LPLPTR JMP I LPWAIT CLA IAC LPTCTL, SNA JMP LPTTAB TAD LPTTAD DCA LPTXXX TAD LP7607 DCA LPLPTR LPTXXX, HLT SNA JMP .+3 LPR LPTKSF, JMS LPWAIT JMP I LPTPCH NOTDON, KRS AND LPT177 TAD LPM3 SNA CLA KSF JMP WEIGHT LPTCIF, CDF CIF 0 JMP I .+1 7600 LPTCTZ, TAD LPT214 JMS LPTPCH JMP LPTRTN LPT6, 6 LPTTAB, TAD LPT40 LLB JMS LPWAIT TAD LPLPTR AND LPT7 LPM140, SZA CLA JMP LPTTAB JMP I LPTPCH LPTERR, CLA CLL CML RAR JMP LPTXIT LPTTAD, TAD . LPT70, 70 /LF LPT13, 13 /VT LPT177, 177 /FF 0 /CR LPT40, 40 /CR, NO LF LPM3, -3 LPT106, 106 LP7607, 7607 LP6201, CDF 0 LPTTMP, 0 LPLPTR, 0 $ |
Added src/os8/uni/HANDLERS/LINCNS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | /1 LINCTAPE HANDLER FOR BUILD / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / *0 -10 DEVICE LNC;DEVICE LTA0;4170;10;ZBLOCK 2 DEVICE LNC;DEVICE LTA1;4170;11;ZBLOCK 2 DEVICE LNC;DEVICE LTA2;4170;12;ZBLOCK 2 DEVICE LNC;DEVICE LTA3;4170;13;ZBLOCK 2 DEVICE LNC;DEVICE LTA4;4170;14;ZBLOCK 2 DEVICE LNC;DEVICE LTA5;4170;15;ZBLOCK 2 DEVICE LNC;DEVICE LTA6;4170;16;ZBLOCK 2 DEVICE LNC;DEVICE LTA7;4170;17;ZBLOCK 2 LINCVERSION="A&77 *200 /LINCTAPE HANDLER FOR PS/8 - CRUDE VERSION (WRITE OPERATION CHECKS /AFTER EACH BLOCK) /ALL 8 HANDLERS ARE IN THIS PAGE - SEE DECTAPE HANDLER FOR /DUMB COMMENT /PDP-12 OPCODES NEEDED LINC= 6141 PDP= 0002 CLR= 0011 AXO= 0001 TMA= 0023 TAC= 0003 STDI= 0436 COM= 0017 ROLI1= 0261 ESF= 0004 LTM203, -203 LTA, 0 LTA7, 7 LTA30, 30 LTA70, 70 LTA702, 702 LT3700, 3700 LTATMP, LINCVERSION DTA0, ISZ LTANO DTA1, ISZ LTANO DTA2, ISZ LTANO DTA3, ISZ LTANO DTA4, ISZ LTANO DTA5, ISZ LTANO DTA6, ISZ LTANO DTA7, ISZ LTANO LTA200, 200 TAD LTANO CMA TAD LTATAD DCA LTANO CLA CLL CML RTR TAD LTANO DCA LTADCA RDF TAD LCDIF0 DCA LTAXIT LTANO, 0 DCA LTA TAD LTAISZ LTADCA, 0 TAD I LTA DCA LTARG1 ISZ LTA TAD I LTA DCA LTARG2 ISZ LTA TAD I LTA CLL RAL /MOVE ARGUMENTS TO WORK AREA DCA LTARG3 ISZ LTA ISZ LTA TAD LTARG1 /GET CORE FIELD AND LTA70 TAD LTCDF DCA LTSET TAD LTSET AND LTA70 CLL RTL RTL /MOVE TO BITS 0-2. CONTROLLER RTL /WANTS THEM THERE SLTARG3,DCA LTATMP TAD LTANO /GET UNIT NO. AND LTA7 CLL RAR TAD LTATMP TAD LTA30 /SET BIT 7 ON. EXTENDED ADD. MODE LINC AXO /SEND DATA TO CONTROLLER PDP LT7600, 7600 DCA LTANO /RESET UNIT NO. TAD LTARG1 RTL AND LTA3 CLL RTL TAD LTA702 /ADD TAPE INST; STORE IT DCA LTINST LTALP, TAD LTARG2 /CORE ADDRESS TO CONTROLLER LTATAD, TAD LTA200 /SAVE 129 TH WORD DCA LTATMP LTSET, 0 TAD I LTATMP DCA LTASVC /SAVE LOC. TAD LTARG2 LINC TMA LTINST, 0 /TAPE INSTRUCTION HERE LTARG3, 0 /BLOCK NO. HERE LTAWLP, PDP CLA TAD LTASVC /RESTORE 129TH WORD DCA I LTATMP TAD LTA200 /ADD 200 FOR PARITY TTY KRS TAD LTM203 /TEST FOR ^C SNA CLA KSF /IS FLAG UP? JMP NOTFUG /EITHER NOT ^C OR NO FLAG TAD LTA30 LINC ESF PDP LT7700, 7700 TAD LTASVC DCA I LTATMP LCDIF0, CDF CIF 0 JMP I LT7600 NOTFUG, LINC STDI COM ROLI1 LTA3, TAC PDP SNL JMP LTAWLP LTADUN, CLL IAC CLA IAC RTL AND LTINST SNA CLA JMP LTALP LTNERR, TAD LTARG1 AND LT3700 TAD LT7700 SNA /ALL DONE? JMP LTAXIT DCA LTARG1 /NO.. SAVE COUNT TAD LTATMP DCA LTARG2 ISZ LTARG3 JMP LTALP LTAXIT, HLT JMP I LTA LTAISZ, ISZ LTANO LTARG1, 0 LTARG2, 0 LTCDF, CDF 0 LTASVC=LTADCA $$$$$$$$ |
Added src/os8/uni/HANDLERS/LINCSY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | /2 LINCTAPE SYSTEM HANDLER / / / / / / / / / /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. / / / / / / / / / / / SOFSET=7747 SBLOCK=7776 LINC=6141 AXO=1 PDP=2 TMA=23 *0 VERSION="B&77 -2 DEVICE LINC;DEVICE SYS;4171;2007;0;1341 DEVICE LINC;DEVICE LTA0;4171;1007;0;1341 /V3D: REMOVED 'SOFSET' STARTB-ENDB-1 NOPUNCH *7600 ENPUNCH STARTB, ZBLOCK 16 B4047, 4047 B7647, 7647 1020;20;4 /IO PRESET 1020;20;AXO /LOAD SOME LINCTAPE FLAGS 1020;7600;TMA /LOAD MEMORY ADDRESS 720;1 /READ RECORD 1 PDP /BACK TO PDP-8 MODE CLA TAD I B4047 CDF 10 DCA I B7647 CDF 00 ISZ B4047 ISZ B7647 JMP .-6 JMP I .+1 ENDB, 7605 /THE BOOTSTRAP FOR A LINCTAPE SYSTEM IS AS FOLLOWS: /LEFT SWITCHES=700,RIGHT SWITCHES=0 /I-O PRESET IN LINC MODE AND PRESS "D0". TAPE WILL MOVE /WHEN TAPE STOPS PRESS "START 20". *200 NOPUNCH;*7600;ENPUNCH ZBLOCK 7 SHNDLR, VERSION S7600, 7600 RDF TAD SCIF DCA SXIT TAD I SHNDLR DCA SFUN /FUNCTION ISZ SHNDLR TAD I SHNDLR DCA SADR /BUFFER ADDRESS ISZ SHNDLR TAD I SHNDLR /V3D TAD SOFSET /SOFSET=0 NOP /SAVE ROOM CLL RAL DCA SBLOK /BLOCK NO. ISZ SHNDLR CLL CML RAR AND SFUN RTL RTL TAD S702 /GET FUNCTION;CREATE READ OR WRITE DCA SINST /READ OR WRITE INSTRUCTION. TAD SFUN AND S70 /FIELD BITS TO AC 0-2 TAD SADCDF DCA SADSET TAD SADSET AND S70 RTL IAC RTL /SET EXTENDED ADDRESS RTL LINC AXO PDP CLA TAD SFUN RAL AND S7600 DCA SFUN SADSET, 0 SLOOP, CLA CLL CMA RTL DCA SERRCT /NO. ERROR TRIES STRY, TAD SADR TAD S200 DCA SADNXT TAD I SADNXT DCA SADSVC TAD SADR LINC TMA /CORE ADDRESS TO CONTROL SINST, 0 /READ OR WRITE SBLOK, 0 /BLOCK NO. HERE PDP CMA /CHECKSUM HERE. 7777=GOOD DCA SADSET TAD SADSVC DCA I SADNXT IFNZRO .-7700 <NZERR> SKP HLT TAD SADSET SZA CLA JMP SERR SOK, ISZ SBLOK TAD SADNXT DCA SADR TAD SFUN TAD S7600 SNA /ALL DONE? JMP SDONE /YES DCA SFUN JMP SLOOP SERR, TAD SINST RTR;RTR SPA CLA /WAS IT READ? JMP SOK /NO..WRITE. CONTINUE ISZ SERRCT /READ..RETRY IT? JMP STRY CLA CLL CML RAR /DON'T BOTHER SKP SDONE, ISZ SHNDLR SXIT, 0 JMP I SHNDLR SFUN, 0 SADR, 0 SERRCT, 0 S702, 702 S200, 200 S70, 70 SCIF, CDF CIF 0 SADCDF, CDF 0 SADNXT, 0 SADSVC, 0 $ |
Added src/os8/uni/HANDLERS/LPSV.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 | /5 LP08/LS8E/LA180/LV8E HANDLER / / / / / / / / / /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. / / / / / / / / / / LPVERSION="C&77 *0 -1 DEVICE LPSV;DEVICE LPT;1040;LPT&177;ZBLOCK 2 /LPT HANDLER FOR EITHER LP08 OR LS8E LINE PRINTER. /HANDLES TABS, PASSES EVERYTHING ELSE ON TO THE HARDWARE. LSF=6661 /SKIP ON FLAG LSR=6663 /SKIP ON ERROR LLS=6666 /LOAD LPT BUFFER DBST= 6570 /SKIP IF DEMAND SET AND CLEAR IT DBTD= 6574 /LOAD COMPLEMENT OF AC0-11 TO TRANSMIT BUFFER DBSE= 6575 /SET INTERRUPT ENABLE DBCE= 6575 /CLEAR INTERRUPT ENABLE LA180=0 /SET TO 1 TO USE LA180 /V3D CHANGES: /ADDED IN LA180 SUPPORT *200 LPWDTH, -205 /-(WIDTH+1) [USE -121 FOR 80 COLUMNS] LTERMC, 14 /4 FOR LV8 LVCCNV, -40 /0 IF PRINTER PRINTS LC LP7770, 7770 LP0007, 0007 LPT, LPVERSION /NORMAL ENTRY POINT CLA STL RAR TAD I LPT / R/W BIT TO LINK L AND LP7700 / I CMA /TREAT 0 PG CNT AS 0 WD CNT N DCA LPTWC /SAVE -(DBLWD COUNT+1) K LPT214, RDF / TAD LPTCIF / M DCA LPTXIT /SAVE CIF CDF RETRN FIELD U TAD I LPT / S AND (70 / T TAD (CDF 0 / DCA LPTCDF / N ISZ LPT /PT TO BUFFER O TAD I LPT /GET BUFFER ADDRESS T DCA LPTCA /SAVE BUFFER PTR ISZ LPT /PT TO BLOCK # C TAD I LPT /GET IT H ISZ LPT /POINT TO ERROR RETURN G LPTCDF, HLT / ! SNL JMP LPTERR /CAN'T READ FROM LPT SNA CLA TAD LPT214 /OUTPUT FORM FEED IF BLOCK 0 LPTELP, JMS LPTPCH /PRINT 3RD CHAR OF DOUBLEWORD ISZ LPTWC JMP LPTLP /GET 3 MORE CHARS SKP LPTCTZ, TAD LTERMC JMS LPTPCH /OUTPUT FORM FEED IF ^Z SEEN (EOT OF LV8) ISZ LPT /BUMP TO NORMAL RETURN LPTXIT, HLT /RESTORE FIELDS JMP I LPT /EXIT /UNPACKING LOOP - USES A SHIFT REGISTER METHOD TO GET THE /THIRD CHARACTER IN EACH DOUBLEWORD. LPTLP, STL /GUARD BIT OF SHIFT REGISTER LPROTL, RTL RTL SPA /DO WE HAVE 8 BITS SHIFTED IN? JMP LPTELP DCA LPTCDF /SAVE SHIFT REGISTER TAD I LPTCA JMS LPTPCH /PRINT A CHAR TAD I LPTCA ISZ LPTCA /BUMP INPUT POINTER LP7400, 7400 /PROTECT ISZ AND LP7400 CLL RAL TAD LPTCDF /SHIFT HIGH 4 BITS INTO JMP LPROTL /SHIFT REGISTER LPTERR, STL CLA RAR /PUT 4000 IN AC JMP LPTXIT /AND TAKE ERROR RETURN LPTWC, 0 LPTCA, 0 /CHAR PRINT ROUTINE LPTPCH, 0 AND (177 TAD (-175 SMA JMP LPFLSH /FLUSH CODES 175-177 TAD (175-140 SMA TAD LVCCNV /CONVERT LC TO UC IF DESIRED TAD (140-33 SNA TAD (11 /CHANGE ALTMODE TO $ IAC SNA JMP LPTCTZ /^Z - END OF FILE TAD (32-11 SNA JMP LPTTAB /TABS MUST BE SIMULATED LPLFHK, TAD (11 /RESTORE CHAR SZA /FLUSH NULLS JMS LPCHAR / TAD LPLPTR /IF COL. CTR GT 0 SMA /WE HIT A CONTROL CHAR TAD LPWDTH /OR EOL- SET TO FULL DCA LPLPTR /WIDTH (NOTE LPLPTR=1 !) LP7700, LPFLSH, SMA CLA /NEVER SKIPS JMP I LPTPCH /RETURN LPCHAR, 0 /LOW LEVEL PRINT ROUTINE IFZERO LA180 < NOP /NOP'S NEEDED FOR SET LLS /PUT CHAR IN LPT BUFFER NOP > IFNZRO LA180 < CMA DBTD /PUT CHAR IN LP BUFFER CMA > AND LP7770 /KLUDGE - CLEARS COLUMN CTR TAD LP7770 /ON CR, LF, VT, FF BUT ALSO SNA CLA /ON ^H,^N, AND ^O. BIG DEAL DCA LPLPTR /?SR RICHIE SAID 'LPCRFG' LP7600, 7600 /CLEAR AC LPCTCL, TAD LP7600 KRS TAD (-7603 /CHECK FOR ^C FROM CONSOLE SNA CLA KSF /WITH FLAG UP JMP .+3 LPTCIF, CDF CIF 0 /YES, RETURN TO OS/8 JMP I LP7600 IFNZRO LA180 <DBST> /NO MUST BE HERE IFZERO LA180 <LSF> /NO FOR SET JMP LPCTCL /WAIT FOR FLAG ISZ LPLPTR /CHECK LINE OVERFLOW JMP I LPCHAR TAD (15 JMS LPCHAR CLA IAC JMP LPLFHK LPTTAB, TAD LPBLNK /GET PSEUDO BLANK JMS LPCHAR /PRINT IT TAD LPWDTH CMA TAD LPLPTR /GET # CHARS IN LINE AND LP0007 LPBLNK, SZA CLA /LOOP 'TILL MULTIPLE OF 8 JMP LPTTAB JMP I LPTPCH LPLPTR, 0 $ |
Added src/os8/uni/HANDLERS/LQP.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 | / LQP HANDLER FOR OS/8 / / / 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 HEREIN 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 ASSUMES NO RESPONSIBILITY FOR THE USE / OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED / BY DIGITAL. / / COPYRIGHT (C) 1977 BY DIGITAL EQUIPMENT CORPORATION / PDMP=6502 PDMC=6503 PDPC=6504 PDRS=6505 PDWS=6506 PDRE=6507 LPVERSION="A&77 /VERSION A (MH) *0 /ORIGIN FOR BUILD INFO -1 /ONE ENTRY POINT DEVICE LQP /GROUP NAME DEVICE LPT /DEVICE NAME 1040 /DEVICE TYPE LQP&177+4000 /ENTRY POINT + TWO-PAGE FLAG 0 /REQUIRED ZEROES 0 PAGE LQPORG=. LQPCSV, 0 LQPBUF, 0 LQPDWC, 0 LQPDCY, 0 LQP, LPVERSION /ENTRY POINT (MH) CLA STL RTL /RAISE RIBBON PDWS PDRE /INIT PRINTER DCA .-1 /---FIRST TIME ONLY--- JMS LQPDCZ /INIT SECOND PAGE LINK RDF /GET RETURN CIF TAD (CIF CDF) DCA LQPRDF TAD I LQP /GET FUNCTION WORD AND (70) TAD (CDF) DCA LQPBDF /SET BUFFER CDF TAD I LQP AND (3700) CMA DCA LQPDWC /SET DOUBLE-WORD COUNT +1 ISZ LQP TAD I LQP DCA LQPBUF /SET BUFFER PTR ISZ LQP TAD I LQP LQPBDF, 0 /CDF TO BUFFER SZA CLA JMP LQPGO TAD (15);JMS LQPDOC /NEW PAGE ON BLOCK 0 TAD (14);JMS LQPDOC LQPGO, ISZ LQPDWC JMP LQPGO1 /LOOP IF MORE TO DO LQPCZ, TAD (13);JMS LQPDOC /CLEAR SPACE ACCUMULATORS LQPRDF, 0 /THEN RETURN TO CALLER ISZ LQP ISZ LQP JMP I LQP LQPGO1, TAD I LQPBUF /GET NEXT WORD AND (7400) CLL RTR DCA LQPCSV /SAVE PART OF THIRD CHAR TAD I LQPBUF JMS LQPDOC /OUTPUT FIRST CHAR ISZ LQPBUF TAD I LQPBUF JMS LQPDOC /OUTPUT SECOND CHAR TAD I LQPBUF AND (7400) /PUT THIRD CHAR TOGETHER BSW TAD LQPCSV CLL RTR JMS LQPDOC /OUTPUT THIRD CHAR ISZ LQPBUF JMP LQPGO /LOOP FOR DONE TEST LQPDCZ, 0 TAD LQPDCZ AND (7600) TAD (LQPDCX-LQPORG) DCA LQPDCY JMP I LQPDCZ LQPDOC, 0 JMS I LQPDCY JMP LQPCZ KRS /CHECK FOR CONTROL C AT CONSOLE AND (177) TAD (-3) SZA CLA /SKIP IF SO JMP I LQPDOC CIF CDF 0 /RETURN TO OS8 JMP I (7600) PAGE LQPTCH, 24 /2*NUMBER OF INCRS PER CHAR LQLINE, 20 /2*NUMBER OF INCRS PER LINE LQPAGE, -102 /-NUMBER OF LINES PER PAGE LQPDCX, 0 /OUTPUT ONE CHAR AND (177) TAD (-40) /TEST FOR SPECIAL OR BLANK SPA JMP LQPSPC /JUMP IF SPECIAL SNA JMP LQPIDX /JUMP IF BLANK TAD (40) LQPDC1, DCA LQPCTM /SAVE CHAR CODE LQPWLP, PDRS /LOOP TIL DEVICE READY BSW SMA CLA JMP .+5 /JUMP IF NO CHECK FLAG PDRE /ELSE RESET DEVICE DCA LQPX /AND HORIZONTAL POSITIONS DCA LQPDX ISZ LQPDY /ADVANCE A LINE, FOR CLARITY PDRS STL TAD (400) SZL CLA JMP LQPWLP /LOOP IF NOT READY TAD LQPDY /DO Y MOTION, IF NEEDED SNA JMP LQPNDY /JUMP IF NONE CIA DCA LQPMTM /SAVE -NUMBER LINES TO DO TAD LQLINE /SUM TOTAL INCRS TO DO ISZ LQPMTM JMP .-2 PDMP /MOVE PAPER TAD LQPY /COMPUTE NEW POSITION TAD LQPDY TAD LQPAGE /ON PAGE, PLEASE!! SMA JMP .-2 CIA TAD LQPAGE CIA DCA LQPY DCA LQPDY LQPNDY, TAD LQPDX /DO X MOTION, IF NEEDED SNA JMP LQPNDX /JUMP IF NONE STL SMA CLL CIA /ADJUST FOR -X MOTION DCA LQPMTM TAD LQPTCH /SUM TOTAL INCRS TO DO ISZ LQPMTM JMP .-2 RAR /GET DIRECTION INDICATOR BACK PDMC /MOVE CARRIAGE TAD LQPX /COMPUTE NEW POSITION TAD LQPDX DCA LQPX DCA LQPDX LQPNDX, TAD LQPCTM /RETRIEVE SAVED CHAR SNA JMP LQPDCR /JUMP IF NONE CLL RAL /ADJUST FOR OFFSET PDPC /PRINT CHAR LQPIDX, ISZ LQPDX /BUMP SPACE COUNTER JMP LQPDCR /RETURN TO CALLER JMP LQPDCR /...IN CASE ISZ SKIPPED... LQPSPC, /SPECIAL CHARACTER CHECKING TAD (40-32) /CONTROL Z? SNA JMP I LQPDCX /TAKE EOF RETURN IF SO TAD (32-15) /CARRIAGE RETURN? SNA JMP LQPCR /JUMP IF SO IAC /FORM FEED? SNA JMP LQPFF /JUMP IF SO IAC /VERTICAL TAB? SNA JMP LQPDC1 /CLEAR ACCUMULATORS, IF SO IAC /LINE FEED? SNA JMP LQPLF /BUMP LINE COUNTER IF SO IAC /TAB? SNA CLA JMP LQPDCR /RETURN IF NOT RECOGNIZED LQPTB, TAD LQPX /DO TAB TAD LQPDX TAD (10) AND (7770) CIA LQPCR, TAD LQPX CIA DCA LQPDX /SAVE CR OR TAB MOTION LQPDCR, ISZ LQPDCX /BUMP TO OK RETURN JMP I LQPDCX /AND TAKE IT LQPLF, ISZ LQPDY /BUMP LINE COUNTER TAD LQPY /CHECK FOR NEXT PAGE TAD LQPDY TAD LQPAGE SMA CLA JMP LQPDC1 /JUMP IF SO JMP LQPDCR /ELSE, JUST RETURN LQPFF, TAD LQPY /DO FORM FEED TAD LQPAGE CIA DCA LQPDY JMP LQPDC1 /DO PAGE EJECT NOW LQPX, 0 LQPDX, 0 LQPY, 0 LQPDY, 0 LQPMTM, 0 LQPCTM, 0 PAGE |
Added src/os8/uni/HANDLERS/LSPT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | /1 PTR/PTP HANDLER FOR LOW SPEED / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / *0 -2 DEVICE KS33;DEVICE PTP;1020;0;ZBLOCK 2 DEVICE KS33;DEVICE PTR;2010;110;ZBLOCK 2 VERSION="A&77 *200 PTP, VERSION CLA CLL CML /SET LINK ON TO INDICATE PUNCH JMS PSETUP /DO COMMON CRAP PTPLP, KSF JMP PTPCNT /KEYBOARD FLAG OFF - DON'T WORRY ABOUT ^C KRS AND PTP177 TAD PTPM3 SZA CLA /IS THERE A ^C IN THE TTY BUFFER? JMP PTPCNT /NO PTPCIF, CDF CIF 0 JMP I PT7600 PTPCNT, TAD I PTPCA JMS PTPPCH /FIRST CHAR IN LOW ORDER 8 BITS OF WORD 1 DCA PTR ISZ PTPCA PT7700, 7700 TAD I PTPCA JMS PTPPCH /SECOND CHAR IN LOW ORDER 8 BITS OF WORD 2 CLL RTR RTR TAD PTR RTR RTR /THIRD CHARACTER NOW IN AC JMS PTPPCH PTPEND, ISZ PTPCA PT70, 70 /JUST IN CASE WERE PUNCHING PG 7600 KEEP THIS LITERAL HERE JMP PTPISZ PSETUP, 0 RDF /GET FIELD OF CALLING PROGRAM TAD PTPCIF DCA PTPXIT /SET UP RETURN SEQUENCE TAD I PTP AND PT70 TAD PCDF DCA PTPCDF RAR /GET LINK(1=PTP,0=PTR) TAD I PTP /GET FUNCTION WORD ISZ PTP SPA /CHECK CORRECT MODE JMP PTPERR /SIGNAL "UNRECOVERABLE DEVICE ERROR" AND PT7700 CMA /SET UP -(WORD COUNT)/2-1 DCA PTPWC TAD I PTP /SET UP STARTING ADDRESS ISZ PTP DCA PTPCA TAD I PTP PTPCDF, 0 /SET DATA FIELD TO ACCESS BUFFER PTPEOF=PTPCDF SNA CLA SZL JMP PTPISZ TAD PTP336 /INPUT INITIALIZATION - TYPE "^" AND WAIT TLS KSF JMP .-1 PT7600, 7600 PTPISZ, ISZ PTPWC JMP I PSETUP /LOOP FOR BUFFER SIZE (128 WORDS) PTPRTN, TAD PTPEOF SZA CLA /DID WE RUN OUT OF TAPE? ISZ PTP ISZ PTP PTPXIT, HLT /EXIT CDF GOES HERE JMP I PTP PTPPCH, 0 TLS TSF /NOTICE THE GLORIOUS LACK OF OVERLAP JMP .-1 AND PT7400 JMP I PTPPCH PTPCA, 0 PTR, VERSION /*** CORRECT ENTRY IN MAIN ASSEMBLY IF THIS IS MOVED! CLA CLL TAD PTR DCA PTP JMS PSETUP /SET UP ADDRESS, COUNT, FIELDS PTRLP, JMS PTRGCH /READ FIRST CHARACTER OF 3 DCA I PTPCA JMS PTRGCH DCA PTPPCH JMS PTRGCH RTL RTL DCA PTR TAD PTR AND PT7400 TAD I PTPCA DCA I PTPCA /HIGH ORDER 4 BITS INTO WORD 1 TAD PTR /GET THE CHAR FROM THE PTR BUFFER RTL RTL AND PT7400 TAD PTPPCH ISZ PTPCA PT7400, 7400 DCA I PTPCA /LOW ORDER 4 BITS INTO WORD 2 JMP PTPEND PTRGCH, 0 TAD PTPEOF SNA CLA JMP I PTRGCH CLA CLL CMA RTL /-3 DCA PTPEOF DCA PTR PTTIME, ISZ PTR /TIMEOUT LOOP FOR LOW SPEED READER JMP PTP232 ISZ PTPEOF /TIMES OUT IN 132 MS(PDP 8/E) OR 205 MS(PDP 8) JMP PTP232 TAD PTP232 JMP I PTRGCH /OVERFLOWED - PTPEOF IS NOW 0, RETURN ^Z PTP232, 232 /WASTE SOME TIME PTP177, 177 KSF JMP PTTIME /READER NOT READY - CONTINUE TIMEOUT KRB JMP I PTRGCH /RETURN WITH CHARACTER PTPERR, CLA CLL CML RAR /SIGNAL A "PERMANENT I/O ERROR" ON THE DEVICE JMP PTPXIT-2 PCDF, CDF 0 PTP336, 336 PTPWC, 0 PTPM3, -3 $$$$$$$ |
Added src/os8/uni/HANDLERS/PT8E.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | /1 HI SPEED READER/PUNCH HANDLER / / / / / / / / / /COPYRIGHT (C) 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 HI SPEED READER/PUNCH HANDLER *0 -2 DEVICE PT8E;DEVICE PTP;1020;0;ZBLOCK 2 DEVICE PT8E;DEVICE PTR;2010;112;ZBLOCK 2 PTVERSION="A&77 *200 /THIS IS THE REAL HIGH SPEED HANDLER. /HIGH SPEED PAPER TAPE HANDLER FOR BLEEP MONITOR /PACKS 3 CHARACTERS IN 2 WORDS ON INPUT, UNPACKS ON OUTPUT /PAGE RELOCATABLE PTP, PTVERSION CLA CLL CML /SET LINK ON TO INDICATE PUNCH JMS PSETUP /DO COMMON CRAP PTPLP, TAD I PTPCA JMS PTPPCH /FIRST CHAR IN LOW ORDER 8 BITS OF WORD 1 DCA PTR ISZ PTPCA PT7700, 7700 TAD I PTPCA JMS PTPPCH /SECOND CHAR IN LOW ORDER 8 BITS OF WORD 2 CLL RTR RTR TAD PTR RTR RTR /THIRD CHARACTER NOW IN AC JMS PTPPCH PTPEND, ISZ PTPCA PT70, 70 /JUST IN CASE WERE PUNCHING PG 7600 KEEP THIS LITERAL HERE KSF JMP PTPISZ /KEYBOARD FLAG OFF - DON'T WORRY ABOUT ^C PTPKRS, KRS AND PTP177 TAD PTPM3 SZA CLA /IS THERE A ^C IN THE TTY BUFFER? JMP PTPISZ /NO PTPCIF, CDF CIF 0 JMP I .+1 7600 PSETUP, 0 RDF /GET FIELD OF CALLING PROGRAM TAD PTPCIF DCA PTPXIT /SET UP RETURN SEQUENCE TAD I PTP AND PT70 TAD PCDF DCA PTPCDF RAR /GET LINK(1=PTP,0=PTR) TAD I PTP /GET FUNCTION WORD ISZ PTP SPA /CHECK CORRECT MODE JMP PTPERR /SIGNAL "UNRECOVERABLE DEVICE ERROR" AND PT7700 CMA /SET UP -(WORD COUNT)/2-1 DCA PTPWC TAD I PTP /SET UP STARTING ADDRESS ISZ PTP DCA PTPCA TAD I PTP PTPCDF, 0 /SET DATA FIELD TO ACCESS BUFFER PTPEOF=PTPCDF SNA CLA SZL JMP PTPKRS TAD PTP336 /INPUT INITIALIZATION - TYPE "^" AND WAIT TLS KSF JMP .-1 JMS PTRGCH /INITIALIZE THE PTR BUFFER CHAR 6032 /CLEAR AC AND KEYBOARD FLAG JMP PTPKRS /CHECK FOR ^C PTPISZ, ISZ PTPWC JMP I PSETUP /LOOP FOR BUFFER SIZE (128 WORDS) PTPRTN, TAD PTPEOF SZA CLA /DID WE RUN OUT OF TAPE? ISZ PTP ISZ PTP PTPXIT, HLT /EXIT CDF GOES HERE JMP I PTP PTPPCH, 0 PLS /NOTICE THE GLORIOUS LACK OF OVERLAP PSF JMP .-1 AND PT7400 JMP I PTPPCH PTPCA, 0 PTR, PTVERSION /*** CORRECT ENTRY IN MAIN ASSEMBLY IF THIS IS MOVED! CLA CLL TAD PTR DCA PTP JMS PSETUP /SET UP ADDRESS, COUNT, FIELDS PTRLP, JMS PTRGCH /READ FIRST CHARACTER OF 3 DCA I PTPCA JMS PTRGCH DCA PTPPCH JMS PTRGCH RTL RTL AND PT7400 TAD I PTPCA DCA I PTPCA /HIGH ORDER 4 BITS INTO WORD 1 TAD PTR /GET THE CHAR FROM THE PTR BUFFER RTR RTR RAR /PUT THE LOW ORDER BITS INTO AC 0-3 AND PT7400 TAD PTPPCH ISZ PTPCA PT7400, 7400 DCA I PTPCA /LOW ORDER 4 BITS INTO WORD 2 JMP PTPEND PTRGCH, 0 TAD PTPEOF SNA CLA JMP PT0BFR /MAKE SURE BUFFER IS ZEROED RFC DCA PTPEOF PTTIME, ISZ PTPEOF /THIS LOOP OVERFLOWS IN APPROX. 100 MS ON A PDP-8, JMP PGCHLP /72 MS ON A PDP-8/E TAD PTP232 /SEND ^Z TO BUFFER PT0BFR, DCA PTR JMP PTRXX /AND 0 GARBAGE CHARACTER PGCHLP, TAD PTPTMP DCA PTR PTP232, 232 PTP336, 336 /FALL THROUGH CONSTANTS TO STALL FOR TIME PTP177, 177 RSF JMP PTTIME /READER NOT READY - CHECK TIMING RRB /READER READY - READ CHAR PTRXX, DCA PTPTMP /BUFFER READER BY ONE CHARACTER TO ELIMINATE TAD PTR /GARBAGE CHARACTER AT END OF TAPE JMP I PTRGCH /AND RETURN PTPERR, CLA CLL CML RAR /SIGNAL A "PERMANENT I/O ERROR" ON THE DEVICE JMP PTPXIT-2 PCDF, CDF 0 PTPTMP, 0 PTPWC, 0 PTPM3, -3 $$$$$$$$ |
Added src/os8/uni/HANDLERS/RF08NS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | /3 RF08 NON SYSTEM HANDLER / NULL: / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / / SR RF08=1 /CHANGE TO 0 FOR DF32 HANDLER *0 -2 IFNZRO RF08 < DEVICE RF;DEVICE RF;4064;RF&177;ZBLOCK 2 > IFZERO RF08 < DEVICE DF;DEVICE DF;4124;DF&177;ZBLOCK 2 > DEVICE RF;DEVICE NULL;0240;NULL&177;ZBLOCK 2 SCA=7751 SWC=7750 RFVERSION="A&77 NULLVERSION="A&77 *200 INITLC, 0 /PATCH TO 232 TO HAVE NULL STORE ^Z IN BUFFER SYSER, CLA CLL CML RAR /4000 ISZ SYSCNT /TRY AGAIN? SKP CLA JMP SFIELD /WHY BOTHER CLA CLL CMA RTL TAD RF DCA RF /RESET PARAMETERS AND TRY AGAIN JMP RETRY T1, 0 T2, 0 CTLC, 0 KRS AND (177 TAD (-3 SNA CLA KSF JMP I CTLC CIFCDF, CIF CDF 0 /RETURN TO OS/8 IF USER TYPED ^C JMP I S7600 ZBLOCK 224-. IFNZRO .-224 <ADRERR,QQQQ> /ENTRY PT MUST BE RELATIVE 24 DF, RF, RFVERSION CLA CLL CMA RTL /-3 DCA SYSCNT /# TRYS ON ERROR RETRY, TAD I RF /HANDLER RUNS IN USER'S DATA FIELD RAL CLA RTL TAD S6603 DCA SFUN /EITHER A READ OR WRITE TAD I RF AND S70 DCA SFIELD /GET FIELD OF BUFFER TAD I RF RAL AND S7600 CIA DCA T1 /SET UP WORD COUNT CLA CMA ISZ RF TAD I RF DCA T2 /BUFFER ADDRESS-1 ISZ RF RDF TAD SCDF DCA RESRDF SCDF, CDF 0 TAD T1 DCA I (SWC TAD T2 DCA I (SCA RESRDF, HLT /RESTORE USER'S DATA FIELD IFZERO RF08 < TAD I RF RTL AND S3700 > TAD SFIELD 6615 /LOAD DISK EXTENDED MEMORY S7600, 7600 IFNZRO RF08 < TAD I RF RTR RTR AND S377 6643 /LOAD HIGH ORDER > TAD I RF RTR RTR RAR AND S7400 SFUN, HLT /BECOMES DISK IOT.(READ OR WRITE) RDF TAD CIFCDF DCA SFIELD IFZERO RF08 <6622> IFNZRO RF08 <6623> JMP .-1 JMS CTLC ISZ RF 6621 /SKIP ON ERROR IFNZRO RF08 <SKP /SENSE OF SKIP IS REVERSED> JMP SYSER ISZ RF SFIELD, HLT /RETURN TO PROPER FIELD 6601 /CLEAR TROUBLESOME FLAG JMP I RF IFZERO RF08 <S3700, 3700> IFNZRO RF08 <S377, 0377> NULL, NULLVERSION CLA RDF TAD CIFCDF DCA NULRET JMS CTLC TAD I NULL /GET FN WORD DCA SFUN ISZ NULL /POINT TO CORE LOC TAD I NULL /GET START OF BUFFER DCA T1 ISZ NULL /POINT TO BLOCK NUMBER ISZ NULL /POINT TO ERROR RETURN TAD SFUN SPA CLA JMP BYE /LEAVE BUFFER ALONE ON A WRITE TAD SFUN AND S70 /ISOLATE FIELD OF BUFFER TAD SCDF DCA NFIELD TAD SFUN CLL RAL AND S7600 /GET NO. OF WDS IN BUFFER CIA DCA T2 TAD INITLC NFIELD, HLT /GO TO FIELD OF BUFFER DCA I T1 /ZERO BUFFER ISZ T1 ISZ T2 JMP .-3 BYE, TAD SFUN RAL /PUT R/W BIT IN LINK CLA CML RAL /AC=1 IF READING SNA ISZ NULL /POINT TO GOOD RETURN IF WRITE NULRET, HLT /BACK TO USER'S DATA FIELD, INST FIELD JMP I NULL /RETURN SYSCNT, 0 S6603, 6603 S70, 70 S7400, 7400 $ |
Added src/os8/uni/HANDLERS/RF08SY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | /2 RF08 SYSTEM HANDLER / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / /MAINTENANCE RELEASE CHANGES: /1. REMOVED SOFSET /2. CHANGED LENGTH OF PLATTER DF32=0 RF08=1 VERSION="B&77 *0 -1 DEVICE RF08;DEVICE SYS;4064;2007;0;1777 STARTB-ENDB-1 NOPUNC *6604 ENPUNC STARTB, NOP /FOR "SWAP" B6653, 6653 B7647, 7647 B7577, 7577 B200, 200 B7605, 7605 B7751, 7751 ZBLOCK 6622-. TAD I B6653 CDF 10 DCA I B7647 CDF 0 ISZ B6653 ISZ B7647 JMP .-6 /MOVE FIELD 1 RESIDENT UP IFNZRO RF08 <6643> 6615 7600 TAD B7577 DCA I B7751 TAD B200 6603 /NOW READ IN FIELD 0 RESIDENT FROM RECORD 1/2 IFNZRO RF08 <6623> IFNZRO DF32 <6622> JMP .-1 6621 IFNZRO RF08 <SKP> HLT /ERROR READING SYSTEM IN ENDB, JMP I B7605 /BOOTSTRAP FOR DISK MONITOR IS AS FOLLOWS: / LOCATION CONTENTS / 7750 7600 / 7751 6603 / 7752 6622 / 7753 5352 / 7754 5752 *200 NOPUNCH *7600 ENPUNCH ZBLOCK 7 SHNDLR, VERSION CLA CLL CMA RTL /-3 DCA SYSCNT /# TRYS ON ERROR TAD I SHNDLR RAL CLA RTL TAD S6603 DCA SFUN /EITHER A READ OR WRITE TAD I SHNDLR AND S70 DCA SFIELD /GET FIELD OF BUFFER TAD I SHNDLR RAL AND S7600 CIA DCA SWC /SET UP WORD COUNT CLA CMA ISZ SHNDLR TAD I SHNDLR DCA SCA /BUFFER ADDRESS-1 ISZ SHNDLR IFNZRO DF32 < TAD I SHNDLR RTL AND S3700> TAD SFIELD 6615 /LOAD DISK EXTENDED MEMORY S7600, 7600 IFNZRO RF08 < TAD I SHNDLR RTR RTR AND S377 6643 /LOAD HIGH ORDER> TAD I SHNDLR RTR RTR RAR AND S7400 SFUN, HLT /BECOMES DISK IOT.(READ OR WRITE) RDF TAD SCIF DCA SFIELD IFNZRO DF32 <6622> IFNZRO RF08 <6623> JMP .-1 ISZ SHNDLR 6621 /SKIP ON ERROR IFNZRO RF08 <SKP /SENSE OF SKIP IS REVERSED> JMP SYSER ISZ SHNDLR SFIELD, HLT /RETURN TO PROPER FIELD 6601 /CLEAR TROUBLESOME FLAG JMP I SHNDLR ZBLOCK 2 SYSER, CLA CLL CML RAR /4000 ISZ SYSCNT /TRY AGAIN? SKP CLA JMP SFIELD /WHY BOTHER CLA CLL CMA RTL TAD SHNDLR DCA SHNDLR /RESET PARAMETERS AND TRY AGAIN IFNZRO RF08 <IFNZRO .-7700 <NZERR>; SKP; HLT> JMP SHNDLR+3 SCIF, CIF 0 SYSCNT, 0 IFNZRO DF32 <IFNZRO .-7700 <NZERR>; SKP; HLT> S6603, 6603 S70, 70 S7400, 7400 IFNZRO DF32 <S3700, 3700> IFNZRO RF08 <S377, 377> SCA=7751 SWC=7750 $ |
Added src/os8/uni/HANDLERS/RK08NS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | /3 RK8 NON SYSTEM HANDLER / / / / / / / / / /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. / / / / / / / / / / *0 -4 DEVICE RK01;DEVICE RKA0;4050;20;ZBLOCK 2 DEVICE RK01;DEVICE RKA1;4050;21;ZBLOCK 2 DEVICE RK01;DEVICE RKA2;4050;22;ZBLOCK 2 DEVICE RK01;DEVICE RKA3;4050;23;ZBLOCK 2 DLDC=6732 DCLS=6742 DRDS=6741 DSKD=6745 DSKE=6747 DCLA=6751 DLWC=6753 DLCA=6755 DLDR=6733 RKVERSION="A&77 /V3 CHANGES: /1. VERSION # IS NOW 1 /2. A FULL 4K READ OR WRITE IS NOW LEGAL *200 /THE ENTRY POINTS FOR RK8 ARE SET AT 20-23. VITAL!! RLOC, 0 /FOR BUFFER ADDRESS RREC, 0 /HOLDS RECORD NO. R76, 76 RDLDR, DLDR RKANO, 0 RKAISZ, ISZ RKANO RBLKCT, 0 /HOLDS TOTAL WORD COUNT RERRCT, 0 /# ERROR TRIES R177, 177 R40, 40 RM3, -3 R400, 400 R7400, 7400 RKA, 0 /HOLDS ARGUMENT ADDRESS R34, 34 RZERO, RKVERSION IFNZRO .-220 <ADRERR,QQQ> RKA0, ISZ RKANO RKA1, ISZ RKANO RKA2, ISZ RKANO RKA3, ISZ RKANO R7600, 7600 TAD RM3 DCA RERRCT /3 TRIES ON ERROR TAD RKANO /THIS CODE RESTORES THE ISZ RKANO CMA /WHICH WAS DESTROYED IN THE CALL TAD RKATAD DCA RFUNCT CLA CLL CML RTR TAD RFUNCT /FORM DCA RKAN,WHERE RKAN WAS CALLED DCA RKADCA RDF TAD RCDIF /RESTORE TO PROPER FIELD DCA REXIT RFUNCT, HLT /CONTAINS TAD RKAN WHEN EXECUTED DCA RKA /SO WE SAVE ADDRESS OF ARGUMENTS TAD RKAISZ /AND NOW RESTORE THE ISZ RKANO RKADCA, HLT TAD I RKA /FUNCTION WORD DCA RFUNCT ISZ RKA CLA CMA /BUFFER ADDRESS -1 TAD I RKA DCA RLOC ISZ RKA TAD I RKA /RECORD NUMBER DCA RREC TAD RFUNCT /NOW FORM RK8 IOT FROM FUNCTION. CLL RAL /READ/WRITE TO LINK AND R7600 /ISOLATE WORD COUNT DCA RBLKCT RTL /READ=6733,WRITE=6735 TAD RDLDR DCA RINST RLOOP, TAD RLOC /LOAD CURRENT ADDRESS DLCA TAD RBLKCT /TEST WORD COUNT FOR SIZE. RKATAD, TAD R7600 /FULL=256, HALF=128 SZA CLA TAD R7600 TAD R7600 DLWC /LOAD WORD COUNT TAD RFUNCT /LOADING COMMAND WORD WITH FIELD CMA RAR /AND DISK SELECTION AND R34 TAD RKANO CMA RAL AND R76 DLDC DCLS /CLEARS SELECT ERROR IF STILL UP TAD RREC RINST, HLT /GETS DISK IOT DSKD /TEST COMPLETION FLAG SKP CLA /NOT DONE YET JMP RCTLC /DONE. CHECK FOR ^C DSKE /IS ERROR UP? JMP .-4 RERROR, ISZ RERRCT /ERROR BUMP COUNT JMP .+4 DCA RKANO /IT'S ALL OVER. CLEAR FOR RECALL CLA CLL CML RAR JMP RETRN+1 /FATAL ERROR DRDS /LOOK AT STSTUS AND R40 /TRACK NOT FOUND BIT ISZ RZERO /CARRY OVER FROM SYSTEM HANDLER JMP .-1 SNA CLA JMP RLOOP /TRY AGAIN DCLA /RECALIBRATE DSKD JMP .-1 JMP RLOOP /AND TRY AGAIN RNEXT, DSKE /TRANSFER DONE. IS ERROR UP? SKP JMP RERROR /YEP.TOUGH LUCK ISZ RREC /BUMP RECORD NUMBER TAD RLOC TAD R400 /BUMP CURRENT ADDRESS DCA RLOC TAD RBLKCT /DONE WITH ALL TRANSFERS? SNA JMP RDONE /V3 0 OK HERE CLL CML TAD R7400 SZL SNA JMP RDONE DCA RBLKCT /NO..UPDATE TOTAL WORD COUNT JMP RLOOP /AND DO THE TRANSFER RDONE, CLA DCA RKANO /CLEAR FOR RECALL RETRN, ISZ RKA ISZ RKA REXIT, HLT JMP I RKA RCTLC, KRS /TEST FOR ^C IN KEYBOARD BUFFER AND R177 /WITH THE FLAG UP TAD RM3 SNA CLA KSF JMP RNEXT /NO ^C, KEEP GOING RCDIF, CIF CDF 0 JMP I R7600 $ |
Added src/os8/uni/HANDLERS/RK08SY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | /10 OS/8 RK8 SYSTEM HANDLER V3D / / / / / / / / / /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. / / / / / / / / / / /SYSTEM HANDLER ALSO HAS RESIDENT THE NONSYSTEM HANDLER RKA1: / SOFSET=7747 RKVERSION="D&77 DLDA=6731 /LOAD DISK ADDRESS (MAINT ONLY) DLDC=6732 /LOAD COMMAND REGISTER /0: ENABLE CHANGE IN INTERRUPT STATUS /1: ENABLE PROGRAM INTERRUPT ON TRANSFER DONE /2: ENABLE INTERRUPT ON ERROR /3: UNUSED /4: SEEK TRACK AND SURFACE ONLY /5: ENABLE READ/WRITE OF 2 HEADER WORDS /6-8: EXTENDED MEMORY ADDRESS /9-10: DISK FILE NUMBER /11: UNUSED DLDR=6733 /LOAD DISK ADDRESS AND READ, THEN CLEAR AC /0-7: TRACK ADDRESS /8: SURFACE BIT /9-11: SECTOR ADDRESS DRDA=6734 /READ DISK ADDRESS DLDW=6735 /LOAD DISK ADDRESS AND WRITE, THEN CLEAR AC DRDC=6736 /READ DISK COMMAND REGISTER DCHP=6737 /LOAD DISK ADDRESS AND CHECK PARITY DRDS=6741 /READ DISK STATUS REGISTER /0: ERROR /1: TRANSFER DONE /2: CONTROL BUSY ERROR /3: TIME OUT ERROR /4: PARITY OR TIMING ERROR /5: DATA RATE ERROR /6: TRACK ADDRESS ERROR /7: SECTOR NO GOOD ERROR /8: WRITE LOCK ERROR /9: TRACK CAPACITY EXCEEDED ERROR /10: SELECT ERROR /11: BUSY DCLS=6742 /CLEAR STATUS REGISTER DMNT=6743 /LOAD MAINTENANCE REGISTER /SEE PAGE 7-145 IN 1972 SMALL COMPUTER HANDBOOK DSKD=6745 /SKIP ON DISK DONE DSKE=6747 /SKIP ON DISK ERROR DCLA=6751 /CLEAR ALL DRWC=6752 /READ WORD COUNT REGISTER DLWC=6753 /LOAD WORD COUNT REGISTER DLCA=6755 /LOAD CURRENT ADDRESS REGISTER DRCA=6757 /READ CURRENT ADDRESS REGISTER *0 -3 DEVICE RK8;DEVICE SYS;4051;2007;0;6260 DEVICE RK8;DEVICE RKA0;4051;1007;0;6260 DEVICE RK8;DEVICE RKA1;4051;RKA1&177+1000;0;6260 /V3D CHANGES: /FIXED BUG CONCERNING RETRY COUNT IF LINK SET ON CALL /REMOVED 'SOFSET' BOOT-ENDB-1 NOPUNC *1 ENPUNC BOOT, TAD I BOOTX1 DCA I BOOTX2 TAD I BOOTX3 CDF 10 DCA I BOOTX4 CDF 0 TAD BOOTX2 SZA CLA JMP BOOT JMP BGETUT BOOTX1, 200 BOOTX2, 7577 BOOTX3, 47 BOOTX4, 7646 BGETUT, DRDC RAR AND BOOT3 DCA I BOOTUT JMP I B7605 BOOT3, 3 BOOTUT, DEFUNIT ZBLOCK 27-. B7605, 7605 DSKD /MUST LOAD OVER LOC. 30 JMP .-1 /MUST LOAD OVER 31 ENDB, JMP BOOT /THE BOOTSTRAP FOR THE RK8 IS AS FOLLOWS: (UNIT 0) / LOCATION CONTENTS / 30 6733 / 31 5031 /LOAD ADDRESS 30 AND START /THE BOOTSTRAP FOR OTHER UNITS IS AS FOLLOWS: / 26 7604 / 27 6732 / 30 6733 / 31 5031 /LOAD ADDRESS 26, PUT UNIT NUMBER IN SWITCH REGISTER BITS 9-10, /CLEAR, CONTINUE *200 NOPUNCH;*7600;ENPUNCH ZBLOCK 7 RK8, RKVERSION CLA TAD DEFUNIT /USE DEFAULT UNIT FOR SYSTEM HANDLER JMP COMN DEFUNIT,0 RKBAD, STL CLA RAR /4000 SKP RKOVER, ISZ RK8 /POINT TO GOOD RETURN SFIELD, HLT /CONTAINS CIF CDF TO USER'S FIELD JMP I RK8 /RETURN IFNZRO .&177-21 <BADLOC,XXXX> RKA1, RKVERSION CLA TAD RKA1 DCA RK8 CLA IAC COMN, DCA RKANO CLL STA RTL /V3D DCA RKCNT /SET # OF RETRIES ON AN ERROR TO 3 RDF TAD LCIFCDF /CALLING FIELD FOR RETURN DCA SFIELD RKRETRY,TAD I RK8 /GET FN WORD AND L70 /ISOLATE FIELD OF BUFFER TAD RKANO TAD RKANO /INCLUDE UNIT # (TIMES 2) DLDC /SET FIELD TAD I RK8 /GET FN WORD BACK RAL /MOVE R/W BIT TO LINK AND L7600 /ISOLATE # OF WORDS TO READ SZA CIA /NEGATE DLWC /LOAD WORD COUNT THEN CLEAR AC RTL /MOVE R/W BIT TO AC 10 TAD LDLDR DCA RKINST /CREATE READ (6733) OR WRITE (6735) ISZ RK8 /POINT TO BUFFER ADDRESS STA TAD I RK8 /GET CURRENT ADDRESS-1 DLCA /LOAD CURENT ADDRESS AND CLEAR AC ISZ RK8 /POINT TO BLOCK # DCLS /CLEAR STATUS REGISTER DSKE /CHECK FOR NON-EXISTENT DISK ERROR L7760, SMA SZA SNL CLA /OK, BUT SKIP ALWAYS JMP RKBAD /IT'S BAD /V3D TAD RKANO /! CAN'T HAVE OFFSETS ON OTHER UNITS THAN 0 /V3D SNA CLA /V3D TAD SOFSET TAD I RK8 /GET BACK # ISZ RK8 /POINT TO ERROR RETURN RKINST, HLT /GO (EITHER 6733 OR 6735) SZA CLA /CHECK FOR NO DISK AT ALL JMP RKBAD /IOT DIDN'T CLEAR AC /THE ABOVE TWO LINES ARE USELESS. HOW DID HE BOOTSTRAP IF DISK WASN'T THERE? DSKD /WAIT FOR DONE JMP .-1 DSKE JMP RKOVER /NO ERROR L70, 70 L20, 20 L7600, 7600 L4, 4 SKP CLA IFNZRO .-7701 <NZERR,XXX> HLT /SAFETY HALT AT 7701 DRDS /READ STATUS REGISTER AND L4 /CHECK FOR TRACK OVERFLOW SZA CLA JMP RKTKOV ISZ RKCNT /SOME OTHER ERROR - BADNESS [SIC] JMP RKOK /TRY AGAIN JMP RKBAD /3 TRIES IS ENOUGH RKOK, DRDS /READ STATUS REGISTER AND L40 /TRACK SEEK ERROR? DCLS /CLEAR STATUS REGISTER SNA CLA JMP RKBACK DCLA /YES - RECALIBRATE DSKD /WAIT 'TILL DONE JMP .-1 RKBACK, CLL STA RTL /-3 TAD RK8 DCA RK8 /POINT BACK TO FUNCTION WORD JMP RKRETRY /GO TRY AGAIN RKTKOV, DCLS /CLEAR STATUS REGISTER DRDA /READ TRACK ADDRESS STUFF AND L7760 /ISOLATE JUST TRACK (NEEDED ??) TAD L20 /BUMP TRACK NUMBER BY 1 JMP RKINST /GO BACK AND CONTINUE TRANSFER LCIFCDF,CIF CDF 0 LDLDR, DLDR L40, 40 RKCNT, 0 RKANO, 0 / MUST NOT GO INTO LOCATION 7744 IFZERO .&177-145&4000 <TOOBIG,XXXX> $ |
Added src/os8/uni/HANDLERS/RK8ENS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 | /1 RK8E NON-SYSTEM HANDLER FOR OS/8 / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / /DEC-S8-URK8B-A-LA HJ /COPYRIGHT 1973 /DIGITAL EQUIPMENT CORPORATION /MAYNARD, MASSACHUSETTS 01754 /JANUARY 22, 1973 /ONE RK8E IS TREATED AS TWO LOGICAL DISKS /EACH OF 3248 OS/8 BLOCKS. /THIS HANDLER CONTAINS ENTRY POINTS FOR THE 8 LOGICAL UNITS. /(RKA0,RKB0,RKA1,RKB1,RKA2,RKB2,RKA3,RKB3) DCLR=6742 DLAG=6743 DLDC=6746 DRST=6745 DSKP=6741 DLCA=6744 *0 -10 DEVICE RK05;DEVICE RKA0;4230;20;ZBLOCK 2 DEVICE RK05;DEVICE RKB0;4230;21;ZBLOCK 2 DEVICE RK05;DEVICE RKA1;4230;22;ZBLOCK 2 DEVICE RK05;DEVICE RKB1;4230;23;ZBLOCK 2 DEVICE RK05;DEVICE RKA2;4230;24;ZBLOCK 2 DEVICE RK05;DEVICE RKB2;4230;25;ZBLOCK 2 DEVICE RK05;DEVICE RKA3;4230;26;ZBLOCK 2 DEVICE RK05;DEVICE RKB3;4230;27;ZBLOCK 2 VERSION="A&77 *200 /THE FOLLOWING MUST REMAIN HERE BECAUSE OF THE R200 REF. R37, 37 /USED TO CHECK FOR CYLINDER CHANGE RKEBLK, 0 /12 BITS OF BLOCK NUMBER CHKHED, 0 /CHECK HEADER FLAG RKEARG, 0 /HOLDS RETURN ADDRESS RKENO, 0 /HOLDS ENTRY POINT COUNT PAGCNT, 0 /HOLDS REMAINING PAGE COUNT RKEISZ, ISZ RKENO /TO PUT BACK OVER THE EP ADDR CTRLC, TAD R200 /TO IGNORE PARITY KRS /READ THE KEYBOARD TAD R7575 /SUBTRACT ^C SNA CLA KSF /IS KEYBOARD FLAG UP? JMP RWAIT /NO RCIF, CDF CIF 0 JMP I R7600 /BOOTSTRAP /NOTE: A LOCATION CAN BE EEKED OUT BY USING RKA0 BETTER RERRCT, 0 /HOLDS RETRY COUNT ZBLOCK 220-. /PAD ENTRY POINTS TO 220 RKA0, VERSION RKB0, ISZ RKENO /THE ISZ'S SET UP A COUNT OF RKA1, ISZ RKENO /OF WHICH ENTRY POINT WE CAME IN RKB1, ISZ RKENO RKA2, ISZ RKENO RKB2, ISZ RKENO RKA3, ISZ RKENO RKB3, ISZ RKENO R400, 400 /AN INNOCUOUS AND INSTRUCTION WHICH /IS REFERENCED BY A TAD. CLA CLL CMA RTL /AC=-3 DCA RERRCT /RETRY 3 TIMES TAD RKENO /7-EP NUMBER CMA /EP-8 TAD RKETAD /ADD ON INSTRUCTION /WHICH REFERENCES THE 400 TO GENERATE A /TAD CORRECT ENTRY POINT INSTRUCTION. DCA GETENT /WE EXECUTE TO GET USERS ADDRESS CLA CLL CML RTR /AC=2000 TAD GETENT /GENERATE A DCA INTO ENTRY POINT INSTRUCTION DCA RKECMD /THIS IS EXECUTED TO REPLACE ISZ RKENO RDF /GET USERS DATA FIELD TAD RCIF /BUILD A CIF FOR RETURNING DCA REXIT /STORE IT INTO THE EXIT CODE GETENT, HLT /WILL BE A TAD "ENTRY POINT" /WILL SAVE UNIT INFO HERE FOR ERRORS DCA RKEARG /SAVE USERS ADDR IN COMMON LOCATION DCA RKENO /ZERO COUNT FOR NEXT TIME TAD RKEISZ /GET THE ISZ RKENO RKECMD, HLT /THE DCA ENTRY POINT IS PUT HERE /AND THIS LOCATION IS USED FOR THE RK8E COMMAND RETRY, TAD RKEARG /AC=-2 IF ERROR RETRY DCA RKEARG TAD GETENT AND R6 /GET THE UNIT NUMBER DCA RKECMD /SET UP UNIT FOR COMMAND TAD GETENT RAR /PUT HI/LOW LOGICAL DISK BIT IN LINK SZL CLA TAD R6260 /DISPLACEMENT TO 2ND HALF OF DISK DCA RKA0 /NICE PLACE FOR A CONSTANT TAD I RKEARG /GET ARG1 AND R4070 /GET R/W AND DF BITS TAD RKECMD /GET UNIT NUMBER DCA RKECMD /BASE COMMAND TO RK8E(DLDC) TAD I RKEARG /GET ARG1 AGAIN TAD I RKEARG /GET ARG1 AGAIN ISZ RKEARG /POINT TO ARG2 AND R7600 CIA /TO MAKE 0 LOOK LIKE 40 PAGES DCA PAGCNT /SAVE PAGE COUNT TAD I RKEARG /GET ARG2 ISZ RKEARG /POINT TO ARG3 DLCA /LOAD CURRENT ADDRESS REGISTER TAD I RKEARG /GET ARG3 CLL TAD RKA0 /SYS OR RKB0 DISPLACMENT DCA RKEBLK /LOW PART OF RK8E BLOCK NUMBER SZL /STILL OFF IF BELOW BLOCK 10000 OVRFLO, ISZ RKECMD /TURN ON EXTENDED BIT IF OVERFLOWED RELOOP, DCA CHKHED /SET CHECK HEADER FLAG TO EITHER /0 OR 4000(WHICH GETS RTR'D BEFORE USED) /AND CAUSES EITHER A "DATA" OR "ALL" /TRANSFER DCLR /CLEAR STATUS REGISTER TAD PAGCNT /TEST TO SEE IF ONLY 1 PAGE WANTED TAD R200 SNA CLA RKETAD, TAD R400 /7600 WAS IN PAGCNT TAD CHKHED /ADD IN CHECK HEADER FLAG CLL RTR /SHIFT TO CORRECT BITS TAD RKECMD /ADD IN BASE COMMAND DLDC /LOAD COMMAND REGISTER TAD RKEBLK DLAG /LOAD BLOCK REGISTER AND GO RWAIT, DSKP /WAIT ON FLAG JMP CTRLC /CHECK FOR CONTROL C WHILE WAITING DRST /READ COMPLETION REGISTER CLL RAL /GET RID OF SUCCESS BIT SZA /AND SEE IF ANYTHING LEFT JMP RERROR /AN ERROR /IF THERE WAS NO ERROR L=1 BECAUSE DONE FLAG TAD PAGCNT /CHECK TO SEE IF DONE TAD R400 /ADD 2 PAGES ONTO TOTAL SNL JMP RKDONE /NO MORE TO DO DCA PAGCNT /SAVE FOR NEXT TIME TAD RKEBLK CMA /THE R37 MUST REMAIN AT 200 SO THE FOLLOWING IS A 200 R200, AND R37 /IF BLOCK IS AT A 37 MAKE /NEXT OPERATION DO A CHECK HEADER SZA CLA STL RAR /SET AC TO "ALL" FLAG ISZ RKEBLK /BUMP BLOCK NUMBER JMP RELOOP /TRANSFER SOME MORE JMP OVRFLO /PAST BLOCK 7777-SET EXTENDED BIT RERROR, AND R1002 /AC WAS RAL'D AND WE WANT TO SEE IF /DRIVE SEEK FAILED OR CYLINDER ADDR ERROR SNA CLA JMP RKTST3 /WE TRY 3 TIMES /WE HAVE TO RECALIBRATE DRIVE DCLR /CLEAR STAUS REGISTER STL RTL /AC=2 DCLR /RECALIBRATE DRIVE DSKP /WAIT ON FLAG JMP .-1 DCLR /CLEAR STATUS REGISTER DRST /WAIT FOR STATUS TO CLEAR SZA CLA JMP .-2 /STILL DOING RECALIBRATE RKTST3, CLA CLL CMA RAL /AC=-2 ISZ RERRCT /SKIP IF WE TRIED 3 TIMES JMP RETRY /TRY AGAIN JMP .+3 /ERROR EXIT RKDONE, ISZ RKEARG /NORMAL RETURN R7600, 7600 /GROUP 2 CLA ISZ RKEARG /IF JUMPED TO HERE- ERROR RETURN REXIT, HLT /RESET USERS INST FIELD- WE NEVER TOUCHED DF JMP I RKEARG /EXIT R6260, 6260 /SIZE OF ONE LOGICAL DISK R4070, 4070 /USED TO GET READ/WRITE AND DF BITS R1002, 1002 / " TO CHECK FOR RECALIBRATE ERRORS R6, 6 /TO PEEL OUT UNIT NUMBER R7575, 7575 /- ^C CONSTANT $$$$ |
Added src/os8/uni/HANDLERS/RK8ESY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 | /3 RK8E SYSTEM HANDLER FOR OS/8 BUILD / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / VERSION="C&77 *0 DECIMAL;RKLEN=3248;OCTAL -3 DEVICE RK8E;DEVICE SYS;4231;2007;0;RKLEN DEVICE RK8E;DEVICE RKA0;4231;1007;0;RKLEN DEVICE RK8E;DEVICE RKB0;4231;SHNDL1&177+1000;0;RKLEN /ONE RK8E IS TREATED AS TWO LOGICAL DISKS /EACH OF 3248 OS/8 BLOCKS. /THIS HANDLER CONTAINS ENTRY POINTS FOR THE SYSTEM DEVICE /AND RKA1. /THIS HANDLER ALLOWS BOOTING OFF OF ANY UNIT DCLR=6742 DLAG=6743 DLDC=6746 DRST=6745 DSKP=6741 DLCA=6744 DMAN=6747 RKEBLK=7750 /12 BITS OF BLOCK NUMBER SERRCT=7751 /HOLDS RETRY COUNT PAGCNT=7752 /PAGE COUNT RKECMD=7753 /BASE OF DLDC COMMAND CHKHED=7754 /CHECK HEADER FLAG /MAINTENANCE RELEASE CHANGES: /1. FIXED BUG RE INTERACTION WITH NON-SYSTEM HANDLER / [APRIL DSN] BOOT-BLAST RELOC 0 BOOT, TAD I BOOTX1 DCA I BOOTX2 TAD I BOOTX3 CDF 10 DCA I BOOTX4 CDF 0 TAD BOOTX2 SZA CLA JMP BOOT JMP I B7605 BOOTX1, 177 BOOTX2, 7577 BOOTX3, 46 BOOTX4, 7646 ZBLOCK 30-. /DSKP GOES OVER 30 DSKP JMP .-1 AND RK6 DCA I RKUNIT JMP BOOT RK6, 6 RKUNIT, SYSUNT+400 /CHANGED BEFORE IT IS MOVED B7605, 7605 BLAST, RELOC /THE BOOTSTRAP IS RK8E ONLY /30 6743 /31 5031 /LOAD ADDRESS 30 AND START /BOOTSTRAP FOR OTHER UNITS: / 25 7604 / 26 6746 / 27 6743 / 30 7604 / 31 5031 /LOAD ADDRESS 25, PUT UNIT # IN BITS 9&10 OF SWITCH REGISTER, /CLEAR CONTINUE. *200 RELOC 7600 ZBLOCK 7 SHNDLR, VERSION /SYSTEM HANDLER ENTRY POINT CLA CLL /GUARD AGAINST RANDOM AC TAD SHNDLR DCA SHNDL1 /SETUP COMMON EXIT AND PARM ADDR'S JMP SHNDC /JUMP TO COMMON CODE /VARIOUS CONSTANTS TO PAD E.P. FOR RKA1 TO 7621 S6260, 6260 /SIZE OF ONE LOGICAL DISK S4070, 4070 /USED TO GET READ/WRITE AND DF BITS S3700, 3700 / " TO GET PAGE COUNT SCIF, CIF 0 / " TO RESTORE USERS FIELD S37, 37 /USED TO CHECK FOR CYLINDER CHANGE IFNZRO .-7621 <ERROR1, BARF> SHNDL1, VERSION /2ND E.P. FOR RKB0 AND TEMPORARY CLA /GUARD AGAINST NON-ZERO AC TAD S6260 /RKB1 IS SECOND HALF OF PACK SHNDC, DCA SHNDLR /SET BLOCK DISPLACEMENT ACCORDING TO SYS OR RKB0 CLA CLL CMA RTL /AC=-3 DCA SERRCT /RETRY COUNT RDF TAD SCIF DCA SFIELD /RESET USER INST FIELD FOR EXIT RETRY, TAD SHNDL1 /AC=-2 IF ERROR ENRTY DCA SHNDL1 TAD I SHNDL1 /GET ARG1 AND S4070 /GET R/W AND DF BITS TAD SYSUNT DCA RKECMD /BASE COMMAND TO RK8E(DLDC) TAD I SHNDL1 /GET ARG1 AGAIN ISZ SHNDL1 /POINT TO ARG2 AND S3700 SNA STL CLA RAR /4000 DCA PAGCNT /SAVE PAGE COUNT TAD I SHNDL1 /GET ARG2 ISZ SHNDL1 /POINT TO ARG3 DLCA /LOAD CURRENT ADDRESS REGISTER TAD I SHNDL1 /GET ARG3 CLL TAD SHNDLR /SYS OR RKB0 DISPLACMENT DCA RKEBLK /LOW PART OF RK8E BLOCK NUMBER SZL /STILL OFF IF BELOW BLOCK 10000 OVRFLO, ISZ RKECMD /TURN ON EXTENDED BIT IF OVERFLOWED RELOOP, DCA CHKHED /SET CHECK HEADER FLAG TO EITHER /0 OR 4000(WHICH GETS RTR'D BEFORE USED) /AND CAUSES EITHER A "DATA" OR "ALL" /TRANSFER TAD PAGCNT /TEST TO SEE IF ONLY 1 PAGE WANTED AND S7600 SNA CLA TAD S400 /100 WAS IN PAGCNT TAD CHKHED /ADD IN CHECK HEADER FLAG CLL RTR /SHIFT TO CORRECT BITS TAD RKECMD /ADD IN BASE COMMAND DLDC /LOAD COMMAND REGISTER TAD RKEBLK DLAG /LOAD BLOCK REGISTER AND GO DSKP /WAIT ON FLAG JMP .-1 DRST /READ COMPLETION REGISTER CLL RAL /GET RID OF SUCCESS BIT SZA CLA /AND SEE IF ANYTHING LEFT JMP SERROR /AN ERROR IFNZRO .-7700 <ERROR2, DOUBLE BARF> SKP /PROTECTION AGAINST JMS I 7700 FIELD 0 HLT /HE'S HAD IT TAD PAGCNT TAD S7600 SPA SNA JMP RKDONE DCA PAGCNT TAD RKEBLK CMA AND S37 /IF BLOCK IS AT A 37 MAKE /NEXT OPERATION DO A CHECK HEADER SZA CLA STL RAR /SET AC TO "ALL" FLAG ISZ RKEBLK /BUMP BLOCK NUMBER JMP RELOOP /TRANSFER SOME MORE JMP OVRFLO /PAST BLOCK 7777-SET EXTENDED BIT /RECALIBRATE ON ALL ERRORS SERROR, DCLR /CLEAR STATUS REGISTER STL RTL /AC=2 DCLR /RECALIBRATE DRIVE DSKP /WAIT ON FLAG JMP .-1 DCLR /CLEAR STATUS REGISTER DRST /WAIT FOR STATUS TO CLEAR SZA CLA JMP .-3 /V3C STILL DOING RECALIBRATE CLA CLL CMA RAL /AC=-2 ISZ SERRCT /SKIP IF WE TRIED 3 TIMES JMP RETRY /TRY AGAIN JMP .+3 /ERROR EXIT RKDONE, ISZ SHNDL1 /NORMAL RETURN S7600, 7600 /GROUP 2 CLA ISZ SHNDL1 /IF JUMPED TO HERE- ERROR RETURN SFIELD, HLT /RESET USERS INST FIELD- WE NEVER TOUCHED DF JMP I SHNDL1 /EXIT S400, 400 / " FOR 128 WORD TRANSFER MODE(RTR'D IN CODE) SYSUNT, 0 /SYSTEM DEV UNIT # (SET BY BOOTSTRAP) RELOC $ |
Added src/os8/uni/HANDLERS/RL0.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 | /RL0: RL01 DRIVE 0 NON-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 DRIVE 0 NON-SYSTEM HANDLER VERSION="A&77 /NOTES: /1. PRE-OMNIBUS COMPUTERS NOT SUPPORTED. /EDIT HISTORY: /13-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 /BAD BLOCK LIST FORMAT: /WORD CONTENTS /0 ID (IDENTIFICATION CODE) /1 BAD BLOCKS FOR DEVICE A (ASCENDING ORDER) /... ... /20 0 (TERMINATOR FOR LIST A) /21 BAD BLOCKS FOR DEVICE B (ASCENDING ORDER) /... ... /40 0 (TERMINATOR FOR LIST B) /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 DEVICES PER HANDLER /FORMAT OF ENTRIES IN HEADER BLOCK: /WORD DESCRIPTION /0 GROUP NAME (4 CHAR) /2 DEVICE NAME (4 CHAR) /4 DCB WORD FOR AN RL (TYPE 26) DIRECTORY DEVICE /5 OFFSET TO ENTRY POINT, 2-PAGE INDICATOR /6 0 (UNUSED WORD) /7 0 TO REPRESENT NON-SYSTEM DEVICE DRIVE=0 DEVICE RL0;DEVICE RL0A;4260;RLA&177+4000;0;0 DEVICE RL0;DEVICE RL0B;4260;RLB&177+4000;0;0 /HANDLER CODE *200 /FIRST PAGE /DATA A17, 17 A47, 47 A175, 175 A200, 200 A377, 377 A7751, 7751 BASE, TAD BBL+1 ABLOCK, BLOCK-MAIN AMA, MA-MAIN /RELATIVE ADDR OF MA ASECT, SECTOR-MAIN ATRACK, TRACK-MAIN AERROR, ERROR-MAIN /SET UP ARGUMENTS BY CALLING 2ND PAGE SUBROUTINE SET, TAD OFFSET /INITIALIZE MAPPING (BELOW) BSW CLL RTL /(0 OR 20: DEVICE A OR B) TAD BASE DCA MAP TAD RLB /ADDR OF ARGS JMS I GO /SETUP (AC NON-ZERO) /MAP NEXT BLOCK AROUND ANY BAD BLOCKS BELOW IT MAP, TAD /INITIALIZED ABOVE SNA /0 TERMINATES LIST JMP MAPPED STL CIA /13-BIT NEGATE TAD I ABLOCK /COMPARE WITH BLOCK SZL CLA JMP MAPPED /BAD BLOCK IS ABOVE CURRENT BLOCK ISZ MAP /TRY NEXT BAD BLOCK ALSO NEXT, ISZ I ABLOCK /INCREMENT CURRENT BLOCK NUMBER, /EITHER DURING /BAD BLOCK MAPPING OR AFTER SUCCESSFUL TRANSFER /OF TWO SECTORS (PAGES) WITH MORE TO GO JMP MAP /CONTINUE MAPPING JMP I AERROR /ERROR ON BLOCK OVERFLOW ZBLOCK 240+DRIVE-. /UNUSED /ENTRY POINT FOR DEVICE B RLB, VERSION AC0004 /TRACK OFFSET WILL BE 400 JMP START /SKIP AROUND RLA ENTRY POINT OFFSET, 0 /TRACK OFFSET FOR DEVICE (0 OR 400) /ENTRY POINT FOR DEVICE A RLA, VERSION A7600, 7600 /=CLA TAD RLA /TRANSFER CALLING ADDR DCA RLB START, BSW /SET OFFSET TO 0 IF DEV A, 400 IF DEV B DCA OFFSET TAD A7600 /RETURN TO KEYBOARD MONITOR KRS /IF CTRL,C TYPED TAD A175 /-CTRL,C SNA CLA KSF ONCE, JMP ONLY /THIS INSTRUCTION IS DONE ONCE ONLY. IT IS /THEN CHANGED TO "JMP SET" AFTER HANDLER RELOCATION /IS DONE AND THE BAD BLOCK LIST IS READ IN. ACDIF, CIF CDF 00 JMP I A7600 /CALL KB MONITOR /THIS LOC IS SET TO ADDR OF NEXT PAGE BY ONCE-ONLY CODE GO, 0 /ADDR OF MAIN /-----BOUNDARY OF BAD BLOCK LIST----- BBL, /ONCE-ONLY CODE, REPLACED BY BAD BLOCK LIST /READ IN BAD BLOCK LIST (BBL) /SAVE CALLING DATA FIELD RDF TAD OOCDF DCA BACK OOCDF, CDF 00 /SET TO CURRENT FIELD /REPLACE ONCE-ONLY JUMP INSTRUCTION TAD JMPSET DCA ONCE LOOP, TAD LIST /RELOCATE CROSS-PAGE REFERENCES; /SCAN "LIST" FOR RELATIVE LOCATIONS /OF VALUES TO BE RELOCATED SNA /0 ACTS AS TERMINATOR JMP OUT TAD GO /RELOCATE RELATIVE ADDRESS DCA ONLY /"ONLY" IS NOW TEMP STORAGE ISZ LOOP /NEXT VALUE TAD GO TAD I ONLY /RELOCATE THE CONTENTS DCA I ONLY JMP LOOP /CONTINUE UNTIL DONE /LIST OF RELATIVE ADDRESSES OF RELATIVE VALUES LIST, BARG-MAIN ABLOCK-MAIN BBBL-MAIN AMA-MAIN ASECT-MAIN ATRACK-MAIN MA-MAIN AERROR-MAIN 0 /TERMINATOR ZBLOCK BBL+40-. /UNUSED (IN BBL BUFFER) /ONCE-ONLY CODE CONTINUES OUT, JMS I GO /READ BAD BLOCK LIST /-----BOUNDARY OF BAD BLOCK LIST----- OK, CLA /ERROR RETURN (IGNORE) BACK, CDF /RESTORE CALLING FIELD JMPSET, JMP SET /SETUP FOR TRANSFER /END OF ONCE-ONLY CODE /SETUP ARGS FOR CALL TO 2ND PAGE SUBROUTINE /CALCULATE TRACK AND SECTOR FROM BLOCK MAPPED, TAD I ABLOCK RTR RTR AND A377 TAD OFFSET /DEVICE OFFSET (0 OR 400) DCA I ATRACK TAD I ABLOCK /CALCULATE SECTOR FROM BLOCK AND A17 /SECTOR CODE CLL RTL TAD A7751 SPA TAD A47 BSW DCA I ASECT /TRANSFER 1ST PAGE OF BLOCK JMS I GO TAD A200 /INCREMENT MA TAD I AMA DCA I AMA /INCREMENT SECTOR TAD A200 TAD I ASECT DCA I ASECT /TRANSFER 2ND PAGE OF BLOCK JMS I GO TAD A200 /INCREMENT MA TAD I AMA DCA I AMA /CONTINUE WITH NEXT BLOCK JMP NEXT /ONCE-ONLY CODE AT END OF PAGE ZBLOCK 377-. /UNUSED ONLY, JMS GO /EXECUTED ONCE ONLY; STORES ADDR OF /2ND PAGE IN LOC "GO" *400 /2ND PAGE OF HANDLER /SUBROUTINE TO SETUP AND TRANSFER /AC=0 FOR TRANSFER ELSE SETUP MAIN, 0 SNA JMP TRANS /GET HANDLER ARGUMENTS SETUP, DCA BARG /ADDR OF HANDLER ARGS AC2000 /SET "OLDTRK" TO INVALID TRACK DCA OLDTRK /TO FORCE READING NEXT HEADER. TAD B7600 /SET FOR FULL PAGE TRANSFERS DCA WC /(WAS SMALLER FOR BBL READ) TAD I BARG /NOW GET HANDLER ARGUMENTS /FUNCTION WORD /NOTE: THE FOLLOWING INSTRUCTION IS USED AS A CONSTANT B377, AND B4070 /CONVERT TO RLCB FORMAT SPA TAD B3777 TAD BRLRD DCA FNC TAD I BARG /FUNCTION WORD RAL /CONVERT TO PAGE COUNT IN BITS [7600] AND B7600 DCA PAGES ISZ BARG TAD I BARG /MA DCA MA ISZ BARG TAD I BARG /BLOCK DCA BLOCK ISZ BARG /SAVE CALLING FIELD FOR RETURN RDF TAD BCDIF DCA BRTN /RESET DATA FIELD AND RETURN FROM SETUP WITH AC=BLOCK BCDIF, CIF CDF 00 /GET DEVICE OFFSET FROM 1ST PAGE TAD I BBBL /CHECK FOR BBL VALIDITY - TAD CHECK /1ST LOC OF BBL CONTAINS AN SZA CLA /IDENTIFICATION CODE ("ID") JMP ERROR /TAKE ERROR RETURN FROM HANDLER /IF BBL IS INVALID. JMP I MAIN /TRANSFER ONE OR MORE PAGES TO/FROM DISK /GET INTERPAGE ARGUMENTS /RESET RETRY COUNT FOR 2 RETRIES ON I/O ERRORS TRANS, AC7775 /AC=-3 DCA ERRCNT /CALCULATE CYLINDER AND SURFACE FROM TRACK TAD TRACK CLL RAR DCA CYL RTR DCA SURF /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER JMS TRKCMP /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK /RESET DRIVE (FUNCTION=1) RETRY, RLDC /CLEAR CONTROLLER, AC /SEEK (FUNCTION=3) WHEN CALLED FROM BELOW SEEK, IAC /AC=(1 OR 3) JMS IO /RESET DRIVE OR SEEK /READ NEXT HEADER TO FIND OUT ACTUAL CURRENT TRACK TAD HEADER JMS IO /READ NEXT HEADER RRSI /GET HEADER BYTE #1 BSW AND B3 DCA OLDTRK /SAVE 2 LSB RRSI /GET HEADER BYTE #2 AND B377 /HARDWARE SHOULD DO THIS CLL RTL TAD OLDTRK /ADD IN MSB DCA OLDTRK /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER JMS TRKCMP /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK /CALCULATE DIFFERENCE WORD FOR SEEK FROM TRACK DIFFERENCE SPA /IF POSITIVE, LINK WILL BE SET CLL CIA /IF NEGATIVE, CLEAR LINK RAR /DELETE SURFACE, INCLUDE DIRECTION TAD SURF /ADD SURFACE RLCA /LOAD DIFFERENCE WORD AC0002 /PREPARE FOR SEEK /LOOP BACK AND PERFORM SEEK; THIS ENSURES THAT THE TRACK /REACHED IS THE CORRECT ONE IN SPITE OF POSSIBLE RL01 /SEEK UNRELIABILITY JMP SEEK /SUBROUTINE TO COMPARE REQUESTED TRACK WITH OLD (REMEMBERED) /TRACK; IF SAME, DO TRANSFER. IF DIFFERENT, RETURN WITH AC= /REQUESTED-OLD, AND LINK=1 TRKCMP, 0 TAD OLDTRK /CALCULATE DIFFERENCE CIA TAD TRACK STL /LINK MUST BE SET WHEN /DIFFERENCE IS POSITIVE. SZA JMP I TRKCMP /DIFFERENT; RETURN /ON TRACK: DO TRANSFER /LOAD ALL REGISTERS TAD SECTOR RLSA TAD WC RLWC TAD SURF TAD CYL RLCA TAD MA RLMA /DO THE READ OR WRITE TAD FNC JMS IO /COUNT REQUESTED NUMBER OF PAGES TAD B7600 TAD PAGES SNA JMP DONE DCA PAGES JMP I MAIN /RETURN FOR MORE /SUBROUTINE TO DO THE ACTUAL I/O IO, 0 /AC=MODE,FIELD,FUNCTION TAD BDRIVE RLCB /DO THE OPERATION RLSD /WAIT UNTIL DONE JMP .-1 RLSE /TEST FOR I/O ERROR(S) JMP I IO /NONE; RETURN /IF ERROR, RETRY TWICE ISZ ERRCNT /MORE RETRIES LEFT? JMP RETRY /YES /AFTER THREE TRIES, TAKE HANDLER ERROR RETURN /WITH AC=4000 ERROR, AC4000 SKP /NORMAL RETURN FROM HANDLER DONE, ISZ BARG /SKIP ERROR RETURN BRTN, CIF CDF 00 /RETURN TO CALLING FIELD /BBL READ: NOP (FIELD 0) JMP I BARG /RETURN TO CALLING PROGRAM /DATA BLOCK, 0 TRACK, 0 /BBL READ: TRACK 0 WC, -41 /BBL READ: -BBL LENGTH SECTOR, 1400 /BBL READ: SECTOR 14 CYL, 0 SURF, 0 ERRCNT, 0 /COUNT OF RETRIES OLDTRK, 2000 /FORCE INITIAL SEEK PAGES, 200 /BBL READ: ONE PAGE FNC, RLRD /BBL READ: READ FUNCTION /RELOCATED RELATIVE ADDRESSES BARG, OK-MAIN /BBL READ: RETURN FROM READ /ADDRESS OF HANDLER ARGUMENTS MA, BBL-MAIN /BBL READ: ADDR OF BBL BBBL, BBL-MAIN B3, 3 B3777, 3777 B7600, 7600 BRLRD, RLRD HEADER, BYTE RLRH BDRIVE, DRIVE^100 /DRIVE BITS FOR RLCB CHECK, -ID /THIS CONSTANT MUST BE AT END OF PAGE ZBLOCK 577-. B4070, 4070 $ |
Added src/os8/uni/HANDLERS/RL1.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 | /RL1: RL01 DRIVE 1 NON-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 DRIVE 1 NON-SYSTEM HANDLER VERSION="A&77 /NOTES: /1. PRE-OMNIBUS COMPUTERS NOT SUPPORTED. /EDIT HISTORY: /13-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 /BAD BLOCK LIST FORMAT: /WORD CONTENTS /0 ID (IDENTIFICATION CODE) /1 BAD BLOCKS FOR DEVICE A (ASCENDING ORDER) /... ... /20 0 (TERMINATOR FOR LIST A) /21 BAD BLOCKS FOR DEVICE B (ASCENDING ORDER) /... ... /40 0 (TERMINATOR FOR LIST B) /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 DEVICES PER HANDLER /FORMAT OF ENTRIES IN HEADER BLOCK: /WORD DESCRIPTION /0 GROUP NAME (4 CHAR) /2 DEVICE NAME (4 CHAR) /4 DCB WORD FOR AN RL (TYPE 26) DIRECTORY DEVICE /5 OFFSET TO ENTRY POINT, 2-PAGE INDICATOR /6 0 (UNUSED WORD) /7 0 TO REPRESENT NON-SYSTEM DEVICE DRIVE=1 DEVICE RL1;DEVICE RL1A;4260;RLA&177+4000;0;0 DEVICE RL1;DEVICE RL1B;4260;RLB&177+4000;0;0 /HANDLER CODE *200 /FIRST PAGE /DATA A17, 17 A47, 47 A175, 175 A200, 200 A377, 377 A7751, 7751 BASE, TAD BBL+1 ABLOCK, BLOCK-MAIN AMA, MA-MAIN /RELATIVE ADDR OF MA ASECT, SECTOR-MAIN ATRACK, TRACK-MAIN AERROR, ERROR-MAIN /SET UP ARGUMENTS BY CALLING 2ND PAGE SUBROUTINE SET, TAD OFFSET /INITIALIZE MAPPING (BELOW) BSW CLL RTL /(0 OR 20: DEVICE A OR B) TAD BASE DCA MAP TAD RLB /ADDR OF ARGS JMS I GO /SETUP (AC NON-ZERO) /MAP NEXT BLOCK AROUND ANY BAD BLOCKS BELOW IT MAP, TAD /INITIALIZED ABOVE SNA /0 TERMINATES LIST JMP MAPPED STL CIA /13-BIT NEGATE TAD I ABLOCK /COMPARE WITH BLOCK SZL CLA JMP MAPPED /BAD BLOCK IS ABOVE CURRENT BLOCK ISZ MAP /TRY NEXT BAD BLOCK ALSO NEXT, ISZ I ABLOCK /INCREMENT CURRENT BLOCK NUMBER, /EITHER DURING /BAD BLOCK MAPPING OR AFTER SUCCESSFUL TRANSFER /OF TWO SECTORS (PAGES) WITH MORE TO GO JMP MAP /CONTINUE MAPPING JMP I AERROR /ERROR ON BLOCK OVERFLOW ZBLOCK 240+DRIVE-. /UNUSED /ENTRY POINT FOR DEVICE B RLB, VERSION AC0004 /TRACK OFFSET WILL BE 400 JMP START /SKIP AROUND RLA ENTRY POINT OFFSET, 0 /TRACK OFFSET FOR DEVICE (0 OR 400) /ENTRY POINT FOR DEVICE A RLA, VERSION A7600, 7600 /=CLA TAD RLA /TRANSFER CALLING ADDR DCA RLB START, BSW /SET OFFSET TO 0 IF DEV A, 400 IF DEV B DCA OFFSET TAD A7600 /RETURN TO KEYBOARD MONITOR KRS /IF CTRL,C TYPED TAD A175 /-CTRL,C SNA CLA KSF ONCE, JMP ONLY /THIS INSTRUCTION IS DONE ONCE ONLY. IT IS /THEN CHANGED TO "JMP SET" AFTER HANDLER RELOCATION /IS DONE AND THE BAD BLOCK LIST IS READ IN. ACDIF, CIF CDF 00 JMP I A7600 /CALL KB MONITOR /THIS LOC IS SET TO ADDR OF NEXT PAGE BY ONCE-ONLY CODE GO, 0 /ADDR OF MAIN /-----BOUNDARY OF BAD BLOCK LIST----- BBL, /ONCE-ONLY CODE, REPLACED BY BAD BLOCK LIST /READ IN BAD BLOCK LIST (BBL) /SAVE CALLING DATA FIELD RDF TAD OOCDF DCA BACK OOCDF, CDF 00 /SET TO CURRENT FIELD /REPLACE ONCE-ONLY JUMP INSTRUCTION TAD JMPSET DCA ONCE LOOP, TAD LIST /RELOCATE CROSS-PAGE REFERENCES; /SCAN "LIST" FOR RELATIVE LOCATIONS /OF VALUES TO BE RELOCATED SNA /0 ACTS AS TERMINATOR JMP OUT TAD GO /RELOCATE RELATIVE ADDRESS DCA ONLY /"ONLY" IS NOW TEMP STORAGE ISZ LOOP /NEXT VALUE TAD GO TAD I ONLY /RELOCATE THE CONTENTS DCA I ONLY JMP LOOP /CONTINUE UNTIL DONE /LIST OF RELATIVE ADDRESSES OF RELATIVE VALUES LIST, BARG-MAIN ABLOCK-MAIN BBBL-MAIN AMA-MAIN ASECT-MAIN ATRACK-MAIN MA-MAIN AERROR-MAIN 0 /TERMINATOR ZBLOCK BBL+40-. /UNUSED (IN BBL BUFFER) /ONCE-ONLY CODE CONTINUES OUT, JMS I GO /READ BAD BLOCK LIST /-----BOUNDARY OF BAD BLOCK LIST----- OK, CLA /ERROR RETURN (IGNORE) BACK, CDF /RESTORE CALLING FIELD JMPSET, JMP SET /SETUP FOR TRANSFER /END OF ONCE-ONLY CODE /SETUP ARGS FOR CALL TO 2ND PAGE SUBROUTINE /CALCULATE TRACK AND SECTOR FROM BLOCK MAPPED, TAD I ABLOCK RTR RTR AND A377 TAD OFFSET /DEVICE OFFSET (0 OR 400) DCA I ATRACK TAD I ABLOCK /CALCULATE SECTOR FROM BLOCK AND A17 /SECTOR CODE CLL RTL TAD A7751 SPA TAD A47 BSW DCA I ASECT /TRANSFER 1ST PAGE OF BLOCK JMS I GO TAD A200 /INCREMENT MA TAD I AMA DCA I AMA /INCREMENT SECTOR TAD A200 TAD I ASECT DCA I ASECT /TRANSFER 2ND PAGE OF BLOCK JMS I GO TAD A200 /INCREMENT MA TAD I AMA DCA I AMA /CONTINUE WITH NEXT BLOCK JMP NEXT /ONCE-ONLY CODE AT END OF PAGE ZBLOCK 377-. /UNUSED ONLY, JMS GO /EXECUTED ONCE ONLY; STORES ADDR OF /2ND PAGE IN LOC "GO" *400 /2ND PAGE OF HANDLER /SUBROUTINE TO SETUP AND TRANSFER /AC=0 FOR TRANSFER ELSE SETUP MAIN, 0 SNA JMP TRANS /GET HANDLER ARGUMENTS SETUP, DCA BARG /ADDR OF HANDLER ARGS AC2000 /SET "OLDTRK" TO INVALID TRACK DCA OLDTRK /TO FORCE READING NEXT HEADER. TAD B7600 /SET FOR FULL PAGE TRANSFERS DCA WC /(WAS SMALLER FOR BBL READ) TAD I BARG /NOW GET HANDLER ARGUMENTS /FUNCTION WORD /NOTE: THE FOLLOWING INSTRUCTION IS USED AS A CONSTANT B377, AND B4070 /CONVERT TO RLCB FORMAT SPA TAD B3777 TAD BRLRD DCA FNC TAD I BARG /FUNCTION WORD RAL /CONVERT TO PAGE COUNT IN BITS [7600] AND B7600 DCA PAGES ISZ BARG TAD I BARG /MA DCA MA ISZ BARG TAD I BARG /BLOCK DCA BLOCK ISZ BARG /SAVE CALLING FIELD FOR RETURN RDF TAD BCDIF DCA BRTN /RESET DATA FIELD AND RETURN FROM SETUP WITH AC=BLOCK BCDIF, CIF CDF 00 /GET DEVICE OFFSET FROM 1ST PAGE TAD I BBBL /CHECK FOR BBL VALIDITY - TAD CHECK /1ST LOC OF BBL CONTAINS AN SZA CLA /IDENTIFICATION CODE ("ID") JMP ERROR /TAKE ERROR RETURN FROM HANDLER /IF BBL IS INVALID. JMP I MAIN /TRANSFER ONE OR MORE PAGES TO/FROM DISK /GET INTERPAGE ARGUMENTS /RESET RETRY COUNT FOR 2 RETRIES ON I/O ERRORS TRANS, AC7775 /AC=-3 DCA ERRCNT /CALCULATE CYLINDER AND SURFACE FROM TRACK TAD TRACK CLL RAR DCA CYL RTR DCA SURF /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER JMS TRKCMP /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK /RESET DRIVE (FUNCTION=1) RETRY, RLDC /CLEAR CONTROLLER, AC /SEEK (FUNCTION=3) WHEN CALLED FROM BELOW SEEK, IAC /AC=(1 OR 3) JMS IO /RESET DRIVE OR SEEK /READ NEXT HEADER TO FIND OUT ACTUAL CURRENT TRACK TAD HEADER JMS IO /READ NEXT HEADER RRSI /GET HEADER BYTE #1 BSW AND B3 DCA OLDTRK /SAVE 2 LSB RRSI /GET HEADER BYTE #2 AND B377 /HARDWARE SHOULD DO THIS CLL RTL TAD OLDTRK /ADD IN MSB DCA OLDTRK /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER JMS TRKCMP /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK /CALCULATE DIFFERENCE WORD FOR SEEK FROM TRACK DIFFERENCE SPA /IF POSITIVE, LINK WILL BE SET CLL CIA /IF NEGATIVE, CLEAR LINK RAR /DELETE SURFACE, INCLUDE DIRECTION TAD SURF /ADD SURFACE RLCA /LOAD DIFFERENCE WORD AC0002 /PREPARE FOR SEEK /LOOP BACK AND PERFORM SEEK; THIS ENSURES THAT THE TRACK /REACHED IS THE CORRECT ONE IN SPITE OF POSSIBLE RL01 /SEEK UNRELIABILITY JMP SEEK /SUBROUTINE TO COMPARE REQUESTED TRACK WITH OLD (REMEMBERED) /TRACK; IF SAME, DO TRANSFER. IF DIFFERENT, RETURN WITH AC= /REQUESTED-OLD, AND LINK=1 TRKCMP, 0 TAD OLDTRK /CALCULATE DIFFERENCE CIA TAD TRACK STL /LINK MUST BE SET WHEN /DIFFERENCE IS POSITIVE. SZA JMP I TRKCMP /DIFFERENT; RETURN /ON TRACK: DO TRANSFER /LOAD ALL REGISTERS TAD SECTOR RLSA TAD WC RLWC TAD SURF TAD CYL RLCA TAD MA RLMA /DO THE READ OR WRITE TAD FNC JMS IO /COUNT REQUESTED NUMBER OF PAGES TAD B7600 TAD PAGES SNA JMP DONE DCA PAGES JMP I MAIN /RETURN FOR MORE /SUBROUTINE TO DO THE ACTUAL I/O IO, 0 /AC=MODE,FIELD,FUNCTION TAD BDRIVE RLCB /DO THE OPERATION RLSD /WAIT UNTIL DONE JMP .-1 RLSE /TEST FOR I/O ERROR(S) JMP I IO /NONE; RETURN /IF ERROR, RETRY TWICE ISZ ERRCNT /MORE RETRIES LEFT? JMP RETRY /YES /AFTER THREE TRIES, TAKE HANDLER ERROR RETURN /WITH AC=4000 ERROR, AC4000 SKP /NORMAL RETURN FROM HANDLER DONE, ISZ BARG /SKIP ERROR RETURN BRTN, CIF CDF 00 /RETURN TO CALLING FIELD /BBL READ: NOP (FIELD 0) JMP I BARG /RETURN TO CALLING PROGRAM /DATA BLOCK, 0 TRACK, 0 /BBL READ: TRACK 0 WC, -41 /BBL READ: -BBL LENGTH SECTOR, 1400 /BBL READ: SECTOR 14 CYL, 0 SURF, 0 ERRCNT, 0 /COUNT OF RETRIES OLDTRK, 2000 /FORCE INITIAL SEEK PAGES, 200 /BBL READ: ONE PAGE FNC, RLRD /BBL READ: READ FUNCTION /RELOCATED RELATIVE ADDRESSES BARG, OK-MAIN /BBL READ: RETURN FROM READ /ADDRESS OF HANDLER ARGUMENTS MA, BBL-MAIN /BBL READ: ADDR OF BBL BBBL, BBL-MAIN B3, 3 B3777, 3777 B7600, 7600 BRLRD, RLRD HEADER, BYTE RLRH BDRIVE, DRIVE^100 /DRIVE BITS FOR RLCB CHECK, -ID /THIS CONSTANT MUST BE AT END OF PAGE ZBLOCK 577-. B4070, 4070 $ |
Added src/os8/uni/HANDLERS/RL2.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 | /RL2: RL01 DRIVE 2 NON-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 DRIVE 2 NON-SYSTEM HANDLER VERSION="A&77 /NOTES: /1. PRE-OMNIBUS COMPUTERS NOT SUPPORTED. /EDIT HISTORY: /13-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 /BAD BLOCK LIST FORMAT: /WORD CONTENTS /0 ID (IDENTIFICATION CODE) /1 BAD BLOCKS FOR DEVICE A (ASCENDING ORDER) /... ... /20 0 (TERMINATOR FOR LIST A) /21 BAD BLOCKS FOR DEVICE B (ASCENDING ORDER) /... ... /40 0 (TERMINATOR FOR LIST B) /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 DEVICES PER HANDLER /FORMAT OF ENTRIES IN HEADER BLOCK: /WORD DESCRIPTION /0 GROUP NAME (4 CHAR) /2 DEVICE NAME (4 CHAR) /4 DCB WORD FOR AN RL (TYPE 26) DIRECTORY DEVICE /5 OFFSET TO ENTRY POINT, 2-PAGE INDICATOR /6 0 (UNUSED WORD) /7 0 TO REPRESENT NON-SYSTEM DEVICE DRIVE=2 DEVICE RL2;DEVICE RL2A;4260;RLA&177+4000;0;0 DEVICE RL2;DEVICE RL2B;4260;RLB&177+4000;0;0 /HANDLER CODE *200 /FIRST PAGE /DATA A17, 17 A47, 47 A175, 175 A200, 200 A377, 377 A7751, 7751 BASE, TAD BBL+1 ABLOCK, BLOCK-MAIN AMA, MA-MAIN /RELATIVE ADDR OF MA ASECT, SECTOR-MAIN ATRACK, TRACK-MAIN AERROR, ERROR-MAIN /SET UP ARGUMENTS BY CALLING 2ND PAGE SUBROUTINE SET, TAD OFFSET /INITIALIZE MAPPING (BELOW) BSW CLL RTL /(0 OR 20: DEVICE A OR B) TAD BASE DCA MAP TAD RLB /ADDR OF ARGS JMS I GO /SETUP (AC NON-ZERO) /MAP NEXT BLOCK AROUND ANY BAD BLOCKS BELOW IT MAP, TAD /INITIALIZED ABOVE SNA /0 TERMINATES LIST JMP MAPPED STL CIA /13-BIT NEGATE TAD I ABLOCK /COMPARE WITH BLOCK SZL CLA JMP MAPPED /BAD BLOCK IS ABOVE CURRENT BLOCK ISZ MAP /TRY NEXT BAD BLOCK ALSO NEXT, ISZ I ABLOCK /INCREMENT CURRENT BLOCK NUMBER, /EITHER DURING /BAD BLOCK MAPPING OR AFTER SUCCESSFUL TRANSFER /OF TWO SECTORS (PAGES) WITH MORE TO GO JMP MAP /CONTINUE MAPPING JMP I AERROR /ERROR ON BLOCK OVERFLOW ZBLOCK 240+DRIVE-. /UNUSED /ENTRY POINT FOR DEVICE B RLB, VERSION AC0004 /TRACK OFFSET WILL BE 400 JMP START /SKIP AROUND RLA ENTRY POINT OFFSET, 0 /TRACK OFFSET FOR DEVICE (0 OR 400) /ENTRY POINT FOR DEVICE A RLA, VERSION A7600, 7600 /=CLA TAD RLA /TRANSFER CALLING ADDR DCA RLB START, BSW /SET OFFSET TO 0 IF DEV A, 400 IF DEV B DCA OFFSET TAD A7600 /RETURN TO KEYBOARD MONITOR KRS /IF CTRL,C TYPED TAD A175 /-CTRL,C SNA CLA KSF ONCE, JMP ONLY /THIS INSTRUCTION IS DONE ONCE ONLY. IT IS /THEN CHANGED TO "JMP SET" AFTER HANDLER RELOCATION /IS DONE AND THE BAD BLOCK LIST IS READ IN. ACDIF, CIF CDF 00 JMP I A7600 /CALL KB MONITOR /THIS LOC IS SET TO ADDR OF NEXT PAGE BY ONCE-ONLY CODE GO, 0 /ADDR OF MAIN /-----BOUNDARY OF BAD BLOCK LIST----- BBL, /ONCE-ONLY CODE, REPLACED BY BAD BLOCK LIST /READ IN BAD BLOCK LIST (BBL) /SAVE CALLING DATA FIELD RDF TAD OOCDF DCA BACK OOCDF, CDF 00 /SET TO CURRENT FIELD /REPLACE ONCE-ONLY JUMP INSTRUCTION TAD JMPSET DCA ONCE LOOP, TAD LIST /RELOCATE CROSS-PAGE REFERENCES; /SCAN "LIST" FOR RELATIVE LOCATIONS /OF VALUES TO BE RELOCATED SNA /0 ACTS AS TERMINATOR JMP OUT TAD GO /RELOCATE RELATIVE ADDRESS DCA ONLY /"ONLY" IS NOW TEMP STORAGE ISZ LOOP /NEXT VALUE TAD GO TAD I ONLY /RELOCATE THE CONTENTS DCA I ONLY JMP LOOP /CONTINUE UNTIL DONE /LIST OF RELATIVE ADDRESSES OF RELATIVE VALUES LIST, BARG-MAIN ABLOCK-MAIN BBBL-MAIN AMA-MAIN ASECT-MAIN ATRACK-MAIN MA-MAIN AERROR-MAIN 0 /TERMINATOR ZBLOCK BBL+40-. /UNUSED (IN BBL BUFFER) /ONCE-ONLY CODE CONTINUES OUT, JMS I GO /READ BAD BLOCK LIST /-----BOUNDARY OF BAD BLOCK LIST----- OK, CLA /ERROR RETURN (IGNORE) BACK, CDF /RESTORE CALLING FIELD JMPSET, JMP SET /SETUP FOR TRANSFER /END OF ONCE-ONLY CODE /SETUP ARGS FOR CALL TO 2ND PAGE SUBROUTINE /CALCULATE TRACK AND SECTOR FROM BLOCK MAPPED, TAD I ABLOCK RTR RTR AND A377 TAD OFFSET /DEVICE OFFSET (0 OR 400) DCA I ATRACK TAD I ABLOCK /CALCULATE SECTOR FROM BLOCK AND A17 /SECTOR CODE CLL RTL TAD A7751 SPA TAD A47 BSW DCA I ASECT /TRANSFER 1ST PAGE OF BLOCK JMS I GO TAD A200 /INCREMENT MA TAD I AMA DCA I AMA /INCREMENT SECTOR TAD A200 TAD I ASECT DCA I ASECT /TRANSFER 2ND PAGE OF BLOCK JMS I GO TAD A200 /INCREMENT MA TAD I AMA DCA I AMA /CONTINUE WITH NEXT BLOCK JMP NEXT /ONCE-ONLY CODE AT END OF PAGE ZBLOCK 377-. /UNUSED ONLY, JMS GO /EXECUTED ONCE ONLY; STORES ADDR OF /2ND PAGE IN LOC "GO" *400 /2ND PAGE OF HANDLER /SUBROUTINE TO SETUP AND TRANSFER /AC=0 FOR TRANSFER ELSE SETUP MAIN, 0 SNA JMP TRANS /GET HANDLER ARGUMENTS SETUP, DCA BARG /ADDR OF HANDLER ARGS AC2000 /SET "OLDTRK" TO INVALID TRACK DCA OLDTRK /TO FORCE READING NEXT HEADER. TAD B7600 /SET FOR FULL PAGE TRANSFERS DCA WC /(WAS SMALLER FOR BBL READ) TAD I BARG /NOW GET HANDLER ARGUMENTS /FUNCTION WORD /NOTE: THE FOLLOWING INSTRUCTION IS USED AS A CONSTANT B377, AND B4070 /CONVERT TO RLCB FORMAT SPA TAD B3777 TAD BRLRD DCA FNC TAD I BARG /FUNCTION WORD RAL /CONVERT TO PAGE COUNT IN BITS [7600] AND B7600 DCA PAGES ISZ BARG TAD I BARG /MA DCA MA ISZ BARG TAD I BARG /BLOCK DCA BLOCK ISZ BARG /SAVE CALLING FIELD FOR RETURN RDF TAD BCDIF DCA BRTN /RESET DATA FIELD AND RETURN FROM SETUP WITH AC=BLOCK BCDIF, CIF CDF 00 /GET DEVICE OFFSET FROM 1ST PAGE TAD I BBBL /CHECK FOR BBL VALIDITY - TAD CHECK /1ST LOC OF BBL CONTAINS AN SZA CLA /IDENTIFICATION CODE ("ID") JMP ERROR /TAKE ERROR RETURN FROM HANDLER /IF BBL IS INVALID. JMP I MAIN /TRANSFER ONE OR MORE PAGES TO/FROM DISK /GET INTERPAGE ARGUMENTS /RESET RETRY COUNT FOR 2 RETRIES ON I/O ERRORS TRANS, AC7775 /AC=-3 DCA ERRCNT /CALCULATE CYLINDER AND SURFACE FROM TRACK TAD TRACK CLL RAR DCA CYL RTR DCA SURF /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER JMS TRKCMP /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK /RESET DRIVE (FUNCTION=1) RETRY, RLDC /CLEAR CONTROLLER, AC /SEEK (FUNCTION=3) WHEN CALLED FROM BELOW SEEK, IAC /AC=(1 OR 3) JMS IO /RESET DRIVE OR SEEK /READ NEXT HEADER TO FIND OUT ACTUAL CURRENT TRACK TAD HEADER JMS IO /READ NEXT HEADER RRSI /GET HEADER BYTE #1 BSW AND B3 DCA OLDTRK /SAVE 2 LSB RRSI /GET HEADER BYTE #2 AND B377 /HARDWARE SHOULD DO THIS CLL RTL TAD OLDTRK /ADD IN MSB DCA OLDTRK /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER JMS TRKCMP /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK /CALCULATE DIFFERENCE WORD FOR SEEK FROM TRACK DIFFERENCE SPA /IF POSITIVE, LINK WILL BE SET CLL CIA /IF NEGATIVE, CLEAR LINK RAR /DELETE SURFACE, INCLUDE DIRECTION TAD SURF /ADD SURFACE RLCA /LOAD DIFFERENCE WORD AC0002 /PREPARE FOR SEEK /LOOP BACK AND PERFORM SEEK; THIS ENSURES THAT THE TRACK /REACHED IS THE CORRECT ONE IN SPITE OF POSSIBLE RL01 /SEEK UNRELIABILITY JMP SEEK /SUBROUTINE TO COMPARE REQUESTED TRACK WITH OLD (REMEMBERED) /TRACK; IF SAME, DO TRANSFER. IF DIFFERENT, RETURN WITH AC= /REQUESTED-OLD, AND LINK=1 TRKCMP, 0 TAD OLDTRK /CALCULATE DIFFERENCE CIA TAD TRACK STL /LINK MUST BE SET WHEN /DIFFERENCE IS POSITIVE. SZA JMP I TRKCMP /DIFFERENT; RETURN /ON TRACK: DO TRANSFER /LOAD ALL REGISTERS TAD SECTOR RLSA TAD WC RLWC TAD SURF TAD CYL RLCA TAD MA RLMA /DO THE READ OR WRITE TAD FNC JMS IO /COUNT REQUESTED NUMBER OF PAGES TAD B7600 TAD PAGES SNA JMP DONE DCA PAGES JMP I MAIN /RETURN FOR MORE /SUBROUTINE TO DO THE ACTUAL I/O IO, 0 /AC=MODE,FIELD,FUNCTION TAD BDRIVE RLCB /DO THE OPERATION RLSD /WAIT UNTIL DONE JMP .-1 RLSE /TEST FOR I/O ERROR(S) JMP I IO /NONE; RETURN /IF ERROR, RETRY TWICE ISZ ERRCNT /MORE RETRIES LEFT? JMP RETRY /YES /AFTER THREE TRIES, TAKE HANDLER ERROR RETURN /WITH AC=4000 ERROR, AC4000 SKP /NORMAL RETURN FROM HANDLER DONE, ISZ BARG /SKIP ERROR RETURN BRTN, CIF CDF 00 /RETURN TO CALLING FIELD /BBL READ: NOP (FIELD 0) JMP I BARG /RETURN TO CALLING PROGRAM /DATA BLOCK, 0 TRACK, 0 /BBL READ: TRACK 0 WC, -41 /BBL READ: -BBL LENGTH SECTOR, 1400 /BBL READ: SECTOR 14 CYL, 0 SURF, 0 ERRCNT, 0 /COUNT OF RETRIES OLDTRK, 2000 /FORCE INITIAL SEEK PAGES, 200 /BBL READ: ONE PAGE FNC, RLRD /BBL READ: READ FUNCTION /RELOCATED RELATIVE ADDRESSES BARG, OK-MAIN /BBL READ: RETURN FROM READ /ADDRESS OF HANDLER ARGUMENTS MA, BBL-MAIN /BBL READ: ADDR OF BBL BBBL, BBL-MAIN B3, 3 B3777, 3777 B7600, 7600 BRLRD, RLRD HEADER, BYTE RLRH BDRIVE, DRIVE^100 /DRIVE BITS FOR RLCB CHECK, -ID /THIS CONSTANT MUST BE AT END OF PAGE ZBLOCK 577-. B4070, 4070 $ |
Added src/os8/uni/HANDLERS/RL3.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 | /RL3: RL01 DRIVE 3 NON-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 DRIVE 3 NON-SYSTEM HANDLER VERSION="A&77 /NOTES: /1. PRE-OMNIBUS COMPUTERS NOT SUPPORTED. /EDIT HISTORY: /13-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 /BAD BLOCK LIST FORMAT: /WORD CONTENTS /0 ID (IDENTIFICATION CODE) /1 BAD BLOCKS FOR DEVICE A (ASCENDING ORDER) /... ... /20 0 (TERMINATOR FOR LIST A) /21 BAD BLOCKS FOR DEVICE B (ASCENDING ORDER) /... ... /40 0 (TERMINATOR FOR LIST B) /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 DEVICES PER HANDLER /FORMAT OF ENTRIES IN HEADER BLOCK: /WORD DESCRIPTION /0 GROUP NAME (4 CHAR) /2 DEVICE NAME (4 CHAR) /4 DCB WORD FOR AN RL (TYPE 26) DIRECTORY DEVICE /5 OFFSET TO ENTRY POINT, 2-PAGE INDICATOR /6 0 (UNUSED WORD) /7 0 TO REPRESENT NON-SYSTEM DEVICE DRIVE=3 DEVICE RL3;DEVICE RL3A;4260;RLA&177+4000;0;0 DEVICE RL3;DEVICE RL3B;4260;RLB&177+4000;0;0 /HANDLER CODE *200 /FIRST PAGE /DATA A17, 17 A47, 47 A175, 175 A200, 200 A377, 377 A7751, 7751 BASE, TAD BBL+1 ABLOCK, BLOCK-MAIN AMA, MA-MAIN /RELATIVE ADDR OF MA ASECT, SECTOR-MAIN ATRACK, TRACK-MAIN AERROR, ERROR-MAIN /SET UP ARGUMENTS BY CALLING 2ND PAGE SUBROUTINE SET, TAD OFFSET /INITIALIZE MAPPING (BELOW) BSW CLL RTL /(0 OR 20: DEVICE A OR B) TAD BASE DCA MAP TAD RLB /ADDR OF ARGS JMS I GO /SETUP (AC NON-ZERO) /MAP NEXT BLOCK AROUND ANY BAD BLOCKS BELOW IT MAP, TAD /INITIALIZED ABOVE SNA /0 TERMINATES LIST JMP MAPPED STL CIA /13-BIT NEGATE TAD I ABLOCK /COMPARE WITH BLOCK SZL CLA JMP MAPPED /BAD BLOCK IS ABOVE CURRENT BLOCK ISZ MAP /TRY NEXT BAD BLOCK ALSO NEXT, ISZ I ABLOCK /INCREMENT CURRENT BLOCK NUMBER, /EITHER DURING /BAD BLOCK MAPPING OR AFTER SUCCESSFUL TRANSFER /OF TWO SECTORS (PAGES) WITH MORE TO GO JMP MAP /CONTINUE MAPPING JMP I AERROR /ERROR ON BLOCK OVERFLOW ZBLOCK 240+DRIVE-. /UNUSED /ENTRY POINT FOR DEVICE B RLB, VERSION AC0004 /TRACK OFFSET WILL BE 400 JMP START /SKIP AROUND RLA ENTRY POINT OFFSET, 0 /TRACK OFFSET FOR DEVICE (0 OR 400) /ENTRY POINT FOR DEVICE A RLA, VERSION A7600, 7600 /=CLA TAD RLA /TRANSFER CALLING ADDR DCA RLB START, BSW /SET OFFSET TO 0 IF DEV A, 400 IF DEV B DCA OFFSET TAD A7600 /RETURN TO KEYBOARD MONITOR KRS /IF CTRL,C TYPED TAD A175 /-CTRL,C SNA CLA KSF ONCE, JMP ONLY /THIS INSTRUCTION IS DONE ONCE ONLY. IT IS /THEN CHANGED TO "JMP SET" AFTER HANDLER RELOCATION /IS DONE AND THE BAD BLOCK LIST IS READ IN. ACDIF, CIF CDF 00 JMP I A7600 /CALL KB MONITOR /THIS LOC IS SET TO ADDR OF NEXT PAGE BY ONCE-ONLY CODE GO, 0 /ADDR OF MAIN /-----BOUNDARY OF BAD BLOCK LIST----- BBL, /ONCE-ONLY CODE, REPLACED BY BAD BLOCK LIST /READ IN BAD BLOCK LIST (BBL) /SAVE CALLING DATA FIELD RDF TAD OOCDF DCA BACK OOCDF, CDF 00 /SET TO CURRENT FIELD /REPLACE ONCE-ONLY JUMP INSTRUCTION TAD JMPSET DCA ONCE LOOP, TAD LIST /RELOCATE CROSS-PAGE REFERENCES; /SCAN "LIST" FOR RELATIVE LOCATIONS /OF VALUES TO BE RELOCATED SNA /0 ACTS AS TERMINATOR JMP OUT TAD GO /RELOCATE RELATIVE ADDRESS DCA ONLY /"ONLY" IS NOW TEMP STORAGE ISZ LOOP /NEXT VALUE TAD GO TAD I ONLY /RELOCATE THE CONTENTS DCA I ONLY JMP LOOP /CONTINUE UNTIL DONE /LIST OF RELATIVE ADDRESSES OF RELATIVE VALUES LIST, BARG-MAIN ABLOCK-MAIN BBBL-MAIN AMA-MAIN ASECT-MAIN ATRACK-MAIN MA-MAIN AERROR-MAIN 0 /TERMINATOR ZBLOCK BBL+40-. /UNUSED (IN BBL BUFFER) /ONCE-ONLY CODE CONTINUES OUT, JMS I GO /READ BAD BLOCK LIST /-----BOUNDARY OF BAD BLOCK LIST----- OK, CLA /ERROR RETURN (IGNORE) BACK, CDF /RESTORE CALLING FIELD JMPSET, JMP SET /SETUP FOR TRANSFER /END OF ONCE-ONLY CODE /SETUP ARGS FOR CALL TO 2ND PAGE SUBROUTINE /CALCULATE TRACK AND SECTOR FROM BLOCK MAPPED, TAD I ABLOCK RTR RTR AND A377 TAD OFFSET /DEVICE OFFSET (0 OR 400) DCA I ATRACK TAD I ABLOCK /CALCULATE SECTOR FROM BLOCK AND A17 /SECTOR CODE CLL RTL TAD A7751 SPA TAD A47 BSW DCA I ASECT /TRANSFER 1ST PAGE OF BLOCK JMS I GO TAD A200 /INCREMENT MA TAD I AMA DCA I AMA /INCREMENT SECTOR TAD A200 TAD I ASECT DCA I ASECT /TRANSFER 2ND PAGE OF BLOCK JMS I GO TAD A200 /INCREMENT MA TAD I AMA DCA I AMA /CONTINUE WITH NEXT BLOCK JMP NEXT /ONCE-ONLY CODE AT END OF PAGE ZBLOCK 377-. /UNUSED ONLY, JMS GO /EXECUTED ONCE ONLY; STORES ADDR OF /2ND PAGE IN LOC "GO" *400 /2ND PAGE OF HANDLER /SUBROUTINE TO SETUP AND TRANSFER /AC=0 FOR TRANSFER ELSE SETUP MAIN, 0 SNA JMP TRANS /GET HANDLER ARGUMENTS SETUP, DCA BARG /ADDR OF HANDLER ARGS AC2000 /SET "OLDTRK" TO INVALID TRACK DCA OLDTRK /TO FORCE READING NEXT HEADER. TAD B7600 /SET FOR FULL PAGE TRANSFERS DCA WC /(WAS SMALLER FOR BBL READ) TAD I BARG /NOW GET HANDLER ARGUMENTS /FUNCTION WORD /NOTE: THE FOLLOWING INSTRUCTION IS USED AS A CONSTANT B377, AND B4070 /CONVERT TO RLCB FORMAT SPA TAD B3777 TAD BRLRD DCA FNC TAD I BARG /FUNCTION WORD RAL /CONVERT TO PAGE COUNT IN BITS [7600] AND B7600 DCA PAGES ISZ BARG TAD I BARG /MA DCA MA ISZ BARG TAD I BARG /BLOCK DCA BLOCK ISZ BARG /SAVE CALLING FIELD FOR RETURN RDF TAD BCDIF DCA BRTN /RESET DATA FIELD AND RETURN FROM SETUP WITH AC=BLOCK BCDIF, CIF CDF 00 /GET DEVICE OFFSET FROM 1ST PAGE TAD I BBBL /CHECK FOR BBL VALIDITY - TAD CHECK /1ST LOC OF BBL CONTAINS AN SZA CLA /IDENTIFICATION CODE ("ID") JMP ERROR /TAKE ERROR RETURN FROM HANDLER /IF BBL IS INVALID. JMP I MAIN /TRANSFER ONE OR MORE PAGES TO/FROM DISK /GET INTERPAGE ARGUMENTS /RESET RETRY COUNT FOR 2 RETRIES ON I/O ERRORS TRANS, AC7775 /AC=-3 DCA ERRCNT /CALCULATE CYLINDER AND SURFACE FROM TRACK TAD TRACK CLL RAR DCA CYL RTR DCA SURF /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER JMS TRKCMP /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK /RESET DRIVE (FUNCTION=1) RETRY, RLDC /CLEAR CONTROLLER, AC /SEEK (FUNCTION=3) WHEN CALLED FROM BELOW SEEK, IAC /AC=(1 OR 3) JMS IO /RESET DRIVE OR SEEK /READ NEXT HEADER TO FIND OUT ACTUAL CURRENT TRACK TAD HEADER JMS IO /READ NEXT HEADER RRSI /GET HEADER BYTE #1 BSW AND B3 DCA OLDTRK /SAVE 2 LSB RRSI /GET HEADER BYTE #2 AND B377 /HARDWARE SHOULD DO THIS CLL RTL TAD OLDTRK /ADD IN MSB DCA OLDTRK /COMPARE WITH OLD (PREVIOUS) TRACK; IF SAME, DO TRANSFER JMS TRKCMP /IF REQUESTED TRACK IS DIFFERENT, SEEK TO TRACK /CALCULATE DIFFERENCE WORD FOR SEEK FROM TRACK DIFFERENCE SPA /IF POSITIVE, LINK WILL BE SET CLL CIA /IF NEGATIVE, CLEAR LINK RAR /DELETE SURFACE, INCLUDE DIRECTION TAD SURF /ADD SURFACE RLCA /LOAD DIFFERENCE WORD AC0002 /PREPARE FOR SEEK /LOOP BACK AND PERFORM SEEK; THIS ENSURES THAT THE TRACK /REACHED IS THE CORRECT ONE IN SPITE OF POSSIBLE RL01 /SEEK UNRELIABILITY JMP SEEK /SUBROUTINE TO COMPARE REQUESTED TRACK WITH OLD (REMEMBERED) /TRACK; IF SAME, DO TRANSFER. IF DIFFERENT, RETURN WITH AC= /REQUESTED-OLD, AND LINK=1 TRKCMP, 0 TAD OLDTRK /CALCULATE DIFFERENCE CIA TAD TRACK STL /LINK MUST BE SET WHEN /DIFFERENCE IS POSITIVE. SZA JMP I TRKCMP /DIFFERENT; RETURN /ON TRACK: DO TRANSFER /LOAD ALL REGISTERS TAD SECTOR RLSA TAD WC RLWC TAD SURF TAD CYL RLCA TAD MA RLMA /DO THE READ OR WRITE TAD FNC JMS IO /COUNT REQUESTED NUMBER OF PAGES TAD B7600 TAD PAGES SNA JMP DONE DCA PAGES JMP I MAIN /RETURN FOR MORE /SUBROUTINE TO DO THE ACTUAL I/O IO, 0 /AC=MODE,FIELD,FUNCTION TAD BDRIVE RLCB /DO THE OPERATION RLSD /WAIT UNTIL DONE JMP .-1 RLSE /TEST FOR I/O ERROR(S) JMP I IO /NONE; RETURN /IF ERROR, RETRY TWICE ISZ ERRCNT /MORE RETRIES LEFT? JMP RETRY /YES /AFTER THREE TRIES, TAKE HANDLER ERROR RETURN /WITH AC=4000 ERROR, AC4000 SKP /NORMAL RETURN FROM HANDLER DONE, ISZ BARG /SKIP ERROR RETURN BRTN, CIF CDF 00 /RETURN TO CALLING FIELD /BBL READ: NOP (FIELD 0) JMP I BARG /RETURN TO CALLING PROGRAM /DATA BLOCK, 0 TRACK, 0 /BBL READ: TRACK 0 WC, -41 /BBL READ: -BBL LENGTH SECTOR, 1400 /BBL READ: SECTOR 14 CYL, 0 SURF, 0 ERRCNT, 0 /COUNT OF RETRIES OLDTRK, 2000 /FORCE INITIAL SEEK PAGES, 200 /BBL READ: ONE PAGE FNC, RLRD /BBL READ: READ FUNCTION /RELOCATED RELATIVE ADDRESSES BARG, OK-MAIN /BBL READ: RETURN FROM READ /ADDRESS OF HANDLER ARGUMENTS MA, BBL-MAIN /BBL READ: ADDR OF BBL BBBL, BBL-MAIN B3, 3 B3777, 3777 B7600, 7600 BRLRD, RLRD HEADER, BYTE RLRH BDRIVE, DRIVE^100 /DRIVE BITS FOR RLCB CHECK, -ID /THIS CONSTANT MUST BE AT END OF PAGE ZBLOCK 577-. B4070, 4070 $ |
Added src/os8/uni/HANDLERS/RLC.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 | /RLC: RL01 DEVICE C NON-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 DEVICE C NON-SYSTEM HANDLER VERSION="A&77 /NOTES: /1. PRE-OMNIBUS COMPUTERS NOT SUPPORTED. /EDIT HISTORY: /9-NOV-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 /BAD BLOCK LIST FORMAT: /(TRACK 0 SECTOR 16) /WORD CONTENTS /0 ID (IDENTIFICATION CODE) /1 BAD BLOCK NUMBERS (ASCENDING ORDER) /... ... /20 0 (LIST TERMINATOR) /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 -4 /- NR DEVICES PER HANDLER /FORMAT OF ENTRIES IN HEADER BLOCK: /WORD DESCRIPTION /0 GROUP NAME (4 CHAR) /2 DEVICE NAME (4 CHAR) /4 DCB WORD FOR AN RL01(C), DIRECTORY DEVICE /5 OFFSET TO ENTRY POINT, 2-PAGE INDICATOR /6 0 (UNUSED WORD) /7 0 TO REPRESENT NON-SYSTEM DEVICE DEVICE RLC;DEVICE RL0C;4310;RL0C&177+4000;0;0 DEVICE RLC;DEVICE RL1C;4310;RL1C&177+4000;0;0 DEVICE RLC;DEVICE RL2C;4310;RL2C&177+4000;0;0 DEVICE RLC;DEVICE RL3C;4310;RL3C&177+4000;0;0 /HANDLER CODE *200 /FIRST PAGE START, DCA DRIVE /SAVE DRIVE NUMBER. TAD DRIVE /FIND ENTRY ADDR IN CLL RTL /ORDER TO TRANSFER TAD TADX /CALLING ADDR TO "ARG". DCA .+1 TAD DCA ARG TAD I ARG /GET ARGUMENTS /FUNCTION WORD AND A4070 /READ-WRITE, FIELD SPA TAD A3777 /IF WRITE, -1 TAD ARLRD /CONVERT FUNCTION TO RL01 /FUNCTION WORD. DCA FNC TAD I ARG /FUNCTION WORD RAL AND A7600 /PAGES IN BITS [7600]; /0 MEANS 40. DCA PAGES ISZ ARG TAD I ARG /MA DCA MA ISZ ARG TAD I ARG /BLOCK DCA BLOCK ISZ ARG RDF /SAVE CALLING FIELD TAD ACIDF /FOR RETURN. DCA RTN ACIDF, CIF CDF 00 /CHANGE TO CURRENT FIELD. TAD A7600 /RETURN TO MONITOR IF USER KRS /TYPES CTRL,C. TAD A175 SNA CLA KSF ONCE, JMP ONLY /ELSE START ONCE-ONLY CODE /AT "ONLY". "ONCE" GETS CHANGED /TO "JMP BEGIN" BY ONCE-ONLY CODE. JMP I A7600 /CALL MONITOR UPON CTRL,C. /CONSTANTS ATRANS, TRANS-MAIN ACURTK, CURTRK-MAIN CHECK, -ID A200, 200 A4070, 4070 /ENTRY POINTS IFNZRO 250-. <ENTRY POINTS START AT OFFSET OF 50> 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/uni/HANDLERS/RLSY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 | /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 <KLUDGE:> 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/uni/HANDLERS/ROMMSY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | /2 ROM-TD8E HANDLER / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / ROMFLD=70 VERSION="A&77 /THESE ARE ASSEMBLY REFERENCES TO LOCATIONS IN THE ROM: RGO=7405 F2SET=7552 / TD8E MNEMONICS: SDSS=6771 SDST=6772 SDSQ=6773 SDLC=6774 SDLD=6775 SDRC=6776 SDRD=6777 *0 -3 DEVICE ROM;DEVICE SYS;4211;2007;0;1341 DEVICE ROM;DEVICE DTA0;4211;1007;0;1341 DEVICE ROM;DEVICE DTA1;4211;SDTA1&177+1000;0;1341 STARTB-ROMCT-1 NOPUNCH *7360 /ROOM FOR DECTAPE HEADER WORDS ENPUNCH STARTB, ZBLOCK 20 CDF 0 /BOOTSTRAP TO MOVE FIELD 1 TAD I ROM1 /CODE UP TO FIELD 1 CDF 10 DCA I ROM2 ISZ ROM1 NOP ISZ ROM2 NOP ISZ ROMCT JMP 7400 CIF CDF 0 /DONE SDLC /STOP THE TAPE JMP I .+1 7605 /START HER UP ROM1, 7427 /FIELD 1 CODE GETS LOADED HERE ROM2, 7647 /AND GOES UP HERE ROMCT, -130 *200 NOPUNCH *7600 ENPUNCH ZBLOCK 7 SHNDLR, VERSION /UNIT 0 ENTRY CLA CLL JMP SHND2 S70, 70 S6201, 6201 SDTA1, VERSION /UNIT 1 ENTRY POINT CLA CLL CML TAD SDTA1 /GET ARGS AT SHNDLR DCA SHNDLR SHND2, RAR /UNIT BIT IS IN LINC DCA SUNIT RDF TAD S6203 /SETUP RETURN FIELD DCA EFLD TAD I SHNDLR SDLD /STORE FUNCTION WORD IN DATA REG. AND S70 /SDLD DOESN'T CLEAR AC TAD S6201 /ISOLATE FIELD OF XFER DCA TFLD TAD TFLD DCA TFLD2 ISZ SHNDLR TAD I SHNDLR /BUFFER ADDRESS DCA BPTR ISZ SHNDLR TAD I SHNDLR /PS/8 RECORD # CLL RAL /TIMES 2 FOR ABSOLUTE BLOCK DCA BLOCK ISZ SHNDLR CDF 0 CIF ROMFLD /ROM IS IN FIELD 7 JMP I XF2SET /INITIALIZE. GET, 0 TFLD, HLT /ROUTINE TO LOAD DATA FROM BUFFER TAD I XPTR CIF ROMFLD JMP I GET PUT, 0 /PUT DATA INTO BUFFER TFLD2, HLT DCA I XPTR CIF ROMFLD JMP I PUT ERROR, CLA CLL /FORCE TURNAROUND AT RGO CIF ROMFLD ISZ TRYCNT /TRIED 3 TIMES? JMP I XRGO S6203, CIF CDF 0 JMP SEREX /YES..FATAL EXIT XRGO, RGO XF2SET, F2SET /EQUIVALENCES FOR HANDLER EQUTMP=7750 BPTR=7751 XPGCT=7752 XPTR=7753 XWCNT=7754 WRQ=7724 WRQUAD, 0 /WRITE A 12 BIT TAPE WORD CIF ROMFLD JMP WRQ CIFR, CIF ROMFLD JMP I WRQUAD RDQUAD, 0 /READ A 12 BIT DATA WORD SDSQ JMP .-1 SDRD CIF ROMFLD JMP I RDQUAD EQUFUN, 0 /EQUIVALENCE CHECKSUM CMA DCA EQUTMP TAD EQUTMP AND SCKSUM CIA CLL RAL TAD EQUTMP TAD SCKSUM DCA SCKSUM TAD EQUTMP CLL CMA CIF ROMFLD JMP I EQUFUN SEXIT, ISZ SHNDLR /NORMAL EXIT SEREX, TAD SUNIT /STOP THE DRIVE SDLC CLA CML RAR /EXIT CONDITION IN BIT 0 EFLD, HLT JMP I SHNDLR TRYCNT, 0 SXUNIT, 0 SXFUN, 0 SCKSUM, 0 BLOCK, 0 SUNIT, 0 $ |
Added src/os8/uni/HANDLERS/RX78C.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 | /RX NON-SYSTEM HANDLER, GENERAL CONTROLLER TYPE /FLOPPY DISK HANDLER FOR OS/8. RX78C.PA /***NOT FOR USE WITH VT278. ONLY VT78 *** / / / / / / / / /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/uni/HANDLERS/RXNS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 | /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/uni/HANDLERS/RXSY1.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 | /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 /<DENSITY^400>+<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: <DENSITY^400>+<UNIT^20> 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/uni/HANDLERS/RXSY2.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 | /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 /<DENSITY^400>+<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: <DENSITY^400>+<UNIT^20> 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/uni/HANDLERS/TC08NS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | /2 TC08 HANDLER FOR BUILD / / / / / / / / / /COPYRIGHT (C) 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 MANUAL. / /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 TC08 HANDLER FOR BUILD *0 -10 DEVICE TC;DEVICE DTA0;4160;10;ZBLOCK 2 DEVICE TC;DEVICE DTA1;4160;11;ZBLOCK 2 DEVICE TC;DEVICE DTA2;4160;12;ZBLOCK 2 DEVICE TC;DEVICE DTA3;4160;13;ZBLOCK 2 DEVICE TC;DEVICE DTA4;4160;14;ZBLOCK 2 DEVICE TC;DEVICE DTA5;4160;15;ZBLOCK 2 DEVICE TC;DEVICE DTA6;4160;16;ZBLOCK 2 DEVICE TC;DEVICE DTA7;4160;17;ZBLOCK 2 DTRB=6772 DTLB=6774 DTXA=6764 DTCA=6762 DTRA=6761 DTSF=6771 TCVERSION="A&77 *200 /DECTAPE HANDLERS(PAGE RELOCATABLE) FOR PS/8 MONITOR DFUN, 0 DM203, -203 DBLOCK, 0 DBLKCT, 0 D3, 3 WC, 7754 CA, 7755 DERRCT, TCVERSION DTA0, ISZ DTANO DTA1, ISZ DTANO DTA2, ISZ DTANO DTA3, ISZ DTANO DTA4, ISZ DTANO DTA5, ISZ DTANO DTA6, ISZ DTANO DTA7, ISZ DTANO D400, 400 CLA CLL CMA RTL DCA DERRCT /SET TO REPEAT THREE TIMES IN CASE OF ERROR TAD DTANO CMA TAD DTATAD /GENERATE "TAD DTAN" WHERE DTAN IS THE ONE THAT DCA DTANO /WAS CALLED. CLA CLL CML RTR TAD DTANO /ALSO GENERATE "DCA DTAN" SO WE CAN RESTORE IT DCA DTADCA RDF TAD DCDIF0 DCA DSTOP /STORE CALLING FIELD FOR RETURNING DTANO, 0 /GET CALLING ADDRESS DCA DTA /SAVE IT TAD DTAISZ DTADCA, 0 /RESTORE ENTRY POINT DLOC=DTADCA DTAISZ, ISZ DTANO /BUMP DTANO FOR VARIOUS GROOVY REASONS /WHICH WILL BE APPARENT LATER TAD I DTA DCA DFUN /STORE AWAY FUNCTION WORD FOR FUTURE USE ISZ DTA DT7140, CLL CMA /THE "CLL" IS ONLY NECESSARY TO FORM THE 7140 TAD I DTA DCA DLOC /BUFFER ADDRESS -1 ISZ DTA TAD I DTA CLL RAL /MULTIPLY BY 2 FOR 256-WORD SIMULATED RECORDS DCA DBLOCK /DECTAPE BLOCK # ISZ DTA DTATRY, TAD WC DCDIF0, CDF CIF 0 DCA I CA TAD DFUN RAR CLA CML /COMPLEMENT OF BIT 11 OF DFUN NOW IN THE LINK TAD DTANO /DTANO = "TAD DTAN+1" RTR RTR /THESE TWO ROTATES FORM THE FLLOWING NUMBER /IN THE AC: YYYF00101000, WHERE YYY =DTAN+1 /AND F IS THE COMPLEMENT OF DFUN(11) TAD DT7140 /THE MAGIC STEP - THIS SIMULTANEOUSLY BUMPS DOWN /THE RECORD NUMBER IN AC(0-2) AND TRANSFORMS /THE REST OF THE AC TO F10001000 WHICH IS A /SEARCH IN DIRECTION F(F=1 MEANS BACKWARDS) WITH /THE MOTION BIT ON. DTCA DTXA DTLB /SET DECTAPE FIELD TO 0 FOR SEARCHING JMP DC+3 /JUMP INTO THE BLOCK SEARCH ROUTINE DERR, RTL /DECTAPE STATUS REGISTER B IS USUALLY IN THE AC HERE RAL D7600, 7600 /GET THE "END OF TAPE" FLAG INTO THE LINK AND CLEAR THE AC TAD D200 /GET MOTION BIT DC, SZL /AND, IF LINK IS ON DTATAD, TAD D400 /REVERSE DIRECTION OF MOTION DTXA TAD D200 KRS TAD DM203 SNA CLA KSF /CHECK FOR ^C TYPED JMP DTAWT TAD D7600 /**PROBLEM: LINK IS RANDOM YET MUST BE 0 DCA DTA /FAKE DTA SO WE GO TO LOC 7600 IN FIELD 0 JMP DSTOP1 /AFTER STOPPING THE TAPE DTAWT, DTSF DTRB JMP .-1 /WAIT FOR SEARCH TO COMPLETE SPA /HAS AN ERROR OCCURED? JMP DERR /DO SOMETHING APPROPRIATE DTRA RTL CMA RTL SNL CLA /WAS MOTIOZ OF TAPE FORWARDS? TAD D3 /NO, SO ONLY SUCCEED IF WE ARE 3 BLOCKS IN FRONT /OF TARGET BLOCK TAD I WC CMA TAD DBLOCK CMA /AFTER THIS OPERATION WE HAVE THE FOLLOWING 4 POSSIBILITIES /1)AC=0, L=1 /SEARCH COMPLETE /2)AC=0, L=0 /RIGHT PLACE ON TAPE,WRONG DIRECTION /3)AC .GT. 0, L=0 /WEVE PASSED THE CORRECT BLOCK /4)AC .GT. 0, L=1 /WE HAVENT REACHED THE CORRECT BLOCK YET SZA CLA JMP DC SNL JMP DTATAD /DC+1 TAD DLOC DCA I CA /SET THE CURRENT ADDRESS REGISTER TO THE BUFFER -1 TAD DFUN DTLB /SET FIELD TO BUFFER FIELD TAD D7700 D200, AND DFUN CLL RAL DCA DBLKCT /GET UNCOMPLEMENTED WORD COUNT INTO DBLKCT RAL IAC CLL CML RTL RTL /FORM A 50 IF L=1, A 30 IF L=0 DL, DTXA /XOR IN 50(WRITE) OR 30(READ) OR 0(CONTINUE PREVIOUS OP) TAD D7600 DCA I WC /READ/WRITE 128 WORDS FROM/INTO EACH BLOCK DTSF DTRB JMP .-1 CLL CML /SET ERROR FLAG ON INITIALLY D7700, SMA CLA JMP DJ ISZ DERRCT /ERROR-IS IT THE THIRD? JMP DTATRY /NO-TRY AGAIN JMP DSTOP /3 ERRORS-STOP TAPE! DJ, TAD DBLKCT TAD D7600 SNA /BUMP WORD COUNT BY -128 AND SEE IF 0 /ALSO REVERSE LINK. JMP DOVER /YES - DONE DCA DBLKCT /RESTORE BUMPED WORD COUNT JMP DL /AND LOOP DOVER, ISZ DTA /SKIP ERROR RETURN DSTOP, HLT /RESTORE CALLING FIELD DSTOP1, TAD D200 /STOP THE TAPE DTXA DCA DTANO /INITIALIZE DTANO FOR THE NEXT CALL RAR /GET ERROR CODE FROM LINK INTO AC0 JMP I DTA /AND EXIT DTA, 0 $ |
Added src/os8/uni/HANDLERS/TC08SY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | /2 TC08 SYSTEM HANDLER / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / VERSION="B&77 *0 -2 DEVICE TC08;DEVICE SYS;4161;2007;0;1341 DEVICE TC08;DEVICE DTA0;4161;1007;0;1341 STARTB-ENDB-1 /NEGATIVE OF LENGTH OF BOOTSTRAP NOPUNCH *7600 ENPUNCH STARTB, TAD B600 /THIS CODE ONLY EXECUTED ON DMS-TYPE BOOTSTRAP DTCA DTXA /ALL IT DOES IS SIMULATE THE OTHER TYPE OF BOOTSTRAP DTSF /MORAL: DISK MONITOR SYSTEM SUCKS JMP .-1 DCA BOOTX DCA BOOTX+1 /FUDGE TO MAKE USE OF SOME COMMON CODE TAD B620 JMP BOOT3 /START READING OVER OURSELVES WITH RECORD 0 AGAIN ZBLOCK 7611-. BM7642, -7641 /MUST BE BEFORE 7617 BOOT1, TAD 7755 TAD BM7642 SNA CLA /WATCH THE PROGRESS OF THE READ JMP BOOT2 /WHEN IT GETS PAST 7643, SWITCH TO FIELD 1 NOP /LOADS OVER DTSF IN 7616 JMP BOOT1 /LOADS OVER JMP .-1 IN 7617 - STARTS BOOTSTRAP BOOT2, TAD B10 DTLB /ZAP A 10 INTO STATUS REG B TO LOAD INTO FIELD 1 DTSF /FROM HERE ON - LOAD THE FIELD 1 RESIDENT INTO FIELD 1 JMP .-1 BOOT3, DTXA /CONTINUE READING NEXT RECORD(ALSO SEE CODE AT 7600) DTLB /INTO FIELD 0 TAD B7577 DCA 7755 /PAGE 7600 DCA 7754 BOOTX, CDF CIF 10 JMP 7642 /JUMP INTO WAIT LOOP IN FIELD 1 JMP BOOT1 /DISK MONITOR FUDGE - JUMP INTO WAITING LOOP B7577, 7577 B10, 10 B600, 600 B620, 620 ZBLOCK 7642-. DCA 7744 DTSF /THIS IS LOADED INTO FIELD 1 WITH MONITOR RESIDENT JMP .-1 /IT IS IN THE CD OUTPUT AREA AND SO WILL BE ZAPPED CDF CIF 0 /BY THE KEYBOARD MONITOR ENDB, JMP 7605 /OK, FIELD 0 RESIDENT READ IN, START UP MONITOR /BOOTSTRAP FOR DECTAPE MONITOR IS THE SAME AS FOR THE /DEC LIBRARY SYSTEM, RL MONITOR AND POLY BASIC - OR JUST /READ RECORD 0 INTO 7600 AND TRANSFER TO 7600 A LA DISK /MONITOR SYSTEM ON DECTAPE DTRB=6772 DTLB=6774 DTXA=6764 DTCA=6762 DTRA=6761 DTSF=6771 *200 NOPUNCH *7600 ENPUNCH SBLOCK=7776 /RELIC FROM OS/8 ASSEMBLY ZBLOCK 7 SHNDLR, VERSION CLA CLL CMA RTL DCA SYSCNT /3 TRIES ON ERROR RDF TAD SCIF DCA SFIELD /RETURN FIELD SETUP TAD I SHNDLR DCA SFUN ISZ SHNDLR CLA CMA TAD I SHNDLR DCA SLOC /BUFFER ADDRESS-1 ISZ SHNDLR STRY, TAD S410 /SETUP DTA0 TO DO SEARCH REVERSE DTCA DTXA /BUT MOTION BIT IS NOT ON DTLB CLA CMA CLL RAL DCA SCA /7776=SBLOCK FROM OS/8 ASSEMBLY TAD SFUN RTR RTR SERR, RTL RAL /LAST 4 INST. PUT MOTION BIT IN LINK /IF THIS BIT WAS SET IN THE CALLING /SEQUENCE, SEARCH STARTS FORWARD. S7600, 7600 TAD S200 SC, SZL TAD S400 DTXA /ZAP MOTION BIT ON DTSF DTRB JMP .-1 SPA /CHECK FOR ANY ERRORS JMP SERR DTRA /NO ERRORS RTL CMA RTL /COMPLEMENT OF DIRECTION TO LINK /IF LINK ON, SEARCHING FORWARD. SNL CLA CML RTL TAD SBLOCK /SEARCH FOR ONE RECORD BEFORE THE /REQUIRED ONE. THEN REVERSE DIRECTION CMA TAD I SHNDLR TAD I SHNDLR /X+X=2*X; RECORDS TO BLOCKS NOP NOP CMA SZA CLA /IS IT PROPER RECORD? JMP SC SNL /YES..IF LINK IS ON,WAS FWD SRCH JMP SC+1 /REVERSE..REVERSE TAPE MOTION /AND SEARCH FORWARD TAD SLOC DCA SCA TAD SFUN DTLB /SET UP FIELD TAD SFUN CLL RAL AND S7600 DCA SBLKCT /BLOCK COUNT RAL /FUNCTION TO BIT 11 IFNZRO .-7700 <NZERR> SKP HLT /TO PROTECT AGAINST BAD PROGRAMMERS IAC CLL CML RTL RTL /FORMS EITHER READ OR WRITE SL, DTXA TAD S7600 DCA SWC /TRANSFER 200 (8) DTSF DTRB JMP .-1 CLL CML /IN CASE OF FATAL ERROR SPA CLA JMP SERR2 TAD SBLKCT TAD S7600 SNA /ALL DONE? JMP SOVER /YES DCA SBLKCT JMP SL SERR2, ISZ SYSCNT /TRY AGAIN? JMP STRY SKP /DON'T BOTHER SOVER, ISZ SHNDLR ISZ SHNDLR TAD S200 /STOP THE TAPE DTXA RAR /GIVE FATAL RETURN SFIELD, HLT JMP I SHNDLR SCIF, CIF 0 S400, 400 S200, 200 S410, 410 SBLKCT=7753 SYSCNT=7750 SFUN=7751 SLOC=7752 SWC=7754 SCA=7755 $ |
Added src/os8/uni/HANDLERS/TD8EA.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 | /4 TD8E HANDLER FOR BUILD..TD8E-A / / / / / / / / / /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. / / / / / / / / / / *0 -2 DEVICE TD8A;DEVICE DTA0;4210;4010;ZBLOCK 2 DEVICE TD8A;DEVICE DTA1;4210;4014;ZBLOCK 2 SDSS=6771 /SKIP ON SINGLE LINE FLAG SDST=6772 /SKIP ON TIME ERROR SDSQ=6773 /SKIP ON QUAD LINE FLAG SDLC=6774 /LOAD TAPE COMMAND REGISTER SDLD=6775 /LOAD DATA REGISTER SDRC=6776 /READ COMMAND REGISTER SDRD=6777 /READ DATA REGISTER TDVERSION="D&77 /V3 CHANGES: /1. VERSION # IS NOW 1 /2. PARITY ^C IS NOW LEGAL /3. ^C CHECK NO LONGER WILL ADVANCE READER /MAINTENANCE RELEASE CHANGES: /4. FIXED ^C BUG /5. MADE CODE IMPROVEMENTS /6. FIXED RETRY BUG *200 NXINIT, 7600 /CLEAR AC HERE!!! JMS I CINIT2 /PART OF INITIALIZATION..DO THE PART BASE2, DCA JINIT /ON SECOND PAGE AND THEN TO JINIT JMP JINIT BUFF, 0 PGCT, 0 FUNCT, 0 C1000, 1000 DTA0, TDVERSION /ENTRY FOR UNIT 0 CLA CLL JMP DTA1X UNIT, 0 /FILLER WORD DTA1, TDVERSION /ENTRY FOR UNIT 1 CLA CLL CML TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /UNIT # FROM LINK RDF TAD C6203 DCA LEAVE /SET UP EXIT FROM HANDLER TAD I DTA0 DCA FUNCT /SAVE FUNCTION WORD TAD FUNCT CLL RAL C200, AND CM200 /GET A PAGE COUNT DCA PGCT TAD FUNCT C374, AND C70 /ISOLATE FIELD OF TRANSFER TAD C6203 DCA XFIELD ISZ DTA0 /POINT TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /POINT TO RECORD TAD I DTA0 CLL RAL /CONVERT TO DECTAPE BLOCKS DCA TBLOCK ISZ DTA0 /POINT TO ERROR RET. C6203, CIF CDF 0 JINIT, JMP INIT /FIRST TIME THRU IT GETS EXECUTED /THE RETURN FROM INIT ZEROES IT CLA CLL CMA RTL DCA ERCNT /3 ERROR TRIES TAD UNIT DCA I CXUNIT JMS I CSELCT /CHECK FOR SELEC ERROR JMP .-1 /LOOPS IF NO ^C AND SELECT ERROR TAD FUNCT CLL RAR JMP GO /OK.. START THE SEARCH TRWCOM, SDST /TIME OR CHECK SUM ERROR? SZA CLA JMP TRY3 /YES TRY UP TO 3 TIMES TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED? TAD CM200 SNA JMP EXIT /YES.. DONE THIS TRANSFER DCA PGCT /NEW PAGE COUNT ISZ TBLOCK TAD BUFF TAD C200 /GET NEW BUFFER ADDRESS DCA BUFF CLL CML /FORCE FORWARD MOTION GO, CLA CML RTR /PUT IN DIRECTION BIT TAD C1000 TAD UNIT SDLC /INITIATE THE MOTION JMS I CRDQAD /WAIT FOR 8 LINES TO PASS JMS I CRDQAD M20, 7760 /DON'T CARE IF IT DOES SKIP!!! TSRCH, SDSS /WAIT FOR BLOCK MARK OR END ZONE JMP .-1 SDRC CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9 AND C374 /ISOLATE M.T BITS TAD M110 /IS IT END ZONE? SNA JMP ENDZ /YES..DO SOMETHING REASONABLE TAD M20 /HOW ABOUT BLOCK MARK? SZA CLA JMP TSRCH /NEITHER..KEEP LOOKING SDRD /WHAT IS THIS BLOCK'S #? SZL /IF IN REVERSE, LOOK FOR 3 BEFORE TAD TC3 /THE ACTUAL TARGET BLOCK CMA TAD TBLOCK CMA SNA /IS THIS THE BLOCK? JMP TFOUND /YES..HAVE CORRECT ONE M110, SZL SNA CLA /ARE WE HEADED PROPERLY? JMP TSRCH /YES.. KEEP LOOKING ENDZ, SDRC /IF WE ARE IN END ZONE FORWARD, WE LOSE CLL RTL JMP GO /EXECUTE TURN AROUND AND SEARCH TRY3, CLA CLL /V3C ISZ ERCNT /TRIED 3 TIMES? JMP GO JMP FATAL EXIT, ISZ DTA0 /NORMAL RETURN CLL CML FATAL, TAD UNIT /STOP TAPE FIRST SDLC CLA CML RAR /EITHER 0 OR 4000 IN AC LEAVE, HLT /GETS CIF CDF N JMP I DTA0 INIT, JMS . /FIND OUT WHERE WE GOT LOADED BASE, TAD CRDQAD SPA /NEGATIVE ENDS LIST JMP NXINIT TAD INIT DCA CRDQAD ISZ .-1 ISZ BASE JMP BASE CRDQAD, R4LINE-BASE CINIT2, INIT2-BASE CSELCT, SELECT-BASE CXUNIT, XUNIT-BASE *367 TFOUND, SZL CLA /ARE WE IN RIGHT DIRECTION JMP GO /NOT YET TAD FUNCT CLL RAL /R/W TO LINK CLA C70, 70 TC3, 3 TAD BUFF XFIELD, HLT /CONTROL 'TRICKLES THROUGH TBLOCK=DTA1 ERCNT=INIT+1 CM200=NXINIT DTA2=DTA0 DTA3=DTA1 DTA4=DTA0 DTA5=DTA1 DTA6=DTA0 DTA7=DTA1 *400 CIF 0 /WE ARE IN FIELD 0 DCA XBUFF RAR DCA XFUNCT /READ/WRITE TO FUNCTION RGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD PATTERN SDRC AND K77 TAD CM32 SZA CLA /IF NOT REV. GUARD, KEEP LOOKING JMP RGRD TAD C7600 DCA WORDS /128 WORDS/BLOCK TAD XFUNCT K7700, SMA CLA /IS IT READ OR WRITE? JMP TREAD SDRC /CHECK FOR WRITE LOCKOUT AND TC300 CLL /SETUP TO RETRY IF WRITE LOCK SZA CLA JMP I CTRY3 /IF LOCKED OUT, ERROR JMS R4LINE /SKIP A WORD C7600, 7600 /CLA TAD C1400 TAD XUNIT SDLC /TURN ON WRITE HEAD CLA CMA JMS W4LINE /7777 IN REV. CHECKSUM CLA CMA DCA CSUM /AND ALSO TAPE CHECKSUM WRTLP, TAD I XBUFF JMS W4LINE ISZ XBUFF /INCREMENT BUFF. ADD. K77, 77 ISZ WORDS /DONE A BLOCK? JMP WRTLP JMS W4LINE /A 129 TH WORD OF 0 JMS GCHK /GET 6 BIT CHECKSUM JMS W4LINE /WRITE IT TO TAPE JMS W4LINE /LET CHECK SUM FINISH JMP I CRWCOM /SEE IF WE ARE FINISHED TREAD, JMS R4LINE JMS R4LINE /SKIP CONTROL WORDS JMS R4LINE AND K77 /CHECKSUM TAD K7700 DCA CSUM RDLP, JMS R4LINE JMS EFUN /ADD WORD TO CHECKSUM DCA I XBUFF ISZ XBUFF TC300, 300 ISZ WORDS /DONE BLOCK? JMP RDLP JMS R4LINE JMS EFUN /CHECK SUM 129 TH WORD JMS R4LINE AND K7700 /READ CHECKSUM JMS EFUN JMS GCHK /COMPARE TAPE AND OUR CHECKSUM JMP I CRWCOM W4LINE, 0 /ADD TO CHECKSUM AND WRITE A 12 BIT JMS EFUN /WORD SDSQ JMP .-1 /SKIP ON QUAD LINE FLAG SDLD CLA /AC IS NOT CLEARED AFTER SDLD JMP I W4LINE R4LINE, 0 /WAIT FOR QUAD FLAG AND READ SDSQ JMP .-1 SDRD JMP I R4LINE EFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA ETMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD ETMP /EQUIVALENCE OF ALL WORDS IN A RCORD AND CSUM /6 BITS AT A TIME. SINCE EQUIVALENCE CIA /IS ASSOCIATIVE WE DO IT 12 AT A TIME CLL RAL /AND CONDENSE LATER. TAD ETMP /IDENTITIES USED ARE: TAD CSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD ETMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EFUN GCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CSUM CLL CMA RTL RTL RTL JMS EFUN CLA CLL CML TAD CSUM AND K7700 JMP I GCHK INIT2, 0 /TIS INITIALIZES LOCS IN PAGE 2 INIT3, TAD CTRY3 SNA JMP I INIT2 /0 ENDS LIST TAD INIT2 DCA CTRY3 /UPDATE THE LIST ISZ .-1 ISZ INIT3 JMP INIT3 CTRY3, TRY3-BASE2 CRWCOM, TRWCOM-BASE2 XBUFF, 0 /0 MUST TERMINATE IT!! CM32, -32 C1400, 1400 SELECT, 0 /THIS ROUTINE CHECKS FOR SELECT TAD XUNIT /AND ^C TYPED SDLC SDRC /GET STATUS AND SEE IF SELECT ERROR ON AND C100 SNA CLA ISZ SELECT /NOPE .TAKE NORMAL OUT KSF /SEE IF FLAG IS UP JMP I SELECT /NO..EXIT TAD C7600 KRS TAD (-7603 /IS IT A ^C? SZA CLA JMP I SELECT /NO..EXIT JMP I C7600 C100, 100 XFUNCT=INIT2 CSUM=XFUNCT+1 WORDS=CSUM+1 ETMP=WORDS+1 XUNIT=ETMP+1 $$$$$$$ |
Added src/os8/uni/HANDLERS/TD8EB.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 | /4 TD8E HANDLER FOR BUILD..TD8E-B / / / / / / / / / /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. / / / / / / / / / / *0 -2 DEVICE TD8B;DEVICE DTA2;4210;4011;ZBLOCK 2 DEVICE TD8B;DEVICE DTA3;4210;4015;ZBLOCK 2 SDSS=6761 /SKIP ON SINGLE LINE FLAG SDST=6762 /SKIP ON TIME ERROR SDSQ=6763 /SKIP ON QUAD LINE FLAG SDLC=6764 /LOAD TAPE COMMAND REGISTER SDLD=6765 /LOAD DATA REGISTER SDRC=6766 /READ COMMAND REGISTER SDRD=6767 /READ DATA REGISTER TDVERSION="D&77 /V3 CHANGES: /1. VERSION # IS NOW 1 /2. PARITY ^C IS NOW LEGAL /3. ^C CHECK NO LONGER ADVANCES READER /MAINTENANCE RELEASE CHANGES: /4. FIXED ^C BUG /5. MADE CODE IMPROVEMENTS /6. FIXED RETRY BUG *200 NXINIT, 7600 /CLEAR AC HERE!!! JMS I CINIT2 BASE2, DCA JINIT JMP JINIT CRDQAD, R4LINE-BASE CINIT2, INIT2-BASE CSELCT, SELECT-BASE CXUNIT, XUNIT-BASE BUFF, 4000 /MUST BE NEGATIVE INITIALLY DTA0, TDVERSION /ENTRY FOR UNIT 0 CLA CLL JMP DTA1X UNIT, 0 /FILLER WORD DTA1, TDVERSION /ENTRY FOR UNIT 1 CLA CLL CML TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /UNIT # FROM LINK RDF TAD C6203 DCA LEAVE /SET UP EXIT FROM HANDLER JINIT, JMP INIT TAD I DTA0 DCA FUNCT /SAVE FUNCTION WORD TAD FUNCT CLL RAL C200, AND CM200 /GET A PAGE COUNT DCA PGCT TAD FUNCT C374, AND C70 /ISOLATE FIELD OF TRANSFER TAD C6203 DCA XFIELD ISZ DTA0 /POINT TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /POINT TO RECORD TAD I DTA0 CLL RAL /CONVERT TO DECTAPE BLOCKS DCA TBLOCK ISZ DTA0 /POINT TO ERROR RET. C6203, CIF CDF 0 /THE RETURN FROM INIT ZEROES IT CLA CLL CMA RTL DCA ERCNT /3 ERROR TRIES TAD UNIT DCA I CXUNIT JMS I CSELCT /CHECK FOR SELEC ERROR JMP .-1 /LOOPS IF NO ^C AND SELECT ERROR TAD FUNCT CLL RAR JMP GO /OK.. START THE SEARCH TRWCOM, SDST /TIME OR CHECK SUM ERROR? SZA CLA JMP TRY3 /YES TRY UP TO 3 TIMES TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED? TAD CM200 SNA JMP EXIT /YES.. DONE THIS TRANSFER DCA PGCT /NEW PAGE COUNT ISZ TBLOCK TAD BUFF TAD C200 /GET NEW BUFFER ADDRESS DCA BUFF CLL CML /FORCE FORWARD MOTION GO, CLA CML RTR /PUT IN DIRECTION BIT TAD C1000 TAD UNIT SDLC /INITIATE THE MOTION JMS I CRDQAD /WAIT FOR 8 LINES TO PASS JMS I CRDQAD M20, 7760 /DON'T CARE IF IT DOES SKIP!!! TSRCH, SDSS /WAIT FOR BLOCK MARK OR END ZONE JMP .-1 SDRC CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9 AND C374 /ISOLATE M.T BITS TAD M110 /IS IT END ZONE? SNA JMP ENDZ /YES..DO SOMETHING REASONABLE TAD M20 /HOW ABOUT BLOCK MARK? SZA CLA JMP TSRCH /NEITHER..KEEP LOOKING SDRD /WHAT IS THIS BLOCK'S #? SZL /IF IN REVERSE, LOOK FOR 3 BEFORE TAD TC3 /THE ACTUAL TARGET BLOCK CMA TAD TBLOCK CMA SNA /IS THIS THE BLOCK? JMP TFOUND /YES..HAVE CORRECT ONE M110, SZL SNA CLA /ARE WE HEADED PROPERLY? JMP TSRCH /YES.. KEEP LOOKING ENDZ, SDRC /IF WE ARE IN END ZONE FORWARD, WE LOSE CLL RTL JMP GO /EXECUTE TURN AROUND AND SEARCH TRY3, CLA CLL /V3C ISZ ERCNT /TRIED 3 TIMES? JMP GO JMP FATAL EXIT, ISZ DTA0 /NORMAL RETURN CLL CML FATAL, TAD UNIT /STOP TAPE FIRST SDLC CLA CML RAR /EITHER 0 OR 4000 IN AC LEAVE, HLT /GETS CIF CDF N JMP I DTA0 INIT, JMS . /FIND OUT WHERE WE GOT LOADED BASE, TAD CRDQAD SPA /NEGATIVE ENDS LIST JMP NXINIT TAD INIT DCA CRDQAD ISZ .-1 ISZ BASE JMP BASE PGCT, 0 FUNCT, 0 C1000, 1000 *367 TFOUND, SZL CLA /ARE WE IN RIGHT DIRECTION JMP GO /NOT YET TAD FUNCT CLL RAL /R/W TO LINK CLA C70, 70 TC3, 3 TAD BUFF XFIELD, HLT /CONTROL 'TRICKLES THROUGH TBLOCK=DTA1 ERCNT=INIT+1 CM200=NXINIT DTA2=DTA0 DTA3=DTA1 DTA4=DTA0 DTA5=DTA1 DTA6=DTA0 DTA7=DTA1 *400 CIF 0 /WE ARE IN FIELD 0 DCA XBUFF RAR DCA XFUNCT /READ/WRITE TO FUNCTION RGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD PATTERN SDRC AND K77 TAD CM32 SZA CLA /IF NOT REV. GUARD, KEEP LOOKING JMP RGRD TAD C7600 DCA WORDS /128 WORDS/BLOCK TAD XFUNCT K7700, SMA CLA /IS IT READ OR WRITE? JMP TREAD SDRC /CHECK FOR WRITE LOCKOUT AND TC300 CLL /SETUP TO RETRY IF WRITE LOCK SZA CLA JMP I CTRY3 /IF LOCKED OUT, ERROR JMS R4LINE /SKIP A WORD C7600, 7600 /CLA TAD C1400 TAD XUNIT SDLC /TURN ON WRITE HEAD CLA CMA JMS W4LINE /7777 IN REV. CHECKSUM CLA CMA DCA CSUM /AND ALSO TAPE CHECKSUM WRTLP, TAD I XBUFF JMS W4LINE ISZ XBUFF /INCREMENT BUFF. ADD. K77, 77 ISZ WORDS /DONE A BLOCK? JMP WRTLP JMS W4LINE /A 129 TH WORD OF 0 JMS GCHK /GET 6 BIT CHECKSUM JMS W4LINE /WRITE IT TO TAPE JMS W4LINE /LET CHECK SUM FINISH JMP I CRWCOM /SEE IF WE ARE FINISHED TREAD, JMS R4LINE JMS R4LINE /SKIP CONTROL WORDS JMS R4LINE AND K77 /CHECKSUM TAD K7700 DCA CSUM RDLP, JMS R4LINE JMS EFUN /ADD WORD TO CHECKSUM DCA I XBUFF ISZ XBUFF TC300, 300 ISZ WORDS /DONE BLOCK? JMP RDLP JMS R4LINE JMS EFUN /CHECK SUM 129 TH WORD JMS R4LINE AND K7700 /READ CHECKSUM JMS EFUN JMS GCHK /COMPARE TAPE AND OUR CHECKSUM JMP I CRWCOM W4LINE, 0 /ADD TO CHECKSUM AND WRITE A 12 BIT JMS EFUN /WORD SDSQ JMP .-1 /SKIP ON QUAD LINE FLAG SDLD CLA /AC IS NOT CLEARED AFTER SDLD JMP I W4LINE R4LINE, 0 /WAIT FOR QUAD FLAG AND READ SDSQ JMP .-1 SDRD JMP I R4LINE EFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA ETMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD ETMP /EQUIVALENCE OF ALL WORDS IN A RCORD AND CSUM /6 BITS AT A TIME. SINCE EQUIVALENCE CIA /IS ASSOCIATIVE WE DO IT 12 AT A TIME CLL RAL /AND CONDENSE LATER. TAD ETMP /IDENTITIES USED ARE: TAD CSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD ETMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EFUN GCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CSUM CLL CMA RTL RTL RTL JMS EFUN CLA CLL CML TAD CSUM AND K7700 JMP I GCHK INIT2, 0 /TIS INITIALIZES LOCS IN PAGE 2 INIT3, TAD CTRY3 SNA JMP I INIT2 /0 ENDS LIST TAD INIT2 DCA CTRY3 /UPDATE THE LIST ISZ .-1 ISZ INIT3 JMP INIT3 CTRY3, TRY3-BASE2 CRWCOM, TRWCOM-BASE2 XBUFF, 0 /0 MUST TERMINATE IT!! CM32, -32 C1400, 1400 SELECT, 0 /THIS ROUTINE CHECKS FOR SELECT TAD XUNIT /AND ^C TYPED SDLC SDRC /GET STATUS AND SEE IF SELECT ERROR ON AND C100 SNA CLA ISZ SELECT /NOPE .TAKE NORMAL OUT KSF /SEE IF FLAG IS UP JMP I SELECT /NO..EXIT TAD C7600 KRS TAD (-7603 /IS IT ^C? SZA CLA JMP I SELECT /NO..EXIT JMP I C7600 C100, 100 XFUNCT=INIT2 CSUM=XFUNCT+1 WORDS=CSUM+1 ETMP=WORDS+1 XUNIT=ETMP+1 $$$$$$$ |
Added src/os8/uni/HANDLERS/TD8EC.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 | /4 TD8E HANDLER FOR BUILD..TD8E-C / / / / / / / / / /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. / / / / / / / / / / *0 -2 DEVICE TD8C;DEVICE DTA4;4210;4012;ZBLOCK 2 DEVICE TD8C;DEVICE DTA5;4210;4016;ZBLOCK 2 SDSS=6751 /SKIP ON SINGLE LINE FLAG SDST=6752 /SKIP ON TIME ERROR SDSQ=6753 /SKIP ON QUAD LINE FLAG SDLC=6754 /LOAD TAPE COMMAND REGISTER SDLD=6755 /LOAD DATA REGISTER SDRC=6756 /READ COMMAND REGISTER SDRD=6757 /READ DATA REGISTER TDVERSION="D&77 /V3 CHANGES: /1. VERSION # IS NOW 1 /2. PARITY ^C IS NOW LEGAL /3. INITIALIZATION BUG FIXED /4. ^C CHECK NO LONGER ADVANCES READER /MAINTENANCE RELEASE CHANGES: /5. FIXED ^C BUG /6. MADE CODING IMPROVEMENTS /7. FIXED RETRY BUG *200 NXINIT, 7600 /CLEAR AC HERE!!! JMS I CINIT2 /PART OF INITIALIZATION..DO THE PART BASE2, DCA JINIT /ON SECOND PAGE AND THEN TO JINIT JMP JINIT CRDQAD, R4LINE-BASE CINIT2, INIT2-BASE CSELCT, SELECT-BASE CXUNIT, XUNIT-BASE BUFF, 4000 /V3 PGCT, 0 DTA0, TDVERSION /ENTRY FOR UNIT 0 CLA CLL JMP DTA1X UNIT, 0 /FILLER WORD DTA1, TDVERSION /ENTRY FOR UNIT 1 CLA CLL CML TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /UNIT # FROM LINK RDF TAD C6203 DCA LEAVE /SET UP EXIT FROM HANDLER JINIT, JMP INIT TAD I DTA0 DCA FUNCT /SAVE FUNCTION WORD TAD FUNCT CLL RAL C200, AND CM200 /GET A PAGE COUNT DCA PGCT TAD FUNCT C374, AND C70 /ISOLATE FIELD OF TRANSFER TAD C6203 DCA XFIELD ISZ DTA0 /POINT TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /POINT TO RECORD TAD I DTA0 CLL RAL /CONVERT TO DECTAPE BLOCKS DCA TBLOCK ISZ DTA0 /POINT TO ERROR RET. C6203, CIF CDF 0 CLA CLL CMA RTL DCA ERCNT /3 ERROR TRIES TAD UNIT DCA I CXUNIT JMS I CSELCT /CHECK FOR SELEC ERROR JMP .-1 /LOOPS IF NO ^C AND SELECT ERROR TAD FUNCT CLL RAR JMP GO /OK.. START THE SEARCH TRWCOM, SDST /TIME OR CHECK SUM ERROR? SZA CLA JMP TRY3 /YES TRY UP TO 3 TIMES TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED? TAD CM200 SNA JMP EXIT /YES.. DONE THIS TRANSFER DCA PGCT /NEW PAGE COUNT ISZ TBLOCK TAD BUFF TAD C200 /GET NEW BUFFER ADDRESS DCA BUFF CLL CML /FORCE FORWARD MOTION GO, CLA CML RTR /PUT IN DIRECTION BIT TAD C1000 TAD UNIT SDLC /INITIATE THE MOTION JMS I CRDQAD /WAIT FOR 8 LINES TO PASS JMS I CRDQAD M20, 7760 /DON'T CARE IF IT DOES SKIP!!! TSRCH, SDSS /WAIT FOR BLOCK MARK OR END ZONE JMP .-1 SDRC CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9 AND C374 /ISOLATE M.T BITS TAD M110 /IS IT END ZONE? SNA JMP ENDZ /YES..DO SOMETHING REASONABLE TAD M20 /HOW ABOUT BLOCK MARK? SZA CLA JMP TSRCH /NEITHER..KEEP LOOKING SDRD /WHAT IS THIS BLOCK'S #? SZL /IF IN REVERSE, LOOK FOR 3 BEFORE TAD TC3 /THE ACTUAL TARGET BLOCK CMA TAD TBLOCK CMA SNA /IS THIS THE BLOCK? JMP TFOUND /YES..HAVE CORRECT ONE M110, SZL SNA CLA /ARE WE HEADED PROPERLY? JMP TSRCH /YES.. KEEP LOOKING ENDZ, SDRC /IF WE ARE IN END ZONE FORWARD, WE LOSE CLL RTL JMP GO /EXECUTE TURN AROUND AND SEARCH TRY3, CLA CLL /V3C ISZ ERCNT /TRIED 3 TIMES? JMP GO JMP FATAL EXIT, ISZ DTA0 /NORMAL RETURN CLL CML FATAL, TAD UNIT /STOP TAPE FIRST SDLC CLA CML RAR /EITHER 0 OR 4000 IN AC LEAVE, HLT /GETS CIF CDF N JMP I DTA0 INIT, JMS . /FIND OUT WHERE WE GOT LOADED BASE, TAD CRDQAD SPA /NEGATIVE ENDS LIST JMP NXINIT TAD INIT DCA CRDQAD ISZ .-1 ISZ BASE JMP BASE FUNCT, 0 C1000, 1000 *367 TFOUND, SZL CLA /ARE WE IN RIGHT DIRECTION JMP GO /NOT YET TAD FUNCT CLL RAL /R/W TO LINK CLA C70, 70 TC3, 3 TAD BUFF XFIELD, HLT /CONTROL 'TRICKLES THROUGH TBLOCK=DTA1 ERCNT=INIT+1 CM200=NXINIT DTA2=DTA0 DTA3=DTA1 DTA4=DTA0 DTA5=DTA1 DTA6=DTA0 DTA7=DTA1 *400 CIF 0 /WE ARE IN FIELD 0 DCA XBUFF RAR DCA XFUNCT /READ/WRITE TO FUNCTION RGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD PATTERN SDRC AND K77 TAD CM32 SZA CLA /IF NOT REV. GUARD, KEEP LOOKING JMP RGRD TAD C7600 DCA WORDS /128 WORDS/BLOCK TAD XFUNCT K7700, SMA CLA /IS IT READ OR WRITE? JMP TREAD SDRC /CHECK FOR WRITE LOCKOUT AND TC300 CLL /SETUP TO RETRY IF WRITE LOCK SZA CLA JMP I CTRY3 /IF LOCKED OUT, ERROR JMS R4LINE /SKIP A WORD C7600, 7600 /CLA TAD C1400 TAD XUNIT SDLC /TURN ON WRITE HEAD CLA CMA JMS W4LINE /7777 IN REV. CHECKSUM CLA CMA DCA CSUM /AND ALSO TAPE CHECKSUM WRTLP, TAD I XBUFF JMS W4LINE ISZ XBUFF /INCREMENT BUFF. ADD. K77, 77 ISZ WORDS /DONE A BLOCK? JMP WRTLP JMS W4LINE /A 129 TH WORD OF 0 JMS GCHK /GET 6 BIT CHECKSUM JMS W4LINE /WRITE IT TO TAPE JMS W4LINE /LET CHECK SUM FINISH JMP I CRWCOM /SEE IF WE ARE FINISHED TREAD, JMS R4LINE JMS R4LINE /SKIP CONTROL WORDS JMS R4LINE AND K77 /CHECKSUM TAD K7700 DCA CSUM RDLP, JMS R4LINE JMS EFUN /ADD WORD TO CHECKSUM DCA I XBUFF ISZ XBUFF TC300, 300 ISZ WORDS /DONE BLOCK? JMP RDLP JMS R4LINE JMS EFUN /CHECK SUM 129 TH WORD JMS R4LINE AND K7700 /READ CHECKSUM JMS EFUN JMS GCHK /COMPARE TAPE AND OUR CHECKSUM JMP I CRWCOM W4LINE, 0 /ADD TO CHECKSUM AND WRITE A 12 BIT JMS EFUN /WORD SDSQ JMP .-1 /SKIP ON QUAD LINE FLAG SDLD CLA /AC IS NOT CLEARED AFTER SDLD JMP I W4LINE R4LINE, 0 /WAIT FOR QUAD FLAG AND READ SDSQ JMP .-1 SDRD JMP I R4LINE EFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA ETMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD ETMP /EQUIVALENCE OF ALL WORDS IN A RCORD AND CSUM /6 BITS AT A TIME. SINCE EQUIVALENCE CIA /IS ASSOCIATIVE WE DO IT 12 AT A TIME CLL RAL /AND CONDENSE LATER. TAD ETMP /IDENTITIES USED ARE: TAD CSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD ETMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EFUN GCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CSUM CLL CMA RTL RTL RTL JMS EFUN CLA CLL CML TAD CSUM AND K7700 JMP I GCHK INIT2, 0 /TIS INITIALIZES LOCS IN PAGE 2 INIT3, TAD CTRY3 SNA JMP I INIT2 /0 ENDS LIST TAD INIT2 DCA CTRY3 /UPDATE THE LIST ISZ .-1 ISZ INIT3 JMP INIT3 CTRY3, TRY3-BASE2 CRWCOM, TRWCOM-BASE2 XBUFF, 0 /0 MUST TERMINATE IT!! CM32, -32 C1400, 1400 SELECT, 0 /THIS ROUTINE CHECKS FOR SELECT TAD XUNIT /AND ^C TYPED SDLC SDRC /GET STATUS AND SEE IF SELECT ERROR ON AND C100 SNA CLA ISZ SELECT /NOPE .TAKE NORMAL OUT KSF /SEE IF FLAG IS UP JMP I SELECT /NO..EXIT TAD C7600 KRS TAD (-7603 /IS IT ^C? SZA CLA JMP I SELECT /NO..EXIT JMP I C7600 C100, 100 XFUNCT=INIT2 CSUM=XFUNCT+1 WORDS=CSUM+1 ETMP=WORDS+1 XUNIT=ETMP+1 $$$$$$$ |
Added src/os8/uni/HANDLERS/TD8ED.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 | /4 TD8E HANDLER FOR BUILD..TD8E-D / / / / / / / / / /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. / / / / / / / / / / *0 -2 DEVICE TD8D;DEVICE DTA6;4210;4013;ZBLOCK 2 DEVICE TD8D;DEVICE DTA7;4210;4017;ZBLOCK 2 SDSS=6741 /SKIP ON SINGLE LINE FLAG SDST=6742 /SKIP ON TIME ERROR SDSQ=6743 /SKIP ON QUAD LINE FLAG SDLC=6744 /LOAD TAPE COMMAND REGISTER SDLD=6745 /LOAD DATA REGISTER SDRC=6746 /READ COMMAND REGISTER SDRD=6747 /READ DATA REGISTER TDVERSION="D&77 /V3 CHANGES: /1. VERSION # IS NOW 1 /2. PARITY ^C IS NOW LEGAL /3. INITIALIZATION BUG FIXED /4. ^C CHECK NO LONGER ADVANCES READER /MAINTENANCE RELEASE CHANGES: /5. FIXED ^C BUG /6. MADE CODE IMPROVEMENTS /7. FIXED RETRY BUG *200 NXINIT, 7600 /CLEAR AC HERE!!! JMS I CINIT2 /PART OF INITIALIZATION..DO THE PART BASE2, DCA JINIT /ON SECOND PAGE AND THEN TO JINIT JMP JINIT CRDQAD, R4LINE-BASE CINIT2, INIT2-BASE CSELCT, SELECT-BASE CXUNIT, XUNIT-BASE BUFF, 4000 /V3 PGCT, 0 FUNCT, 0 DTA0, TDVERSION /ENTRY FOR UNIT 0 CLA CLL JMP DTA1X UNIT, 0 /FILLER WORD DTA1, TDVERSION /ENTRY FOR UNIT 1 CLA CLL CML TAD DTA1 DCA DTA0 /PICK UP ARGS AT DTA0 DTA1X, RAR DCA UNIT /UNIT # FROM LINK RDF TAD C6203 DCA LEAVE /SET UP EXIT FROM HANDLER JINIT, JMP INIT TAD I DTA0 DCA FUNCT /SAVE FUNCTION WORD TAD FUNCT CLL RAL C200, AND CM200 /GET A PAGE COUNT DCA PGCT TAD FUNCT C374, AND C70 /ISOLATE FIELD OF TRANSFER TAD C6203 DCA XFIELD ISZ DTA0 /POINT TO BUFFER TAD I DTA0 DCA BUFF ISZ DTA0 /POINT TO RECORD TAD I DTA0 CLL RAL /CONVERT TO DECTAPE BLOCKS DCA TBLOCK ISZ DTA0 /POINT TO ERROR RET. C6203, CIF CDF 0 CLA CLL CMA RTL DCA ERCNT /3 ERROR TRIES TAD UNIT DCA I CXUNIT JMS I CSELCT /CHECK FOR SELEC ERROR JMP .-1 /LOOPS IF NO ^C AND SELECT ERROR TAD FUNCT CLL RAR JMP GO /OK.. START THE SEARCH TRWCOM, SDST /TIME OR CHECK SUM ERROR? SZA CLA JMP TRY3 /YES TRY UP TO 3 TIMES TAD PGCT /NO.. IS PAGE COUNT EXHAUSTED? TAD CM200 SNA JMP EXIT /YES.. DONE THIS TRANSFER DCA PGCT /NEW PAGE COUNT ISZ TBLOCK TAD BUFF TAD C200 /GET NEW BUFFER ADDRESS DCA BUFF CLL CML /FORCE FORWARD MOTION GO, CLA CML RTR /PUT IN DIRECTION BIT TAD C1000 TAD UNIT SDLC /INITIATE THE MOTION JMS I CRDQAD /WAIT FOR 8 LINES TO PASS JMS I CRDQAD M20, 7760 /DON'T CARE IF IT DOES SKIP!!! TSRCH, SDSS /WAIT FOR BLOCK MARK OR END ZONE JMP .-1 SDRC CLL RTL /DIRECTION TO LINK, DATA TO AC 4-9 AND C374 /ISOLATE M.T BITS TAD M110 /IS IT END ZONE? SNA JMP ENDZ /YES..DO SOMETHING REASONABLE TAD M20 /HOW ABOUT BLOCK MARK? SZA CLA JMP TSRCH /NEITHER..KEEP LOOKING SDRD /WHAT IS THIS BLOCK'S #? SZL /IF IN REVERSE, LOOK FOR 3 BEFORE TAD TC3 /THE ACTUAL TARGET BLOCK CMA TAD TBLOCK CMA SNA /IS THIS THE BLOCK? JMP TFOUND /YES..HAVE CORRECT ONE M110, SZL SNA CLA /ARE WE HEADED PROPERLY? JMP TSRCH /YES.. KEEP LOOKING ENDZ, SDRC /IF WE ARE IN END ZONE FORWARD, WE LOSE CLL RTL JMP GO /EXECUTE TURN AROUND AND SEARCH TRY3, CLA CLL /V3C ISZ ERCNT /TRIED 3 TIMES? JMP GO JMP FATAL EXIT, ISZ DTA0 /NORMAL RETURN CLL CML FATAL, TAD UNIT /STOP TAPE FIRST SDLC CLA CML RAR /EITHER 0 OR 4000 IN AC LEAVE, HLT /GETS CIF CDF N JMP I DTA0 INIT, JMS . /FIND OUT WHERE WE GOT LOADED BASE, TAD CRDQAD SPA /NEGATIVE ENDS LIST JMP NXINIT TAD INIT DCA CRDQAD ISZ .-1 ISZ BASE JMP BASE C1000, 1000 *367 TFOUND, SZL CLA /ARE WE IN RIGHT DIRECTION JMP GO /NOT YET TAD FUNCT CLL RAL /R/W TO LINK CLA C70, 70 TC3, 3 TAD BUFF XFIELD, HLT /CONTROL 'TRICKLES THROUGH TBLOCK=DTA1 ERCNT=INIT+1 CM200=NXINIT DTA2=DTA0 DTA3=DTA1 DTA4=DTA0 DTA5=DTA1 DTA6=DTA0 DTA7=DTA1 *400 CIF 0 /WE ARE IN FIELD 0 DCA XBUFF RAR DCA XFUNCT /READ/WRITE TO FUNCTION RGRD, SDSS JMP .-1 /LOOK FOR REVERSE GUARD PATTERN SDRC AND K77 TAD CM32 SZA CLA /IF NOT REV. GUARD, KEEP LOOKING JMP RGRD TAD C7600 DCA WORDS /128 WORDS/BLOCK TAD XFUNCT K7700, SMA CLA /IS IT READ OR WRITE? JMP TREAD SDRC /CHECK FOR WRITE LOCKOUT AND TC300 CLL /SETUP TO RETRY IF WRITE LOCK SZA CLA JMP I CTRY3 /IF LOCKED OUT, ERROR JMS R4LINE /SKIP A WORD C7600, 7600 /CLA TAD C1400 TAD XUNIT SDLC /TURN ON WRITE HEAD CLA CMA JMS W4LINE /7777 IN REV. CHECKSUM CLA CMA DCA CSUM /AND ALSO TAPE CHECKSUM WRTLP, TAD I XBUFF JMS W4LINE ISZ XBUFF /INCREMENT BUFF. ADD. K77, 77 ISZ WORDS /DONE A BLOCK? JMP WRTLP JMS W4LINE /A 129 TH WORD OF 0 JMS GCHK /GET 6 BIT CHECKSUM JMS W4LINE /WRITE IT TO TAPE JMS W4LINE /LET CHECK SUM FINISH JMP I CRWCOM /SEE IF WE ARE FINISHED TREAD, JMS R4LINE JMS R4LINE /SKIP CONTROL WORDS JMS R4LINE AND K77 /CHECKSUM TAD K7700 DCA CSUM RDLP, JMS R4LINE JMS EFUN /ADD WORD TO CHECKSUM DCA I XBUFF ISZ XBUFF TC300, 300 ISZ WORDS /DONE BLOCK? JMP RDLP JMS R4LINE JMS EFUN /CHECK SUM 129 TH WORD JMS R4LINE AND K7700 /READ CHECKSUM JMS EFUN JMS GCHK /COMPARE TAPE AND OUR CHECKSUM JMP I CRWCOM W4LINE, 0 /ADD TO CHECKSUM AND WRITE A 12 BIT JMS EFUN /WORD SDSQ JMP .-1 /SKIP ON QUAD LINE FLAG SDLD CLA /AC IS NOT CLEARED AFTER SDLD JMP I W4LINE R4LINE, 0 /WAIT FOR QUAD FLAG AND READ SDSQ JMP .-1 SDRD JMP I R4LINE EFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM CMA DCA ETMP /ACTUALLY CHECKSUMS ON DECTAPE ARE TAD ETMP /EQUIVALENCE OF ALL WORDS IN A RCORD AND CSUM /6 BITS AT A TIME. SINCE EQUIVALENCE CIA /IS ASSOCIATIVE WE DO IT 12 AT A TIME CLL RAL /AND CONDENSE LATER. TAD ETMP /IDENTITIES USED ARE: TAD CSUM /A+B=(A.XOR.B)+2*(A.AND.B) DCA CSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) TAD ETMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) CMA JMP I EFUN GCHK, 0 /FORM 6 BIT CHECKSUM CLA TAD CSUM CLL CMA RTL RTL RTL JMS EFUN CLA CLL CML TAD CSUM AND K7700 JMP I GCHK INIT2, 0 /TIS INITIALIZES LOCS IN PAGE 2 INIT3, TAD CTRY3 SNA JMP I INIT2 /0 ENDS LIST TAD INIT2 DCA CTRY3 /UPDATE THE LIST ISZ .-1 ISZ INIT3 JMP INIT3 CTRY3, TRY3-BASE2 CRWCOM, TRWCOM-BASE2 XBUFF, 0 /0 MUST TERMINATE IT!! CM32, -32 C1400, 1400 SELECT, 0 /THIS ROUTINE CHECKS FOR SELECT TAD XUNIT /AND ^C TYPED SDLC SDRC /GET STATUS AND SEE IF SELECT ERROR ON AND C100 SNA CLA ISZ SELECT /NOPE .TAKE NORMAL OUT KSF /SEE IF FLAG IS UP JMP I SELECT /NO..EXIT TAD C7600 KRS TAD (-7603 /IS IT ^C? SZA CLA JMP I SELECT /NO..EXIT JMP I C7600 C100, 100 XFUNCT=INIT2 CSUM=XFUNCT+1 WORDS=CSUM+1 ETMP=WORDS+1 XUNIT=ETMP+1 $$$$$$$ |
Added src/os8/uni/HANDLERS/TD8ESY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 | /3 TD8E SYSTEM RESIDENT (12K) / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / *0 -3 DEVICE TD8E;DEVICE SYS;4211;6007;0;1341 DEVICE TD8E;DEVICE DTA0;4211;5007;0;1341 DEVICE TD8E;DEVICE DTA1;4211;SDTA1&177+5000;0;1341 TDBEGN-TD77-1 RELOC 7360 /THE BINARY GETS LOADED INTO 27220 INITIALY, AND /WRITTEN OUT AS PART OF RECORD 0. WHEN THE 30 WORD /BOOTSTRAP IS USED, THIS CODE GETS READ INTO 7400. SDSS=6771 SDST=6772 SDSQ=6773 SDLC=6774 SDLD=6775 SDRC=6776 SDRD=6777 TDBEGN, ZBLOCK 20 TDBOOT, TAD K7600 /128 WORDS PER PAGE DCA TDWCT SDSS /WAIT FOR A BLOCK MARK (TAPE IS JMP .-1 /STILL MOVING) SDRC AND TD77 TAD KM26 /IS IT A BLOCK MARK? SZA CLA JMP TDBOOT+2 /NO..WAIT A WHILE LONGER SDRD /GET THE BLOCK NO. TDBKNO, TAD TDM14 /NEED DECTAPE BLOCKS 154 & 155 (REC. 66) SZA CLA JMP TDBOOT+2 /NOT YET, BUSTER TDRGRD, SDSS JMP .-1 /NOW LET'S LOOK FOR A REVERSE GUARD WORD SDRC AND TD77 TAD KM32 SZA CLA JMP TDRGRD /KEEP LOOKING FOR IT JMS TDRQD JMS TDRQD JMS TDRQD /SKIP CONTROL WORDS CDF 10 /LOAD UP FIELD 1 TDREAD, JMS TDRQD /GET A DATA WORD DCA I TDPTR ISZ TDPTR /ARE WE DONE? JMP TDREAD /NOT YET ISZ TDBKNO /YES..LOOK AT BLOCK 15 TAD KCDF20 DCA TDREAD-1 /LOAD UP FIELD 2 ISZ M2 /DONE THIS JUNK? JMP TDBOOT /GO DO FIELD 2 SDLC /STOP THE TAPE CIF CDF 0 JMP I K7605 TDM14, -154 -155 /USE RECORD 66 TDPTR, TDWCT, 7600 TDRQD, 0 SDSQ JMP .-1 SDRD JMP I TDRQD K7600, 7600 KM26, -26 KM32, -32 KCDF20, CDF 20 M2, -2 K7605, 7605 TD77, 77 / THIS BOOTSTRAP RESIDES IN BLOCK 0 / BLOCK 1/2 CONTAINS THE USUAL IMAGE OF 07600 / BLOCK 66 CONTAINS THE IMAGE OF 17600 / BLOCK 66 1/2 CONTAINS THE IMAGE OF 27600 RELOC *200 /TD8E DECTAPE SYSTEM HANDLER /THIS HANDLER CAN DRIVE UNITS 0&1, AND IS PERMANENTLY /RESIDENT IN FIELDS 0&2. RELOC 7600 VERSION="B&77 ZBLOCK 7 SHNDLR, VERSION /UNIT 0 ENTRY POINT CLA CLL JMP SHND2 C3, 3 /MUST BE HERE FOR BUILD S70, 70 SDTA1, VERSION /UNIT 1 ENTRY CLA CLL CML SC1000, TAD SDTA1 /DOUBLES AS CONSTANT 1000 DCA SHNDLR /GET ARGS AT SHNDLR SHND2, RAR /UNIT # DCA SUNIT RDF /SETUP FOR EXIT TAD S6203 DCA EFLD TAD I SHNDLR /FUNCTION WORD SDLD /PUT IT IN DATA EGISTER AND S70 /SDLD DOES NOT 0 AC..GET FIELD TAD S6203 /CIF CDF N FOR TRANSFER FIELD DCA TFLD ISZ SHNDLR TAD I SHNDLR /BUFFER ADDRESS DCA BPTR ISZ SHNDLR TAD I SHNDLR /BLOCK #. TIMES 2 FOR REAL # CLL RAL DCA BLOCK ISZ SHNDLR /POINT TO ERROR EXIT CIF CDF 20 /PUT UNIT # INTO FIELD 2 TAD SUNIT DCA I SUNIT2 JMP F2SET /TO FIELD 2 FOR INIT. F1GO, SDRD /INITIAL DIRECTION TO LINK RAR JMP RGO RENTER, TAD BPTR /DONE THIS BLOCK..NEXT ADDRESS TAD SC200 DCA BPTR ISZ BLOCK /NEXT TAPE BLOCK..CAN'T SKIP CLL CML /FORCE FORWARD MOTION RGO, CLA CML RTR /LINK TO MOTION BIT TAD SC1000 TAD SUNIT SDLC /MOVE THE TAPE SDSQ JMP .-1 SDRD /KNOCK DOWN QUAD FLAG SDSQ JMP .-1 SDRD /THIS IS NEEDED, ELSE TIME ERROR!!! SRCH, SDSS /WAIT FOR A BLOCK MARK JMP .-1 SDRC /GET MARK TRACK BITS CLL RTL /DIRECTION TO LINK AND SC374 TAD SM110 /IS IT A N END ZONE? SNA JMP SENDZ /YES TAD SM20 /MAYBE A BLOCK MARK? SZA CLA JMP SRCH /NEITHER..KEEP GOING SDRD /READ THE BLOCK # SZL /IF REVERSE, LOOK 3 AHEAD OF TARGET TAD C3 CMA TAD BLOCK CMA SNA /IS IT THE RIGHT ONE? JMP FOUND /YES SM110, CLA SNA SZL /SNA SUPERFLUOUS..ONLY SZL VALID JMP SRCH /HEADED FOR IT..KEEP GOING SENDZ, SDRC CLL RTL SZL CLA /IF IN END ZONE FORWARD, GIVE ERROR JMP RGO CIF 20 /IF IT IS REALL END ZONE, AN ERROR JMP ERROR FOUND, SZL CLA /RIGHT BLOCK..HOW ABOUT DIRECTION? JMP RGO /WRONG..EXECUTE TURNAROUND TAD BPTR TFLD, HLT /GETS CIF CDF N CIF 20 JMP RDWT /LET'S TRANSFER DATA SEXIT, ISZ SHNDLR /NORMAL RETURN SEREX, TAD SUNIT /STOP THE TAPE SDLC CML CLA RAR /EITHER 0 OR 4000 IN AC ON RETURN EFLD, HLT JMP I SHNDLR BPTR=7755 BLOCK=7754 SUNIT=SDTA1 S6203, 6203 SC200, 200 SC374, 374 SM20, -20 SUNIT2, SXUNIT RELOC *400 RELOC 7600 /RUNS IN 27600 XPTR, 0 /BUFFER POINTER F2SET, CLA CLL CMA RTL /3 ERROR TRIES DCA TRYCNT TAD SXUNIT /MAKE SURE TAPE IS STOPPED SDLC F26203, CIF CDF 0 SDRD /FUNCTION WORD CLL RAL AND CX7600 /PAGE COUNT DCA XPGCT SDRD DCA SXFUN /SAVE THE FUNCTION WORD JMP F1GO RDWT, DCA XPTR /SAVE NEW BUFFER ADDRESS TAD CX7600 DCA XWCNT /128 WORDS PER BLOCK REVGRD, SDSS /WAIT FOR REVERSE GUARD WORD JMP .-1 SDRC AND X77 TAD XM32 /IS IT REVERSE GUARD? SZA CLA JMP REVGRD /NO TAD SXFUN SK7700, SMA CLA /READ OR WRITE? JMP READ /READ SDRC AND C300 /ERRORS ON WRITE LOCKOUT AND TIME SZA CLA JMP ERROR JMS RDQUAD /SKIP A WORD CX7600, 7600 TAD WRLP TAD SXUNIT SDLC /TURN ON THE WRITE CLA CMA JMS WRQUAD /WRITE 7777 IN REV. CHECKSUM CLA CMA DCA SCKSUM /AND ALSO IN COMPUTE CHECKSUM WRLP, TAD I XPTR JMS WRQUAD /WRITE THE DATA ISZ XPTR X77, 77 /JUST IN CASE ISZ XWCNT /DONE 128? JMP WRLP JMS WRQUAD /WRITE AND CHECKSUM A WORD OF 0 JMS GETCHK /GET CHECKSUM JMS WRQUAD JMS WRQUAD /LET CHECKSUM GET WRITTEN RWCOM, SDST /CHECK FOR TIME AND CHECKSUM ERRORS SZA CLA JMP ERROR /NOTE THAT LINK IS OFF AT RWCOM CIF CDF 0 TAD XPGCT /FINISHED TRANSFER? TAD CX7600 /LINK GOES ON HERE SNA JMP SEXIT /YES..GETOUT DCA XPGCT JMP RENTER READ, JMS RDQUAD /SKIP CONTROL WORDS JMS RDQUAD JMS RDQUAD /GET CHECKSUM AND X77 TAD SK7700 DCA SCKSUM SRDLP, JMS RDQUAD DCA I XPTR TAD I XPTR JMS EQUFUN ISZ XPTR C300, 300 ISZ XWCNT /DONE ALL? JMP SRDLP /NO JMS RDQUAD /READ AND CHECKSUM LAST WORD JMS EQUFUN JMS RDQUAD /GET CHECKSUM AND SK7700 JMS EQUFUN JMS GETCHK JMP RWCOM ERROR, CLA CLL /THIS CAUSES SEARCH REVERSE AT RGO CIF CDF 0 ISZ TRYCNT /EXHAUSTED ERROR TRIES? JMP RGO JMP SEREX /YES..FATAL EXIT WRQUAD, 0 /WRITE A 12 BIT WORD SDSQ JMP .-1 SDLD JMS EQUFUN /SDLD LEAVES AC ALONE JMP I WRQUAD RDQUAD, 0 /READ A 12 BIT WORD SDSQ JMP .-1 SDRD JMP I RDQUAD EQUFUN, 0 /EQUIVALENCE CHECKSUM CMA DCA EQUTMP TAD EQUTMP AND SCKSUM CIA CLL RAL TAD EQUTMP TAD SCKSUM DCA SCKSUM JMP I EQUFUN GETCHK, 0 TAD SCKSUM CLL CMA RTL RTL RTL JMS EQUFUN TAD SCKSUM AND SK7700 JMP I GETCHK SXUNIT, 0 XPGCT, 0 SXFUN, 0 TRYCNT, 0 XWCNT, 0 XM32, -32 SCKSUM, 0 EQUTMP, 0 /THE LAST 4 LOCS. ARE FREE FOR USE BY BATCH ZBLOCK 4 RELOC $ |
Added src/os8/uni/HANDLERS/TM8E.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 | /16 TM8-E MAGTAPE HANDLER FOR OS/8 / / /COPYRIGHT (C) 1973,1974,1975 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONTRUED 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. / / / / / LWCR=6701 /LOAD WORD COUNT REGISTER AND CLEAR AC LCAR=6703 /LOAD CURRENT ADDRESS REGISTER AND CLEAR AC LCMR=6705 /LOAD COMMAND REGISTER AND CLEAR AC LFGR=6706 /LOAD FUNCTION REGISTER AND CLEAR AC CLT=6712 /CLEAR TRANSPORT RMSR=6714 /CLEAR AC AND READ MAIN STATUS REGISTER RFSR=6716 /CLEAR AC AND READ STUFF SKEF=6721 /SKIP IF ERROR FLAG IS SET SKJD=6723 /SKIP IF THE JOB IS DONE (MTTF IS SET) SKTR=6724 /SKIP IF TAPE UNIT READY (TUR TRUE) MTAVERSION="F&77 /SPECIAL CODES USED WHEN PAGE COUNT=0 (CODES IN BITS 9-11 OF FN WORD) /0 (CLOSE) WRITE 2 EOF'S /1 REWIND /2 SPACE FORWARD/REVERSE RECORDS / IF BIT 0 OF THE FUNCTION WORD IS A 0, / THIS CODE ADVANCES RECORDS. / THE NEGATIVE OF THE NUMBER OF RECODRDS IS SPECIFIED IN ARG 3 / IF BIT 0 OF THE FUNCTION WORD IS A 1, / THIS CODE BACKSPACES RECORDS. / THE NEGATIVE OF THE NUMBER OF RECORDS IS SPECIFIED AS ARG 3. / UNDER NO CIRCUMSTANCES DOES THIS COMMAND CONTINUE PAST A FILE MARK. /3 SPACE FORWARD/REVERSE FILES / IF BIT 0 OF THE FUNCTION WORD IS A 0 / THEN THIS FUNCTION ADVANCE FILE MARKS / THE NEGATIVE OF THE NUMBER OF FILE MARKS IS SPECIFIED BY ARG3 / THE TAPE IS LEFT POSITIONED AFTER THIS FILE MARK / BUT UNDER NO CIRCUMSTANCES DOES THE TAPE ADVANCE PAST / THE SECOND MARK OF TWO CONSECUTIVE FILE MARKS / IF BIT 0 OF THE FUNCTION WORD IS A 1, / THIS CODE BACKSPACES PAST FILE MARKS. / THE NEGATIVE OF THE NUMBER OF FILE MARKS IS SPECIFIED BY ARG 3. / THE TAPE IS LEFT POSITIONED BEFORE THE LAST FILE MARK, / SO THE USER PROBABLY WANTS TO DO A FORWARD RECORD NEXT. /4 REWIND AND PUT OFF-LINE /5 WRITE EOF /6 PERFORM OPERATION WITH SPECIFIED BLOCKSIZE / THE NEGATIVE OF THE DESIRED BLOCKSIZE IS SPECIFIED AS ARG 3. /7 CURRENTLY UNUSED /NOTE: SKIP TO EOD CAN BE PERFORMED BY SKIPPING 4096 FILES /MAINTENANCE RELEASE CHANGES: /1. MAJOR CODE OVERHAUL /2. SKIP RECORDS RETURNS NON-FATAL ERROR IF IT DETECTS FILE MARK /3. SKIP FORWARD FILES NEVER EVER PASSES EOD /4. SKIP FORWARD FILES RETURNS ERROR IF IT STARTS IMMEDIATELY / BEFORE A FILE MARK (UNLESS IT'S AT BOT) / IT THEN REMAINS BEFORE THE FILE MARK /5. FIXED TIMING PROBLEM FOR TS03 /6. CHANGED ORDER OF TEST FOR DATA DURING SKIP FORWARD FILES /7. MADE UNUSED FUNCTION CODE 7 ACT SAME AS 0 /BUILD DESCRIPTOR BLOCK *0 -10 /8 ENTRY POINTS DEVICE TM8E;DEVICE MTA0;200;MTA0&177+4000;ZBLOCK 2 DEVICE TM8E;DEVICE MTA1;200;MTA1&177+4000;ZBLOCK 2 DEVICE TM8E;DEVICE MTA2;200;MTA2&177+4000;ZBLOCK 2 DEVICE TM8E;DEVICE MTA3;200;MTA3&177+4000;ZBLOCK 2 DEVICE TM8E;DEVICE MTA4;200;MTA4&177+4000;ZBLOCK 2 DEVICE TM8E;DEVICE MTA5;200;MTA5&177+4000;ZBLOCK 2 DEVICE TM8E;DEVICE MTA6;200;MTA6&177+4000;ZBLOCK 2 DEVICE TM8E;DEVICE MTA7;200;MTA7&177+4000;ZBLOCK 2 *200 PARITY, 402 /CHANGE TO 2 TO HAVE EVEN PARITY BLOCK0, 0 /SET TO 1 TO INHIBIT REWIND ON BLOCK 0 MTATAD, TAD MTA0 /USED TO MAKE HANDLER SERIALLY REUSABLE /CONTENTS MUST BE 13XX [V3C] MTISZ, ISZ MTANO /DITTO STOP, ISZ MTHX MTEXIT, HLT /CIF CDF TO USER'S FIELD JMP I MTHX PNEXT, 0 /V3C CLA TAD MTANO /GET UNIT # CIA TAD MTATAD /FIND WHICH ENTRY POINT DCA MTFUN /MAKE A 'TAD MTAN' AND EXECUTE IT MTFUN, HLT DCA MTHX /COLLECT ARGUMENTS VIA 'MTHX' CLA STL RTR /2000 TAD MTFUN /MAKE A 'DCA MTAN' AND EXECUTE IT DCA NBLOK TAD MTISZ /RESTORE DESTROYED ISZ NBLOK, HLT TAD I MTHX /GET FUNCTION WORD DCA MTFUN /SAVE IT IN 'MTFUN' ISZ MTHX /POINT TO BUFFER ADDRESS STA /GET ONE LESS THAN TAD I MTHX /BUFFER ADDRESS DCA NBUFF /AND STORE AWAY ISZ MTHX /POINT TO BLOCK NUMBER TAD I MTHX /GET BLOCK NUMBER DCA NBLOK /STORE AWAY ISZ MTHX /POINT TO ERROR RETURN RDF /GET CALLING FIELD TAD MTCDIF /CREATE CIF CDF TO USER'S FIELD DCA MTEXIT /STORE AWAY WHERE WILL BE USEFUL LATER MTCDIF, CIF CDF 0 /GO TO FIELD 0 TAD MTANO /GET UNIT NUMBER CLL RTR RTR DCA MTANO /PUT IN BITS 0-2 OF 'MTANO' TAD MTFUN /RETRIEVE FUNCTION WORD AND L70 /ISOLATE FIELD OF BUFFER TAD PARITY /SET ODD PARITY BITS, AND DENSITY 8 (800 BPI, 7-CHANNEL) TAD MTANO /COMBINE WITH UNIT NUMBER DCA MTAWD /TO GET A USEFUL MTA COMMAND TAD MTFUN /ZERO BUFFER FOR PIP ON EOF AND L70 /FIELD OF ORIGIN TAD MTCDF DCA USRCDF USRCDF, MTANO, 0 DCA MTANO /RESET 'MTANO' FOR NEXT CALL TAD MTFUN RAL AND P7600 /GET # OF WORDS IN BUFFER SNA SZL /ZERO BUFFER IF READING JMP P7600 CIA DCA MTH TAD NBUFF DCA ERROR MCLRLP, ISZ ERROR L100, 100 DCA I ERROR ISZ MTH JMP MCLRLP P7600, 7600 MTCDF, CDF 0 TAD BLOCK0 SNA /OPERATE IN MULTIPLE-FILE MODE? TAD NBLOK /RETRIEVE BLOCK SZA CLA /IS IT BLOCK 0? JMP BIGBLK /NO TAD MTATAD /YES, REWIND [CAN BE 13XX] JMS MTH /CALL MAGTAPE ROUTINE MTAWD, 1000 /CA IMMATERIAL M7603, -7603 /WC IMMATERIAL L70, 70 /NO REWIND ERRORS (THESE CAN'T OCCUR) BIGBLK, TAD MTFUN JMS I PNEXT /GO READ OR WRITE NEXT PAGE NBUFF, 0 /ONE LESS THAN ADDRESS OF BUFFER /MUST BE AT LOC AFTER CALL TO NEXT / MTH /SET UP WC AND CA REGISTERS, LOAD FUNCTION AND GO /CALLING SEQUENCE: / TAD (FNWORD / JMS MTH / BUFFER ADDRESS-1 / -WORD COUNT / MASK FOR UNACCEPTABLE ERROR CONDITIONS / <NORMAL RETURN> / TAKES HANDLER ERROR RETURN ON ERRORS. / IF ERROR, AC HAS ERROR CODE FROM MAIN STATUS REGISTER / AC IS POSITIVE IF E.O.F. READ MTH, 0 /MUST BE AT 2ND LOC AFTER CALL TO NEXT DCA ERROR /SAVE FUNCTION TEMPORARILY SKTR /V3C JMP .-1 /FIX TIMING BUG CLT /CLEAR THE WORLD TAD MTAWD LCMR /LOAD COMMAND REGISTER TAD I MTH /GET CURRENT ADDRESS LCAR /LOAD IT ISZ MTH /POINT TO WORD COUNT TAD I MTH /GET WORD COUNT (TWO'S COMPLEMENT THEREOF) LWCR /LOAD IT ISZ MTH /POINT TO ERROR MASK TAD ERROR /GET FUNCTION BACK LFGR /GO BABY GO JMS ERROR /CHECK FOR ERROR SKJD /THROUGH? JMP .-2 /NO JMS ERROR /YES, ANY ERRORS? E1, ISZ MTH /AMAZING WE MADE IT (NO ERRORS) JMP I MTH /NORMAL RETURN IFNZRO MTH-NBUFF-1 <MTHERR,XXX> ERROR, 0 TAD P7600 /YES KRS /IS IT CTRL/C? TAD M7603 /ALLOW PARITY TELETYPES SNA CLA KSF JMP SIFE CLT /ABORT I/O JMP I P7600 /RETURN TO OS/8 KEYBOARD MONITOR SIFE, SKEF /SKIP ON ERROR JMP I ERROR /RETURN, NO ERRORS RMSR /WHAT'S CAUSING THE ERROR? AND I MTH /IS IT A GOOD ONE? (USE ERROR MASK) SNA CLA /IS ERROR ACCEPTABLE? JMP E1 /YES RMSR /NOT ACCEPTABLE AND L100 /IS IT AN E.O.F.? SNA /IF SO, LEAVE BIT 0 CLEAR RMSR JMP MTEXIT /AND LEAVE WITH STATUS IN AC IFZERO .-367&4000 <PERR,ZZXX> *366 MTHX, MTAVERSION MTA7, ISZ MTANO MTA6, ISZ MTANO MTA5, ISZ MTANO MTA4, ISZ MTANO MTA3, ISZ MTANO MTA2, ISZ MTANO MTA1, ISZ MTANO MTA0, ISZ MTANO JMS PNEXT /GET ADDRESS OF FIRST LOCATION ON NEXT PAGE PAGE IFNZRO PARITY-200 <PARERR,ZZZ> *400 NEXT, 0 DCA RECNO /READ OR WRITE AND HOW MANY TAD NEXT TAD KSTOP DCA NSTOP /ADDRESS OF RETURN ROUTINES TAD NEXT TAD KBLOK DCA WC TAD I WC DCA WC TAD I NEXT DCA BUFFER /GET BUFFER ADDRESS - 1 ISZ NEXT /POINT TO MTH TAD (3677 /V3C DCA ERFLAG /DEFAULT IS REPORT ALL ERRORS EXCEPT EOF TAD RECNO CLL RAL /LINK SPECIFIES READ OR WRITE AND L7600 /-(# OF BLOCKS)^200 SNA JMP ZERO /0 PAGE COUNT! DCA RECNO SZL /READ OR WRITE? STL CLA RTR /WRITE. +2000 TO CONVERT READ CODE TO WRITE CODE TAD L2100 /READ (OR WRITE) & GO DCA TEMP /SAVE THIS COMMAND TAD L7600 DCA WC /OS/8 USES 128 WORD BLOCKS STA /V3C DCA ERFLAG /NOW DEFAULT IS REPORT ALL ERRORS RL1, TAD TEMP JMS GO TAD BUFFER /NEXT 200 WORDS TAD L200 DCA BUFFER TAD RECNO /ANY MORE? TAD L7600 SNA JMP I NSTOP /NO, FINISH DCA RECNO /YES, LOOP JMP RL1 /REJOIN PROCESSING KSTOP, STOP-NBUFF /USED TO RELOCATE 'STOP' KBLOK, NBLOK-NBUFF FLAG, 0 COUNT, TEMP, 0 EFL2, TAD L5100 JMS GO /ALL THIS CODE IS NEW FOR V3C EFL1, TAD L5100 JMP GOO /V3C GO, 0 JMS I NEXT /CALL MTH BUFFER, HLT WC, 0 ERFLAG, -1 JMP I GO L5100, 5100 RECNO, 0 NSTOP, 0 L7, 7 L2100, 2100 ZERO, TAD RECNO /RETRIEVE FN WORD (MUST PRESERVE LINK) AND L7 /ISOLATE SPECIAL CODE TAD PJUMP DCA .+1 FN, HLT /BRANCH THROUGH JUMP TABLE TABLE, JMP EFL2 /0 CLOSE. WRITE TWO EOF'S JMP REW /1 REWIND JMP SPACE /2 SPACE FORWARD/REVERSE RECORDS JMP SEOF /3 SPACE FORWARD/REVERSE FILES JMP UNLOAD /4 REWIND AND OFF-LINE JMP EFL1 /5 WRITE EOF JMP SPEC /6 READ OR WRITE WITH SPECIAL BLOCKSIZE PJUMP, JMP TABLE /7 UNUSED SAME AS 0 SEOF, RAR /LINK ON MEANS REVERSE RTR DCA FN TAD WC DCA COUNT STA DCA WC RMSR AND (3000 /CHECK BOT BIT SZA CLA /SIMULATE DATA IF AT BOT (OR REWINDING) FILE, CLA IAC FILE2, DCA FLAG TAD FN TAD L6100 /V3C FORWARD [OR BACKSPACE] A RECORD JMS GO RMSR AND P100 SNA CLA /SKIP IF FILE MARK FOUND JMP FILE TAD FN TAD FLAG SZA CLA /WAS THERE ANY DATA? JMP CONT /V3C YES, CONTINUE /EITHER SAW DATA OR WAS GOING IN REVERSE STL /NO, BACKSPACE ONE RECORD SPACE, CLA CMA /V3C DON'T TOUCH LINK DCA ERFLAG /ALL ERRORS ARE FATAL RAR /LINK ON MEANS REVERSE (READ BIT) STL RAR STL RAR UNLOAD, TAD P100 /ADD IN 'GO' BIT GOO, JMS GO JMP I NSTOP CONT, ISZ COUNT /V3C JMP FILE2 /CONTINUE? JMP I NSTOP /CHECK FOR EOD BEFORE COUNT /FLAG .NE. 0 MEANS SAW DATA L6100, 6100 P100, 100 L7600, 7600 SPEC, CLA CMA /V3C DON'T TOUCH LINK DCA ERFLAG /ALL ERRORS ARE NOW FATAL SZL /LINK STILL CONTAINS READ/WRITE BIT STL CLA RTR TAD L2100 /V3C JMP GOO /V3C REW, DCA ERFLAG /NO REWIND ERRORS TAD (1000 /V3C JMP UNLOAD /V3C L200, 200 PAGE $ |
Added src/os8/uni/HANDLERS/VR12.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 | /25 OS/12 SCOPE HANDLER / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / / NOVEMBER, 1972 / MARIO DENOBILI, P?S / THIS ROUTINE WAS WRITTEN VERY HASTILY. / THE FOLLOWING FEATURES SHOULD BE PUT / IN, BUT I WAS TOO LAZY TO DO SO. / WITH A FEW HOURS WORK, A COMPETENT / PROGRAMMER SHOULD BE ABLE TO COMPACT / MY HASTY CODE AND EASILY ADD AT LEAST / A FEW OF THE FOLLOWING FEATURES: /1. TABS SHOULD BE HANDLED CORRECTLY. /2. FORM FEEDS SHOULD SIGNAL A NEW / SCOPE PAGE. [BRANCH TO LOCATION 'FULL'] /3. VERTICAL TABS SHOULD BE TREATED AS / 7 LINE FEEDS. /4. THE HANDLER SHOULD RETURN AN ERROR ON READ. /5. IF THE BUFFER OVERLAPS THE BETA REGISTER, / OR WRAPS AROUND 7777. / THIS SHOULD NOT CAUSE A CRAPPY / CHARACTER TO BE DISPLAYED. /6. CTRL/Z SHOULD BE CHECKED FOR AND SIGNIFY / END OF BUFFER. [BRANCH TO 'FULL' WITH / LINK 0] /7. THE DISPLAY ALGORITHM SHOULD BE IMPROVED / SO THAT THERE IS LESS FLICKER. /MORE FEATURES TO BE ADDED /8. THE RESTRICTION THAT THE USER'S BUFFER / START AT AN EVEN ADDRESS IS USELESS / AND SHOULD BE REMOVED. /9. THE STATUS OF THE SPECIAL FUNCTIONS / REGISTER SHOULD BE SAVED AND RESTORED / BEFORE EXITING. /10. WHEN ANOTHER LOCATION IS FOUND, THE HANDLER / SHOULD BE ABLE TO DETECT PARITY ^C /11. SENSE SWITCH 0 SHOULD BE USED TO / SPECIFY SMALL OR LARGE SIZE CHARACTERS. /12. OVERFLOW LINES SHOULD BE INDENTED SOME SMALL / AMOUNT TO SHOW THAT THEY ARE A CONTINUATION / OF THE PREVIOUS LINE / OS/8 BUILD HEADER BLOCK FIELD 0 *0 -1 DEVICE VR12 /DEVICE NAME DEVICE TV /HANDLER NAME 1300 /DCB WORD 4000+SCOPE-200 /2-PAGE FLAG AND RELATIVE ENTRY PT ZBLOCK 2 / TWO PAGE SCOPE DEVICE HANDLER / PAGE INDEPENDENT AND REUSABLE LINC=6141 PDP=2 ESF=4 CLR=11 *200 L26, 26 SAVE, 0 /BETA REG SAVE LOC - MAY BE BETA REG LINKNT, TAD SAVE /COUNT OF # OF LINES YCOORD, AND SCDF /DISPLAY ORDIANTE BETA, DCA . /8-MODE ADDRESS OF BETA REGISTER 1 CBASE, TAD SAVE /POINTS TO CHARACTER DISPLAY TABLE BUFEND, TAD XCIF /END OF BUFFER BPTR, DCA CBASE /POINTS INTO BUFFER BUFFER, TAD X /BEGINNING OF BUFFER T1, DCA BEGIN /TEMPORARY L7410, SKP TVERSION="A&77 SCOPE, TVERSION BEGIN, JMS SAVE /ADDRESS MUST BE EVEN AND L70 /GET DATA FIELD OF BUFFER TAD KCDF DCA SCDF KCC RDF /GET DATA FIELD TAD FULL DCA XCIF X, TAD I SCOPE /GET FUNCTION WORD CLL RAL AND L7700 /GET # OF PAGES ISZ SCOPE SNA JMP OVERX TAD I SCOPE /ADD IN BUFFER START DCA BUFEND /TO GET END OF BUFFER TAD I SCOPE /GET BUFFER START DCA BUFFER /[RESTRICTION: IT MUST BE EVEN] CDF 0 TAD I BETA DCA SAVE /SAVE CONTENTS OF BETA REGISTER /MAIN LOOP - GET CHARACTERS AND CALL DISPLAY ROUTINE NEW, LAS /LINE COUNT FROM SWITCH REGISTER DCA LINKNT DCA I BETA /GO TO LEFT MARGIN TAD BUFFER DCA BPTR /POINT TO BEGIN OF BUFFER TAD YINIT DCA YCOORD /GO TO TOP OF SCREEN ENTRY, JMS DISP /DISPLAY 3D CHAR ( ALSO SETS DF) TAD BPTR CMA CLL TAD BUFEND /COMPARE BUFFER PTR WITH BUFFER END SNL CLA /AT END OF BUFFER? JMP FULL /YES - LINK OFF AT FULL MEANS EXIT ROTT1, RTL /NOTE LINK=1 IF WE FELL INTO HERE! RTL /ROTATE HI ORDER BITS INTO SHIFT REG SPA /TEST FOR SHIFT REGISTER FULL JMP ENTRY /YES - GO DIAPLAY IT DCA T1 /RESAVE SHIFT REGISTER TAD I BPTR /GET NEXT BUFFER WORD JMS DISP /DISPLAY LOW-ORDER TAD I BPTR ISZ BPTR /BUMP PTR / NOP AND L7410 /GET HIGH ORDER - THE 10 IS HARMLESS CLL RAL TAD T1 /ADD HIGH ORDER TO SHIFT REGISTER. JMP ROTT1 /INVOLUTED CODE. /DISPLAY SUBROUTINE - DISPLAYS A CHARACTER DISP, 0 KCDF, CDF 0 YINIT, AND L177 SNA JMP SCDF /IGNORE NULLS TAD L7640 CLL CML TAD L100 /CHECK WHETHER THE CHARACTER SZL /IS OUTSIDE OF THE RANGE [40,137] JMP UGH /YES - SUBSTITUTE SPACE OR L.F. CLL RAL MAGIC, TAD CBASE /ADD IN BASE ADDR DCA RIGHT /GET DISPLAY BIT PATTERN PTR TAD I RIGHT DCA LEFT /GET LEFT HALF OF DISPLAY BITS ISZ RIGHT TAD I RIGHT DCA RIGHT /GET RIGHT HALF TAD YCOORD /PUT ORDINATE IN AC LINC YINC, 1760 /DSC I LEFT, 0 /DISPLAY LEFT HALF 1760 /DSC I RIGHT, 0 /DISPLAY RIGHT HALF CLR ESF /SMALL CHARACTERS! PDP ISZ I BETA /LEAVE A BISSEL SPACE TAD I BETA /GET ABSCISSA TAD LINEND /COMPARE WITH RIGHT MARGIN L7700, SMA CLA /AT RIGHT EDGE OF SCREEN? JMP NEWLIN /YES, GO TO NEXT LINE SCDF, 6001 /NO, SET PROPER DF JMP I DISP /RETURN /DISPLAY ROUTINE CONTINUED UGH, TAD L26 /CHECK FOR LINE FEED LINEND, RTR /OR FORM FEED (LINK=0!) L7640, SZA CLA JMP MAGIC /OTHER CONTROL CHARS PRINT BLNK NEWLIN, DCA I BETA /BACK TO LEFT MARGIN TAD YCOORD TAD YINC DCA YCOORD /MOVE DOWN TO NEXT LINE ISZ LINKNT /AT BOTTOM OF SCREEN? JMP SCDF /NO CLL CLA CMA RAL /TAKE QUOT ON DIV BY 2 AND BPTR /AND LEAVE IN AC FULL, CIF CDF 0 /YES KSF /GO TO NEXT SCOPE PAGE? JMP NEW /NO, REFRESH DCA BUFFER /GET NEW BUFFER 'START' SZL /END OF BUFFER ? JMP NOW /NO, REFRESH TAD SAVE DCA I BETA /RESTORE BETA REGISTER OVERX, CLA STL RAL IAC /ADD 3 TAD SCOPE /TO RET ADDRESS DCA SCOPE XCIF, CHRTBL-BEGIN-1 /RESTORE INST FIELD & DATA FIELD JMP I SCOPE /LEAVE L177, 177 L100, 100 NOW, KRB / AND L177 TAD M3 SZA CLA JMP NEW JMP I .+1 7605 L70, 70 M3, -203 /** TEMP /BETTER STUFF, PRINTS ^C /NOW, TAD L7600 / KRS / TAD M7603 / SZA CLA / JMP NEW / JMP I L7600 /L7600, 7600 /M7603, -7603 PAGE /THE TABLE OF PATTERN WORDS BEGINS HERE CHRTBL, 0000; 0000 /SPACE 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 /0 2101; 0177 /1 4523; 2151 /2 4122; 2651 /3 2414; 0477 /4 5172; 0651 /5 1506; 4225 /6 4443; 6050 /7 5126; 2651 /8 5122; 3651 /9 2200; 0000 /: 4601; 0000 /; 2410; 0042 /< 1212; 1212 /= 4200; 1024 /> 4020; 2055 /? 4136; 3656 /@ 4477; 7744 /A 5177; 2651 /B 4136; 2241 /C 4177; 3641 /D 4577; 4145 /E 4477; 4044 /F 4136; 2645 /G 1077; 7710 /H 7741; 0041 /I 4142; 4076 /J 1077; 4324 /K 0177; 0301 /L 3077; 7730 /M 3077; 7706 /N 4177; 7741 /O 4477; 3044 /P 4276; 0376 /Q 4477; 3146 /R 5121; 4651 /S 4040; 4077 /T 0177; 7701 /U 0176; 7402 /V 0677; 7701 /W 1463; 6314 /X 0770; 7007 /Y 4543; 6151 /Z 4177; 0000 /[ 3040; 0106 /\ 0000; 7741 /] 2000; 2076 /^ 1604; 0404 /_ $ |
Added src/os8/uni/HANDLERS/VT50.PA.
cannot compute difference between binary files
Added src/os8/uni/HANDLERS/VXNS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | /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 <SYS=0> /SET TO 1 TO GET SYSTEM HANDLER -1 IFZERO SYS <DEVICE VXA0;DEVICE VXA0;4333;MEM&177;ZBLOCK 2> IFNZRO SYS <DEVICE VXA0;DEVICE SYS;4333;2007;0;200> 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 <JMS CTRLC> 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/uni/HANDLERS/VXSY.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | /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 <SYS=0> /SET TO 1 TO GET SYSTEM HANDLER -1 IFZERO SYS <DEVICE VXA0;DEVICE VXA0;4333;MEM&177;ZBLOCK 2> IFNZRO SYS <DEVICE VXA0;DEVICE SYS;4333;2007;0;200> 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 <JMS CTRLC> 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/uni/LANGUAGE/BASIC/BASIC.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 | /OS8 BASIC EDITOR, V5A / / / / / / / // / / / / /COPYRIGHT (C) 1972, 1973, 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. / / / / / / /DEC-S8-LBASA-B-LA / /COPYRIGHT C 1972, 1973, 1974 / /DIGITAL EQUIPMENT CORPORATION /MAYNARD,MASSACHUSETTS 01754 / /AUGUST 19, 1972 / /HANK MAURER, 1972 /LEN ELEKMAN, 1972 /SHAWN SPILMAN, 1973 / / /ASSEMBLE AND LOAD AS FOLLOWS: / / .R PAL8 / *BASIC,BASIC<BASIC.03 / .R ABSLDR / *BASIC$ / .SA SYS BASIC;3211 / /NOTE DIFFERENCES FROM VERSION 1 AS FOLLOWS: / / .R SRCCOM / *LPT:<BASIC.01,BASIC.03 / * / VERSON= 5 /VERSION LOCATED IN CORE AT TAG "VERLOC" /LEFT 6BIT HALF = VERSION NUMBER+21 /RIGHT 6BIT HALF = PATCH LEVEL+41 (A=01) / /FIXES FOR V4 J.K. 1975 / /.LINE TOO LONG ERROR MESSAGE /.CLEAR CD OPTION TABLE AT START UP /.LIST FROM ACROSS FLD BOUNDRIES /.MEMORY OVERFLOW /.INPUT FROM TTY /JR 5-APR-77 ADDED EXTENDED DATE PRINTOUT /JR 13-APR-77 ADDED SCROLLING, SCOPE SUPPORT AND .BASIC COMMAND INTERFACE /JR 30-APR-77 FIX JSW FIELD BUG // 14-DEC-2018 LHN - INSTALLED DSN PATCH 31.12.1 M BCSIZE= 3700 / SIZE OF BCOMP.SV BCBEGN= 7001 / START OF BCOMP INFO= 7604 / INFORMATION AREA (FIELD 1) JSW= 7746 /JOB STATUS WORD IN FIELD 0 OS8RES= 3400 / SWAP AREA FOR OS8 DSKBUF= 4200 / FILE BUFFER HANDLR= 4600 / INPUT OUTPUT HANDLER ADDRESS TXTAREA=5200 / START OF TEXT AREA MDATE= 7666 /ADDR OF OS8 DATE IN FIELD 1 BIPCCL= 7777 /ADDR OF DATE EXTENSION IN FIELD 0 *3 SWAPT1, 0 SWAPT2, 0 SWAPT3, 0 SWAPT4, 0 0 X10, INFO-1 X11, NAMLST-1 X12, 0 X13, 0 X14, 0 X15, 0 X16, 0 X17, 0 *20 RDTMP, 0 /USED BY INPUT ROUTINE RDPTR, 0 SIZE, 0 /USED BY LINE EDITOR STUFF TEMP, 0 TEMP2, 0 TOWARD, 0 PTR, 0 NDIGS, 0 NCHARS, 0 COFLAG, 0 /=0 IF CTRL/O CHNFLAG,0 /=1 IF BACK FROM RUN, 0 IF OLD RUNFLAG,0 /=1 IF RUN, 0 IF SAVE OLDFLAG,0 /=1 IF INPUT COMING FROM FILE EOFADR, TXTAREA CORTMP, 0 CORSIZ, 1 LINENO, 0;0 /HOLDS MOST RECENT LINE NUM EOFLIN, 0;0 /LAST LINE NUMBER NAME, 0;0;0;0 /NAME BUFFER FNAME, FILENAME NONAME.BA /CURRENT FILE NAME DEVHAN, 0 /ADDRESS OF DEVICE HANDLER DEVNUM, 0 /CURRENT DEVICE NUMBER SWPNUM, 0 /SWAPPER FLAG (FOR ^C) O7700, 7700 O200, 200 O201, 201 O7761, 7761 O177, 177 O232, 232 O7201, 7201 O7706, 7706 O32, 32 O7200, 7200 O7600, 7600 O17, 17 O260, 260 O237, 237 O13, 13 O215, 215 O212, 212 O37, 37 O7741, 7741 O7405, 7405 O7701, 7701 O7772, 7772 O6171, 6171 O6211, 6211 O7770, 7770 O6201, 6201 O10, 10 O7774, 7774 O7766, 7766 O7634, 7634 O137, 137 O7746, 7746 O36, 36 O77, 77 O7745, 7745 O12, 12 O7771, 7771 O7400, 7400 O7760, 7760 / O14, 14 CSFLG, 0 PAGE GETLIN, 0 /GET A LINE FROM TTY. TAD I (HEIGHT /RESET SCREEN HEIGHT ON USER INPUT DCA I (LINCNT DCA NDIGS /CLEAR LINE NUMBER. DCA CSFLG /ZERO OUT ^S FLAG WHENEVER WE GET INPUT DCA NCHARS /CLEAR TEXT COUNT. IGNORE, CLA JMS I [GETCH DCA TEMP2 /SAVE CHAR CLL CMA RTL /CHECK FOR CONTROL C TAD TEMP2 SNA JMP I (BYEBYE /ITS ^C EXIT TO OS8 TAD O7766 /CHECK FOR CARRIAGE RETURN SNA JMP CARRET /JUMP IF 015 - CARRET. TAD O7770 /CHECK FOR ^U SNA JMP ALT /TREAT ^U AS ALTMODE TAD O7772 /CHECK FOR ALTMODE SNA JMP ALT /JUMP IF 033 - ALTMODE. TAD O7634 /CHECK FOR RUBOUT SNA JMP ARROW /TREAT LIKE BACK ARROW IAC /CHECK FOR ALTMODE SNA JMP ALT /JUMP IF 176 - ALTMODE. IAC SZA JMP .+4 /PRINT IF 175 - ALTMODE. ALT, JMS I [TYPE MSGALT JMP GETLIN+1 TAD O36 /CHECK FOR BACK ARROW SNA JMP ARROW /JUMP IF 137 - BACKARROW. CLL TAD O77 SNL JMP IGNORE /JUMP IF NOT PRINTABLE. IAC DCA TEMP /SAVE IT(SP=01,^=77,NO 00). TAD OLDFLAG /INPUT FROM FILE ? SZA CLA JMP .+3 /YES, DON'T ECHO TAD TEMP2 JMS I [TTYOUT /PRINT ON TTY TAD NCHARS SZA CLA JMP ISTEXT /NOT LINE NUMBER. TAD TEMP TAD O7745 /SEE IF ITS A DIGIT JMS I [LNDIG /PUT DIGIT INTO LINE NUM JMP IGNORE /GET NEXT CHAR ISTEXT, TAD NCHARS /PUT CHAR IN THE LINE. TAD O7405 SPA CLA JMP .+5 JMS I [CRLF JMS I [TYPE /250 CHARS IS OK TO FIT 1 MORE. MSGTOO JMP GETLIN+1/IF AN EVEN NUMBER TAD NCHARS /OF CHARS SO FAR CLL RAR TAD [LINE+2 DCA PTR SZL JMP RIGHTY TAD TEMP /THEN STORE AS THE LEFT CLL RTL /HALF OF THE WORD. RTL RTL JMP .+4 RIGHTY, TAD I PTR /ELSE AS THE RIGHT. AND O7700 TAD TEMP DCA I PTR ISZ NCHARS JMP IGNORE ARROW, TAD OLDFLAG /INPUT FROM FILE ? SNA CLA JMS I (PRTBSP /NO, GO PRINT BACKSPACE OR BACKARROW CLA CMA TAD NCHARS /IF THERE IS A TEXT CHAR TO ERASE SPA JMP .+3 DCA NCHARS /THEN ERASE IT. JMP IGNORE TAD NDIGS /OTHERWISE, IF THERE IS A LINENO SMA /CHARACTER TO ERASE THEN ERASE DCA NDIGS /THAT. JMP IGNORE /OTHERWISE, NEVER MIND. CARRET, TAD OLDFLAG /INPUT FROM FILE ? SNA CLA JMS I [CRLF /NO, PRINT CR-LF TAD NCHARS SZA JMP .+4 /NOT AN EMPTY LINE TAD NDIGS /ANY CHARS AT ALL ? SNA CLA JMP IGNORE /NO, IGNORE EMPTY LINES CLL RAR TAD [LINE+2 DCA PTR SZL TAD I PTR /STORE 00 (CAR. RET.) LIKE ALL AND O7700 /THE OTHER CHARACTERS. DCA I PTR JMS I [NORM /NORMALIZE LINE NUMBER JMP I GETLIN /CRLF, 0 /PRINT CR-LF / TAD O215 / JMS I [TTYOUT / TAD O212 / JMS I [TTYOUT / JMP I CRLF DUMMY, 0 CLA ISZ DUMMY JMP I DUMMY PATCH4, TAD [NAME+3 DCA TEMP2 CMA DCA SIZE JMP I (NAMLUP PAGE LNDIG, 0 /GET DIGIT INTO LINE NUM CLL TAD O12 SZL JMP .+4 CLA /NOT A DIGIT ISZ LNDIG /RETURN +1 JMP I LNDIG DCA TEMP /SAVE DIGIT ISZ NDIGS TAD NDIGS TAD O7771 SMA JMP I LNDIG /IGNORE MORE THAN 6 DIGITS. TAD .+3 DCA .+1 /PUT IN THE NTH DIGIT IN THE HLT /4 BIT BCD LINE NUMBER: JMP .+7 JMP DIG1 JMP DIG2 JMP DIG3 JMP DIG4 JMP DIG5 DIG6, TAD LINENO+1/WHERE N=6 AND O7760 JMP DIG56 DIG5, TAD TEMP /WHERE N=5 CLL RTL RTL DCA TEMP TAD LINENO+1 AND O7400 DIG56, TAD TEMP JMP DIG456 DIG4, TAD TEMP /WHERE N=4 CLL RAR RTR RTR DIG456, DCA LINENO+1 JMP I LNDIG DIG3, TAD LINENO /WHERE N=3 AND O7760 JMP DIG23 DIG2, TAD TEMP /WHERE N=2 CLL RTL RTL DCA TEMP TAD LINENO AND O7400 DIG23, TAD TEMP JMP DIG123 DIG1, TAD TEMP /WHERE N=1 CLL RAR RTR RTR DIG123, DCA LINENO JMP I LNDIG TYPE, 0 /TYPE A MESSAGE DCA CRSWIT /SAVE CARRIAGE RETURN SWITCH TAD I TYPE /GET ADDR OF MESSAGE ISZ TYPE DCA PASS TLOOP, JMS I [CTRLO /CHECK FOR CTRL/O JMP TCRLF /YES, STOP PRINTING TAD I PASS /GET HIGH CHAR CLL RTR /SHIFT RIGHT RTR RTR AND O77 /SIX BITS SNA JMP TCRLF /END OF MESSAGE TAD O237 /CONVERT TO ASCII JMS I [TTYOUT /PRINT CHAR TAD I PASS /GET LOWER CHAR ISZ PASS AND O77 SNA JMP TCRLF /END OF LINE TAD O237 /CONVERT TO ASCII JMS I [TTYOUT /PRINT JMP TLOOP TCRLF, TAD CRSWIT /RETURN THE CARRIAGE ? SNA CLA JMS I [CRLF /YES JMP I TYPE /DONE /TTYOUT, 0 /PRINT ONE CHAR / TSF /WAIT / JMP .-1 / TLS /PRINT / CLA / JMP I TTYOUT PASS, 0 /SKIP OVER LINE ISZ TEMP SKP JMS FINCR TAD I TEMP AND O77 SZA CLA JMP PASS+1 ISZ TEMP JMP I PASS JMS FINCR JMP I PASS CRSWIT, FDECR, 0 /DECR. POINTER AND FIELD TAD TEMP SZA CLA JMP .+5 RDF TAD O6171 DCA .+1 HLT CLA CMA TAD TEMP DCA TEMP JMP I FDECR FINCR, 0 /INCR. CURRENT DATA FIELD RDF SZA JMP HERE TAD CORSIZ DCA CORTMP HERE, TAD O6211 DCA .+1 HLT ISZ CORTMP JMP I FINCR CDF 0 JMP I [COREOV /FILE TOO BIG PAGE CMDDONE,CDF JMS I [CRLF /TYPE READY MESSAGE JMS I [TYPE MSGRDY MAINLUP,CDF JMS I [GETLIN /GET AN EDITED LINE. SNA CLA JMP NOCOMD /NOT A COMMAND TAD OLDFLAG /IN OLD MODE ? SNA CLA JMP I [COMMAND/NO, MUST BE A COMMAND JMP MAINLUP /OTHERWISE IGNORE NOCOMD, TAD PTR /OR A LINE WITH A LINE CMA /NUMBER ON IT. TAD [LINE DCA SIZE /SET UP SIZE OF LINE. TAD I [LINE+2 /IS LINE EMPTY ?? SNA CLA DCA SIZE /POSSIBLY ZERO. TAD LINENO /IS IT > LAST LINE ? CIA CLL TAD EOFLIN SZA CLA JMP .+4 /HI PART NOT =, FORGET LOW TAD LINENO+1 CIA CLL TAD EOFLIN+1 /COMPARE LOW PARTS SZL CLA JMP NOTLAST /NOT > LAST JMS I [GETEOF /GET EOF TAD TEMP /MAKE IT LOOK LIKE DCA PTR /A CALL TO FINDLN TAD LINENO /SAVE NEW LAST LINE DCA EOFLIN TAD LINENO+1 DCA EOFLIN+1 SKP NOTLAST,JMS I [FINDLN /GENERAL CASE - SEARCH INSERT, TAD TEMP /THERE ARE (TEMP-PTR) WORDS IN CLL CMA /THE OLD LINE WHICH ARE TO BE TAD PTR /REPLACED BY (-SIZE) WORDS IN CLA /NEW LINE. RDF SZL TAD O7770 TAD O6201 DCA PTRFLD /GET FIELD OF START OF OLD LINE TAD PTR CLL CIA TAD TEMP TAD SIZE /WHICH WAY ? SNA JMP MOVE /SAME SIZE, MOVE IN NEW LINE SPA JMP I (EXPAND /MAKE MORE ROOM FOR NEW LINE CIA TAD TEMP /SHRINK THE FILE DCA TOWARD /MOVE FILE DOWN TO HERE RDF TAD O6201 DCA TMPFLD /GET FIELD OF READ POINTER TAD TOWARD CLL CMA TAD TEMP SNL CLA TAD O7770 TAD TMPFLD DCA TWDFLD /GET FIELD OF WRITE POINTER TMPFLD, HLT TAD I TEMP TWDFLD, HLT DCA I TOWARD /MOVE DOWN TAD I TOWARD TAD O7701 /END OF FILE ??? SNA CLA JMP LWREOF /YES, PUT NEW LINE IN AT END ISZ TEMP /INCREMENT POINTERS JMP .+4 TAD TMPFLD /AND FIELDS IF NECESSARY TAD O10 DCA TMPFLD ISZ TOWARD JMP TMPFLD TAD TWDFLD TAD O10 DCA TWDFLD JMP TMPFLD /KEEP SHRINKING LWREOF, TAD TOWARD /SET NEW EOF JMS I [SETEOF MOVE, TAD SIZE SNA CLA JMP MAINLUP /IT WAS A DELETE CDF 00 TAD LINENO /PUT IN LINE NUMBER DCA I [LINE TAD LINENO+1 DCA I [LINE+1 MOVENTR,TAD [LINE DCA TEMP MOVLUP, CDF /MOVE IN NEW LINE TAD I TEMP ISZ TEMP PTRFLD, HLT DCA I PTR ISZ PTR /INCREMENT POINTERS JMP .+4 TAD PTRFLD /WHATCH OUT FOR FIELDS TAD O10 /(W.C. OR E.M. ?) DCA PTRFLD ISZ SIZE JMP MOVLUP JMP MAINLUP SRCHBK, 0 DCA TEM TAD I SRCHBK ISZ SRCHBK CIA TAD TEM CLL CMA TAD I SRCHBK SNL CLA ISZ SRCHBK ISZ SRCHBK TAD TEM JMP I SRCHBK TEM, 0 PAGE EXPAND, CIA /EXTRA ROOM NEEDED DCA TOWARD TAD I TEMP /SAVE THIS PLACE DCA TEMP2 TAD O37 /NOW MARK THIS PLACE DCA I TEMP JMS I [GETEOF /GET EOF RDF TAD O6201 DCA TMP2FLD /GET FIELD OF END OF FILE CLL TAD TEMP /MOVE FILE UP TAD TOWARD /TO DCA TOWARD /HERE SZL JMS I [FINCR /MIGHT BE ACROSS A FIELD RDF TAD O6201 DCA TWD2FLD /SAVE NEW EOF FIELD TAD TOWARD /SAVE NEW EOF JMS I [SETEOF TMP2FLD,HLT TAD I TEMP TWD2FLD,HLT DCA I TOWARD /MOVE UP ONE WORD TAD I TOWARD TAD O7741 /IS THE MARK ? SNA CLA JMP LASTWD /YES, PUT IN LAST WORD CLA CLL CMA TAD TOWARD /BACK UP POINTERS DCA TOWARD SZL JMP .+4 TAD TWD2FLD /AND FIELDS (MAYBE) TAD O7770 DCA TWD2FLD CLA CLL CMA TAD TEMP DCA TEMP SZL JMP TMP2FLD TAD TMP2FLD TAD O7770 DCA TMP2FLD JMP TMP2FLD LASTWD, TAD TEMP2 /PUT IN SAVED WORD DCA I TOWARD JMP I [MOVE /GO MOVE IN NEW LINE COREOV, JMS I [TYPE /FILE TOO BIG MSGBIG BYEBYE, CLA IAC AND SWPNUM /IS OS8 RES IN PLACE ? SZA CLA /YES IF EVEN NUMBER OF SWAPS BYE, JMS I [SWAP /PUT BACK OS8 TSF /WAIT FOR TTY SO OS8 DOESN'T JMP .-1 /TRAMPLE ON MY LINE FEED JMP I (7605 /EXIT TO OS8 MSGBIG, 5646;5660;6372;160;6746;6347;5560;7000 MSGALT, 0145;4655;4665;4645;0 MSGWHAT,7051;4265;4000 MSGTOO, 5552;5746;0165;6060;0155;6057;5000 SCRATCH,TAD [TXTAREA/SCRATCH FILE JMS I [SETEOF DCA EOFLIN /ZERO LAST LINE NUM DCA EOFLIN+1 JMP I [CMDDONE NORM, 0 /LINE NUMBER NORMALIZER TAD NDIGS SZA JMP .+3 /IF THERE ARE NO DIGITS IN THE CLA CMA /LINE NUMBER THEN JMP I NORM /RETURN -1. TAD O7772 SMA CLA JMP I NORM /IF THE LINENO HAS BEEN FILLED TAD O7774 /OUT TO 6 DIGITS(LEADING 0'S) DCA TEMP /THEN RETURN. TAD LINENO /OTHERWISE, SHIFT RIGHT 1 DIGIT CLL RAR DCA LINENO /AND CHECK AGAIN. TAD LINENO+1 RAR DCA LINENO+1 ISZ TEMP JMP .-7 ISZ NDIGS JMP NORM+1 SETEOF, 0 /SET NEW EOF DCA EOFADR /SAVE ADDR RDF /GET FLD TAD O6201 DCA EOFFLD /SAVE IT TAD O77 /STORE EOF DCA I EOFADR JMP I SETEOF / GETEOF, 0 TAD EOFADR /RETRIEVE EOF INFO DCA TEMP /FIRST ADDR EOFFLD, CDF JMP I GETEOF PAGE COMMAND,TAD COMTBL /COMMAND LIST POINTER DCA TEMP COMLUP, ISZ TEMP /GET 2 CHAR COMMAND TAD I TEMP ISZ TEMP SNA JMP WHAT /END OF LIST TAD I [LINE+2 /IS THIS IT ? SZA CLA JMP COMLUP /NO, LOOK AGAIN TAD I TEMP /GET COMMAND ADDR DCA TEMP /AND GO TO IT JMP I TEMP WHAT, JMS I [TYPE /TYPE WHAT? MSGWHAT JMP I [MAINLUP COMTBL, . -5552 LIST -6055 OLD -6442 SAVE -6366 RUN -6444 SCRATCH -4372 BYE -5746 NEW -5742 RENAME 0 WSSAVE, 0145;6454;3343;4264;5244;1770;6400 HEADING,0 /PRINT HEADING JMS I [CRLF /LATER TAD [FNAME /SET UP FOR CONVERSION DCA TEMP /POINTER TO FILE NAME TAD XTITLE /WHERE IT GOES DCA PTR JMS CONV /OUTPUT FIRST TWO CHARS JMS CONV /NEXT TWO JMS CONV /THIRD TWO ISZ PTR /SKIP FOR EXT JMS CONV /OUTPUT EXTENSION JMS I [TYPE /TYPE HEADING XTITLE, TITLE JMS I [CRLF /FOLLOWED BY A CRLF JMP I HEADING CONV, 0 /CONVERT TO SIX BIT ASCII TAD I TEMP /GET NEXT WORD AND O77 /CHECK FOR 0 SNA /SUBSTITUTE BLANKS TAD (40 TAD O7741 /SUBTRACT 37 AND O77 /SIX BITS DCA I PTR TAD I TEMP /DO UPPER CHAR AND O7700 SNA CLL CML RAR TAD (-3700 /SAME WAY TAD I PTR /COMBINE THEM DCA I PTR ISZ TEMP ISZ PTR JMP I CONV TITLE, 0;0;0;0101;0 /FOR THE PROG NAME 0101;0101 /SOME BLANKS VERLOC, VERSON^100+2143 /VERSION NUMBER 0101;0101 /MORE BLANKS DATE, 0;0;0 /DATE TEMPLATE DASH6, 1627 /"-6" FOR BUILDING DATE EODAT, 0 /END OF DATE TEMPLATE GETNC, 0 /GET A CHAR FOR A FILE NAME TAD NCHARS /GET CHAR POINTER ISZ NCHARS /BUMP IT CLL RAR /DIVIDE BY 2 TAD [LINE+2 /ADD BASE DCA TEMP /GIVES ADDR OF WORD TAD I TEMP /GET 2 CHARS SZL /ODD EVEN BIT IS IN LINK JMP TESTCH /GO CHECK THE CHAR RTR RTR RTR TESTCH, AND O77 /ONLY 6 BITS SNA JMP I GETNC /END OF NAME TAD O37 ISZ GETNC JMP I GETNC PATCH3, 0 JMS I [GETNC JMP I PATCH3 AND O77 JMS I (SRCHBK 72 1 JMP EXB ISZ PATCH3 JMS I (SRCHBK 60 12 EXA, JMP I PATCH3 JMP I (PATCH2 EXB, CLA IAC JMP I PATCH3 PAGE LIST, TAD I [LINE+3 /LISTNH ? TAD I [LINE+4 TAD [-4436 /PSEUDO TEST SNA CLA JMP LISTNH /NO HEADING JMS I [HEADING/GIVE HEADING TAD COFLAG /WAS CTRL/O TYPED ? SNA CLA JMP I [CMDDONE/YES, ABORT LISTING LISTNH, DCA NCHARS /SET POINTER DCA NDIGS /AND DIGIT COUNTER JMS I [GETNC /SKIP UNTIL BLANK JMP NUMDUN /DONE TAD (-40 SZA CLA JMP .-4 /NO BLANK YET JMS I [GETNC /GET A CHAR JMP NUMDUN /END OF NUMBER TAD O7706 /SUBTRACT 72 JMS I [LNDIG /GO SEE IF ITS A DIGIT JMP .-4 /IT WAS, CONTINUE NUMDUN, TAD [TXTAREA DCA PTR /SET UP POINTER JMS I [NORM /NORMALIZE THE NUM SPA CLA /ANY NUMBER ? // DSN PATCH 31.12.1 M // // JMP .+3 /NO JMP PAT10 // JMS I [FINDLN /YES, LOCATE IT TAD PTR // IAC // DCA TEMP // JMS I [FDECR CLL CIA // TAD TEMP // JMP MSGRDY+2 // RDF /GET THE FIELD PAT10, TAD O6201 DCA PTR2FLD /SAVE IT DCA TEMP LSTLUP, JMS I [CTRLO /CHECK FOR CTRL/O JMP I [CMDDONE/YES, EXIT JMS CTRLS /CHECK FOR XOFF JMS GETFIL /GET CHARACTER TO LIST JMP I [CMDDONE JMS I [TTYOUT /PRINT IT JMP LSTLUP /LOOP GETFIL, 0 /GET CHARACTER FROM FILE TAD TEMP ISZ TEMP TAD .+3 DCA .+1 HLT JMP I .+1 /SEQUENCE OF OPERATIONS PTR2FLD /GET FIRST WORD FRSTDIG /FIRST DIGIT OF LINE NUMBER DIGIT /SECOND DIGIT DIGIT /THIRD DIGIT PTR2FLD /GET NEXT WORD OF LINE NUMBER DIGIT /FOURTH DIGIT DIGIT /FIFTH DIGIT LASTDIG /SIXTH AND LAST DIGIT PTR2FLD /GET WORD OF TEXT LEFTTXT /LEFT CHARACTER RITETXT /RIGHT CHARACTER LINFTXT /LINE FEED CHARACTER PTR2FLD,HLT /CHECK FOR EOF TAD I PTR CDF TAD O7701 SNA JMP I GETFIL /YES, RETURN UNSKIPPED TAD O77 DCA TEMP2 /NO, SAVE WORD ISZ PTR /BUMP POINTER JMP GETFIL+1 TAD PTR2FLD TAD O10 DCA PTR2FLD JMP GETFIL+1 LASTDIG,CLA IAC /FORCE LAST DIGIT (EVEN IF 0) FRSTDIG,DCA NDIGS /ZERO DIGIT COUNT DIGIT, TAD TEMP2 RTL RTL DCA TEMP2 /SHIFT LEFT ONE DIGIT TAD TEMP2 RAL AND O17 /GET DIGIT SZA JMP NZDIGIT /ITS NOT ZERO TAD NDIGS /IS IT A LEADING ZERO ? SNA CLA JMP GETFIL+1/YES, DON'T PRINT IT NZDIGIT,ISZ NDIGS /NON ZERO OR NON LEADING ZERO TAD O260 /SO PRINT IT JMP GFRET LEFTTXT,TAD TEMP2 /GET LEFT CHAR RTR RTR RTR JMP .+4 RITETXT,TAD O10 /SETUP FOR LEFT CHAR NEXT DCA TEMP TAD TEMP2 AND O77 /SIXBITIZE AC SNA JMP ZEROTXT /0 IS END OF THE LINE TAD O237 /MAKE IT ASCII GFRET, ISZ GETFIL JMP I GETFIL ZEROTXT,TAD O13 /SETUP FOR LF NEXT DCA TEMP TAD O215 /RETURN CR JMP GFRET LINFTXT,DCA TEMP /CLEAR SEQUENCER AND RETURN LF TAD O212 JMP GFRET / CTRLS, 0 TAD CSFLG /XON? SNA CLA JMP I CTRLS /NO JMP LSTLUP /YES / MSGRDY, 6346;4245;7200 // DSN 31.12.1 M // RDF // SNL // TAD O7770 // JMP PAT10 // PAGE GETFN, 0 /GET A FILE NAME (ALSO FETCH ITS HANDLER) DCA SAVFLAG /=1 FOR SAVE, 0 FOR OLD OR NEW TAD CHNFLAG /RETURNING FROM RUN ? SZA CLA JMP NOFUSR /YES, DON'T FETCH USR JMS I [SWAP /GET OS8 RESIDENT TAD SAVFLAG /IS IT OLD OR NEW ?? SNA CLA IAC /YES, DON'T SWAP 10000-11777 DCA I (7746 /DO IF SAVE, SO ALTER JSW CIF 10 /GET THE USR JMS I O7700 10 NOFUSR, DCA NCHARS /RESET CHAR POINTER BSKIP, JMS I [GETNC /GET A CHAR JMP ASKNAM /ASK FOR FILE NAME TAD M40 /BLANK ? SZA CLA JMP BSKIP /NO, LOOP NOSKIP, JMS GETNAM /GET A NAME SNA CLA JMP USEDSK /NO DEVICE SPECIFIED, USE DSK: TAD NAME /PUT IN THE DEVICE NAME DCA DEV /AS SPECIFIED TAD NAME+1 DCA DEV+1 JMS GETNAM /FETCH THE FILE NAME SZA CLA JMP I (IOERR /BAD SYNTAX IN FILE DESCRIPTOR JMP GETHAN /GO FETCH THE HANDLER USEDSK, TAD (0423 /SET DEVICE NAME TO DSK: DCA DEV TAD (1300 DCA DEV+1 GETHAN, TAD [HANDLR+1 DCA DEV+2 /ALSO THE HANDLER ORIGIN CIF 10 JMS I O200 /CALL THE USR 1 /FETCH HANDLER BY NAME DEV, 0;0;0 JMP I (IOERR /BAD DEVICE TAD DEV+1 /SAVE THE DEVICE NUMBER DCA DEVNUM TAD DEV+2 /AND THE HANDLER ENTRY POINT DCA DEVHAN MOVEFN, TAD SAVFLAG /WAS IT A SAVE ? M40, SMA SZA CLA JMP I GETFN /YES, JUST RETURN TAD NAME /NEW OR OLD, ANY NAME GIVEN ? SNA JMP I GETFN /NO, PROBABLY JUST A DEVICE DCA FNAME /YES, SAVE IT TAD NAME+1 DCA FNAME+1 TAD NAME+2 DCA FNAME+2 TAD NAME+3 DCA FNAME+3 JMP I GETFN ASKNAM, TAD SAVFLAG /WAS THIS A SAVE ? SPA SNA CLA JMP ASKNM /NO, GO ASK FOR A NAME TAD FNAME /IT WAS A SAVE, ANY OLD NAME TO USE ? SNA JMP ASKNM /NO, GO ASK FOR ONE DCA NAME /YES, MOVE INTO NAME TAD FNAME+1 DCA NAME+1 TAD FNAME+2 DCA NAME+2 TAD FNAME+3 DCA NAME+3 JMP I GETFN ASKNM, CLA IAC /ASK FOR FILE NAME JMS I [TYPE ASKFN TAD (DUMMY DCA [LNDIG JMS I [GETLIN JMP I (PATCH1 SAVFLAG,0 GETNAM, 0 /GET A FILE OR DEVICE NAME DCA NAME /ZERO THE NAME BUFFER DCA NAME+1 DCA NAME+2 TAD O201 /USE DEFAULT EXT .BA DCA NAME+3 TAD [NAME /SETUP POINTER DCA TEMP2 TAD O7774 /SETUP SIZE (MAX 4 WORDS) DCA SIZE NAMLUP, JMS I (PATCH3 JMP I GETNAM CLL RTL RTL RTL DCA I TEMP2 /SAVE IT JMS I (PATCH3 JMP I GETNAM TAD I TEMP2 /COMBINE THE 2 DCA I TEMP2 ISZ TEMP2 ISZ SIZE /ANY MORE ? JMP NAMLUP JMP I GETNAM RENAME, CLL CML RAR /SAVE USR AREA JMS GETFN /GET FILE NAME CIF 10 JMS I O200 /REMOVE USR 11 /AND RESTORE 10000-11777 JMS I [SWAP /SWAP OS8 RESIDENT JMP I [CMDDONE NEW, TAD [TXTAREA /SCRATCH JMS I [SETEOF DCA EOFLIN /ZERO LAST LINE NUM DCA EOFLIN+1 JMS GETFN /GET THE FILE NAME JMS I [SWAP /REMOVE OS8 JMP I [CMDDONE PAGE PUTFIL, 0 /WRITE THE FILE TAD [TXTAREA DCA PTR /GET POINTER TO TEXT TAD O6201 /GET FIELD OF TEXT DCA I [PTR2FLD DCA TEMP /ZERO LINE SEQUENCER TAD [DSKBUF /GET ADDR OF DISK BUFFER DCA SWAPT1 /BUFFER POINTER TAD O7600 DCA SWAPT2 /DOUBLE WORD COUNTER TAD JMPINS /SET 3 WAY SWITCH DCA PUTJMP PFLOOP, JMS I [GETFIL /GET A CHAR FROM TEXT AREA JMP PFCTLZ /END OF FILE JMS PUTCH /OUTPUT IT JMP PFLOOP /DO NEXT CHAR PFCTLZ, TAD O232 /PUT CTRL-Z JMS PUTCH TAD O7201 /BUFFER DUMP COUNT DCA PFTEMP JMS PUTCH /FILL WITH ZEROES ISZ PFTEMP JMP .-2 JMP I PUTFIL /DONE PFTEMP, 0 PUTCH, 0 /PUT A CHAR ONTO THE OS8 FILE DCA SWAPT4 /SAVE THE CHAR PUTJMP, HLT /JUMP TO CORRECT PLACE JMP PH1 /FIRST CHAR JMP PH2 /SECOND CHAR PH3, TAD JMPINS /RESTORE SWITCH DCA PUTJMP TAD SWAPT4 /GET THE CHAR AND O17 /LOW FOUR BITS CLL RAR RTR /INTO THE HIGH PART OF WORD TWO RTR TAD I SWAPT1 /COMBINE WITH CHAR 2 DCA I SWAPT1 TAD SWAPT4 /GET THE HIGH FOUR BITS RTL RTL /INTO THE HIGH PART OF WORD ONE AND O7400 TAD I SWAPT3 /COMBINE WITH WORD ONE DCA I SWAPT3 ISZ SWAPT1 /BUMP POINTER ISZ SWAPT2 /BUMP DOUBLE WORD COUNT JMP I PUTCH /RETURN JMS I [SWAP /SWAP IN OS8 JMS I DEVHAN /WRITE THIS BUFFER 4200 DSKBUF WRBLOK, 0 JMP I (OUERR ISZ OUSIZE /ANY ROOM LEFT ? SKP JMP I (OUERR /NO, ERROR ISZ WRBLOK /BUMP BLOCK NUMBER ISZ I (OULEN /BUMP ACTUAL SIZE JMS I [SWAP /SWAP BACK TAD [DSKBUF /SET UP BUFFER POINTER DCA SWAPT1 TAD O7600 DCA SWAPT2 /SET UP COUNT JMP I PUTCH PH2, TAD SWAPT1 /SAVE POINTER TO FIRST DCA SWAPT3 ISZ SWAPT1 /BUMP POINTER PH1, TAD SWAPT4 /GET CHAR DCA I SWAPT1 /INTO BUFFER ISZ PUTJMP /BUMP SWITCH JMP I PUTCH JMPINS, JMP PUTJMP+1 OUSIZE, 0 SWAP, 0 /SWAP OS8 RESIDENT ISZ SWPNUM /FLIP BYEBYE SWITCH NOP JMS SWAP2 /WITH OS8RES THROUGH OS8RES+577 OS8RES CDF JMS SWAP2 OS8RES+200 CDF 10 PATCH5, JMS SWAP2 /OVERLAID IF <12K OS8RES+400 CDF 20 JMP I SWAP SWAP2, 0 TAD O7600 DCA SWAPT3 TAD I SWAP2 ISZ SWAP2 DCA SWAPT4 TAD I SWAP2 ISZ SWAP2 DCA SWPFLD JMP .+5 SWPLUP, CDF 00 TAD SWAPT1 DCA I SWAPT4 ISZ SWAPT4 TAD I SWAPT4 DCA SWAPT2 SWPFLD, HLT TAD I SWAPT3 DCA SWAPT1 TAD SWAPT2 DCA I SWAPT3 ISZ SWAPT3 JMP SWPLUP CDF 00 TAD SWAPT1 DCA I SWAPT4 JMP I SWAP2 BADFIL, 4342;4501;4752;5546;0 ASKFN, 4752;5546;0157;4256;4616;1600 PAGE RUN, TAD I [LINE+3 /RUNNH ? TAD I [LINE+4 TAD (-3057 SZA CLA JMS I [HEADING/GIVE A HEADING TAD [LINE+2 /SET UP FAKE LINE DCA TEMP TAD [WSSAVE DCA PTR TAD O7771 DCA TEMP2 TAD I PTR /MOVE FAKE LINE INTO "LINE" ISZ PTR DCA I TEMP ISZ TEMP ISZ TEMP2 JMP .-5 ISZ RUNFLAG /SET RUN FLAG JMP GFN SAVE, DCA RUNFLAG /CLEAR THE RUN FLAG TAD DEVNUM /SAVE CURRENT DEVICE NUM DCA OLDDEV /INCASE WE CHANGE GFN, CLA IAC /SET SAVFLAG JMS I [GETFN /GET THE DEV:NAME.EX TAD XNAME /SET UP ENTER DCA SAVBLK /POINTER TO FILE NAME TAD DEVNUM /GET DEVICE NUMBER CIF 10 JMS I O200 /ENTER FILE 3 SAVBLK, 0 /STARTING BLOCK GOES HERE 0 /SIZE GOES HERE JMP I (IOERR TAD SAVBLK /PUT BLOCK NUMBER DCA I (WRBLOK /INTO WRITE TAD SAVBLK+1/PUT SIZE DCA I (OUSIZE /SOMEWHERE TOO DCA OULEN /ZERO BLOCK COUNT CIF 10 JMS I O200 /DUMP USR 11 JMS I [SWAP /AND NOW OS8 JMS I (PUTFIL /DO THE SAVE JMS I [SWAP /GET OS8 TAD RUNFLAG /SET NO SWAP BIT IF RUN DCA I (7746 CIF 10 /GET THE USR JMS I O7700 10 TAD DEVNUM /GET DEVICE NUMBER CIF 10 JMS I O200 /CLOSE THE FILE 4 XNAME, NAME OULEN, 0 /SIZE JMP I (IOERR TAD RUNFLAG /WAS IT A RUN ? SZA CLA JMP I (DORUN /YES TAD OLDDEV /IS OLD DEVICE CIA /THE SAME AS TAD DEVNUM /THE NEW ONE ?? SNA CLA JMP HNDLOK /YES, THE HANDLER IS OK TAD OLDDEV /RESTORE DEVICE NUMBER DCA DEVNUM TAD [HANDLR+1 DCA DEVN /SET UP HANDLER LOAD ADDR TAD DEVNUM CIF 10 JMS I O200 1 DEVN, 0 JMP I (IOERR TAD DEVN /RESET THE HANDLER ADDRESS DCA DEVHAN HNDLOK, CIF 10 /GET RID OF THE USR JMS I O200 11 JMS I [SWAP /REMOVE OS8 AGAIN JMP I [CMDDONE OLDDEV, 0 FINDLN, 0 /FIND A LINE TAD [TXTAREA DCA TEMP SEARCH, TAD TEMP /COMPARE THE NUMBER OF DCA PTR /THIS LINE WITH THE SPOT TAD I TEMP /IN THE TEXT AREA. TAD O7701 SNA JMP I FINDLN /NEW LINE GOES AT EOF TAD O77 CLL CIA TAD LINENO SNA JMP SAME1ST SNL CLA JMP I FINDLN /INSERT NEW LINE ISZ TEMP SKP JMS I [FINCR CONTIN, JMS I [PASS /IF ITS GREATER KEEP SEARCHING. JMP SEARCH SAME1ST,ISZ TEMP /FIRST HALF OF LINE NUM SAME SKP JMS I [FINCR TAD I TEMP CLL CIA /CHECK SECOND HALF TAD LINENO+1 SNA JMP SAME2ND /REPLACE OLD WITH NEW SZL CLA JMP CONTIN JMS I [FDECR TAD TEMP DCA PTR JMP I FINDLN /INSERT NEW LINE SAME2ND,JMS I [PASS JMP I FINDLN PAGE DORUN, TAD (INFO+11/SET UP SOME OF INFO BLOCK DCA X10 CDF 10 TAD DEVHAN /SAVE DEVICE HANDLER ADDRESS (DSK:) DCA I X10 CLL CML RTL /SAVE DEVICE NUMBER DCA I X10 CDF TAD I (SAVBLK /SAVE STARTING BLOCK CDF 10 DCA I X10 TAD FNAME /SAVE FILE NAME DCA I X10 TAD FNAME+1 DCA I X10 TAD FNAME+2 DCA I X10 TAD FNAME+3 DCA I X10 CDF JMS XMOVE /MOVE THIS PAGE INTO FIELD 1 CDF DORUN CDF 10 -200 CDF CIF 10 /GO TO THE FIELD ONE COPY RUNDO, JMS XMOVE /MOVE THE HANDLER INTO FIELD 1 CDF HANDLR CDF 10 -400 TAD I (INFO+1 /GET START OF BCOMP.SV DCA BCBLOK CIF JMS I (7607 /READ IN THE COMPILER BCSIZE 0 BCBLOK, 0 JMP WHUPS JMS XMOVE /MOVE BACK THE HANDLER CDF 10 HANDLR CDF -400 CLA IAC /OPEN THE TEMP FILE JMS I (200 3 TMPBLK, TMPFIL 0 JMP WHUPS JMS I (200 /RESET SYSTEM TABLES 13 /AND REMOVE TENTATIVE FILES TAD TMPBLK /SAVE ITS START DCA I (INFO+10 TAD TMPBLK+1 DCA I (INFO+11 /AND ITS MAX LENGTH DCA I (7644 /KILL R SWITCH CIF CDF JMP I (BCBEGN /GO START THE COMPILER WHUPS, TAD (123 /PRINT SY ERROR JMS TTYO TAD (131 JMS TTYO TAD (15 JMS TTYO TAD (12 JMS TTYO TSF /WAIT FOR FLAG JMP .-1 CDF CIF JMP I (7605 /RETURN TO OS8 TTYO, 0 TSF JMP .-1 TLS CLA JMP I TTYO XMOVE, 0 RDF /GET CALLING FIELD TAD (6203 /PLUS CIF CDF 0 DCA MOVRTN /FOR RETURN JMS GMOVE /GET FROM FIELD DCA MFFLD JMS GMOVE /GET ADDRESS DCA MFPTR JMS GMOVE /GET TO FIELD DCA MTFLD JMS GMOVE /GET COUNT DCA MCNT MFFLD, HLT TAD I MFPTR /MOVE IT MTFLD, HLT DCA I MFPTR ISZ MFPTR ISZ MCNT JMP MFFLD MOVRTN, HLT JMP I XMOVE MFPTR, 0 MCNT, GMOVE, 0 TAD I XMOVE /GET ARG FOR MOVE ISZ XMOVE JMP I GMOVE TMPFIL, FILENAME BASIC.TM PATCH1, CLA TAD (400 DCA [LNDIG DCA NCHARS JMP I (NOSKIP PAGE GETCH, 0 /GET A CHARACTER FROM THE TTY TAD OLDFLAG /INPUT FROM A FILE ? SZA CLA JMP FILEIN /YES KSF JMP .-1 KRB AND O177 JMP I GETCH FILEIN, ISZ COUNT /ANYTHING IN BUFFER ? JMP NOREAD /YES, NO READ TAD O7200 /SET BUFFER COUNT DCA COUNT TAD [DSKBUF /SET BUFFER POINTER DCA RDPTR TAD RDJMP /RESET JUMP DCA NOREAD JMS I [SWAP /GET OS8 TAD RDSIZE /ANY ROOM LEFT ? SNA JMP INERR /BAD END OF IFILE IAC DCA RDSIZE JMS I DEVHAN /READ NEXT BLOCK 200 DSKBUF RDBLOK, 0 JMP CHKSOF /CHECK FOR SOFT ERROR SOFTOK, ISZ RDBLOK /BUMP BLOCK NUMBER JMS I [SWAP /AWAY WITH OS8 NOREAD, HLT /3W UNPACK JUMP JMP INCHR1 JMP INCHR2 INCHR3, TAD RDJMP /RESET SWITCH DCA NOREAD TAD I RDPTR /GET LOW 4 BITS ISZ RDPTR /BUMP POINTER AND O7400 /MASK IT CLL RTR /SHIFT RIGHT 4 RTR DCA TEMP /SAVE TAD I RDTMP /GET HIGH 4 BITS AND O7400 TAD TEMP /COMBINE THEM CLL RTR /SHIFT RIGHT 4 RTR JMP AND177 /GO FINISH INCHR2, TAD RDPTR /SAVE ADDR OF FIRST WORD DCA RDTMP ISZ RDPTR /BUMP POINTER INCHR1, TAD I RDPTR /GET NEXT CHAR ISZ NOREAD /BUMP SWITCH AND177, AND O177 /MASK 7 BITS TAD O7746 /CHECK FOR ^Z SNA JMP ENDOLD /EOF TAD O32 /RESTORE CHAR JMP I GETCH ENDOLD, DCA OLDFLAG /KILL OLD FLAG TAD CHNFLAG /WAS IT A RETURN FROM RUN ? SNA CLA JMP I [CMDDONE/NO, JUST AN OLD COMMAND DCA CHNFLAG /KILL FLAG TAD (INFO-3764 DCA X10 /PICK UP NAME FROM INFO BLOCK TAD I X10 /(WHICH IS SWAPPED OUT) DCA FNAME TAD I X10 DCA FNAME+1 TAD I X10 DCA FNAME+2 TAD I X10 DCA FNAME+3 JMP I [CMDDONE/DONE WITH RETURN OLDBAD, DCA FNAME+3 /TRY WITHOUT EXT ISZ TEMP /OR HAVE WE ALREADY ? JMP OLDTRY /NO, NOT YET IOERR, INERRX, CIF 10 JMS I O200 /DISMISS USR 11 OUERR, INERR, DCA OLDFLAG /KILL OLD STATUS JMS I [SWAP /OUT WITH OS8 JMS I [TYPE /PRINT MESSAGE BADFIL JMP I [MAINLUP OLD, TAD [TXTAREA/SCRATCH FILE JMS I [SETEOF DCA EOFLIN /ZERO LAST LINE NUM DCA EOFLIN+1 JMS I [GETFN /GET FILE NAME CLL CMA RAL /SET RETRY COUNT DCA TEMP OLDTRY, TAD [FNAME /POINTER TO FILE NAME DCA SB /INTO LOOKUP CALL TAD DEVNUM /GET DEVICE NUMBER CIF 10 JMS I O200 /LOOKUP FILE 2 SB, 0 /START GOES HERE RDSIZE, 0 /SIZE GOES HERE JMP OLDBAD /BAD FILE TAD SB /MOVE BLOCK SNA ISZ RDSIZE /SET COUNT TO 4095 IF NOT D.A. DCA RDBLOK CLA IAC /SET SWITCH DCA OLDFLAG /INPUT COMING FROM FILE CLA CMA /SET COUNT TO INITIALIZE READ DCA COUNT JMS I [SWAP /MOVE OS8 JMP I [MAINLUP/DO OLD RDJMP, JMP NOREAD+1 COUNT, 0 PATCH2, JMS I [SRCHBK 01 32 JMP I (EXA TAD (-56 SZA CLA JMP INERRX JMP I (PATCH4 / CHKSOF, SMA CLA JMP SOFTOK /SOFT ERROR JMP INERR PAGE HEIGHT, -30 /SET TO SCREEN HEIGHT BY SET COMMAND SDELAY, -200 /SET TO HOLD SCREEN DELAY BY SET COMMAND IFNZRO HEIGHT-3000 <__FIX SET COMMAND__> LINCNT, 0 /THIS WORD IS ZERO TO FLAG THE NEW BASIC EDITOR TO "SET" CURPOS, 0 STIMER, 0 SCOPFG, 0 /SET NONZERO IF TERMINAL IS A SCOPE /SKIP IF ^O NOT TYPED AND CLEAR 'COFLG' /RETURN TO CALL+1 IF ^O WAS TYPED AND SET 'COFLG' /SET OR CLEAR 'CLFLG' IF ^S OR ^Q TYPED OTHERWISE ZERO, CTRLO, 0 KSF JMP CTRLOX KRB AND A177 TAD MCC SNA JMP I (BYEBYE TAD MCO SNA JMP CTRLOX+2 TAD MCQ SNA JMP SETFLG+1 TAD MCS SNA JMP SETFLG CTRLOX, ISZ CTRLO CLA IAC DCA COFLAG JMP I CTRLO SETFLG, IAC DCA CSFLG JMP CTRLOX CRLF, 0 TAD O215 JMS I [TTYOUT TAD O212 JMS I [TTYOUT JMP I CRLF /PRINT A CHAR ON TERMINAL /PAUSE IF LF WAS PRINTED AND DELAY REQUESTED /SCREENSIZE ALSO SET BY "SET TTY" COMMAND TTYOUT, 0 TSF /FIRST WAIT JMP .-1 TLS /NOW PRINT THE CHAR AND A177 TAD (-15 /TEST IF LF WILL FOLLOW SZA CLA JMP I TTYOUT /RETURN IF NO ISZ LINCNT /TEST LINE COUNTER FOR SCREENFULL JMP I TTYOUT TAD HEIGHT DCA LINCNT /NOW RESET SCREEN COUNTER TAD SDELAY SNA /SKIP IF DELAY REQUESTED JMP I TTYOUT /OTHERWISE JUST RETURN AT ONCE DCA STIMER /SET HOLD SCREEN TIMER DLOOP, KSF /FIRST TEST IF KEY STRUCK JMP NOKST /JMP IF NO KRS /ELSE READ CHAR AND A177 /MASK TO 7BIT TAD MCC SNA JMP I [BYEBYE /JMP IF ^C SEEN TAD MCO SZA TAD MCQ SZA TAD MCS SNA CLA JMP I TTYOUT /RETURN WITH CHAR STILL IN BUFFER IF ANY OF ABOVE SEEN NOKST, ISZ ZERO JMP .-1 /LOOP 4096 TIMES (USUALLY) ISZ STIMER /TEST DELAY COUNTER JMP DLOOP /REITERATE IF NOT DONE JMP I TTYOUT /ELSE RETURN FOR MORE MCC, -3 MCO, -17+3 MCQ, -21+17 MCS, -23+21 A177, 177 /PRINT A BACKSPACE /IF TERMINAL IS A SCOPE, ECHO BS,SP,BS TO RUBOUT AND REPOSITION /CURSOR. OTHERWWISE ECHO BACKARROW PRTBSP, 0 TAD SCOPFG /TEST SCOPE BIT SNA CLA JMP BKARRW /NOT - ECHO BACKARROW TAD NCHARS /SEE IF AT LEFT MARGIN TAD NDIGS SNA CLA JMP I PRTBSP /DO NOTHING IF YES TAD O10 /ELSE ECHO BS JMS I [TTYOUT TAD (40 JMS I [TTYOUT /SP TAD O10 SKP /BS JUSTSP, TAD (40 /SPACE JMS I [TTYOUT JMP I PRTBSP /DONE BKARRW, TAD ("_ JMS I [TTYOUT JMP I PRTBSP PAGE LINE, /THE TELETYPE LINE BUFFER. WSNAME, 0;0;0145;6454;3343;4264;5244;1770;6400 START, JMP RBASIC /IT WAS RAN CDF 10 /IF CHAINED TO CHECK IF CCL PASSED TAD I (7644 /Q SWITCH IN RESPONSE TO .BASIC COMMAND (OS78) CDF AND O200 /ISOLATE THE BIT SZA CLA JMP RBASIC /TREAT AS .R BASIC IF YES JMS I (CORE CLA IAC DCA I (JSW /NO SWAP CIF 10 JMS I (7700 /FETCH USR 10 CIF 10 JMS I (200 /RESET SYSTEM TABLES 13 TLS /SET TTY FLAG JMS GETDAT /SET UP TITLE ISZ CHNFLAG /TELL ABOUT RETURN FROM RUN JMP I (OLD /READ IN OLD WORK SPACE RBASIC, CDF 10 DCA I (7643 DCA I (7644 CDF 0 TLS JMS I (CORE TAD O77 DCA I [TXTAREA JMS GETDAT /SET UP TITLE FINDSV, TAD I X11 /LOOK UP SOME SAVE FILES SNA JMP LUBUF /GO FIND BASIC.UF DCA XXXXSV /SAVE POINTER TO NAME CLA IAC CIF 10 JMS I (200 2 XXXXSV, 0 0 JMP NG IAC CDF 10 TAD XXXXSV DCA I X10 /SAVE BLOCK PLUS 1 CDF /IN INFO AREA JMP FINDSV LUBUF, CLA IAC /FIND BASIC.UF CIF 10 JMS I (200 2 BUFN 0 JMP .+3 /OK IF MISSING TAD .-3 IAC /SAVE BLOCK +1 CDF 10 DCA I X10 CDF CLA IAC /TYPE WITH NO CARRIAGE RETURN JMS I [TYPE /"OLD OR NEW -- " OLDNEW JMS I [SWAP JMP I (MAINLUP NG, JMS I [TYPE /PART OF SYSTEM MISSING MISING JMP I (7605 /THE FOLLOWING ROUTINE ASSUMES THAT THE YEAR IS ALREADY /SET UP BY A CALL TO "CORE" - JR GETDAT, 0 /PUT OS8 DATE INTO THE TITLE CDF 10 TAD I (MDATE /GET DATE WORD CDF DCA TEMP2 /SAVE IT TAD TEMP2 SNA JMP I GETDAT /NO DATE AND O7400 /GET MONTH CLL RTL /SHIFT SOME RTL RTL TAD (MONTHS-3 DCA X12 TAD (DATE-1 /SET UP POINTER TO DATE DCA X13 TAD TEMP2 /GET DAY RTR RAR AND O37 JMP DAYGO /CONVER TO TEXT DAYLP, TAD (100-12 /REDUCE AND TALLY QUOTIENT TAD TEMP DAYGO, DCA TEMP TAD TEMP /SEE IF OVERFLOW AND O77 TAD O7766 SMA CLA JMP DAYLP /REDUCE MOD 10 IF NOT TAD TEMP TAD (2121 /UNPACK TO HANK'S ASCII DCA I X13 /INTO DATE TAD I X12 /GET MONTH CHARS DCA I X13 TAD I X12 DCA I X13 / TAD TEMP2 /GET YEAR / AND (7 / TAD (21 / CLL RTL / RTL / RTL / ISZ X13 /THE WORD WITH -7 IS THERE / DCA I X13 /STORE LAST DIGIT OF YEAR /ABOVE JOB DONE BY "CORE" DURING INIT TIME JMP I GETDAT PAGE MONTHS, 1653;4257 /-JAN 1647;4643 /-FEB 1656;4263 /-MAR 1642;6163 /-APR 1656;4272 /-MAY 1653;6657 /-JUN 1653;6655 /-JUL 1642;6650 /-AUG 1664;4661 /-SEP 1660;4465 /-OCT 1657;6067 /-NOV 1645;4644 /-DEC NAMLST, BASICN BCOMPN BLOADN BRTSN BAFN BSFN BFFN 0 BASICN, FILENAME BASIC.SV BCOMPN, FILENAME BCOMP.SV BLOADN, FILENAME BLOAD.SV BRTSN, FILENAME BRTS.SV BAFN, FILENAME BASIC.AF BSFN, FILENAME BASIC.SF BFFN, FILENAME BASIC.FF BUFN, FILENAME BASIC.UF MISING, 5257;4460;5661;5546;6546;0164;7264;6546;5600 OLDNEW, 5746;7001;6063;0160;5545;1616;0 PAGE /THIS PAGE GETS WIPED OUT SOON /ROUTINE TO GET CORESIZE, SETUP DATE IN HEADING /AND SET SCOPE / TTY FLAG FOR RUBOUT TREATMENT CORE, 0 /CORE SIZE SUBROUTINE CDF 10 /GET INTO DATE FIELD TAD I (MDATE CDF /RESET FIELD AND (7 /LOOK AT LOW YEAR BITS DCA TEMP /HOLD TAD I (BIPCCL /NOW GET THE EXTENDED BITS AND (600 /FROM THE 600 BITS CLL RTR CLL RTR /SHIFT INTO PLACE TAD TEMP /ADD TO LOW BITS ISZ I (DASH6 /BUMP THE YEAR TENS DIGIT TAD (-12 SMA /SKP IF .LT. 10 OFF OF 1970 JMP .-3 /ELSE DECR AGAIN TAD (12+21 /CONVERT TO "HANKS ASCII" CLL RTL RTL RTL /SWAP TO LEFT HALF BYTE DCA I (EODAT /NOW STORE IN DATE TEMPLATE CDF 10 TAD I (7726 /LOOK AT HLT/CLA HLT SCOPE KLUDGE CDF AND O200 /GET SCOPE BIT DCA I (SCOPFG /AND STORE IT /STANDARD OS/8 CORESIZE ROUTINE TAD I (7777 AND COR70 CLL RAR RTR SNA JMP COR0 IAC DCA CORSIZ JMP COREX 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 TAD CORSIZ CIA DCA CORSIZ CLL CML CLA RTL /2 TAD CORSIZ SZA CLA JMP I CORE TAD (SWAP&177+5600 DCA I (PATCH5 JMP I CORE CORLOC, CORX CORV, 1400 $$ |
Added src/os8/uni/LANGUAGE/BASIC/BCOMP.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 | /OS8 BASIC COMPILER, V5 / / / / / / / // / / / / /COPYRIGHT (C) 1972, 1973, 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. / / / / / / /DEC-S8-LBASA-B-LA / /COPYRIGHT C 1972, 1973, 1974 / /DIGITAL EQUIPMENT CORPORATION /MAYNARD,MASSACHUSETTS 01754 / /AUGUST 19, 1972 / /HANK MAURER, 1972 /SHAWN SPILMAN, 1973 / / /ASSEMBLE AND LOAD AS FOLLOWS: / / .R PAL8 / *BCOMP,BCOMP<BCOMP.03 / .R ABSLDR / *BCOMP$ / .SA SYS BCOMP;7000 / /NOTE DIFFERENCES FROM VERSION 1 AS FOLLOWS: / / .R SRCCOM / *LPT:<BCOMP.01,BCOMP.03 / * / / VERSON=5 /VERSION LOCATED IN CORE AT TAG "VERLOC" /LEFT HALF OF VERLOC = 60+VERSON /RIGHT HALF OF VERLOC = PATCH LEVEL (01=A) / /CORRECTION & ADDITION MADE FOR V4 J.K. 1975 / / ./V FOR VERSION NUMBER / . ABILITY TO INPUT FROM PTR / .CORRECT TEST FOR BATCH RUNNIG / .IGNORE MORE THAN 10 SIGNIFICANT DIGITS / OF NUMERIC CONSTANTS /JR 30-APR-77 UPDATE VERSION *5 TEMP3, 0 XABORT, ABORT /ADDR OF ABORT ROUTINE 0 X10, INFO-5 /AUTO INDEX REGISTERS X11, NAMLST-1 X12, INFO-5 X13, BOSINFO-1 OSTACK, STACKO-1 /OPERAND STACK POINTER STACK, STACKA-1 /GENERAL STACK POINTER NEXT, FREE-1 /NEXT FREE LOCATION CHRPTR, 0 /INPUT BUFFER POINTER NCHARS, 0 /SIZE OF INPUT LINE TEMP, -4 TEMP2, 0 DECPT, 0 /SET 1 IF . NDIGIT, 0 /NUM DIGITS RIGHT OF . EXPON, 0 /EXPONENT FOR NUM CONV TYPE, 0 /TYPE OF CURRENT OPERAND SYMBOL, 0 /SYMBOL NUMBER OF CUR. OPERAND LEFT, 0 /LEFT SIDE SWITCH OLDOP, 0 /OLD OPERATOR NEWOP, 0 /NEW OPERATOR TMPCNT, 0 /TEMP COUNTER TMPLVL, 3 /TEMP LEVEL STMPCT, 0 /TEMP COUNT (STRINGS) STMPLV, 1 /TEMP LEVEL (STRINGS) STPTR, 0 /POINTER TO S.T. ENTRY VARCNT, -401 /NUMBER OF POSSIBLE NUMERIC /VARIABLES, LITERALS, AND TEMPS SVCNT, -401 /SAME FOR STRING VARS ACNT, -41 /ARRAY COUNTER SACNT, -41 /STRING ARRAY COUNTER LOCTRH, 0 /HIGH ORDER LOCATION COUNTER LOCTRL, 0 /LOW ORDER " " BLOCK, 0 /START BLOCK OF TEMP FILE HIFLD, 0 /HIGHEST CORE FIELD BRTS, 0 /START OF BRTS.SV DLSIZE, 0 /NEG. SIZE OF DATA LIST ABORTX, 0 /START OF EDITOR LINEH, 0 /LINE NUMBER (HIGH) LINEL, 0 /LINE NUMBER (LOW) MODE, 0 /INTERPRETER MODE TYPE1, 0 /TYPE AFTER JMS GETA1 SYMBL1, 0 /SYM # AFTER JMS GETA1 OLDSTK, 0 /STACK SAVER FOR DEF ARGCNT, 0 /ARG COUNTER FOR DEF PCRLF, /CR SWITCH FOR PRINT STMT DACNT, /ARG COUNT FOR UDEF STMT FORJMP, /FOR LOOP JUMP INSTR NOSN, /STMT NUMBER PRESENT SWITCH COLON, /: SWITCH FOR GETFN ROUTINE JAROND, 0 /END OF DEF ADDR GOES HERE (INDIRECTLY) IFNREG, 0 /CONTENTS OF IFN REG SSREG1, 0 /EXECUTION TIME CONTENTS SSREG2, 0 /OF THE SS REGISTORS STKLVL, STACKA-1 /STACK BASE LEVEL FINDEX, 0 /FOR LOOP INDEX SETFLD, 0 /FIELD CHANGE RTNE FOR LUKUP2 LUFLD, CDF 10 /FIELD OF ENTRY FOR LUKUP2 JMP I SETFLD QERMSG, ERMSG /SUBROUTINE POINTERS QLODSN, LODSN QCHKWD, CHKWD QMODSET,MODSET QSNUM, SNUM QOUTWRD,OUTWRD QSAVECP,SAVECP QGETC, GETC QGETCWB,GETCWB QRESTCP,RESTCP QEXPR, EXPR QOUTOPR,OUTOPR QNEWLIN,NEWLIN QREMARK,REMARK QGETA1, GETA1 QLOADSS,LOADSS QCHECKC,CHECKC QGETNAM,GETNAM QCOMARP,COMARP QLOOKUP,LOOKUP QLUKUP2,LUKUP2 QLOAD, LOAD QPUSH, PUSH QPOP, POP QPUSHO, PUSHO QSAVAC, SAVAC QBACK1, BACK1 QNUMBER,NUMBER QSTRING,STRING QLETTER,LETTER QDIGIT, DIGIT QNOREGS,NOREGS Q400, 400 NAME1, /VARIABLE OR FUNCT NAME WORD1, 0 /3 WORD LITERAL BUFFER NAME2, WORD2, 0 NAME3, WORD3, 0 ACO, 0 /FAC OVERFLOW WD OP1, 0 /4 WORD ARG FOR "NUMBER" OP2, 0 OP3, 0 OPO, 0 NUMDIG, -13 SIGDIG, 0 INFO= 7604 /INFORMATION AREA /INFO STARTING BLOCK +1 OF BASIC.SV /INFO+1 STARTING BLOCK +1 OF BCOMP.SV /INFO+2 STARTING BLOCK +1 OF BLOAD.SV /INFO+3 STARTING BLOCK +1 OF BRTS.SV /INFO+4 STARTING BLOCK +1 OF BASIC.AF /INFO+5 STARTING BLOCK +1 OF BASIC.SF /INFO+6 STARTING BLOCK +1 OF BASIC.FF /INFO+7 STARTING BLOCK +1 OF BASIC.UF /INFO+10 STARTING BLOCK OF BASIC.TM /INFO+11 SIZE IN BLOCKS OF BASIC.TM /INFO+12 INPUT HANDLER ENTRY ADDRESS /INFO+13 SIZE AND DEVICE NUMBER OF INPUT FILE /INFO+14 STARTING BLOCK OF INPUT FILE /INFO+15 THROUGH /INFO+20 NAME OF WORKSPACE / / BOSINFO= 7774 /BOS PARAMETER AREA EDTSIZ= 2100 /SIZE OF BASIC.SV EDTBGN= 3212 /RESTART FOR EDITOR ERMSG2= 1712 /POST PROCESSOR ERROR SWITCH EOST= 7570 /UPPER LIMIT FOR SYMBOL TABLE INDEVH= 4600 /INPUT DEVICE HANDLER LINE= 7000 /LINE BUFFER LINMAX= 121 /MAXIMUM BASIC STMT STACKA= 7120 /MAIN STACK STAKSZ= 60 /SIZE OF MAIN STACK /OPERAND STACK DEFINED IN-LINE STRLIM= 120 /MAXIMUM STRING SIZE INBUF= 7200 /INPUT BUFFER / / /FIELD ONE STUFF / / OUBUF= 0 /OUTPUT BUFFER VARST= 400 /VARIABLE SYMBOL TABLE SVARST= VARST+436/STRING VAR SYMBOL TABLE ARAYST= SVARST+1074/ARRAY SYMBOL TABLE SARYST= ARAYST+200/STRING ARRAY SYMBOL TABLE SNUMS= SARYST+200/STMT NUMBER BUCKETS TEMPS= SNUMS+24 /NUMERIC TEMP BUCKET STEMPS= TEMPS+2 /STRING TEMP BUCKET LITRL= STEMPS+2 /NUMERIC LITERAL BUCKET SLITRL= LITRL+2 /STRING LITERAL BUCKET DATLST= SLITRL+2 /DATA LIST FUNCTN= DATLST+2 /FUNCTION LIST FREE= FUNCTN+2 /START OF FREE CORE / INTERPRETER OPCODES / / MEMORY REFERENCE SET FADD= 0000 FSUB= 0400 FMPY= 1000 FDIV= 1400 FLDA= 2000 FSTA= 2400 FISUB= 3000 FIDIV= 3400 LSS1= 4000 LSS2= 4400 JEOF= 5400 LOADSN= 6000 / / JOC CLASS JSUB= 5000 JUMP= 5001 JGE= 5002 JNE= 5003 JGT= 5004 JLT= 5005 JEQ= 5006 JLE= 5007 JFOR= 5010 / / ARRAY CLASS AISUB= 6400 AFADD= 6440 AFSUB= 6500 AFMPY= 6540 AFDIV= 6600 AFLDA= 6640 AFSTA= 6700 AIDIV= 6740 / / STRING CLASS SCON= FADD SCOMP= FSUB SREAD= FMPY SLOAD= FLDA SSTORE= FSTA SACON= AISUB SACOMP= AFADD SAREAD= AFSUB SALOAD= AFLDA SASTOR= AFSTA / / OPERATE CLASS SETJF= 7401 RNDO= 7421 STOP= 7441 SRDL= 7461 CHN= 7414 NRDL= 7521 CLOSEF= 7434 OPENAV= 7474 OPENAF= 7454 OPENNV= 7534 OPENNF= 7514 CLRFN= 7501 FILENO= 7402 FNEG= 7403 RET= 7404 REST= 7405 LSS1AC= 7406 LSS2AC= 7407 FESC= 7410 READ= 7411 WRITE= 7412 SWRITE= 7413 SMODE= 7561 NMODE= 7541 FUNC1= 7416 FUNC2= 7417 FUNC3= 7400 FUNC4= 7415 USE= 7540 / ASSEMBLE LINE *STRLIM%2+1+WORD1 /ORG PAST BIGGEST STRING LIT NEWLIN, JMS I QGETC /ANY CHARS LEFT ? JMP REMARK /NO, LINE ENDED OK JMS I QERMSG /EXTRA CHARACTERS 3003 REMARK, DCA NOSN /CLEAR STMT NUMBER SWITCH TAD TMPLVL /RESET TEMP LEVELS DCA TMPCNT /FOR NUMERIC TAD STMPLV /AND STRING DCA STMPCT /TEMPORARIES TAD (STACKO-1 DCA OSTACK /RESET STACK POINTERS TAD STKLVL /(CHANGED BY FOR LOOPS) DCA STACK TAD (LINE-1 /GET THE NEXT LINE DCA X10 TAD (-LINMAX/MAX SIZE DCA TEMP3 GETLIN, JMS ICHAR /GET NEXT CHAR JMP GOTCR /CR DCA I X10 /PUT INTO LINE BUFFER ISZ TEMP3 /BUMP MAX COUNTER JMP GETLIN JMP GOTCR ERLTL, JMS I QERMSG /LINE TOO LONG 1424 JMS ICHAR /SKIP REST OF LINE JMP NOSNUM+3 CLA JMP .-3 GOTCR, TAD X10 /COMPUTE SIZE CMA TAD (LINE-1 /OF LINE DCA NCHARS TAD (LINE-1 /SETUP LINE POINTER DCA CHRPTR / TAD LOCTRL /PUT LOCATION COUNTER / 7421 /INTO MQ CLA CLL CML RAR /ALLOW DEFINITION JMS I QSNUM /GET THE STATEMENT NUMBER JMP NOSNUM /NO STMT NUMBER ON THIS LINE ISZ NOSN /SET STMT NUMBER PRESENT JMS I QMODSET /IN N MODE AT ALL LABELS JMS I QNOREGS /FORGET REG CONTENTS TAD WORD1 /SAVE NEW LINE NUMBER DCA LINEH TAD WORD2 DCA LINEL JMS SETFLD /GET TO FIELD OF ENTRY TAD I TEMP2 /GET DEFINED/REFNCED BITS TAD LOCTRH /ADD IN HIGH ORDER LOCATION CTR DCA I TEMP2 /PUT IT AWAY ISZ TEMP2 TAD LOCTRL /NOW PUT IN LOW ORDER LOCATION DCA I TEMP2 CDF NOSNUM, TAD TEMP3 SNA CLA JMP ERLTL JMS KBDCHK /CHECK FOR ^C OR ^O TAD (KEYWRD-1 DCA X10 /SET UP FOR KEYWORD SEARCH JMS I QSAVECP /SAVE CHAR POS KWLOOP, TAD I X10 /GET NEXT CHAR OF KEYWORD SMA JMP GOTKW /OK, THIS IS THE KW DCA TEMP JMS I QGETC /GET NEXT CHAR FROM STMT JMP NOGOOD /THIS ISN'T IT TAD TEMP /IS THIS CHAR OK ? SNA CLA JMP KWLOOP /YES, CONTINUE LOOKING NOGOOD, JMS I QRESTCP /BACK TO START OF STMT TAD I X10 /SKIP OVER REST OF KEYWORD SPA CLA JMP .-2 TAD I X10 /IS THIS END OF LIST ? SZA JMP KWLOOP+3/NO, KEEP LOOKING JMP LET /TREAT AS LET STMT GOTKW, DCA TEMP /SAVE ADDR OF ROUTINE JMP I TEMP /GO PROCESS THE STMT / LET STATEMENT PROCESSOR LET, JMS I QLODSN /LOAD THE STMT NUMBER CLL CML RAR /COMPILE LEFT SIDE JMS I QEXPR /GET EXPRESSION JMP REMARK JMS I QCHECKC /LOOK FOR = -75 JMP BADLET /BAD IF MISSING JMS I QEXPR /GET RIGHT SIDE JMP REMARK CLA CMA /GET TYPE OF TAD OSTACK /RIGHT SIDE DCA TEMP /OF EQUAL SIGN TAD I TEMP /SO THAT WE GENERATE SPA CLA CLL CMA RAL /THE CORRECT STORE TAD (ASSIGN-1 JMS I QOUTOPR /GENERATE STORE JMP NEWLIN BADLET, JMS I QERMSG /BAD LET STMT 1423 JMP REMARK END, TAD (STOP /OUTPUT STOP OPCODE JMS I QOUTWRD JMS OUDUMP /DUMP BUFFER JMS I (7607 /READ IN POST PROCESSOR 1300 /ELEVEN PAGES POSTX, 400 /FROM 400 LDRBLK, 0 /FROM THIS BLOCK IFNZRO LDRBLK-357 <__FIX BLOAD__> JMP I XABORT TAD I QERMSG /SET POST PROCESSOR ERROR SWITCH DCA ERMSG2 JMP I POSTX /START IT UP / RESTORE, PRINT, AND INPUT PROCESSORS PAGE INPUT, JMS I QLODSN /OUTPUT STMT NUM JMS GETFN /LOOK FOR #<FILE NUM EXPR>: INPUTL, CLL CML RAR /PROCESS INPUT STMT JMS I QEXPR /GET EXPR JMP I QREMARK JMS I QGETA1 /GET TOP OF STACK TAD TYPE1 /LOOK AT THE TYPE SPA CLA JMP RSTRNG /READ STRING JMS I QMODSET /SET MODE CLL CML RTR /IS IT DIMENSIONED ? AND TYPE1 SZA CLA JMP I (DIMREAD/YES TAD (READ /OUTPUT READ COMMAND JMS I QOUTWRD TAD (FSTA /USE SCALAR STORE FININP, TAD SYMBL1 /PLUS SYMBOL NUMBER JMS I QOUTWRD /OUTPUT INSTR JMS I QCHECKC /LOOK FOR , -54 JMP I QNEWLIN /END OF INPUT JMP INPUTL /YES, LOOP RSTRNG, CLL CML RAR /SET MODE JMS I QMODSET /TO STRING CLL CML RTR /SUBSCRIPTED ? AND TYPE1 SNA CLA JMP .+3 /NO JMS I QLOADSS /LOAD SS REG TAD (SAREAD-SREAD TAD (SREAD /STRING READ JMP FININP /USE SOME COMMON CODE PRINT, JMS I QLODSN /OUTPUT STMT NUM JMS GETFN /GET FILE NUMBER DCA I QEXPR /USE ENTRY AS SWITCH PRINTL, DCA PCRLF /CLEAR THE FLAG JMS I QGETC /LOOK FOR A CHAR JMP PRTEND /NONE LEFT, END PRINT TAD (-73 /; ? SNA JMP NOCR /YES, DON'T SPACE OUTPUT TAD (73-54 /, ? SZA CLA JMP TABPNT /LOOK FOR TAB OR PNT TAD (FUNC3+20 JMS I QOUTWRD /OUTPUT FUNC3+20 (COMMA) NOCR, DCA I QEXPR /CLEAR THE SWITCH CLA IAC /SET NO CRLF FLAG JMP PRINTL TABPNT, TAD I QEXPR /WAS LAST THING AN EXPR ? SZA CLA JMP I QNEWLIN /YES, CAN'T HAVE TWO IN A ROW JMS I QBACK1 /PUT THAT CHAR BACK JMS I QSAVECP /SAVE CHAR POS JMS I QCHKWD /LOOK FOR "TAB(" WTAB JMP TRYPNT /NO TAB TAD (FUNC3+100 PFCALL, DCA PRFUN /SAVE PRINT FUNCTION JMS I QEXPR /GET ARG JMP I QREMARK JMS I QLOAD /LOAD ARG TAD TYPE1 /MUST BE NUMERIC SMA CLA JMP .+4 /OK, IT IS BADPF, JMS I QERMSG /PRINT ERROR 0622 /BAD FUNCTION REFERENCE JMP I QREMARK JMS I QCHECKC /LOOK FOR ) -51 JMP BADPF /BAD FUN REFERENCE TAD PRFUN /OUTPUT FUNCTION CALL JMP PUT1 TRYPNT, JMS I QRESTCP /RESTORE CHAR POS JMS I QCHKWD /LOOK FOR PNT( WPNT JMP PEXP /NO TAD (FUNC3+120 JMP PFCALL /GO DO FUN CALL PEXP, JMS I QRESTCP /RESTORE CHAR POS JMS I QEXPR /GET EXPR TO BE PRINTED JMP I QREMARK JMS I QLOAD /PUT THING INTO FAC (OR SAC) CLL CML RAR AND TYPE1 /GET TYPE BIT CLL RTL /INTO AC 11 TAD (WRITE /SWRITE=WRITE+1 PUT1, JMS I QOUTWRD JMP PRINTL PRTEND, TAD PCRLF /DID PRINT END WITH SZA CLA /, OR ; JMP I QNEWLIN /YES, NO CR LF TAD (FUNC3+40 PUT2, JMS I QOUTWRD /CALL TO CRLF ROUTINE JMP I QNEWLIN /END OF PRINT RESTOR, JMS I QLODSN /OUTPUT LOAD STMT NUMBER CLA IAC /NO COLON NEEDED JMS GETFN /LOAD FILE REG TAD (REST /OUTPUT RESTORE OP JMP PUT2 PRFUN, LODSN, 0 /OUTPUT STMT NUMBER INTO CODE TAD NOSN /ANY STMT NUMBER ? SNA CLA JMP I LODSN /NO, JUST RETURN TAD WORD1 /NOW OUTPUT "LOAD STMT NUM REG" TAD (LOADSN JMS I QOUTWRD TAD WORD2 JMS I QOUTWRD JMP I LODSN XADD, FADD;AFADD / DIM PROCESSOR PAGE DIM, JMS I QGETNAM /GET VAR NAME JMP DIMERR TAD TYPE /CHECK TYPE RTL /MOVE BITS TO BE TESTED SMA CLA /IF FUNC BIT SET THEN ERROR SNL /IF DIM BIT NOT SET THEN ERROR JMP DIMERR /NO DIMENSIONS JMS SMLNUM /GET DIMENSION TAD EXPON /SAVE IT DCA DIM1 JMS I QCOMARP /, OR ) ?? JMP DIMERR /NEITHER IS BAD JMP TWODIM /, THERE'S ANOTHER DIMENSION JMS CHKSDM /CHECK SIZE IF STRING JMP CHKDIM /NUMERIC VECTOR, CHECK PREV REF CLL CML RAR /THIS WAS A STRING SIZE DIM DCA TYPE /PERFORM THE SPECIAL CASE JMS I QLOOKUP CDF 10 /OF NOT CHECKING PREVIOUS REFS JMP FINDIM TWODIM, JMS SMLNUM /GET SECOND JMS I QCHECKC /LOOK FOR ) -51 JMP DIMERR JMS CHKSDM /CHECK SIZE IF STRING ARRAY TAD (7000 /NUMERIC ARRAY CHKDIM, TAD (7000 /GET NUMBER OF DIMS DCA TEMP JMS I QLOOKUP /FIND ST ENTRY CDF 10 TAD I STPTR /LOOK AT DIM BITS AND (7000 /PREVIOUSLY REFERENCED ? SNA JMP UNREFD /NO SMA /IF MINUS, CAUSE ERROR TAD TEMP /COMPARE NUMBER SZA CLA JMP DIMERR /NUMBER OF DIMS DON'T MATCH DCA TEMP /ZERO TEMP UNREFD, CLL CML RAR /PUT IN DIMENSIONED BIT TAD TEMP /AND NUMBER OF DIMENSIONS CIA /NEGATE WHOLE MESS (4000=-4000) TAD I STPTR /TOGETHER WITH SYM NUMBER DCA I STPTR ISZ STPTR TAD DIM1 /NOW FIRST DIMENSION (IF 2) DCA I STPTR FINDIM, ISZ STPTR TAD EXPON /NOW SECOND (IF 2, OTHERWISE FIRST) DCA I STPTR CDF JMS I QCHECKC /LOOK FOR , -54 JMP I QNEWLIN /NONE, ASSUME END OF DIM JMP DIM /GET NEXT ELEMENT CHKSDM, 0 /CHECK SIZE OF STRINGS TAD TYPE /WAS THIS A STRING DIM ? SMA CLA JMP I CHKSDM /NO, RETURN IMMEDIATE ISZ CHKSDM /YES, SKIP ON RETURN TAD EXPON /SIZE MUST BE < 73 CLL TAD (-STRLIM-1 SNL CLA JMP I CHKSDM /OK, SIZE < 73 DIMERR, JMS I QERMSG /GIVE ERROR 0411 JMP I QREMARK /ABORT STMT / NEXT PROCESSOR NEXTX, JMS I QGETNAM /GET INDEX VARIABLE JMP BADNXT JMS I QLOOKUP TAD TYPE /MUST BE NUMERIC SPA CLA JMP BADNXT /IT ISN'T JMS I QMODSET /N MODE NEXTL, TAD (-STACKA-3 TAD STACK /ANY FOR'S LEFT ? SPA CLA /(OK IF STACKA ABOVE 4000) JMP BADNXT /NO JMS I QPOP /GET LABEL ADDR DCA TEMP JMS I QPOP /GET LABEL FIELD DCA LUPFLD JMS I QPOP /GET STEP VAR TAD XLOAD /LOAD IT JMS I QOUTWRD JMS I (PSETJF /PATCH! TAD FINDEX /ADD IT TO STEP (FADD=0) JMS I QOUTWRD TAD LUPFLD /CREATE JUMP TO LOOP AND (70 CLL RTL TAD (JUMP JMS I QOUTWRD CLL CMA RAL /GET LABEL DEFINITION ADDR TAD TEMP JMS I QOUTWRD /OUTPUT IT AS LOW PART OF JUMP DIM1, LUPFLD, HLT CLL CML RAR /SET LABEL DEFINED BIT TAD LOCTRH /DEFINE END OF LOOP LABEL DCA I TEMP ISZ TEMP TAD LOCTRL DCA I TEMP CDF TAD STACK /BACK OFF STACK LEVEL DCA STKLVL JMS I QNOREGS /FORGET REGS TAD SYMBOL /IS THIS THE RIGHT NEXT ? CIA TAD FINDEX SNA CLA JMP I QNEWLIN /YES, FINISHED BADNXT, JMS I QERMSG /NEXT WITHOUT FOR 1606 JMP I QREMARK UMOPR, 40;1;UMRTNE-1 XLOAD, FLDA;AFLDA / UDEF PROCESSOR (DEFINE USER FUNCTION) PAGE UDEF, ISZ NFUNS /ROOM FOR ANOTHER FUN ? JMS I QLETTER /GET FIRST LETTER JMP DEFBAD /ERROR IN DEFINE CLL RTL /PUT INTO HIGH ORDER RTL RTL DCA NAME1 /SAVE CHAR 1 JMS I QLETTER /GET SECOND LETTER JMP DEFBAD /ERROR TAD NAME1 /COMBINE THE TWO CHARS CIA DCA I FUNPTR /SAVE IN FUN TABLE ISZ FUNPTR JMS I QLETTER /GET THIRD LETTER JMP DEFBAD CIA /SAVE NEG OF THIRD LETTER DCA I FUNPTR ISZ FUNPTR /BUMP POINTER TAD M5 /NUMERIC ARG COUNT DCA TEMP / (MAX OF 4 ARGS) CLL CMA RTL /STRING ARG COUNT DCA TEMP2 / (MAX OF 2 ARGS) JMS I QCHECKC /IS IT A STRING FUN ? -44 SKP CLA CLL CML RAR /YES, SET TYPE OF FUNCTION DCA TYPE1 JMS I QCHECKC /LOOK FOR ( -50 JMP DEFBAD /ERROR IF MISSING DALOOP, JMS I QGETNAM /GET AN ARG JMP DEFBAD TAD TYPE /LOOK AT ITS TYPE CLL RAL /SHIFT TYPE BIT INTO LINK SZA CLA JMP DEFBAD /OTHER BITS MUST BE OFF SZL JMP STRARG /STRING ARG TAD TEMP /GET ARG NUMBER ISZ TEMP /INCREMENT IT JMP DAPUSH /GO SAVE IT DEFBAD, JMS I QERMSG /BAD USER DEF 2504 JMP I QREMARK STRARG, TAD TEMP2 /GET ARG NUMBER ISZ TEMP2 /AND INCREMENT IT JMP DAPUSH+1 JMP DEFBAD /TOO MANY STRING ARGS DAPUSH, TAD Q2 /ADJUST ARG NUMBER TAD Q2 /ADD 4 FOR NUM, 2 FOR STRING SPA CLA CLL CML RTR /FIRST ARG STAYS IN AC TAD TYPE /ADD IN TYPE BIT JMS I QPUSH /SAVE IT ON STACK JMS I QCOMARP /LOOK FOR , OR ) JMP DEFBAD /ERROR IF NEITHER JMP DALOOP /, GET NEXT ARG TAD TEMP2 /GET TOTAL NUMBER OF ARGS TAD TEMP TAD Q10 /ADJUST COUNT CIA /NEGATED DCA DACNT TAD I FUNPTR /GET FUNCTION CODE ISZ FUNPTR /BUMP POINTER DCA WORD1 /MAKE IT THE SEARCH OBJECT JMS I XSTCHEK /MAKE SURE THERE'S ROOM EOST-10 JMS I QLUKUP2 /ENTER NEW FUNCTION FUNCTN -1 TAD DACNT /PUT IN ARG COUNT JMS SETFLD /(FIRST SET THE FIELD) DCA I NEXT DAPUT, CDF JMS I QPOP /GET ARG TYPE (LAST TO FIRST) JMS SETFLD /SET THE FIELD DCA I NEXT /SAVE IT ISZ DACNT /ANY MORE ? JMP DAPUT /YES TAD TYPE1 /PUT IN TYPE OF FUNCTION DCA I NEXT CDF JMS I QCHECKC /LOOK FOR A COMMA -54 JMP I QNEWLIN /NO COMMA, END OF LINE JMP UDEF /GET NEXT DEFINITION XSTCHEK,STCHEK FUNPTR, ENDFNS Q2, 2 /THESE FOUR WORDS M5, -5 /PREVENT ERRONEOUS "SAVES" Q10, 10 /BY THE ROUTINE SAVAC NFUNS, -21 /WHEN THE OP STACK IS EMPTY STACKO, /OPERAND STACK STOKSZ=UDEF+200-STACKO / DEF PROCESSOR PAGE DEF, JMS I QNOREGS /FORGET REGS JMS I QGETNAM /GET FUN NAME JMP BADDEF /NO GOOD TAD TYPE /SAVE ITS TYPE DCA TEMP2 DCA ARGCNT /ZERO ARG COUNT TAD TYPE /TYPE MUST BE 3000 OR 7000 RTL /MOVE BITS TO BE TESTED SPA CLA /FUN BIT OFF IS AN ERROR SNL /DIM BIT OFF IS AN ERROR JMP BADDEF JMS I QMODSET /ENTER N MODE TAD SYMBOL /SAVE FUNCTION NAME DCA FUNNAM ARGLUP, JMS I QGETNAM /GET ARG NAME JMP BADDEF CLL CMA RAR /LOOK AT TYPE AND TYPE SZA CLA JMP BADDEF /ARG WAS AN ARRAY OR FUNC JMS I QLOOKUP /ENTER INTO S.T. TAD STPTR /SAVE ST ADDRESS JMS I QPUSH TAD SYMBOL /AND SYMBOL NUMBER JMS I QPUSH TAD TYPE /AND ARG TYPE JMS I QPUSH ISZ ARGCNT /BUMP ARG COUNT JMS I QCOMARP /LOOK FOR , OR ) JMP BADDEF JMP ARGLUP /, GET NEXT ARG TAD FUNNAM /ENTER FUNCTION DCA WORD1 TAD ARGCNT /FIRST GET ENOUGH ROOM CIA TAD (EOST-3 DCA FUNNAM JMS STCHEK /CHECK IT FUNNAM, 0 JMS I QLUKUP2 /LOOK UP FUNCTION FUNCTN -1 JMP OKFUN /OK, NOT MULTIPLY DEFINED BADDEF, JMS I QERMSG /BAD DEFINE 0405 JMP I QREMARK OKFUN, TAD NEXT /SAVE "NEXT" DCA X12 TAD NEXT /INCREMENT NEXT BY TAD ARGCNT /NUMBER OF ARGS TAD (4 /PLUS 4 DCA NEXT JMS SETFLD /GET ROOM FOR LABEL CLL CML RAR /FOR JUMP AROUND DCA I NEXT /SET DEFINED BIT TAD NEXT /SAVE ADDR DCA JAROND /FOR LATER ISZ NEXT CDF TAD LUFLD /SAVE FIELD OF FUN BLOCK DCA FUNFLD TAD LUFLD /ALSO FIELD OF LABEL DCA JARFLD TAD LUFLD /GET FIELD AND (70 /ISOLATE BITS CLL RTL /INTO JUMP INSTR TAD (JUMP JMS I QOUTWRD /OUTPUT IT TAD JAROND /OUTPUT LOW PART JMS I QOUTWRD /OF JUMP ADDR TAD STACK /SAVE STACK DCA OLDSTK TAD ARGCNT /GET COUNT CMA DCA TEMP TAD ARGCNT /TWICE CIA DCA ARGCNT TAD ARGCNT /STORE COUNT FIRST JMP FUNFLD CHGARG, CDF JMS I QPOP /GET ARG TYPE DCA TYPE TAD TYPE JMS GENTMP /GENERATE A TEMPORARY SWTARG, JMS I QPOP /PURGE SYMBOL NUMBER CLA JMS I QPOP /GET ST ADDR OF DCA STPTR /OF DUMMY ARG CDF 10 TAD SYMBOL /PUT IN TEMP SYMBOL NUMBER DCA I STPTR /TO FAKE EXPR TAD TYPE /CREATE ARG DESCRIPTOR TAD SYMBOL /FOR FUNC BLOCK FUNFLD, HLT DCA I X12 /AND PUT IT INTO F.B. ISZ TEMP /MORE ARGS? JMP CHGARG /YUP CLL CML RAR AND TEMP2 /SAVE TYPE OF FUNCTION DCA I X12 CLL CML RAR /SET DEFINED BIT TAD LOCTRH /AND LOCATION COUNTER DCA I X12 /AT START OF FUNCTION TAD LOCTRL DCA I X12 CDF TAD STACK /SAVE BOTTOM OF STACK DCA X13 TAD OLDSTK /RESTORE TO TOP DCA STACK JMS I QCHECKC /FIND = -75 JMP BADDEF JMS I QEXPR /COMPILE FUNCTION JMP I QREMARK JMS I QLOAD /GET IT INTO AC TAD X13 /RESTORE STACK DCA STACK /TO BOTTOM JMP RESARG /FINISH DEF / DEF PROCESSOR (FINALE) PAGE RESARG, TAD I X13 /GET ST ADDR DCA STPTR TAD I X13 /PUT BACK CORRECT SYM # CDF 10 DCA I STPTR CDF ISZ X13 /SKIP OTHER STUFF ISZ ARGCNT JMP RESARG /RESTORE NEXT TAD (RET /OUTPUT RETURN CODE JMS I QOUTWRD JARFLD, HLT CLL CML RAR /SET LABEL DEFINED BIT TAD LOCTRH /STICK IN ADDR DCA I JAROND /OF END OF FUNCT ISZ JAROND /PLUS ONE TAD LOCTRL /STORE LOW ADDR DCA I JAROND CDF TAD TMPCNT /SAVE NEW TEMP LEVELS DCA TMPLVL TAD STMPCT DCA STMPLV JMS I QNOREGS /FORGET REGS JMP I QNEWLIN /END OF DEF / DATA STATEMENT PROCESSOR DATA, JMS I QNUMBER /LOOK FOR NUMBER JMP DSTRNG /MUST BE A STRING JMS DENTRY /MAKE AN ENTRY -3 /3 WORDS LONG MORDAT, JMS I QCHECKC /LOOK FOR , -54 JMP I QNEWLIN /END OF DATA JMP DATA /DO NEXT ELEMENT DSTRNG, JMS I QSTRING /LOOK FOR STRING JMP I QNEWLIN /BAD TAD WORD1 /COMPUTE SIZE IAC CLL CML CMA RAR DCA DSSIZE /INCLUDING CHAR COUNT TAD WORD1 /NEGATE COUNT CIA DCA WORD1 JMS DENTRY /CREATE ENTRY DSSIZE, 0 JMP MORDAT /GO DO MORE DENTRY, 0 /MAKE AN ENTRY IN DATA LIST TAD I DENTRY /GET SIZE DCA TEMP ISZ DENTRY TAD TEMP /INCREMENT SIZE COUNT TAD DLSIZE DCA DLSIZE TAD (EOST /HOW MUCH DO WE NEED ? TAD TEMP DCA .+2 JMS STCHEK /ASK FOR IT 0 TAD FREFLD /GET FIELD OF FREE SPACE DCA LUFLD /SAVE IT IN SETFLD SUBROUTINE DATFLD, CDF 10 TAD NEXT /HOOK IN NEW ENTRY IAC DCA I DATPTR PATCH3, ISZ DATPTR /POINTER THEN FIELD TAD LUFLD DCA I DATPTR JMS SETFLD TAD TEMP /SAVE SIZE OF ENTRY DCA I NEXT TAD (WORD1-1/MAKE READY TO MOVE DCA X10 DELOOP, CDF TAD I X10 /GET WORD JMS SETFLD DCA I NEXT /SAVE IT ISZ TEMP /MORE ? JMP DELOOP DCA I NEXT /SAVE ROOM FOR POINTER&CDF TAD NEXT /THIS IS NOW LAST ENTRY DCA DATPTR PATCH4, TAD LUFLD DCA DATFLD /AND THIS IS ITS FIELD DCA I NEXT CDF JMP I DENTRY DATPTR, DATLST / READ PROCESSOR READX, JMS I QLODSN /OUTPUT STMT NUMBER CLL CML RAR /GET VAR TO READ JMS I QEXPR /SAME AS LEFT SIDE OF LET JMP I QREMARK JMS I QGETA1 /GET VAR INFO FROM STACK TAD TYPE1 /SET MODE JMS I QMODSET TAD TYPE1 /WHAT TYPE ? SPA CLA TAD (SRDL-NRDL TAD (NRDL /STRING OR NUMERIC JMS I QOUTWRD CLL CML RTR /SUBSCRIPTS ? AND TYPE1 SNA CLA JMP .+3 /NO JMS I QLOADSS /YES, LOAD SS REGS TAD (AFSTA-FSTA TAD (FSTA /ARRAY OR SCALAR STORE TAD SYMBL1 JMS I QOUTWRD JMS I QCHECKC /ANY MORE ? -54 /CHECK FOR COMMA JMP I QNEWLIN /NO JMP READX+1 /YUP AMPSND, 40;1;AMPRTN-1;4000;SCONTS;SCONTS SCONTS, FADD;AISUB / FOR PROCESSOR PAGE FOR, JMS I QLODSN /OUTPUT STMT NUMBER JMS I QGETNAM /GET INDEX VARIABLE JMP BADFOR /BAD TAD TYPE /MUST BE NUMBER SZA CLA JMP BADFOR /ITS NOT JMS I QLOOKUP /ST SEARCH TAD SYMBOL /SAVE INDEX VAR DCA FINDEX /FOR LATER JMS I QCHECKC /FIND = -75 JMP BADFOR TAD CHRPTR /SAVE CHAR POSITION DCA FORCP /IN A SPECIAL PLACE TAD NCHARS DCA FORNC SKP FINDTO, JMS I QRESTCP /RESTORE CHAR POS JMS I QGETC /SKIP A CHAR JMP BADFOR CLA JMS I QSAVECP /SAVE THIS POSITION JMS I QCHKWD /LOOK FOR "TO" WTO JMP FINDTO /KEEP GOING JMS FSUB2 /LOAD LIMIT AND SAVE IN TEMP DCA FLIMIT /SAVE LIMIT VAR JMS I QCHKWD /LOOK FOR "STEP" WSTEP JMP STEP1 /USE 1.0 FOR THE STEP JMS FSUB2 /LOAD STEP AND SAVE IN TEMP DCA FSTEP /SAVE STEP VAR TAD (SETJF /OUTPUT SETJF JMS I QOUTWRD TAD (JFOR /STEP IS VARIABLE, USE JFOR SAVEJF, DCA FORJMP /SAVE CORRECT JUMP JMS I QGETC /ANY MORE CHARS ? SKP JMP BADFOR /YES, ERROR TAD FORNC /RESTORE CHAR POSITION DCA NCHARS /FROM SPECIAL PLACE TAD FORCP DCA CHRPTR JMS FSUB1 /COMPILE INITIAL VALUE INTO FAC JMS STCHEK /CHECK FOR ROOM EOST TAD FREFLD /SAVE FIELD OF LABELS DCA FORFLD FORFLD, HLT CLL CML RAR /SET LABEL DEFINED BIT TAD LOCTRH /DEFINE THE LOOP LABEL DCA I NEXT TAD LOCTRL DCA I NEXT CLL CML RAR /SET LABEL DEFINED BIT DCA I NEXT /FOR END OF LOOP LABEL CDF TAD FLIMIT /TEST FOR DONE TAD XSUB /BY SUBTRACTING THE LIMIT JMS I QOUTWRD TAD FORFLD /OUTPUT JUMP TO DONE AND (70 CLL RTL /SHIFT FIELD BITS TAD FORJMP /USE PROPER JUMP INS JMS I QOUTWRD TAD NEXT /OUTPUT LOW PART OF JMP JMS I QOUTWRD TAD FLIMIT /FADD FLIMIT (FADD=0) JMS I QOUTWRD TAD FINDEX /FSTA INDEX TAD (FSTA JMS I QOUTWRD TAD FINDEX /PUT STUFF ONTO STACK JMS I QPUSH TAD FSTEP JMS I QPUSH TAD FORFLD JMS I QPUSH TAD NEXT JMS I QPUSH ISZ NEXT /BUMP NEXT AGAIN TAD TMPCNT /RESERVE THESE TEMPS DCA TMPLVL JMS I QNOREGS /FORGET REGISTORS TAD STACK /SET NEW STACK LEVEL DCA STKLVL JMP I QREMARK STEP1, TAD (3 /1.0 IS SLOT #3 DCA FSTEP TAD (JGT /USE JGT JMP SAVEJF /GO DO THE REST FLIMIT, 0 /FOR LOOP UPPER LIMIT FSTEP, 0 /FOR LOOP STEP FORNC, 0 /FOR STMT CHAR POSITION FORCP, 0 WTHEN, -124;-110;-105;-116 XSUB, FSUB;AFSUB / USE PROCESSOR USEX, TAD (USE /OUTPUT USE OPERATOR JMS I QOUTWRD JMS I QGETNAM /GET ARRAY NAME JMP USEERR /ERROR TAD TYPE /CHECK TYPE SMA CLA /(MUST BE NUMERIC) JMP .+3 /IT WAS USEERR, JMS I QERMSG /ERROR IN USE STMT 2525 CLL CML RTR /SET DIM BIT DCA TYPE JMS I QLOOKUP /LOOKUP SYMBOL TAD SYMBOL /OUTPUT ARRAY NUMBER JMS I QOUTWRD JMP I QREMARK / IF AND IFEND PROCESSORS PAGE IF, JMS I QLODSN /OUTPUT STMT NUMBER JMS I QEXPR /GET LEFT EXPRESSION JMP I QREMARK JMS I QGETC /GET RELATIONAL OPERATOR JMP BADIF /ERROR IF NONE CLL RTL RTL /MOVE TO LEFT HALF RTL DCA TEMP /AND SAVE IT JMS I QGETC /GET 2 CHAR RELATIONALS JMP BADIF TAD TEMP /COMBINE THE 2 DCA TEMP2 TAD (IFOPS-1/SETUP POINTER DCA X10 IFLUP1, TAD I X10 /GET JUMP OPCODE SNA JMP IFLUP2-1/NOT A 2 CHAR RELATIONAL DCA RELOPR /SAVE IT TAD I X10 /COMPARE CHARS TAD TEMP2 SZA CLA JMP IFLUP1 /NOT THIS OOE GOTREL, JMS I QEXPR /GET RIGHT HALF JMP I QREMARK CLA CMA /GET TYPE OF RIGHT SIDE TAD OSTACK DCA TEMP TAD I TEMP SPA CLA JMP STRCMP /STRING, DO STRING COMPARE TAD (MINUS /NUMERIC, DO A SUBTRACT JMS I QOUTOPR NUMCMP, JMS I QSAVECP /SAVE CHAR POSITION JMS I QCHKWD /LOOK FOR "THEN" WTHEN JMP NOTHEN /NOT THEN GETIFN, JMS I QSNUM /GET STATEMENT NUMBER JMP BADGO2 TAD TEMP /OUTPUT JUMP TAD RELOPR JMS I QOUTWRD TAD TEMP2 /TWO WORDS JMS I QOUTWRD JMP I QNEWLIN NOTHEN, JMS I QRESTCP /BACKUP CHAR POS JMS I QCHKWD /LOOK FOR "GOTO" WGOTO SKP JMP GETIFN /OK, GO GET STMT NUMBER BADIF, JMS I QERMSG /BAD IF STMT 1106 JMP I QREMARK STRCMP, TAD (SCOMPR-1 JMS I QOUTOPR /OUTPUT STRING COMPARE JMS I QMODSET /BACK TO N MODE JMP NUMCMP /REST IS LIKE NUMERIC COMPARES JMS I QBACK1 /PUT BACK NON OPERATOR IFLUP2, TAD I X10 /GET CONDITIONAL JUMP SNA JMP BADIF /RELATIONAL INCORRECT DCA RELOPR TAD I X10 /COMPARE OPERATORS TAD TEMP SNA CLA JMP GOTREL /GOTIT JMP IFLUP2 IFEND, JMS I QLODSN /OUTPUT STMT NUMBER CLA IAC /(NO COLON) JMS GETFN /GET FILE NUMBER TAD (JEOF /SETUP CORRECT JUMP DCA RELOPR JMP NUMCMP /GO FIND "THEN" OR "GOTO" RELOPR, GETFN, 0 /GET FILE NUMBER DCA COLON /SAVE COLON SWITCH JMS I QCHECKC /LOOK FOR # -43 JMP TTYFIL /NONE, MUST BE TTY JMS I QEXPR /GET FILE EXPR JMP I QREMARK /ERROR TAD COLON /DO WE NEED A COLON ? SZA CLA JMP .+4 /NO, SKIP THIS TEST JMS I QCHECKC /YES, LOOK FOR IT -72 JMP BADFN /NOT THERE, BAD JMS I QLOAD /LOAD IT TAD TYPE1 /TYPE MUST BE NUMERIC SPA CLA BADFN, JMS I QERMSG /NOPE, IT ISN'T 0616 CLA IAC /SET IFNREG TO "NOT TTY" DCA IFNREG /SAVE NEW IFNREG TAD (FILENO /OUTPUT SET IFN COMMAND JMS I QOUTWRD JMP I GETFN TTYFIL, TAD IFNREG /IS IFNREG 0 ? SNA CLA JMP I GETFN /IF YES, QUIT TAD (CLRFN /OTHERWISE ZERO AC JMS I QOUTWRD DCA IFNREG /SET IFNREG TO TTY JMP I GETFN /RETURN / GOTO AND GOSUB GOTO, JMS I QSNUM /GET NUMBER JMP BADGO2 JMS I QMODSET /ALL GOTO'S IN NMODE CLA IAC /JUMP=JSUB+1 JMP .+5 GOSUB, JMS I QLODSN /OUTPUT STMT NUM LOAD JMS I QSNUM /GET NUMBER JMP BADGO2 JMS I QMODSET /ALL GOTO'S IN NMODE TAD (JSUB /GET GOSUB OPCODE TAD TEMP /PLUS ADDRESS JMS I QOUTWRD /OUTPUT IT TAD TEMP2 /BOTH WORDS JMS I QOUTWRD JMP I QNEWLIN BADGO2, JMS I QERMSG /BAD GOTO OR GOSUB 1615 /NUMBER MISSING JMP I QREMARK / TABLE SEARCH FOR LITERALS, STMT NUMBERS, TEMPS, ETC. PAGE LUKUP2, 0 TAD I LUKUP2 /GET THE BUCKET START DCA OLDN3 /SAVE IT AS THE PREVIOUS ENTRY ISZ LUKUP2 TAD I LUKUP2 /GET THE ENTRY SIZE ISZ LUKUP2 DCA N3SIZE TAD (6211 /PRIME THE FIELD SETTER DCA LUFLD JMS SETFLD /NOW SET THE FIELD LOOK2, TAD I OLDN3 /GET ADDR OF NEXT ENTRY DCA NEWN3 /SAVE IT PATCH1, ISZ OLDN3 /GET TO FIELD OF NEW ENTRY TAD I OLDN3 /GET INTO AC DCA NEWFLD /AND SAVE IT TAD NEWN3 SNA JMP HOOKIN /IF 0 ITS END OF LIST PATCH5, IAC DCA X10 /START OF VALUE INFO TAD (WORD1-1/SETUP POINTER TO VALUE DCA X11 TAD N3SIZE /AND TEMP OF ENTRY SIZE DCA LTEMP CHKVAL, CDF TAD I X11 CIA CLL /COMPARE THIS WORD NEWFLD, CDF 10 /FIELD OF NEW ENTRY TAD I X10 SZA CLA JMP NOTSAM /NOT THIS ONE ISZ LTEMP /INCR SIZE COUNT JMP CHKVAL /MORE STUFF TAD I X10 /GET SYMBOL NUMBER L6201, CDF DCA SYMBOL TAD NEWFLD /MAKE ENTRY ADDRESSABLE DCA LUFLD /THROUGH SETFLD ISZ LUKUP2 /BUMP RETURN JMP I LUKUP2 NOTSAM, SZL JMP HOOKIN /NEW SYMBOL < CURRENT TAD NEWN3 /GO TO NEXT ENTRY DCA OLDN3 /(MOVE POINTER) TAD NEWFLD /(AND FIELD) DCA LUFLD JMP LOOK2 HOOKIN, CLL CMA RAL /HOW MANY WORDS NEEDED ? TAD N3SIZE TAD (EOST DCA .+2 JMS STCHEK /MAKE SURE 0 /WE GOT ENOUGH TAD NEWN3 /HOOK IN NEW ENTRY FREFLD, CDF 10 /CHANGE TO FREE FIELD DCA I NEXT PATCH2, TAD NEWFLD /HOOK IN FIELD DCA I NEXT JMS SETFLD /BACK TO FIELD OF OLD TAD FREFLD /PUT FIELD OF NEW DCA I OLDN3 CLA CMA /BACK UP OLDN3 TAD OLDN3 /SO THAT IT POINTS TO POINTER DCA OLDN3 CLA CMA TAD NEXT /PUT POINTER TO NEW ENTRY DCA I OLDN3 /INTO OLD TAD FREFLD /SAVE ENTRY FIELD DCA LUFLD /FOR POSSIBLE POST PROCESSING TAD (WORD1-1/PREPARE TO STICK IN THE VALUE DCA X11 ENTERV, CDF TAD I X11 /MOVE IN THE VALUE FFLD2, CDF 10 DCA I NEXT ISZ N3SIZE /INCR SIZE COUNT JMP ENTERV CDF JMP I LUKUP2 STCHEK, 0 /CHECK FOR ENOUGH ROOM TAD NEXT /CHECK FOR OVERFLOW CIA CLL CDF TAD I STCHEK /THIS IS LIMIT ISZ STCHEK SZL CLA JMP I STCHEK TAD FREFLD /BUMP FREE FIELD TAD (10 DCA FREFLD TAD FREFLD /PUT IN TWO PLACES DCA FFLD2 DCA NEXT /START POINTER AT 0 ISZ NFLDS /GONE TOO FAR ? JMP I STCHEK /NO STOVER, JMS I QERMSG /S.T. FULL 2324 JMP I XABORT /ABORT COMPILATION OLDN3, 0 /ADDR OF PREVIOUS ENTRY NEWN3, 0 /ADDR OF NEW ENTRY LTEMP, 0 NFLDS, 0 /- COUNT OF AVAILABLE FIELDS N3SIZE, /SIZE OF ENTRY KBDCHK, 0 /CHECK FOR ^C OR ^O KSF JMP I KBDCHK /NO CHAR KRB AND (177 /REMOVE PARITY BIT TAD (-3 /^C ?? SNA JMP I XABORT /YES, EXIT TO OS8 TAD (3-17 /^O ?? SZA CLA JMP I KBDCHK /NO, RETURN DCA TTX+1 /NOP TTY OUTPUT ROUTINE JMP I KBDCHK / WSTEP, -123;-124;-105;-120;0 / SYMBOL TABLE LOOKUP PAGE LOOKUP, 0 /LOOK UP SYMBOL TAD NAME1 /GET NAME1*11+NAME2 CLL RTL TAD NAME1 CLL RAL TAD NAME1 TAD NAME2 DCA NAME1 /THIS IS IT TAD TYPE /WHAT KIND SYMBOL ? CLL RTL /MOVE TYPE BITS RTL /INTO AC 9,10,11 TAD JTABLE DCA .+1 VCPTR, 0 /GO THERE JTABLE, JMP I .+1 LUVAR LURETN LUARAY LURETN LUSTRG LURETN LUSARY LURETN LUVAR, TAD (VARCNT /POINTER TO VAR COUNT DCA VCPTR TAD (VARST-13 DOLU, TAD NAME1 DCA STPTR /ST POINTER CDF 10 /THATS WHERE ST IS TAD I STPTR /IS THIS VAR DEFINED YET ? SMA JMP GOTSYM /YES TAD (4401 /GET 401 INTO AC CHEKST, CDF TAD I VCPTR /PLUS VAR COUNT CDF 10 DCA SYMBOL /THATS THE NEW SYMBOL NUMBER TAD SYMBOL /PUT SYMBOL NUMBER DCA I STPTR /INTO S.T. ENTRY CDF ISZ I VCPTR /BUMP SYMBOL NUMBER LURETN, JMP I LOOKUP JMP STOVER /S.T. OVERFLOW GOTSYM, DCA SYMBOL /PUT NUMBER INTO SYMBOL CDF JMP I LOOKUP LUSTRG, TAD (SVCNT /POINTER TO STRING VAR COUNT DCA VCPTR TAD (SVARST-26 TAD NAME1 /TWO WORDS PER ENTRY JMP DOLU LUARAY, TAD (ACNT /ARRAY VAR COUNT DCA VCPTR TAD (ARAYST /ARRAY SYMBOL TABLE DCA STPTR CDF 10 FINDA, TAD I STPTR /SEARCH TABLE SNA JMP NEWARY /NEW ENTRY CIA TAD NAME1 /IS THIS IT ? ISZ STPTR SNA CLA JMP GOTARY /YES ISZ STPTR ISZ STPTR ISZ STPTR /GO TO NEXT ENTRY JMP FINDA GOTARY, TAD (37 /GET NUMBER AND I STPTR DCA SYMBOL /INTO SYMBOL CDF JMP I LOOKUP NEWARY, TAD NAME1 /PUT IN NEW ENTRY DCA I STPTR ISZ STPTR TAD (41 /PUT IN NUMBER JMP CHEKST /GO DO THE REST LUSARY, TAD (SACNT /STRING ARRAY COUNT DCA VCPTR TAD (SARYST /USE STRING ARRAY TABLE JMP FINDA-2 /GO DO SEARCH / FILE AND CLOSE PROCESSORS FILE, JMS I QLODSN /OUTPUT STMT NUMBER TAD (FOPENS /POINTER TO FILE OPENS DCA FILESW JMS I QCHECKC /LOOK FOR "V" -126 SKP /NOT V ISZ FILESW /YUP, INCR FILESW JMS I QCHECKC /LOOK FOR "N" -116 JMP .+3 ISZ FILESW /INCR FILESW BY TWO IF "N" ISZ FILESW JMS GETFN /GET FILE NUMBER JMS I QEXPR /GET DEVICE/FILE DESCRIPTOR JMP I QREMARK JMS I QLOAD /LOAD INTO SAC TAD TYPE1 /TYPE MUST BE STRING SPA CLA JMP .+3 /IT WERE JMS I QERMSG /IT WEREN'T 0616 TAD I FILESW /GET CORRECT OPEN JMS I QOUTWRD JMP I QNEWLIN FOPENS, OPENAF;OPENAV;OPENNF;OPENNV FILESW, 0 PLUS, 40;0;XADD;XADD / EXPRESSION ANALYZER PAGE EXPR, 0 /POLISHIZE EXPRESSION DCA TEMP /SAVE LEFT TAD LEFT /SO WE CAN PUSH OLD VALUE JMS I QPUSH /OF IT TAD TEMP /NOW SET NEW VALUE DCA LEFT /OF THAT SWITCH TAD EXPR JMS I QPUSH /SAVE RETURN ADDR JMS I QPUSH /MARK STACK TAD LEFT /IS THIS LEFT SIDE ? SPA CLA JMP OPRAND+1/YES, NO UNARY MINUS UNOPR, JMS I QGETC /LOOK FOR UNARY OPERATOR JMP MISARG /THERE HAS TO BE AN OPERAND TAD (-53 /UNARY+(NOP) SNA JMP UNOPR TAD (53-55 /UNARY - SZA JMP NOTMIN /NOT UNARY MINUS TAD (UMOPR /PUSH UNARY MINUS JMS I QPUSH JMP UNOPR NOTMIN, TAD (55-50 /LOOK FOR ( SZA CLA JMP OPRAND /NOT A SUB EXPRESSION JMS I QEXPR /COMPILE SUB EXPRESSION JMP BADEXP /BAD SUB EXPRESSION JMS I QCHECKC /LOOK FOR ) -51 SKP /ERROR JMP OPR8R /GOTIT JMS I QERMSG /PARENTHESIS MIS MATCH 1520 JMP BADEXP OPRAND, JMS I QBACK1 /PUT BACK NON UNARY OP JMS I QGETNAM /LOOK FOR VARIABLE REF JMP NOTVAR /NOPE. JMS I QLOOKUP /SYMBOL TABLE SEARCH TAD SYMBOL /SAVE SYMBOL NUMBER DCA TEMP2 /BECAUSE SAVAC MIGHT KILL IT JMS I QSAVAC /GENERATE FSTA (MAYBE) -3 TAD TYPE /WAS THIS A FUNCTION OR ARRAY ? AND (3000 SZA JMP FUNSS /YES, GO PROCESS IT TAD TYPE /MAKE OPERAND STACK ENTRY JMS I QPUSHO TAD TEMP2 /FIRST TYPE THEN SYMBOL # JMS I QPUSHO OPR8R, TAD LEFT /LEFT SIDE ? SMA CLA /YES, NO OPERATORS LEGAL JMS I QGETC /LOOK FOR OPERATOR JMP ENDEXP /END OF EXPR TAD (-52 /** IS SPECIAL CASE SZA JMP NOSTAR /NOT * JMS I QGETC /LOOK FOR SECOND * JMP NOSTAR TAD (-52 SNA CLA TAD (136-52 /** -> ^ SNA JMS I QBACK1 /PUT IT BACK NOSTAR, TAD (52 /RESTORE CHAR DCA TEMP TAD (OPR8RS-1 DCA X10 /PTR TO LIST OPRLUP, TAD I X10 /GET OPERATOR PTR SNA JMP ENDEXP-3/END OF LIST DCA NEWOP /SAVE IT IN CASE TAD I X10 /COMPARE TAD TEMP SZA CLA JMP OPRLUP /KEEP LOOKING GOTOPR, JMS I QPOP /GET STACK TOP SNA JMP PUSH2 /EMPTY DCA OLDOP TAD I OLDOP /COMPARE PREC. CIA TAD I NEWOP /NEW-OLD SPA SNA CLA JMP OUTOLD /OLD>NEW TAD OLDOP PUSH2, JMS I QPUSH /OLD < NEW TAD NEWOP /GO PUSH BOTH JMS I QPUSH JMP UNOPR /GO LOOK FOR NEXT OPERAND OUTOLD, TAD OLDOP /OUTPUT CODE FOR OLD OPR8R JMS I QOUTOPR JMP GOTOPR /LOOK AT NEXT TOP OF STACK JMS I QBACK1 /PUT BACK NON OPERATOR SKP JMS I QOUTOPR /OUTPUT OPERATOR ENDEXP, JMS I QPOP /LOOK FOR STACK MARK SZA JMP ENDEXP-1/NOT THIS JMS I QPOP /GET RETURN ADDR IAC DCA TEMP JMS I QPOP /GET LEFT SIDE SWITCH DCA LEFT JMP I TEMP /RETURN MISARG, JMS I QERMSG /MISSING OPERAND 1517 JMP BADEXP MINUS, 40;0;XISUB;XSUB SLASH, 50;0;XIDIV;XDIV / EXPRESSION ANALYZER (HANDLE SUBSCRIPTS) PAGE FUNSS, AND (1000 /IS IT FUN CALL ? SNA CLA JMP .+3 /NO JMS I QSAVAC /YES, SAVE AC -1 TAD TYPE /SAVE TYPE JMS I QPUSH TAD TEMP2 /AND SYMBOL NUMBER JMS I QPUSH TAD STPTR /AND SYMBOL TABLE PTR JMS I QPUSH SKP SSLOOP, JMS I QPOP /GET ARG/SS COUNT IAC JMS I QPUSH /INCREMENT IT JMS I QEXPR /GET NEXT ARG/SS JMP BADFSS JMS I QGETA1 /IS THIS ARG(SS) AN ARRAY REF ? CLL CML RTR AND TYPE1 /CHECK THE TYPE SNA CLA JMP NOTSSD /NOT AN ARRAY REFERENCE JMS I QLOADSS /LOAD THE SS REGS JMS I QSAVAC /SAVE AC IF NEEDED -1 TAD TYPE1 /SET THE MODE JMS I QMODSET TAD (AFLDA /LOAD THIS ARG/SS TAD SYMBL1 JMS I QOUTWRD TAD Q400 /SET THE IN-AC BIT TAD MODE /WE JUST CALLED MODSET DCA I OSTACK /CHANGE THIS STACK ENTRY SKP NOTSSD, ISZ OSTACK /FIX UP OSTACK ISZ OSTACK JMS I QCOMARP /LOOK FOR , OR ) JMP BADFSS /NEITHER IS BAD JMP SSLOOP /, MEANS MORE ARGS/SS JMS I QPOP /GET # OF ARG/SS DCA TEMP /GET ARG/SS COUNT JMS I QPOP /RESTORE S.T. ADDR DCA STPTR JMS I QPOP DCA SYMBOL /GET BACK THE SYMBOL # JMS I QPOP DCA TYPE /GET BACK THE TYPE TAD TYPE /IS IT AN ARRAY OR FUN REF ? AND (1000 SZA CLA JMP DOCALL /FUNCTION REFERENCE TAD TEMP /MOVE SS COUNT CLL RTR /INTO THE CORRECT RTR /FIELD DCA TEMP2 /AND SAVE IT CDF 10 TAD I STPTR /ANY PREV REFERENCE ? AND (3000 SZA JMP NOTNEW /YES, GO CHECK NUMBERS TAD TEMP2 /IF NONE, PUT IN NUMBER TAD I STPTR DCA I STPTR JMP NDOK /THATS ALL NOTNEW, CIA /COMPARE NUMBER OF SS TAD TEMP2 /WITH ANY PREVIOUS SZA CLA JMP BADFSS+3/THEY DON'T MATCH NDOK, CDF TAD TYPE /PUT TYPE TAD TEMP /AND DIM COUNT ONSTAK, JMS I QPUSHO /ONTO ARGUMENT STACK TAD SYMBOL JMS I QPUSHO /AND SYMBOL NUMBER JMS I QSAVAC /SAVE FIRST SS IF LEFT IN AC -5 JMP OPR8R /GO GET AN OPERATOR BADFSS, TAD (-4 /PURGE STACK JUNK TAD STACK DCA STACK JMS I QERMSG /PUT ERROR MESSAGE 2323 BADEXP, JMS I QPOP /LOOK FOR STACK MARK SZA CLA JMP BADEXP /NOT YET JMS I QPOP /RETURN ADDR DCA TEMP JMS I QPOP /SS LOAD SWITCH DCA LEFT JMP I TEMP /TAKE ERROR EXIT WTAB, -124;-101;-102;-50 NOTVAR, TAD LEFT /LEFT SIDE ? SPA CLA JMP MISARG /YES, NO LITERALS LEGAL JMS I QNUMBER /LOOK FOR LITERAL JMP NOTNUM /NOT A NUMBER JMS I QLUKUP2 /SEARCH LITERAL TABLE LITRL -3 JMS NEWVAR /IF NEW, GIVE IT NUMBER JMP ONSTAK /GO PUT IT ONTO THE STACK NOTNUM, JMS I QSTRING /LOOK FOR STRING LITERAL JMP MISARG /NO, MISSING ARG TAD WORD1 /GET -NUMBER WORDS - 1 IAC CLL CML CMA RAR DCA .+3 /FOR LOOKUP JMS I QLUKUP2 /LOOK UP LITERAL SLITRL 0 JMS NWSVAR /IF NEW, GIVE IT NUMBER CLL CML RAR /SET TYPE BIT FOR STRING JMP ONSTAK /PUT INFO ONTO STACK UPAROW, 60;1;EXPRTN-1 / EXPRESSION ANALYZER (HANDLE FUNCTION CALLS) PAGE DOCALL, TAD LEFT /IS THIS LEFT SIDE ? SMA CLA /IF YES, FUN ILLEGAL JMS OUTCAL /GENERATE CALL SKP /SKIP IF ERROR JMP OPR8R /GO LOOK FOR OPERATOR JMS I QERMSG /BAD FUNCTION REFERENCE 0622 JMP BADEXP OUTCAL, 0 /GENERATE FUN CALL; TYPE, /SYMBOL AND TEMP ARE INPUTS TAD SYMBOL /SAVE FUNCTION NUMBER AROUND SAVAC DCA FUNNUM JMS I QSAVAC /SAVE SECOND FROM TOP -3 TAD FUNNUM /SETUP FOR FINDING FUNCTION DCA WORD1 /INFO BLOCK JMS I QLUKUP2 /ON THE FUNCTION LIST FUNCTN -1 JMP I OUTCAL /UNDEFINED FUNCTION TAD SYMBOL /CHECK NUMBER OF ARGS TAD TEMP SZA CLA JMP I OUTCAL MOVARG, JMS I QLOAD /GET TOP OF STACK INTO AC JMS SETFLD /GET FIELD OF FORMAL-PARAMS TAD I X10 /GET FIRST ONE CDF DCA TEMP CLL CML RAR /COMPARE TYPE OF ARG AND TYPE1 /WITH THAT OF FORMAL PARAMETER TAD TEMP SPA CLA /THEY MUST MATCH JMP I OUTCAL /(THEY DON'T) CLL CML RTR /SHOULD WE LEAVE IT IN THE AC ? AND TEMP SZA CLA JMP OKINAC /YES, SAVES AN INSTRUCTION TAD TYPE1 /SET MODE JMS I QMODSET /APPROPRIATELY CLL CMA RAR /3777 AND TEMP /GET SYM NUMBER TAD (FSTA /STORE VALUE IN FORM PARAM JMS I QOUTWRD OKINAC, ISZ SYMBOL /MORE ARGS ? JMP MOVARG JMS SETFLD TAD I X10 /GET TYPE OF FUNCTION DCA TYPE1 /(ITS RESULT THAT IS) CDF TAD TYPE /IS TYPE OF FUNCTION TAD TYPE1 /SAME AS TYPE OF CALL SPA CLA JMP I OUTCAL /NO, ERROR JMS I QMODSET /ALL CALLS IN N MODE TAD WORD1 /CHECK FOR USER FUNCTION SMA JMP CALLUF /YES, DO SPECIAL CALL FINCAL, ISZ OUTCAL /FIX RETURN JMS I QOUTWRD /OUTPUT CODE TAD Q400 /SET TOP OF STACK TAD TYPE1 DCA I OSTACK /TO AC DCA I OSTACK /SYMBOL NUMBER IS MEANINGLESS CLL CML RAR AND TYPE1 /INTERPRETER MODE SAME DCA MODE /AS FUNCTION TYPE JMP I OUTCAL /ON RETURN CALLUF, JMS I QNOREGS /FORGET REGS ON USER FUNC TAD LUFLD /OUTPUT JSUB AND (70 /WITH POINTER TO CLL RTL /DOUBLE WORD TAD (JSUB /VALUE OF LOCATION JMS I QOUTWRD /COUNTER FOR THE TAD X10 /START OF THE IAC /USER "DEF"INED FUNC JMP FINCAL FSUB1, 0 /FOR SUBROUTINE #1 JMS I QEXPR /GET AN EXPRESSION JMP BADFOR JMS I QLOAD /LOAD VALUE TAD TYPE1 /MUST BE NUMERIC SMA CLA JMP I FSUB1 /OK BADFOR, JMS I QERMSG /BAD FOR LOOP PARAMETERS 0620 JMP I QREMARK FSUB2, 0 /FOR SUBROUTINE #2 JMS FSUB1 /GET EXPR AND LOAD IT JMS GENTMP /MAKE A TEMP FOR IT TAD SYMBOL /STORE EXPR IN TEMP TAD (FSTA JMS I QOUTWRD TAD SYMBOL /RETURN SLOT # JMP I FSUB2 FUNNUM, NOREGS, 0 /FORGET REGISTORS CLA IAC /FILE NUMBER REG DCA IFNREG / CMA /SUBSCRIPT REG #1 / DCA SSREG1 / CMA /SUBSCRIPT REG #2 / DCA SSREG2 JMP I NOREGS CLOSE, JMS I QLODSN /OUTPUT STMT NUMBER CLA IAC /NO COLON NEEDED AFTER FILE NUM JMS GETFN /GET FILE NUM TAD (CLOSEF /OUTPUT CLOSE JMS I QOUTWRD JMP I QNEWLIN PSETJF, 0 TAD (SETJF JMS I QOUTWRD JMS I QPOP /GET INDEX VAR DCA FINDEX JMP I PSETJF DIMREAD,JMS I QLOADSS /PATCH TO INPUT PROC. SET UP SS REG TAD (READ /OUTPUT INSTR JMS I QOUTWRD TAD (AFSTA JMP I (FININP /RESUME IN LINE / CODE GENERATOR PAGE OUTOPR, 0 /OUTPUT CODE FOR OPERATOR DCA X10 /SAVE POINTER TO SKELETON TAD I X10 /GET CONTROL WORD SMA SZA JMP SPCIAL /TREAT AS SPECIAL CASE DCA TYPE /ITS THE TYPE ALLOWANCE TAD (XLOAD /GET SKEL ADDRS DCA CASEMM /FOR THE THREE CASES TAD I X10 DCA CASEMA TAD I X10 DCA CASEAM TAD TYPE /ENTER CORRECT MODE JMS I QMODSET CLL CMA RAL /GET THE SECOND OPERAND TAD OSTACK DCA OSTACK TAD OSTACK DCA X10 /BY BACKING UP THE STACK TAD I X10 /TYPE DCA TYPE2 TAD I X10 DCA SYMBL2 /SYMBOL NUMBER TAD TYPE2 AND (3 DCA TEMP /SS COUNT TAD TYPE2 /LOOK AT OPERAND 2 AND Q400 SZA CLA JMP MAC /MUST BE CASE M,AC CLL CML RTR /ITS IN MEMORY, IS IT SS'D AND TYPE2 SNA CLA JMP A2OK /NO, ITS SCALAR JMS I QLOADSS /LOAD NECESSARY SS REGS ISZ CASEMM /FIXUP THE SKELETON POINTERS ISZ CASEAM A2OK, JMS GETA1 /GET STUF FOR ARG1 TAD TYPE1 /LOOK AT IT AND Q400 SZA CLA JMP ACM /ITS CASE AC,M MM, TAD I CASEMM /ITS CASE M,M LOAD OPERAND 2 TAD SYMBL2 JMS I QOUTWRD SKP MAC, JMS GETA1 /GET STUF FRO ARG1 CLL CML RTR /IS IT SS'D ? AND TYPE1 SNA CLA JMP A1OK /NO, ITS SCALAR JMS I QLOADSS /LOAD THE SS REGS ISZ CASEMA /BUMP SKELETON ADDR A1OK, TAD I CASEMA /GET CORRECT INSTRUCTION TAD SYMBL1 /PLUS SYMBOL NUMBER TYPCHK, JMS I QOUTWRD /OUTPUT IT CLL CML RAR /TYPES OF OPERANDS MUST MATCH AND TYPE1 TAD TYPE2 SPA CLA JMP MIXED /THEY DON'T TAD TYPE /TYPE OF OPERATOR TAD TYPE1 /MUST MATCH SPA CLA /THAT OF OPERANDS JMP MIXED /THEY DON'T TAD Q400 /GENERATE STACK ENTRY TAD TYPE DCA I OSTACK DCA I OSTACK /THIS IS SAFE JMP I OUTOPR ACM, TAD I CASEAM /ITS CASE AC,M TAD SYMBL2 /GEN OPERATION FOR OPERAND 2 JMP TYPCHK /GO FINISH IT UP MIXED, JMS I QERMSG /MIXED TYPES 1524 JMP I OUTOPR SPCIAL, TAD I X10 /GET ADDR OF SPECIAL RTNE DCA TEMP /(PLUS 1 FROM THE TYPE WORD) JMP I TEMP /HANDLE SPECIAL CASE GETA1, 0 /GET STUFF FOR ARG 1 CLL CMA RAL /BACK UP STACK TAD OSTACK DCA OSTACK TAD OSTACK DCA X11 TAD I X11 /GET TYPE1 DCA TYPE1 TAD I X11 /GET SYMBL1 DCA SYMBL1 TAD TYPE1 /GET SS COUNT AND (3 DCA TEMP JMP I GETA1 UMRTNE, JMS I QSAVAC /SAVE CURRENT AC IF NEEDED -3 JMS I QLOAD /GET ARG IN AC DCA TYPE /TYPE MUST BE NUMERIC DCA TYPE2 TAD (FNEG /DO NEGATE JMP TYPCHK EXPRTN, DCA TYPE /SET FUNC TYPE CLL CML RTL /SET NUMBER OF ARGS DCA TEMP TAD (FUNC1+60 DCA SYMBOL /EXP2 JMS OUTCAL /OUTPUT FUNCTION CALL JMP MIXED /ERROR JMP I OUTOPR /DONE CASEMA, 0 CASEMM, 0 CASEAM, 0 TYPE2, 0 SYMBL2, 0 RETURN, JMS I QLODSN /OUTPUT STMT NUM LOAD JMS I QMODSET /ALWAYS RETURN IN N MODE TAD (RET-RNDO RANDOM, TAD (RNDO-STOP STOPX, TAD (STOP /RETURN, RANDOMIZE, OR STOP JMS I QOUTWRD JMP I QNEWLIN / LETTER AND DIGIT SCANNERS PAGE LETTER, 0 /SKIP ON LETTER JMS I QGETC JMP I LETTER /NO LETTER TAD (-133 /MUST BE .LT. 133 SMA JMP NOLETR TAD (133-100/MUST BE .GT. 100 SPA JMP NOLETR AND (77 /RESTORE 6 BITS ISZ LETTER /BUMP RETURN ADDR JMP I LETTER NOLETR, JMS I QBACK1 /PUT CHAR BACK JMP I LETTER DIGIT, 0 /SKIP ON DIGIT JMS I QGETC JMP I DIGIT /NO DIGIT TAD (-72 /MUST BE .LT. 72 O7100, CLL /(USED AS LITERAL BY "TTY") TAD (72-60 /MUST BE .GE. 60 SNL JMP NODIGT /NOPE ISZ DIGIT /RETURN DIGIT MINUS 60 JMP I DIGIT NODIGT, JMS I QBACK1 /PUT IT BACK JMP I DIGIT / STATEMENT NUMBER GETTER SNUM, 0 /GET A STATEMENT NUMBER DCA TEMP /SAVE DEFINED SWITCH JMS I QDIGIT /GET FIRST DIGIT JMP I SNUM /NO STATEMENT NUMBER DCA WORD2 /THIS WILL BE THE BUCKET TAD WORD2 CLL RAL /TWO WORDS PER BUCKET TAD (SNUMS DCA BUCKET ISZ SNUM /OK, ITS A STMT NUMBER TAD (-4 /FIVE DIGITS MAX DCA TEMP2 DCA WORD1 /CLEAR TOP WORD SNLOOP, JMS I QDIGIT /GET NEXT DIGIT JMP GOTSN /END OF NUMBER DCA WORD3 /SAVE IT TAD (-4 /SET SHIFT COUNT DCA ACO SHIFT, TAD WORD2 /SHIFT LEFT ONE BIT CLL RAL DCA WORD2 TAD WORD1 RAL DCA WORD1 ISZ ACO /BUMP SHIFT COUNTER JMP SHIFT TAD WORD2 /PUT IN NEW DIGIT TAD WORD3 DCA WORD2 ISZ TEMP2 /BUMP DIGIT COUNT JMP SNLOOP GOTSN, JMS I QLUKUP2 /FIND STMT NUMBER BUCKET, 0 -2 JMP NEWSN /ITS A NEW STMT NUM CLL CML RAR /CHECK FOR MULTIPLY DEFINED AND SYMBOL AND TEMP SZA CLA JMP MDLABL /YES, IT IS TAD X10 /GET ADDR OF LABEL VALUE DCA TEMP2 JMS SETFLD /GET TO FIELD OF ENTRY TAD TEMP /OR IN THESE BITS TAD SYMBOL DCA I TEMP2 FINSN, CDF TAD LUFLD /GET FIELD BITS AND (70 CLL RTL DCA TEMP /INTO A CONVIENIENT JMP I SNUM /PLACE NEWSN, JMS SETFLD /GET FIELD TAD TEMP /PUT IN BITS DCA I NEXT TAD NEXT /SAVE N3 ADDR DCA TEMP2 DCA I NEXT /1 EXTRA WORD JMP FINSN MDLABL, JMS I QERMSG /MULTIPLY DEFINED 1504 /LABEL JMP I SNUM TTY, 0 /CONVERT TO ASCII AND PRINT AND (77 /SIX BITS ONLY TAD (-40 /WHAT SIDE OF FORTY ? SPA TAD O7100 /LOW SIDE TAD (240 /HIGH SIDE JMS TTX /PRINT CHAR JMP I TTY /RETURN TTX, 0 /PRINT CHAR ON TTY SKP /(CONTROL O ZEROES THIS WORD) JMP .+4 /(THUS KILLING ERROR REPORTING) TSF JMP .-1 TLS CLA JMP I TTX / CHAIN PROCESSOR CHAIN, JMS I QLODSN /OUTPUT STMT NUMBER JMS I QEXPR /GET CHAIN STRING JMP I QREMARK JMS I QLOAD /INTO SAC TAD TYPE1 /TYPE MUST BE STRING SMA CLA JMS I QERMSG /IT WASN'T 0616 /(OK IF ERROR CODE IS NOP) TAD (CHN /OUTPUT CHAIN OPCODE JMS I QOUTWRD JMP I QNEWLIN XISUB, FISUB;AISUB / SEVERAL SHORT UTILITY ROUTINES PAGE BACK1, 0 /BACK UP ONE CHAR CLA CMA TAD NCHARS DCA NCHARS CLA CMA TAD CHRPTR DCA CHRPTR JMP I BACK1 GETCWB, 0 /GET A CHARACTER (PRESERVE BLANKS) ISZ NCHARS JMP .+4 CLA CMA DCA NCHARS /RESET NCHARS JMP I GETCWB ISZ GETCWB TAD I CHRPTR /GET THE CHAR JMP I GETCWB SAVECP, 0 /SAVE CHAR POSITION TAD NCHARS DCA NCSAVE TAD CHRPTR DCA CPSAVE JMP I SAVECP RESTCP, 0 /RESTORE CHAR POS TAD CPSAVE DCA CHRPTR TAD NCSAVE DCA NCHARS JMP I RESTCP GETC, 0 /GET A CHARACTER (IGNORING BLANKS) ISZ NCHARS JMP .+4 CLA CMA DCA NCHARS JMP I GETC TAD I CHRPTR TAD (-40 /IS IT A BLANK SNA JMP GETC+1 /YES IGNORE IT TAD (40 /FIX CHAR ISZ GETC JMP I GETC POP, 0 /GET TOP OF STACK TAD STACK DCA PUSH CLA CMA TAD STACK DCA STACK /DECREMENT STACK POINTER TAD I PUSH JMP I POP PUSH, 0 /PUT AC ONTO STACK DCA I STACK /STORE TAD (-STACKA-STAKSZ+1 TAD STACK /CHECK FOR OVERFLOW SPA CLA JMP I PUSH /OK, RETURN STKOVR, JMS I QERMSG 2004 JMP I XABORT /ABORT COMPILATION PUSHO, 0 /PUSH OPERAND STACK DCA I OSTACK /PUSHIT TAD (-STACKO-STOKSZ+1 TAD OSTACK /CHECK FOR STACK OVERFLOW SPA CLA JMP I PUSHO JMP STKOVR /TOO FULL COMARP, 0 /SKIP ON COMA OR RITE PAREN JMS I QGETC /GET CHAR JMP I COMARP TAD (-51 SNA ISZ COMARP /RITE PAREN, SKIP 2 SZA TAD (51-54 /CHECK FOR , SNA ISZ COMARP /, SKIP 1 SZA CLA JMS I QBACK1 /NEITHER PUT BACK JMP I COMARP LOAD, 0 /LOAD SAC OR FAC JMS I QGETA1 /GET TOP OF STACK TAD TYPE1 /SET MODE JMS I QMODSET TAD TYPE1 /IS IT IN THE AC? AND Q400 SZA CLA JMP I LOAD /YUP CLL CML RTR /SUBSCRIPTED ? AND TYPE1 SNA CLA JMP .+3 /NO JMS I QLOADSS /FILL SS REGS TAD (AFLDA-FLDA TAD (FLDA /ARRAY OR SCALAR LOAD TAD SYMBL1 /PLUS SYMBOL NUMBER JMS I QOUTWRD JMP I LOAD IFOPS, JNE;-7476 /<> JNE;-7674 />< JGE;-7576 /=> JGE;-7675 />= JLE;-7574 /=< JLE;-7475 /<= 0 JEQ;-7500 /= JGT;-7600 /> JLT;-7400 /< 0 NCSAVE, 0 CPSAVE, 0 / TEMP GENERATORS AND AC SAVING ROUTINES PAGE GENTMP, 0 /GENERATE A TEMP SZA CLA JMP STRTMP /ITS A STRING TEMP TAD TMPCNT ISZ TMPCNT /BUMP COUNT DCA NAME1 JMS I QLUKUP2 /LOOK UP THIS TEMP TEMPS -1 JMS NEWVAR /NEW ONE ON ME JMP I GENTMP STRTMP, TAD STMPCT ISZ STMPCT /BUMP COUNT DCA NAME1 JMS I QLUKUP2 /LOOK UP THIS TEMP STEMPS -1 JMS NWSVAR /NEW STRING TEMP JMP I GENTMP NEWVAR, 0 /MAKE SYM NUM FOR VAR TAD VARCNT /PUT SYM NUM TAD (401 DCA SYMBOL /INTO SYMBOL TAD SYMBOL /AND INTO ST ENTRY JMS SETFLD DCA I NEXT CDF ISZ VARCNT /BUMP COUNT JMP I NEWVAR /RETURN WITH SYM NUM JMP STOVER /S.T. OVERFLOW NWSVAR, 0 /MAKE SYM NUM FOR VAR$ TAD SVCNT /PUT SYM NUM TAD (401 DCA SYMBOL TAD SYMBOL /INTO SYMBOL AND JMS SETFLD DCA I NEXT /S.T. ENTRY CDF ISZ SVCNT /OVERFLOW ? JMP I NWSVAR /NO, WE'RE OK JMP STOVER SAVAC, 0 /SAVE FAC (OR SAC) IF NECESSARY TAD I SAVAC /GET ENTRY POINTER TAD OSTACK ISZ SAVAC DCA SVTEMP /ADDR OF TYPE WORD TAD I SVTEMP /LOOK AT IT AND Q400 SNA CLA JMP I SAVAC /NOT IN AC CLL CML RAR /SAVE STRING BIT ONLY AND I SVTEMP /OF TYPE WORD DCA I SVTEMP TAD I SVTEMP JMS GENTMP /GENERATE TEMP TAD I SVTEMP JMS I QMODSET /SET MODE TAD XSTOR TAD SYMBOL /GENERATE STORE JMS I QOUTWRD TAD SYMBOL /RETURN S.T. NUMBER ISZ SVTEMP /MOVE TO SYMBOL NUM WORD DCA I SVTEMP /SAVE THE TEMP NUM THERE JMP I SAVAC /RETURN WITH SAVE MADE SVTEMP, 0 XSTOR, FSTA;AFSTA / SUBSCRIPT REGISTER LOADING ROUTINE LOADSS, 0 /LOAD SS REGS CLL CMA RAL /LOOK AT NUMBER OF SS TAD TEMP SNA CLA JMP LODSS2 /2 SS SNL JMP TOOMNY /MORE THAN 2 JMS SSLOAD /LOAD SS REG 1 JMP I LOADSS LODSS2, CLA IAC JMS SSLOAD /LOAD SS REG 2 JMS SSLOAD /NOW SS REG 1 JMP I LOADSS SSTYPE, TOOMNY, JMS I QERMSG /SUBSCRIPTING ERROR 2323 JMP I LOADSS SSLOAD, 0 /LOAD A SS REG FROM TOP OF STACK DCA TEMP2 /SS REG 1 OR 2 SWITCH CLL CMA RAL /BACK UP ONE ENTRY TAD OSTACK /ON THE OPERAND STACK DCA OSTACK TAD OSTACK DCA X11 /USE X11 TO GET STUFF TAD I X11 /GET TYPE WORD SPA JMP SSTYPE /SS MUST BE A NUMBER AND Q400 /GET AC BIT SZA CLA JMP SSINAC /ITS IN THE AC TAD TEMP2 SZA CLA TAD (LSS2-LSS1 TAD (LSS1 /LOAD REG 1 OR 2 ?? TAD I X11 /ANYHOW, THIS IS THE SOURCE JMS I QOUTWRD /OUTPUT THE CODE JMP I SSLOAD SSINAC, TAD TEMP2 TAD (LSS1AC /NOTE: LSS2AC=LSS1AC+1 JMS I QOUTWRD /SO OUTPUT ONE OF THEM JMP I SSLOAD / XSCOMP, SCOMP;SACOMP XDIV, FDIV;AFDIV / PATCH6, 0 ISZ SIGDIG JMP I PATCH6 CMA DCA SIGDIG JMP CONVLP / STAR, 50;0;XMUL;XMUL / NUMERIC CONVERSION ROUTINE (PART ONE) PAGE NUMBER, 0 /GENERAL NUMBER CONVERSION ROUTINE DCA DECPT /ZERO DECIMAL POINT SWITCH DCA WORD1 /ZERO FAC DCA WORD2 DCA WORD3 DCA ACO DCA SIGN /CLEAR SIGN SWITCH TAD NUMDIG DCA SIGDIG JMS I QGETC /GET A CHAR JMP I NUMBER /NO CHAR IS NO NUMBER JMS CHKSGN /CHECK FOR SIGN SIGN, 0 /THIS SWITCH GETS SET DCA NDIGIT /ZERO DIGIT COUNT CONVLP, JMS I QDIGIT /GET A DIGIT JMP TRYDEC /IS THERE A DECIMAL POINT ? DCA NXTDGT /SAVE THE DIGIT JMS PATCH6 ISZ NDIGIT /INCR NUMBER OF DIGITS TAD WORD2 /PREPARE TO MULT BY 10 DCA OP2 TAD WORD3 DCA OP3 TAD ACO DCA OPO JMS I (AL1 /DOUBLE FAC JMS I (AL1 /DOUBLE AGAIN JMS I (OADD /TIMES FIVE JMS I (AL1 /ONE MORE DOUBLING IS TIMES 10 DCA OP2 DCA OP3 /PUT NEWEST DIGIT INTO OPERAND TAD NXTDGT DCA OPO JMS I (OADD /ADD IN NEWEST DIGIT JMP CONVLP TRYDEC, TAD DECPT /DECIMAL ALREADY ? SZA CLA JMP TRYE2 /YES, LOOK FOR EXPONENT JMS I QGETC /LOOK FOR . JMP DIGTST /SEE IF THERE WAS ANYTHING TAD (-56 SZA CLA JMP TRYE1 /TRY FOR E ISZ DECPT /SET DECIMAL POINT SW JMP CONVLP-1/LOOP FOR OTHER DIGITS TRYE1, JMS I QBACK1 /PUT BACK NON . DIGTST, TAD NDIGIT /ANY DIGITS YET ? SNA CLA JMP I NUMBER /NO, NO NUMBER TRYE2, JMS I QGETC /LOOK FOR E JMP NOEXP+1 /GO HANDLE EXPONENT TAD WSTEP+2 /USE PART OF "STEP" LITERAL SZA CLA JMP NOEXP /NO EXPONENT GETEXP, DCA ESIGN /ZERO EXPONENT SIGN SWITCH JMS I QGETC /GET A CHAR JMP NOEXP /TREAT AS NO EXPONENT JMS CHKSGN /IS IT A SIGN FPRTNE, ESIGN, 0 /THIS IS THE SWITCH TO SET JMS SMLNUM /GO GET THE EXPONENT FIXEXP, TAD ESIGN /CHECK EXPONENT SIGN SNA CLA JMP NOEXP+2 TAD EXPON /COMPLEMENT EXPONENT CIA SKP NOEXP, JMS I QBACK1 /PUT BACK NON E DCA EXPON /ZERO EXPONENT TAD (43 /NORMALIZE THE NUMBER DCA WORD1 JMS I (ANORM TAD DECPT /WAS THERE A DECIMAL POINT ? SZA CLA TAD NDIGIT /HOW MANY DIGITS TO THE RIGHT ? CIA TAD EXPON /SUBTRACT THAT NUMBER FROM EXP SMA JMP POSEXP /EXPONENT IS POSITIVE CIA DCA EXPON /ONLY NEED ABS VALUE TAD (FPDIV /DO DIVIDES JMP .+3 POSEXP, DCA EXPON TAD (FPMUL /DO MULTIPLIES DCA FPRTNE /MULTIPLY/DIVIDE ROUTINE TAD (PETABL-1 DCA X11 /POWERS OF TEN TABLE EXPMUL, TAD EXPON /LOOK AT THE EXPONENT SNA JMP DOSIGN /IF 0 ITS THRU CLL RAR DCA EXPON /PUT LOWEST BIT INTO LINK SNL JMP SKPEXP /THIS ONE DOESN'T COUNT TAD I X11 /MOVE FACTOR INTO OPERAND DCA OP1 TAD I X11 DCA OP2 TAD I X11 DCA OP3 TAD I X11 DCA OPO JMS I FPRTNE /MULTIPLY OR DIVIDE BY THIS FACTOR JMP EXPMUL /CHECK NEXT BIT SKPEXP, TAD X11 /SKIP OVER THIS FACTOR TAD (4 JMP EXPMUL-1 DOSIGN, TAD SIGN /CHECK THE SIGN SZA CLA JMS I (NEGFAC /NEGATE IF NEGATIVE ISZ NUMBER /BUMP RETURN JMP I NUMBER /RETURN NXTDGT, 0 /INPUT DEVICE HANDLER *INDEVH 0 /INITIALIZATION CODE FOR RUN CASE PAGE RUNNED, CIF 10 /COME HERE IF .R BCOMP JMS I (200 /CALL COMMAND DECODER 5 0201 /ASSUMED EXTENSION "BA" CDF 10 TAD I (7644 /TEST FOR /V CDF AND (4 SZA CLA JMS VERNUM TAD (INFO-1 DCA X10 CDF 10 TAD 7617 CDF SNA CLA /NULL INPUT? JMP RUNNED /YES: NAUGHTY TAD 7777 CLL RAL /BATCH RUNNING SPA CLA JMP SAVBOS /YES CDF 10 JMP FINDSV-2 SAVBOS, TAD (INFO-5 DCA X10 TAD 7777 AND (70 TAD CDFZRO DCA .+1 /CDF TO BATCH FIELD CDF 10 TAD I BOSCTR CDF 10 DCA I X10 /SAVE BOS WRDS IN INFO AREA ISZ BOSCTR JMP .-5 DCA I X10 /ZERO EDITOR BLOCK NUMBER CDF 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 JMP NG /ERROR TAD XXXXSV /GET STARTING BLOCK IAC /PLUS 1 CDF 10 DCA I X10 /INTO INFO AREA CDFZRO, 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 STRT3, CDF CLA IAC /ENTER TEMPORARY FILE CIF 10 JMS I (200 3 TMPBLK, TMPFIL 0 JMP NG TAD TMPBLK /SAVE START OF TEMP FILE DCA OUBLOK TAD TMPBLK /IN A COUPLE PLACES DCA BLOCK TAD TMPBLK+1/ALSO THE SIZE DCA OUSIZE JMP GETDEV /GO FETCH DEVICE HANDLER BOSCTR, 7774 VERNUM, 0 TAD (VTEXT DCA TEMP TAD (-5 DCA TEMP2 TLS MOREV, TAD I TEMP CLL RTR RTR RTR JMS TTY TAD I TEMP JMS TTY ISZ TEMP ISZ TEMP2 JMP MOREV TAD (215 JMS TTX TAD (212 JMS TTX TSF /WAIT FOR TTY TO GET DONE JMP .-1 /BEFORE RETURNING JMP I VERNUM / VTEXT, TEXT /BCOMP V/ *.-1 VERLOC, VERSON^100+6001 0 / NUMERIC CONVERSION ROUTINE (PART TWO) PAGE FPMUL, 0 /FLOATING MULTIPLY ROUTINE TAD WORD1 /COMPUTE NEW EXPONENT TAD OP1 DCA OP1 TAD WORD2 /SAVE AC MANTISSA DCA TW2 TAD WORD3 DCA TW3 TAD (-30 /SET ITERATION COUNTER DCA ITRCNT DCA WORD2 /ZERO FAC MANTISSA DCA WORD3 DCA ACO MULLUP, JMS I (AR1 /SHIFT FAC RIGHT ONE TAD TW2 /SHIFT MULTIPLIER RIGHT CLL RAR DCA TW2 TAD TW3 RAR DCA TW3 SZL JMS OADD /ADD IF LINK IS ONE ISZ ITRCNT /BUMP COUNT JMP MULLUP /LOOP TAD OP1 /PUT IN CORRECT EXPONENT DCA WORD1 JMS ANORM /NORMALIZE THE RESULT JMP I FPMUL D2, TW2, 0 D3, TW3, 0 NFCNT, ANORM, 0 /NORMALIZE FAC TAD WORD2 /IS MANTISSA 0 ? SNA TAD WORD3 SNA TAD ACO SNA CLA JMP ZEXP /YES, ZERO EXPONENT NORMLP, CLA CLL CML RTR /IS HIGH ORDER MANTISSA = 6000 TAD WORD2 SZA JMP NO6000 /NO, SKIP THIS CRAP TAD WORD3 /YES, IS THE REST 0 ? SNA TAD ACO SZA CLA /SKIP IF 600000 ... 0000 NO6000, SPA CLA JMP I ANORM /NORM IS DONE WHEN BITS DIFFER JMS I (AL1 /SHIFT LEFT ONE CLA CMA /DECREMENT EXPONENT TAD WORD1 DCA WORD1 JMP NORMLP /LOOP ZEXP, DCA WORD1 JMP I ANORM NEGFAC, 0 /NEGATE FAC TAD (ACO /GET POINTER TO OPERAND DCA NFPTR CLL CMA RTL /THREE WORD NEGATE DCA NFCNT CLL NFLOOP, RAL TAD I NFPTR /GET NEXT WORD CLL CML CIA DCA I NFPTR /RESTORE AFTER COMPLEMENTING CML CLA CMA /LINK GETS COMPLEMENTED ONCE HERE TAD NFPTR /AND ONCE AGAIN HERE DCA NFPTR /RESTORE DECREMENTED POINTER ISZ NFCNT JMP NFLOOP JMP I NEGFAC NFPTR, 0 FPDIV, 0 JMS I (AR1 /UNNORMALIZE AC BY ONE TAD OP1 /COMPUTE FINAL EXPONENT CIA TAD WORD1 DCA OP1 /AND SAVE IT TAD (-30 /SET ITERATION COUNTER DCA ITRCNT TAD WORD2 RAL /INITIALIZE LINK FPDVLP, CLA RAR /COMPARE SIGNS TAD OP2 SPA CLA JMP .+3 TAD (OPO-ACO/NEGATE OPERAND JMS NEGFAC JMS OADD /ADD OPERAND AND FAC TAD D3 RAL DCA D3 TAD D2 RAL DCA D2 JMS I (AL1 /LEFT SHIFT FAC ONE ISZ ITRCNT /TEST ITERATION COUNT JMP FPDVLP TAD OP1 /PUT QUOTIENT INTO FAC DCA WORD1 TAD D2 DCA WORD2 TAD D3 DCA WORD3 DCA ACO JMS ANORM /NORMALIZE JMP I FPDIV OADD, 0 /ADD OPERAND TO FAC CLL TAD OPO TAD ACO DCA ACO RAL TAD OP3 TAD WORD3 DCA WORD3 RAL TAD OP2 TAD WORD2 DCA WORD2 JMP I OADD ITRCNT, 0 / NUMERIC CONVERSION ROUTINE (FINALE) PAGE SMLNUM, 0 /INPUT A NUMBER <= 4095 EXPLUP, DCA EXPON /ZERO THE EXPONENT JMS I QDIGIT /GET THE NEXT DIGIT JMP I SMLNUM /NUMBER DONE DCA OPO /SAVE THE DIGIT TAD EXPON /MULT BY 10 CLL RAL CLL RAL TAD EXPON CLL RAL TAD OPO /ADD IN DIGIT JMP EXPLUP /STORE BACK INTO EXPONENT AR1, 0 /SHIFT FAC RIGHT 1 BIT TAD WORD2 CLL RAR DCA WORD2 TAD WORD3 RAR DCA WORD3 TAD ACO RAR DCA ACO ISZ WORD1 JMP I AR1 JMP I AR1 AL1, 0 /SHIFT FAC LEFT ONE TAD ACO CLL RAL DCA ACO TAD WORD3 RAL DCA WORD3 TAD WORD2 RAL DCA WORD2 JMP I AL1 CHKSGN, 0 /CHECK FOR SIGN TAD (-55 /IS IT - ? SNA ISZ I CHKSGN /YES, SET SWITCH SZA TAD (55-53 /IS IT + ? SZA CLA JMS I QBACK1 /RETURN CHAR OTHERWISE JMP I CHKSGN / STRING LITERAL SCANNER STRING, 0 /LOOK FOR A STRING JMS I QCHECKC /LOOK FOR " M42, -42 JMP I STRING /NONE MEANS NO STRING ISZ STRING DCA WORD1 /ZERO CHAR COUNT TAD (WORD2 /SETUP POINTER DCA TEMP TAD (-STRLIM%2 /AND MAX SIZE DCA TEMP2 SLOOP, JMS GCS /GET HIGH ORDER CHAR JMP I STRING /END OF STRING CLL RTL RTL RTL DCA I TEMP /PUT INTO UPPER HALF OF WORD JMS GCS /GET LOWER CHAR JMP PUT40 /FILL LAST WORD WITH BLANK TAD I TEMP /COMBINE THEM DCA I TEMP ISZ TEMP /BUMP POINTER ISZ TEMP2 /TOO BIG YET ? JMP SLOOP /NO, LOOP JMS I QGETC /MAX SIZE STRING, MUST FIND " JMP STRGER /BAD STRING LITERAL TAD M42 SNA CLA JMP I STRING /OK STRGER, JMS I QERMSG /STRING ERROR 2123 JMP I STRING PUT40, TAD I TEMP /GET LAST WORD TAD (40 /PUT BLANK IN LOW CHAR DCA I TEMP /STORE NEW WORD JMP I STRING /RETURN GCS, 0 /GET A CHAR FOR STRING JMS I QGETCWB /GET A CHAR (INCLUDE BLANKS) JMP STRGER /BAD TAD M42 /IS IT " SZA JMP NOTQOT /NO JMS I QGETCWB /IS IT "" JMP I GCS /NO, THAT WAS IT TAD M42 /LOOK FOR SECOND " SNA CLA JMP NOTQOT /"" BECOMES " JMS I QBACK1 /PUT IT BACK JMP I GCS /LITERAL IS DONE NOTQOT, TAD (42 /RECREATE CHAR AND (77 /ELIMINATE EXTRA BITS ISZ WORD1 /BUMP STRING COUNT ISZ GCS /FIX RETURN JMP I GCS MODSET, 0 /SET INTERPRETER MODE TAD MODE /SUM OF DESIRED AND CURRENT SMA CLA JMP I MODSET /THEY WERE THE SAME TAD MODE /OTHERWISE SWITCH MODES SZA CLA TAD (NMODE-SMODE TAD (SMODE /ENTER NMODE OR MAYBE SMODE JMS I QOUTWRD CLL CML RAR TAD MODE /CHANGE THE SWITCH DCA MODE JMP I MODSET /AND RETURN XIDIV, FIDIV;AIDIV WPNT, -120;-116;-124;-50;0 / VARIABLE OR FUNCTION REFERENCE SCANNER PAGE GETNAM, 0 /LOOK FOR VARIABLE OR FUNCT REFNCE DCA TYPE /ZERO TYPE JMS I QLETTER /MUST START WITH LETTER JMP I GETNAM /NO NAME DCA NAME1 JMS I QDIGIT /<LETTER><DIGIT> ? JMP TRYFUN /NO, LOOK FOR FUN REF IAC /INCREMENT DIGIT LFDOLR, DCA NAME2 /STORE AS NAME2 JMS I QGETC /LOOK FOR $ (STRING) JMP GOTNAM+2/NOT THERE TAD (-44 SZA JMP NOSTRG /NO $ MEANS NO STRING CLL CML RAR /SET STRING BIT TAD TYPE DCA TYPE JMS I QGETC /LOOK FOR ( (ARRAY) JMP GOTNAM+2/NAME FINI TAD (-44 /PRIME THE CHAR NOSTRG, TAD (44-50 /LOOK FOR ( (ARRAY) SNA CLA CLL CML RTR /YES, SET ARRAY BIT SNA JMS I QBACK1 /NO, BACKUP 1 CHAR GOTNAM, TAD TYPE /MODIFY TYPE DCA TYPE ISZ GETNAM /BUMP RETURN JMP I GETNAM TRYFUN, JMS I QSAVECP /SAVE CHAR POSITION TAD NAME1 /MOVE FIRST CHAR OVER CLL RTL RTL RTL DCA NAME2 JMS I QLETTER /LOOK FOR SECOND LETTER JMP LFDOLR /NONE THERE, LOOK FOR $ TAD NAME2 /COMBINE WITH FIRST LETTER DCA NAME2 JMS I QLETTER /LOOK FOR THIRD LETTER JMP NOFNAM /NOT A FUNCTION NAME DCA NAME3 /PUT INTO NAME TAD NAME2 /IS IT A USER FUNCT ? TAD (-616 /FN SNA CLA JMP USRFUN /YES TAD (FUNS-1 /NO, CHECK VALIDITY OF NAME DCA X10 FUNSRC, TAD I X10 /GET NEXT FUN NAME SNA JMP NOFNAM /END OF LIST, INVALID NAME TAD NAME2 /COMPARE FIRST 2 CHARS SZA CLA JMP NOMATC /THEY DON'T MATCH TAD I X10 /COMPARE 3RD CHAR TAD NAME3 SZA CLA JMP NOMATC+1/DON'T MATCH TAD I X10 /GET FUNCTION CODE FUNOK, DCA SYMBOL /SAVE IT AS SYMBOL VALU TAD (1000 /SET FUNCTION BIT DCA TYPE JMP LFDOLR /LOOK FOR Q$] Q(] NOMATC, ISZ X10 /SKIP THIRD CHAR ISZ X10 /SKIP FUNCTION NUMBER JMP FUNSRC /KEEP LOOKING NOFNAM, JMS I QRESTCP /RESTORE CHAR POS JMP LFDOLR /LOOK FOR Q$] Q(] USRFUN, TAD NAME3 /GENERATE FUN NUMBER JMP FUNOK / ERROR MESSAGE REPORTER ERMSG, 0 /PRINT ERROR MESSAGE CLA CDF TAD I ERMSG /GET CODE CLL RTR /PRINT FIRST CHAR RTR RTR JMS TTY TAD I ERMSG /PRINT SECOND CHAR JMS TTY ISZ ERMSG /FIX RETURN ADDR TAD SPACE /PRINT SPACE JMS TTY DCA TTY /USE TTY AS A SWITCH TAD LINEH /PRINT HIGH ORDER JMS PSN TAD LINEL /THEN LOW ORDER JMS PSN /(LINE NUMBER NATCH !) TAD (215 /PRINT CARRIAGE RETURN JMS TTX TAD (212 /PRINT LINE FEED JMS TTX JMP I ERMSG /RETURN PSN, 0 /PRINT 3 DIGITS DECIMAL DCA WORD2 CLL CMA RTL /-3 DCA TEMP PRNTSN, TAD WORD2 /GET NEXT DIGIT CLL RTL /INTO THE LOW ORDER RTL /THREE BITS AND THE LINK DCA WORD2 /SAVE SHIFTED NUMBER TAD WORD2 /NOW DO LAST SHIFT RAL AND (17 /ONLY FOUR BITS SPACE, SZA JMP NOZERO /NOT A ZERO TAD TTY /ANY DIGITS YET ? SNA CLA JMP LEAD0 /NO, ITS A LEADING ZERO NOZERO, TAD (60 /MAKE IT ASCII JMS TTY /PRINT DIGIT LEAD0, ISZ TEMP /BUMP COUNT JMP PRNTSN /MORE DIGIT(S) JMP I PSN XMUL, FMPY;AFMPY / EXPONENT TABLE PAGE PETABL, 0004;2400;0000;0000 0007;3100;0000;0000 0016;2342;0000;0000 0033;2765;7020;0000 0066;2160;6744;6770 0153;2356;1326;6501 0325;3023;6017;5120 0652;2235;6443;7114 1523;2523;7565;7735 3245;3430;6320;2565 / OPERATOR TABLE OPR8RS, PLUS;-53 MINUS;-55 STAR;-52 SLASH;-57 UPAROW;-136 AMPSND;-46 0 SASIGN, 4000;XSTOR ASSIGN, 0;XSTOR / FUNCTION NAME TABLE (INTERNAL FUNCTIONS) FUNS, -0102;-23;FUNC3 -0123;-03;FUNC2 -0124;-16;FUNC1 -0310;-22;FUNC2+20 -0317;-23;FUNC1+20 -0401;-24;FUNC2+40 -0530;-20;FUNC1+40 -1116;-24;FUNC1+100 -1405;-16;FUNC2+60 -1417;-07;FUNC1+120 -2017;-23;FUNC2+100 -2216;-04;FUNC1+200 -2305;-07;FUNC2+120 -2307;-16;FUNC1+140 -2311;-16;FUNC1+160 -2321;-22;FUNC1+220 -2324;-22;FUNC2+140 -2601;-14;FUNC2+160 -2422;-03;FUNC2+220 ENDFNS, 0;0;FUNC4 /SPACE FOR NEW FUNCTIONS 0;0;FUNC4+20 0;0;FUNC4+40 0;0;FUNC4+60 0;0;FUNC4+100 0;0;FUNC4+120 0;0;FUNC4+140 0;0;FUNC4+160 0;0;FUNC4+200 0;0;FUNC4+220 0;0;FUNC4+240 0;0;FUNC4+260 0;0;FUNC4+300 0;0;FUNC4+320 0;0;FUNC4+340 0;0;FUNC4+360 /SIXTEEN OF THEM 0 / KEYWORD LIST KEYWRD, -114;-105;-124;LET -111;-106;-105;-116;-104;IFEND -111;-106;IF -106;-117;-122;FOR -116;-105;-130;-124;NEXTX WGOTO, -107;-117 WTO, -124;-117;GOTO -107;-117;-123;-125;-102;GOSUB -111;-116;-120;-125;-124;INPUT -120;-122;-111;-116;-124;PRINT -104;-111;-115;DIM -104;-101;-124;-101;DATA -104;-105;-106;DEF -106;-111;-114;-105;FILE -122;-105;-101;-104;READX -122;-105;-115;REMARK -122;-105;-123;-124;-117;-122;-105;RESTOR -122;-105;-124;-125;-122;-116;RETURN -123;-124;-117;-120;STOPX -122;-101;-116;-104;-117;-115;-111;-132;-105;RANDOM -103;-114;-117;-123;-105;CLOSE -103;-110;-101;-111;-116;CHAIN -125;-104;-105;-106;UDEF -125;-123;-105;USEX -105;-116;-104;END 0 / OS-8 OUTPUT ROUTINE OWTEMP, 0 OUPTR, OUBUF OCOUNT, -401 OUTWRD, 0 /OUTPUT ROUTINE DCA OWTEMP /SAVE WORD ISZ LOCTRL /INCREMENT PSEUDO CODE SKP /LOCATION COUNTER ISZ LOCTRH /BOTH HALVES NOP /IT'LL NEVER HAPPEN ISZ OCOUNT /TEST FOR BUFFER FULL JMP NOWRIT /STILL SOME ROOM JMS OUDUMP /DUMP THE BUFFER TAD OUBLOK-1/RESET BUFFER PARAMETERS DCA OUPTR TAD (-400 DCA OCOUNT NOWRIT, TAD OWTEMP /PUT WORD CDF 10 DCA I OUPTR /INTO BUFFER CDF ISZ OUPTR /MOVE POINTER JMP I OUTWRD OUDUMP, 0 /DUMP OUT BUFFER JMS I (7607 /CALL OUTPUT HANDLER 4210 OUBUF OUBLOK, 0 JMP OUERR ISZ OUBLOK /INCREMENT BLOCK NUMBER ISZ OUSIZE /CHECK FOR HOLE FULL JMP I OUDUMP OUERR, JMS I QERMSG /OUTPUT FILE ERROR 1706 JMP I XABORT /ABORT COMPILATION ODEVH, 0 OUSIZE, 0 AMPRTN, JMS LOD1ST /LOAD OP1$ AMPSND+2 /CONC OP2$ SCRTN, JMS LOD1ST /LOAD OP1$ SCOMPR+1 /COMP OP2$ LOD1ST, 0 /HANDLE ONE WAY INSTRUCTIONS JMS I QSAVAC /STORE 2ND ARG IF IN SAC -1 CLA CMA /GET TYPE OF 2ND ARG TAD OSTACK DCA TEMP CLL CML RTR /IS IT SUBSCRIPTED ? AND I TEMP SNA CLA JMP SKIP2 /NO, ENTRY IS ONLY 2 WORDS TAD I TEMP /GET NUMBER OF DIMS AND SCOMPR /LITERAL 3 CLL RAL /DOUBLE IT CIA SKIP2, TAD (-2 /FIND SIZE OF 2ND ARG DCA OP2SIZ /AND SAVE IT TAD OSTACK /BACK UP STACK TAD OP2SIZ DCA OSTACK TAD OSTACK /AND SAVE THIS ADDR DCA X12 JMS I QLOAD /LOAD ARG 1 CLL CML RAR /GET TYPE BIT AND TYPE1 /PUT BACK ARG1 TAD Q400 DCA I OSTACK DCA I OSTACK TAD I X12 /PUT BACK ARG 2 DCA I OSTACK ISZ OP2SIZ JMP .-3 TAD I LOD1ST /GET OPERATOR FINISH JMP OUTOPR+1/GO FINISH CODE OP2SIZ, 0 /SACRED COUNT WORD CHECKC, 0 /CHAR CHECKER JMS I QGETC /GET A CHARACTER JMP .+6 /FAILED TAD I CHECKC /COMPARE SNA ISZ CHECKC /MATCHES, SKIP TWO SZA CLA JMS I QBACK1 /NO MATCH, REPLACE ISZ CHECKC /ALWAYS SKIP AT LEAST 1 JMP I CHECKC SCOMPR, 3;SCRTN-3;4000;XSCOMP;XSCOMP / OS-8 FILE INPUT ROUTINE PAGE ICHAR, 0 /READ CHAR FROM INPUT FILE ISZ INJMP /BUMP THREE WAY UNPACK SWITCH ISZ INCHCT INJMPP, JMP INJMP TAD INEOF /LAST READ YEILD END OF FILE ? SZA CLA JMP ENDFIL /YES INGBUF, TAD INCTR /BUMP RECORD COUNTER CLL IAC SNL DCA INCTR /RESTORE IF IT HASN'T OVERFLOWED SZL ISZ INEOF /SET END OF FILE SWITCH JMS I INHNDL /DO THE READ 0200 /ONE BLOCK TO FIELD 0 INBUFP, INBUF INREC, 0 JMP INERR /HANDLER ERROR INBREC, ISZ INREC /BUMP RECORD NUMBER TAD (-601 /SET CHAR COUNT DCA INCHCT TAD INJMPP /RESET THREE WAY JUMP SWITCH DCA INJMP TAD INBUFP /RESET BUFFER POINTER DCA INPTR JMP ICHAR+1 /GO AGAIN INERR, SMA CLA JMP INBREC ENDFIL, JMS I QERMSG /INPUT FILE ERROR 1505 ABORT, TAD (4207 /RESTORE ^C LOCZTIONS DCA 7600 TAD (6213 DCA 7605 CDF 10 TAD INFO /GET START OF BASIC.SV CDF SNA JMP 7605 /T'WERE RUNNED DCA EDTBLK /SAVE MAGICAL BLOCK NUMBER JMS 7607 /USE SYS HANDLER EDTSIZ /TO READ IN THIS MUCH 0 /INTO ZERO EDTBLK, 0 /FROM HERE HLT /HALT IF BAD READ JMP EDTBGN /GO RESTART EDITOR INJMP, HLT /3 WAY CHAR UNPACK JUMP JMP ICHAR1 JMP ICHAR2 ICHAR3, TAD INJMPP /RESET JUMP SWITCH DCA INJMP TAD I INPTR AND (7400 /COMBINE THE HIGH ORDER BITS CLL RTR /OF THE TWO WORDS RTR TAD INTMP /TO FORM THE THIRD CHAR RTR RTR ISZ INPTR /BUMP WORD POINTER JMP ICHAR1+1/DO SOME COMMON STUFF ICHAR2, TAD I INPTR /SAVE THE HIGH ORDER BITS AND (7400 DCA INTMP /FOR THE THIRD CHAR ISZ INPTR /GO TO THE SECOND WORD ICHAR1, TAD I INPTR /GET THE LOW 7 BITS AND (177 /AND I MEAN ONLY 7 !! SNA /IGNOR LEADER-TRAILER JMP ICHAR+1 TAD (-134 /CHECK FOR \ (STMT SEPARATOR) SNA JMP I ICHAR /TREAT LIKE CR TAD (134-32 /IS IT ^Z (END OF FILE) SNA JMP ENDFIL /YES, ITS END OF FILE TAD (32-12 SNA JMP ICHAR+1 /IGNORE LINE FEEDS IAC /TABS -> BLANKS SNA TAD (40-11 TAD (11-15 SNA JMP I ICHAR /RETURN ON CARRIAGE RETURN IAC SNA JMP ICHAR+1 /IGNORE FORM FEEDS TAD (14 /FIX CHAR ISZ ICHAR JMP I ICHAR /RETURN TO THE CALLING WORLD INTMP, 0 INEOF, 0 INCHCT, -1 INHNDL, 0 /ENTRY ADDR GOES HERE INCTR, 0 INPTR, 0 CHKWD, 0 /WORD CHECKER TAD I CHKWD /GET POINTER ISZ CHKWD DCA CWTEMP /SAVE POINTER WDLOOP, TAD I CWTEMP /GET NEXT CHAR SMA ISZ CHKWD /IF NON NEG, FIX RETURN SPA CLA JMS I QGETC /GET CHAR JMP I CHKWD /RETURN TAD I CWTEMP /COMPARE ISZ CWTEMP /INCR POINTER SNA CLA JMP WDLOOP /MORE JMP I CHKWD /FAILED CWTEMP, 0 / INITIALIZATION CODE *LINE START, JMP RUNNED /DO LOOKUPS, AND FIND TEMPFILE CHAINED,CDF 10 TAD I (7644 /WAS IT A CHAIN FROM BRTS ? CDF AND (100 SNA CLA JMP CHEDIT /NO, FROM THE EDITOR CIF 10 /CHAIN FROM BRTS, RESET JMS I (200 /TO FORGET DSK: HANDLER 13 JMP STRT3 /NOW GO OPEN TEMP FILE CHEDIT, TAD (INFO+7 /PICK UP SOME STUFF DCA X10 CDF 10 /FROM THE INFO BLOCK TAD I X10 /START OF TEMP FILE SNA JMP I (RUNNED+4 /MUST BE CHAIN FROM CCL DCA BLOCK TAD I X10 /SIZE OF HOLE CDF DCA OUSIZE TAD BLOCK DCA OUBLOK CDF 10 TAD I X10 /ENTRY ADDR OF HANDLER CDF DCA INHNDL JMP STRT2 GETDEV, CDF 10 TAD 7617 /GET DEVICE NUM FOR INPUT FILE CDF CIF 10 JMS I (200 /GO FETCH THE DEVICE 1 INDEVH+1 /2 PAGE HANDLER IS OK JMP NG /ERROR TAD .-2 /GET HANDLER ADDRESS DCA INHNDL /SAVE IT CIF 10 JMS I (200 /RESET SYSTEM TABLES 13 /DELETING TENTATIVE FILES STRT2, CDF 10 TAD 7617 /SET UP INPUT FILE PARAMS CDF AND (7760 /GET SIZE TAD (17 CLL CML RTR RTR DCA INCTR CDF 10 TAD 7620 /GET BLOCK NUMBER CDF DCA INREC CDF 10 TAD INFO+3 /GET START OF BRTS.SV (+1) DCA BRTS TAD INFO /GET START OF BASIC.SV (+1) DCA ABORTX /BOTH FOR BLOAD TAD INFO+2 /GET START OF BLOAD.SV CDF DCA LDRBLK /FOR CHAIN TO BLOAD TLS /SET TTY FLAG ISZ WASTE JMP .-1 ISZ TIME JMP .-1 INITST, TAD (VARST-1/INITIALIZE ST AREA DCA X12 TAD (-436-436-436 DCA X11 /SIZE OF NUM AND STRING TABLES CDF 10 CLL CML RAR /SET TO 4000 DCA I X12 ISZ X11 JMP .-3 TAD (-440 /NOW ARRAY TABLES DCA X11 /AND BUCKETS DCA I X12 ISZ X11 /SET THEM TO ZERO JMP .-2 CDF TAD JABORT /MODIFY ^C LOCATIONS DCA 7600 TAD JABORT DCA 7605 JMP CORE /GET CORE SIZE NG, TLS JMS I QERMSG /SUPER ERROR 2331 TSF JMP .-1 JABORT, JMP I XABORT /ABORT COMPILATION WASTE, 0 TIME, 200 *INBUF CORE, TAD 7777 /MODIFIED CORE SIZE ROUTINE FROM AND (70 SNA JMP COR0 CLL RAR RTR IAC DCA CORSIZ JMP COREX /OS8 SOFTWARE SUPPORT MANUAL 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 DCA HIFLD TAD HIFLD CIA DCA NFLDS CMA /HOW MANY FIELDS ? TAD HIFLD /MUST THIS BASIC USE ? SZA CLA /(SOUNDS LIKE A LINE BY DYLAN) JMP GENER TAD (PATCH1+3&177+5200 DCA PATCH1 /ONLY 8K, DON'T USE CDF'S TAD (PATCH2+11&177+5200 DCA PATCH2 TAD (PATCH3+4&177+5200 DCA PATCH3 TAD (PATCH4+3&177+5200 DCA PATCH4 TAD (7000 DCA PATCH5 GENER, JMS GENTMP /GENERATE TEMP 0 JMS GENTMP /GENERATE TEMP 1 JMS GENTMP /GENERATE TEMP 2 CLA IAC /GENERATE STRING TEMP 0 JMS GENTMP CLA IAC DCA WORD1 /GENERATE LITERAL 1.0 CLL CML RTR DCA WORD2 JMS I QLUKUP2 /ENTER INTO ST LITRL -3 JMS NEWVAR TAD (FNINIT /SET UP FUNCTIONS DCA FDPTR FDLOOP, TAD (WORD1-1 DCA X12 TAD I FDPTR /GET FIRST WORD ISZ FDPTR SNA JMP I QREMARK /DONE, START COMPILER DCA I X12 /SAVE IN WORD1 CLL CMA RTL /GET LOOKUP COUNT TAD I FDPTR DCA FUNSIZ TAD FUNSIZ /GET SIZE OF MOVE IAC DCA TEMP TAD I FDPTR /GET A WORD ISZ FDPTR DCA I X12 /PUT INTO WORDN ISZ TEMP JMP .-4 JMS I QLUKUP2 /ENTER INTO S.T. FUNCTN FUNSIZ, 0 JMP FDLOOP /LOOP FDPTR, 0 CORLOC, CORX CORV, 1400 CORSIZ, 1 NAMLST, BCOMPN /SAVE FILE NAME-POINTER LIST BLOADN BRTSN BAFN BSFN BFFN 0 PAGE FNINIT, FUNC3;-1;2000;0 /ABS FUNC1;-1;2000;0 /ATN FUNC2;-1;6000;0 /ASC FUNC1+20;-1;2000;0 /COS FUNC2+20;-1;2000;4000 /CHR FUNC1+40;-1;2000;0 /EXP FUNC2+40;-1;2000;4000 /DAT FUNC1+220;-1;2000;0 /SQR FUNC1+60;-2;0;2000;0 /EXP2 FUNC2+60;-1;6000;0 /LEN FUNC1+100;-1;2000;0 /INT FUNC2+100;-3;2000;4000;6000;0 /POS FUNC1+120;-1;2000;0 /LOG FUNC2+120;-3;0;2000;6000;4000 /SEG FUNC1+140;-1;2000;0 /SGN FUNC2+140;-1;2000;4000 /STR FUNC1+160;-1;2000;0 /SIN FUNC2+160;-1;6000;0 /VAL FUNC1+200;-1;2000;0 /RND FUNC2+220;-1;2000;0 /TRC 0 BASICN, FILENAME BASIC.SV /FILE NAMES BCOMPN, FILENAME BCOMP.SV /FOR LOOKUPS BLOADN, FILENAME BLOAD.SV BRTSN, FILENAME BRTS.SV BAFN, FILENAME BASIC.AF BSFN, FILENAME BASIC.SF BFFN, FILENAME BASIC.FF BUFN, FILENAME BASIC.UF TMPFIL, FILENAME BASIC.TM $ |
Added src/os8/uni/LANGUAGE/BASIC/BLOAD.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 | /1 OS8 BASIC LOADER, V5B / / / / / / // / / / / /COPYRIGHT (C) 1972, 1973, 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. / / / / / / /DEC-S8-LBASA-B-LA / /COPYRIGHT C 1972, 1973, 1974 / /DIGITAL EQUIPMENT CORPORATION /MAYNARD,MASSACHUSETTS 01754 / /AUGUST 19, 1972 / /HANK MAURER, 1972 /SHAWN SPILMAN, 1973 / / / / /ASSEMBLE AND LOAD AS FOLLOWS: / / .R PAL8 / *BLOAD,BLOAD<BLOAD.03 / .R ABSLDR / *BLOAD$ / .SA SYS BLOAD;7605 / /NOTE DIFFERENCES FROM VERSION 1 BY TRUNCATING /THE SOURCE AFTER TAG "IMAGE" AND THEN: / / .R SRCCOM / *LPT:<BLOAD.01,BLOAD.03 / * / /ALL CODE FOLLOWING TAG "IMAGE" IS NEW FOR VERSION 3 / VERSON= 5 /VERSION WORD LOCATED AT TAG "VERLOC" /LEFT HALF CONTAINS 60+VERSON /RIGHT HALF CONTAINS PATCH LEVEL (A=01) / /CORRECTIONS MADE FOR V4 J.K 1975 / .MADE SWAP ROUTINE A REAL SWAP / ./V FOR VERSION NUMBER / ./C SO NON-BASIC SAVE FILES CAN CHAIN TO BASIC SAVE FILES / .ADJUST JSW FOR /K / .CORRECTED CCB FOR /K / .CALCULATION OF DEFAULT CORE SIZE FOR PDP-8 / .TEST FOR BATCH RUNNIG / .CHANGE ORDER OF CISTRT SO A CHAIN CAN BE / CAN BE DONE FROM A .SV FILE WITH A / FILE STATEMENT / /JR 30-APR-77 UPDATE VERSION AND FIX ERROR IN MAKECI WHEN BATCH NOT / RUNNING /JR 9-MAY-78 ADD CODE TO HANDLE 2 PAGE SYSTEM HANDLERS (RL01) /OS8 BASIC COMPILER POST PROCESSOR /AUTO INDEX REGISTERS X10=10 X11=11 X13=13 STACK=15 /DUMMY SECTIONS FOR COMPILER/RUNTIME COMMUNICATIONS NOPUNCH /BRTS COMMUNICATIONS REGION *20 STCDF, 0 NSTADR, 0 NASTAD, 0 SSTADR, 0 SASTAD, 0 CODCDF, 0 CODBGN, 0 DATTOP, 0 DATPTR, 0 SWPINF, 0 /BCOMP COMMON REGION *40 VARCNT, 0 SVCNT, 0 ACNT, 0 SACNT, 0 LOCTRH, 0 LOCTRL, 0 BLOCK, 0 HIFLD, 0 BRTS, 0 DLSIZE, 0 ABORTX, 0 /PAGE 0 LOCATIONS USED BY LOADER FREEHI, 0 FREELO, 0 TEMP, 0 TEMP2, 0 TEMP3, 0 WORD1, 0 WORD2, 0 WORD3, 0 NCHARS, 0 SUBHI, 0 SUBLO, 0 CODSZ1, 0 CODSZ2, 0 LOCHI, 0 LOCLO, 0 CODB, 0 CODF, 0 ICOUNT, 0 OCOUNT, 0 AC1, 0 AC2, 0 AC3, 0 SC, 0 LINEH, 0 LINEL, 0 XLABEL, 0 CLRFLD, 0 CLREND, 0 RESADR, 0 /MORE COMPILER DEFINITIONS SVARST= 1036 ARAYST= 2132 SARYST= 2332 STEMPS= 2560 LITRL= STEMPS+2 SLITRL= LITRL+2 DATLST= SLITRL+2 /MISC DEFINES STACKA= 7120 /MAIN STACK OF COMPILER EDTBGN= 3212 /START OF EDITOR EDTSIZ= 2100 /SIZE OF EDITOR BRTBGN= 200 /START OF BRTS BRTSIZ= 3400 /SIZE OF BRTS DCB= 7760 JSW= 7746 /OS/8 JOB STATUS WORD BIPCCL= 7777 /OS/8 SOFTWARE CORE SIZE AND BATCH FLAGS WORD FSTOP1= 7 /ADDR OF BRTS EXIT ROUTINE ENPUNCH /END OF DUMMY SECTIONS AC7775= CLL STA RTL AC7776= CLL STA RAL /LOADER PROPER *400 LOADER, JMS I (IMAGE /CORE IMAGE FILE PATCH TAD (7577 /EXECUTION RESUMES HERE DCA FREELO CIA IAC DCA SWPINF /SET SWAPPER FLAG TO INDICATE 17600 IS IN FIELD 1 DCA LINEH /CLEAR LINE NUMBER DCA LINEL TAD STACK /ANY UNCLOSED FOR'S ? CIA TAD (STACKA-1 SNA CLA JMP .+3 /NO JMS I (ERMSG /YES 2506 CLA CMA TAD HIFLD /NO CDF'S IF ONLY 8K SZA CLA JMP NOPATCH /NO PATCHES TAD (PATLST-1 DCA X10 PATLUP, TAD I X10 SNA JMP I (STSTUF DCA TEMP TAD (SKP /ALWAYS TWO WORDS DCA I TEMP JMP PATLUP NOPATCH,AC7775 /TEST MAGIC LOCATION FOR A 3 TAD I (7612 SZA CLA /SKP IF 2 PAGE SYSTEM HANDLER GOTTD, JMP NOTD8E /NO TD/8E OR ROM TD/8E /PREV INSTR NOP'D OUT TO FORCE TD8E (IMAGE) TAD (7377 /TD8E SYS WASTES 400 WORDS DCA FREELO STL RAR /SET SWAP INFO (17600 OUT NOW) NOTD8E, DCA SWPINF JMS I (FREEF /GET CDF TO HIGHEST FIELD DCA SWPF1 /INTO 2 PLACES TAD SWPF1 DCA SWPF2 TAD SWPF2 /PASS NEW HANDLER FIELD BITS TO SWAPPER (2 PAGE HNDLR) JMS SWAP /MOVE OS8 OUT JMP I (STSTUF /DO SYMBOL TABLE STUFF SWAP, 0 /SWAP OS8 RESIDENT AND (70 /ISOLATE NEW FIELD BITS IN AC DCA AC2 /SAVE THEM CLL CML RAR /4000 AND SWPINF /IS IT A TD8E SYS ? SZA CLA JMP TD8ESYS /YES JMS SWPSUB /SWAP 17600 TO/FROM N7600 CDF 10 7600 JMP I SWAP TD8ESYS,JMS SWPSUB /SWAP 17600 TO/FROM N7400 CDF 10 7400 JMS SWPSUB /SWAP 27600 TO/FROM N7600 L6221, CDF 20 L7600, 7600 TDLIE, AC7775 /TEST FOR GENUINE 2 PAGE HANDLER TAD I (7612 SZA CLA JMP I SWAP /RETURN IF NO TAD (7635 /SET POINTER INTO HANDLER DCA AC1 PATLP, TAD I AC1 /RANGE CHECK WORD FOR CDF 20-70 TAD (-6300 CLL TAD (70 SNL CLA /SKP IF CDF N0 JMP NOPAT /ELSE SKP ADJUSTMENT TAD I AC1 /GET INSTRUCTION AND (7707 /CLEAR FIELD BITS TAD AC2 /INSERT NEW ONES DCA I AC1 /STORE BACK NOPAT, ISZ AC1 /BUMP PTR JMP PATLP /LOOP JMP I SWAP SWPSUB, 0 /SWAPPER TAD I SWPSUB /GET FIELD DCA SWP1 /TWICE TAD SWP1 DCA SWP2 /ONCE FOR EACH DIRECTION ISZ SWPSUB TAD I SWPSUB /GET HI FIELD ADDR DCA TEMP ISZ SWPSUB TAD L7600 /GET COUNT/POITER DCA TEMP2 SWP1, HLT TAD I TEMP2 /GET PART OF RESIDENT DCA TEMP3 SWPF1, JMP SWPRET /RETURN IF 8K ONLY TAD I TEMP SWP2, HLT DCA I TEMP2 TAD TEMP3 SWPF2, HLT DCA I TEMP /INTO HI FIELD ISZ TEMP /BUMP POINTER NOP /JR PROTECT AGAINST WRAP AROUND ISZ TEMP2 /AND PTR/CTR JMP SWP1 /LOOP SWPRET, CDF JMP I SWPSUB PAGE MAXSIZ= 120 /DEFINE MAXIMUM SIZE STRING NODATA, CDF JMS I (FREEF /SAVE FIELD CIA DCA CLRFLD /FOR ARRAY CLEARING TAD FREELO /SAVE THIS ADDR CIA DCA CLREND /FOR END OF ARRAY CLEAR ISZ FREELO /MAKE IT NEXT FREE + 1 TAD (SVARST-1 DCA X10 /ALLOCATE STRING VARS TAD (-436 DCA TEMP ASVLUP, CDF 10 TAD I X10 /LOOK FOR DEFINED STRING VAR DCA TEMP2 /SAVE SYMBOL NUMBER TAD I X10 /GET SIZE SPA TAD (4010 /IF UNDEF USE 16 CHARS DCA TEMP3 TAD TEMP2 /IS IT DEFINED ? CDF SMA CLA JMS SVSTOR /YES, CREATE ENTRY ISZ TEMP /BUMP COUNT JMP ASVLUP /LOOP CDF 10 /ALLOCATE STRING TEMPS P6, TAD I (STEMPS+1 DCA STEMPF /INIT FIELD TAD I (STEMPS /AND POINTER SKP STMLUP, TAD TEMP /LOOK AT NEXT ENTRY SNA JMP I (ALLOCA /DONE GO ALLOCATE ARRAYS TAD (-1 DCA X10 /GET POINTER STEMPF, CDF 10 TAD I X10 /GET ADDR OF NEXT ENTRY DCA TEMP /SAVE IT P7, TAD I X10 /AND ITS FIELD DCA STEMPF ISZ X10 /SKIP TEMP NUMBER TAD I X10 /GET SYM NUMBER DCA TEMP2 CDF TAD (MAXSIZ /GIVE IT MAX SIZE DCA TEMP3 JMS SVSTOR /ALOOCATE IT JMP STMLUP /LOOP SVSTOR, 0 /MAKE ST ENTRY FOR STRING VAR TAD TEMP2 /FIND ST ADDR CLL RAL TAD TEMP2 TAD SSTADR DCA X11 TAD TEMP3 /NUMBER OF CHARS TAD (3 CLL RAR DCA SUBLO /NUMBER OF WORDS DCA SUBHI JMS SUB /FREEHI,LO=FREEHI,LO-SUBHI,LO TAD FREELO /SAVE ADDR DCA I X11 JMS I (FREEF /AND FIELD DCA I X11 TAD TEMP3 /PUT IN MAX LENGTH CIA /(NEGATIVE) DCA I X11 JMP I SVSTOR PSN, 0 /PRINT 3 DIGITS DECIMAL DCA WORD2 CLL CMA RTL /-3 DCA XLABEL PRNTSN, TAD WORD2 /GET NEXT DIGIT CLL RTL /INTO THE LOW ORDER RTL /THREE BITS AND THE LINK DCA WORD2 /SAVE SHIFTED NUMBER TAD WORD2 /NOW DO LAST SHIFT RAL AND (17 /ONLY FOUR BITS SPACE, SZA JMP NOZERO /NOT A ZERO TAD I (TTY /ANY DIGITS YET ? SNA CLA JMP LEAD0 /NO, ITS A LEADING ZERO NOZERO, TAD (60 /MAKE IT ASCII JMS I (TTY /PRINT DIGIT LEAD0, ISZ XLABEL /BUMP COUNT JMP PRNTSN /MORE DIGIT(S) JMP I PSN SUB, 0 /DOUBLE SUBTRACT TAD SUBLO /SUBTRACT LOWER CLL CML CIA TAD FREELO DCA FREELO RAL /GET BORROW TAD SUBHI CIA TAD FREEHI /SUBTRACT UPPER DCA FREEHI /SAVE NEW UPPER TAD FREEHI /DID IT FIT ? SMA SZA CLA JMP I SUB /YUP TOOBIG, DCA LINEH /CLEAR LINE NUMBER DCA LINEL JMS I (ERMSG /WRITE MESSAGE 2402 /TOO BIG JMP I (ABORTL /ABORT RUN TTX, 0 /PRINT CHAR ON TTY TSF /WAIT FOR PREVIOUS CHAR JMP .-1 TLS /PRINT THIS ONE CLA JMP I TTX PAGE / CAUTION !!! / THIS PAGE AND THE NEXT ONE ARE / OVERLAYED BY THE INPUT BUFFER / AS SOON AS THE ROUTINE "INWORD" / IS CALLED. THIS FIRST HAPPENS / AFTER THE TAG "RELCIT" . STSTUF, TAD FREELO /SAVE START OF RESIDENT -1 CIA /NEGATED DCA RESADR /USED TO COMPUTE AMOUNT OF MOVE TAD VARCNT /GET NUMBER OF TAD (401 /VARIABLES CIA DCA VARCNT TAD SVCNT /STRING VARIABLES TAD (401 CIA DCA SVCNT TAD ACNT /ARRAYS TAD (41 CIA DCA ACNT TAD SACNT /AND STRING ARRAYS TAD (41 CIA DCA SACNT JMS I (FREEF /SAVE HIGH FIELD DCA STCDF TAD VARCNT /SUBTRACT SPACE FOR CLL RAL /SCALAR TABLE (3 WORDS A PIECE) TAD VARCNT TAD FREELO /DON'T BOTHER WITH A DCA FREELO /DOUBLE PREC. SUBTRACTION TAD FREELO /SAVE START OF SCALAR TABLE IAC /FOR INTERPRETER DCA NSTADR TAD FREELO /CLEAR ALL VARIABLES DCA X10 /IN THE DCA I X10 /SCALAR TABLE DCA I X10 DCA I X10 ISZ VARCNT JMP .-4 /JUST TO BE NICE CDF 10 /PREPARE TO MOVE P1, TAD I (LITRL+1/THE NUMERIC LITERALS DCA LFLD /INTO THE SCALAR TABLE TAD I (LITRL CDF SKP NLLOOP, TAD TEMP /ADDR OF NEXT LITERAL SNA JMP NONL /NO MORE NUMERIC LITERALS TAD (-1 DCA X10 LFLD, CDF 10 TAD I X10 /GET ADDR OF NEXT LITERAL DCA TEMP P2, TAD I X10 /ALSO ITS FIELD DCA LFLD TAD I X10 /NOW ITS VALUE DCA WORD1 TAD I X10 DCA WORD2 TAD I X10 DCA WORD3 TAD I X10 /NOW THE SYMBOL NUMBER DCA TEMP2 TAD TEMP2 /TIMES THREE CLL RAL TAD TEMP2 TAD FREELO /PLUS START DCA X11 /GIVES STORE ADDR CDF TAD WORD1 /NOW PUT LITERAL INTO TABLE DCA I X11 TAD WORD2 DCA I X11 TAD WORD3 DCA I X11 JMP NLLOOP /DO NEXT LITERAL NONL, TAD ACNT /ALLOCATE ARRAY TABLE CLL RAL CLL RAL /FOUR WORDS PER TAD FREELO /SUBTRACT FROM LOWER END DCA FREELO TAD FREELO /SAVE THIS DCA NASTAD /START OF ARRAY TABLE TAD SVCNT /ALLOCATE CLL RAL /STRING VAR TABLE TAD SVCNT TAD FREELO /3 WORDS EACH DCA FREELO TAD FREELO /AND SAVE IT FOR THE INT DCA SSTADR TAD SACNT /NOW SPACE FOR STRING CLL RAL /ARRAY CLL RAL TAD FREELO /TABLE DCA FREELO TAD FREELO /SAVE FOR INT DCA SASTAD CDF 10 /PREPARE TO MOVE P3, TAD I (SLITRL+1 DCA SLFLD /STRING LITERALS TAD I (SLITRL CDF SKP SLLOOP, TAD TEMP /IS NEXT LIT THERE ? SNA JMP I (NOSL /NO, END OF THE LINE TAD (-1 DCA X10 JMS SFLD /SET THE FIELD TAD I X10 /GET ADDR OF NEXT DCA TEMP P4, TAD I X10 /ALSO FIELD DCA TEMP2 TAD I X10 /THEN CHAR COUNT DCA NCHARS JMP I (SLIT2 /DO REST OF STRING LIT SFLD, 0 SLFLD, CDF 10 JMP I SFLD PAGE SLIT2, TAD NCHARS /COMPUTE WORD COUNT TAD (3 CLL RAR TAD X10 /TO GET ADDR OF SYMBOL NUMBER DCA TEMP3 TAD I TEMP3 CLL RAL /SYM NUMBER TIMES 3 TAD I TEMP3 TAD SSTADR /PLUS BASE DCA X11 /GIVES ST ADDR TAD NCHARS /ALLOCATE SPACE FOR IT IAC CLL CML CMA RAR DCA TEMP3 /(SAVE NUMBER OF WORDS) TAD TEMP3 CLL TAD FREELO DCA FREELO /BELOW THE SYMBOL TABLES SNL JMP TMSLIT /TOO MUCH STRING LITERALS TAD FREELO TAD (-END-10 SZL CLA JMP TMSLIT /DITTO TAD FREELO /STICK THE ADDR IAC CDF DCA I X11 /INTO THE ST ENTRY JMS I (FREEF /ALSO THE FIELD DCA I X11 TAD NCHARS /ALSO THE SIZE CIA DCA I X11 TAD FREELO /THIS IS WHERE IT GOES DCA X11 TAD NCHARS /PUT IN THE LENGTH TOO CIA /(NEGATIVE) JMP .+4 MOVSL, JMS I (SFLD TAD I X10 CDF DCA I X11 /MOVE THE LITERAL TEXT ISZ TEMP3 JMP MOVSL P5, TAD TEMP2 /PUT THE FIELD OF THE NEXT DCA I (SLFLD /ENTRY WHERE IT DOES THE MOST GOOD JMP I (SLLOOP /DO THE NEXT LITERAL NOSL, TAD FREELO /SAVE TOP OF DATA LIST DCA DATTOP TAD DATTOP /IF EMPTY MAKE TOP=BOTTOM DCA DATPTR TAD DLSIZE SNA /IS ANY DATA ? JMP I (NODATA /NO CLL TAD FREELO /GET START OF DATA DCA FREELO SNL JMP TMDATA /TOO MUCH DATA TAD FREELO TAD (-END-10 SZL CLA JMP TMDATA /DITTO TAD FREELO /SAVE IT DCA DATPTR TAD FREELO /USE X13 TO FILL LIST DCA X13 TAD (DATLST-1 DCA X10 CDF 10 DATLUP, TAD I X10 /ANY MORE DATA ELEMENTS ? SNA JMP I (NODATA DCA TEMP /SAVE ADDR P8, TAD I X10 /GET NEW FIELD DCA DATAF1 P9, TAD DATAF1 /TWICE DCA DATAF2 TAD TEMP /START WITH NEW ELEMENT DCA X10 DATAF1, CDF 10 TAD I TEMP /GET COUNT DCA TEMP DATMOV, TAD I X10 /GET NEXT WORD CDF DCA I X13 /MOVE INTO DATA AREA DATAF2, CDF 10 ISZ TEMP JMP DATMOV JMP DATLUP /DO NEXT ELEMENT TMDATA, DCA LINEL /ZERO LINE NUMBER DCA LINEH JMS I (ERMSG /PRINT ERROR MESSAGE 2404 JMP I (ABORTL TMSLIT, DCA LINEH /CLEAR THE LINE NUMBER DCA LINEL JMS I (ERMSG /PRINT MESSAGE 2423 JMP I (ABORTL PATLST, P1;P2;P3;P4;P5;P6;P7;P8;P9;0 PAGE ALLOCA, TAD ACNT /ANY ARRAYS ? SNA CLA JMP ALLOCS /NO TAD (ARAYST /ALLOCATE ARRAYS DCA X10 TAD NASTAD DCA X11 DOARAY, CDF 10 TAD I X10 /GET NEXT ARRAY DCA TEMP TAD I X10 /GET FIRST DIM SNA TAD (12 /USE 10 IF NONE IAC /ALLOCATE 0TH ELEMENT DCA TEMP2 TAD I X10 /GET SECOND DIM SNA TAD (12 IAC DCA TEMP3 TAD TEMP3 /GET READY TO SUBTRACT DCA SUBLO DCA SUBHI CDF CLL CML RTR AND TEMP /HOW MANY DIMS ? SNA CLA JMP ONLY1 /ONE TAD TEMP2 /PRODUCT OF DIMS JMS I (MUL12 JMP TIMES3 /MULT BY 3 ONLY1, DCA TEMP3 /ZERO SECOND DIMENSION TAD TEMP2 DCA SUBLO TIMES3, TAD (3 /MULT SIZE BY 3 JMS I (MUL12 JMS I (SUB /SUBTRACT FROM FREE TAD FREELO DCA I X11 /SAVE ADDR IN S.T. JMS I (FREEF DCA I X11 TAD TEMP2 /ALSO DIMS DCA I X11 TAD TEMP3 DCA I X11 ISZ X10 /SKIP SYMBOL NUMBER ISZ ACNT JMP DOARAY ALLOCS, TAD SACNT /ANY STRING ARRAYS SNA CLA JMP I (RELCIT /NO TAD (SARYST+1 DCA X10 /ALLOCATE STRING ARRAYS TAD SASTAD DCA X11 DOSARY, CDF 10 TAD I X10 SNA TAD (12 /USE 10 FOR DIM IAC DCA TEMP3 TAD I X10 /GET DIM SNA TAD (10 /USE 16 IF NO SIZE SPEC DCA TEMP2 TAD TEMP3 DCA SUBLO /PREPARE FOR MULT DCA SUBHI CDF TAD TEMP2 /GET NUM WORDS PER STRING TAD (3 CLL RAR JMS I (MUL12 /GET ARRAY SIZE JMS I (SUB /DO SUBTRACTION TAD FREELO /SAVE ADDR DCA I X11 JMS I (FREEF DCA I X11 TAD TEMP2 /AND STRING SIZE CIA /(SIZES ARE NEG) DCA I X11 TAD TEMP3 /AND NUMBER OF STRINGS DCA I X11 ISZ X10 /SKIP NEXT NAME ISZ X10 /AND NEXT SYM NUMBER ISZ SACNT JMP DOSARY JMP I (RELCIT INWORD, 0 /READ FROM CODE FILE ISZ ICOUNT /ANYTHING IN BUFFER JMP NOREAD /YASSUH! JMS I (7607 /READ NEXT BLOCK 200 1000 /NOTE: THIS OVERLAYS USED CODE INBLOK, 0 JMP I (IOERR ISZ INBLOK /BUMP BLOCK COUNTER TAD INBLOK-1/RESET BUFFER POINTER DCA INPTR TAD (-400 /AND COUNTER DCA ICOUNT NOREAD, TAD I INPTR /GET WORD ISZ INPTR /BUMP POINTER JMP I INWORD INPTR, 0 CIPAT, 0 /PATCH TO MAKECI TAD (1000 DCA I (JSW /CHANGE JSW COPT, DCA I (CISTRT+1 /& TAKE CARE OF /C JMP I CIPAT PAGE RELCIT, TAD LOCTRL /FIND START OF CODE CLL IAC DCA SUBLO /BY SUBTRACTING RAL TAD LOCTRH /AMOUNT FROM FREE DCA SUBHI JMS I (SUB TAD FREELO /THIS IS THE START OF THE CODE DCA CODBGN /MINUS ONE TAD FREEHI /THIS IS THE FIELD NUMBER DCA CODCDF TAD LOCTRL /SET UP PROG SIZE COUNT CLL CML CIA DCA CODSZ1 /LOWER COUNT RAL TAD LOCTRH CIA DCA CODSZ2 /UPPER COUNT TAD BLOCK /SET UP FOR READ AND WRITE DCA I (OUBLOK TAD BLOCK DCA I (INBLOK TAD (-401 DCA OCOUNT CLA CMA DCA ICOUNT RELOOP, JMS I (INWORD /GET A WORD OF CODE DCA TEMP TAD (3000 TAD TEMP /CHECK FOR OPCODE 5000 (GOTO) AND (7000 SZA CLA JMP NORELC /NO JUMP TAD TEMP /REMOVE FIELD BITS AND (340 CLL RTR TAD CDF0 DCA LBLFLD /FIELD OF LABEL ENTRY TAD TEMP /ZERO FIELD BITS AND (7437 DCA TEMP JMS I (INWORD /GET REST OF ADDR DCA TEMP2 JMS I (CHKLBL /CHECK FOR UNDEFINED LABEL LBLFLD, HLT TAD I TEMP2 AND (7 /GET ADDR TO BE RELOCATED DCA LOCHI ISZ TEMP2 TAD I TEMP2 CLL TAD CODBGN /ADD BASE ADDR CDF0, CDF DCA LOCLO /SAVE LOW PART OF JUMP RAL TAD CODCDF /GET HIGH PART TAD LOCHI CLL RTL /PUT IT INTO CORRECT PLACE RTL RAL TAD TEMP /PLUS INSTRUCTION JMS I (OUTWRD ISZ CODSZ1 /BUMP COUNTER SKP ISZ CODSZ2 /CAN'T BE LAST WORD TAD LOCLO /OUTPUT LOW ORDER ADDR SKP NORELC, TAD TEMP /JUST OUTPUT IT RELOUT, JMS I (OUTWRD ISZ CODSZ1 /DOUBLE WORD ISZ BUMP JMP RELOOP ISZ CODSZ2 JMP RELOOP JMP I (LOADIT /DONE RELOCATING, GO LOAD /PRINT ERROR MESSAGE ERMSG, 0 /PRINT ERROR MESSAGE CDF TAD I ERMSG /GET CODE CLL RTR /PRINT FIRST CHAR RTR RTR JMS TTY TAD I ERMSG /PRINT SECOND CHAR JMS TTY ISZ ERMSG /FIX RETURN ADDR TAD (240 /PRINT SPACE JMS TTY DCA TTY /USE TTY AS A SWITCH TAD LINEH /PRINT HIGH ORDER JMS I (PSN TAD LINEL /THEN LOW ORDER JMS I (PSN /(LINE NUMBER NATCH !) TAD (215 /PRINT CARRIAGE RETURN JMS I (TTX TAD (212 /PRINT LINE FEED JMS I (TTX JMP I ERMSG /RETURN TTY, 0 /CONVERT TO ASCII AND PRINT TAD (240 AND (77 TAD (240 JMS I (TTX /PRINT CHAR JMP I TTY /RETURN PAGE LOADIT, JMS I (OUDUMP /DUMP LAST BLOCK TAD LOCTRL /SET UP COUNTER CIA CLL CML DCA CODSZ1 RAL TAD LOCTRH CIA DCA CODSZ2 TAD CODBGN DCA TEMP /CODE BEGIN -1 TAD BLOCK /SET UP BLOCK NUMBER DCA I (INBLOK CLA CMA DCA ICOUNT TAD CODCDF /SET UP CODE CDF CLL RTL RAL TAD (6201 DCA CODCDF TAD CODCDF DCA CF LODLUP, ISZ TEMP /BUMP POINTER JMP NOFJMP /FIELD IS OK TAD CF /BUMP THE FIELD TAD (10 DCA CF NOFJMP, JMS I (INWORD /GET NEXT WORD CF, HLT DCA I TEMP /SAVE THE WORD CDFZER, CDF ISZ CODSZ1 /MORE CODE ? JMP LODLUP /YES ISZ CODSZ2 JMP LODLUP /YES TAD CF /GET THE FIELD DCA CLEARF /AND SAVE IT CLRLUP, TAD CLREND /IS THIS THE END OF CLEAR ? TAD TEMP SZA CLA JMP MORCLR /NO, KEEP GOING TAD CLRFLD /DO FIELDS MATCH ? TAD CLEARF SNA CLA JMP DONCLR /YES, ARRAYS ARE CLEARED MORCLR, ISZ TEMP /BUMP POINTER JMP CLEARF /DON'T BUMP FIELD TAD CLEARF /DO BUMP FIELD TAD (10 DCA CLEARF CLEARF, HLT DCA I TEMP /CLEAR THE WORD JMP CLRLUP /DO MORE DONCLR, TAD CLEARF /COPY THE FIELD DCA STFLDM TAD TEMP /GET THE COUNT TAD RESADR /OF HOW MUCH SYMBOL TABLE DCA TEMP2 /TO MOVE TAD TEMP /PUT IT INTO AUTO XR'S DCA X13 TAD X13 DCA X11 MOVSTL, CDF TAD I X11 /GET NEXT WORD OF ST STFLDM, HLT DCA I X13 /STORE IT ISZ TEMP2 JMP MOVSTL JMS MOVFIN /MOVE FINI PAGE INTO 7000-7177 JMP I (7000 /GO READ BRTS.SV CHKLBL, 0 /CHECK LABEL FOR UNDEF TAD I CHKLBL /GET FIELD DCA .+1 HLT TAD I TEMP2 /GET FIRST WORD OF LABEL SPA CLA JMP I CHKLBL /SIGN BIT IS DEFINED CLL CMA RAL /GET ADDR OF LINE NUM TAD TEMP2 DCA XLABEL TAD I XLABEL /GET HIGH ORDER LINE DCA LINEH ISZ XLABEL TAD I XLABEL /GET LOW ORDER DCA LINEL CDF JMS I (ERMSG /PRINT MESSAGE 2523 JMP I CHKLBL /RETURN FREEF, 0 /MAKE A CDF FROM FREEHI TAD FREEHI CLL RTL RAL TAD CDFZER JMP I FREEF ABORTL, JMS MOVFIN /PUT FINI PAGE INTO 7000-7177 /AND ABORT THE RUN JMP I (ABORT-FINI+7000 MOVFIN, 0 /FINI PAGE MOVER CDF TAD (FINI-1 /MOVE INT READING CODE DCA X10 TAD (6777 /INTO 7000 DCA X11 TAD (-200 DCA TEMP /PUT CORRECT COUNT HERE TAD I X10 DCA I X11 /MOVE CODE ISZ TEMP JMP .-3 JMP I MOVFIN PAGE FINI, TAD I XERMSG /ANY ERRORS ? SZA CLA JMP ABORT /YES, DON'T RUN IT TAD XINT /MOVE INT STUFF DCA FTEMP TAD M12 /10 KEY LOCATIONS DCA FCNT TAD XSAVE /INTO A SAFE PLACE DCA FTEMP2 TAD I FTEMP ISZ FTEMP DCA I FTEMP2 ISZ FTEMP2 ISZ FCNT JMP .-5 /MOVE LOOP TAD BRTS /READ IN BRTS DCA BRTSB JMS I X7607 BRTSIZ 0 BRTSB, 0 JMP IOERR TAD XSAVE DCA FTEMP TAD XINT /MOVE STUFF BACK DCA FTEMP2 TAD I FTEMP ISZ FTEMP DCA I FTEMP2 ISZ FTEMP2 ISZ M12 JMP .-5 TAD (JMP I FSTOP1 /PATCH ^C LOCATIONS DCA I (7600 TAD (JMP I FSTOP1 DCA I (7605 JMP I (BRTBGN /GO START BRTS M12, -12 XINT, 20 XERMSG, ERMSG X7607, 7607 XSAVE, 7001+XSAVE-FINI MUL12, 0 /MULTIPLY 12BITS AND 24 BITS DCA AC3 /SAVE 12 BIT THING DCA AC2 /CLEAR REST OF AC DCA AC1 TAD (-15 /ONLY TEST 12 BITS DCA SC JMP MULBGN MULLUP, SNL /WAS BIT ON ? JMP NOADD /NO, DON'T ADD TAD SUBLO /ADD TO HIGH ORDER 2/3'S OF AC TAD AC2 DCA AC2 CML RAL TAD SUBHI NOADD, TAD AC1 /SHIFT AC RIGHT CLL RAR DCA AC1 TAD AC2 RAR DCA AC2 MULBGN, TAD AC3 FTEMP, RAR FTEMP2, DCA AC3 FCNT, ISZ SC /BUMP SHIFT COUNTER JMP MULLUP TAD AC2 /ANSWER IS LOWER 2/3'S OF AC DCA SUBHI TAD AC3 DCA SUBLO JMP I MUL12 IOERR, DCA LINEL /ZERO LINE NUMBER JMS I XERMSG /PRINT MESSAGE 1117 ABORT, TAD (20 /PASS NORMAL FIELD BITS TO RESTORE ANY 2 PAGE SYS: JMS I (SWAP /SWAP OS8 BACK JMS I (200 /CHECK OUT W/ CI BUILDER TAD (4207 /RESTORE ^C LOCATIONS DCA I (7600 TAD (6213 DCA I (7605 TAD ABORTX /CALLED VIA CHAIN ?(FROM EDIT) SNA JMP I (7600 /NO, RETURN TO OS8 DCA EDTBLK /YES, SAVE EDITOR START JMS I X7607 /READ IN EDITOR EDTSIZ /THIS MUCH 0 OWTEMP, EDTBLK, 0 JMP I (7605 /ERROR JMP I (EDTBGN /GO START EDITOR OUTWRD, 0 /OUTPUT WORD TO TEMP FILE ISZ OCOUNT /ANY ROOM ? JMP NOWRIT /YES DCA OWTEMP /SAVE WORD JMS OUDUMP /WRITE BLOCK ISZ OUBLOK /BUMP BLOCK NUMBER TAD OUBLOK-1/RESET BUFFET POINTER DCA OUPTR TAD (-400 DCA OCOUNT /AND COUNT TAD OWTEMP /RESTORE AC NOWRIT, CDF 10 DCA I OUPTR /INTO BUFFER CDF ISZ OUPTR JMP I OUTWRD OUPTR, 0 OUDUMP, 0 /WRITE BLOCK JMS I X7607 /WRITE BLOCK 4210 0 OUBLOK, 0 JMP IOERR JMP I OUDUMP END=FINI+200 PAGE BLDCI=200 /PAGE INTO WHICH MAKECI GETS MOVED LOADBL=357 /LOC WHERE BCOMP LEAVES BLOAD BLOCK # IMAGE, 0 TAD I (LOADBL /COME HERE TO CREATE CORE IMAGE TAD (6 /ALREADY HAVE THIS MUCH DCA I (LDRBLK /INIT BLOAD OVRLY READER CDF 10 TAD I (7644 /TEST FOR /V CDF AND (4 SZA CLA JMS I (VERNUM CDF 10 TAD I (7643 /GET OPTION BITS CDF DCA TEMP TAD TEMP RTR SNL CLA /HAVE K OPTION? JMP LSTART /NO: START LOADER TAD TEMP RTL SZL CLA /HAVE B OPTION? DCA I (FLGRTS /YES: FLAG IT TAD TEMP /TEST FOR /C RTL SPA CLA JMP .+3 TAD (NOP DCA I (COPT CDF 10 TAD I (7646 /GET =N CDF AND (7 /WIPE ALT MODE SNA CLL CML RTL /DEFAULT=12K FOR NOW DCA TEMP CLL CMA TAD TEMP /MUST BE >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+6002 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/uni/LANGUAGE/BASIC/BRTS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 | /OS8 BASIC RUNTIME SYSTEM, V5C / / / / / / / / / / / /COPYRIGHT (C) 1972, 1973, 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. / / / / / / /AUGUST 19, 1972 / /R.G. BEAN, 1972 /SHAWN SPILMAN, 1973 / J.K.,1975 /JR 21-APR-77 ADDED EXTENDED DATE CODE, CLEANED UP LISTING /JR 26-APR-77 TIGHTENED UP STRING ROUTINES /JR 28-APR-77 ADD SOURCE FIX FOR SEVERAL KNOWN BUGS /JR 4-MAY-77 REWROTE FLOATING POINT OUTPUT ROUTINE TO INCREASE ACCURACY // 15-DEC-2018 LHN - ADDED DSN PATCHES TO SOURCE // - DSN 31.11.1 M // - DSN 21.11.2 M // - INCLUDED BPAT.PA CODE IN SOURCE // / / VERSON= 5 /VERSION OF BRTS /VERSION LOCATED AT TAG "VERLOC" AND VERLOC+1 /VERLOC = 260+VERSON /VERLOC+1 = 300+SUBVER (01 = A) SUBVER= 03 /SUBVERSION OF BRTS SUBVAF= 01 /SUBVERSION OF BASIC.AF OVERLAY SUBVSF= 01 /SUBVERSION OF BASIC.SF OVERLAY SUBVFF= 01 /SUBVERSION OF BASIC.FF OVERLAY /FIRST WORD OF EACH OVERLAY CONTAINS /60+VERSON IN LEFT HALF AND SUBVERSION OF OVERLAY /IN RIGHT HALF. MDATE= 7666 /CONTAINS OS/8 DATE IN FIELD 1 BIPCCL= 7777 /CONTAINS YEAR EXTENSION BITS SCOPWD= 7726 /WORD CONTAINING SCOPE FLAG IN 200 BIT EDBLK= 7604 /CONTAINS BLOCK NUMBER OF EDITOR WIDTH= 120 /WIDTH OF PRINTER COLWID= 16 /WIDTH OF ONE PRINT COLUMN SACLIM= 120 /DEFINE WIDTH OF STRING ACCUMULATOR OVERLAY=3400 /ADDRESS OF START OF 5 PAGE OVERLAY BUFFER /ASSEMBLY INSTRUCTIONS / .R PAL8 / *BRTS<BRTS.PA/W / .R ABSLDR / *BRTS$ (THEN SAVE AS SHOWN BELOW) / /WHEN ASSEMBLED AND LOADED VIA THE ABS. LOADER,THE /CORE LAYOUT IS AS FOLLOWS: / /BRTS IS AT 0-6777 /OVERLAY BASIC.AF IS AT 3400-4577 /OVERLAY BASIC.SF IA AT 12000-13177 /OVERLAY BASIC.FF IS AT 13400-14577 / /TO CREATE SAVE IMAGE FILES PRIOR TO RUNNING BASIC, /ASSEMBLE THIS SOURCE IN A 12K OR MORE MACHINE,THEN /PERFORM THE FOLLOWING SEQUENCE OF OS/8 COMMANDS / /.R ABSLDR /*BRTS$ /.SAVE SYS:BRTS 0-6777 / /.SAVE SYS:BASIC.AF 3400-4577 / /.SAVE SYS:BASIC.SF 12000-13177 / /.SAVE SYS:BASIC.FF 13400-14577 / /THE BASIC RUN-TIME SYSTEM IS CONDITIONALIZED TO TAKE ADVANTAGE /OF THE PDP-8/E KE8/E EAE OPTION. /NORMALLY,THE SYSTEM IS ASSEMBLED SUCH THAT IT WILL RUN ON ANY /PDP-8 OR PDP-12. TO TAKE ADVANTAGE OF THE ADDITIONAL HARDWARE,SET /THE SWITCH EAE=1 IF THE SYSTEM INCLUDES A KE8/E EAE. /YOU MAY DO THIS BY CONCATENATING TTY: ONTO BRTS.PA AS FOLLOWS /.PAL EABRTS<TTY:,SYS:BRTS.PA/W /EAE=1 /^Z /^Z /. BINARY IS CREATED... /NOW EABRTS IS LOADED INSTEAD OF BRTS /TO GET A LISTING, USE THE /J SWITCH TO INHIBIT THE FPP CODE YOU /ARE NOT USING (EAE ON A NON EAE ASSEMBLY FOR EXAMPLE) /EAE=0 /USE STANDARD FLOATING POINT PACKAGE /EAE=1 /USE EAE FLOATING POINT PACKAGE / /V4 FIXES /.EAE ADD FOR NUMS <.00001 TO 0 /.FILE INPUT FROM TTY /.OUTPUT OF NUMS > 80,000 /.STRING FETCH WHEN COUNT IS IN ONE FLD & / TEXT IS IN THE NEXT AC4000= CLA STL RAR AC2000= CLA STL RTR AC0002= CLA STL RTL AC7775= CLL STA RTL AC7776= CLL STA RAL AC3777= CLL STA RAR AC5777= CLL STA RTR IFNDEF EAE <EAE=0> /PAGE 0 LOCATIONS *6 USECON, 0 /USE CONSTANT GENERATED BY "USE" STATEMENT FSTOP1, FSTOPI /POINTER TO RTS EXIT ROUTINE USED /BY ^C HOOKS IN SYSTEM HANDLER. /IF THIS IS MOVED, BLOAD MUST BE ALTERED *10 SACXR, 15 /INDEX REGISTER FOR STRING ROUTINES XR1, VCHECK XR2, 0 XR3, 0 XR4, 4 /INDEX REGISTERS XR5, 0 DATAXR, 0 /POINTER FOR IN-CORE DATA LIST SPINNR, 2713 /AT RUNTIME,THIS LOCATION IS SPUN FOR RND SEED *20 /COMPILER-INTERPRETER CONTROL BLOCK. LOCATIONS MARKED BY /A /* ARE EXPECTED TO CONTAIN VALUES SUPPLIED BY THE COMPILER PRIOR /TO THE BRTS LOAD CDFIO, 6211 /* CDF FOR I/O TABLE AND SYMBOL TABLES SCSTRT, 0 /* POINTER TO START OF SCALAR SYMBOL TABLE ARSTRT, 0 /* POINTER TO START OF ARRAY SYMBOL TABLE-1 STSTRT, 0 /* POINTER TO START OF STRING SYMBOL TABLE-1 SASTRT, 0 /* POINTER TO START OF STRING ARRAY TABLE-1 CDFPS, 0 /* CDF FOR START OF PSEUDO-CODE PSSTRT, 0 /* POINTER TO START OF PSEUDO CODE-1 DLSTOP, 0 /* POINTER TO TOP OF DATA LIST DLSTRT, 0 /* POINTER TO BOTTOM OF INCORE DATA LIST-1 PSFLAG, 0 /* OS/8 SWAPPING FLAGS WORD /BIT 0 SET IF OS/8 SAVED IN N7400 INSTEAD OF N7600 (TD8E) /BIT 1 SET IF ROM TD8E HANDLER NOT NEEDING CDF CHANGES /BIT 11 SET IF 17600 IS IN 17600. BIT 11 TOGGLED BY /PSWAP ROUTINE /SYSTEM REGISTERS SACLEN, 0 /LENGTH OF STRING IN SAC S1, 0 /SUBSCRIPT 1 (MUST BE FOLLOWED BY S2!) S2, 0 /SUBSCRIPT 2 (MUST BE PRECEEDED BY S1!) DMAP, 0 /MAP OF DRIVER PAGES BMAP, 0 /MAP OF FILE BUFFERS *37 /FLOATING POINT PACKAGE LOCATIONS. THE FOLLOWING 21 LOCATIONS ARE USED /FOR VARIOUS PURPOSES BY THE FLOATING POINT PACKAGE. THOSE WITH DOUBLE /LABELS ARE USED BY BRTS AS TEMPORARIES WHEN NOT CALLING THE PACKAGE. /THE SECOND TAG IS THE ONE USED BY THE FLOATING POINT PACKAGE,THE FIRST /IS USED BY BRTS. FF, 0 /SPECIAL MODE FLIP-FLOP TEMP1, AC0, 0 AC1, 0 TEMP3, AC2, 0 TM, TEMP4, 6201 ACX, 0 /FAC-EXPONENT ACH, 0 /FAC-HIGH ORDER MANTISSA ACL, 0 /FAC-MANTISSA LOW TEMP5, OPX, 0 TEMP6, OPH, 0 TEMP7, OPL, 0 DSWIT, 0 /SWITCH USED BY INPUT ROUTINE CHAR, 215 /TERMINATOR OF LAST INPUT TEMP10, 0 /LOC NEEDED BY FPP DECEXP= TEMP10 /SYSTEM REGISTERS USED OFTEN BY INTERPRETER CODE MODESW, 0 /0 FOR ARTHIMETIC MODE,1 FOR STRING MODE INSAV, 0 /CURRENT PSEUDO-INSTRUCTION BEING EXECUTED LINEHI, 0 /HI ORDER BITS OF LINE # CURRENTLY BEING EXECUTED LINELO, 0 /LOW ORDER BITS OF CURRENT LINE NUMBER STRMAX, 0 /MAXIMUM # OF CHARS ALLOWED IN CURRENT STRING STRCNT, 0 /- # OF CHARACTERS IN CURRENT STRING STRPTR, 0 /POINTER TO SIZE WORD OF CURRENT OPERAND STRING TEMP2, 0 /I/O TABLE POINTER AREA-THIS BLOCK HOLDS POINTERS TO THE I/O TABLE /ENTRY FOR THE CURRENT FILE.THE POINTERS ARE CHANGED EVERY TIME AN /SFN IS EXECUTED. A TAD I OFF ONE OF THE POINTERS WILL GET THE INFORMATION /NOTED IN THE COMMENT FOR THE CURRENT I/O DEVICE /THIS BLOCK IS INITIALIZED FOR TTY IOTSIZ= 15 /CURRENT SIZE OF IO TABLE /THE FORMAT OF THE HEADER WORD IS AS FOLLOWS /BITS USAGE /0-3 OS/8 DEVICE NUMBER /4-5 3 FOR 2 CHARACTER UNPACKING COUNT /6 SET IF BUFFER HAS BEEN MODIFIED AND NEEDS TO BE WRITTEN /7 SET IF NOT FILE STRUCTURED DEVICE /8 SET IF HANDLER IS 2 PAGES LONG /9 SET IF VARIABLE LENGTH (OUTPUT) FILE /10 SET IF EOF /11 SET IF ASCII FILE, CLEAR IF NUMERIC IMAGE FILE ENTNO, 0 /ENTRY NUMBER NOW IN AREA IOTHDR, TTYF /HEADER WORD IOTBUF, TTYF+1 /BUFFER ADDRESS IOTBLK, TTYF+2 /CURRENT BLOCK IN BUFFER IOTPTR, TTYF+3 /READ\WRITE POINTER IOTHND, TTYF+4 /HANDLER ENTRY POINT IOTLOC, TTYF+5 /FILE STARTING BLOCK # IOTLEN, TTYF+6 /ACTUAL FILE LENGTH IOTMAX, TTYF+7 / DEVICE / (FILE MAXIMUM LENGTH) IOTPOS, TTYF+10 / NAME / (POSITION OF PRINT HEAD) IOTFIL, TTYF+11 / / TTYF+12 / FILE / TTYF+13 / NAME / TTYF+14 / .EX IOTDEV= IOTMAX *200 /FETCH NEXT PSEUDO WORD PWFECH, JMP START1 /START ONCE ONLY CODE IN TTY BUFFER ISZ INTPC /BUMP PSEUDO-CODE PROGRAM COUNTER JMP CDFPSU /NO-SKIP;JUST GET NEXT PSEUDO-CODE WORD TAD CDFPSU /SKIP MEANS WE HAVE TO INCREMENT PS-CODE FIELD TAD [10 DCA CDFPSU CDFPSU, VCHECK /SET DF TO FIELD OF PSEUDO-CODE TAD I INTPC /GET NEXT WORD OF CODE CDF 0 /SET DATA FIELD BACK TO INTERPRETER FIELD JMP I PWFECH /RETURN O7770, 7770 SSMODE, IAC /SET INTERPRETER TO STRING MODE AMODE, DCA MODESW /SET INTERPRETER TO ARITH MODE /FALL BACK INTO I-LOOP /BRTS I-LOOP ILOOP, CLA CLL /FLUSH DCA FF /PUT FPP IN SI MODE JMS PWFECH /GET NEXT PSEUDO-INSTRUCTION DCA INSAV /SAVE FOR LATER JMS I [XPRINT /CALL TO TTY DRIVER NOP TAD INSAV AND [7400 /STRIP TO OPCODE BITS CLL RTL RTL RAL /OPCODE NOW IN BITS 8-11 TAD O7770 /SUBTRACT 10 SMA /IS OPCODE <10? JMP SCASE /CALL TO INSTRUCTION COMMON TO SMODE AND AMODE DCA TEMP1 /YES-SAVE THE OFFSET TAD MODESW /WHICH MODE? SZA CLA JMP SMODE /STRING MODE TAD TEMP1 /ARITHMETIC MODE-GET OFFSET TAD JMSI /MAKE JMS TO FP PACKAGE ROUTINE DCA .+2 /PUT IN LINE JMS ARGPRE /SET UP ARGUMENT FROM SYMBOL TABLE ILOOPF, . /JMS TO THE FLOATING POINT PACKAGE ROUTINE NOP /FPP SOMETIMES RETURNS TO CALL+2 JMP ILOOP /DONE SCASE, TAD JMPI /JUST DISPATCH TO ROUTINE CALLED FOR DCA .+1 . /JUMP TO APPROPRIATE ROUTINE JMSI, JMS I SEP1 /JMS USED FOR CALLS TO FPP BY AMODE INST JMPI, JMP I SEP1 /JMP USED TO CALL ROUTINES COMMON TO AMODE AND SMODE /JUMP TABLE FOR AMODE INSTRUCTIONS FFADD /FAC_C(A)+FAC OPCODE 0 FFSUB /FAC_FAC-C(A) OPCODE 1 FFMPY /FAC_FAC*C(A) OPCODE 2 FFDIV /FAC_FAC/C(A) OPCODE 3 FFGET /FAC_C(A) OPCODE 4 FFPUT /C(A)_FAC OPCODE 5 FFSUB1 /FAC_C(A)-FAC OPCODE 6 FFDIV1 /FAC_C(A)/FAC OPCODE 7 /ALL INSTRUCTIONS BEYOND THIS POINT ARE COMMON TO AMODE AND SMODE SEP1, LS1I /S1_C(A) OPCODE 10 LS2I /S2_C(A) OPCODE 11 FJOCI /IF TRUE,PC_C(PC,PC+1) OPCODE 12 JEOFI /IF EOF,PC_C(PC,PC+1) OPCODE 13 LINEI /LINE NUMBER OPCODE 14 ARRAYI /ARRAY INST OPCODE 15 ILOOP /NOP OPCODE 16 OPERI /OPERATE INST OPCODE 17 SMODE, TAD TEMP1 /INST OFFSET TAD JMSSI /BUILD JMP OFF STRING TABLE DCA SDIS /PUT IN LINE CLL /STRING SCALAR TABLE JMS I STFINL /SET UP ARGUMENT ADDRESS SDIS, . /CALL STRING ROUTINE REQUESTED /JUMP TABLE FOR SMODE INSTRUCTIONS / A "/*" IN THE COMMENT MEANS THAT THAT OPCODE IS NOT USED,SO WE /USE THE SLOT FOR REGULAR STORAGE SCON1 /SAC_SAC&C(A$) SCOMP /IF SAC .NE. C(A$),PC_PC+2 SREAD /C(A$)_DEVICE INTPC, . /* INTERPRETER PC SLOAD /SAC_C(A$) SSTORE /C(A$)_SAC STFINL, STFIND /* LINK TO STRING FINDING ROUTINE JMSSI, JMP I .+1 /* DISPATCH JUMP FOR SMODE INSTRUCTIONS /ARGPRE-ROUTINE TO TRANSLATE OPERAND FIELD INTO 12 BIT POINTER /INTO SCALAR TABLE FOR USE IN FPP CALLS. ARGPRE, 0 TAD INSAV /GET INSTRUCTION AND [377 /STRIP TO OPERAND FIELD DCA TEMP1 /SAVE TAD TEMP1 CLL RAL /*2 TAD TEMP1 /PTR*3 TAD SCSTRT /MAKE 12 BIT ADDR SCALDF, 1000 /DF TO SCALAR FIELD (CDF INITIALIZED BY LOADER) JMP I ARGPRE /RETURN /ROUTINE TO ZERO FAC FACCLR, -4 L7600, 7600 /CLA DCA ACX /ZERO EXPONENT DCA ACL /ZERO LOW MANTISSA DCA ACH /ZERO HIGH MANTISSA JMP I FACCLR /STRING ACCUMULATOR USED BY STRING OPCODES AND FUNCTIONS /CONTAINS ONE 6BIT CHAR PER WORD START1, SAC, OSR SZA CLA NOP /A HLT PLACED HERE WILL ALLOW YOU TO STOP /MACHINE BEFORE RUNTIME SYSTEM STARTS BY /SETTING SWITCH REGISTER TLS /SET TTY FLAG ISZ SPINNR /SPIN RANDOM NUMBER SEED NOP /WHILE WAITING FOR INITIALIZING TLS TSF /FLAG UP YET? JMP .-3 /NO TAD CDFIO DCA I PS1L /SET UP CDFS IN PSWAP TAD CDFIO DCA I PS2L JMS I PFUDSC /SWAP 17600 IN IF NOT ALREADY IN AND SAVE SCOPE FLAG JMS I CDFPSU TAD SCALDF /SET PROG NOT RESTARTABLE BIT DCA I L7746 /TELL USR TO SAVE 1000-1777 TAD PINFO /POINTER TO INFO TABLE IN 17600 DCA XR1 TAD POVTAB /POINTER TO BLOCK TABLE IN OVERLAY DRIVER DCA XR2 TAD FACCLR /WE HAVE TO GET 4 BLOCK NUMBERS DCA TEMP1 OVML, CDF 10 TAD I XR1 /GET BLOCK NUMBER FOR THIS OVERLAY FROM INFO AREA CDF DCA I XR2 /PUT IN TABLE IN OVERLAY DRIVER ISZ TEMP1 /DONE? JMP OVML /NO JMS I [PSWAP /SWAP 17600 BACK TO HIGH CORE NOW JMP I .+1 START3 /CONTINUE THE INITIALIZING CODE IN INTERMEDIATE BUFFER L7746, 7746 PINFO, 7607 POVTAB, ARITHA-1 PS1L, P1CDF PS2L, P1CDF1 PFUDSC, FUDSC PAGE FUDSC, 0 TAD PSFLAG /TEST WHERE 17600 IS LOCATED SMA CLA TAD [200 /IF NOT TD8E USE 7600 TAD [7400 /IF TD8E USE 7400 DCA I PHICORE /STORE FOR SWAPPER CLA IAC AND PSFLAG SNA CLA /SKP IF PAGE 17600 IS ALREADY IN JMS I [PSWAP /ELSE BRING IT IN CDF 10 TAD I PSCOPW CDF AND [200 /GET SCOPE BIT FROM RES MONITOR DCA I PSCOPF TAD I PHEIGHT DCA I PHCTR /NOW INITIALIZE THE SCREEN HEIGHT COUNTER JMP I FUDSC /RETURN PHEIGHT,HEIGHT PHCTR, HCTR PSCOPW, SCOPWD PSCOPF, SCOPFG PHICOR, HICORE *SAC+SACLIM+1 /ORIGIN PAST SAC+ONE GUARD CHAR /JUMP ON CONDITION FJOCI, TAD INSAV /GET JUMP INSTRUCTION AND [17 /MASK OFF JUMP CONDITION SNA /IS IT GOSUB? JMP I (GOSUB /YES-PUSH PC ON STACK THEN JUMP TAD FSTOPI /BASE TAD FOR BUILD OF TAD INSTRUCTION DCA .+1 /PUT IN LINE . /GET PROPER SKIP DCA .+2 /PUT IN LINE TAD ACH /GET HIGH ORDER FAC . /SKIP INSTRUCTION JMP SUCJMP /CONDITION TRUE-JUMP JFAIL, JMS I [PWFECH /CONDITION FALSE-DON'T JUMP,BUT BUMP PC JMP I [ILOOP /DONE /JUMP ON END OF FILE JEOFI, JMS I [IDLE /SEE IF FILE OPEN TAD I IOTHDR /1ST WORD OF I/O TABLE ENTRY CLL RTR /GET EOF BIT IN LINK SNL CLA /EOF? JMP JFAIL /NO-DON'T JUMP /YES, FALL INTO JUMP ROUTINE SUCJMP, JMS I [PWFECH /GET WORD FOLLOWING JUMP INS. DCA I INTPCL /STORE AS NEW PC TAD INSAV /GET JUMP INSTRUCTION AND [340 /MASK OFF DESTINATION FIELD CLL RTR /SLIDE OVER TAD CDFINL /MAKE A CDF INSTRUCTION DCA I [CDFPSU /AND SET NEW PC INSTRUCTION FIELD JMP I [ILOOP /NEXT INSTUCTION K7554, 7554 /MUST PRECEDE SKIP TABLE /SKIP TABLE USED TO HOLD TESTS FOR VARIOUS CONDITIONS K7600, 7600 /UNCONDITIONAL (CLA) SMA CLA /JPA SZA CLA /JNA SMA SZA CLA /JPA JNA SPA CLA /JMA SNA CLA /JZA SPA SNA CLA /JMA JZA JMP I JFORL /FORLOOP JUMP ROUTINE JFORL, JFOR INTPCL, INTPC 0000;0 /MARK BEGINNING OF GOSUB STACK GSTCK, 6000;0 6000;0 6000;0 6000;0 6000;0 6000;0 6000;0 6000;0 6000;0 0 /MARK THE END OF THE GOSUB STACK /CALL TO DEVICE DRIVER FOR FILE I/O. ASSUMES ARGS HAVE BEEN SET UP DRCALL, 0 DCA DRARG1 /FUNCTION WORD INTO DRIVER CALL CDFINL, CDF /DF TO CURRENT FIELD TAD I IOTBUF /GET BUFFER ADDRE FROM I/O TABLE ENTRY DCA DRARG2 /PUT IN DRIVER CALL TAD I IOTBLK /GET BLOCK NUMBER FROM I/O TABLE DCA DRARG3 /PUT IN DRIVER CALL TAD I IOTHND /GET DRIVER ENTRY DCA DRIVER /SAVE JMS I DRIVER /CALL DRIVER DRARG1, 0 /FUNCTION CONTROL WORD DRARG2, 0 /BUFFER ADDRESS DRARG3, 0 /BLOCK # SMA CLA /DEVICE ERROR-IS IT FATAL? JMP I DRCALL /ALLS WELL DE, JMS I [ERROR /FATAL DRIVER, 0 /CALL TO INTERPRETER EXITING ROUTINE FSTOPN, JMS I [XPRINT /ON NORMAL EXITS,WE MUST EMPTY RING BUFFER JMP .-1 /FIRST FSTOPI, TAD K7554 DCA INSAV /FAKE A CALL TO BASIC.FF FUNCTION 6 JMP I .+1 /CALL OVERLAY FUNC5I /USE FUNCTION-TAKES WORD FOLLOWING CALL AND STUFFS IT IN USECON FOR /USE A BUFFER POINTER FOR USER SUBROUTINE USE, JMS I [PWFECH /GET NEXT WORD FROM PSEUDO-CODE STREAM DCA USECON /STORE IN PAGE 0 SLOT JMP I [ILOOP /RETURN PAGE /ARRAY INSTRUCTIONS /ARRAY INSTRUCTIONS WORK BY FINDING THE ADDRESS OF THE ARGUMENT FROM THE ARRAY SYMBOL /TABLE,THEN CALLING THE APPROPRIATE FLOATING POIN PACKAGE ROUTINE. ARRAYI, TAD MODESW /WHICH MODE? SZA CLA JMP SARRAY /SMODE TAD INSAV /GET ARRAY INSTRUCTION AND K0037 /MASK OFF ARRAY OPERAND CLL RTL /MULTIPLY BY 4 (ENTRY LENGTH) TAD ARSTRT /MAKE POINTER INTO ARRAY TABLE DCA XR1 /POINTS TO ARRAY FOR THIS OPERATION ATABDF, . /CHANGE DF TO ARRAY TABLE FIELD (SET BY START) TAD I XR1 /GET POINTER TO FIRST ARRAY ELEMENT DCA TEMP2 /SAVE FOR LATER TAD I XR1 /GET DF FOR VARIABLE DCA ADFC /PUT IN LINE AT END OF ROUTINE TAD I XR1 /GET ARRAY DIMENSION 1 DCA TEMP3 /SAVE TAD S1 /GET SUBSCRIPT 1 CLL CMA /SET UP 12 BIT COMPARE TAD TEMP3 /DIMENSION 1 +1 SNL CLA /S1 TOO BIG? SU, JMS I [ERROR /YES-SUBSCRIPT OUT OF BOUNDS ERROR DCA TEMP6 /CLEAR TEMPORARY TAD I XR1 /GET DIMENSION 2 SNA /IS SECOND DIMENSION 0?(ARRAY UNIDIMENSIONAL) JMP ADCALC /YES-DON'T CHECK S2 FOR OUT OF BOUNDS DCA ARJMP /SAVE DIM2+1 TAD S2 /GET SUBSCRIPT 2 CLL CMA /SAVE 12 BIT COMPARE TAD ARJMP SNL CLA /S2 BIGGER THAN DIM2? JMP SU /YES TAD S2 /MULTIPLY DIM1+1 BY S2 JMS I [MPY /12 BY 12 MULTIPLY ROUTINE ADCALC, CLL TAD S1 /LORD OF S1+(DIM1+1)*S2 DCA TEMP5 /SAVE RAL /CARRY TO BIT 11 TAD TEMP6 /HORD OF S1+(DIM1+1)*S2 DCA TEMP6 /SAVE TAD TEMP5 /LORD OF S1+(DIM1+1)*S2 CLL RAL /*2 DCA TEMP7 /LORD OF [S1+(DIM1+1)*S2]*2 TAD TEMP6 /HORD OF S1+(DIM1+1)*S2 RAL /*2 DCA TEMP3 /HORD OF [S1+(DIM1+1)*S2]*2 CLL TAD TEMP5 /LORD OF S1+(DIM1+1) TAD TEMP7 /LORD OF [S1+(DIM1+1)*S2] DCA TEMP7 /LORD OF 3*[S1+(DIM1+1)*S2] RAL /CARRY TO BIT 11 TAD TEMP6 /HORD OF [S1+(DIM1+1)*S2)*2 TAD TEMP3 /HORD OF S1+(DIM1+1)*S2 DCA TEMP6 /HORD OF 3*[S1+(DIM1+1)*S2] CLL TAD TEMP7 /INDEX TO ELEMENT TAD TEMP2 /AC POINTS TO CORRECT ARRAY ELEMENT DCA XR1 /SAVE POINTER RAL /CARRY TO BIT 11 TAD TEMP6 /COMBINE TO MAKE TOTAL # OF FIELD OVERLAPS CLL RTL RAL /SLIDE OVERLAPS TO FIELD BITS (6-8) TAD ADFC /ADD ANY CHANGE IN DATA FIELD TO CDF DCA ADFC /PUT ABSOLUTE CDF IN LINE TAD INSAV /GET ARRAY INSTRUCTION AGAIN AND [340 /MASK OFF ARRAY OPCODE CLL RTR RTR RAR /SLIDE TO BITS 9-11 TAD JMPI2 /AND USE AS INDEX INTO JUMP TABLE DCA ARJMP /PUT JUMP IN LINE OF CODE IAC DCA FF /PUT FPP IN "SPECIAL MODE" ADFC, . /CHANGE DF TO DF OF ARRAY ELEMNT TAD XR1 /AC POINTS TO ARRAY ELEMENT ARJMP, . /PERFORM THE REQUIRED OPERATION NOP /FPP SOMETIMES RETURNS TO CALL+2 JMP I [ILOOP /DONE /ARRAY JUMP TABLE AJT, FFSUB1 /FAC=A(S1,S2)-FAC OPCODE 0 FFADD /FAC=FAC+A(S1,S2) OPCODE 1 FFSUB /FAC=FAC-A(S1,S2) OPCODE 2 FFMPY /FAC=FAC*A(S1,S2) OPCODE 3 FFDIV /FAC=FAC/A(S1,S2) OPCODE 4 FFGET /FAC=C(A(S1,S2) OPCODE 5 FPUTLL, FFPUT /C(A(S1,S2)=FAC OPCODE 6 FFDIV1 /FAC=A(S1,S2)/FAC OPCODE 7 /STRING ARRAY DISPATCH SARRAY, TAD INSAV /GET INSTRUCTION AND [340 /ISOLATE ARRAY OPCODE CLL RTR RTR /AND SLIDE IT OVER FOR AN OFFSET RAR TAD JMPISA /BUILD A JUMP TO STRING INSTRCUTION DCA SAD /AND PUT IN LINE STL /TELL SFIND TO USE ARRAY TABLE JMS I STFILK /SET UP ARGUMENT ADDRESS SAD, . /EXECUTE INSTRCUTION /STRING ARRAY JUMP TABLE /USED WHEN ARRAYI CALLED IN SMODE / A "/*" IN THE COMMENT MEANS THAT OPCODE IS UNDEFINED AND THE SLOT /IN THE TABLES IS USED FOR NORMAL STORAGE JMPISA, JMP I .+1 /DISPATCH JUMP FOR STRING ARRAY INSTRUCTIONS SCON1 /SAC_SAC&C(A$(S1)) SCOMP /SKIP IF SAC=C(A$(S1)) SREAD /A$(S1)_DEVICE K0037, 37 /* STFILK, STFIND /* LINK TO STRING FINDING ROUTINE SLOAD /SAC_C(A$(S1)) SSTORE /C(A$(S1))_SAC JMPI2, JMS I AJT /* DISPATCH JUMP FOR ARRAY INST /ROUTINE TO PUT ONE WORD IN FILE BUFFER IN FIELD 1 BCPUT, 0 DCA TEMP6 /SAVE AC JMS I [IDLE /CHECK IF FILE OPEN TAD I IOTPTR /GET READ/WRITE POINTER DCA TEMP7 /SAVE TAD ENTNO /GET FILE # SZA CLA /IF TTY,BUFFER FIELD IS 0 CDF 10 TAD TEMP6 /GET WORD TO STORE AGAIN DCA I TEMP7 /STORE IT IN BUFFER CDF0, CDF TAD I IOTHDR /HEADER WORD AND (7737 /TURN OFF BLOCK WRITTEN BIT TAD (40 /TURN IT ON AGAIN DCA I IOTHDR JMP I BCPUT /RETURN PAGE /TELETYPE DRIVING ROUTINE /2 ENTRY POINTS-XPUTCH PUTS A CHARCTER IN THE RING BUFFER / XPRINT TYPES A CHARACTER IF POSSIBLE / AND RETURNS TO CALL+1 IF THERE / ARE MORE CHARCTERS IN THE BUFFER,CALL+2 / IF THE BUFFER IS EMPTY /THE IDEA IS THE PLACE CALLS TO XPRINT AT VARIOUS POINTS IN THE INTER- /PRETER AND THUS KEEP THE TTY BUSY WITHOUT WASTING THE TIME WAITING FOR /THE TTY FLAG. THE SUCCESS OF THIS SCHEME DEPENDS HEAVILY ON THE NUMBER /AND PLACEMENT OF THE CALLS TO XPRINT. XPUTCH, 0 DCA CHRSAV /SAVE THE CHARACTER XPUT1, ISZ SPINNR /SPIN RANDOM # SEED JMS XPRINT /START A CHAR IF POSSIBLE NOP TAD BCNT /GET THE NUMBER OF AVAILABLE SLOTS SNA CLA /ARE THERE ANY? JMP XPUT1 /NO-TRY TO RPINT 1 AND FREE UP A SPACE PUTCHR, TAD CHRSAV /GET CHARACTER AGAIN DCA I BUFIN /PUT CHARACTER IN RING BUFFER ISZ BUFIN /BUMP BUFEER POINTER OF INPUT CLA CLL CMA /-1 IN AC TAD BCNT /DECREMENT AVAILABLE SLOT COUNT DCA BCNT TAD BUFIN /GET BUFFER INPUT POINTER TAD MBEND /SUBTRACT ADDR OF END OF BUFFER SPA SNA CLA /PAST EDN OF BUFFER? JMP I XPUTCH /NO-RETURN TAD BSTRTA /YES-RESET INPUT POINTER TO BEGINNING OF BUFFER DCA BUFIN JMP I XPUTCH /RETURN BUFIN, BSTRT /POINTER TO NEXT SLOT FOR BUFFER INPUT BUFOUT, BSTRT /POINTER TO NEXT CHARACTER TO BE PRINTED BSTRTA, BSTRT /ADDR OF START OF TTY BUFFER BCNT, 30 /# OF AVAILABLE SLOTS IN BUFFER (40 INITIALLY) CHRSAV=TEMP1 MBEND, -BEND /-ADDR OF END OF RING BUFFER MCTRLC, -3 M50, -30 MXON, -21+3 MXOFF, -23+21 XFLAG, 0 XPRINT, 0 KSF /IS KEYBOARD FLAG UP? JMP NOCC /NO-NO CHANCE FOR A CTRL/C KRB /YES-GET THE CHAR IN KEYBOARD BUFFER AND [177 /GET RID OF PARAITY TAD MCTRLC /IS IT CTRL/C SNA JMP I FSTOP1 /YES-ABORT TO EDITOR TAD MXON SZA JMP .+3 DCA XFLAG JMP NOCC+3 TAD MXOFF SZA CLA JMP NOCC ISZ XFLAG JMP XPRINT+1 NOCC, TAD XFLAG SZA CLA JMP XPRINT+1 TAD BCNT /# OF AVAILABLE SLOTS IN BUFFER TAD M50 /IS BUFFER EMPTY? SNA CLA JMP RECP2 /YES-RETURN TO CALL+2 TSF /NO-TTY FLAG UP YET? JMP I XPRINT /NO-GO ABOUT YOUR BUSINESS TAD I BUFOUT /GET NEXT CHARACTER /*****************************************************************: /N.B. BECAUSE OF THE ABOVE INSTRUCTION,THE DF MUST BE SET TO THE /INTERPRETER FIELD WHENEVER XPRINT IS CALLED. WATCH YOUR HOOK PLACEMENT! /****************************************************************: JMS I (PCH /TYPE THE CHAR ISZ BUFOUT /BUMP BUFFER OUTPUT POINTER TAD BUFOUT /GET OUTPUT POINTER TAD MBEND /SUBTRACT END OF BUFFER SPA SNA CLA /IS OUTPUT POINTER PAST END? JMP BOUTRS /NO-FREE UP A SPOT TAD BSTRTA /YES-RESET POINTER TO BEGINNING DCA BUFOUT BOUTRS, ISZ BCNT /INCREMENT # OF FREE SLOTS (WE JUST PRINTED ONE) JMP I XPRINT /RETURN RECP2, ISZ XPRINT /BUMP RETURN JMP I XPRINT /RETURN TO CALL+2 FOR EMPTY BUFFER /TELETYPE RING BUFFER BSTRT, "B /START OF BUFFER "R "T "S " "V VERLOC, 260+VERSON 300+SUBVER 0215 0212 VEREND, 0212 VCHECK, 0 CDF 10 TAD I N7644 CDF 0 AND XR4 SNA CLA JMP I VCHECK TAD XR1 DCA BUFIN TAD SACXR DCA BCNT JMP I VCHECK BEND, N7644, 7644 /LINE NUMBERS LINEI, TAD INSAV /GET INSTRUCTION DCA LINEHI /SAVE JMS I [PWFECH /GET WORD FOLLOWING LINE # INST DCA LINELO /SAVE AS LOW ORDER LINE # TRHOOK, JMP I [ILOOP /RETURN TO I-LOOP TAD KC240 /IF TRACE IS ON,FAKE CALL DCA INSAV /TO FUNC2,#12 JMP I .+1 FUNC2I /DISPATCH TO TRACE FUNCTION /INTERMEDIATE TTY BUFFER /USED TO BUFFER OUTPUT FROM FPP BEFORE WE PUT IT /IN BASIC FORMAT FOR TRANSPORTATION TO THE TTY RING /BUFFER KC240, 240 /STOPPER TO MARK BEGINNING OF BUFFER INTERB, START3, TAD CDFPS /CDF FOR PSEUDO-CODE DCA I [CDFPSU /PUT IN-LINE TO ILOOP TAD PSSTRT /START OF PSEUDO-CODE DCA I INTPCK /PUT INTO PC JMS I [FACCLR /ZERO FAC TAD CDFIO /CDF FOR SYMBOL TABLE FIELD DCA I STDFL /PUT IN LINE FOR STRING FUNCTIONS FPPTM5, TAD CDFIO /CDF FOR SYMBOL TABLES DCA I ATABDL /PUT IN LINE FOR ARRAY CALCULATIONS TAD CDFIO /CDF FOR SCALAR TABLE FPPTM4, DCA I SCALDL /PUT IN LINE FOR ARGPRE TAD CDFIO DCA I DLCDFL /DATA FIELD FOR DATA LIST FPPTM3, TAD DLSTRT DCA DATAXR /DO A RESTORE IN INCORE DATA LIST JMP I .+1 /CONTINUE INITAILIZATION CODE IN TTY INPUT BUFFER FPPTM2, START4 ATABDL, ATABDF STDFL, STDF FPPTM1, /FLOATING POINT TEMPORARY INTPCK, INTPC DLCDFL, DLCDF SCALDL, SCALDF PAGE /VT52 DELAY PARAMETERS (MUST BE AT BEGINNING OF PAGE) HEIGHT, 0 /NEGATIVE SCREEN HEIGHT DELAY, 0 /NEGATIVE DELAY VALUE IFNZRO HEIGHT-1200 <__FIX SET COMMAND__> HCTR, 0 /HEIGHT COUNTER INITIALIZED BY SET DCTR, 0 /DELAY COUNTER INITIALIZED BY SET /LOW LEVEL ROUTINE TO TYPE A CHAR PCH, 0 TSF /WAIT FOR PREV CHAR JMP .-1 TLS /TYPE THE CURRENT ONE AND [177 /MASK TO 7BIT TAD (-15 /TEST IF LINE FEED WILL BE SENT NEXT SZA CLA JMP I PCH /RETURN IF NOT ISZ HCTR /TEST SCREEN HEIGHT IF LF JMP I PCH /RETURN IF NOT AT BOTTOM OF SCREEN TAD HEIGHT DCA HCTR /RESET HEIGHT COUNTER NOW TAD DELAY SNA /TEST FOR ZERO DELAY JMP I PCH /RETURN IF SO DCA DCTR /ELSE SET DELAY COUNTER DLOOP, ISZ PSWAP /NOW EXEC INNER LOOP 4096 TIMES (USUALLY) JMP .-1 KSF /TEST IF KEY STRUCK SKP JMP I PCH /RETURN AT ONCE IF YES ISZ DCTR /TEST DELAY TIMER JMP DLOOP /REITERATE JMP I PCH /NOW ALLOW PRINTING TO CONTINUE /OPERATE CLASS INSTRUCTIONS OPERI, TAD INSAV /GET OPERATE INSTRUCTION AND [17 /MASK OFF OPERATE OPCODE TAD JMPI3 /BUILD JUMP OFF OPERATE JUMPTABLE DCA .+1 /STORE THE JUMP IN LINE . /DISPATCH TO PROPER OPERATE ROUTINE JMPI3, JMP I .+1 /JUMP TO OPERATE ROUTINE CALLED FOR /OPERATE JUMP TABLE FUNC3I /CALL RESIDENT FUNCTION OPCODE 0 SPFUNC /SPECIAL FUNCTIONS OPCODE 1 SFN /SET FILE NUMBER OPCODE 2 FNEGI /NEGATE FAC OPCODE 3 RETRNI /GOSUB RETURN OPCODE 4 RESTOR /RESTORE DEVICE OPCODE 5 LSUB1I /LOAD S1 FROM FAC OPCODE 6 LSUB2I /LOAD S2 FROM FAC OPCODE 7 MSPACE, 20 /THIS OPCODE NOT DEFINED,SO WE PUT A CONST HERE READI /READ DEVICE OPCODE 11 WRITEI /WRITE DEVICE OPCODE 12 SWRITE /STRING WRITE OPCODE 13 FUNC5I /CALL FILE FUNCTION OPCODE 14 FUNC4I /CALL USER FUNCTION OPCODE 15 FUNC1I /CALL FUNCTIONS 1 OPCODE 16 FUNC2I /CALL FUNCTIONS 2 OPCODE 17 /ROUTINE TO SWAP PG 17600 WITH N7400 OR N7600 (WHICHEVER THE CASE MAY BE) /WHERE N IS THE HIGH CORE FIELD PSWAP, 0 TAD KK7600 /POINTER TO 17600 AND COUNTER DCA TEMP1 TAD PSFLAG /GET SWAPPING FLAGS RAR CML RAL /TOGGLE THE INPLACE BIT DCA PSFLAG /STORE IT BACK TAD HICORE /PICK UP ADDR OF HIGH CORE DCA TEMP2 /POINTER TO HIGH CORE P1CDF, HLT /DF TO HI CORE TAD I TEMP2 /GET WORD FROM HI CORE DCA TEMP4 /SAVE IT P2CDF, CDF 10 TAD I TEMP1 /GET WORD FROM 17600 P1CDF1, HLT /DF TO HI CORE AGAIN DCA I TEMP2 /PUT 17600 WORD IN HI CORE P2CDF1, CDF 10 TAD TEMP4 /GET SAVED HI CORE WORD DCA I TEMP1 /AND PUT IN 17600 ISZ TEMP2 /BUMP HI CORE POINTER KK7600, 7600 /CLA ISZ TEMP1 /BUMP 17600 POINTER AND CHECK FOR DONE JMP P1CDF /NO DONE-MOVE NEXT WORD CDF JMP I PSWAP /DONE-RETURN HICORE, 0 /POINTS TO LOCATION OF 17600 SAVE AREA IFNZRO EAE < /TEMPORARY INCLUSION FOR FFOUT /ADD OP TO FAC OADD, 0 CLL TAD AC2 TAD AC1 DCA AC1 /ADD GUARD BITS RAL TAD OPL TAD ACL DCA ACL /ADD LOW ORDER BITS RAL TAD OPH TAD ACH DCA ACH /ADD HIGH ORDER BITS JMP I OADD /SHIFT FAC LEFT 1 BIT AL1, 0 TAD AC1 CLL RAL DCA AC1 TAD ACL RAL DCA ACL TAD ACH RAL DCA ACH JMP I AL1 > /1 RL01 PATCH FOR BRTS // WAS PART OF THE BPAT.PA FILE *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 PAGE /LOAD SUBSCRIPT 1 OR 2 FROM FAC OR MEMORY LSUB2I, ISZ DCASUB JMP LSUB1I LS2I, ISZ DCASUB LS1I, JMS I [FACSAV /PRESERVE FAC JMS I ARGPRL /GET ARG POINTER INTO AC JMS I [FFGET /LOAD ARG INTO FAC (SKIPS NEXT INST ON RETURN) LSUB1I, JMS I [FACSAV /SAVE THE FAC JMS I [UNSFIX /GET INT(FAC) DCASUB, DCA S1 /SET RESULT AS SUBSCRIPT 1 JMS I [FACRES /RESTORE FAC TAD DCAS1 DCA DCASUB /FUDGE INSTR BACK JMP I [ILOOP /NEXT INSTRCUTION DCAS1, DCA S1 ARGPRL, ARGPRE /JMP DISPATCH FOR FUNC1 CALLS JMSI4, JMS I .+1 /CALL FOR CANNED FUNCTION SET 1 /JUMP TABLE FOR FUNCTION CALL 1 ATAN /FUNCTION BITS= 0 COS / 1 EXPON1 / 2 EXPON / 3 INT / 4 LOG / 5 SGN / 6 SIN / 7 RND / 10 FROOT / 11 /JUMP FOR FUNC2 DISPATCH JMSI5, JMP I .+1 /JMP OFF THE SET 2 TABLE /JUMP TABLE FOR FUNCTION SET 2 ASC /FUNCTION BITS= 0 CHR / 1 DATE / 2 LEN / 3 POS / 4 SEG / 5 STR / 6 VAL / 7 ERRORR / 10 /ERRORR MUST BE FUNCTION #10,ELSE "ERROPC" MUST CHANGE TRACE / 11 TPRINT / 12 /TPRINT MUST BE #12 OR TRHOOK+1 MUST CHANGE /DISPATCH FOR FUNC5 CALLS JMPFIL, JMP I .+1 /CALL FORR FILE MANIPULATING FUNCTIONS /JUMP TABLE FOR FILE FUNCTIONS CHAIN /FUNCTION BITS= 0 CLOSE / 1 OPENAF / 2 OPENAV / 3 OPENNF / 4 OPENNV / 5 FSTOP /INT. EXIT 6 /ERROR CALL FOR USER FUNCTIONS-USER FUNCTION SHOULD "JMS I (IA" IA, JMS I [ERROR /FUNCTION OVERLAY DRIVER FUNC4I, JMS I [XPRINT /PURGE TTY RING BUFFER JMP .-1 /BEFORE CALLING USER FUNCTION IAC /LOOK FOR OVERLAY FLAG=3 FUNC5I, IAC /LOOK FOR OVERLAY FLAG=2 FUNC2I, IAC /LOOK FOR OVERLAY FLAG=1 FUNC1I, DCA TEMP1 /LOOK FOR OVERLAY FLAG=0 CDF /DF TO THIS FIELD TAD TEMP1 /GET OVERLAY # AGAIN CIA /NEGATE TAD OVRLAY /COMPARE AGAINST OVERLAY FLAG SNA CLA /IS THE ONE WE WANT ALREADY RESIDENT? JMP OVDNE /YES-JUST JUMP TO FUNCTION TAD TEMP1 /NO-GET NUMBER OF OVERALY DESIRED TAD OATADI /USE AS OFFSET TO BUILD STARTING BLOCK TAD DCA TEMP2 /POINTS TO PROPER STARING BLOCK # TAD I TEMP2 /GET STARTING BLOCK FOR THIS OVERLAY DCA OVADD /PUT IN DRIVER CALL JMS I L7607 /CALL SYSTEM HANDLER 0500 /OVERLAY 3400-4600 3400 OVADD, . /STARTING BLOCK # OF OVERLAY OE, JMS I [ERROR /I/O ERROR TAD TEMP1 DCA OVRLAY /CHANGE RESIDENT FLAG OVDNE, TAD [SAC-1 /ENTER STRING FUNCTIONS WITH SACXR SET UP DCA SACXR TAD TEMP1 /FUNCTION # TAD JMSTAD /BUILD A TAD OF THE PROPER DISPATCH JMS DCA .+2 /PUT IN LINE JMS I [FBITGT /GET # OF FUNCTION DESIRED . /BUILD JUMP OFF JUMP TABLE FUJUMP, DCA .+1 /PUT JUMP IN LINE . /GO TO DESIRED FUNCTION JMP I [ILOOP /DONE OATADI, ARITHA L7607, 7607 OVRLAY, 0 /# OF CURRENTLY RESIDENT OVERLAY /0=ARITHMETIC,1=STRING,2=FILE,3=USER /OVERLAY TABLE-CONTAINS STARTING BLOCK # OF SYSTEM OVERLAYS /INITIALIZED BY LOADER ARITHA, . /STARTING BLOCK OF ARITHMETIC OVERLAY STRNGA, . /STARTING BLOCK OF STRING OVERLAY FILEFA, . /STARTING BLOCK OF FILE OVERLAY USRA, . /STARTING BLOCK OF USER FUNCTIONS JMSTAD, TAD I TADTAB TADTAB, JMSI4 JMSI5 JMPFIL JMSUSR /CALL FOR RESIDENT FUNCTION FUNC3I, JMS I [FBITGT /ISOLATE FUNCTION # TAD JMSI7 /MAKE A JUMP OFF JUMP TABLE JMP FUJUMP /PUT THE JUMP IN LINE AND EXECUTE IT JMSI7, JMP I .+1 /JUMP TABLE FOR RESIDENT FUNCTIONS XABSVL /FUNCTION BITS= 0 COMMA / 1 CRFUNC / 2 ILOOPF / 3 TAB / 4 PNT / 5 USE / 6 *1557 /****N.B.**** /THIS TABLE CANNOT BE MOVED!!!! /JUMP DISPATCH FOR USER ROUTINES JMSUSR, JMS I .+1 /JUMP TABLE FOR USER FUNCTIONS ILOOPF /USER FUNCTION 1 ILOOPF / 2 ILOOPF / 3 ILOOPF / 4 ILOOPF / 5 ILOOPF / 6 ILOOPF / 7 ILOOPF / 8 ILOOPF / 9 ILOOPF / 10 ILOOPF / 11 ILOOPF / 12 ILOOPF / 13 ILOOPF / 14 ILOOPF / 15 ILOOPF / 16 PAGE /SPECIAL FUNCTIONS SPFUNC, JMS I [FBITGT /ISOLATE FUNCTION BITS TAD JMPI6 /MAKE A JUMP OFF SPECIAL FUNCTION TABLE DCA .+1 /PUT IN LINE . JMPI6, JMP I .+1 /JUMP TO SPECIAL FUNCTION ROUTINE /SPECIAL FUNCTION JUMP TABLE SETF /SET FSWITCH 0 FRANDM /RANDOMIZE 1 FSTOPN /LEAVE INTERPRETER 2 SRLIST /STRING READ FROM DATA LIST 3 CSFN /SET FILE # TO TTY 4 RDLIST /READ DATA LIST 5 AMODE /SWITCH TO A MODE 6 SSMODE /SWITCH TO S MODE 7 /SUBROUTINE UNSFIX-UNSIGNED INTEGER FIX ROUTINE. FIXS A POSITIVE 12 BIT /NUMBER OUT OF FAC MANTISSA AND LEAVES RESULT IN AC.RESULT IS AN UNSIGNED, /12 BIT INTEGER UNSFIX, 0 CDF 0 TAD ACL /LOW MANTISSA CLL RAL /HI BIT OF LO MANTISSA TO LINK CLA TAD ACH /HIGH MANTISSA SPA /IS NUMBER POSITIVE? FM, JMS I [ERROR /NO-BOO!!! RAL /SHIFT THE SIGN BIT OUT AND THE MANTISSA OVER, DCA ACH /MAKING 12 BITS OF MANTISSA AND BINARY POINT BEFORE BIT 0 TAD ACX /GET EXPONENT SPA SNA CLA /IS X>1? JMP I UNSFIX /NO-FIX IT TO 0 TAD ACX /YES-GET EXPONENT TAD [-14 /SET BINARY POINT AT 12 SNA /DONE ALREADY? JMP UNSOUT /YES SMA /NO-IS # TOO BIG? FO, JMS I [ERROR /YES DCA ACX /NO-STORE COUNT TAD ACH /HI MANTISSA UNSLP, CLL RAR /SCALE RIGHT ISZ ACX /DONE? JMP UNSLP /NO JMP I UNSFIX /YES-RETURN UNSOUT, TAD ACH /ANSWER IN AC JMP I UNSFIX /RESTORE ROUTINE RESTOR, TAD ENTNO /GET CURRENT FILE # SNA CLA /IS IT 0? JMP RESDLS /YES-RESTORE DATA LIST JMS I (WRBLK /NO-WRITE CURRENT BUFFER STA /-1 TAD I IOTLOC /STARTING BLOCK-1 DCA I IOTBLK /SET CURRENT BLOCK # TAD I IOTBUF /GET BUFFER ADDRESS DCA I IOTPTR /USE IT TO RESET READ\WRITE POINTER TAD I IOTHDR /GET HEADER WORD AND (7435 /CLEAR EOF BIT,BUFFER WRITTEN BIT,AND CHAR # DCA I IOTHDR JMS I [NEXREC /READ FIRST BLOCK INTO BUFFER JMP I [ILOOP /DONE RESDLS, TAD DLSTRT /ADDRESS OF START OF INCORE DATA LIST DCA DATAXR /USE IT TO RESET DATA LIST POINTER JMP I [ILOOP /THATS ALL! /SUBROUTINE STFIND-WHEN CALLED,IF LINK=1 STRING ARRAY TABLE IS /USED,IF LINK=0 STRING SYMBOL TABLE IS USED. RETURNS WITH AC SET /TO CDF OF OPERAND STRING,STRPTR POINTING TO THE FIRST WORD /IN THE STRING, AND THE MAX LENGTH OF THE STRING IS IN STRMAX. ALSO, /THE ACTUAL LENGTH OF THE STRING IS IN STRCNT STFIND, 0 SZL /IS THIS AN ARRAY INST? JMP SAFIND /YES-POINTER IS INTO ARRAY TABLE TAD INSAV /GET INST AGAIN AND [377 /ISOLATE OPERAND POINTER DCA TEMP1 /NO-SAVE OPERAND POINTER TAD TEMP1 /N CLL RAL /2N TAD TEMP1 /3N (3 WORDS/ENTRY) TAD STSTRT /ADD BASE ADR OF STRING TABLE STCOM, DCA XR2 /POINTER TO THIS ENTRY IN STRING TABLE STDF, . /DF TO THAT OF SYMBOL TABLES (SET BY START) TAD I XR2 /GET POINTER TO STRING DCA STRPTR TAD I XR2 /GET CDF FOR OPERAND STRING DCA STRCDF /SAVE TAD I XR2 /GET -(MAX LENGTH OF STRING) DCA STRMAX /SAVE SNL /ARRAY ELEMENT? JMP STRCDF /NO-SKIP THIS SUBSCRIPT CALCULATION TAD S1 /GET SUBSCRIPT CLL CMA /SET UP 12 BIT COMPARE TAD I XR2 /GET DIMENSION SNL CLA /IS S1>DIMENSION? JMP I (SU /YES TAD STRMAX /NO-GET ELEMENT LENGTH CIA /MAKE POSITIVE CLL IAC /ROUND OFF TO NEAREST MULTIPLE OF 2 CLL RAR / DIVIDE BY TWO (COUNT/2=WORD COUNT) CLL IAC /ADD A WORD FOR HEADER DCA TEMP3 /# OF WORDS IN EACH ARRAY ELEMENT TAD S1 /GET SUBSCRIPT JMS I [MPY /S1*ELEMENT LENGTH (ASSUMES LINK UNCHANGED ON RETURN) TAD STRPTR /ARRAY OFFSET+POINTER TO A(0) DCA STRPTR /FINAL STRING POINTER RAL /CARRY TO BIT 11 TAD TEMP6 /ADD TO ACCUMLATED OVERLAPS FROM MULTIPLY CLL RTL RAL /PUT OVERLAP # INTO BITS 6-8 TAD STRCDF /ADD TO CDF IF NECESSARY DCA STRCDF /SAVE AGAIN STRCDF, 0 /DF TO STRING FIELD TAD I STRPTR CDF DCA STRCNT /STORE -(CURRENT LENGTH OF STRING) TAD STRCDF /CDF TO OPERAND IN AC DCA I (SSTEX /SETUP STRING STORE EXIT DF HERE JMS I (BYTSET /ENTER FUNCTIONS WITH BYTE POINTERS SETUP JMP I STFIND /RETURN SAFIND, TAD INSAV /GET INST AND (37 /ISOLATE OPERAND POINTER CLL RTL /4N (4 WORDS/ENTRY) TAD SASTRT /USE STRING ARRAY TABLE STL /SET LINK FOR ARRAY INST JMP STCOM /RETURN TO SUBROUTINE MAINLINE /PNT(X) /SEND 7BIT CHAR TO THE CURRENT FILE PNT, JMS I [UNSFIX /FIX X AND [177 /STRIP TO 7 ASCII BITS // // DSN 31.11.2 M // NOP // // TAD [200 /FORCE CHANNEL 8 JMS I [PUTCH /PUT IN FILE BUFFER JMP I [ILOOP /DONE PAGE /ROUTINE SFN-ROUTINE TO RESET POINTERS IN PAGE ZERO FILE POINTER /AREA TO REFLECT A CHANGE IN THE CURRENT FILE NUMBER SFN, JMS I [UNSFIX /FIX FAC TO GET FILE # CSFN, DCA ENTNO /IF ENTRY IS HERE,FILE #=0 (TTY) TAD ENTNO STL TAD (-4 /IS RESULT A LEGAL FILE #? SNL SZA CLA FN, JMS I [ERROR /NO-ERROR TAD ENTNO /PICK UP FILE NUMBER // // DSN PATCH 31.11.1.M // CLL RAL // TAD ENTNO // RTL // TAD ENTNO // NOP // // CLL RTL // RTL // CIA // TAD ENTNO // CIA /MULTIPLY BY SIZE OF IOTABLE IFNZRO IOTSIZ-15 <__ASSEMBLY ERROR__> TAD (TTYF /ADD TO BASE DCA XR1 /STORE IN TEMP TAD (IOTHDR-1 /NOW POINT AT PAGE 0 AREA DCA XR2 TAD (-IOTSIZ+3 /SETUP ALL BUT LAST 3 DCA TEMP2 TAD XR1 DCA I XR2 ISZ XR1 ISZ TEMP2 JMP .-4 /SET UP THE POINTERS NOW JMP I [ILOOP /--RETURN-- /GOSUB GOSUB, TAD I GSP SMA CLA GS, JMS I [ERROR /ERROR IF STACK OVERFLOW TAD I [CDFPSU /ELSE GET CDF INSTR DCA I GSP ISZ GSP TAD I (INTPC DCA I GSP /STORE INT PC ISZ GSP JMP I (SUCJMP /EXEC AS NORMAL GOTO NOW /GOSUB RETURN RETRNI, STA TAD GSP DCA GSP /POP STACK TAD I GSP /GET PC DCA I (INTPC STA TAD GSP /POP STACK DCA GSP TAD I GSP SMA GR, JMS I [ERROR /FATAL ERROR IF NO RETURN DCA I [CDFPSU JMP I (JFAIL /BUMP PC PAST ADDR WORD AND CONTINUE GSP, GSTCK /GOSUB STACK POINTER /FOR-LOOP JUMP ROUTINE /ENTER WITH AC = HORD JFOR, SNA /IS FAC=0? JMP I (JFAIL /YES-DO NOT JUMP TAD FSWITC /ADD FSWITCH SPA CLA /ARE SIGN BIT=FSWITCH? JMP I (JFAIL /NO-DO NOT JUMP JMP I (SUCJMP /YES-DO JUMP /ROUTINE TO INITIALIZE FSWITCH SETF, AC4000 AND ACH /ISOLATE SIGN OF MANTISSA DCA FSWITC /STORE IN FSWITCH JMP I [ILOOP /DONE FSWITC, 0 /ROUTINE TO RESET CHARACTER NUMBER TO 1 CNOCLR, 0 TAD I IOTHDR AND [7477 /SET CHAR BITS TO 0 DCA I IOTHDR JMP I CNOCLR /RETURN /ROUTINE TO ZERO THE CURRENT I/O BUFFER BLZERO, 0 STA TAD I IOTBUF DCA XR1 /POINT INTO THE BUFFER TAD [7400 DCA CNOBML /SET COUNT TO 400 WORDS TAD (232 /INSERT A ^Z IN THE BUFFER FIRST CDF 10 DCA I XR1 ISZ CNOBML JMP .-2 /LOOP FOR THE REST CDF JMP I BLZERO /--RETURN-- /BUMP 3 FOR 2 CHAR NUMBER FOR CURRENT FILE CNOBML, 0 TAD I IOTHDR /HEADER WORD TAD [100 /ADD 1 TO THE COUNT BITS DCA I IOTHDR JMP I CNOBML /DONE /STRING COMPARE /COMPARE SAC WITH MEMORY, BLANK EXTENDING THE /SHORTER STRING ON THE RIGHT SCOMP, DCA MODESW /SET INTERPRETER TO ARITH MODE NOW JMS I [FACCLR /TENTATIVELY ASSUME EQUAL (FAC = 0) SCOMLP, TAD STRCNT /IS THE MEMORY STRING EMPTY NOW? SNA CLA TAD L40 /PAD WITH SPACE IF YES SNA JMS I (LDB /LOAD NEXT BYTE IF NOT DCA TEMP2 TAD SACLEN /NOW IS THE SAC EMPTY SNA CLA TAD L40 /YES, PAD IT SNA TAD I SACXR /NO GET IT CLL CIA /COMPARE TO MEMORY TAD TEMP2 SZA CLA JMP SNEQ /JMP IF NOT EQUAL, L=SENSE OF COMPARE TAD STRCNT /IS MEMORY STRING DONE SZA CLA ISZ STRCNT /NO, BUMP COUNT L40, 40 /EFFECTIVE NOP TAD SACLEN /IS THE SAC EMPTY SZA CLA ISZ SACLEN /NO BUMP COUNT TAD SACLEN /GET SAC REMAINDER (SKP IF IS JUST ZERO) TAD STRCNT /ADD ARG REMAINDER SZA CLA JMP SCOMLP /LOOP IF BOTH NOT EMPTY JMP I [ILOOP /OTHERWISE EQUAL SNEQ, STA RAR DCA ACH /STORE SIGN BIT JMP I [ILOOP /--RETURN-- PAGE /STRING DATA LIST READ, STRING LOAD AND STRING CONCATENATE SRLIST, JMS I (DLREAD /FIRST READ NEG BYTE COUNT DCA STRCNT /STORE IT STL /SET LINK MEANS USE PHONY DATA LIST BYTE LOAD SKP /SKP INTO STRING LOAD ROUTINE SLOAD, CLL /CLEAR LINK TO USE NORMAL LOAD BYTE ROUTINE DCA SACLEN /CLEAR SAC LENGTH COUNTER SZL TAD (DRGCH-LDB /USE PHONY LOAD BYTE SCON1, TAD (LDB /USE REAL LDB FOR CONCATENATE DCA SCLDB TAD STRCNT SNA CLA JMP I [ILOOP /NOTHING TO DO IF NULL STRING TAD SACLEN /COMPUTE OFFSET INTO SAC CIA TAD [SAC-1 DCA SACXR /TO STORE AFTER END OF PREV STRING SEGCOM, JMS I SCLDB /GET A BYTE DCA I SACXR /STORE IT STA TAD SACLEN /NOW BUMP SIZE OF SAC DCA SACLEN TAD SACLEN /CHECK IF ROOM LEFT TAD (SACLIM SPA CLA SC, JMS I [ERROR /FATAL ERROR IF SAC OVERFLOW ISZ STRCNT JMP SEGCOM /ITERATE IF MORE JMP I [ILOOP /--RETURN-- SCLDB, 0 /ROUTINE TO GET A BYTE FROM THE DATA LIST DRGCH, 0 TAD SACLEN /TEST FOR EVEN OR ODD CLL RAR SZL CLA JMP CHR2 /SECOND CHAR JMS I (DLREAD /FIRST CHAR, READ ANOTHER WORD DCA DRCHR TAD DRCHR CLL RTR RTR RTR /SHIFT RIGHT SKP CHR2, TAD DRCHR /GET SECOND CHAR AND [77 /MASK TO 6BIT JMP I DRGCH /RETURN DRCHR, 0 /ROUTINE TO SET EOF BIT IN I/O ENTRY EOFSET, TAD I IOTHDR /HEADER CLL RTR /EOF BIT TO LINK STL RTL /SET LINK /PUT LINK IN EOF BIT DCA I IOTHDR /STORE IN I/O TABLE ENTRY JMP I [ILOOP /EOF BIT SET-ABORT TO ILOOP /SUBROUTINE MPY- 12 BIT BY 12 BIT MULTIPLY. MULTIPLIES THE CONTENTS /OF TEMP3 BY THE CONTENTS OF THE AC,LEAVING THE HI RESULT IN TEMP6 /AND THE LOW RESULT IN THE AC MPY, 0 DCA TEMP10 DCA TEMP6 TAD [-14 DCA TEMP5 MP12LP, TAD TEMP3 RAR DCA TEMP3 TAD TEMP6 SNL JMP .+3 /12 BIT MULTIPLY USED TO FIND (DIM1+1)*S2 CLL TAD TEMP10 RAR DCA TEMP6 ISZ TEMP5 JMP MP12LP TAD TEMP3 /LORD OF (DIM1+1)*S2 IN AC RAR /HORD OF (DIM1+1)*S2 IN TEMP6 JMP I MPY /RETURN /ROUTINE TO CHECK IF FILE IDLE IDLE, 0 TAD I IOTHND /GET HANDLER ENTRY SNA CLA /IS IT EMPTY? FI, JMS I [ERROR /YES-USER TRIED TO DO SOMETHING TO AN UNOPEN FILE JMP I IDLE /NO-RETURN /ROUTINE TO READ NEXT WORD IN DATALIST INTO AC DLREAD, 0 TAD DATAXR /DATA LIST POINTER CLL CMA /SET UP 12 BIT COMPARE TAD DLSTOP /ADDR OF END OF DATA LIST SNL CLA /POINTER AT END OF LIST? DA, JMS I [ERROR /YES DLCDF, . /NO-DF TO DATA LIST TAD I DATAXR /FETCH WORD FROM DATA LIST CDF JMP I DLREAD /DONE /RANDOMIZE STATEMENT FRANDM, TAD SPINNR /USE SPINNR FOR NEW SEED FOR RND(X) STL RAL /MAKE SURE SEED IS ODD DCA RSEED JMP I [ILOOP /DONE RSEED, 2713 /SUBROUTINE CR,LF CRLFR, 0 TAD [215 JMS I [PUTCH TAD (212 JMS I [PUTCH /PRINT A CR,AND LF DCA I IOTPOS /ZERO NUMBER OF CHARS PRINTED SO FAR JMP I CRLFR /SUBROUTINE FOTYPE /RETURNS TO CALL+1 IF FILE FIXED LENGTH,CALL+2 IF VARIABLE FOTYPE, 0 TAD I IOTHDR /GET HEADER AND (4 /ISOLATE TYPE BIT SZA CLA /IS IT FIXED LENGTH? ISZ FOTYPE /NO-BUMP RETURN JMP I FOTYPE /RETURN /ABS(X) FUNCTION XABSVL, JMS ABSVAL /NEGATE FAC IF NEGATIVE JMP I [ILOOP /--RETURN-- /SUBROUTINE TO TAKE ABS VALUE OF FAC ABSVAL, 0 TAD ACH SPA CLA /IS FAC<0? JMS I [FFNEG /YES-NEGATE IT JMP I ABSVAL /RETURN /ROUTINE TO RESTORE THE FAC FROM FP TEMP FACRES, 0 JMS I [FFGET /GET FAC INTERB JMP I FACRES /RETURN PAGE /STRING STORE SSTORE, TAD SACLEN SNA JMP I (SSTEX /EXIT IF NULL STRING IN SAC DCA TEMP1 /SET COUNT TAD SACLEN /SEE IF WILL FIT CIA TAD STRMAX SMA SZA CLA /SKP IF LEN.LE.MAX LEN SL, JMS I [ERROR /ERROR IF TARGET STRING TOO SMALL TAD I SACXR /PICK UP SAC BYTE JMS I (DPB /STORE IT ISZ TEMP1 JMP .-3 JMP I (SSTEX /--RETURN-- /STRING READ FROM FILE TO MEMORY SREAD, JMS I [GETCH /GET CHAR FROM FILE TAD CHAR TAD [-215 /IS IS CR? SNA JMP I (SSTEX /YES, EXIT TAD (3 /IS IT LF? SNA CLA JMP SREAD /YES, IGNORE IT TAD I (BYTCNT /SEE IF THIS CHAR WILL FIT TAD STRMAX SMA CLA JMP ST /NO, SOFT ERROR TAD CHAR /YES, STORE IT JMS I (DPB JMP SREAD ST, JMS I [ERROR TAD [215 /FAKE OUT INPUT ROUTINE DCA CHAR JMP I (SSTEX /SET STRING SIZE AND EXIT /STRING WRITE FROM SAC TO DEVICE SWRITE, DCA COMMAS TAD SACLEN /SEE IF NULL STRING SNA JMP I [ILOOP /RETURN IF SO CIA TAD I IOTPOS /ADD TO NUMBER OF CHARS PRINTED SO FAR TAD (-WIDTH SMA SZA CLA /SKP IF LE WIDTH OF LINE JMS I [CRLFR /ELSE RESET CARRAIGE TAD SACLEN DCA STRCNT /SET LOOP COUNTER TAD [SAC-1 DCA SACXR /POINT AT SAC SWRLP, TAD I SACXR TAD (240 AND [77 TAD (240 /CONVERT TO 8BIT JMS I (PUTCH ISZ STRCNT JMP SWRLP /ITERATE IF MORE JMP I [ILOOP /--RETURN-- /COMMA FUNCTION (KNOWN ONLY TO COMPILER FOR FORMATTING PRINT /STATEMENTS) COMMA, JMS I [FTYPE /SKP IF FILE IS ASCII JMP I [ILOOP /NO-COMMA FUNCTION IS A NOP TAD COMMAS /GET COMMA SWITCH SNA CLA /WAS LAST THING PRINTED A COMMA? JMP .+3 /NO-WE ARE OK TAD (" /YES-PRINT A SPACE BEFORE DOING COMMA CALCULATION JMS I [PUTCH IAC DCA COMMAS /SET COMMA SWITCH TAD (-4 DCA TEMP2 TAD I IOTPOS /GET NUMBER OF CHARS PRINTED SO FAR COMLOP, TAD (-COLWID SPA /PAST THIS ONE? JMP SLOVER /YES-SLIDE PRINT HEAD TO START OF NEXT SNA /EXACTLY ON A COLUMN? JMP I [ILOOP /YES-DONE ISZ TEMP2 /ALL MARKERS CHECKED YET? JMP COMLOP /NO-DO NEXT CLA /FALL INTO CR ROUTINE TO RESET COL TO 0 /CARRIAGE RETURN FUNCTION (KNOWN ONLY TO COMPILER FOR TERMINATING /PRINT STATEMENTS) CRFUNC, TAD I IOTHDR CLL RTR SNL CLA /SKP IF EOF IS SET JMS I [FTYPE /SKP IF FILE IS ASCII JMP I [ILOOP /WE DON'T WANT TO OUTPUT CLFR JMS I [CRLFR /DO AS WE ARE TOLD JMP I [ILOOP /NEXT INST /TAB FUNCTION TAB, JMS I [UNSFIX /FIX X TO INTEGER CIA /NEGATE TAD I IOTPOS /COMPARE DESIRED COLUMN TO REAL COLUMN IAC /BUMP BY 1 (WORD 7=COL #-1) SMA /IS X>=CURRENT COLUMN? JMP I [ILOOP /YES-THEN DO NOTHING /FALL INTO SPACE OUT ROUTINE SLOVER, DCA COLCNT /-# OF COLUMNS TO NEXT MARKER JMS I [FTYPE /IS FILE NUMERIC? JMP I [ILOOP /YES-THIS IS A NOP TAD (" /GET SPACE JMS I [PUTCH /PRINT IT ISZ COLCNT /THERE YET? JMP .-3 /NO-TYPE ANOTHER SPACE JMP I [ILOOP /YES-DONE COMMAS, 1 /SET TO 1 IF LAST PRINT WAS A COMMA MOVE COLCNT, 0 /ROUTINE TO CALL ERROR ROUTINE BY FAKING A FUNC2 CALL TO FUNCTION #10 ERROR, 0 CLA CLL IAC /ENTRY AC RANDOM AND PSFLAG /TEST IF OS/8 17600 RESIDENT SZA CLA /SKP IF NOT JMS I [PSWAP /ELSE FORCE IT OUT (THESE ERRORS ARE FATAL) TAD (7607 DCA INSAV /FAKE A FUNC CALL TO FUNC2 #10 JMP I (FUNC2I XERRRET,JMP I ERROR /RETURN TO CALLER IF NON FATAL ERROR /FLOATING NEGATE FNEGI, JMS I [FFNEG /CALL NEGATE ROUTINE JMP I [ILOOP /RETURN TO ILOOP NUMBUF, ZBLOCK 6 /6 DIGIT BUFFER USED BY FFOUT PAGE /INCREMENT AND LOAD 6BIT BYTE FROM MEMORY LDB, 0 JMS BUMP /INCREMENT POINTER AND SET DF TAD I BYTPTR /PICK UP BYTE CDF ISZ BYTSWT /TEST HALFWORD SWITCH JMP .+4 CLL RTR RTR RTR AND [77 /MASK TO 6BIT JMP I LDB /RETURN WITH CHAR IN AC /INCREMENT AND DEPOSIT BYTE IN MEMORY DPB, 0 AND [77 /MASK TO 6BIT NOW DCA BYTE JMS BUMP /INCREMENT POINTER AND SET DF TAD [77 /GET MASK ISZ BYTSWT /SKP IF PTR BUMPED CMA CML /ELSE PRESERVE LEFT HALF AND I BYTPTR /ZERO OUT TARGET BYTE DCA I BYTPTR TAD BYTE /GET BYTE SZL JMP .+4 /JMP IF NO SHIFT CLL RTL RTL RTL TAD I BYTPTR DCA I BYTPTR /STORE BYTE CDF ISZ BYTCNT /TALLY NUMBER OF BYTES STORED JMP I DPB /--RETURN-- /BUMP BYTE POINTER BUMP, 0 TAD BYTSWT /BUMP LOW ORDER BIT CLL CMA DCA BYTSWT ISZ BYTSWT /SKP IF NO CARRY ISZ BYTPTR /ELSE BUMP WORD PTR JMP BYTCDF /JMP OUT IF FIELD NOT CROSSED TAD [10 TAD BYTCDF DCA BYTCDF /PROPAGATE CARRY INTO CDF INSTR BYTCDF, 0 /GETS SET BY BYTSET TO TARGET FIELD JMP I BUMP /RETURN WITH A CLEAR LINK /BYTE LOAD/STORE INITIALIZE ROUTINE BYTSET, 0 TAD SSTEX /GET FIELD OF STRING DCA BYTCDF /STORE INLINE TAD STRPTR /NOW GET ADDR OF COUNT WORD DCA BYTPTR /STORE IAC DCA BYTSWT /SET LOW ORDER BIT TO CARRY NEXT TIME DCA BYTCNT /CLEAR DEPOSITED BYTE COUNT TAD [SAC-1 DCA SACXR /ALWAYS RETURN WITH SAC POINTER SET UP JMP I BYTSET /--RETURN-- /STRING STORE EXIT ROUTINE SSTEX, 0 /GETS SET BY STFIND TO DF OF STRING TAD BYTCNT /ENTER WITH POSITIVE LENGTH IN COUNT CIA DCA I STRPTR /STORE IN STRING JMP I [ILOOP /--RETURN-- (ILOOP RESETS DF) BYTCNT, 0 BYTPTR, 0 BYTSWT, 0 BYTE, 0 /SUBROUTINE BUFCHK-CHECKS THE POSITION OF THE BUFFER POINTER FOR /THE DEVICE WHOSE I/O TABLE ENTRY IS IN WORKING AREA. RETURNS TO CALL+1 /IF THE POINTER IS AT THE END AND CHAR NUMBER IS 1 (LAST /AVAILABLE CHAR 3 HAS BEEN USED),CALL+2 IF THE POINTER IS AT THE /END BUT THE CHAR # IS NOT 1 (THERE IS 1 CHAR 3 LEFT), CALL+3 /IF THERE IS 1 WORD LEFT IN BUFFER,CALL+4 IF MORE THAN 1 LEFT. BUFCHK, 0 TAD ENTNO /GET DEVICE # SNA CLA /IS IT TTY? TAD (62-400 /YES-CHECK FOR A BUFFER 60 WORDS LONG TAD [400 /NO-CHECK FOR A BUFFER 400 WORDS LONG TAD I IOTBUF /ADD LENGTH TO BUFFER ADDRESS CIA /-ADDR OF END OF BUFFER TAD I IOTPTR /CHECK AGAINST CURRENT POINTER SNA /IS POINTER AT END OF BUFFER? JMP EBC /AT END-CHECK THE CHAR # ISZ BUFCHK ISZ BUFCHK /NO-BUMP RETURN IAC SNA CLA /WAS POINTER AT LAST WORD? JMP I BUFCHK /YES-RETURN TO CALL+3 ISZ BUFCHK /NO JMP I BUFCHK /RETURN TO CALL+4 EBC, JMS I [CHARNO /GET CHAR # JMP I BUFCHK /IT WAS 1-RETURN TO CALL+1 NOP /IT WAS 3-RETURN TO CALL+2 ISZ BUFCHK /IT WAS 2-RETURN TO CALL+2 JMP I BUFCHK /SUBROUTINE PACKCH-PACKS ASCII CHARS,3 FOR 2, INTO BUFFER FOR THE /DEVICE IN WORK AREA. CALL WITH THE CHARACTER IN THE AC PACKCH, 0 DCA TEMP1 /SAVE JMS I [CHARNO /DETERMINE CHARACTER NUMBER SKP /1 JMP CHAR3P /3 TAD TEMP1 /1 OR 2-GET CHAR AGAIN JMS I [WRITFL /STORE IN BUFFER JMS I (CNOBML /BUMP CHARACTER NUMBER JMP I PACKCH /DONE CHAR3P, AC7776 TAD I IOTPTR /BACK BUFFER POINTER UP TO POINT TO CHAR 1 DCA I IOTPTR TAD TEMP1 /CHAR CLL RTL RTL /SLIDE LEFT HALF INTO BITS 0-3 DCA TEMP1 /SAVE TAD TEMP1 JMS COMBNE /ISOLATE LEFT HALF,COMBINE WITH CHAR1,AND PUT IN FILE TAD TEMP1 /CHAR AGAIN CLL RTL RTL /SLIDE RIGHT HALF INTO BITS 0-3 JMS COMBNE /ISOLATE RIGHT HALF,COMBINE WITH CHAR 2,AND PUT IN FILE JMS I [CNOCLR /CLEAR THE CHARACTER NUMBER (RESET IT TO 1) JMP I PACKCH /DONE COMBNE, 0 AND [7400 /ISOLATE HALF IN QUESTION DCA TEMP2 /SAVE JMS I (BCGET /GET A WORD FROM FILE BUFFER IN FIELD 1 AND [377 /FLUSH ANY SLUSH IN BITS 0-3 TAD TEMP2 /COMBINE JMS I [WRITFL /PUT IN BUFFER JMP I COMBNE /RETURN PAGE /ROUTINE TO READ WORD FROM FILE BUFFER AND BUMP POINTER READFL, 0 JMS I (FOTYPE /IS FILE VARIABLE LENGTH SKP VR, JMS I [ERROR /YES-IT IS AN ERROR TO TRY AND READ IT TAD I IOTHDR /CHECK IF MORE THERE CLL RTR /EOF BIT TO LINK SNL CLA /EOF? JMP .+3 /NO-CONTINUE RE, JMS I [ERROR /YES-ATTEMPT TO READ BEYOND EOF JMP I [ILOOP /NOT FATAL-RETURN TO I LOOP JMS BCGET /GET WORD FROM FILE BUFFER ISZ I IOTPTR /BUMP POINTER JMP I READFL /DONE /ROUTINE TO WRITE AC IN FILE BUFFER AND INCREMENT POINTER WRITFL, 0 JMS I (BCPUT /STORE AC IN FILE BUFFER ISZ I IOTPTR /BUMP POINTER TAD I IOTHDR /GET FILE HEADER WORD CLL RTR /EOF BIT TO LINK SNL CLA /WAS FILE PAST END? JMP I WRITFL /NO-RETURN WE, JMS I [ERROR /YES-ATTEMPT TO WRITE PAST END OF FILE JMP I [ILOOP /NON-FATAL RETURN TO ILOOP /ROUTINE TO GET ONE WORD FROM FILE BUFFER IN FIELD 1 BCGET, 0 JMS I [IDLE /CHECK IF FILE OPEN TAD I IOTPTR /GET READ WRITE POINTER DCA WRITFL /SAVE TAD ENTNO /GET FILE # SZA CLA /IF TTY,BUFFER FIELD IS 0 CDF 10 /DF TO BUFFER FIELD TAD I WRITFL /GET WORD FROM BUFFER CDF JMP I BCGET /RETURN /SUBROUTINE UNPACK-UNPACKS ASCII, 3 FOR 2 ,FROM THE FILE IN THE I/O /WORKING AREA. RETURNS WITH THE CHAR IN CHAR. UNPACK, 0 JMS I [CHARNO /GET CHAR # SKP /1 JMP CHAR3U /3 JMS I (CNOBML /BUMP CHAR NUMBER JMS READFL /GET CHAR AGAIN U123C, AND [177 /STRIP OFF 7 BITS SNA JMP UNPACK+1 /ZERO TAD [200 DCA CHAR /SAVE TAD CHAR TAD (-232 /IS IT CTRL/Z? SNA CLA JMP I [EOFSET /YES-SET EOF BIT JMP I UNPACK /RETURN CHAR3U, JMS I [CNOCLR /RESET CHAR # TO 1 AC7776 TAD I IOTPTR DCA I IOTPTR /BACK BUFFER POINTER UP 2 JMS READFL /GET LEFT HALF OF CHAR AND [7400 DCA XR5 /SAVE JMS READFL /GET NEXT WORD WITH RIGHT HALF AND [7400 /ISOLATE RIGHT HALF CLL RTR RTR /SLIDE RIGHT HALF OVER TAD XR5 /COMBINE WITH LEFT HALF CLL RTR RTR /MOVE TO BITS 4-11 JMP U123C /REJOIN MAINLINE /READ FUNCTION-GETS NUMBERS INTO VARIABLES READI, JMS I [FTYPE /SKP IF FILE IS ASCII JMP RIMAGE /READ NUMERIC IMAGE JMS I (FFIN /READ ASCII INTO NUMBER JMP I [ILOOP /--RETURN-- RIMAGE, JMS I [BUFCHK /YES-CHECK BUFFER POINTER NOP /PAST END-NEXT RECORD NOP /AT END-NEXT RECORD JMS I [NEXREC /ONLY 1 WORD LEFT-IT IS UNUSED IN NUMERIC FMT JMS READFL /GET WORD FROM FILE DCA ACX /STORE AS EXPONENT JMS READFL /GET WORD FROM FILE DCA ACH /STORE AS HIGH MANTISSA JMS READFL /GET WORD FROM FILE DCA ACL /STORE AS LOW MANTISSA JMP I [ILOOP /DONE /ROUTINE TO FETCH ASCII CHARACTERS FROM FILE BUFFER GETCH, 0 JMS I [FTYPE /IS FILE ASCII? SR, JMS I [ERROR /NO-ERROR TAD ENTNO SZA CLA JMP NTTY TAD TCHAR TAD [-215 SNA CLA JMS I [DRCALL NTTY, JMS I [BUFCHK /NO-CHECK STATUS OF BUFFER JMS I [NEXREC /LAST CHAR READ-NEXT RECORD NOP /CHAR 3 NOT USED YET TCHAR, 215 /NOP: CHAR 2 AND 3 LEFT JMS UNPACK /UNPACK CHAR FROM BUFFER TAD ENTNO SZA CLA JMP I GETCH /RETURN TAD CHAR DCA TCHAR JMP I GETCH /SUBROUTINE CHARNO-RETURNS TO CALL+1 IF CHAR #=1,CALL+2 IF 3,CALL+3 /IF 2 CHARNO, 0 TAD I IOTHDR /HEADER AND (300 /ISOLATE CHAR # CLL RTL RTL /CHAR # TO BITS 0,1 SMA SZA /IS IT 2? ISZ CHARNO /YES-BUMP RETURN SZA CLA /IS IT 2 OR 3? ISZ CHARNO /YES-BUMP RETURN JMP I CHARNO /RETURN PAGE /WRITE FUNCTION-PUTS NUMBERS IN FILE BUFFERS WRITEI, JMS I [FTYPE /SKP IF FILE IS ASCII JMP WIMAGE /ELSE DO IMAGE WRITE JMS I (FFOUT /CONVERT INTERNAL TO ASCII TAD XR1 CIA TAD (INTERB-1 /CALCULATE NUMBER OF CHARS STORED IN BUFFER DCA TEMP10 /SAVE TAD (INTERB-1 DCA SACXR /NOW POINT SACXR INTO BUFFER TAD TEMP10 /GET COUNT OF CHARS TO BE PRINTED CIA TAD I IOTPOS /ADD TO PRINT HEAD POSITION TAD (-WIDTH /COMPARE AGAINST "72" SMA SZA CLA /WILL THE NUMBER FIT ON THIS LINE? JMS I [CRLFR /NO-ISSUE A CR,LF CPLOOP, TAD I SACXR /GET CHAR FROM INTERMEDIATE BUFFER JMS PUTCH /PUT ON DEVICE ISZ TEMP10 /BUMP COUNTER JMP CPLOOP /NEXT TAD O240 JMS PUTCH /SEND OUT A SPACE AFTER NUMBER JMP WDONE /TAKE COMMON EXIT WIMAGE, JMS I [BUFCHK /FILE IS NUMERIC-CHECK BUFFER STATUS O240, 240 /PAST END-NEW RECORD (AND INST SERVES AS NOP) O210, 0210 /AT END-NEW RECORD (AND SERVES AS NOP) JMS I [NEXREC /ONE WORD LEFT-DON'T USE IT TAD ACX /EXPONENT JMS I [WRITFL /WRITE IN BUFFER TAD ACH /HIGH MANTISSA JMS I [WRITFL /WRITE IN BUFFER TAD ACL /LOW MANTISSA JMS I [WRITFL /WRITE IN BUFFER WDONE, DCA I (COMMAS /CLEAR COMMA SWITCH JMP I [ILOOP /WRITE IS DONE /ROUTINE TO PUT ASCII CHARS IN FILE BUFFER. IGNORES RUBOUTS. PUTCH, 0 DCA TEMP1 /SAVE CHAR TAD TEMP1 /GET CHAR AGAIN TAD (-377 SNA CLA /IS IT A RUBOUT? JMP I PUTCH /YES-RETURN JMS I [FTYPE /IS FILE NUMERIC? SW, JMS I [ERROR /YES-ERROR ISZ I IOTPOS /BUMP COULMN NUMBER TAD ENTNO /GET ENTRY # SNA CLA /IS IT TTY? JMP TOUT /YES-JUST PUT CHARS IN RING BUFFER JMS I [BUFCHK /NO-IS BUFFER FULL? JMS I [NEXREC /YES-NEXT RECORD O40, 40 /THERE IS A CHAR 3 LEFT (AND IS A NOP) O20, 20 /THERE IS A CHAR 2 AND 3 LEFT (AND IS A NOP) TAD TEMP1 /GET CHAR AGAIN JMS I [PACKCH /PUT IN BUFFER JMP I PUTCH /RETURN TOUT, TAD TEMP1 /GET CHAR JMS I [XPUTCH /PUTCH CHAR IN OUTPUT BUFFER FOR TTY JMP I PUTCH /RETURN /SUBROUTINE NEXREC-WRITES THIS BUFFER IN FILE,THEN READS IN NEXT BUFFER /IF POSSIBLE,ELSE SETS EOF BIT. IF DEVICE IS READ OR WRITE ONLY /IT JUST READS OR WRITES A BLOCK,WHICHEVER IS APPROPRIATE NEXREC, 0 TAD I IOTHDR /GET HEADER AND O20 /GET READ/WRITE ONLY BIT SNA CLA /IS IT ON? JMP FILSTR /NO-DEVICE IS FILE STRUCTURED JMS I (FOTYPE /YES-IS IT INPUT OR OUTPUT FILE? JMP RONLY JMS WRBLK RWONC, ISZ I IOTBLK JMS BLINIT /INIT FILE TABLE ENTRIES JMP I NEXREC /DONE RONLY, JMS BLREAD JMP RWONC FILSTR, JMS WRBLK /WRITE THE CURRENT BLOCK IF IT HAS BEEN CHANGED JMS BLINIT /INIT FILE TABLE ENTRIES ISZ I IOTBLK /BUMP BLOCK # TAD I IOTLOC /STARTING BLOCK CIA /NEGATE TAD I IOTBLK /SUBTRACT FROM CURRENT BLOCK FOR FILE LENGTH CLL CMA /SET UP CURRENT FILE LENGTH FOR 12 BIT COMPARE TAD I IOTLEN /COMPARE TO ACTUAL LENGTH SNL CLA /IS IT > CURRENT LENGTH? JMP LASTB /YES-EXTEND THE FILE IF IT IS OUTPUT JMS BLREAD /READ IN THE NEXT RECORD JMP I NEXREC /RETURN LASTB, JMS I (FOTYPE /IS FILE FIXED LENGTH? JMP I [EOFSET /YES-SET EOF FLAG TAD I IOTLEN /NO-GET ACTUAL LENGTH CLL CMA TAD I IOTMAX /MAXIMUM LENGTH SNL CLA /IS ACTUAL LENGTH >= MAXIMUM LENGTH? JMP I [EOFSET /YES-SET EOF BITS ISZ I IOTLEN /NO-BUMP ACTUAL LENGTH JMP I NEXREC /RETURN WITHOUT READING NEXT RECORD /ROUTINE TO READ 2 PAGES FROM DEVICE BLREAD, 0 JMS I (BLZERO TAD O210 /"READ 2 PAGES" JMS I [DRCALL /HANDLER CALL JMP I BLREAD /ROUTINE TO WRITE 2 PAGES ONTO DEVICE WRBLK, 0 TAD I IOTHDR /GET FILE HEADER AND O40 /GET FILE WRITTEN BIT SNA CLA /HAS THIS BLOCK BEEN CHANGED? JMP I WRBLK /NO-RETURN TAD (4210 /"WRITE 2 PAGES" JMS I [DRCALL /CALL TO DEVICE HANDLER JMS I (BLZERO JMP I WRBLK /ROUTINE TO INITIALIZE I/O TABLE ENTRIES AFTER READ OR WRITE BLINIT, 0 TAD I IOTBUF DCA I IOTPTR /INIT READ/WRITE POINTER TAD I IOTHDR AND (7437 /SET CHAR # TO 1 AND CLEAR BLOCK WRITTEN BIT DCA I IOTHDR JMP I BLINIT /ROUTINE TO SAVE THE FAC IN FP TEMP FACSAV, 0 JMS I [FFPUT /STORE FAC INTERB /USE INTERMEDIATE BUFFER FOR TEMP STORAGE JMP I FACSAV /RETURN PAGE ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// //////////// OVERLAY BUFFER 3400-4600 //////////////////// //////////// CONTAINS FUNCTION OVERLAYS //////////////////// //////////// AT RUN TIME //////////////////// ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// ////////////// OVERLAY 1-ARITHMETIC FUNCTIONS /////////////// ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// *OVERLAY /INTEGER FUNCTION /RANGE=ALL X INT, VERSON^100+SUBVAF+6000 /INITIALLY CONTAINS VERSION OF ARITH OVERLAY JMS I [FFPUT /SAVE X FPPTM1 TAD ACX /GET EXPONENT SMA SZA CLA /IS EXP<0? JMP INSC /NO-GO ON TAD ACH /YES SPA CLA /IS X<0? JMP M1R /YES-INT=-1 JMS I [FACCLR /YES-RETURN A 0 JMP I INT INSC, TAD ACH /GET HI MANTISSA SMA CLA /IS IT <0? JMP INTPOS /NO-USE FAC AS IS JMS I [FFNEG /YES-NEGATE FAC (MAKE IT POS) IAC /AND SET FLAG INTPOS, DCA TEMP3 /FLAG FOR NEGATIVE DCA TEMP5 /ZERO LORD MASK CLL CML RAR DCA TEMP4 /INITIALIZE HORD MASK TO 4000 TAD ACX CIA /- COUNT DCA TEMP2 MASKL, TAD TEMP4 CLL CML RAR /ROTATE 1'S THROUGH 3 WORD MASK DCA TEMP4 / TAD TEMP5 /UNTIL THERE IS A COUNT OF ZERO RAR DCA TEMP5 ISZ TEMP2 /DONE? JMP MASKL /NO TAD ACH /YES-MASK HORD AND TEMP4 DCA ACH TAD ACL /MASK LORD AND TEMP5 DCA ACL TAD TEMP3 /NEG FLAG SNA CLA /WAS ORIGINAL NUMER <0? JMP I INT /NO-DONE JMS I [FFPUT /SAVE INT(X) FPPTM2 JMS I (FFADD /-INT(X)+(X) FPPTM1 TAD ACH /SAVE HORD DCA TEMP3 JMS I [FACCLR /FLUSH FAC TAD TEMP3 /WAS INT(X)=X? SNA CLA JMP JUSNEG /YES-JUST NEGATE INT(X) JMS I (FFADD /NO-ADD 1 ONE JUSNEG, JMS I (FFADD /GET INT(X) FPPTM2 JNEG, JMS I [FFNEG /AND NEGATE (INT(5.3)=-6) JMP I INT /DONE M1R, JMS I [FFGET /LOAD FAC WITH 1 ONE JMP JNEG /JUST NEGATE AND RETURN ONE, 1 2000 0 /EXPONENTIATION FUNCTION /IF B=0,A^B=1 /IF A=0 AND B>0,A^B=0 /IF A=0 AND B<0,DIVIDE BY ZERO ERROR MESSAGE RESULTS AND A^B=0 /IF B=INTEGER > 0, A^B=A*A*A*.......*A /IF B=INTEGER < 0, A^B=1/A*A*A*.......*A /IF B=REAL AND A>0, A^B=EXP(B*LOG(A)) /IF B=REAL AND A<0, A FATAL ERROR RESULTS EXPON, 0 JMS I [FFPUT /SAVE A FPPTM5 JMS I [FFPUT /SET UP RUNNING PRODUCT IN CASE OF FPPTM4 /MULTIPLIES TAD ACH /HI ORDER OF A DCA EXPON /SAVE IT DCA INSAV /POINTER TO B IN SYMBOL TABLE JMS I ARGPLL /FIND B JMS I [FFGET /GET B ARGPLL, ARGPRE /LOC SKIPPED BY FPP,SO WE USE IT FOR CONSTANT CDF TAD ACH /HI ORDER OF B SNA /IS B=0? JMP I (RETRN1 /YES A^B=1 SMA CLA /IS B<0? JMP .+4 /NO TAD EXPON /YES-GET HI ORDER A SNA CLA /IS A=0? JMP I (DV /YES-DIVIDE BY ZERO ERROR TAD EXPON /B>0. IS A=0? SNA CLA JMP RET0 /YES A^B=0 JMS I [FFPUT /SAVE B FPPTM3 JMS INT /GET INT(B) JMS I (MULLIM /TEST EXPONENT OF RESULT TO LIMIT LARGE MULTIPLY LOOPS JMS I (FFSUB /INT(B)-B FPPTM3 TAD ACH /IS INT(B)-B=0? SZA CLA JMP I (USELOG /NO-USE LOGS JMS I [FFGET /NO-USE REPETITIVE MULTIPLY FPPTM3 /GET B AGAIN TAD ACH DCA EXPON /SAVE SIGN OF B JMS I (ABSVAL /!B! JMS I [FFPUT /USE ABS(B) AS MULTIPLY COUNT FPPTM3 EMLOOP, JMS I [FFGET /GET B FPPTM3 JMS I (FFSUB /B-1 ONE JMS I [FFPUT /SAVE NEW COUNT FPPTM3 TAD ACH SNA CLA /IS COUNT ZERO YET JMP I (EMDONE /YES-MULTIPLIES ARE DONE JMS I [FFGET /NO-GET RUNNING PRODUCT FPPTM4 JMS I (FFMPY /MULTIPLY BY A FPPTM5 JMS I [FFPUT /SAVE NEW RUNNING PRODUCT FPPTM4 JMP EMLOOP RET0, JMS I [FACCLR /RETURN WITH 0 IN FAC JMP I [ILOOP PAGE EMDONE, JMS I [FFGET /GET RUNNING PRODUCT FPPTM4 TAD I EXPONK /GET SIGN OF B SMA CLA /WAS IT -? JMP I [ILOOP /NO-A^B=A*A*A*...*A JMS I FIDVP /YES-INVERT ONE JMP I [ILOOP /A^B=1/A:A*A*...*A RETRN1, JMS I [FFGET ONE /SET FAC TO 1 JMP I [ILOOP USELOG, TAD I EXPONK /SIGN OF A SPA CLA /A<0? EM, JMS I [ERROR /YES-PRINT A MESSAGE JMS I [FFGET /LOAD A FPPTM5 JMS I FFLOGL /LOG(A) JMS I FMPYLV /B*LOG(A) FPPTM3 JMS I FFEXPL /EXP(B*LOG(A)) JMP I [ILOOP /DONE FFEXPL, EXPON1 FFLOGL, LOG FMPYLV, FFMPY EXPONK, EXPON FIDVP, FFDIV1 /SGN FUNCTION SGN, 0 TAD ACH /GET HIGH MANTISSA SNA /IS X=ZERO? JMP I [ILOOP /YES-THEN LEAVE IT ALONE SPA CLA /IS X>0? JMP .+3 /NO IAC /YES-SET FAC=1 SKP CMA /NO-SET FAC=-1 DCA ACX /SET UP FLOAT JMS I [FFLOAT /FLOAT VALUE OF SGN FUNCTION JMP I [ILOOP /DONE IFZERO EAE < /FLOATING SQUARE ROOT /USES A HARDWARE TYPE ALGORITHM FOR BINARY SQUARE ROOTS /REF: THE LOGIC OF COMPUTER ARITHMETIC-IVAN FLORES-P 409 / FROOT, 0 CLA CLL CML RTR /SET RESULT TO 2000;0000 DCA AN1 DCA AN2 CDF /DF TO PACKAGE FIELD TAD KM22 /SET COUNTER FOR DEVELOPING 22 BITS OF RESULT DCA AC2 /ALREADY HAVE 1 TAD ACH SNA JMP I FROOT /ZERO FAC-NORMALIZED!-RETN. SAME SPA CLA JMS I [FFNEG /TAKE ROOT OF ABSOL VALUE TAD ACX /GET EXPONENT OF FAC SPA /IF NEGATIVE-MUST PROPAGATE SIGN CML RAR /DIVIDE EXP. BY 2 DCA ACX /STORE IT BACK SZL /INCREMENT EXP. IF ORIGINAL EXP ISZ ACX /WAS ODD NOP SNL /DO A PRE-SHIFT FOR EVEN EXPONENTS JMS I AL1K /SO FIRST BIT PAIR IS 10 NOT 01 CLA CLL CMA RAL /SET COUNTER FOR DETECTING A DCA ZCNT /ZERO REMAINDER CLA CLL CML RTR /SET UP POSITION OF TRIAL BIT RTR /FOR FIRST PASS THRU LOOP DCA OPH DCA OPL TAD K6000 /GET A FAST FIRST BIT-WE KNOW TAD ACH /THIS WILL WORK SINCE # IS NORMALIZED DCA ACH /IF # IS A POWER OF TWO, AND A PERFECT TAD ACH /SQUARE-WE ARE DONE HERE! SNA /WELL IS IT? TAD ACL /COULD BE-CHECK LOW ORDER SNA CLA JMP DONE /WHOOPPEE-WE WIN BIG. JMP LOP01 /NOPE-LOOP DON'T SHIFT FIRST TIME SLOOP, TAD OPH /SHIFT TRIAL BIT 1 PLACE CLL RAR /TO THE RIGHT DCA OPH /AND STORE BACK TAD OPL RAR DCA OPL JMS I AL1K /SHIFT FAC LEFT 1 PLACE LOP01, TAD OPL /ADD TRIAL BIT TO`ANSWER TAD AN2 /SO FAR CLL CMA IAC /NEGATE IT TAD ACL /AND ADD TO FAC (REMAINDER SO FAR) SNA /IS RESULT ZERO? ISZ ZCNT /YES-INCREMENT COUNTER DCA TM /STORE RESULT IN TEMPORARY CML RAL /ADD CARRY TO HIGH ORDER FOR SUBTRACT TAD OPH /ADD TRIAL BIT TAD AN1 /ADD RESULT SO FAR (HI ORDER) CLL CMA IAC /AND SUBTRACT FROM HI ORDER FAC TAD ACH SNL /RESULT NEGATIVE? JMP GON /YES-NEXT RESULT BIT IS 0 SZA /NO-IS HI ORDER RESULT=0? JMP LOP02 /NO-GO ON ISZ ZCNT /YES-WAS LOW ORDER =0? JMP .+3 /NO-GO ON CMA /YES-REM.=0-SET COUNTER SO DCA AC2 /LOOKS LIKE WE'RE DONE LOP02, DCA ACH /STORE HIGH ORDER REM. IN FAC TAD TM /STORE LO ORDER REM. IN FAC DCA ACL TAD OPL /TRIAL BIT SHIFTED LEFT 1 IS CLL RAL /RESULT BIT-ADD IT TO ROOT DEVELOPED TAD AN2 /SO FAR DCA AN2 TAD OPH RAL TAD AN1 DCA AN1 GON, CLA CLL CMA RAL /RESET COUNTER FOR ZERO REM. DCA ZCNT ISZ AC2 /DONE ALL 23 RESULT BITS? JMP SLOOP /NO-GO ON DONE, TAD AN1 /YES-STORE ANSWER IN FAC DCA ACH /ITS NORMALIZED ALREADY TAD AN2 DCA ACL JMP I FROOT /AND RETURN K6000, 6000 ZCNT, 0 AL1K, AL1 AN1, 0 AN2, 0 KM22, -26 PAGE > IFNZRO EAE < / /FLOATING SQUARE ROOT /USES MODIFIED HARDWARE ALGORITHM FOR BINARY SQUARE ROOTS /REF: THE LOGIC OF COMPUTER ARITHMETIC-IVAN FLORES; P-409 *SGN+14 FROOT, 0 CLA CLL CML RTR /SET RESLT TO 2000,0000 DCA OPL DCA OPH SWAB /MODE B OF EAE-ALSO DOES MQL CDF DCA RBCNT /CLR. SHIFT COUNTER TAD KM22 DCA AC2 /SET COUNTER FOR 23 BITS OF RESULT TAD ACX /GET EXPONENT OF FAC ASR /DIVIDE BY 2 1 DCA ACX /STORE IT BACK DPSZ /INCREMENT EXP. IF ORIG. EXP ISZ ACX /WAS ODD NOP MQA /DETERMINE WHETHER TO DO A CLL RAL /PRE-SHIFT FOR EVEN EXPONENTS. CML RAL DCA RKNT /STORE BIT-0 OR 1 SHIFT CNT CLL CML RTR /SET UP FIRST TRIAL BIT RTR DCA AC1 DCA AC0 /STORE AWAY DCA ACNT /ZERO COUNTER DLD /GET THE FAC ACH SWP /GET IN RIGHT ORDER SNA /IS IT ZERO? (HI ORD=0) JMP I FROOT /YES-ROOT = 0 SPA /NEGATIVE? DCM /YES-TAKE ABSOL. VALUE SHL /SHIFT # 1 BIT IF EXP WAS EVEN RKNT, 0 /SO FIRST BIT PAIR IS 10 NOT 01 TAD K6000 /SUBTRACT 2000-KNOW FIRST BIT DPSZ /IS 1(NORMALIZED)-DONE?? JMP LOP1 /NO-WE MUST LOOP JMP DONE /YES-AN EASY ONE!!! LOOP, DLD /GET THE FAC ACH SHL /SHIFT FAC APPROPRIATELY 1 LOP1, DST /MUST STOR BACK IN CASE RESLT ACH /BIT IS 0 DLD /GET TRIAL BIT AC0 ASR /SHIFT THE BIT APPROPRIATELY ACNT, 0 ISZ ACNT /SHIFT 1 MORE NEXT TIME DAD /ADD IN RESULT SO FAR OPH DCM /NEGATE IT ISZ RBCNT /BUMP COUNTER FOR RESLT BIT DAD /DO THE SUBTRACT ACH SNL /RESULT NEGATIVE? JMP GON /YES-NEXT RESULT BIT = 0 DPSZ /NO-DID WE GET A ZERO REMAINDER? JMP NOTZRO /NOPE ZREM, CMA /YES-SET SO LOOKS LIKE WE'RE DONE DCA AC2 NOTZRO, DST /GOOD SUBTR.-MODIFY FAC ACH /ITS NOT CHANGED BY BAD SUBTRACT CAM /CLEAR EVERYTHING RTR ASR /SHIFT RESLT BIT TO RIGHT PLACE RBCNT, 0 DAD /ADD IT TO THE RESULT SO FAR OPH /WE APPEND IT TO RIGHT OF LAST DST /BIT OPH /STORE IT BACK GON, ISZ AC2 /DONE 23 BITS? JMP LOOP /NO-GO ON DONE, DLD /YES-GET RESULT-ITS NORMALIZED OPH DCA ACH /STORE HIGH ORDER BACK SWP DCA ACL /STORE LOW ORDER BACK JMP I FROOT /RETURN KM22, -26 K6000, 6000 PAGE > /23-BIT EXTENDED FUNCTIONS /1-31-72 R BEAN /******SINE****** SIN, 0 JMS NHNDLE /IF X<0,NEGATE X AND SET NFLAG JMS I (FFMPY /X*2/PI TOVPI JMS FRACT /SAVE X IN TEMP1,THE INTEGER PART OF X IN NUM,AND GET FRACTIONAL PART IN FAC TAD NUM /GET INTEGER PART OF (2/PI)*X AND (3 /ISOLATE BITS 10,11 TAD JMPISN DCA .+1 /MAKE JUMP TO ARGUMENT REDUCING ROUTINE JMP . /AND ADJUST ARG ACCORDING TO QUADRANT OF X JMPISN, JMP I .+1 POLYSN /X IN QUAD1,SIN(X)=SIN(X) QUAD2 /X IN QUAD2,SIN(X)=SIN(1-X) QUAD3 /X IN QUAD3,SIN(X)=SIN(-X) QUAD4 /X IN QUAD4,SIN(X)=SIN(X-1) QUAD2, JMS I (FFSUB1 /1-X ONE JMP POLYSN /CALCULATE SIN(1-X) QUAD3, JMS I [FFNEG /-X JMP POLYSN /CALCULATE SIN(-X) QUAD4, JMS I (FFSUB /X-1 ONE POLYSN, JMS I [FFPUT /SAVE X FPPTM1 JMS I (FFSQ /U=X**2 JMS I [FFPUT /SAVE U FPPTM2 JMS I (FFMPY /A7*U SINA7 JMS I (FFADD /A5+A7*U SINA5 JMS I (FFMPY /A5*U+A7*U**2 FPPTM2 JMS I (FFADD /A3+A5(U)+A7(U**2) SINA3 JMS I (FFMPY /A3(U)+A5(U**2)+A7(U**3) FPPTM2 JMS I (FFADD /A1+A3(U)+A5(U**2)+A7(U**3) SINA1 JMS I (FFMPY /A1(X)+A3(X**3)+A5(X**5)+A7(X**7) FPPTM1 JMS NCHK /IF NFLAG IS SET,SET SIN(X)=-SIN(X) JMP I SIN /FAC=SIN(X) /******COSINE****** /USES SIN ROUTINE TO CALCULATE COS(X) COS, 0 JMS I (FFADD /COS(X)=SIN(PI/2+X) PIOV2 JMS SIN JMP I COS /RETURN /ROUTINE TO SEPERATE THE INTEGER AND FRACTIONAL PARTS OF FAC /ORIGINAL FAC IS SAVED IN TEMP1,THE INTEGER PORTION OF FAC IS /SAVED AT NUM,AND THE FRACTIONAL FORTION OF THE FAC IS LEFT IN THE FAC FRACT, 0 JMS I [FFPUT /SAVE X FPPTM1 JMS I (FFIX /INTEGER PORTION OF X TAD ACX DCA NUM /SAVE FIXED FORTION OF X JMS I [FFLOAT /FAC=FLOAT(FIX(X)) JMS I (FFSUB1 /FAC=X-INT(X)=FRACTION (X) FPPTM1 JMP I FRACT /RETURN /ROUTINE TO CHECK IF FAC<0; IF IT IS,FAC IS NEGATED AND NFLAG IS /SET TO 1 NHNDLE, 0 TAD ACH /FETCH HIGH ORDER MANTISSA SMA CLA /IS IT <0? JMP NFLGST /NO-CLEAR NFLAG JMS I [FFNEG /YES-NEGATE FAC IAC /AND SET NFLAG NFLGST, DCA NFLAG JMP I NHNDLE /ROUTINE TO NEGATE FAC IF NFLAG IS NOT =0 NCHK, 0 /LOC ALSO USED FOR TEMP STORAGE TAD NFLAG SZA CLA /IS NFLAG=0? JMS I [FFNEG /NO-NEGATE FAC JMP I NCHK /YES-RETURN NUM=NCHK /******EXPONENTIAL****** EXPON1, 0 /LOC USED FOR TEMP STORAGE BY SIN,ARCTAN JMS I (FFMPY /Y=XLOG2(E) LOG2E JMS FRACT /GET FRACTIONAL PART OF Y JMS I (FFMPY /(FRACTION(Y))*(LN2/2) LN2OV2 JMS I [FFPUT /SAVE Y FPPTM1 JMS I (FFSQ /Y**2 JMS I (FFADD /B1+Y**2 EXPB1 JMS I (FFDIV1 /A1/(B1+Y**2) EXPA1 JMS I (FFADD /A0+A1/(B1+Y**2) EXPA0 JMS I (FFSUB /A0-Y+A1/(B1+Y**2) FPPTM1 JMS I [FFPUT /SAVE FPPTM2 JMS I [FFGET /GET Y FPPTM1 ISZ ACX /MULT. BY 2=2Y NOP JMS I (FFDIV /2Y/(A0-Y+A1/(B1+Y**2)) FPPTM2 JMS I (FFADD /1+2Y/(AO-Y+A1/(B1+Y**2)) ONE JMS I (FFSQ /[1+2Y/(A0-Y+A1/(B1+Y**2))]**2=EXP(Y) TAD NUM TAD ACX /EXP(X)=(2**N)(EXPY) DCA ACX JMP I EXPON1 /FAC=EXPON(X) NFLAG=EXPON1 /CONSTANT THAT WOULDN'T FIT ELSEWHERE TOVPI, 0 /.6366198 2427 6302 MULLIM, 0 TAD ACX /CHECK IF NUMBER OF MULTIPLIES IS TOO LARGE SPA CLA /RETURN IF EXPONENT IS NEGATIVE (WE'LL USE LOGS) TAD (-4 /ONLY A ROUGH ROUGH LIMIT ON THE EXPONENT SPA SNA CLA /SKP IF NUMBER GT 15 APPROX JMP I MULLIM /NO, CONTINUE JMP I (USELOG /YES, USE LOG INSTEAD PAGE /******ARC TANGENT****** ATAN, 0 JMS I NHNDLL /IF X<0,SET NFLAG AND NEGATE JMS I [FFPUT /SAVE X FPPTM1 JMS I FSUBM /X-1 ONE TAD ACH /GET HI MANTISSA SPA CLA /WAS X>1? JMP ARGPOL /NO-CLEAR GT1FLG JMS I [FFGET /YES-ATAN(X)=PI/2-ATAN(1/X) ONE JMS I FDIVM /1/X FPPTM1 JMS I [FFPUT FPPTM1 IAC /SET GT1FLG ARGPOL, DCA GT1FLG JMS I [FFGET /GET X OR 1/X FPPTM1 JMS I FSQRM /Y**2 JMS I [FFPUT /SAVE FPPTM2 JMS I FADDM /Y**2+B3 ATANB3 JMS I FDIV1M /A3/(Y**2+B3) ATANA3 JMS I FADDM /B2+A3/(Y**2+B3) ATANB2 JMS I FADDM /Y**2+B2+A3/(Y**2+B3) FPPTM2 JMS I FDIV1M /A2/(Y**2+B2+A3/(Y**2+B3)) ATANA2 JMS I FADDM /B1+A2/(Y**2+B2+A3/(Y**2+B3)) ATANB1 JMS I FADDM /Y**2+B1+A2/(Y**2+B2+A3/(Y**2+B3)) FPPTM2 JMS I FDIV1M /A1/(Y**2+B1+A2/(Y**2+B2+A3/(Y**2+B3))) ATANA1 JMS I FADDM /B0+A1/(Y**2+B1+A2/(Y**2+B2+A3/(Y**2+B3))) ATANB0 JMS I FMPYM /ATAN(Y)=X*(B0+A1/(Y**2+B1+A2/(Y**2+B2+A3/(Y**2+B3)))) FPPTM1 TAD GT1FLG /WAS X>1? SNA CLA JMP NGT /NO-TEST IF X<0? JMS I FSUB1M /ATAN(X)=PI/2-ATAN(1/X) PIOV2 NGT, JMS I NCHKL /IF NFLAG SET,NEGATE FAC JMP I ATAN /FAC=ATAN(X) NHNDLL, NHNDLE NCHKL, NCHK /******NAPERIAN LOGARITHM****** GTFLG=ATAN LOG, 0 TAD ACH SPA SNA /X<0 OR X=0? JMP I ARTRAP /YES-TAKE ILLEGAL ARGUMENT TRAP CLL RTL SNA /NO-HORD=2000? TAD ACX /YES-EXP=1? CMA IAC IAC SNA TAD ACL /YES-LORD=0? SZA CLA JMP POLYNL /NO-ARG IS LEGAL AND NOT 1 DCA ACX DCA ACL LTRPRT, DCA ACH JMP I LOG /YES-LOG(1)=0 POLYNL, TAD ACX DCA GTFLG /SAVE EXPONENT FOR LATER DCA ACX /ISOLATE MANTISSA IN FAC JMS I [FFPUT /SAVE F FPPTM1 JMS I FADDM /F+SQR(.5) SQRP5 JMS I [FFPUT /SAVE FPPTM2 JMS I [FFGET FPPTM1 JMS I FSUBM /F-SQR(.5) SQRP5 JMS I FDIVM /Z=F+SQR(.5)/F-SQR(.5) FPPTM2 JMS I [FFPUT FPPTM1 JMS I FSQRM /Z**2 JMS I [FFPUT FPPTM2 JMS I FMPYM /C5(Z**2) LOGC5 JMS I FADDM /C3+C5(Z**2) LOGC3 JMS I FMPYM /C3(Z**2)+C5(Z**4) FPPTM2 JMS I FADDM /C1+C3(Z**2)+C5(Z**4) LOGC1 JMS I FMPYM /C1(Z)+C3(Z**3)+C5(Z**5) FPPTM1 JMS I FSUBM /C1(Z)+C3(Z**3)+C5(Z**5)-1/2=LOG2(F) ONEHAF JMS I [FFPUT /SAVE LOG2(F) FPPTM2 TAD GTFLG /I DCA ACX /SET UP FLOAT JMS I [FFLOAT JMS I FADDM /I+LOG2(F) FPPTM2 JMS I FMPYM /[I+LOG2(F)]*LOGE(2)=LOGE(X) LN2 JMP I LOG /FAC=LN(X) GT1FLG=LOG FMPYM, FFMPY FADDM, FFADD FDIVM, FFDIV FDIV1M, FFDIV1 FSUBM, FFSUB FSUB1M, FFSUB1 FSQRM, FFSQ ARTRAP, LM /CONSTANTS USED BY VARIOUS FUNCTIONS SINA1, 1 /1.5707949 3110 3747 SINA3, 0 /-.64592098 5325 1167 SINA5, 7775 /.07948766 2426 2466 SINA7, 7771 /-.004362476 5610 3164 PIOV2, 1 /1.5707963 3110 3756 LOG2E, 1 /1.442695 2705 2434 LN2OV2, 7777 /.34657359 2613 4415 EXPB1, 6 /60.090191 3602 7054 EXPA1, 12 /-601.80427 5514 3104 EXPA0, 4 /12.015017 3001 7301 ATANB0, 7776 /.17465544 2626 6157 ATANA1, 2 /3.7092563 3553 1071 ATANB1, 3 /6.762139 3303 670 ATANA2, 3 /-7.10676 4344 5267 ATANB2, 2 /3.3163354 3241 7554 ATANA3, 7777 /-.26476862 5703 4040 ATANB3, 1 /1.44863154 2713 3140 SQRP5, 0 /.7071068 2650 1170 LOGC1, 2 /2.8853913 2705 2440 LOGC3, 0 /.9614706 3661 566 LOGC5, 0 /.59897865 2312 5525 ONEHAF, 0 /.5 2000 0 LN2, 0 /.6931472 2613 4415 *4500 /******FIX****** /ROUTINE TO FIX ANY FLOATING NUMBER IN FAC BETWEEN -2047 AND +2047 TO /A TWELVE BIT INTEGER AND LEAVE RESULT IN EXP (LOC 44) FFIX, 0 CLA TAD ACX /FETCH EXPONENT SZA SMA /IS NUMBER <1? JMP .+3 /NO-CONTINUE ON FTRPRT, CLA JMP FIXDNE+1 /YES-FIX IT TO ZERO TAD (-13 /SET BINARY POINT AT 11 SNA /PLACES TO RIGHT OF CURRENT POINT? JMP FIXDNE /NO-NUMBER IS ALREADY FIXED THEN. SMA /YES-IS NUMBER TOO LARGE TO FIX? JMP I (FO /YES-TAKE OVERFLOW TRAP DCA ACX /NO-SET SCALE COUNT FIXLP, CLL /0 IN LINK TAD ACH /GET HIGH MANTISSA SPA /IS IT <0? CML /YES-PUT A 1 IN LINK RAR /SCALE RIGHT DCA ACH /SAVE ISZ ACX /DONE YET? JMP FIXLP /NO FIXDNE, TAD ACH /YES-ANSWER IN AC DCA ACX /RETURN WITH ANSWER IN 44 JMP I FFIX /RETURN /******FLOAT****** /ROUTINE TO FLOAT ANY INTEGER IN EXP (LOC 44) INTO FAC FFLOAT, 0 TAD ACX DCA ACH /PUT NUMBER IN HI MANTISSA DCA ACL /CLEAR LOW MANTISSA TAD (13 /11(10) INTO EXPONENT DCA ACX JMS I [FFNOR /NORMALIZE JMP I FFLOAT /RETURN /RANDOM NUMBER GENERATOR RND, 0 TAD I (RSEED /GET SEED DCA TEMP3 /PUT IN MULTIPLY OPERAND TAD (73 JMS I [MPY /MULTIPLY SEED BY 73 DCA I (RSEED /USE LOW ORDER 12 BITS AS NEW SEED TAD I (RSEED /LOW ORDER OF PRODUCT ALSO SERVES CLL RAR /AS RANDOM NUMBER DCA ACH /SET SIGN TO 0 AND STORE AS HORD DCA ACX RAR DCA ACL /USE 12 BITS AS MANTISSA DCA AC1 /CLEAR FPP OVERFLOW JMS I [FFNOR /AND NORMALIZE JMP I [ILOOP /DONE PAGE /FLOATING POINT OUTPUT ROUTINE /CONVERT INTERNAL NUMBER TO ASCII /EXIT WITH CHAR STRING IN 'INTERB' /XR1 = POINTER TO LAST CHAR STORED FFOUT, 0 TAD (INTERB-1 DCA XR1 /SET POINTER TO ASCII BUFFER TAD ACH /SEE IF FAC NEGATIVE SMA CLA JMP OKPOS /JMP IF POSITIVE JMS I [FFNEG /TAKE ABS VALUE IF NEGATIVE TAD ("- /PRINT MINUS SIGN SKP OKPOS, TAD (240 /PRINT SPACE IF POSITIVE DCA I XR1 TAD ACH /SEE IF NUMBER IS ZERO SNA CLA JMP ZERXIT /SPECIAL CASE IF SO JMS I (CVTNUM /CALL ROUTINE TO UNPACK TO BASE 10 TAD (NUMBUF-1 DCA XR2 /POINT XR2 AT DIGIT BUFFER TAD (5 /TEST FORMAT TO USE TAD DECEXP CLL TAD (-4 SNL JMP SMLFMT /JMP IF .0NNNNNN TO .0000NNNNNN TAD (-7 SZL CLA JMP REGFMT /JMP IF .NNNNNN TO NNNNNN /OTHERWISE USE E FORMAT N.NNNNNE+NNN OR N.NNNNNE-NNN TAD I XR2 /GET DIGIT TO LEFT OF POINT JMS PUTD /PUT IT OUT TAD (". DCA I XR1 /NOW SEND OUT DECIMAL POINT TAD (-5 DCA AC2 /DO 5 MORE DIGITS TAD I XR2 /PICK UP DIGIT JMS PUTD /CONVERT TO ASCII AND STORE ISZ AC2 JMP .-3 /LOOP FOR MORE TAD ("E /PRINT E DCA I XR1 / CLL TAD DECEXP /TAKE ABS(DECEXP) SPA CML CIA DCA DECEXP RTL /CONVERT "+" TO "-" IF NEGATIVE TAD ("+ DCA I XR1 JMS IDIV /PRINT 3 DIGITS OF EXPONENT NOW -144 JMS IDIV -12 TAD DECEXP JMS PUTD JMP I FFOUT /ALL DONE --RETURN-- /HANDLE .0NNNNNN TO .0000NNNNNN SMLFMT, DCA AC0 /STORE NUMBER OF LEADING ZEROES TAD (". /PUT OUT DECIMAL POINT DCA I XR1 JMS PUTD /SEND A 0 ISZ AC0 JMP .-2 /LOOP FOR LEADING 0'S /GENERAL NON E FORMAT .NNNNNN TO NNNNNN REGFMT, TAD (-7 DCA AC1 /INIT COUNT OF NONZERO DIGITS TAD (NUMBUF+6 DCA AC2 /POINT AT END OF DIGIT BUFFER SHRINK, STA /DECREMENT DIGIT POINTER TAD AC2 DCA AC2 ISZ AC1 /REDUCE SIGNIFICANT DIGIT COUNT TAD DECEXP IAC TAD AC1 SMA CLA JMP PRTLP /JMP OUT IF NOT TO RIGHT OF DECIMAL POINT TAD I AC2 /ELSE LOOK AT DIGIT SNA CLA JMP SHRINK /DISCARD IT IF ZERO PRTLP, STA TAD DECEXP DCA DECEXP /SEE IF DIGIT TO BE PRINTED FOLLOWS DP AC0002 TAD DECEXP SZA CLA JMP NODP /NO TAD (". /YES, PRINT DP DCA I XR1 NODP, TAD I XR2 /PICK UP DECIMAL DIGIT JMS PUTD /PUT OUT ISZ AC1 JMP PRTLP /JMP IF MORE DIGITS TO PRINT JMP I FFOUT /--RETURN-- ZERXIT, JMS PUTD JMP I FFOUT /--RETURN-- /DIVIDE DECEXP BY -DIVISOR IN CALL+1 IDIV, 0 DCA AC1 /CLEAR QUOTIENT IDIVLP, TAD DECEXP TAD I IDIV SPA JMP IDVOUT /JMP OUT IF LESS THAN DIVISOR DCA DECEXP /ELSE UPDATE IT ISZ AC1 /TALLY QUOTIENT JMP IDIVLP /ITERATE IDVOUT, CLA TAD AC1 /GET QUOT AS NEXT DIGIT JMS PUTD /PUT OUT ISZ IDIV JMP I IDIV /CONVERT NUMBER IN AC TO ASCII DIGIT /MUST NOT TOUCH THE LINK PUTD, 0 TAD ("0 /ADD IN 0 DCA I XR1 /STORE IN BUFFER JMP I PUTD PAGE /CONVERT NUMBER IN FAC TO FORMAT N.NNNNNE NNN /DECIMAL EXPONENT RETURNED AS SIGNED NUMBER IN DECEXP /6 DIGITS STORED IN NUMBUF AS BINARY 0-9 /FIRST REDUCES MANTISSA TO FORM 0DD DDF FFF FFF... /BY SUCCESSIVE MULTIPLIES OR DIVIDES BY 10. FOLLOWED BY /RENORMALIZATIONS UNTIL INTIGER BITS /DDDD ARE LT 10. /DECIMAL DIGITS ARE ISOLATED BY REPEATED MULTIPLICATION BY 10. CVTNUM, 0 DCA AC1 /CLEAR OVERFLOW WORD SKP /SKP IN AND CLEAR DECIMAL EXPONENT ADJDEC, TAD DECEXP DCA DECEXP /STORE UPDATED DECIMAL EXPONENT NORML, TAD ACH /SEE IF FRACTION IS NORMALIZED RAL SPA CLA JMP NORMED /JMP IF YES JMS I (AL1 /SHIFT AC LEFT 1 BIT STA TAD ACX /COMPENSATE BINARY EXPONENT DCA ACX JMP NORML /TRY AGAIN NORMED, TAD ACX /RANGE CHECK BINARY EXPONENT NOW SMA SZA JMP DIVCHK /JMP IF NUMBER GE 1 TAD O4 DCA ACX /INCREASE BINARY EXP TOWARDS ZERO JMS AR1 /SHIFT 4 BITS RIGHT JMS AR1 /MAX RELATIVE ERROR WILL BE LT 15*2^-34 PER MULTIPLY JMS AR1 JMS AR1 JMS MPY10 /NOW MULTIPLY BY 10. STA /DECREASE DECIMAL EXPONENT JMP ADJDEC /RENORMALIZE AND TRY AGAIN DIVCHK, TAD (-5 /SEE IF EXP GT 4 SPA JMP INRANG /JMP IF NOT, NUMBER MAY BE IN RANGE DIVGO, CLA CLL TAD (-40 /SET 32. STAGE SUBTRACT-SHIFT DIVIDE (SLOW BUT ACCURATE) DCA AC2 /(THE LEN ELEKMAN TECHNIQUE) /MAX RELATIVE ERROR WILL BE LT 9*2^-34. PER DIVIDE DVLOOP, TAD ACH /SEE IF GE 10. TAD (5400 SMA DCA ACH /UPDATE IF YES CML STA RAL DCA AC0 /SAVE LOW ORDER BIT JMS I (AL1 /SHIFT MANTISSA NOW ISZ AC0 /STORE BIT NOW ISZ AC1 ISZ AC2 /BUMP COUNT JMP DVLOOP /ITERATE TAD ACH /NOW ZERO OUT REMAINDER AND [377 DCA ACH IAC /NOW INCREASE DECIMAL EXPONENT JMP ADJDEC INRANG, DCA AC2 /SET SHIFT COUNTER SKP JMS AR1 /SHIFT FAC RIGHT ISZ AC2 JMP .-2 /LEAVE EFFECTIVE BINARY POINT RIGHT OF ACH BIT 4 TAD ACH /ACH = 0DD DDF FFF FFF (D=DECIMAL DIGIT BITS) TAD (5400 /SEE IF DDDD GE 10 SMA CLA JMP DIVGO /DIVIDE AGAIN (NORMALIZATION WILL WORK) CLL TAD AC1 /NOW ROUND BY ADDING 0.000005 TAD (4761 DCA AC1 IAC /ADD 24761 TO LOW BITS RAL TAD ACL DCA ACL SZL ISZ ACH TAD ACH TAD (5400 /SEE IF CARRY INTO 9.XXX... SZA CLA JMP CVT10 /JMP IF NO TAD [200 /ELSE SET TO 1.00000 DCA ACH DCA ACL DCA AC1 ISZ DECEXP /AND BUMP DECIMAL EXPONENT O4, 4 /EFFECTIVE NOP /NOW CONVERT TO DECIMAL DIGITS CVT10, TAD (-6 /DO 6 DIGITS DCA AC0 TAD (NUMBUF-1 DCA XR3 JMP CVTGO /FIRST DIGIT IS ALREADY IN CVTLP, TAD ACH /ZERO OUT PREV DIGIT AND [177 DCA ACH JMS MPY10 /MULTIPLY BY 10. CVTGO, TAD ACH /GET DIGIT FROM 0DD DDF FFF FFF RTL RTL RTL AND [17 DCA I XR3 /STORE IT ISZ AC0 JMP CVTLP /LOOP IF MORE JMP I CVTNUM /--RETURN-- /MULTIPLY ACH,,ACL,,AC1 BY 10. MPY10, 0 TAD ACH DCA OPH /COPY AC TO OP TAD ACL DCA OPL TAD AC1 DCA AC2 JMS I (AL1 /N*2 JMS I (AL1 /N*4 JMS I (OADD /N*5 JMS I (AL1 /N*10. JMP I MPY10 /SHIFT FAC RIGHT 1 BIT AR1, 0 TAD ACH CLL RAR DCA ACH TAD ACL RAR DCA ACL TAD AC1 RAR DCA AC1 JMP I AR1 /DONE PAGE IFZERO EAE < /FLOATING POINT INPUT ROUTINE FFIN, 0 CLA CMA DCA I FDVPT /INITIALIZE PERIOD SWITCH TO -1 CMA /SET SIGN SWITCH TO -1 DCA SIGNF CDF /DF TO PACKAGE FIELD DCA DSWIT /ZERO CONVERSION SWITCH DECONV, DCA ACX /ZERO OUT THE FAC! DCA ACL P200, 200 DCA ACH DECNV, DCA DNUMBR /ZERO # OF DIGITS SINCE DEC. PT. DECON, JMS GCHR /GET A CHAR.FROM TTY. JMP FFIN1 /TERMINATOR- ISZ DSWIT /DIGIT-BUMP CONVERSION SWITCH ISZ DNUMBR /BUMP # OF DIGITS-# IS STORED IN JMS I FMPYLL /"FMPY TEN" TEN JMS I [FFPUT /"FPUT I TM3PT" FPPTM1 JMS I [FFGET /"FGET TP" TP JMS I [FFNOR /"FNOR" JMS I FADDLL /"FADD I TM3PT" FPPTM1 JMP DECON /GO ON FFIN1, ISZ I FDVPT /HAVE WE HAD A PERIOD YET? JMP FIGO2 /YES-GO ON ISZ TP1 /NO-IS THIS A PERIOD? ISZ TP1 SKP CLA JMP DECNV /YES-ZERO DIG. COUNT AFTER DEC. PT. /AND GO CONVERT REST DCA DNUMBR /NO-TERMINATOR-ZERO COUNT OF /DIGITS AFTER DECIMAL POINT. FIGO2, ISZ SIGNF /IS # NEGATIVE?(DID WE GET - SIGN?) JMS I FFNEGP /YES-NEGATE IT CLA CMA /RESET SIGN SWITCH FOR EXP. DCA SIGNF TAD CHAR /NO-WAS THE TERMINATOR AN 'E'? TAD KME SNA CLA GETE, JMS GCHR /YES-GET A CHAR. OF EXPONENT JMP EDON /END OF EXPONENT TAD TM /GOT DIG. OF EXP-STORED IN TP1 CLL RTL /MULT. ACCUMULATED EXP BY 10 TAD TM CLL RAL TAD TP1 /ADD DIGIT JMP GETE /CONTINUE EDON, TAD TM /GET EXPONENT ISZ SIGNF /WAS EXPONENT NEGATIVE? CMA IAC /YES-NEGATE IT CMA IAC /AND CALC. DNUMBR - EXPON. TAD DNUMBR /GET # TIMES TO DIV MANTISSA BY TEN CLL CMA IAC SPA /RESULT POSITIVE? CLL CMA CML IAC /NO-MAKE POS. AND SET LINK CMA /NEGATE FOR COUNTER DCA DNUMBR /AND STORE RAL /LINK=1-DIV;=0-MUL. # BY TEN TAD MDV /FORM CORRECT INSTRUCTION DCA SIGNF /AND STORE FOR EXECUTION FCNT, ISZ DNUMBR /DONE ALL OPERATIONS? JMP SIGNF /NO JMP I FFIN /YES-RETURN SIGNF, 0 /NO- MUL OR DIV. MANTISSA TEN /BY TEN JMP FCNT /GO ON FFNEGP, FFNEG DNUMBR, 0 KME, -305 MDV, JMS I .+1 /THESE 3 WDS. MUST BE IN THIS ORDER FMPYLL, FFMPY FDVPT, FFDIV /!!!!!!!!!!!!!!!!! FADDLL, FFADD KK12, 12 TP, 13 TP1, 0 0 TEN, 4 2400 0 /ROUTINE TO GET A CHAR FROM THE TTY AND SEE IF IT IS DIGIT /OR A TERMINATOR. /RETURN TO CALL + 1 IF TERMINATOR, TO CALL + 2 IF DIGIT /THIS ROUTINE MUST NOT MODIFY THE MQ!! GCHR, 0 DCA TM /STORE ACCUMULATED EXPONENT (MAYBE) JMS INPUT /GET A CHAR FROM TTY. TAD CHAR /PICK IT UP TAD PLUS /WAS IT PLUS SIGN? SNA JMP DECON1 /YES-GET ANOTHER CHAR. TAD MINUS /NO WAS IT MINUS SIGN? SZA CLA JMP .+3 DCA SIGNF /YES-FLIP SWITCH DECON1, JMS INPUT /GET A CHAR. TAD CHAR TAD K7506 /SEE IF ITS A DIGIT CLL TAD KK12 DCA TP1 /STORE FOR LATER SZL /DIGIT? ISZ GCHR /YES-RETN. TO CALL+2 JMP I GCHR /NO-RETN. TO CALL+1 K7506, 7506 / /INPUT ROUTINE-IGNORES LEADING SPACES / INPUT, 0 JMS I IGETCH /USE OUR ROUTINE TO GET CHAR TAD DSWIT /GET TERMINATOR SZA CLA /VALID INPUT YET? JMP IOUT /YES-CONTINUE TAD CHAR /NO-GET CHAR TAD M240 /COMPARE AGAINST SPACE SZA /SKP IF SPACE TAD (240-212 /COMPARE TO LF SNA CLA /IS IT A SPACE OR LF? JMP INPUT+1 /YES-IGNORE IT IOUT, JMP I INPUT /RETURN IGETCH, GETCH /POINTER TO GET CHAR ROUTINE /ALTERED BY "VAL" FUNCTION TO PICK FROM SAC (BE CAREFULL) M240, -240 PLUS, -253 MINUS, 253-255 / /ROUTINE TO DECIDE CALLING MODE IN LIEU OF "SPECIAL MODE" PROBLEMS / PATCHF, 0 SZA /IS AC EMPTY JMP RTN2 /NO-THIS IS ALWAYS SI MODE WITH ADDR IN AC TAD FF /YES-GET SPECIAL MODE FLIP-FLOP SZA CLA /IF ON,THE ZERO AC MEANS ADDRESS OF 0 RTN2, ISZ PATCHF /USE AC AS ADDRESS OF OPERAND JMP I PATCHF /RETURN PAGE / /INVERSE FLOATING SUBTRACT-USES FLOATING ADD /!!FSW1!!-THIS IS OP-FAC / FFSUB1, 0 JMS I [PATCHF /WHICH MODE? TAD I FFSUB1 /CALLED BY USER-GET ADDR. OF OP. JMS I ARGETL /GO PICK UP OPERAND CDF JMS I FFNEGA /NEGATE FAC TAD FFSUB1 /AND GO ADD JMP I SUB0P FFNEGA, FFNEG SUB0P, SUB0 / /INVERSE FLOATING DIVIDE /FSWITCH=1 /THIS IS OP/FAC / FFDIV1, 0 JMS I [PATCHF /WHICH MODE OF CALL? TAD I FFDIV1 /CALLED BY USER-GET ADDR. JMS I ARGETL /PICK UP OPERAND TAD ACL /SWAP THE FAC AND OPERAND DCA OPL /THERE IS A POINTER TO OPL TAD I AC2 /IN AC2 LEFT FROM ARGET SUBR. DCA ACL TAD ACX /MIGHT AS WELL SUBTRACT THE CLL CMA IAC /EXPONENTS HERE (SAVES A WORD) TAD OPX /THEN ZERO OPX SO WILL NOT DCA ACX /MESS UP WHEN ITS DONE AGAIN DCA OPX /LATER (SEE DIV. ROUTINE) TAD ACH DCA AC2 /NOW SWAP HIGH ORDER MANTISSAS TAD OPH DCA ACH TAD AC2 DCA OPH CDF /DF TO PACKAGE FIELD TAD FFDIV1 /NOW KLUDGE UP A SUBROUTINE LINKAGE DCA I FFDP TAD KFD1 DCA I MDSETP JMP I MD1P /GO SET UP AND DIVIDE MD1P, MD1 ARGETL, ARGET MDSETP, MDSET FFDP, FFDIV KFD1, FFD1 /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 JMS I ARGETK /GET ARGUMENT MD1, CDF /DF TO PACKAGE FIELD CLA CLL CMA RAL /SET SIGN CHECK TO -2 DCA TM TAD OPH /IS OPERAND NEGATIVE? SMA CLA JMP .+3 /NO JMS I OPNEGP /YES-NEGATE IT ISZ TM /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 FFNEGK /YES-NEGATE IT ISZ TM /BUMP SIGN CHECK NOP /MAY SKIP LEV, TAD OPX /EXIT WITH OPERAND EXPONENT IN AC JMP I MDSET FFNEGK, FFNEG OPNEGP, OPNEG ARGETK, ARGET / /CONTINUATION OF FLOATING DIVIDE ROUTINE / FD1, TAD AC2 /NEGATE HI ORDER PRODUCT CLL CMA IAC TAD ACH /COMPARE WITH REMAINDER OF FIRST DIV. SNL /WELL? JMP I DVOPSP /GREATER THAN REM.-ADJUST QUOT OF 1ST DIV. CLL /OK-DO (REM-(Q*OPL))/OPH DCA ACH /FIRST STORE ADJUSTED PRODUCT JMS I DV24P /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 CLL ISZ ACL SKP IAC RAR DCA ACH /STORE IN FAC TAD ACL /P@ LOW ORDER RIGHT RAR DCA ACL /STORE BACK ISZ ACX /BUMP EXPONENT NOP TAD ACH JMP DVL1+1 FD, DCA ACH /STORE HIGH ORDER RESULT JMP I FDDONP /GO LEAVE DIVIDE FDDONP, FDDON /END OF FLTG. DIV. ROUTINE DV24P, DV24 /ROUTINE TO DO A 24X12BIT DIVIDE DVOPSP, DVOPS /ROUTINE TO ADJUST QUOT OF FIRST DIV. / /CONTINUATION OF ROUTINE TO ADJUST QUOT. OF FIRST DIV. /DBAD1 IS ONLY EXECUTED ON DIVIDE OVERFLOW-OTHERWISE THE /ROUTINE STARTS AT DVOP2 / DBAD1, DCA ACX /DIVIDE OVERFLO-ZERO ALL DVOP2, SNA /IS IT ZERO? DCA ACL /YES-MAKE WHOLE THING ZERO DCA ACH JMS I DV24P /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 PAGE /FLOATING MULTIPLY-DOES 2 24X12 BIT MULTIPLIES FFMPY, 0 JMS I [PATCHF /WHICH MODE OF CALL? TAD I FFMPY /CALLED BY USER-GET OPERAND ADDR. JMS I MDSETK /SET UP FOR MPY-OPX IN AC ON RETN. TAD ACX /DO EXPONENT ADDITION DCA ACX /STORE FINAL EXPONENT DCA DV24 /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 RTZRO, DCA ACL /LOW ORDER TAD DV24 /HIGH ORDER DCA ACH TAD ACH /DO WE NEED TO NORMALIZE? RAL SMA CLA JMP SHLFT /YES-DO IT FAST MDONE, DCA AC1 /NO-ZERO OVERFLOW WD(DO I NEED THIS???) ISZ FFMPY /BUMP RETURN POINTER ISZ TM /SHOULD RESULT BE NEGATIVE? JMP I FFMPY /NOPE-RETN. JMS I FFNEGR /YES-NEGATE IT JMP I FFMPY /RETURN SHLFT, CMA /SUBTRACT 1 FROM EXP. TAD ACX DCA ACX JMS I AL1PTR /SHIFT FAC LEFT 1 BIT JMP MDONE+1 /DONE. AL1PTR, AL1 / /24 BIT BY 12 BIT MULTIPLY. MULTIPLIER IS IN OPL /MULTIPLICAND IS IN ACH AND ACL /RESULT LEFT IN DV24,AC2, AND AC1 MP24, 0 TAD KKM12 /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 CLL /YES-ADD MULTIPLICAND TO PARTIAL PRODUCT TAD AC2 TAD ACL /LOW ORDER DCA AC2 RAL /PROPAGATE CARRY TAD ACH /HI ORDER MPLP2, TAD DV24 RAR /NOW SHIFT PARTIAL PROD. RIGHT 1 BIT DCA DV24 TAD AC2 RAR DCA AC2 RAR /1 BIT OF OVERFLOW TO AC1 DCA AC1 ISZ OPX /DONE ALL 12 MULTIPLIER BITS? JMP MPLP /NO-GO ON JMP I MP24 /YES-RETURN / /PART OF DIVIDE ROUTINE-FFDIV MUST BE AT LOC. 6722 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 FFMPY /DONE ALL BITS? JMP MP12L /NO-LOOP BACK CLL CMA IAC /YES-LOW ORDER PROD. OF QUOT. X OPL IN AC DCA ACL /NEGATE AND STORE CML RAL /PROPAGATE CARRY JMP I FD1P /GO ON FD1P, FD1 /POINTER TO REST OF DIVIDE ROUTINE / /FLOATING DIVIDE ROUTINE /USES THE METHOD OF TRIAL DIVISION BY HI ORDER FFDIV, 0 /(USED AS A TEM. BY I/O ROUTINES) JMS I [PATCHF /WHICH MODE OF CALL? TAD I FFDIV /CALLED BY USER-GET ARG. ADDR. JMS I MDSETK /GO SET UP FOR DIVIDE-OPX IN AC ON RETN. FFD1, 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 KM13 /SET COUNTER FOR 12 BIT MULTIPLY DCA FFMPY /TO MULTIPLY QUOT. OF DIV. BY JMP DVLP1 /LOW ORDER OF OPERAND (OPL) / /END OF FLOATING DIVIDE-FUDGE SOME /STUFF THEN JUMP INTO MULTIPLY / FDDON, TAD FFDIV /STORE RETN. ADDR. IN MULT ROUTINE DCA FFMPY JMP MDONE /GO CLEAN UP / /DIVIDE ROUTINE--24 BITS IN ACH,ACL ARE DIVIDED BY 12 BITS /IN OPH. OPH IS ASSUMED NEGATIVE AND .GT. ACH IN ABSOLUTE VALUE /ELSE-DIVIDE OVERFLOW--WE RETURN NORMALLY WITH QUOTIENT /IN ACL AND REM. IN ACH. (AC2=0 ON RETN.) / DV24, 0 TAD ACH /CHECK THAT DIVISOR IS .GT. DIVIDEND TAD OPH /DIVISOR IN OPH (NEGATIVE) SZL CLA /IS IT? JMP I DVOVR /NO-DIVIDE OVERFLOW TAD KM13 /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 FFNEGR, FFNEG MDSETK, MDSET KKM12, -14 KM13, -15 DVOVR, DV PAGE / /FLOATING ADD / FFADD, 0 JMS I [PATCHF /WHICH MODE FO CALL? TAD I FFADD /CALLED BY USER-GET ADDR. OF OPR. JMS I ARGETP /PICK UP OPERAND FAD1, CDF /DF TO PACKAGE FIELD TAD OPH /IS OPERAND = 0 SNA CLA JMP DONA /YES-DONE TAD ACH /NO-IS FAC=0? SNA CLA JMP DOADD /YES-DO ADD TAD ACX /NO-DO EXPONENT CALCULATION CLL CMA IAC TAD OPX SMA SZA /WHICH EXP. GREATER? JMP FACR /OPERANDS-SHIFT FAC CMA IAC /FAC'S-SHIFT OPERAND=DIFFRNCE+1 JMS OPSR JMS ACSR /SHIFT FAC ONE PLACE RIGHT DOADD, TAD OPX /SET EXPONENT OF RESULT DCA ACX JMS OADD /DO THE ADDITION JMS I FNORP /NORMALIZE RESULT DONA, ISZ FFADD /BUMP RETURN JMP I FFADD /RETURN FACR, JMS ACSR /SHIFT FAC = DIFF.+1 JMS OPSR /SHIFT OPR. 1 PLACE JMP DOADD /DO ADDITION / /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 RAL /TO LINK CLA TAD OPH /GET HI MANTISSA RAR /SHIFT IT RIGHT, PROPAGATING SIGN DCA OPH /STORE BACK TAD OPL RAR DCA OPL /STORE LO ORDER BACK RAR /SAVE 1 BIT OF OVERFLOW DCA AC2 /IN AC2 ISZ OPX /INCREMENT EXPONENT NOP2, NOP ISZ AC0 /DONE ALL SHIFTS? JMP LOP2 /NO-LOOP JMP I OPSR /YES-RETN. / /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 SIGN BIT OF MANTISSA RAL /SET UP SIGN PROPAGATION CLA TAD ACH /GET HIGH ORDER MANTISSA RAR /SHIFT RIGHT`1, PROPAGATING SIGN DCA ACH /STORE BACK TAD ACL /GET LOW ORDER RAR /SHIFT IT DCA ACL /STORE BACK RAR DCA AC1 /SAVE 1 BIT OF OVERFLOW ISZ ACX /INCREMENT EXPONENT NOP1, NOP ISZ AC0 /DONE? JMP LOP1 /NO-LOOP JMP I ACSR /YES-RETN-AC=L=0 / /DIVIDE OVERFLOW-ZERO ACX,ACH,ACL / DBAD, CLA CLL /NECESSARY SO WE DON'T GET OVRFLO AGAIN JMP I DBAD1P /GO ZERO ALL / /FLOATING SUBTRACT / FFSUB, 0 JMS I [PATCHF /WHICH MODE OF CALL? TAD I FFSUB /CALLED BY USER-GET ADDR. OF OP JMS I ARGETP /PICK UO THE OP. JMS OPNEG /NEGATE OPERAND TAD FFSUB /JMP INTO FLTG. ADD SUB0, DCA FFADD /AFTER SETTING UP RETURN JMP FAD1 ARGETP, ARGET *6135 / /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 / /NEGATE OPERAND / OPNEG, 0 TAD OPL /GET LOW ORDER CLL CMA IAC /NEGATE AND STORE BACK DCA OPL CML RAL /PROPAGATE CARRY TAD OPH /GET HI ORDER CLL CMA IAC /NEGATE AND STORE BACK DCA OPH JMP I OPNEG / /ADD OPERAND TO FAC / OADD, 0 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. DBAD1P, DBAD1 FNORP, FFNOR > IFNZRO EAE < /EAE FLOATING POINT PACKAGE /FOR PDP8/E WITH KE8-E EAE / /W.J. CLOGHER / /DEFINITIONS OF EAE INSTRUCTIONS SWP= 7521 CAM= 7621 MQA= 7501 MQL= 7421 SGT= 6006 SWAB= 7431 SWBA= 7447 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 / TM= TEMP4 / /FLOATING POINT INPUT ROUTINE / PAGE FFIN, 0 CLA CMA DCA PRSW /INITIALIZE PERIOD SWITCH TO -1 CMA /SET SIGN SWITCH TO -1 DCA SIGNF CDF /CHANGE TO DF OF PACKAGE DCA DSWIT /ZERO CONVERSION SWITCH DECONV, DCA ACX /ZERO OUT THE FAC! DCA ACL DCA ACH DECNV, DCA DNUMBR /ZERO # OF DIGITS SINCE DEC. PT. DECON, JMS GCHR /GET A CHAR.FROM TTY. JMP FFIN1 /TERMINATOR- ISZ DSWIT /DIGIT-BUMP CONVERSION SWITCH ISZ DNUMBR /BUMP # OF DIGITS DCA TP1 /STORE IT IN FORM EASILY FLOATIBLE JMS I FMPYLL /MULTIPLY # BY 10 TEN JMS I [FFPUT /STORE IT AWAY FPPTM1 JMS I [FFGET /GET NEW DIGIT TP JMS I [FFNOR /FLOAT IT JMS I FADDLL /ADD IT TO THE ACCUMULATED # FPPTM1 JMP DECON /GO ON FFIN1, ISZ PRSW /HAVE WE HAD A PERIOD YET? JMP FIGO2 /YES-GO ON TAD K2 /NO-IS THIS A PERIOD? SNA CLA JMP DECNV /YES-ZERO DIG. COUNT AFTER DEC. PT. /AND GO CONVERT REST DCA DNUMBR /NO-TERMINATOR-ZERO COUNT OF /DIGITS AFTER DECIMAL POINT. FIGO2, CLA MQL /0 TO MQ FOR LATER MULTIPLY ISZ SIGNF /IS # NEGATIVE?(DID WE GET - SIGN?) JMS I FFNEGP /YES-NEGATE IT SWAB CMA /RESET SIGN SWITCH FOR EXP. DCA SIGNF TAD CHAR /NO-WAS THE TERMINATOR AN 'E'? TAD KME SNA CLA GETE, JMS GCHR /YES-GET A CHAR. OF EXPONENT JMP EDON /END OF EXPONENT MUY /GOT DIGIT OF EXP-MULT ACCUMULATED K12 /EXPONENT BY TEN AND ADD DIGIT JMP GETE /CONTINUE EDON, ISZ SIGNF /WAS EXPONENT NEGATIVE? DCM /YES-NEGATE IT CLA CLL /CLEAR AC AND LINK TAD DNUMBR /GET # TIMES TO DIV MANTISSA BY TEN SAM /SUBTRACT FROM EXPONENT CLL SPA /RESULT POSITIVE? CLL CMA CML IAC /NO-MAKE POS. AND SET LINK CMA /NEGATE FOR COUNTER DCA DNUMBR /AND STORE RAL /LINK=1-DIV;=0-MUL. # BY TEN TAD MDV /FORM CORRECT INSTRUCTION DCA FINST /AND STORE FOR EXECUTION FCNT, ISZ DNUMBR /DONE ALL OPERATIONS? JMP FINST /NO JMP I FFIN /YES-RETURN FINST, 0 /NO- MUL OR DIV. MANTISSA TEN /BY TEN JMP FCNT /GO ON FFNEGP, FFNEG PRSW, 0 DNUMBR, 0 SIGNF, 0 K2, 2 KME, -305 MDV, JMS I .+1 /THESE 3 WDS. MUST BE IN THIS ORDER FMPYLL, FFMPY FFDIV /!!!!!!!!!!!!!!!!! FADDLL, FFADD K12, 12 TP, 13 TP1, 0 0 TEN, 4 2400 0 /ROUTINE TO GET A CHAR FROM THE TTY AND SEE IF IT IS DIGIT /OR A TERMINATOR. /RETURN TO CALL + 1 IF TERMINATOR, TO CALL + 2 IF DIGIT /THIS ROUTINE MUST NOT MODIFY THE MQ!! GCHR, 0 JMS INPUT /GET A CHAR FROM TTY. TAD CHAR /PICK IT UP TAD PLUS /WAS IT PLUS SIGN? SNA JMP DECON1 /YES-GET ANOTHER CHAR. TAD MINUS /NO WAS IT MINUS SIGN? SZA CLA JMP .+3 DCA SIGNF /YES-FLIP SWITCH DECON1, JMS INPUT /GET A CHAR. TAD CHAR TAD K7506 /SEE IF ITS A DIGIT CLL TAD K12 SZL /DIGIT? ISZ GCHR /YES-RETN. TO CALL+2 JMP I GCHR /NO-RETN. TO CALL+1 K7506, 7506 PLUS, -253 MINUS, 253-255 / / /INPUT ROUTINE-IGNORES LEADING SPACES / INPUT, 0 JMS I IGETCH /USE OUR ROUTINE TO GET CHAR TAD DSWIT /GET TERMINATOR SZA CLA /VALID INPUT YET? JMP IOUT /YES-CONTINUE TAD CHAR /NO-GET CHAR TAD M240 /COMPARE AGAINST SPACE SZA TAD (240-212 /IS IT AN LF? SNA CLA /IS IT A SPACE OR LF? JMP INPUT+1 /YES-IGNORE IT IOUT, JMP I INPUT /RETURN M240, -240 IGETCH, GETCH /ALTERED BY VAL FUNCITON TO PICK FROM SAC / /ROUTINE TO DECIDE CALLING MODE IN LIEU OF "SPECIAL MODE" PROBLEMS / PATCHF, 0 SZA /IS AC EMPTY JMP RTN2 /NO-THIS IS ALWAYS SI MODE WITH ADDR IN AC TAD FF /YES-GET SPECIAL MODE FLIP-FLOP SZA CLA /IF ON,THE ZERO AC MEANS ADDRESS OF 0 RTN2, ISZ PATCHF /USE AC AS ADDRESS OF OPERAND JMP I PATCHF /RETURN / PAGE / /FLOATING SUBTRACT-USES FLOATING ADD /FSW1!! FFSUB1, 0 JMS I [PATCHF /WHICH MODE? TAD I FFSUB1 /CALLED BY USER-GET ADDR. OF OP JMS I ARGETL /PICK UP ARGUMENT CDF JMS I FFNEGA /NEGATE FAC! TAD FFSUB1 JMP I SUB0P FFNEGA, FFNEG SUB0P, SUB0 / /FLOATING DIVIDE /FSWITCH=1 /THIS IS OP/FAC / FFDIV1, 0 JMS I [PATCHF /WHICH MODE OF CALL? TAD I FFDIV1 /CALLED BY USER-GET ADDR. JMS I ARGETL /(INTERP.)-GET OPRND.-ADDR. IN AC CDF /CDF TO FIELD OF PACKAGE TAD ACH /SWAP FAC AND OPRND-OPH IN MQ! DCA OPH /STORE ACH IN OPH TAD ACX /GET EXP OF FAC SWP /OPH TO AC, ACX TO MQ DCA ACH /STORE OPH IN ACH TAD OPX /STORE OPX IN ACX DCA ACX TAD OPL /OPL TO MQ, ACX TO AC SWP DCA OPX /STORE ACX IN OPX TAD ACL DCA OPL /STORE ACL IN OPL TAD OPH /OPH TO MQ FOR LATER SWP DCA ACL /STORE OPL IN ACL TAD FFDIV1 /SET UP SO WE RETN TO DCA I FFDP /NORMAL DIVIDE ROUTINE TAD FD1 DCA I MDSETP JMP I MD1P /GO ARRANGE OPERANDS MD1P, MD1 ARGETL, ARGET MDSETP, MDSET FFDP, FFDIV FD1, FFD1 /PATCH TO EAE ADD ROUTINE ADDPCH, 0 TAD AC1 TAD RB4000 DPSZ JMP ADDP1 CLL CML RTR ISZ ACX NOP ADDP1, TAD RB4000 JMP I ADDPCH RB4000, 4000 / PTCHAD, CDF TAD OPH SNA CLA /OPERAND ZERO JMP I JADON /YES TAD ACH /FAC ZERO SZA CLA JMP I JFAD1 /NO TAD OPX DCA ACX TAD OPH DCA ACH TAD OPL DCA ACL JMP I JADON JADON, ADON JFAD1, FAD1 / /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) PAGE FFMPY, 0 JMS I [PATCHF /WHICH MODE? TAD I FFMPY /CALLED BY USER-GET ADDRESS JMS MDSET /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 DLD /HIGH ORDER FAC TO MQ, OPX TO AC ACL 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 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 CLA CMA /YES-MUST DECREASE EXP. BY 1 TAD ACX RTZRO, DCA ACX /STORE BACK TAD AC0 SPA CLA /IS HIGH ORDER OF OVERFLO WD. 1? DPIC /YES-ADD 1 TO LOW ORDER-STILL IN MQ SNCK, ISZ MSIGN /RESULT NEGATIVE? JMP MPOS /NO-GO ON TAD ACH /YES-GET HIGH ORDER BACK DCM /LOW ORDER STILL IN MQ-NEGATE DCA ACH /STORE HIGH ORDER BACK MPOS, SWP /LOW ORDER TO AC DCA ACL /STORE AWAY ISZ FFMPY /BUMP RETURN JMP I FFMPY /RETIRN MSIGN, 0 ARGETK, ARGET DVOFL, DV / /ROUTINE TO SET UP FOR MULTIPLY AND DIVIDE / MDSET, 0 JMS I ARGETK /GET OPERAND (ADDR. IN AC) CDF /CHANGE TO DATA FIELD OF PACKAGE MD1, CLA CLL CMA RAL /MAKE A MINUS TWO DCA MSIGN /AND STORE IN MSIGN. TAD OPL /GET LOW ORDER MANTISSA OF OP. SWP /GET INTO RIGHT ORDER ( OPH IN MQ) SMA /NEGATIVE? JMP .+3 /NO DCM /YES-NEGATE IT ISZ MSIGN /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 /GET THE MANTISSA OF THE FAC ACH SWP /MAKE IT CORRECT ORDER SMA /NEGATIVE? JMP FPOS /NO DCM /YES-NEGATE IT ISZ MSIGN /BUMP SIGN COUNTER (MAY SKIP) NOP FPOS, DST /STORE BACK-ACH CONTAINS LOW ORDER ACH / ACL CONTAINS HIGH ORDER JMP I MDSET /RETURN / /FLOATING DIVIDE / *5722 FFDIV, 0 JMS I [PATCHF /WHICH MODE? TAD I FFDIV /CALLED BY USER-GET ARG. ADDRESS JMS MDSET /GET ARG. AND SET UP SIGNS FFD1, 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 I DVOFL /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 I DVOPSP /YES-ADJUST FIRST DIVIDE DVI /NO-DO Q*OPL*2**-12/OPH OPL SZL CLA /DIV ERROR? JMP I DVOFL /YES DVLP1, TAD AC0 /NO-GET QUOT OF FIRST DIV. SMA /NEGATIVE? JMP .+5 /NO-REMEMBER-QUOT OF 2ND DIV. IN MQ LSR /YES-MUST SHIFT IT RIGHT 1 1 ISZ ACX /ADJUST EXPONENT NOP ISZ MSIGN /SHOULD SIGN BE MINUS? SKP /NO DCM /YES-DO IT DBAD1, DCA ACH /STORE IT BACK SWP DCA ACL ISZ FFDIV JMP I FFDIV /BUMP RETN. AND RETN. DVOPSP, DVOPS DBAD, CAM DCA ACX /ZERO EXPONENT JMP DBAD1 /GO ZERO MANTISSA /FLOATING ADDITION-IN ORDER NOT TO LOSE BITS, WE DO NOT /SHIFT BOTH NUMBERS RIGHT 1 BIT BEFORE ADD-ONLY SHIFTS DONE /ARE TO ALIGN EXPONENTS. / PAGE FFADD, 0 JMS I [PATCHF /WHICH MODE OF CALLING TAD I FFADD /CALLED DIRECTLY BY USER JMS I ARGETP /PICK UP ARGUMENTS JMP I PATCHK /CHECK FOR ADDITION BY ZERO FAD1, 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 M27 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 SGT /WHICH EXPONENT WAS GREATER? JMP .+3 /FAC'S - DO NOTHING TAD OPX /OPERAND'S-PUT FINAL EXP. IN ACX DCA ACX 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, JMS I ADDPCL /JUMP TO PATCH FOR THIS ROUTINE LOD, NMI /NORMALIZE (LOW ORDER STILL IN MQ) DCA ACH /STORE FINAL RESULT SWP /GET AND STORE LOW ORDER DCA ACL SCA /GET SHIFT COUNTER(# OF NMI SHIFTS) CMA IAC /NEGATE IT TAD ACX /AND ADJUST FINAL EXPONENT DCA ACX ADON, ISZ FFADD /BUMP RETURN PAST ADDRESS JMP I FFADD /RETURN OVRFLO, TAD AC1 /OVERFLOW-GET HIGH ORDER RESLT BACK ASR /SHIFT IT RIGHT 1 1 TAD KK4000 /REVERSE SIGN BIT DCA ACH /AND STORE SWP DCA ACL /STORE LOW ORDER ISZ ACX /BUMP EXPONENT NOP JMP ADON /DONE KK4000, 4000 M27, -27 ADDRS, OPH ACH ARGETP, ARGET /FLOATING SUBTRACT-USES FLOATING ADD /FSW0!! FFSUB, 0 JMS I [PATCHF /WHICH MODE? TAD I FFSUB /CALLED BY USER-GET ADDRESS OF OP. JMS I ARGETP CDF TAD OPL /OPH IS IN MQ! SWP /PUT IT IN RIGHT ORDER DCM /NEGATE IT DCA OPH /STORE BACK MQA DCA OPL TAD FFSUB /GO TO ADD SUB0, DCA FFADD JMP FAD1-1 / /FLOATING NEGATE--NEGATE FLOATING AC / FFNEG, 0 SWAB /MUST BE MODE B DLD /GET MANTISSA ACH SWP /CORRECT ORDER PLEASE! DCM /NEGATE IT DCA ACH /RESTORE SWP /SEND 0 TO MQ DCA ACL JMP I FFNEG / /CONTINUATION OF DIVIDE ROUTINE /WE ARE ADJUSTING THE RESULT OF THE /FIRST DIVIDE. / DVOPS, CMA IAC DCA AC1 /ADJUST REMAINDER TAD OPL /WATCH FOR OVERFLOW CLL CMA IAC TAD AC1 SNL JMP DVOP1 /DON'T ADJUST QUOT. DCA AC1 CMA TAD AC0 DCA AC0 /REDUCE QUOT BY 1 DVOP1, CLA CLL TAD AC1 /GET REMAINDER SNA /ZERO? CAM /YES-ZERO EVERYTHING DVI /NO OPL SZL CLA /DIV. OVERFLOW? JMP I DVOVR /YES DCM /NO-ADJUST HI QUOT (MAYBE) JMP I DVLP1P /GO BACK DVLP1P, DVLP1 DVOVR, DV ADDPCL, ADDPCH PATCHK, PTCHAD > PAGE /ARGUMENT PICK UP ROUTINE-ENTER WITH DATA FIELD SET TO EITHER /FLTG. DATA FIELD OR FLTG. INSTR. FIELD. /ADDRESS OF OPERAND IS IN THE AC ON ENTRY. /ON RETURN, THE`AC IS CLEAR / ARGET, 0 DCA AC2 /STORE ADDRESS OF OPERAND TAD I AC2 /PICK UP EXPONENT DCA OPX JMS ISZAC2 /MOVE POINTER TO HORD,WATCH FOR FIELD OVERLAP TAD I AC2 /PICK IT UP IFZERO EAE < NOP NOP > IFNZRO EAE < SWAB /OPH INTO MQ BECAUSE EAE ROUTINES MQA /EXPECT TO FIND IT THERE > DCA OPH /STORE JMS ISZAC2 /MOVE POINTER TO LORD,WATCHING FOR OVERLAP TAD I AC2 /PICK IT UP DCA OPL /STORE IT JMP I ARGET /RETURN IFZERO EAE < / /ROUTINE TO NORMALIZE THE FAC / FFNOR, 0 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, AC2000 /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) JMP FNLP /JUMP SO FFGET AND PUT ARE ORGED RIGHT FFNORR, DCA AC1 /DONE W/NORMALIZE-CLEAR AC1 JMP I FFNOR /RETURN AL1P, AL1 > IFNZRO EAE < / /ROUTINE TO NORMALIZE THE FAC / *6215 FFNOR, 0 CDF /CHANGE D.F. TO FIELD OF PACKAGE SWAB /FORCE MODE B 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 FFNOR /RETURN > /FLOATING GET *6241 FFGET, 0 JMS I [PATCHF /WHICH MODE OF CALL TAD I FFGET /CALLED BY USER-GET ADDR. OF OP JMS ARGET /PICK UP OPERAND TAD OPX DCA ACX /LOAD THE OPERAND INTO FAC TAD OPL DCA ACL TAD OPH DCA ACH ISZ FFGET CDF JMP I FFGET /RETN. TO CALL +2 / /FLOATING PUT / FFPUT, 0 JMS I [PATCHF /WHICH MODE OF CALL? TAD I FFPUT /CALLED BY USER-GET OPR. ADDR DCA FFGET /STORE IN A TEMP TAD ACX /GET FAC AND STORE IT DCA I FFGET /AT SPECIFIED ADDRESS JMS ISZFGT /BUMP POINTER,WATCHING FOR FIELD OVERLAP TAD ACH DCA I FFGET JMS ISZFGT TAD ACL DCA I FFGET ISZ FFPUT /BUMP RETN. CDF JMP I FFPUT /RETN. TO CALL+2 /ROUTINES TO BUMP ARGET AND FPUT POINTERS AND INCREMENT THE /DATA FIELD IF THE POINTER CROSSES A FIELD BOUNDARY ISZFGT, 0 ISZ FFGET /BUMP POINTER JMP I ISZFGT /NO SKIP MEANS JUST RETURN SKP /SKIP MEANS WE HAVE TO INCREMENT DATA FIELD NEWCDF, DCA ISZFGT /THIS INST EXECUTED ONLY BY ISZAC2 RDF /GET THE DATA FIELD TAD CDF10 /BUMP BY 1 AND MAKE A CDF DCA .+1 /PUT IN LINE . JMP I ISZFGT /RETURN CDF10, CDF 10 ISZAC2, 0 ISZ AC2 /BUMP POINTER JMP I ISZAC2 /NOTHING HAPPENED TAD ISZAC2 /NEED NEW DF. GET RETURN ADDR JMP NEWCDF /AND BUMP DF IFZERO EAE < / /ROUTINE TO ADJUST QUOTINET OF FIRST DIVIDE (MAYBE) WHEN THE /REMAINDER OF THE FIRST`DIVIDE IS LESS THAN QUOT*OPL /USED BY FLTG. DIVIDE ROUTINE / 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 JMP I DVOP2P /GO ON DVOP2P, DVOP2 FNLP, CLL CML CMA /-1 TAD ACX /SUBTR. 1 FROM EXPONENT DCA ACX JMS I AL1P /SHIFT FAC LEFT 1 JMP NORMLP /GO BACK AND SEE IF NORMALIZED ZEXP, DCA ACX JMP FFNORR > / /FSQUARE-SQUARE FAC-CALLS MULTIPLY TO MUL. FAC BY ITSELF / *6347 A, FFSQ, 0 JMS I TMPY /CALL MULTIPLY TO MULTIPLY ACX /FAC BY ITSELF JMP I FFSQ /DONE TMPY, FFMPY / / ERROR TRAPS O0, JMS I [ERROR /OVERFLOW DV, JMS I [ERROR /DIVISION ERROR JMS I [FACCLR /RETURN 0 IN FAC JMP I [ILOOP LM, JMS I [ERROR /ILLEGAL ARGUMENT PAGE *OVERLAY+3000 /TELETYPE "DRIVER"-WHEN CALLED,GRABS CHARACTERS FROM THE /TELETYPE UNTIL A CR IS SENT OR THE BUFFER IS FULL. ASSUMES TTY ENTRY /IS IN I/O WORK AREA. TTYDRI, 0 JMP LFLUSH+1 IO, JMS I [ERROR LFLUSH, JMS I [CRLFR /PRINT A CR,LF TAD K277 /PRINT A ? SIGNIFYING WAIT FOR INPUT JMS I [XPUTCH TAD I IOTBUF /BUFFER ADDRESS DCA I IOTPTR /INITIALIZE POINTER TO START OF BUFFER JMS I [CNOCLR /INITIALIZE CHAR # TO 1 TTYIN, JMS I [XPRINT /EMPTY TTY BUFFER BEFORE AWAITING INPUT JMP .-1 TAD I (HEIGHT /ALWAYS RESET SCREEN HIEGHT ON INPUT DCA I (HCTR TAD K5252 /DESIGN INTO AC KSFA, KSF /CHAR READY? JMP SPIN /NO-DIDDLE WHILE WE WAIT CLA CLL /FLUSH SPINNER OUT OF AC TAD [200 /FORCE PARITY BIT KRS /GET CHAR DCA CHAR /SAVE TAD CHAR JMS I [XPUTCH /ECHO IT KCC /CLEAR KEYBOARD FLAG AND SET READER RUN TAD CHAR TAD MCTRLU /IS IT CTRL/U? SNA CLA JMP LFLUSH /YES-START AGAIN TAD CHAR /NO TAD CRUBOT /IS IT RUBOUT? SNA JMP BACKUP /YES-BACK UP BUFFER POINTER TAD MCR /NO-IS IT CR? SNA CLA JMP CR /YES-DONE TAD CHAR JMS I [PACKCH /PACK CHAR IN BUFFER JMS I [BUFCHK /BUFFER FULL? JMP IO /YES-ERROR NOP /NO-CHAR 3 LEFT NOP /NO-2 AND 3 LEFT JMP TTYIN /NO-NEXT CHAR MCTRLU, -225 MCR, 377-215 CRUBOT, -377 K5252, 5252 K277, 277 BACKUP, TAD I IOTPTR /BUFFER POINTER CIA /NEGATE TAD I IOTBUF /COMPARE AGAINST START OF BUFFER SNA CLA /BUFFER EMPTY? JMP TTYIN /YES-THERE IS NOTHING TO RUBOUT TAD SCOPFG /TEST IF CONSOLE IS A SCOPE SNA CLA JMP NOSCOP /JMP IF NOT TAD (10 JMS I [XPUTCH /PRINT BS,SP,BS TO RUBOUT IF SCOPE TAD (40 JMS I [XPUTCH TAD (10 SKP NOSCOP, TAD K334 JMS I [XPUTCH /ECHO "\" JMS I [CHARNO /GET CHAR # OF NEXT CHAR (LAST #+1) JMP C1B /1 JMP C3B /3 JMS I [CNOCLR /IT WAS 2-MAKE IT 1 PBACK, CLA CMA /-1 TAD I IOTPTR /BACK UP BUFFER POINTER DCA I IOTPTR JMP TTYIN /NEXT CHAR K334, 334 C1B, TAD I IOTHDR AND [7477 TAD [200 /IT WAS 1-MAKE IT 3 DCA I IOTHDR JMP TTYIN /NO NEED TO BACK UP POINTER C3B, TAD I IOTHDR AND [7477 TAD [100 /IT WAS 3,MAKE IT 2 DCA I IOTHDR JMP PBACK /BACK UP POINTER CR, JMS I [CRLFR /ECHO A CR,LF TAD K4 TAD TTYDRI /BUMP DRIVE RETURN TO NORMAL DCA TTYDRI TAD CHAR JMS I [PACKCH /PACK CHAR IN BUFFER TAD I IOTBUF DCA I IOTPTR /INITAILZE BUFFER POINTERS JMS I [CNOCLR JMP I TTYDRI /RETURN K4, 4 SPIN, ISZ SPINNR /SPIN RANDOM # SEED SKP CMA CML RAL /MARCH TO THE LEFT JMP KSFA /CHECK FOR CHAR YET SCOPFG, 0 /GETS SET TO SCOPE FLAG BY STARTUP CODE /SUBROUTINE FBITGT-ROUTINE TO PUT FUNCTION BITS FROM INSTRUCTION INTO AC FBITGT, 0 TAD INSAV CLL RTR RTR /PUT FUNCTION BITS IN BITS 8-11 AND [17 /MASK THEM OFF JMP I FBITGT /RETURN /DATA LIST READ (NUMERIC) RDLIST, JMS I (DLREAD /FETCH WORD FROM LIST DCA ACX /STORE AS EXPONENT JMS I (DLREAD DCA ACH /HIGH MANTISSA JMS I (DLREAD DCA ACL /LOW MANTISSA JMP I [ILOOP /SUBROUTINE FTYPE-RETURNS TO CALL+1 IF FILE NUMERIC,CALL+2 IF ASCII FTYPE, 0 TAD I IOTHDR /GET HEADER CLL RAR /TYPE TO LINK SZL CLA /IS IT NUMERIC? ISZ FTYPE /NO-BUMP RETURN JMP I FTYPE /RETURN PAGE /LAST PAGE OF BRTS-CONTAINS SAC,I/O TABLE, AND SOME MISCELLANEOUS CODE /TELETYPE INPUT BUFFER (74. CHARACTERS LONG) /THIS BUFFER CONTAINS ONCE ONLY START CODE WHEN LOADED TTYBUF, START4, TAD CDFPS /DF FOR BOTTOM OF PSEUDO-CODE TAD MCDF1 /COMPARE TO A CDF 10 SZA CLA /DO THEY MATCH? JMP I [ILOOP /NO-ALL BUFFERS ARE FREE-START INTERPRETER TAD PSSTRT CLL CMA TAD [400 SNL CLA /IS START OF PSEUDO-CODE BELOW 400 JMP CHKB2 /NO-CHECK FOR 1000 TAD [17 /YES-SET ALL BUFFERS BUSY JMP BAS CHKB2, TAD PSSTRT CLL CMA TAD C1000 SNL CLA /IS START OF PSEUDO-CODE BELOW 1000 JMP CHKB3 /NO-CHECK 1400 TAD C16 /YES-ONLY BUFFER 1 IS AVAILABLE JMP BAS CHKB3, TAD PSSTRT CLL CMA TAD C1400 SNL CLA /IS START OF CODE BELOW 1400? JMP CHKB4 /YES-CHECK 2000 TAD C14 /YES-ONLY BUFFER 1 AND 2 AVAILABLE JMP BAS CHKB4, TAD PSSTRT CLL CMA TAD K2000 SNL CLA /IS CODE START BELOW 2000? JMP I [ILOOP /NO-START INTERPRETER-ALL BUFFER FREE TAD [10 /YES-BUFFERS 1,2, AND 3 AVAILABLE BAS, DCA BMAP JMP I [ILOOP /START INTERPRETER 0 MCDF1, -6211 K2000, 2000 C14, 14 C16, 16 C1000, 1000 C1400, 1400 ZBLOCK 10 TTYEND, 0 *OVERLAY+3277 //////////////////////////////////////////////////////////////// /////// I/O TABLE 5 13-WORD ENTRIES //////////////////////////// //////////////////////////////////////////////////////////////// TTYF, 1 /TELETYPE ENTRY-FILE IS ASCII TTYBUF /BUFFER ADDRESS 0 /CURRENT BLOCK IN BUFFER TTYBUF /READ WRITE POINTER TTYDRI /HANDLER ENTRY ZBLOCK 10 FILE1, ZBLOCK 15 /FILE #1 FILE2, ZBLOCK 15 /FILE #2 FILE3, ZBLOCK 15 /FILE #3 FILE4, ZBLOCK 15 /FILE #4 PAGE /CROSS FIELD LITERAL EQUATES PGETCH= [GETCH PILOOP= [ILOOP PPUTCH= [PUTCH PSACM1= [SAC-1 PXPUTCH= [XPUTCH PXPRINT= [XPRINT PFFNOR= [FFNOR PFFGET= [FFGET PFFPUT= [FFPUT PUNSFIX= [UNSFIX PERROR= [ERROR PFACCLR= [FACCLR PIDLE= [IDLE PPSWAP= [PSWAP PFTYPE= [FTYPE USR= [200 O200= [200 O400= [400 O100= [100 O10= [10 O17= [17 O7400= [7400 O77= [77 O215= [215 O7700= [7700 M215= [-215 ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// ////////////// OVERLAY 2- STRING FUNCTIONS ///////////////// ///////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////// FIELD 1 *2000 RELOC OVERLAY /VERSION NUMBER WORD FOR STRING OVERLAY VERSON^100+SUBVSF+6000 /CHR$ FUNCTION /RETURNS 1 6BIT CHAR STRING FOR THE VALUE OF X CHR, JMS I PUNSFIX /FIX X TO 12 BIT INTEGER AND O77 /MASK TO 6BIT DCA I (SAC /AND PUT INTO SAC CMA DCA SACLEN /SET SAC LENGTH TO 1 JMP I (SSMODE /SET TO SMODE AND RETURN /ASC FUNCTION /RETURNS DECIMAL ASCII FOR 1 CHAR STRING IN FAC ASC, TAD I (SAC /GET FIRST CHAR OF STRING JMP FLOATS /FLOAT RESULT INTO FAC AND RETURN /LEN FUNCTION /RETURNS LENGTH OF SAC IN FAC LEN, TAD SACLEN /LENGTH OF STRING IN SAC CIA /MAKE POSITIVE /ROUTINE TO FLOAT FAC AND RETURN FLOATS, DCA ACH /NUMBER TO BE FLOATED IN HORD DCA ACL /CLEAR LORD DCA TEMP2 /CLEAR FPP OVERFLOW TAD (13 /SET EXP TO 11 DCA ACX JMS I PFFNOR /NORMALIZE JMP I PILOOP /RETURN /STR$ FUNCTION /RETURNS ASCII STRING FOR NUMBER IN FAC STR, JMS I (FFOUT /GET NUMBER INTO INTERMEDIATE BUFFER FIRST TAD XR1 CIA TAD (INTERB-1 DCA SACLEN TAD SACLEN /NOW SAVE COUNTER DCA TEMP2 TAD (INTERB-1 DCA XR1 /POINT AT BUFFER STRLUP, TAD I XR1 /GET A CHAR AND O77 /MASK TO 6BIT TAD (-40 /CROCK TO DELETE BLANKS SZA JMP .+3 ISZ SACLEN /IGNORE THE BLANK JMP .+3 TAD (40 DCA I SACXR /STORE IN SAC ISZ TEMP2 JMP STRLUP /LOOP FOR MORE JMP I (SSMODE /DONE-RETURN IN SMODE /VAL FUNCTION /RETURNS NUMBER IN FAC FOR STRING IN SAC VAL, TAD SACLEN DCA VALCNT /COUNT OF CHARS TO INPUT TAD (VALGET /ADDR OF PHONY INPUT ROUTINE DCA I (IGETCH /PUT IN INPUT ROUTINE IN PLACE OF KRB JMS I (FFIN /CALL FPP INPUT ROUTINE TAD PGETCH /NOW RESTORE REAL INPUT ADDR DCA I (IGETCH /RESTORE IN INPUT ROUTINE JMP I PILOOP /DONE VALGET, 0 TAD VALCNT /TEST NUMBER OF CHARS LEFT SNA CLA JMP EOVAL /NONE ISZ VALCNT /ELSE BUMP NOP TAD I SACXR /GET A BYTE TAD (240 AND O77 TAD (240 /CONVERT TO 8BIT SKP EOVAL, TAD O215 DCA CHAR JMP I VALGET /RETURN WITH CHAR IN 'CHAR' VALCNT, 0 PAGE / DATE FUNCTION / RETURNS STRING OF THE FORM "MM/DD/YY" IN SAC IF DATE IS PRESENT / RETURNS NULL STRING OTHERWISE DATE, TAD CDFIO /COPY CDF TO FIELD 17600 IN LINE DCA .+1 YEAREX, 0 TAD PSFLAG /GET TD8E BIT TO LINK CLL RAL SNL CLA TAD I (MDATE /IF ZERO LOOK AT MDATE IN N7600 SZL TAD I (MDATE-200 /ELSE LOOK AT N7400 DCA DATEWD /STORE (DATE IS NOT A CLOSED SUBROUTINE) CDF /DATE IS IN THE FORM MMM MDD DDD YYY TAD DATEWD /PICK UP DATE SZA CLA TAD (-10 /RETURN 8. BYTES IF NOT NULL DATE DCA SACLEN /SET SAC LENGTH TAD I (BIPCCL /NOW GET YEAR EXTENSION AND (600 /IT'S IN THE 600 BITS CLL RTR RTR /SHIFT INTO PLACE DCA YEAREX /HOLD YEAR EXTENSION TAD DATEWD /NOW ISOLATE MONTH AND O7400 CLL RTL RTL RAL JMS PUTN /PUT "MM/" INTO THE SAC TAD DATEWD /NOW GET DAY OF MONTH AND (370 CLL RTR RAR JMS PUTN /PUT "DD/" IN SAC TAD DATEWD /FINALLY GET YEAR AND (7 TAD YEAREX /ADD TO EXTENSION BITS TAD (106 /ADD 70. FOR BASE YEAR JMS PUTN /PUT OUT "YY/" (EXTRA SLASH WILL BE IGNORED) JMP I (SSMODE /RETURN IN STRING MODE PUTN, 0 ISZ NHIGH /BUMP HIGH ORDER DIGIT TAD (-12 /-10. SMA JMP .-3 /LOOP IF NOT REDUCED YET TAD (12+60 /CONVERT TO DECIMAL DIGIT DCA NLOW /HOLD MOMENTARILY TAD NHIGH /NOW GET HI ORDER DIGIT TAD (57 /MAKE 6BIT DCA I SACXR TAD NLOW /SEND OUT LOW DIGIT DCA I SACXR TAD (57 DCA I SACXR /SEND OUT "/" DCA NHIGH /CLEAR NHIGH FOR NEXT TIME (BE CAREFULL!!) JMP I PUTN NHIGH, 0 NLOW, 0 DATEWD, 0 /TRACE FUNCTION PRINTER. WHEN TRACE IS ENABLED,THIS ROUTINE /PRINTS THE LINE # EACH TIME IT IS STORED TPRINT, JMS I (LMAKE /MAKE LINE # INTO FIVE DIGITS TAD ("% JMS I PXPUTCH /PRINT "%" TAD (" JMS I PXPUTCH /PRINT A SPACE TAD (DIG1-1 /ADDR OF FIRST DIGIT-1 DCA XR5 /IN XR5 IGS, TAD I XR5 /GET DIGIT OF LINE NUMBER DCA TCHR /SAVE IT TAD (-"0 TAD TCHR /COMPARE IT TO 0 SNA CLA /IS IT A 0? JMP IGS /YES-IGNORE LEADING ZEROES PREST, TAD TCHR /NO-GET CHAR AGAIN TAD M215 SNA CLA /IS IT A CR? JMP TDONE /YES-LINE NUMBER IS PRINTED TAD TCHR /NO-GET CHAR A THIRD TIME JMS I PXPUTCH /TYPE IT TAD I XR5 /GET NEXT CHAR DCA TCHR JMP PREST /AND LOOP TDONE, TAD (" JMS I PXPUTCH /FOLLOW LINE # WITH A SPACE TAD ("% JMS I PXPUTCH /TYPE ANOTHER "%" TAD (215 JMS I PXPUTCH /TYPE,CR,LF TAD (212 JMS I PXPUTCH JMS I PXPRINT /EMPTY RING BUFFER OF TRACE NUMBER JMP .-1 JMP I PILOOP /DONE TCHR, 0 PAGE /TRACE FUNCTION-ROUTINE TO TURN TRACE ON AND OFF TRACE, TAD ACH /GET HI MANTISSA OF ARG SNA CLA /SKP TO TURN TRACE ON TAD TRREST /ELSE RESTORE TRACE BYPASS INSTR IN LINE NUMBER ROUTINE DCA I HOOKL /BY NOP ING INSTRUCTION AT TRHOOK TRREST, JMP I PILOOP HOOKL, TRHOOK /ERROR ROUTINE ERRORR, JMS I PXPRINT /PURGE TTY RING BUFFER JMP .-1 /BEFORE PRINTING ERROR TAD ETABA /ADDR OF ERROR TABLE DCA XR4 /POINTS INTO ERROR TABLE FERRLP, TAD I XR4 /GET 2 CHAR ERROR CODE DCA TEMP1 /SAVE TAD TEMP1 CLL RTR RTR RTR AND O77 /STRIP TO 6 BIT TAD K0300 /MAKE 8 BIT (LETTERS ONLY ALLOWED) DCA ESTRNG /PUT IN MESSAGE TAD TEMP1 /2 CHAR CODE AGAIN AND O77 /SECOND CHAR TAD K0300 /MAKE LETTER DCA ESTRNG+1 /PUT IN MESSAGE TAD I XR4 /GET ERROR CODE +1 TAD I PERROR /COMPARE AGAINST RETURN ADDR SZA CLA /MATCH? JMP FERRLP /NO-TRY NEXT ONE JMS LMAKE /MAKE THE LINE # INTO DECIMAL DIGITS TAD ESTRA /ADDR OF MESSAGE DCA XR5 ETLOP, TAD I XR5 /GET MESSAGE CHAR SPA /DONE? (MESSAGE ENDNS WITH - NUMBER JMP FATCHK /YES-DETERMINE ERROR TYPE JMS I PXPUTCH /NO-PUT CHAR IN RING BUFFER JMP ETLOP FATCHK, CLA TAD MFATAL /-ADDR OF FATAL ERRORS TAD XR4 /ADDR OF THIS ERROR SMA CLA /FATAL ERROR? JMP I ERRETN /NO-NEXT INST JMP I STOPI /YES-TERMINATE RUN ERRETN, XERRRET STOPI, FSTOPN MAKED, 0 AND O17 /ISOLATE BCD DIGIT TAD K260 /MAKE ASCII DIGIT JMP I MAKED K260, 260 K0300, 300 /SUBROUTINE LMAKE-MAKES THE CURRENT LINE NUMBER INTO FIVE DIGITS /STARTING AT DIG1 LMAKE, 0 TAD LINEHI /YES:GET HI LINE # JMS MAKED /GET DIGIT 2 DCA DIG2 /PUT IN MESSAGE TAD LINEHI CLL RTR RTR JMS MAKED /GET DIGIT 1 DCA DIG1 /AND PUT IN MESSAGE TAD LINELO /DOGOTS 3,4, AND 5 JMS MAKED /GET DIGIT 5 DCA DIG5 TAD LINELO CLL RTR RTR JMS MAKED /GET DIGIT 4 DCA DIG4 /AND PUT IN MESSAGE TAD LINELO CLL RAL RTL RTL JMS MAKED /GET DIGIT 3 DCA DIG3 /MESSAGE NOW COMPLETE JMP I LMAKE /ERROR MESSAGE EMESS, 215 212 ESTRNG, 0000 0000 " "A "T " "L "I "N "E " DIG1, 0 DIG2, 0 DIG3, 0 DIG4, 0 DIG5, 0 215 212 ESTRA, EMESS-1 /MINUS NUMBER TO END ABOVE MESSAGE /ERROR TABLE /ENTRY FORMAT- 2 CHAR 6-BIT ERROR CODE (LETTERS ONLY) / -(ADDR OF CALL)-1 ETABA, ETAB-1 MFATAL, -EFATAL ETAB, 0602 /FB -FB-1 /ATTEMPT TO OPEN AN ALREADY OPEN FILE 0722 /GR -GR-1 /RETURN WITHOUT A GOSUB 2622 /VR -VR-1 /ATTEMPT TO READ VARIABLE LENGTH FILE 2325 /SU -SU-1 /SUBSCRIPT ERROR 0405 /DE -DE-1 /DEVICE DRIVER ERROR 1705 /OE -OE-1 /DRIVER ERROR WHILE OVERLAYING 0615 /FM -FM-1 /ATTEMPT TO FIX MINUS NUMBER 0617 /FO -FO-1 /ATTEMPT TO FIX NUMBER >4095 0616 /FN -FN-1 /ILLEGAL FILE # 2303 /SC -SC-1 /ATTEMPT TO OVERFLOW SAC ON CONCATENATE 0611 /FI -FI-1 /ATTEMPT TO CLOSE OR USE UNOPENED FILE 0401 /DA -DA-1 /ATTEMPT TO READ PAST END OF DATA LIST 0723 /GS -GS-1 /TOO MANY NESTED GOSUBS 2322 /SR -SR-1 /ATTEMPT TO READ STRING FROM NUMERIC FILE 2327 /SW -SW-1 /ATTEMPT TO WRITE STRING INTO NUMERIC FILE 2001 /PA -PA-1 /ILLEGAL ARG IN POS 0603 /FC -FC-1 /OS/8 ERROR WHILE CLOSING TENTATIVE FILE 0311 /CI -CI-1 /INQUIRE FAILURE IN CHAIN 0314 /CL -CL-1 /LOOKUP FAILURE IN CHAIN 1116 /IN -IN-1 /INQUIRE FAILURE IN OPEN 0417 /DO -DO-1 /NO MORE ROOM FOR DRIVERS 0605 /FE -FE-1 /FETCH ERROR IN OPEN 0217 /BO -BO-1 /NO MORE FILE BUFFERS AVAILABLE 0516 /EN -EN-1 /ENTER ERROR IN OPEN 1106 /IF -IF-1 /ILLEGAL DEV:FILENAME SPECIFICATION 2314 /SL -SL-1 /STRING TOO LONG OR UNDEFINED 1726 /OV -O0-1 /NUMERIC OR INPUT OVERFLOW 1415 /LM -LM-1 /ATTEMPT TO TAKE LOG OF NEG # OR 0 0515 /EM -EM-1 /ATTEMPT TO EXPONENTIATE A NEG NUMBER TO A REAL ROWER 1101 /IA -IA-1 /ILLEGAL ARGUMENT IN USER FUNCTION 0330 /CX -CX-1 /ILLEGAL FILENAME EXTENSION IN A CHAIN STATEMENT /*********************************************************** EFATAL, /ERRORS BEFORE THIS LABEL ARE FATAL /******************************************************* 2205 /RE -RE-1 /ATTEMPT TO READ PAST EOF 2705 /WE -WE-1 /ATTEMPT TO WRITE PAST EOF 0426 /DV -DV-1 /ATTEMPT TO DIVIDE BY 0 2324 /ST -ST-1 /STRING TRUNCATION ON INPUT 1117 /IO -IO-1 /TTY INPUT BUFFER OVERFLOW T= . *ETAB *T /SEG$ FUNCTION /RETURNS SEGMENT OF X$ BETWEEN Y AND Z /IF Y<=0,THEN Y TAKEN AS 1 /IF Y>LEN(X$),NULL STRING RETURNED /IF Z<=0,NULL STRING RETURNED /IF Z>LEN(X$),Z IS SET=LEN(X$) /IF Z<Y,NULL STRING IS RETURNED SEG, CLA IAC DCA MODESW /RETURN IN STRING MODE TAD ACH /IS Y>0? SMA SZA CLA JMS I PUNSFIX /FIX IF POSITIVE SNA IAC /SET Y TO 1 IF Y.LE.0 DCA YARG TAD SACLEN /COMPARE YARG TO SACLEN CIA STL CIA TAD YARG SNL SZA CLA /SKP IF YARG.LOS.LEN(X$) JMP NULLST /NO-RETURN THE NULL STRING DCA INSAV /FAKE POINTER TO SCALAR #0 JMS I ARGPLK /GET ADDR OF Z JMS I PFFGET /LOAD Z INTO FAC ARGPLK, ARGPRE /LOC SKIPPED BY FPP SO WE PUT CONST HERE TAD ACH /HI MANTISSA OF Z SPA SNA CLA /IS Z<0? JMP NULLST /YES-RETURN THE NULL STRING JMS I PUNSFIX /NO-FIX Z STL TAD SACLEN /CALC Z-LEN(SAC) SNL /SKP IF Z.LO.LEN(SAC) CLA /ELSE TAKE LEN(SAC) CMA TAD SACLEN TAD YARG /NUMBER OF BYTES TO USE SMA JMP NULLST /NONE, RETURN NULL STRING DCA STRCNT TAD YARG /INDEX INTO STRING FOR SOURCE BYTES TAD (SAC-2 DCA XR2 /SET SOURCE XR TAD STRCNT DCA SACLEN /SET NEW LENGTH OF SAC NOW TAD I XR2 /NOW MOVE THE BYTES DCA I SACXR ISZ STRCNT JMP .-3 JMP I PILOOP /--RETURN-- NULLST, CLA CLL DCA SACLEN /ZERO SAC JMP I PILOOP /--RETURN-- YARG, 0 PAGE /POS FUNCTION /RETURNS THE POSITION IN X$ OF Y$ STARTING AFTER Z POS, CLA CLL DCA INSAV /FAKE AS STRING CALL TO STRING 0 JMS I (STFIND /FIND Y$ TAD STRCNT /# OF CHARS IN Y$ SNA CLA /IS Y$ THE NULL STRING? JMP ONERET /YES-RETURN 1 AS POSITION TAD SACLEN /NO-# OF CHARS IN X$ SNA CLA /IS X$ THE NULL STRING? JMP ZRORET /YES-RETURN 0 TAD ACH /NO-GET HORD OF Z SPA SNA CLA /IS Z GT 0? PA, JMS I PERROR /NO-ILLEGAL ARGUMENT JMS I PUNSFIX /FIX Z DCA POSITN /USE IT AS POSITION TO START SEARCH TAD POSITN STL TAD SACLEN /COMPARE POSITION TO MAXIMUM LENGTH OF STRING SNL SZA CLA JMP PA /Z IS PAST END OF STRING-ERROR POSSET, TAD STRCNT CMA TAD POSITN /GET POSITION NOW CHECKING+SIZE IF Y$ TAD SACLEN /COMPARE AGAINST LENGTH OF STRING SMA SZA CLA /ANY MORE TO COME? JMP ZRORET /NO-SEARCH FAILS JMS I (BYTSET /SETUP BYTE LOAD ROUTINE TAD POSITN /SEARCH START POSITION IN X$ TAD (SAC-2 /ADD TO BASE OF SAC DCA SACXR TAD STRCNT /# OF CHARS IN Y$ DCA TEMP3 /COUNTER SRCLP, JMS I (LDB CIA TAD I SACXR /COMPARE CHARS SNA CLA /DO THEY MATCH? JMP SCONTU /YES-CONTINUE MATCH TO NEXT CHAR IN X$ AND Y$ ISZ POSITN /BUMP POSITION TO BE CHECKED JMP POSSET /ITERATE SCONTU, ISZ TEMP3 /MORE CHARS IN Y$? JMP SRCLP /YES, ITERATE TAD POSITN /NO FOUND A MATCH JMP I (FLOATS ZRORET, JMS I PFACCLR /SEARCH FAILS-RETURN 0 JMP I PILOOP ONERET, CLA IAC JMP I (FLOATS /RETURN 1 POSITN, 0 PAGE RELOC ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////// OVERLAY 3-FILE MANIPULATING //////////// ///////// FUNCTIONS //////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// *3400 /FILE CLOSING ROUTINE VERSON^100+SUBVFF+6000 /VERSION WORD FOR FILES OVERLAY ANDPTR, ANDLST ANDLST, 7776 /MASKS FOR CLEARING BUFFER AND HANDLER STATUS BITS 7775 7773 7767 CLOSE, TAD ENTNO /GET FILE # SNA CLA /IS IT TTY? JMP I PILOOP /YES-DON'T DO ANYTHING JMS I PIDLE /SEE IF FILE OPEN JMS I PFTYPE /IS FILE NUMERIC? JMP NOCZ /YES-DON'T OUTPUT ^Z JMS I (FOTYPE /NO-IS FILE VARIABLE LENGTH? JMP NOCZ /NO-DON'T OUTPUT ^Z TAD (232 /YES JMS I PPUTCH /WRITE A ^Z IN FILE NOCZ, JMS I (WRBLK /WRITE LAST BLOCK IF IT HAS CHANGED JMS I PPSWAP /RESTORE 17600 JMS I (FOTYPE /IS FILE FIXED LENGTH? JMP CLOSED /YES-NO NEED TO CLOSE THE FILE TAD I IOTLEN /NO-GET FILE LENGTH DCA CLENG /PUT IN CLOSE CALL TAD IOTFIL DCA FNAP /POINTER TO FILE NAME TAD I IOTHDR CLL RTL RTL RAL /GET DEVICE NUMBER INTO BITS 8-11 AND O17 /ISOLATE IT CIF 10 JMS I O7700 /CALL USR 4 /CLOSE FNAP, . /POINTER TO FILE NAME CLENG, . FC, JMS I PERROR /FILE CLOSING ERROR CLOSED, TAD I IOTBUF /GET BUFFER ADDRESS CLL RTL RTL /BUFFER NUMBER INTO AC RAL /BITS 10,11 AND (3 /STRIP TAD ANDPTR /USE AS INDEX INTO MASKS DCA TEMP1 TAD BMAP /BUFFER STATUS MAP AND I TEMP1 /CLEAR THE BIT FOR THIS BUFFER DCA BMAP TAD I IOTHDR /HEADER WORD AND O7400 /STRIP HEADER TO DEVICE # ONLY DCA I IOTHDR TAD MM4 /-4 DCA TEMP3 /USE AS COUNTER CHECKL, TAD TEMP3 /GET 3 OF FILE TO CHECK TAD (W0PTR /MAKE POINTER TO PROPER W0 HEADER DCA TEMP1 /SAVE POINTER TAD TEMP3 /-# OF FILE WERE CHECKING TAD ENTNO /COMPARE TO CURRENT NUMBER SNA CLA /IS IT THIS ONE? JMP PSTCHK /YES-DON'T CHECK DRIVER TAD I TEMP1 /GET HEADER WORD FOR THE FILE OF INTEREST AND O7400 /ISOLATE DEVICE # CIA /NEGATE TAD I IOTHDR /COMPARE TO CURRENT DEVICE # SNA CLA /SAME DEVICE? JMP CRETN /YES-LEAVE DRIVER IN CORE PSTCHK, ISZ TEMP3 /ALL 4 CHECKED? JMP CHECKL /NO-CHECK THE NEXT 1 TAD I IOTHDR AND O10 /GET HANDLER LENGTH BIT SZA CLA /TWO PAGES? JMP TPREL /YES-FREE BOTH PAGES TAD I IOTHND /THIS IS THE ONLY FILE USING HANDLER THEN CLL RTL RTL /SLIDE BITS 4,5 OF HANDLER PAGE TO AC BITS 10,11 RAL AND (3 /ISOLATE HANDLER BUFFER NUMBER TAD ANDPTR /MAKE POINTER TO PROPER AND MASK RELCOM, DCA TEMP1 TAD DMAP /DRIVER PAGE MAP AND I TEMP1 /CLEAR HANDLER PAGE BIT DCA DMAP CRETN, DCA I IOTHND /SET FILE AS IDLE JMS I PPSWAP /GET RID OF 17600 AGAIN JMP I PILOOP /DONE TPREL, TAD I IOTHND /ONLY FILE USING HANDLER CLL RTL RTL /ISOLATE HANDLER BUFFER NUMBER RAL AND (3 TAD (ANDLS2 /USE AS INDEX TO AND MASK JMP RELCOM W0PTR, FILE1 FILE2 /FILE TABLE ENTRIES FILE3 FILE4 MM4, ANDLS2, 7774 7701 /CODE TO READ IN COMPILER AND START IT /THIS CODE GETS MOVED TO FIELD 1 AND EXECUTED FROM /LOC 2001-2013 IN FIELD 1 CREAD, CDF 10 CIF 0 4613 /"JMS I L7607K" 3700 /31 PAGES 0 /0-7577 CBLK, 7617 /STARTING BLOCK OF COMPILER HLT /SYSTEM ERROR,AND SINCE WE ARE PROBABLY CLOBBERED,WE CAN'T REPORT IT CIF 0 5612 /"JMP I .+1"-START THE COMPILER 7001 /STARTING ADDR OF COMPILER K7607K, 7607 /LESS THAN THE DESIRED VALUE EXTCHK, 0 /SKIP RETURN IF CURRENT AC0002 IAC TAD IOTFIL /IS .SV DCA EXTEMP /JUST A TEMP TAD I EXTEMP /GET EXTENSION TAD (-2326 SNA CLA /IS IT .SV? ISZ EXTCHK /YES: SKIP JMP I EXTCHK EXTEMP, 0 PAGE /CHAIN FUNCTION /SETS UP COMMAND DECODER AREA,THEN CHAINS TO BCOMP.SV CHAIN, JMS I PXPRINT /EMPTY TTY RING BUFFER JMP .-1 JMS I PPSWAP /RESTORE PG 17600 JMS I DNA2 /GET FILE NAME IN NAME AREA FROM CURRENT FILE CIF 10 JMS I O7700 /CALL USR 10 /LOCK IN CORE TAD I IOTDEV DCA DNA1 /FIRST TWO CHARS OF DEV NAME TAD I IOTDEV+1 /LAST TWO CHARS DCA DNA2 CIF 10 JMS I USR 12 /INQUIRE DNA1, 0 /DEVICE NAME DNA2, NAMEG CDIN, 0 CI, JMS I PERROR /ERROR TAD CDIN /GET ENTRY POINT OF DRIVER FOR CHAIN FILE SZA CLA /IS IT IN CORE? JMP DISIN /YES-NO NEED TO FETCH IT TAD DNA2 /NO-DEVICE # INTO AC CIF 10 JMS I USR 1 /FETCH HANDLER 7001 /INTO PAGE 7000 JMP CI /MAKE IT LOOK LIKE INQUIRE ERROR DISIN, TAD IOTFIL DCA STB /POINTER TO FILE NAME TAD DNA2 /GET DEVICE # CIF 10 JMS I USR 2 /LOOKUP STB, 0 /POINTER TO FILE NAME FLN, 0 CL, JMS I PERROR /LOOKUP ERROR TAD STB /GET STARTING BLOCK CDF 10 DCA I (7620 /STARTING BLOCK IN CD AREA TAD FLN /FILE LENGTH CLL RTL RTL AND (7760 /PUT IN BITS 0-7 TAD DNA2 /COMBINE WITH DEVICE # DCA I (7617 /PUT IN CD AREA TAD O100 /SET R SWITCH DCA I (7644 TAD I (7605 /STARTING BLOCK OF COMPILER SNA /(IS THIS A CORE IMAGE? JMP CICHAIN /YES: HANDLE SOMEWHAT DIFFERENTLY CDF DCA I (CBLK /INTO COMPILER READ CODE CDF JMS I (EXTCHK /SKP IF EXTENSION .SV SKP JMP CX /ERROR IF IT IS JMS I (PSWAP2 /NOW EXEC DESTRUCTIVE EXIT CODE CDF 10 JMP I (CSMOVE /MOVE THE COMPILER READ TO FIELD 1 AND EXECUTE IT CICHAIN,CDF JMS I (EXTCHK /SKP IF EXTENSION IS .SV CX, JMS I PERROR /ERROR IF NOT JMS I (PSWAP2 /NOW EXEC ONCE ONLY CLEAN UP ROUTINE TAD STB DCA CHNSTB CIF 10 /NOW DO A RESET AND DELETE TENTATIVE FILES JMS I USR 13 /RESET CIF 10 /FLAG TENTATIVE FILE CLEANUP JMS I USR 6 CHNSTB, HLT /FILE LOOKUP FLOOK, AC0002 JMS I (ENTLOK /LOOKUP DCA I IOTLEN /ACTUAL LENGTH TAD I IOTLEN DCA I IOTMAX /ALSO EQUALS MAXIMUM LENGTH CLEANP, DCA I IOTPOS /ZERO COLUMN POINTER CMA /-1 TAD I IOTLOC /STARTING BLOCK-1 DCA I IOTBLK /CURRENT BLOCK #=STARTING BLOCK-1 TAD I IOTBUF DCA I IOTPTR /READ/WRITE POINTER AT BEGINNING OF BUFFER CIF 10 JMS I USR /CALL TO USR 11 /USROUT JMS I PPSWAP /GET RID OF 17600 JMS I (BLZERO JMS I (NEXREC /DO A NEXREC TO READ IN FIRST FILE BLOCK JMP I PILOOP /DONE /ROUTINE FOR INTERPRETER EXIT FSTOP, KSF /IS THE KEYBOARD FLAG SET? JMP NOCTC /NO-THERE IS NO CHANGE ^C SENT US HERE TAD O200 /YES-FORCE PARITY BIT KRB /GET CHARACTER TAD (-203 /COMPARE AGAINST ^C SZA CLA /WAS IT ^C? JMP NOCTC /NO-THIS IS A NORMAL EXIT TSF JMP .-1 TAD ("^ /YES -ECHO ^ TLS CLA TSF JMP .-1 TAD ("C /ECHO "C" TLS NOCTC, TSF JMP .-1 JMP I (MEXIT PAGE /FILE OPENING ROUTINE OPENAV, TAD (4 /ALPHANUMERIC,VARIABLE LENGTH OPENAF, IAC /ALPHANUMERIC,FIXED LENGTH JMP OPENNF OPENNV, TAD (4 /NUMERIC,VARIABLE LENGTH OPENNF, DCA I IOTHDR /SET UP HEADER WORD TAD ENTNO /IS FILE TTY? SNA CLA JMP I PILOOP /YES-DON'T DO ANYTHING TAD I IOTHND /GET HANDLER ENTRY SZA CLA /IS FILE IDLE? FB, JMS I PERROR /ATTEMPT TO OPEN FILE ALREADY OPEN JMS I PPSWAP /RESTORE 17600 JMS I (NAMEG /GET FILE DEVICE NAME AND FILE NAME INTO WORDS 7-14 FROM SAC CIF 10 JMS I O7700 /CALL TO USR 10 /LOCK USR IN CORE TAD I IOTDEV DCA DEVNA1 /DEVICE NAME INTO INQUIRE CALL TAD I IOTDEV+1 DCA DEVNA2 CIF 10 JMS I USR /CALL TO USR 12 /INQUIRE DEVNA1, . /DEVICE NAME DEVNA2, . ENTRYN, 0 /ENTRY POINT IN, JMS I PERROR /INQUIRE ERROR TAD DEVNA2 /GET DEVICE # CLL RAR RTR /PUT INTO BITS 0-3 RTR TAD I IOTHDR DCA I IOTHDR /STORE IN HEADER WORD TAD ENTRYN /GET DRIVER ADDRESS SZA /IS IT IN CORE? JMP I (DRIVRN /YES-NO NEED TO FETCH IT TAD DMAP /NO-GET MAP OF DRIVER PAGES CLL RAR /PAGE 7000 BIT IN LINK SNL /IS PAGE 7000 FREE? JMP FREE70 /YES CLL RAR /NO-7200 BIT TO LINK SNL /IS PAGE 7200 FREE? JMP FREE72 /YES CLL RAR /NO-7400 BIT TO LINK SZL CLA /IS PAGE 7400 FREE? DO, JMS I PERROR /NO-NO MORE ROOM FOR DRIVERS TAD O7400 /YES-LOAD HANDLER INTO 7400 DCA FETPAG /SET UP IN FETCH CALL TAD (4 /SET BIT 9 TO SHOW PAGE 7400 OCCUPIED JMP DFETCH /FETCH DRIVER FREE70, CLL RAR /PAGE 7200 BIT TO LINK SNL CLA /IS 7200 FREE? IAC /YES-THERE IS ROOM FOR A TWO PAGE HANDLER TAD (7000 DCA FETPAG /SET UP FETCH TO USE PAGE 7000 CLL CLA CML RTL /TURN ON BIT 10 DCA TPH /SAVE IN TWO PAGE SET WORD IAC /SET BIT 11 TO SHOW PAGE 7000 OCCUPIED JMP DFETCH /FETCH HANDLER FREE72, CLL RAR /7400 BIT TO LINK SNL CLA /IS 7400 PAGE FREE? IAC /YES-THEN THERE IS ROOM FOR A 2 PAGE HANDLER TAD (7200 DCA FETPAG /SET ADDRESS IN FETCH CALL TAD (4 DCA TPH /IF TWO PAGE LOADED,SET BIT 9 ALSO AC0002 /TURN ON BIT 10 TO SHOW PAGE 7200 OCCUPIED DFETCH, TAD DMAP /TURN ON PAGE BIT FOR WHERE BUFFER WILL BE LOADED DCA DMAP TAD DEVNA2 /DEVICE # IN AC CIF 10 JMS I USR /CALL TO USR 1 /FETCH FETPAG, . /DRIVER ADDRESS FE, JMS I PERROR /FETCH ERROR CDF 10 CLA CMA TAD I (37 /GET ADDR OF HANDLER INFO TABLE TAD DEVNA2 /USE THE DEVICE # AS AN INDEX INTO THAT TABLE DCA TEMP1 /SAVE POINTER TAD I TEMP1 /GET THE INFO WORD FOR THE HANDLER JUST FETCHED CDF SMA CLA /IS HANDLER 2 PAGES LONG? JMP DRAP /NO MAP IS COMPLETE TAD TPH /YES-UPDATE DRIVER MAP TO INCLUDE TAD DMAP /SECOND PAGE OF TWO PAGE HANDLERS DCA DMAP TAD O10 TAD I IOTHDR /SET 2 PAGE BIT IN HEADER WORD DCA I IOTHDR DRAP, TAD FETPAG /HANDLER ENTRY ADDRESS JMP I (DRIVRN /PAGE ESCAPE TPH, 0 /ROUTINE TO MOVE THE COMPILER READER INTO FIELD 1 AND START IT CSMOVE, TAD (CREAD-1 DCA XR1 /POINTES TO COMPILER STARTING CODE TAD (-13 DCA TEMP1 /COUNTER TAD (2000 DCA XR2 /MOVE TO LOC 2001 IN FIELD 1 CDF TAD I XR1 /GET WORD OF CODE CDF 10 DCA I XR2 /MOVE IT ISZ TEMP1 /DONE? JMP .-5 /NO CIF 10 /YES-START IT JMS I (2000 PAGE DRIVRN, DCA I IOTHND /DRIVER ENTRY INTO I/O TABLE TAD BMAP /GET BUFFER MAP CLL RAR /BUFF1 BIT TO LINK SNL /IS IT FREE? JMP B1 /YES-ASSIGN BUFF1 RAR /BUFF2 BIT TO LINK SNL /IS IT FREE? JMP B2 /YES-ASSIGN BUFF2 RAR /BUFF3 BIT TO LINK SNL /IS IT FREE JMP B3 /YES-ASSIGN BUFF3 RAR /NO-BUFF4 BIT TO LINK SZL CLA /IS IT FREE? BO, JMS I PERROR /NO-NO MORE BUFFERS AVAILABLE TAD (1400 DCA I IOTBUF /SET BUFFER ADDRESS TO 1400 TAD O10 /SET BUFF4 BIR IN MAP JMP BUFASS B3, CLA TAD (1000 DCA I IOTBUF /SET BUFFER ADDRESS TO 1000 TAD (4 JMP BUFASS /SET BUFF3 BIT IN MAP B2, CLA TAD O400 DCA I IOTBUF /SET BUFF ADDRESS TO 400 CLL CML CLA RTL /SET BUFF2 BIT IN MAP JMP BUFASS B1, CLA DCA I IOTBUF /SET BUFF ADDRESS TO 0000 CLA IAC /TURN ON BUFF1 BIT IN MAP BUFASS, TAD BMAP DCA BMAP /UPDATE BUFFER ASSIGNMENT MAP TAD I IOTHDR /GET HEADER WORD CLL RTR RAR /FIXED,VARIABLE BIT TO LINK SNL CLA /IS IT FIXED? JMP I (FLOOK /YES-DO A LOOKUP TAD (3 /NO-DO AN ENTER JMS ENTLOK /ENTER DCA I IOTMAX /MAXIMUM LENGTH IN WORD 7 DCA I IOTLEN /ZERO ACTUAL LENGTH JMP I (CLEANP /FINALIZE I/O TABLE ENTRY MEXIT, CLA JMS I PPSWAP JMS I (PSWAP2 /RESTORE PG 27600 CDF 10 TAD I (EDBLK /GET BLOCK # FOR EDITOR CDF SNA /SHALL WE CALL THE EDITOR? JMP I (7600 /NOkJUST CALL OS/8 DCA EBLK /YES-PUT THE BLOCK # IN DRIVER CALL JMS I (7607 /CALL SYS DRIVER 2100 /READ 8 BLOCKS 0 /INTO 0-3377 EBLK, . /BLOCK # OF EDITOR HLT /SYS ERROR,AND SINCE WE ARE PROBABLY CLOBBERED,WE CAN'T REPORT IT JMP I .+1 /START THE EDITOR 3212 ENTLOK, 0 DCA FNOM /FUNCTION NUMBER IN PLACE TAD IOTFIL /POINTER TO FILE NAME DCA STARTB /INTO CALL TAD I (DEVNA2 /DEVICE NUMBER CIF 10 JMS I USR /CALL TO USR FNOM, . /ENTER OR LOOKUP STARTB, . FLEN, . EN, JMS I PERROR /ENTER ERROR TAD STARTB /FILE STARTING BLOCK # SZA CLA /IS IT NON-ZERO? JMP FILSTU /YES-DEVICE IS FILE STRUCTURED TAD FLEN /NO-GET FILE LENGTH SZA CLA /IS IT EMPTY? JMP FILSTU /NO-DEVICE IS FILE STRUCTURED TAD (20 /NO-FILE IS READ/WRITE ONLY TAD I IOTHDR DCA I IOTHDR /SET READ/WRITE ONLY BIT TAD FNOM CLL RAR SNL CLA IAC FILSTU, TAD STARTB /GET STARTING BLOCK # OF FILE DCA I IOTLOC /PUT IN I/O TABLE TAD FLEN /FILE LENGTH CIA /MAKE FILE LENGTH POSITIVE JMP I ENTLOK /RETURN /SUBROUTINE P2SWAP-RESTORE OS/8 RESIDENT MONITOR PRIOR TO EXIT FROM INTERPRETERTER /THIS IS DESTRUCTIVE CODE,AND ONCE THIS ROUTINE HAS BEEN EXECUTED /THERE IS NO PLACE TO GO BUT OUT. /HAS 3 FUNCTIONS: / 1) REMOVES CTRL/C HOOKS FROM SYS DRIVER / 2) RESTORES BATCH CONTROL WORDS TO 27774-27777 / 3) IF SYS=TD/8E,RESTORES PAGE 27600 AND RETURNS CDFS TO PAGE 07600 PSWAP2, 0 TAD (4207 DCA I (7600 /REMOVE CTRL/C HOOKS TAD (6213 DCA I (7605 TAD (7600 DCA I (HICORE /FUDGE POINTER IN SWAP ROUTINE (IN CASE IT WAS TD8E) TAD PSFLAG /GET RESIDENT STATUS FLAG SPA CLA /IS THIS TD8/E SYS? JMS I (PSWP2P /YES-RESTORE PAGE 27600 AND PAGE 07600 TAD CDFIO DCA .+3 /CDF TO HI CORE CDF 10 TAD I BOSPT1 /GET BATCH WORD CDF 10 DCA I BOSPT2 /BACK INTO LOFTY STATE ISZ BOSPT1 ISZ BOSPT2 JMP .-6 CDF JMP I PSWAP2 /YES-WE ARE FINISHED,SO RETURN BOSPT1, 7600 BOSPT2, 7774 PAGE /PARSE A FILENAME OF THE FORM "DEVN:FILENM.EX" IN THE SAC /DSK: AND A NULL EXTENSION ARE THE DEFAULTS /THE END OF THE SAC IS USED AS A WORK AREA /IF SYNTAX IS CORRECT, THE NAME IS PACKED INTO /THE FILENAME FIELD OF THE CURRENT FILE /OTHERWISE A FATAL ERROR IS RETURNED /ENTERED WITH OS/8 SWAPPED IN WKAREA= SAC+16 /DEFINE SCRATCH AREA NAMEG, 0 TAD SACLEN TAD (16 /COMPARE STRING LENGTH TO 16 SPA CLA IF, JMS I PERROR /TOO MANY CHARS IN "DEV:FILENM.EX" TAD SACLEN DCA TEMP2 /STRING LENGTH COUNTER TAD PSACM1 DCA SACXR TAD (DSK-1 /FIRST USE THE DEFAULT DEVICE JMS DEVFUD NCG, TAD I SACXR /GET CHAR FROM SAC DCA TEMP1 /SAVE TAD TEMP1 TAD (-72 /IS IT A COLON? SNA JMP CAD /YES-CHARS SO FAR=DEVICE NAME TAD (14 /NO-IS IT A PERIOD? SNA CLA JMP SSAD /YES-NEXT TWO CHARS=EXTENSION TAD TEMP1 /NO-GET CHAR AGAIN DCA I XR2 /STORE IN WORK AREA ISZ TEMP4 /BUMP COUNT FOR CURRENT SECTION NCGS, ISZ TEMP2 /END OF STRING YET? JMP NCG /NO-NEXT CHAR TAD TEMP4 /YES-GET CHAR COUNT FOR THIS SECTION (NAME) TAD (-6 SMA SZA CLA /IS IT >6? JMP IF /YES-TOO MANY CHARACTERS IN FILE NAME TAD (WKAREA-1 /NO-ADDRESS OF SCRATCH NAME BLOCK DCA XR1 STA /-1 TAD IOTDEV /ADDRESS OF FINAL NAME BLOCK-1 DCA XR2 TAD (-6 /MOVE 6 WORDS DCA TEMP2 MML, TAD I XR1 CLL RTL RTL RTL TAD I XR1 DCA I XR2 /MOVE NAME WORD FROM SCRATCH AREA TO FINAL DEST ISZ TEMP2 /DONE? JMP MML /NO JMP I NAMEG /YES-RETURN CAD, TAD TEMP4 /GET CHAR COUNT FOR THIS SECTION TAD (-4 /COMPARE AGAINST 4 SMA SZA CLA /TOO MANY CHARS? JMP IF /YES-DEVICE NAME TOO LONG TAD (WKAREA-1+4 JMS DEVFUD /CLEAR BUF AND GET NAME FROM FILE FIELD THIS TIME JMP NCGS SSAD, TAD TEMP4 /COUNT FOR THIS SECTION (FILE NAME) TAD (-6 SMA SZA CLA /TOO MANY? JMP IF /YES-FILE NAME TOO LONG DCA TEMP4 /NO-CLEAR COUNT TAD DSK TAD TEMP2 /COMPARE AGAINST # OF CHARS LEFT SPA SNA CLA JMP IF /TOO MANY CHARS IN EXTENSION TAD (WKAREA-1+12 DCA XR2 JMP NCGS DEVFUD, 0 DCA XR1 /POINT AT LOC OF DEV: TAD (WKAREA-1 DCA XR2 /POINT AT START OF WORK AREA TAD (-10 DCA TEMP4 TAD (-4 DCA TEMP3 TAD I XR1 /GET A DEVICE NAME BYTE DCA I XR2 /STORE IN WORK AREA DEVICE FIELD ISZ TEMP3 JMP .-3 /ITERATE DCA I XR2 /NOW CLEAR REST OF FILE NAME ISZ TEMP4 JMP .-2 /ITERATE TAD (WKAREA-1+4 /POINT XR2 AT FILENAME FIELD DCA XR2 JMP I DEVFUD /RETURN WITH TEMP4 CLEAR DSK, 4;23;13;0 /6BIT DEFAULT DEVICE NAME "DSK" /SUBROUTINE TO RESTORE PAGE 27600 OF TD8/E DRIVER /AND READJUST THE CDFS IN FIELD 0 PSWP2P, 0 TAD PSFLAG RTL SNL CLA /BIT 1 SET MEANS PHONEY TD8E JMP .+3 DCA PSFLAG JMP I PSWP2P DCA PSFLAG /CLEAR RESIDENT STATUS FLAG TAD (CDF 20 DCA I (P2CDF /PUT CDF 20 IN SWAP ROUTINE TAD (CDF 20 DCA I (P2CDF1 JMS I PPSWAP /MOVE DOWN PAGE 27600 // // NEXT 3 LINES WERE PART OF BPAT.PA // JMS I PHFIX // JMP I PSWP2P // PHFIX, HFIX // TAD (6223 // DCA I (7642 // TAD (6222 DCA I (7721 TAD (6222 /RESTORE CDFS IN PAGE 07600 DCA I (7727 JMP I PSWP2P /RETURN PAGE FIELD 0 ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// /////////////// END OF OVERLAY AREA ///////////////////////////////// ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// $ <:STTYF, 1+1"E0;' J<SPRINT;R-5DI[XPRINT> J<SSACPTR;R-6DI[SAC-1> J<SPUTCHL;R-6DI[PUTCH> J<SILOOPL;R-6DI[ILOOP> J<SINTL;R-4DI[UNSFIX> J<SCDFPSL;R-6DI[CDFPSU> J<SERROR;R-5DI[ERRDIS> J<SFBITS;R-5DI[FBITGT> J<SPWFECL;R-5DI[PWFECH> J<SMPYLNK;R-6DI[MPY> J<SXPUT;R-4DI[XPUTCH> J<SFIDLE;R-5DI[IDLE> J<SDEVCAL;R-6DI[DRCALL> J<SWRITFW;R-6DI[WRITFL> J<SSTHINL;R-6DI[STHINI> J<SLDHINL;R-6DI[LDHINI> J<SSTH;R-3DI[STHL> J<SLDH;R-3DI[LDHL> J<SFACSAL;R-6DI[FACSAV> J<SFACREL;R-6DI[FACRES> J<SFGETL;R-5DI[FFGET> J<SFPUTL;R-5DI[FFPUT> J<SFNORL;R-5DI[FFNOR> J<SFCLR;R-4DI[FACCLR> J<SFNEGL;R-5DI[FFNEG> J<SFLOATL;R-6DI[FFLOAT> J<SGETCHL;R-6DI[GETCH> J<SEOFSEL;R-6DI[EOFSET> J<SBSWL;R-4DI[BSWP> J<SPACKL;R-5DI[PACKCH> J<SCNOCLL;R-6DI[CNOCLR> J<SBUFCHL;R-6DI[BUFCHK> J<SFTYPL;R-5DI[FTYPE> J<SCHRNOL;R-6DI[CHARNO> J<SNEXREL;R-6DI[NEXREC> J<SCRLF;R-4DI[CRLFR> J<SVALLK;R-5DI[VALGET> J<SPATCHP;R-6DI[PATCHF> J<SP1SWAP;R-6DI[PSWAP> J<SLDHRST;R-6DI[LRESET> J<SSTHRST;R-6DI[SRESET> P> |
Added src/os8/uni/LANGUAGE/BASIC/UF.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 | /OS8 BASIC USER FUNCTIONS, V5 / / / / / / / / / /COPYRIGHT (C) 1974 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 MANUAL. / /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. / / / / / / / / / / /JR 6-JUN-77 MODIFIED FOR V5 VERSON= 5 /VERSION OF BRTS SUBVUF= 01 /SUBVERSION OF BASIC.UF /FIRST WORD OF THIS OVERLAY CONTAINS /BRTS VERSION IN LEFT HALF AND SUBVERSION IN RIGHT HALF FPP= 4000 FADD= FPP+2000 FSUB= FPP+2117 FMPY= FPP+1600 FDIV= FPP+1722 FFNEG= FPP+2135 FFPUT= FPP+2256 FFGET= FPP+2241 FFNOR= FPP+2215 FACCLR= 0365 UNSFIX= 1615 PSWAP= 1230 ARGPRE= 307 /VC8E POINT PLOTTING DISPLAY CONTROL IOT'S DISD= 6052 /SKIP ON DONE FLAG DILX= 6053 /LOAD AC2-11 INTO X-REGISTER (DOESN'T CLEAR AC) DILY= 6054 /LOAD AC2-11 INTO Y-REGISTER (DOESN'T CLEAR AC) DIXY= 6055 /INTENSIFY /DK8EP PROGRAMMABLE REAL TIME CLOCK IOT'S CLZE= 6130 /CLEAR CLOCK ENABLE BITS PER AC CLSK= 6131 /SKIP ON CLOCK FLAG CLOE= 6132 /SET CLOCK ENABLE BITS PER AC CLAB= 6133 /AC TO CLOCK BUFFER CLSA= 6135 /READ CLOCK STATUS TO AC /BIT 0 SET ON OVERFLOW /BITS 9-11 SET ON RESPECTIVE SCHMITT TRIGGER FIRING /CLOCK ENABLE REGISTER BITS /BIT FUNCTION /0 INTERRUPT ENABLE BIT /1-2 MODE BITS: / 00 RUN COUNTER, INTERRUPTING EACH 4096 TICKS / 01 RUN COUNTER AND RESET WITH CLOCK BUFFER ON OVERFLOW / 10 RUN COUNTER AND READ COUNTER WHEN EVENT OCCURS / 11 RUN COUNTER AND READ AND CLEAR IT ON EVENT /3-5 RATE SELECTION: / 000 STOPPED / 001 EXTERNAL TIME BASE / 010 100 HZ / 011 1 KHZ / 100 10 KHZ / 101 100 KHZ / 110 1 MHZ / 111 STOPPED /6 OVERFLOW STARTS A-D /7 SET TO INHIBIT CLOCK /8 EVENT ON CHAN 1, 2, OR 3 CAUSE INTERRUPT AND OVERFLOW /9-11 ENABLE EVENTS 1 THRU 3 /AD8EA A-D CONVERTER IOT'S ADCL= 6530 /CLEAR A-D ADLM= 6531 /LOAD MULTIPLEXOR FROM AC8-11 AND CLEAR AC ADST= 6532 /START A-D CONVERTER ADRB= 6533 /READ A-D BUFFER INTO AC0-11 AND CLEAR FLAG ADSK= 6534 /SKIP ON A-D DONE FLAG (DOESN'T CLEAR FLAG) ADLE= 6536 /SKIP ON TIMING ERROR ADRS= 6537 /READ STATUS REGISTER /STATUS REGISTER FORMAT: /0 A-D DONE FLAG /1 TIMING ERROR FLAG /2 ENABLE INTERRUPT ON DONE FLAG /3 ENABLE INTERRUPT ON TIMING ERROR /4 ENABLE EXTERNAL START (EG CLOCK) /5 AUTO INCREMENT MODE /6-7 UNUSED /8-11 4 BIT CHANNEL NUMBER /DR8E-A DIGITAL BUFFERED I/O BASE IOT'S DBDI= 6500 /DISABLE INTERRUPTS DBEI= 6501 /ENABLE INTERRUPTS DBSK= 6502 /SKIP IF THE IN FLAG IS SET DBCI= 6503 /SET SELECTED BITS IN INPUT REGISTER DBRI= 6504 /READ INPUT REGISTER TO AC DBCO= 6505 /CLEAR SELECTED BITS IN OUTPUT REGISTER DBSO= 6506 /SET SELECTED BITS IN OUTPUT REGISTER DBRO= 6507 /READ OUTPUT REGISTER TO AC ACX= 44 ACH= 45 ACL= 46 MAXPTS= XR0 REFRFL= XR1 BUFXR= XR2 DX= XR3 /XR3,XR4,XR5= TEMP FL PT LOC SPF= 6040 /SET TTY PRINTER FLAG CAF= 6007 /RESET PROCESSOR IA= 1465 /ENTRY POINT FOR USER FUNCTION ERROR MESSAGE NOPUNCH /DUMMY SECTION FOR MISC PAGE 0 REFERENCES *1 JMP I .+1 SERVC *6 USECON, 0 /ENTRY #OF USER BUF IN DIM TBL *10 XR0, 0 XR1, 0 XR2, 0 XR3, 0 XR4, 0 XR5, 0 *20 CDFIO, CDF 10 /FLD OF PSEUDO DIM TBL 0 ARSTRT, 0 /ADR-1 OF PSEUDO DIM TBL *64 INSAV, 0 *73 K0010, 10 K0017, 17 *77 K0200, 200 *107 M14, -14 *114 FIXP, UNSFIX *134 FGETL, FFGET FPUTL, FFPUT FNORL, FFNOR FCLR, FACCLR FNEGL, FFNEG *156 P1SWAP, PSWAP ENPUNCH *3400 /INI(N)-INITIALIZE ROUTN;CALLED BY USER BEFORE 'PLY / OR ADC';INITIALIZE CTRS,FLGS,ETC / N IS A DUMMY ARG / INI, VERSON^100+SUBVUF /VERSION NUMBER OF USER FUNCTIONS JMS BUFCDF TAD BUFBAK /PICK UP ADDR OF DISPLAY BUFFER DCA BUFXR /STORE IN BUFFER XR FOR PUTBUF ROUTINE DCA TOTPTS /BUF IS NOW EMPTY IAC DCA I (STPT /ACCES BUF AT 1ST PT IAC DCA I (NTHY /ACCES EVERY PT IAC DCA I (XFLG /BUF MAYBE DISPLAYED JMP I INI /ROUTINE TO GET FIELD AND ADDRESS OF USER BUFFER /FROM 'USECON' LOCATION BUFCDF, 0 TAD USECON /ENTRY PT OF BUF IN DIM TBL CLL RTL /MULT BY 4 TAD ARSTRT /ADR-1 OF STRT F DIM TBL DCA XR5 /ADR-1 OF ENTRY IN DIM TBL TAD CDFIO /COPY CDF TO BRTS TABLES INLINE DCA .+1 0 CMA TAD I XR5 /ADR-1 OF BUF DCA BUFBAK /NEED FOR DISPLY ROUTN TAD I XR5 /GET CDF OF BUF DCA PUTCDF TAD PUTCDF DCA CDFBAK /NEED FOR DISPLY ROUTN CDF /RESTORE DF JMP I BUFCDF CDFBAK, 0 BUFBAK, 0 TOTPTS, 0 /PUTBUF-ENTER WITH A 12BIT VALUE IN AC;PUT VAL IN / USER BUFFER;CHK TO SEE IF NXT VAL WILL CROSS FLDS / PUTBUF, 0 PUTCDF, 0 DCA I BUFXR IAC TAD BUFXR SZA CLA /ABOUT TO CROSS FLDS? JMP .+4 /NO TAD K0010 /YES TAD PUTCDF DCA PUTCDF /DF=DF+1 CDF /RESTORE DF JMP I PUTBUF /PLY(Y)-ENTER WITH YVAL IN FAC;CHK 0<=VAL<1.; / PUT LEGIT VAL IN USER BUF / PLY, 0 TAD ACH SPA CLA /YVAL>=0? JMP I (IA /NO,ERR TAD ACX SMA SZA CLA /YVAL<1? JMP I (IA /NO, ERR /CONV # IN FAC TO A 10BIT DISPLAYABLE VAL / FAC=FAC*1776+1001 / JMS I (FMPY /YES FL1022 /1776(8) JMS I (FADD FL513 /1001(8) JMS I FIXP JMS PUTBUF ISZ TOTPTS /KEEP CNT OF PTS IN BUF JMP I PLY /DLY(N)-N IS MAX # OF PTS TO BE EVENTUALLY DISPLAYED / CHK IF 1<=N<=1024; SET 'REFRFL' =0 FOR / A ONE SHOT DISPLAY. / DLY, 0 JMS I FIXP SPA SNA /1<=N? JMP I (IA /NO,ERR /CHK IF N IS SAME AS LAST TIME & /IF SO, NO NEED TO GO THE "SETDX" ROUT DCA INI /YES,TEMPORARY SAVE DCA XR1 TAD INI CIA TAD MAXPTS SZA CLA /N IS STILL THE SAME? JMP .+3 /NO JMS I (DISPLY /YES, DISPLY ONCE & JMP I DLY /RETURN TAD INI /GET N BACK DCA MAXPTS /ASSUME N IS VALID FOR MOMENT TAD MAXPTS CIA TAD (2000 SPA CLA /N<=1024? JMP I (IA /NO DCA REFRFL /ONE SHOT DISPLY JMS I (SETDX /SET DX FOR DISPLY JMP I DLY /ADC(N)-SAMPLE ADC NTH CHANNEL; RETN FL PT VAL IN FAC / ADC, 0 JMS I FIXP /GET ARG N CIA TAD K0017 SPA /N<=17(8)? JMP I (IA /NO,ERR CIA /YES TAD K0017 ADLM /LOAD MUX ADST /START CONV ADSK JMP .-1 ADRB /GET VAL DCA ACH JMS I (FFLOT JMP I ADC /CLW(N)-N IS A DUMMY ARG; WAIT UNTIL CLOCK O.F. OR / UNTIL A SCHMITT TRIG FIRES(DEPENDING WHICH WAS / SPECIFIED IN 'CLK') BEFORE RETURNING TO BASIC / CLW, 0 CLSK /STATUS REG IS ALREADY SET? SKP /NO JMP EARLY /YES CLSK JMP .-1 CLSA /READ STATUS CLW1, CLL RAL /CHK ON O.F. SZL /O.F. BIT SET IN SATUS WD? CIA /YES,NEG REST OF STATUS REG /RTN 0 IF O.F. ONLY; 1,2,...,7 IF SCHMITT ONLY; /-1,-2,...,-7 IF BOTH RAR /NO DCA ACH JMS I (FFLOT JMP I CLW /IF CLOCK INTERRUPTED TOO SOON TELL USER; /-8 IF O.F. ONLY; 9 THRU 15 IF SCHMITT ONLY; /-9 THRU -15 IF BOTH EARLY, CLSA TAD K0010 JMP CLW1 PAGE /DIS(S,E,N,X)-DISPLY EVERY NTH PT BEGIN WITH S / & NOT EXCEEDING N; X=1 DISPLY NOW, / X=0 SETUP TO DISPLY FOR A SAM / DIS, 0 JMS I (BUFCDF /SETUP CDF & USER BUF JMS I (ARG123 STPT-1 /FLOAT N TAD NTHY DCA ACH JMS I (FFLOT JMS I FPUTL /IT BETTER NOT =0 DX /HOLD TEMPORARY /CHK 1<=S,0<=E-S TAD STPT SPA SNA JMP I (IA /ERROR CIA TAD ENDPT SPA JMP I (IA /ERROR /FLOAT (E-S) & GET (E-S)/N DCA ACH JMS I (FFLOT JMS I (FDIV DX /CHK (E-S)/N+1<=1024; MAXPTS=(E-S)/N+1 JMS I FIXP IAC DCA MAXPTS /ASSUME OK FOR NOW TAD MAXPTS CIA TAD (2000 /1024(10) SPA CLA JMP I (IA /ERROR /GET X ARG; DISPLY BUF(X=1); ONLY A SETUP FOR SAM (X=0) CLL IAC RAL /4TH ARG DESIGNATED BY AC=2 JMS I (GETARG JMS I FIXP DCA XFLG TAD XFLG SZA CLA /USER WANTS TO DISPLY? TAD MAXPTS /YES,TOTPTS=MAXPTS DPY1, DCA I (TOTPTS /NO,JUST SET UP,TOTPTS=0 IAC /REFRESH TILL ^N(NON INTERRUPT) DCA REFRFL /OR TILL CLK INTERRPT(INT MODE) JMS I (SETDX JMP I DIS STPT, 0 /THESE 3 LOCATIONS ENDPT, 0 /GO TOGETHER & MUST NTHY, 0 /BE IN THIS ORDER XFLG, 0 /DISPLY-SETUP CDF & PTR TO STARTING PT OF USER BUF; / SETUP 'DISCTR' FOR # OF PTS TO DISPLY THIS TIME; / INITIALIZE FL PT 'DXSUM'=-'DX' / DISPLY,0 /IF TOTPTS<=MAXPTS,DISPLY TOTPTS;OTHERWSE MAXPTS D4, TAD I (TOTPTS SNA /SIMPLE WAIT LOOP FOR THAT'1ST' JMP .-1 /ADC TO BE SAMPLED CIA DCA DISCTR TAD DISCTR TAD MAXPTS SMA CLA /TOTPTS<=MAXPTS? JMP .+4 /YES TAD MAXPTS /NO CIA DCA DISCTR /SETUP CDF & PTR TO START PT OF USER BUFFER TAD I (CDFBAK /RE-INIT CDF FOR LAST TIME YOU DISPLY DCA DISCDF /YOU MAY HAVE CROSSED FLDS TAD I (BUFBAK /ADR-1 OF BUF TAD STPT DCA BUFPTR TAD XCRD /INITIALIZE XCOORD DCA XCOORD D3, TAD XCOORD DILX TAD DELTAX DCA XCOORD /UPDATE XCOORD BY DELTAX DISCDF, 0 TAD I BUFPTR CDF DILY CLA CLL TAD NTHY /MOVE PTR TO NXT LOC TO BE TAD BUFPTR /ACCESSED IN BUF DCA BUFPTR SNL /JUST CROSSED FLDS? JMP .+4 /NO TAD K0010 /YES TAD DISCDF DCA DISCDF DISD JMP .-1 DIXY /INTENSIFY /DISPLYED ALL PTS YET? ISZ DISCTR JMP D3 /NO TAD REFRFL /YES,KEEP REFRESHING? SNA CLA JMP I DISPLY /NO /KEYBOARD IS CHK HERE FOR ^N WHEN DSPL & NOT SAMPLING /KEYBOARD INTERRUPTS TO THE INT ROUTN / KSF /YES JMP D4 KRB TLS TAD (-216 SNA CLA /USER HIT ^N? JMP I DISPLY /YES JMP D4 /NO, KEEP REFRESHING DISCTR, 0 BUFPTR, 0 XCRD, 0 XCOORD, 0 DELTAX, 0 /FFLOT-FLOAT ANY INTEGER IN ACH(LOC 45) INTO FAC FFLOT, 0 DCA ACL /CLEAR LOW MANTISSA TAD (13 /11(10) INTO EXPONENT DCA ACX JMS I FNORL /NORMALIZE JMP I FFLOT /RETURN FL513, 12;2002;0 FL1022, 12;3774;0 PAGE /SAM(C,N,P,T)-SETUP PARAMETERS FOR SUBSEQUENT SAMPLING / OF ADC'S OR OR DOING DIGITAL IO / CONST=CLK TSAM=NCTR SAM, 0 JMS I (ARG123 CSAM-1 TAD PSAM SPA SNA /P=0? JMP I (IA /YES,ERR CIA /NO DCA PCTR /PCTR=-P(DONE CTR) CLL IAC RAL /4TH ARG IS DESIGN BY AC=2 JMS GETARG /GET T JMS I FIXP DCA TSAM TAD TSAM SZA CLA /SET UP TO SAMPLE ADC'S? JMP DIG /NO, DO DIGAL IO IAC /YES DCA SAMFLG /SET FLG=1 FOR 'CLK' TAD K0017 /15(10) JMP SAM1 DIG, CMA DCA SAMFLG /SET FLG=-1 FOR 'CLK' CLA CLL IAC RAL /2 SAM1, DCA CONST /CHK IF 0<=C, 1<=N, N+C-1<=2(DIG IO)OR <=17(8)(ADC'S) / CMA TAD NSAM SPA /1<=N? JMP I (IA /NO,ERR TAD CSAM CIA TAD CONST SPA CLA /N+C-1<=2 OR 17? JMP I (IA /NO,ERR TAD TSAM SNA CLA JMP SAM3 /CLEAR ALL DIGIAL INPT REGS JMS I (BUFCDF /SET UP USER BUF TAD NSAM CIA DCA NCTR /-#OF BOARDS TO CLAR TAD CSAM /START BOARD#(0,1,2) CLL RTL RAL /START BOARD# * 10(8) TAD (DBCI A1, DCA .+2 CLA CMA 0 /DBCI IS ISSUED CLA TAD .-2 TAD K0010 ISZ NCTR /MORE BOARDS TO CLEAR? JMP A1 /YES CLA JMP I SAM /DO A CLEAR ALL; AD DONE FLG, ERR FLG, CLR MUX & EN REG. /SET NON-AUTO INCR MODE / SAM3, CAF /CL ALL FLGS-I MAY USE ION'S ADCL TAD K0200 ADLE /ENABLE EXT START OF ADC'S JMP I SAM CSAM, 0 /THESE 3 LOCATIONS MUST NSAM, 0 /BE TOGETHER & IN THIS PSAM, 0 /ORDER PCTR, 0 NCTR, 0 /CLK(R,O,S)-A COMPLEX CLK ROUTN WHICH SETS UP CLOCK / FOR ADC SAMPLING; DIGIAL IO SMPLING; / & SETS UP A SIMPLE CLOCK-WAIT ROUTN / CLK, 0 JMS I (ARG123 R-1 CLSA /CLEAR CLK STATUS REG CLA TAD R SPA SNA /R>0? JMP IAA /NO,ERR TAD (-6 /YES SMA SZA CLA /R<=6? JMP IAA /NO TAD R /R GIVES CORRECT VAL FOR CLL RTL /EXT START, .1,1,10,100,1000 KHZ RATE RTL RTL /RATE GOES INTO BITS 3-5 OF EN REG TAD (5050 /BITS 0,2,6,8 OF EN REG ALWAYS SET DCA SAM /SAVE TEMP TAD O /OVERFLOW CNT CIA CLAB /SET BUF PRESET REG CLA TAD S SZA CLA /ANY SCHMITT TRIGS ASKED FOR? TAD (27 /YES,SET BITS 7,9-11 OF EN REG TAD SAM /FINAL ENABLE VAL CMA CLZE /CLEAR BAD BITS FROM EN REG CMA /ENABLE VAL IS BACK AGAIN CLOE /START CLOCK CLA TAD SAMFLG SNA /JUST SETTING UP FOR A SIMPLE TIMING DEV? JMP DONE /YES,RTN TO BASIC SPA CLA /SAMPLE ADC'S? JMP I (DRESET /NO,DO DIGITAL IO JMP I (SRESET /YES DONE, DCA SAMFLG /CLR FLG SPF /RESET TTY FLG FOR BASIC JMP I CLK /RTN TO BASIC IAA, SPF JMP I (IA R, 0 /THESE 3 LOCATIONS O, 0 /MUST BE TOGETHER IN S, 0 /THIS ORDER SAMFLG, 0 FL4096, 15;2000;0 /GETARG-ENTER WITH SCALER(0=ARG2,1=ARG3,2=ARG4) IN AC; / CALL 'ARGPRE' & ON RTN THE D.F. OF ARG IS SET / & ADR OF ARG IS IN FAC / PUT FL PT ARG IN FAC( 44-46) GETARG, 0 DCA INSAV /ARGPRE USES THIS SCALER LOC 64 JMS I KARG /GET ADR OF ARG JMS I FGETL /PUT ARG IN FAC KARG, ARGPRE /USED TO ADVANTAGE CDF /RESET D.F. JMP I GETARG PAGE /SETDX-SETUP DELTAX; CHK IF DISPL IS TO BE / ACTIVATED; DX IS A FL PT NO / SETUP DELTAX SUCH THAT IT =1,2,3,...,1023; / & XCOORD SO THAT DISPLY IS CENTERED / SETDX, 0 CMA TAD MAXPTS /MAXPTS-1 SNA /IF # OF MAXPTS=1 THEN DISPLY IAC /IS POSITIONED AT X=0 COORD DCA ACH JMS I (FFLOT JMS I FPUTL DX /SAVE FL PT(MAXPTS-1) TEMP TAD (1777 /1023 DCA ACH JMS I (FFLOT JMS I (FDIV DX /FL PT (1023/MAXPTS-1) =DX JMS I FIXP /FIXED 'DX' DCA I (DELTAX TAD I (DELTAX DCA ACH JMS I (FFLOT JMS I (FMPY DX /(MAXPTS-1)*(FIX'DX')=FLOT PROD JMS I FIXP /FIX 'PROD' CIA TAD (1777 CLL RAR /(1023-FIX'PROD')/2 TAD (1001 DCA I (XCRD /XCOORD=[1001+(1023-FIX'DX')/2] /CHK SHOULD DISPLY NOW(XFLG=1) /OR RTN TO BASIC DUE TO SAM SETUP(XFLG=0 TAD I (XFLG SZA CLA JMS I (DISPLY JMP I SETDX /ADSAM-A CLOCK INTERRUPT FOR SAMPLING ADC'S COMES HERE / ADSAM1, ADRS /RD STATUS(GET MUX) IAC ADLM /BMP MUX BY 1 JMP CLUGE ADSAM, CLSA /READ STATUS REG & CLEAR IT SMA CLA /CLK O.F.? JMP TION /NO, SCHMITT TRIG SYNC ADSK /CONV IS DONE? JMP .-1 /NO ADRB /GET VAL FR CONV BUF JMS I (PUTBUF /YES ISZ I (NCTR /SAMPLED ALL CHANS FOR THIS INTERRUPT? JMP ADSAM1 /NO ISZ I (PCTR /YES,JOB IS ALL DONE? JMP SRESET-1 /NO JMP I (DONE /YES,'DONE' IS IN 'CLK' ROUTN /SRESET-USED TO RESET STCHAN & CTR FR ADC SAMPLING / ROUTN SETS MUX TO SAMPLE 1ST OF A SERIES OF CHANS. / A CTR IS SET TO -# OF CONSEC CHANS TO SAMPLE / ISZ I (TOTPTS /#PTS /CHANNEL SRESET, TAD I (NSAM CIA DCA I (NCTR TAD I (CSAM ADLM /LOAD MUX WITH 1ST CHAN TION, ION JMS I (DISPLY /DISPLY UNTIL CLK INTERRUPT /DRI(N) -SAMPLE DIGITAL IO BOARD N; & RTN RESULT / AS FL PT IN FAC DRI, 0 JMS ARGN JMS I (DIGIO /GET DIGITAL VAL JMS NEGCHK JMP I DRI /ARGN - GET N AND MAKE A 'DBSK' INSTRUCTION ARGN, 0 JMS I FIXP /BOARD # /CHK 0<=N<=2 DCA SETDX /SAV N TEMP TAD SETDX CIA TAD (2 SPA CLA JMP I (IA /ERR TAD SETDX /GET N BAK CLL RTL RAL /BOARD # = BITS 6-8 TAD (DBCI JMP I ARGN /DRO(M,N)- M=FL PT VAL TO OUTPUT, N=BOARD # / IF M=0 CLR OUTPUT REG; OTHERWISE LEAVE / THE BITS OF DBSO SET MASK=DIGIO DRO, 0 JMS I FIXP DCA I (MASK /DIGITAL OUTPUT VAL JMS I (GETARG JMS ARGN TAD (2 /65N5='DBCI+2' DCA KDBCO IAC TAD KDBCO DCA KDBSO TAD I (MASK /GET FL PT VAL SZA /CLR OUTPUT REG/ JMP KDBSO /NO CMA /YES,SET ALL BITS OF AC KDBCO, 0 /CLR OUTPUT REG SKP KDBSO, 0 /OUTPUT DIG VAL CLA JMP I DRO FLGNEG=DRO /NEGCHK- THIS ROUTINE CHKS TO SEE IF A VALUE FROM / 'DRI' OR 'GET' IS NEGATIVE. IF IT IS / THE VALUE IS CHANGED TO 4096+NEG VAL. NEGCHK, 0 DCA FLGNEG /VAL IS EITHER + R - TAD FLGNEG DCA ACH JMS I (FFLOT TAD FLGNEG SMA CLA /VAL WAS NEG? JMP I NEGCHK /NO JMS I (FADD /YES FL4096 JMP I NEGCHK CLUGE, ADST /START CONV JMP ADSAM+3 PAGE /GET(M,L)- M=0, GET VAL FROM USER BUF & NO MASKING / M>0, GET VAL FROM USER BUF & MASK WHERE / M IS THE MASKING VALUE. / L IS THE LOCATION OF USER BUF TO ACCESS LHOLD=ARG123 GET, 0 IAC DCA MSKCTR JMS I FIXP /GET M SNA /M=0 CMA /YES,SET M=7777 CLL RAR SZL JMP .+3 ISZ MSKCTR JMP .-4 RAL JMS COMMON /SAME CODE FOR 'GET' & 'PUT' TAD MSKCTR CIA DCA MSKCTR TAD I LHOLD CDF /RESET D.F. CLL RAR ISZ MSKCTR JMP .-2 RAL AND MASK JMS I (NEGCHK JMP I GET MSKCTR, 0 /PUT(M,L)- M IS THE FL PT VALU TO BE FIXED & PUT / IN THE USER BUF; L IS THE LOC OF THE USER / BUF WHERE TO STORE THE FIXED NUMBER. PUT, 0 JMS I FIXP /GET & FIX THE FL PT VAL JMS COMMON TAD MASK DCA I LHOLD CDF JMP I PUT /COMMON- THIS ROUTINE IS USED BY BOTH 'GET' & 'PUT' COMMON, 0 DCA MASK /SAVE M TEMPORARILY JMS I (GETARG JMS I FIXP /GET L CLL TAD I (BUFBAK DCA LHOLD SZL /CROSSED FIELDS? TAD K0010 /YES TAD I (CDFBAK /NO DCA .+1 0 JMP I COMMON /WHEN INTERRUPT OCCURS COME HERE / SERVC, CLA CLSK /CLOCK INTERRUPT? SKP /NO JMP I (ADSAM /YES KSF /TTY INTERRUPT? SKP /NO JMP KKBRD /YES TSF /DUE TO LAST ECHO? HLT /SPURIOUS INTERRUPT TCF /YES JMP I (TION KKBRD, KRB TLS /ECHO CHAR TAD (-203 SZA CLA /^C TYPED? JMP I (TION /NO,IGNORE CHAR JMS I P1SWAP /YES JMP I (7605 /RTN TO MONITOR /ARG123-THIS ROUTINE GETS 3 ARGUMENTS OF A FUNCTION / AND STORES THEIR FL PT VALUES IN / 'ARG1,ARG2,ARG3' & STORES THEIR FIXED VALUES / AT 'ADR,ADR+1,ADR+2' / CALL: JMS ARG123 / ADR-1 ARG123, 0 TAD I ARG123 /GET(ADR-1)FOR THE THREE DCA XR1 /1WD ARGS ISZ ARG123 JMS I FIXP DCA I XR1 /SINGLE PREC ARG1 JMS I (GETARG /ARG2 DESIGN BY AC=0 JMS I FIXP DCA I XR1 /SINGLE PREC ARG2 IAC JMS I (GETARG /ARG3 DESIGN BY AC-3 JMS I FIXP DCA I XR1 /SINGLE PREC ARG3 JMP I ARG123 /DRESET-USED TO RESET STARTING DIGITAL IO BOARD & CTR; / WAIT FOR CLK TO O.F.; SAMPLE EACH BOARD ASKED FOR. / DRESET, TAD I (NSAM CIA DCA I (NCTR TAD I (CSAM /STARTING BOARD # CLL RTL RAL /ST BOARD #*10(8) TAD (DBCI-10 DCA KDBCI /[DBCI-10(8)] FOR 1ST BOARD /WAIT LOOP CLSK JMP .-1 CLSA /READ STATUS & CLR CLA /SAMPLE ALL BOARDS ASKED FOR DIGSAM, TAD K0010 TAD KDBCI JMS DIGIO /SAMPLE BOARD JMS I (PUTBUF /PUT DIG VAL IN BUF ISZ I (NCTR /MORE BOARDS? JMP DIGSAM /YES ISZ I (PCTR /NO, JOB IS ALL DONE? JMP DRESET /NO JMP I (DONE /YES,'DONE' IS IN 'CLK' ROUTN /DIGIO-ENTER WITH 'DBCI' SETUP FOR CORRECT BOARD; THIS RTN / SETS UP THE 'DBRI & DBCI' AND SAMPLES CORRECT BOARD; / EXIT WITH DIGITAL VAL IN AC / DIGIO, 0 DCA KDBCI TAD KDBCI IAC DCA KDBRI KDBRI, 0 KDBCI, 0 JMP I DIGIO $ |
Added src/os8/uni/LANGUAGE/FORTRAN2/FORT.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 | /OS8 FORTRAN II COMPILER V5 / / / / / / / // / / / / /COPYRIGHT (C) 1971,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. / / / / / / / / SYMBOL TABLE FOR FORTRAN COMPILER (8K- PDP-8) / FOR USE WITH DISK/DECTAPE MONITOR SYSTEM / CHANGE LOCATION 'XFINI' TO A 'JMP I LFINI' THEN /ASSEMBLE AND SAVE / .PAL FORT.PA / .PAL FPATCH.PA / / .LO FORT.BN$FPATCH.BN$ / / .SA SYS FORT / / FIELD 0 *200 INBUF, TEXT /PDP-8 FORTRAN DEC-08-A2B1-5A/ *1000 BEGIN, PLS /INITIALIZATION ROUTINE TLS RFC CDF 00 TAD CM1300 /SET SYMBOL TABLE TO ZEROS (6300-7577 FIELD 1) DCA INDX TAD BSYMP DCA TPTT LP, DCA I TPTT ISZ INDX JMP LP TAD CM60 DCA INDX TAD BTTAB DCA TPTT DCA I TPTT /ZERO OUT TEMPORARY TABLES IN FIELD 0 ISZ INDX JMP .-2 CDF 10 TAD MIN104 /ZERO EVERYTHING FROM ZERO TO 107 DCA INDX TAD CP6 DCA TPTT LPP, DCA I TPTT ISZ INDX JMP LPP TAD TPT /MOVE DATA FROM TABLE TO FIELD 0 DCA TPTT REP, CDF 00 TAD I TPTT SNA /END OF FIELD 0 INITIALIZATION? JMP DN /YES DCA LOC TAD I TPTT CDF 10 DCA I LOC JMP REP DN, TAD I TPTT /MOVE DATA FROM TABLE TO FIELD 1 SNA /END FIELD 1 INITIALIZATION JMP DNN /YES DCA LOC TAD I TPTT DCA I LOC JMP DN DNN, CIF 10 JMP I STRT LOC, 0 INDX, 0 MIN104, L7-ASSIGN CP6, L7-1 CM1300, -1300 CM60, -60 BTTAB, ITTAB-1 BSYMP, BSYM-1 /BOTTOM OF TEMPORARY SYMBOL TABLE STRT, FORST /STARTING POINT AFTER INITIALIZATION TPTT=10 TPT, TABLE-1 TABLE, PUNCH LTTYPE 15 DOEND 45 FTTAB 51 ITTAB 47 TSYM-3 50 TSYM 55 -25 56 BSYM 57 BSYM 71 5777 74 3000 MIKE4 3377 POINTZ 3377 BASE INBUF BASE2 INBUF+100 SCOUNT 0 SCOUNT+1 0 SCOUNT+2 0 QONE 0 QONE+1 0 QONE+2 0 QONE+3 0 QONE+4 0 QONE+5 0 QONE+6 0 0 /THIS TERMINATES FIELD ZERO INITIALIZATION 2375 4000 2376 4000 2377 4000 0 / ERROR MESSAGE TABLE AND TEXT ELIST, -ERR1-1; EMSG1 /ILLEGAL CONTINUATION -ERR2-1; IE /ILLEGAL ARITHMETIC EXPRESSION -ERR3-1; IE -ERR6-1; IE -ERR9-1; EMSG3 -ERR10-1; EMSG4 -ERR12-1; EMSG4 -ERR14-1; EMSG4 -ERR15-1; EMSG3 -ERR16-1; EMSG5 -ERR17-1; EMSG6 -ERR18-1; SE /SYNTAX ERROR -ERR28-1; SE -ERR29-1; SE -ERR30-1; EMSG8 /ILLEGAL VARIABLE -ERR31-1; SE -ERR35-1; SE -ERR36-1; EMSG36 -ERR37-1; CE -ERR38-1; EMSG9 /ILLEGAL DO NESTING -ERR39-1; SE -ERR40-1; IE -ERR41-1; EMSG10 /EXPRESSION TOO BIG -ERR42-1; IE -ERR43-1; EMSG11 /MIXED MODE -ERR44-1; EMSG9 -ERR47-1; SF /SUBR. OR FUNCT. STMT. NOT FIRST -ERR48-1; SE -ERR50-1; SE -ERR51-1; SE -ERR52-1;IE -ERR53-1; EMSG12 /ILLEGAL SUBSCRIPT -ERR54-1; EMSG13 /ILLEGAL EQUIVALENCING -ERR59-1; SE -ERR60-1; EMSG3 0; EMSG14 /COMPILER MALFUNCTION EMSG1, TEXT /ILLEGAL CONTINUATION/ IE, TEXT /ILLEGAL ARITHMETIC EXPRESSION/ EMSG3, TEXT /ILLEGAL STATEMENT/ EMSG4, TEXT /ILLEGAL CONSTANT/ EMSG5, TEXT /ILLEGAL STATEMENT NUMBER/ EMSG6, TEXT /SYMBOL TABLE EXCEEDED/ SE, TEXT /SYNTAX ERROR/ EMSG8, TEXT /ILLEGAL VARIABLE/ EMSG9, TEXT /ILLEGAL OR EXCESSIVE DO NESTING/ EMSG10, TEXT /ARITHMETIC EXPRESSION TOO COMPLEX/ EMSG11, TEXT /MIXED MODE EXPRESSION/ EMSG12, TEXT /EXCESSIVE SUBSCRIPTS/ EMSG13, TEXT /ILLEGAL EQUIVALENCING/ EMSG14, TEXT /COMPILER MALFUNCTION/ CE, TEXT /UNBALANCED QUOTES/ SF, TEXT /SUBR. OR FUNCT. STMT. NOT FIRST/ EMSG36, TEXT /ARRAY TOO LARGE/ ITTAB=710 FTTAB=ITTAB+30 DOEND=2377 BSYM=6300 TSYM=7600 / THE STATEMENT TYPE TABLE FOLLOWS *2600 STYPE, 7361 /-DO 0000 LDO 6672 /-IF 0000 LIF 7061 /-GO 5361 /-TO LGOTO 7477 /-CA 6364 /-LL CAL 5573 /-RE 5353 /-TU LRET 7461 /-CO 6154 /-NT LCONT 5454 /-ST 6060 /-OP LSTOP 5777 /-PA 5255 /-US LPAUSE 5573 /-RE 7674 /-AD LREAD 5056 /-WR 6654 /-IT LWRIT 7161 /-FO 5563 /-RM LFRMAT 7262 /-EN 7400 /-D LLAST 7461 /-CO 6263 /-MM LCOMON 7367 /-DI 6273 /-ME LDIMEN 7257 /-EQ 5267 /-UI EQUI -0611 /-FI -1611 /-NI LFIN XXSUBR, 5453 /-SU 7556 /-BR LSUB 7153 /-FU 6175 /-NC LFUNC 0000 /THIS IS THE END OF LIST AREA1, 0 AREA2, 0 / THE PRECEDENCE TABLE FOLLOWS, NON-ZERO PREC. OPERATORS APPEAR -45 / PREC('%') = 7 NOTE: '%' REPLACES '**' 700 -52 / PREC('*') = 5 500 -57 / PREC('/') = 5 500 -53 / PREC('+') = 4 400 -55 / PREC('-') = 4 400 -75 / PREC('=') = 1 100 -74 / PREC('<') = 1 NOTE: '<' IMPLIES SUBSCRIPTED ASSIGNMENT 100 1 /THIS IS THE END OF THE TABLE THOU, -1750 -144 -12 -1 / THE PERMANENT SYMBOL TABLE BEGINS HERE *6000 1501 /MAIN 1116 0001 0601 /FAD 0400 0001 2324 /STO 1700 0001 0623 /FSB 0200 0001 0615 /FMP 2000 0001 0604 /FDV 2600 0001 1520 /MPY 3100 0001 0411 /DIV 2600 0001 2205 /READ 0104 0001 2722 /WRITE 1124 0501 1117 /IOH 1000 0001 5060 /(0 0000 0001 1215 /JMP 2000 0001 1617 /NOP 2000 0001 0516 /ENTRY 2422 3101 0501 /EAP 2000 0001 2001 /PAUSE 2523 0501 OPTADI, 2401 /TAD I 0440 1101 OPTAD, 2401 /TAD 0400 0001 OPDCA, 0403 /DCA 0100 0001 OPJMPI, 1215 /JMP I 2040 1101 2205 /RETRN 2422 1601 0320 /CPAGE 0107 0501 OPSNA, 2316 /SNA 0100 0001 2320 /SPC 0300 0001 0301 /CALL 1414 0001 0313 /CKIO 1117 0001 1014 /HLT 2400 0001 OPCLA, 0314 /CLA 0100 0001 0614 /FLOT 1724 0001 1106 /IFAD 0104 0001 0311 /CIA 0100 0001 0310 /CHS 2300 0001 0611 /FIX 3000 0001 1123 /ISTO 2417 0001 2001 /PAGE 0705 0001 BLCK, 0214 /BLOCK 1703 1301 0516 /END 0400 0001 1401 /LAP 2000 0001 0317 /COMMN 1515 1601 1123 /ISZ 3200 0001 2325 /SUBSC 0223 0301 DUMMY, 0425 /DUMMY 1515 3101 0122 /ARG 0700 0001 0314 /CLEAR 0501 2201 1111 /IIPOW 2017 2701 0611 /FIPOW 2017 2701 1106 /IFPOW 2017 2701 0606 /FFPOW 2017 2701 0403 /DCA I 0140 1101 0103 /ACH 1000 0001 OPEN, 1720 /OPEN 0516 0001 0522 /ERROR 2217 2201 1116 /INC 0300 0001 FORTR, 0617 /FORTR 2224 2201 OPCMA, 0315 /CMA 0100 0001 OPIAC, 1101 /IAC 0300 0001 EXIT, 0530 /EXIT 1124 0001 FIELD 1 *0 FIRSTF, 1 *7 L7, 0 L10, 0 L11, 0 L12, 0 /LAST LINE'S CONTENTS FOR OPTOMIZATION 0 L14, 0 L15, 2377 /POINTER INTO DOEND LIST L16, 0 L17, 0 L20, 0 /FLAG, NON-ZERO IF '=' SEEN L21, 0 L22, 0 /SUBSCRIPT NESTING LEVEL L23, 0 /USED BY "DUMARG" AND "IOHAR" PATCH L24, 0 /LINE POINTER L25, 0 /HIGHEST SUBSCRIPT TEMP USED L26, 0 /USED FOR DIMENSION INFORMATION 0 /UNUSED L30, 0 /FOLLOWING EIGHT LOCS ARE USED BY ENTITY L31, 0 L32, 0 L33, 0 L34, 0 L35, 0 L36, 0 L37, 0 L40, 0 /CONTAINS THE CURRENT TRIPLE NUMBER L41, 0 /THIS IS THE POINTER INTO THE PUSH DOWN LIST L42, 0 /THESE TWO LOCATIONS ARE USED BY THE TRIPLE PROCESSOR L43, 0 / L44, 0 /CONTAINS ONE FOR RIGHT OF EQUALS, ZERO FOR LEFT L45, FTTAB /CONTAINS LARFEST FLOATING POINT TEMPORARY NUMBER USED L46, 0 /CONTAINS NUMBER OF THE TRIPLE CURRENTLY IN THE AC L47, 7575 /CONTAINS THREE LESS THAN START OF FCON TABLE L50, 7600 /CONTAINS START OF DIMENSION TABLE L51, ITTAB /CONTAINS LARGEST INTEGER TEMPORARY NUMBER USED L52, 0 /CONTAINS ONE IF RETURN FROM GENER IS DESIRED FOR BALANCE L53, 0 /CONTAINS THE LAST CREATED LABEL L54, 0 /CONTAINS THE LABEL FOR THE CURRENT STATEMENT L55, -25 /CONTAINS THE MAXIMUM ALLOWABLE NUMBER OF UNENDED DOS L56, 6300 /CONTAINS BEGINNING OF SYMBOL TABLE L57, 6300 /CONTAINS END OF SYMBOL TABLE L60, 0 /"INDIRECT =" FLAG FOR S.S LEFT OF EQUALS SIGN L61, 0 /NON-ZERO IF LAST STMT READ IS A COMMENT L62, 0 /NEXT FOUR LOCATIONS USED BY GENER AND ENTITY L63, 0 /CONTAINS THE CURRENT OPERATOR L64, 0 /POINTS TO THE LAST OPERATOR IN THE STACK L65, 0 /CONTAINS THE PRECEDENCE OF THE CURRENT OPERATOR BPAREN, 0 /PARENTHESIS COUNTER L67, 0 /ONE FOR FUNCTION AND ZERO FOR SUBROUTINE L70, 0 /CONTAINS POINTER TO SUBPROGRAM NAME L71, 5777 /BEGINNING OF PUSHDOWN LIST L72, 0 /SET TO ONE IF SUBSCRIPT IS ENCOUNTERED L73, 0 / L74, 3000 /BEGINNING OF ERASABLE LOCATIONS USED FOR PARAMETERS L75, 0 /SET TO ONE SUPPRESS /OUTPUT FROM COMPILER L76, 0 / L77, 0 /CONTAINS ADDRESS OF LAST ENTRY INTO FCON OR SYMBOL TABLE /THE FOLLOWING THREE LOCS ARE USED BY THE /LITERAL COLLECTER COUNT2, 0 /NUMBER OF DIGITS TO RIGHT OF DECIMAL POINT ESIGN, 0 /0 MEANS POSITIVE EXPONENT, 1 MEANS NEGATIVE FPSW, 0 /0 MEANS INTEGER CONSTANT, 1 MEANS FLOATING POINT MIKE4,MA, 3377 MIKE8,TOTAL, 0 INTA, 0 INTB,MIKE7, 0 SNUM,MB, 0 POINTZ, 3377 CHK, 0 IMPDO, 0 /"IMPLIED DO-LOOP IN PROGRESS" FLAG KOUNT, 0 ASSIGN, LASIGN /ROUTINE TO PROCESS ASSIGNMENT STATEMENTS PUTCH, LPUTCH /ROUTINE TO PUT A CHARACTER BACK IN THE INPUT BUFFER PROP, LPROP /PRINTS OPCODES PRCRL, LPRCRL /PRINTS CREATED LABELS PRINT, LPRINT /PRINTS ONE ASCII CHAR P2, LP2 /PRINT TWO PACKED ASCII CHARS GETCH, LGETCH /GETS ONE CHARACTER OUT OF THE INPUT BUFFER LUNCH, LLUNCH /PRINTS ERROR COMMENTS MODE, LMODE /DETERMINES THE MODE OF THE ARGUMENT LOOK, LLOOK /CHECKS FOR THE REST OF THE INPUT STATEMENT ZZZ, LZZZ /PRINTS OUT STATEMENT LABELS ENTITY, LENTT /GETS THE NEXT LOGICAL INPUT PARAMETER SYMTAB, LSYMTB /ENTERS SYMBOLS INTO THE SYMBOL TABLE DUMARG, LDMARG /SEES IF PARAMETER IS A DUMMY ARG OR SUBSCRIPT PRSYM, LPRSYM /PRINTS SYMBOLS CREATE, LCREAT /CREATES LABELS PROTAC, LPRTAC /PRINTS CONTENTS OF AC IN OCTAL PLAB, LPLAB /PRINTS LABELS PIFF, LPIFF /PUTS OUT AN IFF FOR THE CONTENTS OF THE AC TRIPL, LTRIPL /PROCESSES THE TRIPLES GENERATED FROM AN EXPRESSION GENER, LGENER /GENERATES THE TRIPLES LCHNG, CHNG /TEST FOR DUMMY ARG AND REPLACE CLAB, LCLAB /HANGS A CREATED LABEL ON THE NEXT LINE STORE, LSTORE /STORES THE CONTENTS OF THE AC FPROP, LFPROP /PUT OUT CALLS TO F.P. ROUTINES ZER, LZER DUM, LDUM /PROCESSES OCCURRANCES OF DUMMY ARGUMENTS IN LISTS DIM, LDIM /LOOKS UP DIMENSION INFORMATION ON VARIABLES PUNCH, LTTYPE /ADDRESS OF CURRENT OUTPUT ROUTINE C2, 2 C3, 3 C40, 40 C7240, 5440 /THIS WAS COLON-SPACE NOW ITS COMMA-SPACE C77, 77 CM40, -40 CM4046, -4046 CM50, -50 CM51, -51 CM54, -54 CM2, -2 CM3, -3 CHECK, LCHECK SMODE, LSMODE BSS, LBSS ARG, LARG C54, 54 BASE, INBUF BASE2, INBUF+100 C4000, 4000 GNB, LGNB *177 START, CLA /COME HERE AT BEGINNING OF EACH STMT DCA FIRSTF START1, TAD IMPDO SZA CLA JMP ERR1 /IF IMPDO<>0 THEN WE MUST HAVE SCREWED UP ON /CONTINUATIONS (I THINK) ISZ CHK /IS THERE A STMT IN THE BUFFER? JMP .+3 JMS I SWAP /YES, SWITCH BUFFER POINTERS JMP .+3 TAD BASE JMS I RCD /NO, READ THE NEXT LINE TEST, TAD L15 TAD CM3 DCA L16 /SET UP XR FOR DO TERMINATION TEST TAD L54 CIA TAD I L16 SZA CLA /ARE WE TERMINATING A DO? JMP ATRY JMS LDNEXT /TERMINATE DO LOOP JMP TEST /SEE IF THERE IS ANY MORE... ATRY, TAD L61 SZA CLA /A COMMENT? JMP CMNT TAD CHK SZA CLA /ILLEGAL CONTINUATION? ERR1, JMS I LUNCH JMS I STMT /GET THE STMT NR... TAD L32 SNA JMP .+4 /NO STMT NUMBER CIA TAD L12 SZA CLA /CAN WE OMIT A TERMINAL JMP? JMS I PRINT DCA L24 FLST, JMS LIST /PUNCH SOURCE STMT JMS I WIPE /ZERO THE SUBSCRIPT TEMP. TABLE TAD L32 DCA L54 TAD CM2 DCA L64 SKP ACA, DCA I BAREA1 JMS I GETCH JMP ALPH NOP JMS I PUTCH /PUT CHARACTER BACK ALPH, RTL CLL RTL RTL DCA L65 JMS I GETCH JMP ALPH2 NOP JMS I PUTCH /PUT CHARACTER BACK ALPH2, TAD L65 ISZ L64 JMP ACA DCA I BAREA2 DCA CHK TAD SSTYP /COMPARE THESE CHARS WITH DISPATCH TABLE DCA L17 TRY, TAD I L17 SNA /END OF THE TABLE? JMP I ASSIGN /YES, MUST BE ARITHMETIC STMT TAD I BAREA1 SZA CLA JMP NOHIT2 TAD I BAREA2 TAD I L17 SZA CLA JMP NOHIT1 TAD I L17 /FOUND A MATCH, GO TO PROPER HANDLER... DCA L30 JMP I L30 NOHIT2, ISZ L17 NOHIT1, ISZ L17 JMP TRY /DOESN'T MATCH, TRY AGAIN LDNEXT, 0 TAD L15 /RESET THE DO END POINTER TAD CM3 DCA L15 TAD L15 IAC DCA L16 CMA TAD L55 DCA L55 JMS I PROP /PUNCH 'JMP <LABEL>' 6044 TAD I L16 JMS I PRCRL JMS I PRINT TAD I L16 /PUNCH '<LABEL>,' JMS I CLAB JMS I PRINT JMP I LDNEXT PTEM, 0 LIST, 0 /PUNCH THE SOURCE STATEMENT TAD BASE /GET THE POINTER DCA PTEM TAD I PTEM /PUNCH A CHARACTER PAIR... JMS I P2 TAD I PTEM ISZ PTEM AND C77 SZA CLA /END OF THE BUFFER? JMP LIST+3 JMS I PRINT /YES, PUNCH A CR-LF AND RETURN JMP I LIST CMNT, JMS I PRINT /WE HAVE A COMMENT DCA L24 JMS LIST JMP START1 /ALLOW COMMENTS BEFORE SUBR. OR FUNCTION STMT. BAREA1, AREA1 BAREA2, AREA2 RCD, LRCD SSTYP, STYPE-1 /POINTER TO STATMENT TABLE IN FIELD 1 WIPE, LWIPE STMT, LSTMT SWAP, LSWAP *400 / THE FOLLOWING ROUTINE IS ENTERED WITH THE BUFFER POINTER IN THE AC / IT PUTS ONE LINE INTO THE BUFFER, / CHECKS FOR COMMENTS AND COUTINUATION LINES, AND IF IT IS A / CONTINUATION IT SETS KOUNT TO THE PROPER COLUMN / LRCD, 0 DCA TEM1 /SAVE THE BUFFER POINTER DCA I TEM1 DCA CHK /ZERO CONTINUATION FLAG DCA L20 /ZERO THE EQUALS FLAG DCA L61 /ZERO THE COMMENT FLAG TAD CM111 /BUFFER LIMIT IS 72 CHARACTERS DCA IX LRCDL, CLA JMS LPTRIN AND D177 SZA /LEADER OR BLANK TAPE? TAD CM177 SNA /RUBOUT? JMP LRCDL TAD (177-15 SNA JMP LCAR TAD (15-11 SNA JMP TAB TAD (11-40 SPA JMP LRCDL TAD (40-75 SNA /AN '=' ? ISZ L20 TAD C75 /CHAR OK... RESTORE IT & PUT IN BUFFER JMS KRONK /PUT IT IN THE BUFFER... JMP LRCDL /AND GET ANOTHER LCAR, TAD IX /PROCESS A CAR RETURN... CIA TAD CM111 SNA CLA /NULL STATEMENT? JMP LRCDL /YES, IGNORE JMS KRONK /PUT A ZERO IN THE BUFFER TAD I TEM1 TAD CM3 SNA JMP COMNT TAD CM20 SZA CLA /TEST FOR "S" IN COLUMN ONE JMP TINUE JMP I (SCODE COMNT, ISZ L61 /SET COMMENT FLAG... TAD C40 JMP STORSL TINUE, TAD TEM1 /CHECK FOR CONTINUATION... TAD C3 DCA P /SET THE POINTER TO COLS. 6 AND 7 TAD I P AND C5700 /NON-ZERO OR NON BLANK IN COL 6 TAD C4000 /MAKES THIS A CONTINUATION... SNA CLA /IS IT? JMP LRCDA /MAYBE... LRCDX, TAD B7 /YES, MAKE IT START IN COL 7 DCA KOUNT ISZ CHK /INCREMENT THE CONTINUATION FLAG TAD I TEM1 STORSL, TAD C5700 /MAKE THIS INTO A COMMENT LINE DCA I TEM1 JMP I LRCD /THEN RETURN LRCDA, TAD I P /NUMERIC AND NON-ZERO IN COL 7 MAKES AND C77 /THIS A CONTINUATION... TAD CM61 SPA CLA /IS IT? JMP LRCDX+3 /NO, RETURN IAC /YES, MAKE IT START IN COL 8 JMP LRCDX TAB, TAD C40 /PROCESS TAB CHARACTERS... JMS KRONK /PUT SOME SPACES IN THE BUFFER TAD IX TAD C3 /MAKE 1ST TAB GO TO COL 7 SMA /ARE WE AT END OF THE BUFFER? CLA /YES, FORCE TERMINATION AND B7 SZA CLA /MODULO 8? JMP TAB /NO, PUNCH SOME MORE SPACES JMP LRCDL /YES, GET ANOTHER CHAR KRONK, 0 /PUT A CHARACTER IN THE BUFFER... DCA CAR CLA IAC TAD IX /FIRST COMPUTE BUFFER ADDRESS... SNA /PAST COL. 72? JMP I KRONK /YES-RETN. TAD C111 /NO CLL RAR TAD TEM1 DCA P TAD CAR /PICK UP THE CHARACTER AND C77 SZL /ZERO LINK SAYS WE WANT THE LEFT HALF JMP .+5 RTL RTL RTL DCA I P TAD I P /ADD IN THE LEFT 6 BITS DCA I P /AND SALT THEM AWAY... ISZ IX /BUFFER OVERFLOW? JMP I KRONK LPTRIN, 0 /PAPER TAPE READER INPUT ROUTINE RSF JMP .-1 RRB RFC JMP I LPTRIN CAR, 0 /TEMPORARY, HOLDS THE CURRENT CHARACTER P, 0 /THIS IS THE BUFFER POINTER TEM1, 0 /THIS CONTAINS THE CURRENT BUFFER ADDRESS IX, 0 /THIS IS THE CHARACTER COUNTER CM111, -111 /MINUS THE BUFFER LIMIT PLUS ONE C111, 111 /THIS IS THE BUFFER LIMIT PLUS ONE D177, 177 CM177, -177 C75, 75 B7, 7 C5700, 5700 CM61, -61 CM20, -20 M1700, -1700 *600 CAL, TAD KOUNT /SUBROUTINE CALL STMT PROCESSOR DCA COUNT3 JMS I ENTITY JMP I ASSIGN JMP ON COUNT3, 0 Q12, 12 JMP I ASSIGN ON, JMS I GNB SNA /ANY ARGUMENTS? JMP CR2 /NO TAD CM50 SZA /MAYBE, IS THIS A '(' ? JMP I ASSIGN JMS I ZZZ /YES, PUNCH STMT NR, IF ANY TAD COUNT3 DCA KOUNT ISZ L44 DCA L46 /AC SWITCH DCA L52 /IF STATEMENT SWITCH JMS I GENER /LET TRIPLE GENERATOR PROCESS IT DCA L46 /ZERO AC AGAIN JMP START /COMPLETE, GET NEXT STATEMENT CR2, ISZ L32 /NO ARGUMENTS JMS I SYMTAB TAD L77 DCA GLU JMS I ZZZ /PUNCH '<LABEL>, CALL 0,<NAME>' JMS I FPROP GLU, 0 JMP START LGNB, 0 JMS LGTC DCA GLU TAD GLU TAD CM40 SNA CLA JMP LGNB+1 TAD GLU JMP I LGNB LGETCH, 0 JMS I GNB SNA /IS IT A END OF CARD JMP PUNC /YES ITS PUNTUATION TAD QM32 SPA SNA /IS IT ALPHABETIC JMP ALPHA //YES TAD CM40 CLL TAD Q12 SZL /IS IT NUMERIC? ISZ LGETCH /NUMERIC PUNC, ISZ LGETCH /PUNCTUATION ALPHA, CLA /ALPHABETIC TAD GLU JMP I LGETCH /RETURN / THIS ROUTINE DETERMINES WHETHER SYMBOL IS FP OR INTEBER / ROUTINE SKIPS IF SYMBOL IS INTEGER LMODE, 0 SMA /IF ITS PLUS WE HAVE AN INTEGER JMP AINT /WE HAVE AN INTEGER RAL /GET NEXT BIT SPA /CHECK THIS BIT JMP FV /ITS EITHER A FCON OR VARIABLE RTL /GET NEXT TWO BITS SNL /IS IT AN OPERATOR ERR2, JMS I LUNCH /YES AFP, SMA CLA /CHECK THIS BIT JMP AINT /ITS AN INTEGER JMP I LMODE /SYMBOL WAS F P MODE FV, RAR /RESTORE AC TO ORIGINAL CONTENTS CIA /SET NEGATIVE TAD L47 /ADD START OF FCON TABLE SPA /IS /SYMBOL FCON JMP AFP /YES CIA /NO /RESTORE AC AGAIN TAD L47 DCA ATEM /SAVE THE RESTORED NUMBER TAD I ATEM /GET THE POINTER TO THE VARIABLE TAD CM1100 /SUBTRACT AN I SPA /IS IT LESS THAN I JMP AFP /YES ITS FLOATING POINT TAD CON1 /NOW SUBTRACT AN N SPA CLA /IS IT LESS THAN N AINT, ISZ LMODE /YES CON1, CLA /CLEAR THE AC FOR THE RETURN JMP I LMODE ATEM, 0 CM1100, -1100 QM32, -32 LGTC, 0 /GET A CHARACTER FROM THE BUFFER TAD KOUNT ISZ KOUNT CLL RAR /LINK TELLS IF LEFT OR RIGHT HALF TAD BASE DCA GLU TAD I GLU SZL /WHICH CHARACTER JMP MMSK RTR RTR RTR MMSK, AND C77 SZA JMP I LGTC TAD CHK SPA CLA /DO WE WANT A NEW LINE YET? JMP I LGTC /NOT YET... TAD BASE2 /YES, USE THE ALTERNATE BUFFER JMS I RLCD TAD CHK SZA CLA /IS IT A CONTINUATION? JMP .+4 CMA /NO, SET FLAG AND RETURN W ZERO AC DCA CHK JMP I LGTC JMS LSWAP /YES, SWITCH BUFFERS AND CONTINUE DCA CHK JMP LGTC+1 RLCD, LRCD LSWAP, 0 /SWITCH THE LINE BUFFER POINTERS TAD BASE DCA ATEM TAD BASE2 DCA BASE TAD ATEM DCA BASE2 JMP I LSWAP *1000 / THE POINTER TO THE CURRENT LOCATION IN THE PUSH LIST IS / IN LOC 41, THE CURRENT TRIPLE NUMBER IS IN LOCATION 40 / LOC 44 MUST BE SET TO 0 IF THERE IS AN '=' , TO 1 IF NOT. PBEGN, AREA2 /START OF THE PRECEDENCE LIST BINTEG, TAD L32 /HERE IF ENTITY SENT AN INTEGER JMP I BPUSH /PUSH IT INTO STACK FLPT, JMS I FCON /HERE IF ENTITY FOUND A FLOATING POINT CON SKP /ENTER IT INTO FPTABLE BLPHA, JMS I SYMTAB /HERE IF ENTITY FOUND A VARIABLE TAD L77 /PICK UP POINTER INTO SYM TAB OR FLPT TAB AN JMP I BPUSH /PUSH IT DOWN LABELX, JMP I LGENER LGENER, 0 /ENTRY POINT TAD C5000 DCA L40 /* DCA L21 /ZERO THE SYMBOL TABLE SWITCH TAD L71 DCA L41 /SET PUSH DOWN POINTER DCA L22 DCA BPAREN /ZERO OUT THE PAREN SWITCH TAD C4000 DCA I L41 /FIRST PUSH DOWN LEFT CLOSURE NAMELY 0 BNEXT, JMS I ENTITY /THIS WILL GET THE NEXT DATUM TO BE PROCESSE JMP HOO /END OF STATEMENT RETURN,TREAT LIKE PUNCTION JMP BLPHA /VARIABLE RETURN JMP BINTEG /INTEGER RETURN JMP FLPT /FLOATING POINT RETURN HOO, TAD CM50 /PUNCTIOATION RETURN, SNA /IS IT ( JMP I BPAR /YES TAD C7753 SZA /IS IT AN '=' ? JMP BRET TAD L44 /WE HAVE AN '=', IS IT LEGAL? SNA CLA JMP BRET /IT IS TAD IMPDO SZA CLA /ARE WE IN AN IMPLIED DO LOOP? JMP I PIOEQL /YES - TERMINATE LOOP CODE ERR3, JMS I LUNCH PIOEQL, IOEQL BRET, TAD C0075 DCA L63 TAD I L41 /CHECK FOR A UNARY OPERATOR TAD C4000 AND C7000 SZA CLA /WAS IT AN OPERAATOR AT ALL JMP PREC /NO, STILL NOT UNARY OPERATOR TAD L63 TAD C7725 SNA /IS IT A '+' JMP BNEXT /YES, IGNORE IT TAD CM2 /NO SZA CLA /IS IT A '-' ? JMP ERR3 TAD C4643 /THIS IS THE UNARY MINUS JMP I BPUSH PREC, TAD PBEGN /HERE IS WHERE WE FIND THE PRECIDENCE DCA L17 DCA L65 SKP RETUR, ISZ L17 /PICK UP NEXT OP CODE IN LIST TAD I L17 /TO GET THE NEXT LIST ITEM SMA SZA /IS THIS THE END OF THE LIST JMP BMORE /NO, THE ASSUMPTION IS THAT THE PRECIDENCE TAD L63 /IS ZERO SZA CLA /IS THIS THE RIGHT TABLE ENTRY JMP RETUR /TRY AGAIN (IT WASN"T) TAD I L17 /TO GET THE PRECEDENCE DCA L65 BMORE, CLA IAC /HERE WE ARE GOING TO SEE IF THERE IS A PREC TAD L41 DCA L64 /L64 NOW POINTS TO THE PREVIOUS OPERATOR TAD I L64 TAD C4000 AND C7000 SZA /IS THERE A VALID OPERATOR ON THE STACK? JMP ERR3 /APPARENTLY NOT... TAD I L64 /IF THE PRECEDENCE OF THE PREVIOUS OPERATOR AND C700 /IS NON-ZERO, AND ITS PRECEDENCE IS GREATER SNA /THAN OR EQUAL TO THE PRECEDENCE OF THE JMP NO /CURRENT OPERATOR, THEN PROCESS THE PREVIOUS CIA /OPERATOR; IF NOT WE WILL PROBABLY PUT TAD L65 /THE CURRENT OPERATOR ON THE STACK AND GET SMA SZA CLA /ANOTHER ITEM FROM THE STATEMENT BUFFER... JMP NO ISZ L40 /YES, INCREMENT THE TRIPLE NUMBER AND.... JMS I TRIPL /PROCESS THE PREVIOUS OPERATOR ISZ L41 /*****NOTE WHAT IF IT WAS UNARY************ TAD I L41 TAD C3135 /THIS IS MINUS UNARY MINUS SZA CLA ISZ L41 /DELETE THE LAST 3 ITEMS AND REPLACE WITH TR TAD L46 DCA I L41 JMP BMORE /TRY FOR ANOTHER TRIPLE NO, TAD L63 SNA /IS IT A END OF STATEMENT MARK JMP I LCDONE /IT WAS--WE ARE ALL FINISHED, EXCEPT CHECKING TAD CM51 SNA /IS IT A ')' ? JMP I LKPAR /YES TAD CM3 SZA /IS IT A ',' ? JMP NCOMMA /NO TAD BPAREN SNA CLA /IS A COMMA LEGAL HERE? JMP I LCDONE /MAYBE... NCOMMA, TAD CM21 SNA CLA /IS IT AN EQUALS SIGN? ISZ L44 /YES - SET EQUALS SWITCH ON TAD L63 /PUT THE OPERATOR ON THE STACK TAD L65 /ADD THE PRECEDENCE TAD C4000 JMP I BPUSH / BPUSH, PUSH C5000, 5000 BPAR, ALPAR C7753, 7753 C0075, 75 C7000, 7000 CM21, -21 C7725, 7725 C4643, 4643 C700, 700 C3135, 3135 LCDONE, CDONE LKPAR, KPAR FCON, LFCON *1200 PUSH, DCA L63 CLA CMA TAD L41 /SPACE THE POINTER UP ONE DCA L41 /* TAD L63 DCA I L41 /* JMP I LBNEXT /BACK TO BEGINING / THIS IS TO PROCESS SUBSCRIPTS OR FUNCTION CALLS--- / IF ARITHMETIC, JUST DELETE BOTH ( AND ) KPAR, TAD I L64 TAD C3730 /MINUS LEFT PAREN SZA /IS IT ( JMP BCON /NO-- CHECK SOME MORE TAD I L41 /DELETE PARENS DCA I L64 ISZ L41 /UPDATE POINTER LAPP, ISZ BPAREN /DO PARENS BALENCE JMP I LBNEXT TAD L52 /YES SNA CLA /SHOULD WE RETURN IF BALANCED JMP I LBNEXT TAD L46 SZA CLA JMP CDONE TAD I L41 DCA L77 JMS I XTAD /GENERATE TAD OR (TAD I) DCA I L41 /ZERO IS INTEGER CDONE, TAD L41 CMA TAD L71 SZA /WELL... ERR6, JMS I LUNCH /HA...YOU GOOFED JMS I XZQ JMP I .+1 LABELX BCON, IAC /IS IT FUNCTION ISZ L40 SNA JMP BFOUT /YES IAC /NO-- NOW IS IT SUBSCRIPT SNA JMP SOUT /YES TAD C7772 /NO SZA /IS IT COMMA JMP ERR6 /NO - BYE BYE CHARLIE ISZ L64 ISZ L64 TAD I L64 TAD C3724 /IS IT A COMMA SNA JMP BFOUT /FOUND TWO COMMAS,MUST BE FUNCTION TAD C5 /NO SNA /IS IT A PRIME JMP BFOUT /GOT A FUNCTION IAC /NO SZA CLA JMP ERR6 /SORRY, IT AIN'T NUTTIN SOUT, JMS I PLSBSC /PROCESS A SUBSCRIPT CMA TAD L22 DCA L22 SKP BFOUT, JMS I FUNCT JMP LAPP FUNCT, LFUNCT / THIS IS WHERE WE FIND OUT WHAT KIND OF LPAR ALPAR, CMA TAD BPAREN DCA BPAREN TAD I L41 TAD C4000 AND B7000 /IS IT AN OPERAND SZA CLA JMP CUNT /NO , TRY SOME MORE IAC JMP PRIME CUNT, TAD I L41 /PICK UP TOP LIST ITEM TAD C2 /ADD TWO TO FIND THE DIMENSION INTO(INFO) DCA L64 TAD I L64 AND C20 /JUST WANT ONLY THIS ONE BIT(DIMENSION) SNA CLA /IS IT DIMENSIONED JMP PRIME /NO ITS GOT TO BE A FUNCTION CALL ISZ L22 CMA PRIME, TAD C4047 JMP PUSH /GO PUSH A PRIME, IT IS THE FUNCTIONS LEFT PAREN XZQ, LXZQ LBNEXT, BNEXT C3730, 3730 C7772, 7772 C3724, 3724 C5, 5 D7, 7 B7000, 7000 C20, 20 C4047, 4047 XTAD, LXTAD LPUTCH, 0 CLA CMA TAD KOUNT DCA KOUNT JMP I LPUTCH LASIGN, TAD L20 /ARITHMETIC STATEMENT PROCESSOR SNA CLA /IS THERE AN '=' IN THE STMT? ERR9, JMS I LUNCH /NO, BETTER COMPLAIN... TAD D7 /SET POINTER TO COL 7 DCA KOUNT JMS I ZZZ /PUNCH THE LABEL, IF ANY DCA L46 DCA L44 DCA L52 JMS I GENER /PROCESS IT... TAD L63 SZA CLA /WAS TERMINATOR A <CR/LF> ? JMP ERR9 /NO, ILLEGAL STATEMENT ERROR ... JMP START PLSBSC, LSUBSC LPRCRL, 0 /SUBROUTINE PRINTS CREATED LABELS DCA LPRCTM TAD C36 /PUNCH '^' JMS I PRINT TAD LPRCTM /PUNCH THE LETTERS JMS I P2 JMP I LPRCRL C36, 36 LPRCTM, 0 *1400 PRET, ISZ LENTT /PUNCTIONATION EXIT POINT FRET, ISZ LENTT /FLOATING POINT EXIT POINT XIRET, ISZ LENTT /INTEGER EXIT POINT XARET, ISZ LENTT /VARIABLE EXIT ERET, JMP I LENTT /CR END OF LINE EXIT LENTT, 0 /ENTRY POINT CLA /WIPE OUT PSEUDO ACCUMULATOR DCA L32 DCA L31 DCA COUNT2 /RESET ALL KINDS OF THINGS TO ZERO DCA L36 DCA L37 DCA L30 DCA FPSW DCA ESIGN TAD CM6 DCA L65 /SET UP FOR MAXIMUM OF 6 CHARS JMS I GETCH /GET THE FIRST INPUT CHARACTER JMP .+3 /ALPHA RETURN JMP PUNCT /PUNCTIONATION RETURN JMP DIG /DIGIT RETURN JMS PACK /STORE THIS CHARACTER JMS I GETCH /GET ANOTHER CHACTER JMP .-2 /ALPHA- IS OK SKP /PUNCTUATION JMP .-4 /DIGIT--IS OK PROCESS IT JMS I PUTCH /PUT THAT PUNCTUATION BACK IN THE BUFFER TAD L32 AND CC7700 /MAKE SURE NAME IS <= 5 CHARACTERS LONG DCA L32 JMP XARET /RETURN WITH VARIABLE PACK, 0 /THIS PACK CHARS INTO L30 L31 AND L32 DCA L64 /SAVE THE CHAR... TAD L65 SNA /DO WE HAVE SIX CHARS ALREADY? JMP I PACK /YES - IGNORE STL; RAR TAD P33 DCA LTEM ISZ L65 C7, 7 TAD L64 CDF 10 SNL /DO WE HAVE LEFT OR RIGHT HALF? JMP .+5 CLL RTL /MUST BE LEFT HALF... RTL RTL SKP TAD I LTEM DCA I LTEM CDF 00 JMP I PACK LTEM, 0 PUNCT, SNA /HERE TO PROCESS PUNCTION---IS IT A CARIAGE RET JMP ERET /YES, GO RIGHT BACKTO THE CALLER....BY-BY TAD C7722 /IS IT A PERIOD SNA JMP CC /YES--WE ASSUME THAT THIS LENTT IS A FLOATING TAD C7 SNA /IS IT A QUOTE? JMP I QUOTE /YES - CHARACTER LITERAL TAD CM3 SZA /IS IT AN ASTERISK JMP NAH /NO JMS I GETCH /YES- PEEK AT NEXT CHAR JMP NOASS /ALPHA-- PUT IT BACK JMP ASSCK /PUNCTUATION-- CHECK FOR AN ASTERISK NOASS, JMS I PUTCH /DIGIT---PUT IT BACK NAH, TAD X52 /RESTORE CHARACTER TO WHAT IT WAS JMP PRET /THATS ALL---IT WAS PUNCTIONATION ASSCK, TAD CM52 /ANOTHER PUNCTUATION--IS IT (*) SZA JMP NOASS /NO---PUT IT BACK TAD C45 /IT WAS-- CHANGE ** TO PERCENT JMP PRET /---ALTERED PUNCTUATION DIG, AND C17 /FIRST CHAR WAS A DIGIT, DONT KNOW IS INTEGER O DCA L32 /AT ANY RATE SAVE IT IN THE PSEUDO ACCUMULATER CA, JMS I GETCH /GET ANOTHER CHACTER JMP I LTESTE /ALPHA--GO SEE IF IT IS AN -E- SKP /PUNCT JMP BONT /DIGIT GO PROCESS IT TAD C7722 /PUNCTUATION HERE, IS IT A PERIOD SZA JMP I LCOP / IT IS . WE HAVE A FLOATING POINT NUMBER CC, TAD FPSW SZA ERR10, JMS I LUNCH /TOO MANY (.) ISZ FPSW DCA COUNT2 JMP CA /GO BACK AND GET ANOTHER CHAR BONT, AND C17 /***COME HERE WITH ANOTHER DIGIT. DCA L36 /SAVE IT ISZ COUNT2 JMS I LMUL10 / AC = AC * 10 + DIGIT JMP CA /GO GET ANOTHER CHAR P33, L30+3 CM6, -6 C7722, 7722 X52, 52 CM52, -52 C17, 17 LTESTE, TESTE C45, 45 LCOP, COP LMUL10, MUL10 QUOTE, LQUOTE DMPLIN, 0 /SUBROUTINE TO DUMP "LAST LINE" BUFFER ISZ L24 TAD I L24 /GET NEXT CHAR JMS I PUNCH /PUNCH IT TAD I L24 TAD CM212 SZA CLA /IS CHAR A LINE FEED? JMP DMPLIN+1 /NO CLA IAC DCA L24 /RESET POINTER DCA L12 /ZERO CONTENTS FLAG JMP I DMPLIN /RETURN CM212, -212 CC7700, 7700 *1600 TESTE, TAD C7773 /IS IT E SZA JMP COP /NO, GO PUT IT BACK AND PROCESS / HERE IF EXPONENT FOLLOWES DCA L37 /IT WAS AN E / THIS ROUTINE IS TO PROCESS THE EXPONENT THAT FOLLOWES THE -E- THAT WE / ISZ FPSW /MAKE SURE THE FLOATING POINT SWITCH WAS KICKED JMS I GETCH /GET ANOTHER CHAR JMP ERR12 /ALPHA , CANT BE-- SO LONG, ITS BEEN NICE SKP /PUNCT JMP CD /DIGIT, GO PROCESS IT TAD X7725 /IS IT PULS SIGN SNA JMP CF /YES, IGNOR IT TAD CM2 SZA /IS IT MINUS JMP COP /NO, GO PROCESS THE FLOATING POINT NUMBER CLA CMA DCA ESIGN /YES- REMEMBER THAT THE EXPONENT WAS MINUS CF, JMS I GETCH /GET ANOTHER CHAR JMP COP /ALPHA, ALL READY TO PROCESS JMP COP /PUNCTUATION, READY TO PROCESS CD, AND X17 /DIGIT DCA L36 /SAVE IT IN 36 AND.. TAD L37 /MULTIPLY THE - EXPONENT TO DATE- BY 10 RAL CLL DCA L37 TAD L37 RAL CLL RAL CLL TAD L37 TAD L36 /AND ADD IN THIS DIGIT I.E. 37C10* DCA L37 / L37 = 10 * L37 + L36 JMP CF /GO DO IT AGAIN COP, JMS I PUTCH CLA CLL /PROCESS THIS NUMBER TAD FPSW /IS IT AN INTEGER SZA CLA JMP CH /NO, MUST BE FLOATING POINT / INTEGER IS IN ACC TAD L30 /YESS SNA /MAKE SURE INTEGER IS VALID TAD L31 SZA CLA JMP ERR12 TAD L32 SPA CLA ERR12, JMS I LUNCH /TOO BIG JMP I .+1 /TAKE INTEGER RETURN WITH INTEGER IN 32 XIRET CH, TAD L37 /WAS THIS AN E-CONVERSION NUMBER ISZ ESIGN /EXPONENT POSITIVE? CIA /YES TAD COUNT2 /ADD POST-DECIMAL COUNTER CLL SNA JMP CM /NOTHING TO DO SMA /DETERMINE WHETHER TO CML CIA /MULTIPLY OR DIVIDE DCA COUNT2 RAL TAD CJ DCA CK JMS XFLOAT /SET UP THE NUMBER CK, HLT /JMP I (MULT OR JMP I (DIVIDE ISZ COUNT2 JMP CK /LOOP ON COUNT JMP I LPOLIS /FINISH UP CM, JMS XFLOAT JMP I LPOLIS CJ, JMS I .+1 MULT DIVIDE / THIS ROUTINE CONVERTS THE NUMBER TO FLOATING POINT XFLOAT, 0 CLA CLL TAD L32 /CHECK IF THE ACCUMULATED NUMBER IS ZERO SNA TAD L31 SNA TAD L30 SNA CLA JMP I LFRET /IT WAS ZERO SEND A FLOATING POINT ZERO BACK-- TAD C2440 /IT IS NOT ZERO--SET THE EXPON TO 36 BASE 10 DCA L37 JMS NORMAL /GO TO THE NORMALIZE ROUTINE JMP I XFLOAT /AT THIS POINT THE MANTISA AND EXPON ARE SEPERA / ALSO NOTICE THAT WE HAVE 36 BINARY DIGITS I E THE WHOLE 3 WORDS ARE U / NORMAL IZATION OF A F P NUMBER NORMAL, 0 DA, TAD L30 /WE MUST SHIFT UNTIL THE HIGH ORDER WORD GOES N SPA CLA JMP I NORMAL /IT IS NEG., ALL DONE JMS I LLSHIF /GO DO A TRIPLE PRECISION LEFT SHIFT TAD L37 /AND SUBTRACT ONE FROM THE EXPONENT TAD C7770 /NOTE-- THE 3 LOW ORDER BITS ARE NOT USED SPA /IF THIS DOESNT SKIP WE HAVE F P OVERFLOW JMP ERR12 /BY-BY NUMBER TOO LARGE FOR THE MACHINE DCA L37 JMP DA / THE FOLLOWING ROUTINE SAVES THE ACC IN THE MQ C7773, 7773 X7725, 7725 X17, 17 C7770, 7770 LPOLIS, POLISH LFRET, FRET C2440, 2440 LLSHIF, LSHIFT SCODE, CDF 10 /SHIFT S-CODE 2 COLS. LEFT TAD I (TEM1 CDF 0 DCA SLOC1 TAD SLOC1 IAC DCA SLOC2 ISZ L61 /SET COMMENT FLAG SCODL, TAD I SLOC2 DCA I SLOC1 TAD I SLOC2 AND C77 SNA CLA /END OF LINE? JMP I (STORSL+2 ISZ SLOC1 ISZ SLOC2 JMP SCODL /AND CONTINUE PROCESS SLOC1, 0 SLOC2, 0 *2000 XSAVE, 0 /-- THE F.P. AC IS IN LOCS 30-32 TAD L30 /-- THE "MQ" IS IN LOCS 33-35 DCA L33 /---THE EXPONENT IS IN LOCS 37 TAD L31 DCA L34 TAD L32 DCA L35 JMP I XSAVE / SHIFTS THE PSEUDO-ACC LEFT ONE PLACE LSHIFT, 0 CLA CLL TAD L32 RAL DCA L32 TAD L31 RAL DCA L31 TAD L30 RAL DCA L30 JMP I LSHIFT / THE FOLLOWING ROUTINE ADDS THE MQ TO THE ACC ADD, 0 CLA CLL TAD L32 TAD L35 DCA L32 RAL TAD L31 TAD L34 DCA L31 RAL TAD L30 TAD L33 DCA L30 JMP I ADD / THE FOLLOWING ROUTINE SHIFTS THE ACC RIGHT ONE PLACE RSHIFT, 0 CLA CLL TAD L30 RAR DCA L30 TAD L31 RAR DCA L31 TAD L32 RAR DCA L32 JMP I RSHIFT / / MULT, 0 /ACCCACC*10 MQ JMS RSHIFT JMS XSAVE JMS RSHIFT JMS RSHIFT JMS ADD /THIS FINISHES THE MULT BY 10 TAD L37 /NOW DIDDLE THE EXPONENT TAD C40 SPA /OVERFLOW TEST ERR14, JMS I LUNCH /FLOATING POINT OVERFLOW DCA L37 JMS I LNRMAL /MAKE SURE THE F P NUMBER IS STILL IN NORMAL FO JMP I MULT DIVIDE, 0 /DIVIDE THE F P NUMBER BY 10 JMS RSHIFT /BASED ON THE FACT THAT .1 BASE 10 C .000110011 JMS XSAVE /THAT IS WE MULTIPLE BY ONE TENTH TAD C7766 /THIS IS A COUNTER********************** DCA ZCTR DB, JMS RSHIFT JMS ADD ISZ ZCTR SKP JMP DC JMS RSHIFT JMS RSHIFT JMS RSHIFT JMS ADD JMP DB DC, TAD L37 TAD C7750 /********INSERT HERE THE CONSTANT************ DCA L37 /WE HAVE JUST DIDDLED THE EXPONENT BY THE PROP JMS I LNRMAL /MAKE SURE IT IS STILL NORMALIZ D JMP I DIVIDE ZCTR, 0 MUL10, 0 /THIS MULTIPLIES THE TRIPLE PREC. INTEGER INT E JMS LSHIFT /BY 10 JMS XSAVE JMS LSHIFT JMS LSHIFT JMS ADD TAD L36 /NOW CRAM THE DIGIT THAT WE WANT TO ADD INTO TH DCA L35 /* DCA L34 DCA L33 JMS ADD /AND ADD IT TO THE ACC JMP I MUL10 /IN OTHER WORDS ACCCACC*10 DIGIT POLISH, CLA CLL /THIS TAKES THE SEPARATE MANTISSA AND EXP--ENT. TAD C400 /AND PUTS THEM INTO 7090 FORM. THIS IS THE R-U DCA L35 /27 DIGITS DCA L34 /ROUND FACTOR IS CRAMED INTO THE MQ DCA L33 JMS ADD /AND ADDED TO THE INTEGER IN THE ACC SNL /IF THE LINK IS ON, WE OVERFLEW ON THE CARRY JMP POLSH /WE DIDNT TAD C4000 /SET THE ACC TO .1000000000 (THE REST OF IT IS DCA L30 TAD L37 /DIDDLE THE EXPONENT BY ONE. THIS IS A FINKIE N TAD J10 SNA JMP ERR14 /EXPONENT OVERFLOW ... DCA L37 POLSH, TAD C7767 /NOW SHIFT THE ENTIRE ACC RIGHT 9 TIMES DCA ZCTR /( THATS SO WE WILL HAVE ROOM TO STICK IN THE E HOOP, JMS RSHIFT ISZ ZCTR JMP HOOP TAD L37 /CRAM THE EXP TAD L30 /INTO THE ACC DCA L30 /AND VOILA, WE ARE DONE. GO TAKE THE FPOINT EX JMP I .+1 FRET LNRMAL, NORMAL C7766, 7766 C7750, 7750 C400, 400 J10, 10 C7767, 7767 *2200 / THE FOLLOWING ROUTINE LOOKS FOR A STATEMENT NUMBER LSTMT, 0 JMS I CLEAR /CLEAR THE PSEUDO ACC AND MQ TAD C7240 /DON'T LET LGTC GET ANOTHER LINE YET(CHK MUST BE NEG., BUT NOT 4000!!) DCA CHK IAC DCA KOUNT LABEL, JMS I GTCL /GET A CHARACTER SNA /IS THIS A CAR RET? ERR15, JMS I LUNCH /YES, INCOMPLETE STATEMENT TAD CM40 SNA /SPACE? JMP SPACE TAD CM32 CLL TAD C12 SNL / 260 <= CHAR < 272 ? ERR16, JMS I LUNCH DCA L36 /SAVE THIS DIGIT... JMS I MULT10 / ACC = 10 * ACC + L36 SPACE, TAD KOUNT TAD DM6 SPA CLA /END OF STMT NR FIELD? JMP LABEL /NOT YET... JMS I GTCL /SKIP OVER COL 6 SNA CLA /IS IT A CAR RET? JMP ERR15 TAD L31 /SEE IF STMT NR IS LEGAL... SZA JMP ERR16 TAD L32 SPA CLA /IS STMT NR < 2048 ? JMP ERR16 /NO, STMT NR TOO BIG JMP I LSTMT CLEAR, LCLEAR GTCL, LGTC MULT10, MUL10 CM32, -32 DM6, -6 C12, 12 / / SUBROUTINEE TO PRINT A SYMBOL / / JMS I PRSYM / LPRSYM, 0 /THIS ROUTINE PRINTS SYMBOLS DCA LCH TAD LCH SMA /IS IT AN INTEGER CONSTANT JMP ICON /YES PROCESS IT RTL /SHIFT THE NEXT BIT INTO THE LINK SNL /IS IT A TEMPORARY JMP TEMPO /ITS A TEMPORARY RTR /RESTORE THE SYMBOL CIA /SET IT NEGATIVE TAD L47 /SUBTRACT THE BEGINNING OF THE XFCON TABLE SPA CLA /DO WE HAVE AN FCON JMP XFCON /YES PROCESS IT TAD LCH TAD C2 /ADD TWO TO THE SYMBOL TABLE POINTER DCA LP2 /AND SAVE IT TAD I LP2 /GET THE CONTROL BITS FOR THE SYMBOL RAR /GET EXTERNAL SUBROUTINE BIT IN LINK SZL CLA /IS THIS AN EXTERNAL SUBROUTINE JMP SKPIT /YES...DONT PUT OUT THE BACK SLASH TAD C34 JMS I PRINT SKPIT, TAD I LCH JMS LP2 /PRINT THEM ISZ LCH TAD I LCH JMS LP2 /AND PRINT THEM ISZ LCH TAD I LCH AND X7700 /MASK SO WE DONT PUT OUT CONTROL BITS JMS LP2 /AND PRINT IT JMP I LPRSYM /NOW RETURN LP2, 0 /THIS IS THE ROUTINE THAT PRINTS TWO CHARACTERS DCA UNCH /SAVE THE CHARS TAD UNCH /GET THEM AGAIN RTR /ROTAT FIRST CHAR INTO POSITION RTR RTR AND C77 /MASK SECOND CHARACTER SZA /IS IT AN ACTUAL CHARACTER JMS I PRINT /YES PRINT IT TAD UNCH /GET THE TWO CHARS AGAIN AND C77 /MASK OUT FIRST CHARACTER SZA /IS IT ACTUALLY A CHARACTER JMS I PRINT /YES PRINT IT JMP I LP2 /AND RETURN ICON, CLA /INTEGER CONSTANT, PUNCH A '(' TAD K50 JMS I PRINT TAD LCH /AND THE NUMBER PROCT, JMS I PROTAC JMP I LPRSYM /RETURN TEMPO, RTL SPA CLA /SUBSCRIPT TEMPORARY? JMP SBSCR RTL TAD D33 /PUNCH '[' FOR INTEGER AND ']' FOR FLOATING PT JMS I PRINT /AND PRINT IT TAD LCH SPA /DO WE STILL HAVE A TEMPORARY JMS I TEMPOR /YES GET THE TEMPORARY NUMBER JMS I PRINT /AND PRINT IT JMP I LPRSYM /RETURN SBSCR, TAD D33 /SUBSCRIPT TEMPORARY, PUNCH A '[' JMS I PRINT TAD LCH JMS I SUBTEM /AND 4 DIGITS JMP PROCT XFCON, TAD C35 /FLOATING POINT CONSTANT... JMS I PRINT /PUNCH A ']' TAD LCH CIA TAD L50 /SUBTRACT FROM END OF TABLE JMP PROCT D33, 33 C35, 35 K50, 50 C34, 34 X7700, 7700 LCH, 0 UNCH, 0 SUBTEM, LSBTEM TEMPOR, LTMPOR *2400 / / SUBROUNTINE TO DO SYMBOL TABLE MANIPULATIONS / C300, 300 C212, 212 C215, 215 SCOUNT, 0 /CURRENT NUMBER OF SYMBOLS XCTR, 0 /COUNTER FCOUNT, 0 /CURRENT NUMBER OF FCONS LSYMTB, 0 CLA /CLEAR THE AC LOOP1, TAD L56 /GET BEGINNING OF SYMBOL TABLE DCA LSYMTM /AND SAVE IN TABLE TAD SCOUNT /GET NUMBER OF SYMBOLS CURRENTLY CMA DCA XCTR /USE AS A COUNTER TAD C7700 /GIVE SEARCH A MASK TO USE ON LAST SYMBOL JMS SEARCH /LOOK FOR OCCURRENCE OF SYMBOL IN TABLE JMP ZCHECK /SYMBOL IS IN TABLE CHECK IT TAD L57 /TELL ENTER WHERE TO PUT THE SYMBOL JMS ENTER /ENTER THE SYMBOL TAD C3 /UPDATE THE POINTER DCA L57 /AND SAVE IT DCA L21 /ZERO SWITCH SINCE SYMBOL JUST LOADED ISZ SCOUNT /UPDATE COUNT OF SYMBOLS JMP LOOP1 /GO BACK AND CHECK IT ZCHECK, TAD L77 /GET POINTER INTO SYMBOL TABLE TAD C2 /MOVE TO LAST WORD DCA LSYMTM /SAVE IT TAD I LSYMTM /GET THE CONTROL BITS AND L21 /AND THE MASK SZA CLA /ARE ANY ILLEGAL BITS ON ERR54, JMS I LUNCH /ERROR 54 ... PROBABLY IN EQUIVALENCING ... TAD L32 /NOW OR IN NEW BITS CMA AND I LSYMTM TAD L32 DCA I LSYMTM JMP I LSYMTB /RETURN / FLOATING CONSTANT IS IN 30 THRU 32 LFCON, 0 CLA MLOOP, TAD L47 /GET BEGINNING OF FCON TABLE TAD C3 /MOVE TO ACTUAL START OF TABLE DCA LSYMTM /AND SAVE TAD FCOUNT /GET NUMBER OF FCONS SO FAR CMA DCA XCTR /AND USE FOR A COUNTER CMA /GIVE SEARCH A MASK FOR THE LAST WORD JMS SEARCH /SEARCH THE TABLE FOR THE CURRENT FCON JMP I LFCON /ITS ALREADY IN THERE JUST RETURN TAD L47 /TELL ENTER WHERE TO PUT THE FCON JMS ENTER /ENTER THE FCON TAD CM3 /AND UPDATE IT DCA L47 /AND SAVE ISZ FCOUNT /UPDATE NUMBER OF FCONS JMP MLOOP /GO BACK AND CHECK / THIS IS THE ROUTINE THAT SEARCHES THE TABLES FOR / OCCURRENCES OF THE CURRENT SYMBOL OR FCON SEARCH, 0 DCA ENTER /SAVE THE MASK MBACK, ISZ XCTR /SEE IF WE HAVE PROCESSED ALL SYMBOLS SKP /NO GO ON JMP QRET /YES TAD I LSYMTM /GET FIRST WORD OF SYMBOL CIA /NEGATE TAD L30 /SUBTRACT FIRST WORD OF CURRENT SYMBOL ISZ LSYMTM /INCREMENT POINTER SZA CLA /DO THEY MATCH JMP I1 /NO GO TO NEXT SYMBOL TAD I LSYMTM /YES GET SECOND WORD OF SYMBOL CIA TAD L31 /SUBTRACT SECOND WORD OF CURRENT SYMBOL ISZ LSYMTM /ADVANCE POINTER SZA CLA /DO THEY MATCH JMP I2 /NO GO TO NEXT SYMBOL TAD I LSYMTM /SEE IF NEXT WORD MATCHES AND ENTER /MASK OUT DESIRED PORTIONS CIA TAD L32 /SUBTRACT THIRD CURRENT WORD AND ENTER /K AGAIN ISZ LSYMTM /ADVANCE POINTER SZA CLA /DO THEY MATCH JMP MBACK /NO GO TO NEXT SYMBOL TAD LSYMTM /YES TAD CM3 /MOVE BACK POINTYER DCA L77 /PUT POINTER IN PAGE ZERO JMP I SEARCH /RETURN QRET, ISZ SEARCH /SET UP RETURN FOR NOT FOUND JMP I SEARCH /RETURN I1, ISZ LSYMTM /ADVANCE POINTER I2, ISZ LSYMTM /ADVANCE PIINTER JMP MBACK /GO TO NEXT SYMBOL / THIS ROUTINE ENTERS THE CURRENT SYMBOL INTO THE TABLE SPECIFIED ENTER, 0 DCA LSYMTM /SAVE ADDRESS TAD L47 /GET BEGINNING OF FCON TABLE CMA TAD L57 /SUBTRACT END OF SYMBOL TABLE C7700, SMA CLA /IS THERE ROOM FOR ANOTHER SYMBOL OR FCON ERR17, JMS I LUNCH /NO TAD L30 /YES GEYT FIRST WORD DCA I LSYMTM /STORE IT TAD LSYMTM DCA L11 /SET UP AUTO - XR TAD L31 DCA I L11 TAD L32 DCA I L11 TAD LSYMTM /GET THE ADDRESS BACK INTO THE AC JMP I ENTER /AND RETURN DUMPLN, DMPLIN LSYMTM=. LPRINT, 0 / CONVERTS FROM TRIMMED TO EIGHT BIT ASCII DCA LFCON /SAVE THE CHARACTER TAD L75 /S GET THE SUPPRESS PRINTING WITCH SZA CLA JMP I LPRINT ISZ L24 /IS THIS A NEW LINE? SKP /NO JMS I DUMPLN /YES - DUMP THE OLD ONE FIRST TAD LFCON /NO...GET THE CHARACTER SNA /IS IT A CR JMP CRLF /YES...PUT OUT CRLF AND C40 /CHECK BIT SIX CLL RAL CIA /AC CONTAINS 0 OR -100 TAD C300 /NOW CONTAINS 300 OR 200 TAD LFCON /NOW ADD THE CHARACTER IN PRIT, DCA I L24 /AND STORE IT IN THE BUFFER JMP I LPRINT CRLF, TAD C215 /GET AN EIGHT BIT CR DCA I L24 /STORE IT IN THE BUFFER ISZ L24 TAD C212 DCA I L24 /STORE A LINE FEED TOO CLA CMA DCA L24 /SET SWITCH TO DUMP LINE ON NEXT CHAR JMP I .+1 PRIT+1 LCOMON, CLA JMS I LOOK /CHECK REST OF STATEMENT NAME -2 /TWO CHARACTERS -17 /O -16 /N GETVAR, JMS I ENTITY /GET A VARIABLE SKP /NOT A VARIZBLE JMP VARI /WE GOT A VARIABLE NOP B20, 20 ERR18, JMS I LUNCH /ERROR VARI, TAD C40 TAD L32 /PUT IN COMMON BIT DCA L32 TAD K37 /GET MASK FOR SYMBOL TABLE SWITCH DCA L21 /PUT IN THE SWITCH JMS I SYMTAB /PUT SYMBOL IN TABLE JMS I ENTITY /LOOK FOR A COMMA JMP START /THAT'S ALL GOT A CR-LF... K37, 37 K27, 27 JMP .+3 /ERROR TAD CM54 /CHECK FOR COMMA SZA CLA /IS IT A COMMA JMP ERR18 /NO...ERROR JMP GETVAR /GET ANOTHER VARIABLE LDIMEN, JMS I LOOK /LOOK FOR REST OF STATEMENT -5 /FIVE CHARS -16 /N -23 /S -11 /I -17 /O -16 /N QAGAIN, CLA CMA /-U DCA REDY /SET SWITH FOR VARIABLE QGET, JMS I ENTITY /GET WHATEVER IS NEXT IN LINE JMP QDONE /IT EAS A CR JMP .+4 /IT WAS A VARIABLE JMP ASUBSC /IT WAS ONE OF THE SUBSCRIPTS JMP ERR18 /WE BETTER NOT GET ANY FP NUMBERS JMP QPUNC /IT WAS A PUNCTION ISZ REDY JMP ERR18 /WE WERENT READY FOR A VAR TAD B20 TAD L32 DCA L32 TAD K27 /GET THE MASK FOR THE SYMBOL TABLE DCA L21 /PUT IN THE SWITCH JMS I SYMTAB /PUT SYMBOL IN TABLE CMA CLA TAD L47 /GET BEGINNING OF TABLE DCA L16 TAD L77 /GET TABLE ADDRESS DCA I L16 CLA CMA DCA V /SET WITCH TO SAY WEVE GOTTEN A VAR JMP QGET /GET NEXT THING QPUNC, TAD CM54 SNA /IS IT A COMMA JMP COMMA /YES TAD C3 SNA JMP QRPAR /RIGHT PAREN IAC SNA /IS IT A LEFT PAREN ISZ V /PRECEDED BY A VAR JMP ERR18 /NO - ERROR CLA CMA DCA XLP /SET SWITCH TO SHOW LPAR JMP QGET ASUBSC, ISZ XLP /DID WE JUST GET LPAR JMP SECOND /NO...BETTER BE SECOND SUBSC TAD L32 /GET INTEGER DCA I L16 /PUT IN DIMTAB CMA CLA DCA QONE /SET SWITCH TO SHOW WE HAVE ONE SUBSC JMP QGET COMMA, ISZ QONE /DOES THIS COMMA SEPARATE SUBSCS JMP RIGHT /NO...LAST CHAR BETTER HAVE BEEN L RPAR CMA CLA DCA SEC /SET SWITCH TO EXPECT SECOND SUBSCRIPT JMP QGET SECOND, ISZ SEC /IS THIS SECOND SUBSCRIPT JMP ERR18 /NO...ERROR TAD 32 /GET INTEGER DCA I L16 CMA CLA DCA R /SET SWITCH FOR RPAR JMP QGET QRPAR, ISZ QONE /HAVE WE GOTTEN ONE SUBSC JMP QTWO /NO...CHECK FOR TWO IAC /ONLY ONE SO USE 1 AS SECOND DCA I L16 QBACK, CMA CLA DCA RIG TAD L47 /GET BEGINNING OF TABLE DCA L50 /SAVE IN LOW CORE TAD L47 TAD CM3 /SUBTRACT THREE FROM ADDRESS DCA L47 /AND SAVE JMP QGET /WE EXPECT COMMA OR CR QTWO, ISZ R /HAVE WE GOTTEN TWO JMP ERR18 /NO...ERROR JMP QBACK RIGHT, ISZ RIG /DID WE JUST GET RPAR JMP ERR18 /NO...ERROR JMP QAGAIN QDONE, ISZ RIG JMP ERR18 JMP START QONE, 0 RIG, 0 R, 0 REDY, 0 V, 0 XLP, 0 SEC, 0 *3000 LGOTO, TAD L74 DCA L16 /USE AUTO INDEXING DCA L76 JMS I ENTITY NOP SKP JMP ALAB /WE HAVE A LABEL JMP I ASSIGN TAD CM50 /IF PUNCT...CHECK FOR LEFT PAREN SZA CLA /IS IT ( JMP I ASSIGN ANEXT, JMS I ENTITY NOP SKP JMP THERE /WE HAVE A LABEL NOP ERR28, JMS I LUNCH THERE, TAD L32 /GET THE LABEL DCA I L16 /PUT IN LIST ISZ L76 JMS I GNB TAD CM54 /CHECK FOR BEING A COMMA SNA /IS IT A COMMA JMP ANEXT /YES GET ANOTHER LABEL TAD C3 /CHECK FOR BEING A RIGHT PAREN SZA CLA /IS IT A ) JMP I ASSIGN JMS I GNB TAD CM54 /CHECK FOR ANOTHER COMMA SZA /IS IT ANOTHER JMS I PUTCH /IGNORE ANYTHING ELSE ... JMS I ENTITY /GET THE CONTROL VARIABLE SKP JMP .+4 /WE GOT IT NOP NOP ERR29, JMS I LUNCH DCA L21 /ZERO THE SYMBOL TABLE SWITCH JMS I SYMTAB /PUT VARIABLE IN SYMBOL TABLE TAD L77 /GET ADD RESS OF SYMBOL JMS I MODE /CHECK THE MODE OF THE VAIABLE ERR30, JMS I LUNCH /ITS FLOATING POINT JMS I ZZZ /PUT OUT STMT LABEL JMS LXTAD /LOAD VARIABLE WITH TAD OR TAD* JMS I PROP /PUT OUT OP CODE Q6066, 6066 /OP CODE IS TAD JMS I CREATE /GET THE NEXT CREATED LABEL JMS I PRCRL /PRINT THE CREATED LABEL JMS I PRINT /PUT OUT CR LF JMS I PROP /PUT OUT OP CODE 6071 /OP CODE IS DCA TAD GO7 JMS I PROTAC JMS I PRINT /PUT OUT CRLF JMS I PROP /PUNCH 'TAD I 7' OPTADI TAD GO7 JMS I PROTAC JMS I PRINT JMS I PROP /PUNCH 'DCA 7' OPDCA TAD GO7 JMS I PROTAC JMS I PRINT JMS I PROP /PUNCH 'JMP I 7' OPJMPI TAD GO7 JMS I PROTAC JMS I PRINT TAD L76 /PUNCH 'CPAGE <N+1>' IAC JMS I PIFF TAD L53 /PUNCH '<CR.LABEL2>, <CR.LABEL2>' JMS I CLAB TAD L53 JMS I PRCRL JMS I PRINT TAD L76 /NOW PUNCH THE LABELS CIA /SET NEGATIVE DCA L76 TAD L74 DCA L16 /USE AUTO INDEXING AGAIN TAD I L16 /GET THE NEXT LABEL JMS I PLAB /PRINT THE LABEL JMS I PRINT /PUT OUT CRLF ISZ L76 JMP .-4 /NO JMP START / THE FOLLOWING SECTION IS TO TREAT REGULAR GOTO S ALAB, JMS I ZZZ TAD L32 JMS PRJUMP /PUT OUT A JUMP TO THE LABEL IN "L32" JMP START LXTAD, 0 TAD L77 /GET ADDRESS AGAIN JMS I DUMARG TAD CM3 TAD Q6066 /TAD OR TAD* DCA OP /USE AS OPERATOR JMS I PROP /PUT OUT OP CODE OP, 0 TAD L77 /GET ADDRESS AGAIN JMS I PRSYM /PRINT THE SYMBOL JMS I PRINT /PUT OUT A CR LF JMP I LXTAD LLEAD, 0 /PUNCH SOME LEADER... DCA L7 JMS I PUNCH ISZ L7 JMP .-2 JMP I LLEAD GO7, 7 PRJUMP, 0 /SUBROUTINE TO PUT OUT A JUMP DCA LLEAD /STORE THE LABEL JMS I PROP 6044 /JMP TAD LLEAD JMS I PLAB /PUT OUT THE LABEL JMS I PRINT /PUT OUT A CRLF TAD LLEAD DCA L12 /SET CONTENTS OF LAST LINE TO LABEL JMP I PRJUMP *3200 / THE FOLLOWING ROUTINE PUNCHES OCTAL NUMBERS LPRTAC, 0 DCA TMP /SAVE THE NUMBER DCA TM TAD CM4 /PUT OUT FOUR CHARACTERS DCA DCTR /CHARACTER COUNTER BK, TAD TMP /GET THE NUMBER RAL /ROTATE IT LEFT ONE RTL /ROTATE TWO LEFT...THAT MAKES ONE OCTAL DIGIT DCA TMP /SAVE THE ROTATED NUMBER TAD TMP /GET IT IN ACCUMULATOR AND C3 RAL /GET THE DIGIT INTO THE LOW-ORDER AC ISZ DCTR /IS THIS THE LAST DIGIT? JMP .+4 /NO, CONTINUE TAD C60 /MAKE IT LOOK LIKE A TRIMMED ASCII DIGIT JMS I PRINT /PRINT THE DIGIT JMP I LPRTAC SZA /DO WE HAVE A ZERO DIGIT? JMP .+4 TAD TM SNA CLA /YES, IS IT A LEADING ZERO? JMP BK /YES, IGNORE IT TAD C60 JMS I PRINT ISZ TM /DON'T SUPPRESS ZEROS ANY MORE JMP BK /NOW...PUT OUT ANOTHER TMP, 0 TM, 0 CM4, -4 C60, 60 LIF, TAD CM4 DCA COUNT1 /SET UP COUNTER JMS I GNB TAD CM50 /CHECK FOR LEFT PAREN SZA CLA /IS IT A ( JMP I ASSIGN JMS I PUTCH /YES...PUT IT BACK FOR GENER JMS I ZZZ ISZ L52 /SET BALANCED PARENS SWITCH FOR GENER ISZ L44 /SET SWITCH FOR RIGHT SIDE OF EQUALS SIGN JMS I GENER /NOW CALL GENER AND PROCESS EXPRESSION TAD I L41 JMS I MODE /WHAT IS ITS MODE JMS I GETHI /GET HI ORDER P.P. AC TAD CDCA41 DCA LIFDCA /SET UP INSTRUCTION TO STORE LABELS LABL, JMS I ENTITY /GET A LABEL D34, 34 SKP JMP INTEG /WE GO A LABEL C46, 46 ERR31, JMS I LUNCH /DIDNT GET A LABEL INTEG, TAD L32 /GET THE LABEL ISZ LIFDCA LIFDCA, .-. /STORE LABELS IN L42 THROUGH L44 DCTR=LIFDCA ISZ COUNT1 /HAVE WE GOTTEN TOO MANY LABELS SKP /NO JMP ERR31 /YES JMS I GNB SNA /SEE IF ITS A CR JMP .+5 /ITS A CR TAD CM54 /CHECK FOR COMMA SZA CLA /IS IT A COMMA JMP ERR31 JMP LABL /YES ISZ COUNT1 /DID WE GET THE RIGHT NUMBER OF LABELS JMP ERR31 /NO TAD L42 CIA TAD L44 SNA CLA /IF THE JUMPS FOR AC<0 AND AC>0 ARE EQUAL JMP ISPECL /WE CAN SAVE SOME CODE TAD L43 CIA TAD L44 SNA CLA /IF THE JUMPS FOR AC=0 AND AC>0 ARE EQUAL JMP SPCONL /WE CAN ALSO SAVE SOME CODE JMS I PROP /PUT OUT OP CODE 6105 /OP CODE IS SNA JMS I PRINT /PUT OUT CRLF TAD L43 JMS I PRJMP /OUTPUT THE ZERO BRANCH SPCONL, JMS I PROP /PUT OUT OP CODE 6110 /OP CODE IS P SPA CLA JMS I PRINT /PUT OUT CRLF TAD L42 /OUTPUT THE NEGATIVE BRANCH IFCOMN, JMS I PRJMP TAD L44 JMS I PRJMP /OUTPUT THE POSITIVE (>0) BRANCH DCA L46 /ZERO AC JMP START /GO GET NEXT STATEMENT ISPECL, JMS I PROP /PUNCH 'SNA CLA' OPSNA JMS I PROP OPCLA JMS I PRINT TAD L43 JMP IFCOMN /OUTPUT THE ZERO AND POSITIVE BRANCHES PRJMP, PRJUMP COUNT1, 0 LCREAT, 0 ISZ L53 /INCREMENT BY ONE... TAD L53 AND C77 TAD CM33 SMA CLA /HAVE WE BEEN HERE 26 TIMES? TAD C46 /YES, BUMP THE HIGH ORDER DIGIT TAD L53 DCA L53 /AND SAVE TAD L53 /NOW RETURN IT IN AC JMP I LCREAT /RETURN LPLAB, 0 /THIS PRINTS REGULAR LABELS DCA TMP /FIRST SAVE LABEL TAD D34 /NOW PUNCH A '\' JMS I PRINT TAD TMP /GET LABEL JMS I DECOUT /AND PRINT IT JMP I LPLAB /RETURN GETHI, LGETHI CDCA41, DCA L41 CM33, -33 DECOUT, LDCOUT /TELETYPE OUTPUT ROUTINE FOR ERROR MESSAGES LTTYPE, 0 TSF JMP .-1 TLS CLA JMP I LTTYPE *3400 DORET, JMP I XDO ISZDO, JMS I PROP 6170 /ISZ TAD L30 JMS I PRSYM JMS I PRINT JMP DOSUBT /GO GENERATE THE LIMIT TEST NUMB, 0 SWIT, 0 DM5, -5 CM24, -24 C5001, 5001 LEQI, EQI LDO, JMS I ZZZ JMS I ENTITY /LOOK FOR THE SCOPE LABEL C55, 55 SKP JMP SLAB /WE GOT THE SCOPE LABEL E53, 53 JMP I ASSIGN SLAB, TAD L32 /GET THE INTEGER JMS XDO /PUT OUT DO-LOOP CODE JMP START /NORMAL EXIT JMP ERR35 /IMPLIED DO EXIT - ERROR XDO, 0 /DO LOOP SUBROUTINE - ENTERED WITH /TARGET LABEL IN AC DCA I L15 /PUT IN DO END PUSH DOWN LIST TAD L74 DCA L16 /SET UP LIST OF DO ENDS DCA L21 /ZERO THE SYMBOL TABLE SWITCH CMA CLA DCA SWIT /SET SWITCH FOR CONTROL VARIABLE TAD DM5 DCA NUMB /SET COUNTER OF NUMBER OF PARAMETERS GETMOR, JMS I ENTITY /LOOK FOR A PARAMETER JMP .+3 /ERR JMP CVAR /GOT A VARIABLE JMP DPAR /GOT AN INTEGER C21, 21 JMP ERR35 CVAR, JMS I SYMTAB /PUT SYMBOL IN TABLE TAD L77 /GET ADDRESS JMS I MODE /DETERMINE MODE OF SYMBOL JMP ERR35 TAD L77 /GET ADDRESS AGAIN DOSTOR, DCA I L16 /SAVE ISZ NUMB /HAVE WE GOTTEN TOO MANY PARAMS SKP /NO ERR35, JMS I LUNCH /YES, DO ERROR ... JMS I GNB SNA /IS IT CR JMP ALLDNE+1 /YES WERE DONE TAD CM51 SNA /IS IT A RIGHT PAREN? JMP ALLDNE /YES-FINISH UP AND TAKE IMPLIED DO EXIT TAD CM24 SZA /IS IT = JMP MCOM /NO ISZ SWIT /IS SWITCH SET FOR IT JMP ERR35 /NO JMP GETMOR /YESS...GO BACK FOR ANOTHER PARAMETER MCOM, TAD C21 /CHECK FOR COMMA ISZ SWIT /IF NO EQUAL SIGN YET SZA /OR IF THIS ISN'T A COMMA JMP ERR35 /THEN ITS AN ERROR JMP GETMOR /GET ANOTHER DPAR, TAD L32 /GET THE INTEGER ISZ SWIT /HAVE WE SEEN AN EQUAL SIGN? JMP DOSTOR /YES - SAVE THE INTEGER AND PROCEED JMP ERR35 /NO ALLDNE, ISZ XDO /BUMP RETURN POINTER IF TERMINATOR WAS RPAR CLA IAC DCA I L16 /STORE A ONE IN THE FOURTH (OR FIFTH) ARGUMENT TAD C2 TAD NUMB SPA CLA /DID WE GET AT LEAST THREE ARGS? JMP ERR35 /NO ISZ L44 TAD L74 /GET ERASABLE LOCATIONS DCA L16 /USE THE AUTO INDEX REGISTERS TAD I L16 /GET CONTROL VARIABLE DCA L30 /AND PUT IN THIRTY TAD I L16 /GET INITIAL VALUE DCA L31 /AND SAVE IT TAD I L16 /GET FINAL VALUE DCA L32 /AND SAVE IT TAD I L16 /GET INCREMENT DCA L33 /AND SAVE IT TAD L74 /GET ADDR OF ERASABLE AGAIN IAC /INCREMENT ONCE DCA L41 /TELL TRIPL WHERE TO FIND THE DUMMY TRIPLES TAD L74 /GET IT AGAIN DCA L16 /USE AUTO INDEX TO STORE TRIPLE DCA L46 /ZERO THE AC TAD C5001 /SET UP INITIAL TRIPLE NUMBER DCA L40 TAD L33 CIA TAD L31 SNA CLA /IF INITIAL VALUE = STEP SIZE JMP STCTLV /NO NEED TO COMPUTE THE DIFFERENCE TAD L33 /GET STEP SIZE DCA I L16 /PUT IN TRIPLE TAD C55 /PUT IN A MINUS SIGN DCA I L16 TAD L31 /GET INITIAL VALUE DCA I L16 JMS I TRIPL /PROCESS THE TRIPLE STCTLV, JMS I LEQI /STORE ANSWER IN CONTROL VARIABLE JMS I CLAB /PUT A CDREATED LABVEL ON THE NEXT STATEMENT TAD L53 /GET THE CREATED LABEL DCA I L15 /AND PUT IN DO END LIST TAD L74 DCA L16 TAD L33 /GET STEP SIZE CLL RAR SNA /IF STEP SIZE=1 THEN JMP ISZDO /WE CAN USE AN ISZ TO INCREMENT RAL DCA I L16 TAD E53 /WERE GOING TO ADD DCA I L16 / L30 IS IN THE THIRD POSITION SINCE WE CALLED "EQI" JMS I TRIPL /ADD STEP SIZE TO CONTROL VARIABLE JMS I LEQI /STORE ANSWER IN CONTROL VARIABLE DOSUBT, TAD L74 DCA L16 TAD L30 /GET THE CONTROL VARIABLE DCA I L16 TAD C55 /WERE GOING TO SUBTRACT DCA I L16 TAD L32 /GET FINAL VALUE DCA I L16 JMS I TRIPL /SUBTRACT CONTROL VARIABLE FROM FINAL VALUE DCA L46 /CLEAR THE AC FLAG JMS I PROP 6110 /SPA CLA JMS I PRINT JMS I PROP 6044 /PUT OUT A JMP JMS I CREATE /TO A CREATED LABEL DCA I L15 /PUT CREATED LABEL IN DO END LIST TAD L53 /GET LABEL JMS I PRCRL /AND PRINT IT JMS I PRINT /CRLF ISZ L55 /INCREMENT UNENDED DO COUNTER SKP ERR38, JMS I LUNCH /TOOO MANY UNENDED DOS JMP I .+1 DORET /RETURN FROM SUBROUTINE "XDO" EQI, 0 TAD L74 DCA L16 TAD L46 /GET RESULT OF PREVIOUS COMPUTATION DCA I L16 TAD E75 /GET EQUALS SIGN DCA I L16 TAD L30 /GET CONTROL VARAIBLE DCA I L16 JMS I TRIPL /PROCESS DCA L46 /WIPE AC SWITCH JMP I EQI /RETURN LFUNCT, 0 DCA ARGCNT TAD L46 /GET AC SZA CLA /IS IT ZERO JMS I STORE /NO...STORE THE AC TAD L53 /GET CURRENT CREATED LABEL DCA L73 /AND SAVE CLA CMA /AC IS MINUS ONE TAD L41 /PUSH LIST POINTER DCA L42 /PUSH LIST POINTER MINUS ONE CKFNCT, ISZ L42 /INCREMENT POINTER ISZ L42 /AGAIN TAD I L42 /GET THE OPERATOR TAD CM4047 /SUBTRACT THE FUNCTION OPERATOR SZA /IS THIS THE FUNCTION OPERATOR JMP CKSBSC /NO CLA IAC /YES...THE FUNCTION NAME IS IN THE NEXT LOCATIO TAD L42 /THIS POINTS TO IT DCA SAVE /AND SAVE TAD I SAVE TAD C2 DCA EQI TAD I EQI AND CM2 IAC DCA I EQI MOR, CLA CMA /NOW EXAM THE ARGUMENTS TAD L42 /WERE POINTING TO THE FIRST ARGUMENT DCA L42 /SAVE THE POINTER ISZ ARGCNT JMS I LCHNG /CHECK L42 FOR ZERO OR DUMMY ARG DCA I L42 /REPLACE IT BY UPDATED VALUE TAD L42 /IT WASNT...SEE IF IT WAS THE LAST ARGUMENT CIA TAD L41 /SUBTRACT THE END OF ARGUMENT LIST SNA CLA /IS IT ZERO JMP OUT /YES...WE'VE COMPLETED THIS PHASE CLA CMA /NO...MOVE THE POINTER BACK ONE TAD L42 DCA L42 /AND SAVE JMP MOR /NOW CHECK THE NEXT ARGUMENT OUT, TAD SAVE /GET THE POINTER TO THE FUMCTION NAME AGAIN DCA L42 /AND PUT IN 42 TAD I L42 /GET THE ARGUMENT DCA FUNOP /USE FPROP TO PUT OUT THE CALL TO THE FUNCTION TAD ARGCNT /GIVE FPROP THE NUMBER OF ARGUMENTS JMS I FPROP /PUT OUT THE CALL TO THE FUNCTION FUNOP, 0 TAD L73 /NOW RESTORE THE CREATED LABEL LOCATION DCA L53 MNEXT, TAD L42 /GET THE POINTER TAD CM2 /MOVE POINTER TO ARGUMENT DCA L42 /AND SAVE TAD I L42 /GET NEXT ARGUMENT JMS I PSYMOT /GENERATE AN "ARG" FOR THE ARGUMENT TAD L42 /GET THE POINTER CIA /SET IT NEGATIVE TAD L41 /ADD SZA CLA /ARE THEY EQUAL JMP MNEXT /NO THERE ARE MORE ARGS TAD I SAVE /YES...GET THE FUNCTION NAME JMS I MODE /WHAT MODE IS IT TAD E400 /ITS FLOATING POINT TAD L40 /ITS INTEGER DCA L46 /PUT THE TRIPLE NUMBER IN THE AC SWITCH TAD SAVE /YES...CHANGE PUSH LIST POINTER DCA L41 /STORE POINTER TO NAME IN PUSH LIST POINTER TAD L46 /GET CURRENT TRIPLE NUMBER DCA I L41 /AND PUT IT IN THE PUSH LIST JMP I LFUNCT /RETURN CKSBSC, IAC SZA CLA /IS IT THE SUBSCRIPT OPERATOR? JMP I CKF /NO - KEEP LOOKING JMP I .+1 ERR39 PSYMOT, SYMOUT SAVE, 0 ARGCNT, 0 E75, 75 CM4047, -4047 E400, 400 TAD C47 JMS I PPACK LQUOTE, JMS I PGTC /GET A CHARACTER SNA ERR37, JMS I LUNCH /CARRIAGE RETURN - ERROR TAD CM47 SZA JMP LQUOTE-2 /IF NOT A QUOTE, STORE IT JMP I .+1 FRET C47, 47 CM47, -47 PGTC, LGTC PPACK, PACK CKF, CKFND *4000 LCONT, JMS I LOOK /CHECK REST OF LINE -4 /LOOK FOR FOUR CHARACTERS -11 /I -16 /N -25 /U -5 /E JMS I ZZZ JMS I PROP /PUNCH 'NOP' 6047 JMS I PRINT /PUT OUT A CRLF JMP START /GO GET NEXT STATEMENT LPAUSE, JMS I LOOK /CHECK REST OF STATEMENT TYPE -1 /JUST ONE CHARACTER -5 /E CLA CMA LSTOP, DCA SW /SET SWITCH FOR STOP OR PAUSE DCA L32 JMS I ENTITY /LOOK FOR THE OPTIONAL INTEGER JMP MCR /WE GOT A CR SKP /ERR JMP .+3 /WE GOT AN INTEGER NOP /ERR JMP I ASSIGN MCR, JMS I ZZZ ISZ SW /PAUSE OR STOP? JMP STOP JMS I FPROP /PUNCH 'CALL 0,CKIO' 6116 JMS I PROP /PRINT OP CODE 6066 /OPCODE IS TAD TAD L32 /GET THE INTEGER JMS I PRSYM /PRINT IT JMS I PRINT /CR JMS I PROP 6121 JMS I PRINT JMS I PROP 6124 JMS I PRINT /PUT OUT CRLF JMP START /GO GET NEXT STATEMENT STOP, JMS OSTOP JMP START OSTOP, 0 /PUNCH 'CALL 0,CKIO' JMS I FPROP 6116 JMS I CLAB /PUNCH '<LAB>, HLT' JMS I PROP 6121 JMS I PRINT JMS I PROP /PUNCH 'JMP <LAB>' 6044 TAD L53 JMS I PRCRL JMS I PRINT JMP I OSTOP SW, 0 LFRMAT, JMS I LOOK /CHECK REST OF STATEMENT TYPE -2 /TWO CHARACTERS -1 /A -24 /T ISZ OSTOP TAD L74 DCA L10 DCA L76 JMS I PROP 6044 JMS I CREATE JMS I PRCRL JMS I PRINT JMS I GNB /READ UNTIL A PAREN IS GOTTEN TAD CM50 /SUBTRACT A ( SZA CLA /IS IT A ( ERR39, JMS I LUNCH /NO...ILLEGAL CHARACTER TAD C50 /GET A LEFT PAREN JMP PAREN /AND GO START COUNTING PARENS AGAIN, JMS I GTC SNA /IS IT A CR JMS I PUTCH PAREN, RTL CLL /SHIF CHAR LEFT RTL RTL DCA L32 /SAVE THE CHAR JMS I GTC SNA /IS IT A CR DCA OSTOP TAD L32 /PACK THE TWO CHARS (SOME DONE AT FRMTCK) JMP I FRMTCK /GO CHECK IF FORMAT STMT. TOO BIG FRMT, TAD OSTOP /GET BALANCED PAREN SWITCH SZA CLA /ARE THEY BALANCED JMP AGAIN /NO GET SOME MORE CHARS TAD L76 JMS I PIFF TAD L74 DCA L10 TAD L76 CIA DCA L76 JMS I ZZZ TAD I L10 JMS I PROTAC JMS I PRINT ISZ L76 JMP .-4 TAD L53 /PUNCH '<LABEL>,' JMS I CLAB JMS I PRINT JMP START GTC, LGTC PXSUBR, XXSUBR C50, 50 LPIFF, 0 /PUNCH 'IFF <N>' DCA LZZZ /ENTER WITH N IN THE AC JMS I PROP 6102 TAD LZZZ JMS I PROTAC JMS I PRINT JMP I LPIFF LZZZ, 0 /PUNCH THE CURRENT LABEL, IF ANY TAD L54 SNA /IS THERE A LABEL? JMP ZZZRET /NO JMS I PLAB /PUNCH '<LABEL>, ' TAD C7240 JMS I P2 ZZZRET, DCA I PXSUBR /MAKE SUBROUTINES AND FUNCTIONS ILLEGAL JMP I LZZZ FRMTCK, CKFRMT *4200 LTRIPL, 0 JMS I XZQL /FIRST CHECK IF A TRIPLE IS LEGAL HERE TAD L41 /GET PUSH LIST POINTER IAC /INCREMENT TO POINT TO OPERATOR DCA L42 /OPERATOR POINTER TAD L42 /GET IT AGAIN IAC /INCREMENT IT DCA L43 /OPERAND TWO POINTER TAD I L42 /GET OPERATOR AND C77 /MASK GARBAGE BITS TAD CM41 /SUBTRACT AN ADD INDIRECT OPERATOR SNA CLA /IS OPERATOR <DOLLAR> JMP I LADDIN /YES PROCESS IT TAD I L43 /NO...GET OPERAND TWO JMS I DUMARG /SEE IF ITS A DUMMY ARGUMENT SKP /YES IT IS JMP CK2 /NO ..CHECK THE OTHER ARGUMENT TAD I L42 /YES GET THE OPERATOR AND C77 /MASK GARBAGE BITS TAD EM75 /IS IT AN EQUALS SIGN SNA /IS OP C JMP LEQUIN /YES USE C* IAC /SEE IF ITS ALREADY EQUALS INDIRECT SZA CLA /IS OP C* JMS I LDUMTW /YES TWO IS DUMMY ARG CK2, CLA TAD I L41 /NO IS OPND ONE A SYMBOL JMS I DUMARG /SEE IF ITS A DUMMY ARGUMENT JMS I LDUMON /IT IS CLA CLL /NOW LETS SEE WHAT THE OPERATOR IS TAD I L42 /GET THE OPERATOR AND C77 /MASK OUT GARBAGE BITS TAD CM53 SNA /IS IT JMP I LAADD /YES IAC SNA /IS IT * JMP I LMUL /YES TAD CM3 SNA /IS IT - JMP I LASUB /YES TAD CM2 SNA /IS IT / JMP I LDIV /YES TAD CM16 SNA /IS IT C JMP I LEQU /YES IAC SNA /IS IT C* JMP I LEIND /YES TAD J27 SNA /IS IT ** JMP I LEXP /YES TAD C2 SNA /IS IT A UNARY MINUS JMP I LUMIN /YES ERR40, JMS I LUNCH /NO BETTER COP OUT LDMARG, 0 SMA /IS HIGH ORDER BIT ON JMP INC /NO...ITS NEITHER A SYMBOL OR A TRIPLE NUMBER RAL /GET NEXT BIT SMA /IS IT ON JMP MAYBE /NO...WE MIGHT HAVE A SUBSCRIPT THOUGH RAR /YES...RESTOR THE PARAMETER CIA /SET IT NEGATIVE TAD L47 /SUBTRACT IT FROMTHE START OF THE FCON TABLE SPA /IS THE RELULT POSITIVE JMP INC /NO...ITS AN FCON NOT A SYMBOL CIA /YESS...RESTORE ORIGINAL PARAMETER TAD L47 TAD C2 /YES MOVE POINTER TO CONTROL BITS DCA L23 /SAVE TAD I L23 /GET THE CONTROL BITS AND C10 /MASK ALL BUT DUMMY ARG BIT OUT INC1, SNA CLA /IS THIS SYMBOL. A DUMMY ARG INC, ISZ LDMARG /NO...INCREMENT THE RETURN CLA /CLEAR THE ACCUMULATOR JMP I LDMARG /AND RETURN MAYBE, AND F400 /MASK THE SUBSCRIPT BIT OF THE TRIPLE NUMBER JMP INC1 /AND CHECK BECAUSE WE TREAT SUBSCS AS DUMMY ARG ARET, JMP I LTRIPL /THIS IS THE RETURN FROM TRIPLE LEQUIN, TAD C74 DCA I L42 /SET OP TO =* JMP CK2 C74, 74 / / THIS ROUTINE CHECKS THE REST OF THE CHARS FOR A STATEMENT LLOOK, 0 JMS GLOOK /GET CHARACTER COUNT DCA LTRIPL ABACK, JMS I GNB JMS GLOOK /ADD IN THE TEST CHAR SZA CLA /WERE THEY EQUAL JMP I ASSIGN /NO...IT MUST BE AN ASSIGNMENT STATEMENT ISZ LTRIPL /THEY MATCH...ARE WE DONE JMP ABACK /NO JMP I LLOOK /RETURN GLOOK, 0 CDF 10 TAD I LLOOK ISZ LLOOK CDF 00 JMP I GLOOK / LAADD, AADD LADDIN, ADDIND LASUB, ASUB LEQU, EQU LEIND, EIND LEXP, EXP LUMIN, UMIN CM41, -41 EM75, -75 LDUMTW, DUMTWO CM16, -16 C10, 10 F400, 400 LDUMON, DUMONE CM53, -53 LMUL, MUL LDIV, DIV XZQL, LXZQ J27, 27 CKFND, TAD L42 /SEE IF POINTER IS INTO SYMB. TABLE TAD K2000 /(IT HAS HAPPENED!) SZA CLA JMP I CKFNCP JMP I .+1 /YES-ERROR ERR39 CKFNCP, CKFNCT K2000, 2000 *4400 / FIGURE OUT WHATS IN AC LCHECK, 0 TAD L46 /GET WHATS IN THE AC CIA /SET NEGATIVE TAD I L41 /SUBTRACT SNA CLA /ARE THEY EQUAL JMP ONE /YES TAD L46 /GET AC AGAIN CIA /SET NEGATIVE TAD I L43 /SUBTRACT TWO SNA CLA /ARE THEY EQUAL JMP TWO /YES TAD L46 /GET THE AC SNA CLA /IS IT ZERO JMP NONE /NO YES YES YES JMP SOME /JUST SIMETHING IN AC ONE, ISZ LCHECK NONE, ISZ LCHECK SOME, ISZ LCHECK TWO, JMP I LCHECK / FINDS TEMPORARY THAT TRIPLE NUMBER IS ASSIGNED TO LTMPOR, 0 DCA LFPROP /SAVE TRIPLE NUMBER TAD LFPROP JMS I MODE /DETERMINE ITS MODE TAD C30 /FLOATING POINT TAD TTAB /INTEGER DCA LCHECK TAD CM30 DCA FOP /SET UP COUNT FOR SEARCH LTLP1, TAD I LCHECK CIA TAD LFPROP SNA CLA /IS THIS THE ONE? JMP ZEROIT /YES - ZERO IT OUT AND RETURN IT ISZ LCHECK ISZ FOP JMP LTLP1 /LOOP OVER ENTIRE TABLE TAD LCHECK /NOT FOUND - WE HAVE TO ASSIGN IT TAD CM30 DCA LCHECK /RESET POINTERS FOR ZERO SEARCH TAD CM30 DCA FOP LTLP2, TAD I LCHECK SNA CLA /IS THIS TEMPORARY FREE? JMP TEMPTY /YES ISZ LCHECK ISZ FOP JMP LTLP2 /CHECK THEM ALL ERR41, JMS I LUNCH /OUT OF TEMPORARIES TEMPTY, TAD LCHECK CIA TAD L45 SNA CLA /ADJUST THE NUMBER OF FLOATING POINT TEMPS ISZ L45 TAD LCHECK CIA TAD L51 SNA CLA /ADJUST THE NUMBER OF INTEGER TEMPS ISZ L51 TAD LFPROP /STORE TRIPLE NUMBER IN THIS TEMPORARY SLOT ZEROIT, DCA I LCHECK TAD FOP TAD C31 /GET POSITIVE NUMBER FROM TABLE COUNTER JMP I LTMPOR /RETURN C31, 31 LFPROP, 0 /THIS ROUTINE PUNCHES SUBROUTINE CALLS DCA FOP /SAVE THE NUMBER OF ARGUMENTS JMS I PROP 6113 /PUT OUT THE CALL TAD FOP /GET THE NUMBER OF ARGUMENTS JMS I PROTAC /PRINT IT TAD C54 /GET A COMMA JMS I PRINT /PRINT IT CDF 10 TAD I LFPROP CDF 00 JMS I PRSYM JMS I PRINT ISZ LFPROP /INCREMENT RETURN JMP I LFPROP /RETURN FOP, 0 / COME HERE IF OP IS - ASUB, JMS I SMODE /MAKE SURE THAT BOTH ARGS ARE OF SAME MODE TAD I L43 /GET OPERAND TWO JMS I MODE JMP FSUB /ITS FLOATING POINT JMS LCHECK /ITS INTEGER...CHECK WHATS IN THE AC JMP STWO /TWO IS IN THE AC JMS I STORE /SMETHING IS IN THE AC JMS I LADDON /NOTHING IS IN THE AC...ADD ONE TO IT ASBCMN, JMS I LCOMP /ONE IS IN AC...COMPLEMENT IT JMS I LADDTW /ADD TWO TO IT JMP I LRETUR /AND RETURN STWO, JMS I LCOMP /TWO IS IN AC...COMPLEMENT IT JMS I LADDON /ADD ONE TO IT JMS I LCOMP /AND COMPLEMENT IT AGAIN JMP I LRETUR /AND RETURN FSUB, JMS LCHECK /FLOATING POINT...CHECK THE AC JMP FS /TWO IS IN AC JMS I STORE /SOMETHING IN AC...STORE IT JMP FAS /NOTHING IN AC JMP ASBCMN /ONE IS IN AC - COMPLEMENT AND ADD TWO FAS, JMS I LADDTW /NOTHING IN AC...ADD TWO IN FS, IAC /WE HAVE ONE ARG JMS I FPROP 6011 JMS I ARG /PUT OUT THE ARG PSEUDO OP TAD I L41 /GET ARGUMENT ONE IRET, JMS I PRSYM /AND PUT IT OUT JMS I PRINT /PUT OUT CRLF JMP I LRETUR TTAB, ITTAB /THIS IS THE STARTING ADDRESS OF THE TEMP TABLE LCOMP, COMP LADDON, ADDONE C30, 30 CM30, -30 LRETUR, RETURN LADDTW, ADDTWO /CHECK SIZE OF FORMAT STMT. / CKFRMT, DCA I L10 /CONTINUE PACK ROUTINE ISZ L76 TAD L76 TAD M174 /IS IT TOO BIG SMA CLA JMP I ILCON /YES-GIVE IT ILLEGAL CONT. MESSAGE JMP I LFRMT /NO-GO BACK LFRMT, FRMT M174, -174 ILCON, ERR1 /ILLEGAL CONTINUATION MESSAGE *4600 / PROCESS * ADDIND, JMS I CHECK /CHECK WHATS IN THE AC NOP /TWO IS IN AC SKP /N SOMETHING IS IN AC SKP /NOTHING IS IN AC JMS I STORE /STORE WHATEVER IS IN AC TAD I L41 /GET OPERAND ONE JMS I MODE /WHAT MODE IS IT JMP FLOT /YES IT FLOATING POINT JMS I PROP /IST INTEGER... 6063 /PUT OUT A TAD* LOOP6, TAD I L41 /GET THE FIRST OPERAND AGAIN JMP I LIRET /GO TO THE RETURN ROUTINE FLOT, IAC /WE ONLY HAVE ONE ARG JMS I FPROP /PUT OUT A CALL TO A FLOATING POINT ROUTINE 6132 /PUT OUT A CALL TO FLOATING INDIRECT ADD JMS I ARG /PUT OUT THE ARG PSEUDO OP JMP LOOP6 /AND JUMP BACK / THIS PUTS OUT OPCODES FOR AN ADD ADDL, 0 CLL RAR SNA /TEST FOR 0 OR 1 JMP ADSPCL RAL /NOT 0 OR 1, TREAT NORMALLY JMS I MODE /WHAT MODE ARE WE IN JMP LOOP7 /YES JMS I PROP /PUT OUT A TAD 6066 JMP I ADDL /RETURN LOOP7, IAC /WE ONLY HAVE ONE ARGUMENT JMS I FPROP /PUT OUT A CALL TO A FLOATING POINT ROUTINE 6003 /PUT OUT A FLOATING ADD JMS I ARG /PUT OUT THE ARG PSEUDO OP JMP I ADDL /AND RETURN ADSPCL, ISZ ADDL ISZ ADDL /BUMP RETURN POINT PAST ARGUMENT TO "TAD" SNL /0? JMP I ADDL /YUP - DON'T PUT OUT NUTTIN JMS I PROP OPIAC /PUT OUT "IAC" JMP I ADDL / STORES CONTENTS OF AC IN TEMPORARY / PUT OUT DCA OR CALL STO / FOLLOWED BY THE TEMPORARY LOC LSTORE, 0 TAD L46 /GET THE AC JMS I MODE /WHAT MODE IS IT JMP FSTO /ITS FLOATING POINT JMS I PROP 6071 /ITS INTEGER...PUT OUT A DCA STORET, TAD L46 /GET THE AC AGAIN JMS I PRSYM /PRINT WHATEVER IS IN IT JMS I PRINT /PUT OUT A CRLF DCA L46 /ZERO THE AC JMP I LSTORE /AND RETURN FSTO, IAC /WE ONLY HAVE ONE ARG JMS I FPROP /PUT OUT A CALL TO A FLOATING POINT ROUTINE 6006 /PUT OUT A CALL TOFLOATING STORE JMS I ARG /PUT OUT THE ARG PSEUDO OP JMP STORET /AND JMP BACK COMP, 0 TAD L46 /GET THE AC JMS I MODE /WHAT MODE IS IT JMP FCOM /ITS FLOATING POINT JMS I PROP /ITS INYTEGER 6135 /PUT OUT A CIA JMS I PRINT /PUT OUT A CRLF JMP I COMP /AND RETURN FCOM, JMS I FPROP 6140 /TO FLOATING CHANGE SIGN JMP I COMP / COME HERE IF OP IS * MUL, JMS I SMODE /CHECK FOR SAME MODE JMS I CHECK /CHECK WHATS IN THE AC JMP TMUL /TWO IS IN THE AC JMS I STORE /SOMETHING IS IN AC...STORE IT JMS I KADDON /NOTHING IS IN AC..GET ONE IN AC AMUL, TAD I L43 /GET OPERND TWO JMS I MODE /WHAT MODE IS IT TAD EM6 TAD C6022 DCA FML /SAVE OPCODE IAC JMS I FPROP /PUT OUT A CALL TO A FLOATING POINT ROUTINE FML, 0 JMS I ARG /PUT OUT THE ARG PSEUDO OP TAD I L43 /GET OPERAND TWO JMP I LIRET /AND GO TO THE RETURN ROUTINE TMUL, TAD I L41 /GET OPERAND ONE AND REPLACE OPERAND TWO DCA I L43 JMP AMUL /AND JUMP BACK KADDON, ADDONE LIRET, IRET EM6, -6 C6022, 6022 LSUB, JMS I LOOK /CHECK REST OF STATEMENT -6 / -17 /O -25 /U -24 /T -11 /I -16 /N -5 /E JMP I .+1 TART LCLEAR, 0 /CLEAR THE PSEUDO ACC AND MQ DCA L30 DCA L31 DCA L32 DCA L33 DCA L34 DCA L35 JMP I LCLEAR *5000 / THIS ROUTINE TAKES CARE OF TWO BEING DUMMY ARG DUMTWO, 0 TAD I L41 /GET OPND ONE DCA FDV /AND SAVE TAD I L43 /GET OPND TWO DCA I L41 /ZERO OPND ONE JMS DUMONE /PROCESS DUMMY ARGUMENT TAD FDV /GET SAVED OPERAND DCA I L41 /AND USE AS OPERAND TAD L46 /GET TRIPLE NUMBER DCA I L43 /AND REPLACE JMP I DUMTWO /RETURN / TAKES CARE OF ONE BIING DUMMY ARG DUMONE, 0 TAD I L42 /GET OPERATOR DCA ASTOP /AND SAVE TAD E41 /GET ADD INDIRECT OPERATOR DCA I L42 /AND REPLACE OPERATOR CDF 10 TAD I TRIPL CDF 00 DCA FEX /AND SAVE RETURN JMS I TRIPL /CALL TRIPL TAD L46 /GET TRIPLE NUMBER DCA I L41 /AND REPLACE OPERAND TAD ASTOP /RESTORE OPERATOR DCA I L42 ISZ L40 /ADVANCE TRIPLE TAD FEX /RESTORE RETURN CDF 10 DCA I TRIPL CDF 00 JMP I DUMONE /RETURN / COME HERE IF OP IS / DIV, JMS I SMODE /CHECK FOR SAME MODE JMS I CHECK /CHECK WHATS IN THE AC JMP DIVE /TWO IS IN AC JMS I STORE /THERES SOMETHING IN THE AC...STORE IT SKP /NOTHING IS IN AC JMS I STORE /THERES SOMETHING IN THE AC...STORE IT JMS I MADDTW /GET TWO INTO THE AC DIVE, TAD I L41 /GET OPERAND ONE JMS I MODE /WHAT MODE IS IT TAD FM6 TAD C6025 DCA FDV /SAVE OERATOR IAC JMS I FPROP /PUT OUT A CALL TO A FLOATING POINT ROUTINE FDV, 0 JMS I ARG /PUT OUT THE ARG PSEUDO OP TAD I L41 /GET OPERAND ONE JMP I MIRET /JUMP TO RETURN ROUTINE / COME HERE IF OP IS ** EXP, JMS I CHECK /CHECK WHATS IN THE AC JMP FEXP /TWO IS IN AC JMS I STORE /THERES SOMETHING IN THE AC...STORE IT SKP /NOW NOTHING IS IN AC JMS I STORE /THERES SOMETHING IN THE AC...STORE IT JMS I MADDTW /GET TWO IN AC FEXP, TAD I L41 JMS I MODE TAD C6 DCA FDV TAD I L43 /GET OPERAND TWO JMS I MODE /WHAT IS ITS MODE TAD C3 /FLOATING POINT TAD C6207 /INTEGER TAD FDV DCA FEX /SAVE REOUTINE POINTER IAC JMS I FPROP /PUT OUT A CALL TO A FLOATING POINT ROUTINE FEX, 0 TAD I L41 /GET OPERAND ONE DCA I L43 /SAVE IN OPERAND TWO TAD FEX /GET THE OP CODE JUST PUT OUT TAD CM6207 /SUBTRACT THE INTEGER TO INTEGER CASE SZA CLA /WAS THIS THE INTEGER INTEGER CASE TAD L50 /NO, GET A FLOATING POINT POINTER DCA I L41 /AND SUBSTITUTE IT FOR OPERAND ONE JMS I ARG /PUT OUT THE PSEUDO OP ARG TAD I L43 /GET THE REAL OPERAND ONE IN THE AC JMP I MIRET /JUMP TO THE RETURN ROUTINE /COMES HERE IF THE VARIABLE TO THE LEFT OF THE '=' IS SUBSCRIPTED EIND, TAD C132 /GET AN ASTERISK DCA L60 /PUT IT IN SIXTY /COMES HERE IF THE OPERATOR IS AN '=' EQU, JMS I CHECK /CHECK WHATS IN THE AC NOP /TWO IS IN THE AC JMS I STORE /THERES SOMETHING IN THE AC...STORE IT JMS I TADDON /NOTHING IS IN AC...ADD ONE TO IT TAD I L43 /GET OPERA ND TWO JMS I MODE /WHAT IS ITS MODE JMP FEQU /ITS FLOATING POINT TAD L46 /GET THE AC JMS I MODE /WHAT MODE IS IT JMP I LFIX /ITS FLOATING POINT EFIX, TAD L60 /GET EQUALS INDIRECT LOCATION TAD C6071 /ADD A DCA DCA ASTOP /AND SAVE OPCODE JMS I PROP /POT OUT THE OPCODE ASTOP, 3 EQRET, DCA L46 /ZERO THE AC TAD I L43 /GET OPERAND TWO JMS I PRSYM /PRINT IT JMS I PRINT /PUT OUT A CRLF DCA L60 /ZERO SIXTY JMP I .+1 /AND RETURN ARET FEQU, TAD L46 /GET THE AC JMS I MODE /WHAT MODE IS IT SKP /ITS FLOATING POINT JMS I LFLOAT /ITS INTEGER...FLOAT IT JMP I .+1 XXX LARG, 0 JMS I PROP 6201 JMP I LARG TADDON, ADDONE E41, 41 MADDTW, ADDTWO FM6, -6 C6025, 6025 MIRET, IRET C6, 6 C6207, 6207 LFIX, FIX C6071, 6071 LFLOAT, FLOAT CM6207, -6207 C132, 132 *5200 XXX, TAD L60 /GET THE INDIRECT EQUALS SWITCH SNA CLA /IS THE SWITCH ON TAD CM140 /NO, FLOATING POINT STORE TAD C6146 /YES...ISTO DCA FSTOP /SAVE OPCODE IAC /WE ONLY HAVE ONE ARG JMS I FPROP /PUT OUT A CALL TO A FLOATING POINT ROUTINE FSTOP, 6146 JMS I ARG /PUT OUT THE ARG PSEUDO OP JMP I .+1 /JUMP BACK EQRET / THIS ADDS OPERAND ONE TO THE AC ADDONE, 0 TAD I L41 /GET OPERAND ONE JMS I LADDL /PUT OUT OPCODES FOR AN ADD TAD I L41 /GET FIRST OPERAND JMS I PRSYM /PUT OUT SYMBOL JMS I PRINT /PUT OUT CR LF TAD I L41 /GET OPERAND ONE DCA L46 /PUTN THE AC JMP I ADDONE /RETURN UMIN, JMS I CHECK /CHECK WHATSN THE AC NOP /TWOSN AC JMS I STORE /THERES SOMETHINGN THE AC...STORET JMS ADDONE /NOTHINGSN AC NOW...PUT ONEN AC JMS I MCOMP /AND COMPLEMENTT JMP RETURN /AND RETURN AADD, JMS I SMODE JMS I CHECK /CHECK WHATSN THE AC JMP AONE /TWOSN AC JMS I STORE /THERES SOMETHINGN THE AC...STORET JMS ADDONE /GET ONEN AC JMS ADDTWO /ONESN AC JMP RETURN /RETURN AONE, JMS ADDONE /ADD ONE TO TWO JMP RETURN /AND RETURN LPROP, 0 CDF 10 TAD I LPROP CDF 00 JMS I PRSYM /AND PRINT THE SYMBOL TAD C40 /GET A SPACE JMS I PRINT /PUT OUT ISZ LPROP /INCREMENT RETURN JMP I LPROP /AND RETURN / THIS ADDS OPERAND TWO TO THE AC ADDTWO, 0 TAD I L43 /GET OPERAND TWO JMS I LADDL /PUT OUT OPCODES FOR AN ADD TAD I L43 /GET SECOND OPERAND JMS I PRSYM /PRINT THE SYMBOL JMS I PRINT /PUT OUT CR LF TAD I L43 /GET OPERAND TWO DCA L46 /AND PUTN AC JMP I ADDTWO /RETURN LXZQ, 0 /CHECK FOR EXPRESSION LEFT OF = CLA TAD L22 /GET SUBSCRIPT NESTING DEPTH TAD L44 /GET EQUALS SIGN SWITCH SNA CLA /ARE THEY BOTH ZERO ERR42, JMS I LUNCH /N YES ...THATS AN ERROR JMP I LXZQ /RETURN RETURN, TAD I L41 /THISS THE RETURN...GET OPERAND ONE JMS I MODE /WHAT MODEST TAD G400 /ITS FLOATING POINT...TURN F.P. BIT ON TAD L40 /ADD CURRENT TRIPLE NUMBER DCA L46 /PUTN AC SW JMP I NARET /AND NOW RETURN FROM THE ROUTINE FLOAT, 0 JMS I FPROP /PUT OUT A CAL TO THE FLOAT ROUTINE 6127 JMP I FLOAT /AND RETURN FIX, JMS I FPROP /PUT OUT A CAL 6143 /TO THE FIX ROUTINE JMP I .+1 /AND JUMP BACKLADDL, ADDL EFIX C6146, 6146 LADDL, ADDL MCOMP, COMP G400, 400 NARET, ARET LSMODE, 0 TAD I L43 /GET FIRST OPERAND JMS I MODE /FIND WHAT ITS MODE IS JMP IBM /ITS FLOATING POINT TAD I L41 /GET OPERAND TWO JMS I MODE /THIS BETTER BE INTEGER TOO JMP .+5 /ITS NOT, LUNCH JMP I LSMODE /GREAT, RETURN IBM, TAD I L41 /GET OPERAND TWO JMS I MODE /THIS BETTER BE F.P. TOO JMP I LSMODE /IT IS RETURN ERR43, JMS I LUNCH /ERROR LPUNCH, 0 PSF /IS PUNCH READY JMP .-1 /NO, TRY AGAIN PLS /YES, PUNCH THE CHARACTER CLA /CLEAR THE ACCUMULATOR JMP I LPUNCH /AND RETURN CM140, -140 LFINI, 0 /FINAL CLEANUP AT END OF COMPILATION JMS I FPROP /PUNCH 'CALL 0,OPEN' OPEN JMS I PROP /PUNCH A 'PAUSE' 6060 JMS I PRINT JMS I PRINT /FORCE LAST LINE OUT TAD CM100 JMS I LEADR /PUNCH SOME LEADER CDF 10 XFINI, HLT /JMP I LFINI, FOR DISK SYSTEM ... CIF 0 JMP I D1000 /BEGIN NEXT COMPILATION D1000, 1000 CM100, -100 LEADR, LLEAD FORST, JMS I PRINT /FORTRAN STARTING POINT JMS I (LIST DCA .-1 TAD (LPUNCH DCA PUNCH TAD CM50 JMS I LEADR JMS I PROP FORTR JMS I PRINT JMP I .+1 START1 PAGE *5400 LLAST, TAD C4000 /END OF COMPILATION, SET CHK SO THAT DCA CHK /LGTC WILL NOT READ ANOTHER LINE... JMS I GNB SZA JMP I ASSIGN JMS I (OSTOP /PUNCH A 'HLT' ETC. TAD L55 TAD C25 SZA CLA /IS DO LIST EMPTY? ERR44, JMS I LUNCH /NO, COMPLAIN... MORDUM, TAD L56 /GET POINTER INTO SYMBOL TABLE TAD C2 /ADD TWO TO IT FOR CONTROL BITS DCA L72 /SAVE ADDRESS OF CONTROL BITS TAD I L72 /GET THE CONTROL BITS AND E10 /MASK ALL BUT THE DUMMY ARG BIT SNA CLA /IS THE DUMMY ARG BIT ON JMP LEDOUT /NO, PUT OUT DUMMY SUBSCRIPT DEFNS JMS I DEFN /YES, PUT OUT THE VARIABLE NAME JMS I PROP /PUT OUT THE OP CODE 6154 /WHICH IS BSS TAD C2 /RESERVE TWO LOCATIONS JMS I PROTAC /PRINT THE TWO JMS I PRINT ISZ L56 /ADVANCE THE POINTER ISZ L56 ISZ L56 JMP MORDUM /GO BACK AND DO THE NEXT ONE LEDOUT, DCA L72 /ZERO LOCATION 72 LEDOT1, TAD L25 /GET THE NUMBER OF SUBSCRIPT TEMPS CMA TAD L72 /SUBTRACT FROM THE NUMBER WEVE DEFINED SNA CLA /HAVE WE DEFINED THEM ALL YET JMP GOOON /YES, NOW PUT OUT THE END TAD K5200 /GET SUBSCRIPT DESIGNATOR TAD L72 /GET WHICH SUBSCRIPT JMS I PRSYM /AND PRINT IT TAD C7240 /GET THE TERMINATOR JMS I P2 /PRINT IT JMS I PROP /PRINT THE OP CODE 6154 /WHICH IS BSS TAD C2 /RESERVE TWO LOCATIONS JMS I PROTAC JMS I PRINT /CRLF ISZ L72 /GO ON TO THE NEXT ONE JMP LEDOT1 GOOON, JMS I PROP 6157 /PUT OUT AN END JMS I PRINT /PUT OUT A CRLF DCA L65 /ZERO THE PSEUDO LOCATION COUNTER TAD START /CLA = -600 JMS I LEAD /PUT OUT LOTS OF LEADER CODE JMS I PROP 6162 /PUT OUT A LAP JMS I PRINT SYM, TAD L57 CIA TAD L56 SZA CLA /ARE THERE ANY SYMBOLS JMP SYM1 TAD MIKE8 SZA CLA /NO, IS THERE ANY EQUIVALENCING? JMP I LPTEMP JMP I .+1 PTEMP SYM1, TAD L56 TAD C2 DCA L72 TAD I L72 /GET THE CONTROL BITS DCA L72 /SAVE THEN TAD L72 /GET THE BITS AND E7 /MASK SZA CLA /ARE THEY FUNCT NAME, JMP UP /YES JMS I DEFN /PUT IT OUT TAD L72 AND E20 /MASK ALL BUT THE DIMEN SNA CLA /IS EITHER ONE ON JMP NORM /NO TAD L56 JMS I DIM DCA L26 TAD I L14 /GET THE SECOND DIMENSION CLL CIA /AND NEGATE DCA L73 /SAVE SZL ERR36, JMS I LUNCH TAD L26 ISZ L73 JMP .-4 ACK, DCA L26 TAD L56 JMS I MODE /DETERMINE MODE OF SYMBOL TAD L26 RAL CLL TAD L26 SZL JMP ERR36 DCA L26 TAD L72 AND C40 SZA CLA JMP COM JMS I BSS UP, ISZ L56 ISZ L56 ISZ L56 JMP SYM NORM, IAC JMP ACK C25, 25 E7, 7 K5200, 5200 DEFN, LDEFN E20, 20 E10, 10 LPTEMP, EEK LEAD, LLEAD COM, JMS I PROP 6165 TAD L26 JMS I PROTAC JMS I PRINT JMP UP *5600 C7600, 7600 C177, 177 LBSS, 0 TAD L65 /GET THE LOCATION COUNTER TAD L26 /ADD THE CURRENT AMOUNT TO IT AND C7600 /MASK ALL BUT THE PAGE BITS DCA L64 /SAVE THE NUMBER OF PAGES TAD L65 /GET THE LOCATION COUNTER AGAIN TAD L26 /ADD THE CURRENT DISPLACEMENT AGAIN AND C177 /NOW GET THE NUMBER OF LOCATIONS OVER A PAGE DCA L65 /AND SAVE L, TAD L64 /GET THE NUMBER OF PAGES TO BE RESERVED SNA /ARE THERE ANY TO BE RESERVED JMP CRAM /NO...JUST PUT OUT STRAIGHT NUMBER OF LOCATIONS TAD C7600 /YES...SUBTRACT ONE FROM THE PAGE COUNT DCA L64 /AND SAVE IT TAD L65 /GET THE NUMBER OF EXTRA LOCATIONS DCA L26 /AND PUT IN THE DISPLACEMENT LOCATION JMS I PROTAC /PUT OUT A ZERO JMS I PRINT /PUT OUT A CRLF JMS I PROP /PUT OUT THE OPCODE 6151 /WHICH IS THE PAGE PSEUDO OP JMS I PRINT /PUT OUT A CRLF JMP L /NOW SEE IF WE HAVE PUT OUT ENOUGH PAGES CRAM, JMS I PROP /NOW PUNCH 'BLOCK <N>' BLCK TAD L26 JMS I PROTAC JMS I PRINT JMP I LBSS LDEFN, 0 TAD L56 /GET THE POINTER TO THE SYMBOL JMS I PRSYM /PRINT THE SYMBOL TAD C7240 /GET THE TERMINATOR JMS I P2 /PRINT IT JMP I LDEFN /AND RETURN AFCON, TAD L47 /GET START OF FCON TABLE TAD C3 /UPDATE IT DCA L56 /SAVE UPDATED ADDRESS FLOOP, TAD L50 /GET END OF FCON TABLE CIA TAD L56 /SUBTRACT FROM CURRENT POINTER SNA CLA /ARE WE DONE JMP ALTHRU /YES TAD CM3 /NO, GET MINUS THREE DCA L63 /TO USE AS A COUNTER JMS LDEFN /DEFINE IT TAD I L56 /GET THE FIRST WORD ISZ L56 /ADVANCE THE POINTER TO THE NEXT WORD JMS I PROTAC /PRINT THE WORD JMS I PRINT /PUT OUT A CRLF ISZ L63 /HAVE WE PUT OUT ALL THREE WORDS JMP .-5 /NO...PUT OUT ANOTHER JMP FLOOP /YES...GET THE NEXT CONSTANT PTEMP, TAD K561 DCA L56 FTLOOP, TAD L45 CMA TAD L56 SNA CLA JMP ITEMP TAD C3 DCA L26 TAD K5400 /GET F.P. DESIGNATOR JMS LDEFN /PRINT THE SYMBOL JMS I BSS /RESERVE THE LOCATIONS FOR IT ISZ L56 /INCREMENT THE POINTER JMP FTLOOP ITEMP, TAD K531 DCA L56 ILOOP, TAD L51 CMA TAD L56 SNA CLA JMP SUBOUT IAC DCA L26 TAD K5000 /GET THE INTEGER TEMP DESIGNATOR JMS LDEFN /PRINT IT JMS I BSS /RESERVE LOCATIONS FOR IT ISZ L56 /INCREMENT THE POINTER JMP ILOOP ALTHRU, TAD D6 /PUNCH AN 'IFF 6' JMS I PIFF /SO THAT ENTRY WILL NOT BE AT END OF THE PAGE JMS I PROP 6055 /PUT OUT AN EAP JMS I PRINT TAD L70 /GET THE SUBROUTINE FUNCTION POINTER SZA CLA /IS IT ZERO JMP THRU /NO...WE MUST BE IN A SUBR OR A FUNC JMS I PROP /YES ...WERE IN A MAIN PROGRAM 6052 /PUT OUT ENT TAD C6000 /POINTER TO THE SYMBOL MAIN JMS I PRSYM /PRINT THE SYMBOL JMS I PRINT /PUT OUT A CRLF TAD C6000 /GET THE POINTER TO MAIN AGAIN JMS I PRSYM /PRINT IT TAD C7240 /GET A COLON JMS I P2 /PRINT THEM JMS I PROP 6047 JMS I PRINT /PUT OUT A CRLF THRU, JMS I FINI 6201 /CDF FIELD 0 JMP I C7600 /AND RETURN TO THE MONITOR ... C6000, 6000 SUBOUT, DCA L56 SUBOT1, TAD L25 CMA TAD L56 SNA CLA JMP AFCON JMS I PROP /PUT OUT THE OP CODE 6176 /WHICH IS DUMMY TAD X5200 /GET SUBSCRIPT DESIGNATOR TAD L56 /GET THE POINTER JMS I PRSYM /PRINT THE SYMBOL JMS I PRINT /CRLF ISZ L56 JMP SUBOT1 K5000, 5000-ITTAB K5400, 5400-FTTAB K531, ITTAB+1 K561, FTTAB+1 X5200, 5200 FINI, LFINI D6, 6 *6000 /FUNCTION AND SUBROUTINE STATEMENT PROCESSOR LFUNC, JMS I LOOK /CHECK REST OF STATEMENT MFOUR, -4 / -24 /T -11 /I -17 /O -16 /N CLA IAC /SET SWITCH TART, DCA L67 /THIS IS THE SWITCH TAD FIRSTF SNA CLA /INSURE SUBR. OR FUNCT. IS FIRST STMT. ERR47, JMS I LUNCH JMS SUBB CLA CMA TAD C6275 /THIS IS THE PLACE TO STORE FUNCTION NAME DCA L11 /USE AUTO INDEXING TO STORE THE NAME TAD L30 /GET THE FIRST WORD DCA I L11 /PUT IT IN THE SYMBOL TABLE TAD L31 /GET THE SECOND WORD DCA I L11 /PUT IT IN THE TABLE TAD L32 /GET THE THIRD WORD IAC /TURN THE EXTERNAL SYMBOL BIT ON DCA I L11 /AND PUT IT IN THE TABLE TAD C6275 /GET THE POINTER DCA L70 /AND PUT IT IN LOC 70 JMS I PROP 6052 /PUT OUT AN ENT TAD L70 /GET THE SUBROUTINE NAME JMS I PRSYM /PRINT IT JMS I PRINT /PUT OUT A CRLF CLA CMA DCA READY /SET SWITCH TAD L70 /GET THE SUB NAME JMS I PRSYM /PUT IT OUT TAD C7240 JMS I P2 /PUT IT OUT JMS I PROP /PUT OUT THE OP CODE 'BLOCK 2' BLCK TAD C2 JMS I PROTAC JMS I PRINT DCA WHICH /ZERO THE SWITCH WHICH TELLS WHICH WORD MORE, JMS I GNB SNA /CHECK FOR END OF CARD JMP CKCR TAD CM50 /CHECK FOR LEFT PAREN SNA /IS IT A LPAR JMP GET1 /YES TAD MFOUR SNA /IS IT A COMMA JMP XGET /YES TAD C3 SNA CLA /IS IT A LPAR JMP START /YES JMP ERR48 /NO GET1, ISZ READY /WERE WE READY FOR LPAR JMP ERR48 /NO, ERROR ... XGET, JMS SUBB TAD L32 TAD TEN DCA L32 TAD C77 /GET MASK FOR SYMBOL TABLE DCA L21 /AND PUT INTO THE SWITCH JMS I SYMTAB /AND PUT IN SYMBOL TABLE JMS I PROP DUMMY TAD L77 JMS I PRSYM JMS I PRINT DLOOP, JMS I PROP 6063 /PUT OUT A TAD* TAD L70 /GET THE FUNCTION NAME JMS I PRSYM /AND PRINT IT JMS I PRINT /PUT OUT A CRLF JMS I PROP 6071 /PUT OUT A DCA TAD L77 /GET ADDRESS OF SYMBOL JMS I PRSYM /PRINT IT TAD WHICH /GET THE WHICH SWITCH RAR /GET THE LOW BIT INTO THE LINK SNL CLA /IS THE WHICH SWITCH BIT SWITCHED JMP NEXT /NO...THAT MEANS WERE ON THE FIRST WORD TAD E43 /YES...WERE ON SECOND WORD...GET A "#" JMS I PRINT /PRINT IT NEXT, JMS I PRINT JMS I PROP /PUT OUT AN INC (ISZ WHICH DOES NOT SKIP) 6237 TAD L70 /GET THE FUNCTION NAME JMS I PRSYM /AND PRINT IT TAD E43 JMS I PRINT JMS I PRINT /PUT OUT A CRLF ISZ WHICH /INCREMENT THE SHICH SWITCH TAD WHICH /GET THE SWITCH RAR /GET LOW BIT IN THE LINK SZL CLA /IS THE LOW BIT ON JMP DLOOP /YES...WORK ON THE SECOND WORD JMP MORE /GO GET SOME MORE READY, 0 SUBB, 0 JMS I ENTITY SKP JMP I SUBB E43, 43 TEN, 10 JMP ERR48 WHICH, 0 C6275, 6275 /SUBROUTINE OR FUNCTION NAME POINTER CKCR, ISZ READY ERR48, JMS I LUNCH JMP START IOEQL, CLA CMA /ROUTINE TO TERMINATE IMPLIED DO LOOPS TAD IMPDO DCA IMPDO /REDUCE THE DEPTH BY 1 JMS I DONEXT /GENERATE END-OF-LOOP CODE JMS I GNB TAD CM51 SZA CLA /SKIP TO A RIGHT PAREN JMP .-3 JMP I .+1 IOH0 DONEXT, LDNEXT *6172 C6030, 6030 LWRIT, JMS I LOOK /LOOK FOR REST OF STATEMENT -1 -5 TAD C3 LREAD, TAD C6030 /GET THE POINTER TO READ AND WRITE DCA IOP /USE AS A PARAMETER WITH FPROP JMS I GNB TAD CM50 SZA CLA /IS THIS A LEFT PAREN? JMP I ASSIGN JMS SUBA JMS I ZZZ TAD C2 JMS I FPROP IOP, 0 JMS I ARG TAD L32 JMS I PRSYM JMS I PRINT JMS I ARG JMS I GNB TAD CM54 /IS IT A COMMA SZA CLA JMP ERR50 /NO, ERROR ... JMS SUBA TAD L32 /GET FORMAT SMA JMS I PLAB SPA JMS I PRSYM JMS I GNB TAD CM51 /CHECK FOR A RIGHT PAREN SZA CLA /IS IT? ERR50, JMS I LUNCH JMS I PRINT IOH0, JMS I GNB SNA JMP IOH2 TAD CM54 SNA CLA /IS IT A COMMA JMP IOH3 /YES ... IOH1, JMS I PUTCH /NO...PUT IT BACK JMS I GNB /THIS STMT IS TRANSFERRED TO! TAD CM50 SNA CLA JMP I IOPEN /OPEN PAREN - MAY BE IMPLIED DO-LOOP IOH1BK, JMS I PUTCH DCA L52 /SET SWITCHES FOR GENER DCA L46 ISZ L44 JMS I GENER /START PROCESSING THE IO LIST TAD L41 DCA L42 TAD L53 DCA L73 /SAVE CREATED LABEL LOC DCA L23 /ZERO TEMPORARY FOR "DUMARG" JMS I LCHNG /TEST FOR 0 OR DUMMY ARG DCA I L41 TAD L23 /GET TEMPORARY FROM "DUMARG" SZA CLA /ZERO MEANS NON-VARIABLE NAME TAD I L23 /NON-ZERO POINTS TO FLAG WORD OF VAR AND Q20 SNA CLA /DO WE HAVE AN ARRAY NAME? JMP NOSYMB /NO JMS I PROP OPCMA /PUT OUT A "CMA" TO DISTINGUISH THIS CALL JMS I PRINT /FROM A REGULAR CALL TO "IOH" TAD C2 JMS I FPROP 6036 /OUTPUT A "CALL 2,IOH" JMS I ARG TAD L23 TAD CM2 JMS I DIM /GET THE DIMENSIONS DCA IOP TAD I L14 CIA DCA L44 TAD L23 TAD CM2 JMS I MODE /GET THE MODE OF THE ARRAY TAD C4000 /FLOATING POINT - ADD 4000 TO AC TAD IOP ISZ L44 JMP .-2 /COMPUTE PRODUCT OF DIMENSIONS PLUS MODE BIT JMS I PROTAC /PRINT IT JMS I PRINT JMP IOHRSM /GO PRINT ARRAY NAME NOSYMB, TAD L46 SZA CLA JMS I STORE IAC /THERE WILL BE ONE ARGUMENT JMS I FPROP /PUT OUT THE CALL TO IOH 6036 IOHRSM, TAD L73 DCA L53 /RESTORE CREATED LABEL LOC TAD I L41 JMS I QSYMOT TAD L63 /GET TERMINATING CHAR SNA CLA /WAS IT A <CR>? JMP IOH2 /YES IOH3, JMS I GNB /GENTLY LOOK AHEAD ... SNA CLA /DO WE HAVE A ',<CR>' ? JMP START /YES, DO NOT TERMINATE YET ... JMP IOH1 /NO, PUSH IT BACK & PROCESS NEXT ITEM IOH2, IAC /THERE WILL BE ONE ARGUMENT JMS I FPROP /PUT OUT A CALL TO IOH 6036 JMS I ARG /PUT OUT THE PSEUDO OP ARG JMS I PROTAC JMS I PRINT JMP START SUBA, 0 JMS I ENTITY JMP ERR51 /ITS A CR JMP ERR51+1 /ITS A VARIABLE JMP I SUBA Q20, 20 ERR51, JMS I LUNCH DCA L21 /ZERO THE SYMBOL TABLE SWITCH JMS I SYMTAB TAD L77 JMS I MODE JMP ERR51 TAD L77 DCA L32 TAD L32 JMS I DUMARG JMP ERR51 JMP I SUBA IOPEN, IOOPEN QSYMOT, SYMOUT *6400 LRET, JMS I LOOK /CHECK REST OF STATEMENT -2 -22 -16 JMS I ZZZ TAD L70 SNA CLA /ARE WE COMPILING MAIN PROGRAM? ERR60, JMS I LUNCH /YES TAD L67 SNA CLA JMP INT /ITS A SUBROUTINE TAD L70 /GET HE NAME OF THE FUNCTION JMS I MODE /IS IT FP OR INTEGER JMP .+4 /ITS FP JMS I PROP 6066 /OPCODE IS TAD JMP .+5 /PUT OUT THE SYMBOL IAC /THERE IS ONE ARGUMENT JMS I FPROP 6003 JMS I ARG TAD F34 /GET A BACK SLASH JMS I PRINT TAD L70 /GET THE NAME OF THE FUNCTION JMS I PRSYM /PRINT THE NAME JMS I PRINT /PUT OUT A CRLF INT, JMS I PROP 6077 /OPCODE IS RTN TAD L70 /GET THE FUNCTION NAME JMS I PRSYM /PRINT IT JMS I PRINT /PUT OUT A CRLF JMP START /WERE DONE LGETHI, 0 /PUNCH 'TAD ACH' JMS I PROP 6066 JMS I PROP /PRINT THE OP CODE 6226 /WHICH IS ACH (HIGH ORDER AC) JMS I PRINT JMS I FPROP /PUNCH 'CALL 0,CLEAR' 6204 JMP I LGETHI LDIM, 0 /GETS THE 1ST DIMENSION OF THIS VARIABLE DCA LGETHI /SYMBOL TABLE ADDRESS IS IN THE AC CMA TAD L50 DCA L14 LK, TAD I L14 /SEARCH THE DIMENSION TABLE CIA TAD LGETHI SNA CLA JMP .+4 ISZ L14 ISZ L14 JMP LK TAD I L14 /EXIT WITH DIMENSION IN THE AC JMP I LDIM / THIS PROCESSES SUBSCRIPTS SUBRET, JMP I LSUBSC /RETURN FROM SUBSC LSBTEM, 0 /THIS ROUTINE MAKES AN ENTRY DCA TRIP /IN SUBSCRIPT TEMPORARY TABLE TAD FBASE DCA POINT TAD CM40 DCA PCTR LOOP, TAD I POINT /LOOK FOR CURRENT TRIPLE NR SNA /OR END OF TABLE... JMP YES CIA TAD TRIP SNA CLA JMP GOT ISZ POINT ISZ PCTR JMP LOOP ERR53, JMS I LUNCH YES, TAD TRIP DCA I POINT GOT, TAD FBASE CIA TAD POINT DCA POINT TAD POINT CIA TAD L25 SPA CLA /IF TEMPORARY NR > L25 ISZ L25 /BUMP L25 TAD POINT JMP I LSBTEM LWIPE, 0 /ZERO THE SUBSCRIPT TEMP. TABLE TAD FBASE DCA POINT TAD CM40 DCA PCTR LOOP2, DCA I POINT ISZ POINT ISZ PCTR JMP LOOP2 JMP I LWIPE LZER, 0 ISZ LZER /INCREMANT JMS I PROTAC /PUT OUT A ZERO JMP I LZER /AND REUTURN LCLAB, 0 SNA /IF NO LABEL IN AC, JMS I CREATE /CREATE A LABEL JMS I PRCRL /AND PRINT IT TAD C7240 /PUT OUT A COLON AND SPACE JMS I P2 JMP I LCLAB /RETURN FBASE, 4600 POINT, 0 PCTR, 0 TRIP, 0 F34, 34 LSUBSC, 0 TAD L46 SZA /IS THERE ANYTHING IN THE AC? CHANGE, SKP CLA /******************************** / TRY CHANGING THIS LOCATION TO A "JMS I MODE" / TO LIMIT THE CHECK TO THE INTEGER AC! / COULD SAVE UP TO 30% IN HEAVILY SUBSCRIPTED F.P. / EXPRESSIONS! (IMPORTANT - TEST WITH F.P. SUBSCRIPTS) SKP /NOTHING IN THE AC JMS I STORE /YES - STORE IT IAC DCA L63 TAD L53 DCA L73 TAD L41 DCA L42 ISZ L41 TAD I L41 TAD CM4046 SNA CLA /WAS IT A PRIME JMP BACK JMS I LCHNG DCA L63 ISZ L41 ISZ L41 ISZ L42 ISZ L42 IAC BACK, ISZ L41 DCA SYMOUT JMS CHNG DCA L65 ISZ L42 ISZ L42 JMS CHNG DCA LDUM /SAVE ARRAY POINTER (OR 0 IF DUMMY) TAD L73 /NOW RESTORE THE CREATED LABEL LOC DCA L53 TAD SYMOUT SNA CLA /HOW MANY SUBSCRIPTS? JMP .+7 /ONE - SKIP OUTPUTTING "TAD" JMS I PROP 6066 TAD I L41 JMS I DIM JMS I PRSYM JMS I PRINT TAD I L41 JMS I MODE JMP FP CASUB, TAD H200 TAD L40 DCA I L41 /STORE TRIPLE NUMBER WITH MODE BITS IN PD STACK TAD SYMOUT /GET NUMBER OF ARGUMENTS (2 OR 3) TAD C2 JMS I FPROP /PUT OUT A CALL TO THE SUBSCRIPTING ROUTINE 6173 /TO THE SUBSCRIPTING ROUTINE TAD SYMOUT SNA CLA /ONLY ONE ARG? JMP .+3 /YES - DON'T OUTPUT FIRST SUBSCRIPT TAD L63 JMS SYMOUT TAD L65 JMS SYMOUT TAD LDUM /GET THE ARRAY NAME JMS SYMOUT /OUTPUT IT AS AN ARGUMENT TAD I L41 JMS I PRSYM /OUTPUT THE DESTINATION TEMPORARY JMS I PRINT TAD I L41 DCA L12 /MARK IT AS THE CONTENTS OF THE LAST LINE JMP I FSUBSC /RETURN FP, JMS I PROP OPCMA /OPCODE IS CMA JMS I PRINT TAD H400 /SET MODE TO FLOATING POINT JMP CASUB SYMOUT, 0 DCA CHNG TAD CHNG SNA CLA JMS I CLAB /CREATE LABEL IF DUMMY ARG JMS I ARG TAD CHNG SNA /IS IT ZERO JMS I ZER /YES PUT OUT A ZERO JMS I PRSYM /OTHERWISE PUT OUT SUBSCRIPT JMS I PRINT /PUT OUT A CRLF JMP I SYMOUT LDSPCL, DCA L24 JMS I CREATE JMS I PRCRL /CHANGE LAST LINE TO STORE IN NEW DESTINATION DCA L12 /MARK LAST LINE USELESS FOR OPTOMIZATION JMP LDMRET LDUM, 0 ISZ LDUM /INCREMENT RETURN TAD I L42 /GET THE THING WHICH IS DUMMY CIA TAD L12 /DID WE JUST PUT THIS OUT AS A SUBSCRIPT SNA CLA /DESTINATION?? JMP LDSPCL /YES - SAVE OODLES OF CODE JMS I PROP 6066 /PUT OUT A TAD TAD I L42 JMS I PRSYM /PUT IT OUT JMS I PRINT /PUT OUT A CRLF JMS I PROP 6071 /PUT OUT A DCA JMS I CREATE /CREATE A LABEL JMS I PRCRL /AND PRINT IT JMS I PRINT /PUT OUT A CRLF JMS I PROP 6066 TAD I L42 JMS I PRSYM TAD H43 JMS I PRINT JMS I PRINT JMS I PROP 6071 TAD L53 JMS I PRCRL TAD H43 JMS I PRINT LDMRET, JMS I PRINT JMP I LDUM /RETURN CHNG, 0 TAD I L42 /NO...THERES TWO SUBSCRIPTS SNA TAD H6041 DCA I L42 TAD I L42 JMS I DUMARG /SEE IF SECOND SUBSC IS A DUMMY ARG JMS I DUM /YES IT IS A DUMMY ARG TAD I L42 /GET THE SECOND SUBSC JMP I CHNG H400, 400 H200, 200 H43, 43 FSUBSC, SUBRET H6041, 6041 *7000 IOHTMP,MCHAR, 0 NPOINT,LLUNCH, 0 CLA DCA L75 DCA L24 /ZERO "BUFFER WAITING TO PRINT" FLAG DCA IMPDO /ZERO IMPLIED DO LOOP FLAG TAD TTYPE /CHANGE TO TTY OUTPUT DCA PUNCH JMS I LLIST /TYPE THE CURRENT LINE CLL CMA RAL TAD KOUNT /USE THE BUFFER POINTER AS AN INDEX SMA CMA DCA L7 TAD C40 /NOW PUT OUT SOME SPACES... JMS I PRINT ISZ L7 JMP .-3 TAD D36 /AND AN '^' JMS I PRINT JMS I PRINT TAD LELIST /NOW TYPE THE ERROR MESSAGE DCA L10 UNCH1, TAD I L10 SZA /END OF TABLE? TAD LLUNCH SNA CLA /IS THIS THE MSG WE WANT? JMP UNCH2 ISZ L10 /NO JMP UNCH1 UNCH2, TAD BASE CIA TAD I L10 JMS I LLIST /FAKE LISTER INTO PRINTING ERROR MESG JMS I PRINT /FORCE BUFFER TAD EPNCH /BACK TO PUNCH OUTPUT DCA PUNCH ISZ L75 /SET THE NON-PRINT SWITCH TAD CHK /IF ERROR OCCURED WHILE PROCESSING END STMT. TAD C4000 /CHK WILL BE 4000-WANT TO ABORT IMMEDIATELY SZA CLA /WAS IT END STMT? JMP START /NO-GO PROCESS NEXT STMT. JMP I (THRU /YES-CLEAN UP AND ABORT LLIST, LIST D36, 36 LELIST, ELIST-1 /ERROR LIST ... TTYPE, LTTYPE EPNCH, LPUNCH CTR, 0 TEM, 0 / THIS ROUTINE PRINTS THE CONTENTS OF THE AC IN DECIMAL PARCT,LDCOUT, 0 DCA TEM /SAVE THE AC TAD CM3 /WE WILL PUT OUT FOUR CHARACTERS DCA CTR TAD ASE /THIS IS THE ASE OF THE CONVERSION TABLE DCA NPOINT /SAVE IT IN THE POINTER DCA FLAG LOP, DCA MCHAR /ZERO OUT THE CHARACTER TAD TEM /GET THE NUMBER AGAIN TAD I NPOINT /TO GET THE ITEM IN THE TABLE SPA /IS THE RESULT POSITIVE JMP LOPRST /NO...RESTORE THE NUMBER DCA TEM /AND SAVE THIS VALUE TAD D60 DCA FLAG /SET FLAG TO SHOW THAT WE HAVE SOMETHING ISZ MCHAR /YES...INCREMENT THE OUTPUT CHARACTER JMP LOP+1 /TRY THE SEQUENCE AGAIN LOPRST, CLA TAD MCHAR TAD FLAG SZA /DO WE HAVE A SIGNIFICANT DIGIT? JMS I PRINT /YES - PRINT IT ISZ NPOINT ISZ CTR JMP LOP /AND GET THE NEXT DIGIT TAD TEM /GET THE CHARACTER TO OUTPUT TAD D60 /PUT IT IN TRIMMED ASCII FORM JMS I PRINT /PRINT IT JMP I LDCOUT /YES...RETURN TO CALLING PROGRAM ASE, THOU FLAG, 0 IOOPEN, TAD KOUNT DCA IOHTMP /SAVE POINTER TO LEFT PAREN +1 CLA CMA DCA PARCT /INITIALIZE PAREN COUNTER TAD KOUNT DCA TEM /TEM POINTS TO ENTITY (OR PREV ONE IF A VAR) IOPENL, JMS I ENTITY /GET SOMETHING ERR52, JMS I LUNCH /END OF STMT - BAD JMP IOPENL /VARIABLE - DON'T UPDATE TEM D60, 60 JMP IOPENL-2 /CONSTANT - UPDATE TEM TAD CM51 /PUNCTUATION - TEST FOR RIGHT PAREN SNA JMP IORPAR /YES IAC SNA /LEFT PAREN? JMP IOLPAR TAD CM25 SNA CLA /IF CHAR IS AN EQUAL SIGL TAD PARCT IAC SZA CLA /AND WE ARE ON THE TOP LEVEL OF PARENTHESES JMP IOPENL-2 TAD TEM /THEN WE HAVE AN IMPLIED DO DCA KOUNT JMS I DO /GENERATE DO LOOP CODE JMP ERR52 /NOT TERMINATED WITH RPAR - ERROR ISZ IMPDO /BUMP IMPLIED DO COUNT TAD IOHTMP DCA KOUNT /RESTORE CHAR PTR TO BEGINNING OF LOOP JMP I .+1 IOH1+1 /COMPILE INNARDS OF LOOP IOLPAR, CLA CMA TAD PARCT JMP IOPENL-3 /BUMP PAREN COUNT UP AND LOOP IORPAR, ISZ PARCT /BUMP PAREN COUNT DOWN JMP IOPENL-2 /LOOP IF NOT BALANCED TAD IOHTMP DCA KOUNT /BALANCED - NOT AN IMPLIED DO JMP I .+1 IOH1BK /COMPILE NORMALLY CM25, -25 DO, XDO *7200 EQUI, JMS I LOOK /CHECK REST OF STATEMENT TYPE -7 /THERE ARE 7 MORE CHARACTERS -26 /V -1 /-A -14 /-L -5 /-E -16 /-N -3 /-C -5 /-E RETA, ISZ SNUM /INCREMENT THE STRING NUMBER JMS CCCC /GET AND CHECK THE NEXT NON-BLANK CHARACTER SKP /ONLY LEGAL CHAR HERE IS A "(" JMP RETB /WE GOT THE "(" NOP JMP ERR59 RETB, JMS I ENTITY /LOOK FOR A VARIABLE SKP JMP LA /GOT IT, ANYTHING ELSE IS AN ERROR NOP NOP JMP ERR59 LA, ISZ L32 /TURN EQUIVALENCE BIT ON ISZ L32 TAD K57 /GET MASK FOR SYMBOL TABLE DCA L21 /PUT IN THE SYMBOL TABLE SWITCH JMS I SYMTAB /PUT IN SYMBOL TABLE TAD L77 /GET THE POINTER ISZ MIKE4 /AND PUT IN EQUIVALENCE TABLE DCA I MIKE4 TAD SNUM /GET THE CURRENT STRING NUMBER ISZ MIKE4 /AND PUT IT IN THE EQUIVALENCE TABLE DCA I MIKE4 ISZ MIKE8 /INCREMENT NUMBER OF ENTRIES JMS CCCC /GET NEXT PUNCTUATION JMP ERR59 /C/R, THAT'S AN ERROR ... JMP .+3 /LEFT PAREN, VARIABLE IS SUBSCRIPTED JMP LB /COMMA, NOT SUBSCRIPTED, STRING CONTINUES JMP LC /RIGHT PAREN, NOT SUBSCRIPTED, END OF STRING JMS I ENTITY /LOOK FOR SUBSCRIPT NOP SKP JMP LD /GOT IT, ANYTHING ELSE IS ERROR NOP JMP ERR59 LD, CLA CMA /SUBTRACT ONE FROM TAD L32 /FIRST SUBSCRIPT DCA INTA /AND SAVE JMS CCCC /GET NEXT PUNCTUATION NOP /CR IS ILLEGAL HERE JMP RETB-1 /SO IS LEFT PAREN SKP /COMMA, DOUBLY SUBSCRIPTED JMP LF /RIGHT PAREN, SINGLY SUBSCRIPTED JMS I ENTITY /GET OTHER SUBSCRIPT NOP SKP JMP LG /GOT IT NOP JMP LD-1 LG, TAD L32 /SET IT NEGATIVE CIA DCA INTB /AND SAVE IT JMS CCCC /GET NEXT PUNCTUATION NOP NOP ERR59, JMS I LUNCH TAD L77 /RIGHT PAREN IS ONLY LEGAL CHARACTER JMS I DIM /GET DIMENSION INFORMATION DCA CCCC /AND SAVE SKP /GO TO TEST PART OF LOOP TAD CCCC /THIS LOOP IS A MAKESHIFT MULTIPLY ISZ INTB /ARE WE DONE JMP .-2 /NO TAD INTA /YES, ADD FIRST SUBSCRIPT DCA INTA /AND SAVE LF, TAD L77 /GET POINTER TO VARIABLE JMS I MODE /WHAT MODE IS IT TAD INTA /F.P., MULTIPLY BY THREE RAL CLL /INTEGER TAD INTA IAC /ADD ONE TO ANSWER ISZ MIKE4 /AND PUT IN EQUIVALENCE TABLE DCA I MIKE4 JMS CCCC /GET NEXT PUNCTUATION NOP JMP RETB-1 /CR AND "(" ARE ILLEGAL HERE JMP RETB /COMMA MEANS STRING NOT FINISHED JMP LI /")" MEANS STRING FINISHED LC, CLA IAC /HERE WE CRAM A ONE INTO EQUIVALENCE ISZ MIKE4 DCA I MIKE4 LI, JMS CCCC /WE FINISHED A STRING, ARE THERE MORE JMP START /NO SKP JMP RETA /YES JMP RETB-1 /"(" AND ")" ARE ILLEGAL HERE LB, CLA IAC /CRAM A ONE INTO TABLE ISZ MIKE4 DCA I MIKE4 JMP RETB /AND GO BACK / / THIS"ROUTINE GETS AND CHECKS THE NEXT NON-BLANK CHAR / CCCC, 0 JMS I GNB SNA /PUNCTUATION IS WHAT WE WANT JMP I CCCC /ITS A CR TAD CM54 SNA /IS IT A COMMA JMP XCOMMA /YES TAD C3 SNA /IS IT A ")" JMP XRPAR /YES IAC SNA /IS IT A "(" JMP XLPAR /YES JMP RETB-1 /NONE OF THE ABOVE XRPAR, ISZ CCCC XCOMMA, ISZ CCCC XLPAR, ISZ CCCC JMP I CCCC K57, 57 LFIN, JMS I GNB SZA CLA JMP I ASSIGN JMS I ZZZ /PRINT LABEL ON "FINI" JMP I .+1 IOH2 /THE FOLLOWING CODE IS TO PROCESS THE EQUIVALENCE TABLE /AT THE END OF A COMPILATION *7376 EEK, ISZ MIKE4 ISZ MIKE4 DCA I MIKE4 /SET END OF LIST JMS INIT /INITIALIZE POINTERS AAB, TAD MA /SET POINTERS TO STRING NUMBERS TAD C3 DCA MB ISZ MA ISZ MA AAC, ISZ MB AA, ISZ MB TAD I MA /GET FIRST STRING NUMBER CIA TAD I MB /SUBTRACT FROM SECOND SZA CLA /ARE THEY THE SAME JMP KICK1 /NO, ADVANCE POINTERS ISZ MA /YES, MOVE TO LINEAR SUBSCRIPT ISZ MB TAD I MA /GET FIRST SUBSC CIA TAD I MB /SUBTRACT FROM SECOND SPA CLA SNA /IS FIRST ONE SMALLER JMP KICK2 /NO, JUST ADVANCE POINTERS TAD MA /YES, SWITCH PLACES TAD CM2 DCA MA TAD MB TAD CM2 DCA MB TAD CM3 DCA INIT RAUCH, TAD I MA DCA L76 TAD I MB DCA I MA TAD L76 DCA I MB ISZ MA ISZ MB ISZ INIT JMP RAUCH TAD MA TAD CM2 DCA MA JMP AA /NOW THEYRE SWITCHED, CHECK AGAIN KICK2, CLA CMA /MOVE BACK FIRST POINTER TAD MA DCA MA JMP AAC KICK1, ISZ MA /MOVE UP FIRST POINTER ISZ MIKE7 /ARE WE OUT OF ENTRIES JMP AAB /NO / / NOW THE SORTING IS DONE / JMS INIT /INITIALIZE POINTERS DCA TOTAL /ZERO OUT TOTAL MIKE2, ISZ MA TAD I MA JMS I PRSYM /PUT OUT THE SYMBOL TAD C7240 JMS I P2 /PUT OUT THE TERMINATOR IAC TAD I MA DCA L14 TAD I L14 /GET CONTROL BITS FROM SYMBOL TABLE AND P20 SNA CLA /IS IT DIMENSIONED JMP MIKE5 /NO TAD I MA /YES, COMPUTE THE TOTAL LENGTH JMS I DIM DCA L26 TAD I L14 CIA DCA L73 TAD L26 ISZ L73 JMP .-2 SKP /GOT IT MIKE5, IAC /IF NOT DIMENSIONED, USE ONE A LENGTH DCA MB /SAVE LENGTH TAD I MA JMS I MODE /WHAT IS THE MODE OF THE SYMBOL TAD MB /FP, MULTIPLY BY THREE RAL CLL TAD MB DCA INIT /SAVE IT TAD TOTAL /GET TOTAL REMAINING LENGTH OF STRING CIA TAD INIT /SUBTRACT CURRENT LENGTH FROM IT SPA CLA /WHICH IS BIGGER JMP .+3 /REMAINING PORTION IS BIGGER TAD INIT /CURRENT PORTION IS BIGGER, REPLACE REMAINING PORTION DCA TOTAL ISZ MA TAD MA TAD C3 DCA MB TAD I MB /GET NEXT ENTRY STRING NUMBER CIA TAD I MA /SUBTRACT CURRENT STRING NUMBER SZA CLA /ARE THEY EQUAL JMP MIKE1 /NO ISZ MA /YES, GET THE DIFFERENCE ISZ MB TAD I MB CIA TAD I MA DCA MB /AND SAVE TAD MB /SUBTRACT DIFFERENCE FROM TOTAL REMAINING CIA TAD TOTAL MIKE6, DCA TOTAL /SAVE TAD MB /GET THE DIFFERENCE DCA L26 JMS I BSS /RESERVE THAT MANY LOCATIONS ISZ MIKE7 /ARE WE DONE JMP MIKE2 /NO JMP I ROGER /YES MIKE1, TAD TOTAL /SWITCH TOTAL TO THE CURRENT LOCATION DCA MB ISZ MA /EQUALIZE POINTERS JMP MIKE6 / INIT, 0 TAD MIKE8 /GET ENTRY COUNT CIA /SET NEGATIVE DCA MIKE7 /SAVE TAD POINTZ /GET TABLE POINTER DCA MA /SAVE JMP I INIT / ROGER, PTEMP P20, 20 $ |
Added src/os8/uni/LANGUAGE/FORTRAN2/FPATCH.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 | /OS8 FORTRAN II COMPILER OVERLAY V5 ***FPATCH.05*** / / / / / / / // / / / / /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. / / / / / / / /FIXES TO FPATCH FOR V4 J.K. 1975 / / .CHANGED USE OF 17645 SO /N CAN BE PASSED TO LOADER / BIT 0 OF 17645 INDICATES THAT SABR WAS CHAINED / TO FORM FORT INSTEAD OF WHOLE WORD / / .VERSION NUMBER VIA /V--OPTION / WILL BE PASSED ONTO SABR / / / FIELD 0 JSBITS=7746 MOFILE=7600 MPARAM=7643 LLUNCH=7001 /TAKE OUT WHEN MERGING WITH COMPILER DO=7173 /" ELIST=1162 /" EMSG1=1270 /" EMSG14=1520 /" FLST=242 /" FORST=5362 /" FPROP=144 /" GOOON=5455 /" KOUNT=113 /" LPTRIN=545 /" LPUNCH=5333 /" LTTYPE=3372 /" L75=75 /" OSTOP=4052 /" XFINI=5354 /" *200 START, CLA CMA DCA FCHFLG CIF 10 JMS I (7700 10 /ESCAPE ISZ FCHFLG JMP .+5 CIF 10 JMS I (200 5 /COMMAND DECODE 0624 /.FT ASSUMED EXTENSION CDF 10 TAD I (MPARAM+1 CDF 0 AND (4 SZA CLA JMS VERNUM CLA IAC CIF 10 JMS I (200 4 /CLOSE OPERATOR USED AS DELETE OUSNAME /DELETE FORTRN.TM IF IT EXISTS 0 CLA /IT DIDN'T EXIST CLA IAC /ENTER A FILE ON "SYS" - MAXIMUM SIZE CIF 10 JMS I (200 3 /ENTER OUSREC, OUSNAME HOLSIZ, 0 JMP I (OUERR /WHATS GOING ON HERE? CLA IAC /DEVICE "SYS" CIF 10 JMS I (200 2 PTSABR, SABR FCHFLG, 0 /USELESS LENGTH WORD JMP I (BIGGIE TAD PTSABR DCA I (CLSABR TAD OUSREC DCA I (OUTREC TAD HOLSIZ DCA I (OURCNT TAD (1000 TAD I (JSBITS DCA I (JSBITS /SET "UNSTARTABLE" STATUS BIT JMS I (FNEWF /INITIALIZE FIRST INPUT FILE WHILE I/O MON IS IN CORE CDF 10 TAD OUSREC DCA I (7620 CLA IAC DCA I (7617 CLA CLL CML RTL AND I (MPARAM TAD I (MOFILE+5 SNA CLA DCA I (FLST TAD I (7600 SNA CLA TAD I (MPARAM AND (41 SNA CLA /DID HE SPECIFY A "L" OR "G" OPTION WITHOUT A JMP FCDF0-3 /RELOCATABLE OUTPUT FILE? FTADNM, TAD BDFALT /YES - GIVE HIM ONE DCA I B7600 /NAMED "FORTRL.TM" ISZ FTADNM ISZ B7600 ISZ B7773 JMP FTADNM CLA CLL CML RAR TAD I (7645 DCA I (7645 /SABR IT WAS CHAINED TO BY FORT FCDF0, CDF 0 JMP I (1003 /START COMPILATION BDFALT, 1 /DEVICE "SYS" TEXT /FORTRLTM/ B7600, 7600 B7773, 7773 / VERNUM, 0 TAD I POINT CDF CIF 10 JMS I VPRINT ISZ POINT ISZ COUNT JMP .-5 JMP I VERNUM / POINT, VERN COUNT, -12 VERN, 306 317 322 324 240 326 265 301 215 212 / VPRINT, VERPRT /ADDITIONS TO FORTRAN ERROR MESSAGES *ELIST+1 NUMSG1 *EMSG1-2 -ERR61-1; EMSG15 -ERR62-1; EMSG16 -ERR63-1; EMSG17 -ERR64-1; EMSG20 0 ; EMSG14 /DUMMY PAGES TO CONSOLIDATE CORE IMAGE *1600 0 *2000 0 *2400 0 *3000 0 *5600 0 *5400 FNEWF, 0 CDF 10 TAD I FILPTR SNA JMP EOFERR /END OF INPUT REACHED BEFORE END STATEMENT DCA INWCNT TAD I FILPTR AND (7760 SZA TAD (17 CLL CML RTR RTR DCA INRCNT ISZ FILPTR TAD I FILPTR DCA INREC ISZ FILPTR TAD (5001 /FORTRAN ALLOWS TWO-PAGE HANDLERS DCA INHNDL TAD INWCNT CDF 0 CIF 10 JMS I (200 1 /ASSIGN AND FETCH HANDLER INHNDL, 5000 /LOCATIONS 5000-5377 ARE FREE JMP IOERR /SOMETHINGS SCREWY CLA CMA DCA INWCNT DCA INEOF JMS MOUCOR JMP I FNEWF FILPTR, 7617 GETCH, 0 KSF JMP .+5 KRS TAD (-203 SNA CLA JMP I (7600 ISZ JMPGET ISZ INWCNT JMPG, JMP JMPGET TAD INEOF SNA CLA JMP JUSTRD GETNXT, CIF 10 JMS I G7700 10 /ESCAPE JMS FNEWF JUSTRD, JMS I INHNDL /INHNDL CONTAINS LOCN OF DEVICE HANDLER 0200 /READ 2 HALF-RECORDS INTO FIELD 0 INBFPT, INBUF INREC, 0 JMP RERROR ISZ INREC ISZ INRCNT SKP ENDFIL, ISZ INEOF TAD (-601 DCA INWCNT TAD JMPG DCA JMPGET TAD INBFPT DCA INPTR JMP GETCH+1 JMPGET, JMP . JMP INCHR1 JMP INCHR2 INCHR3, TAD JMPG DCA JMPGET TAD I INPTR AND (7400 CLL RTR RTR TAD INTMP RTR RTR ISZ INPTR JMP GCHCOM INCHR2, TAD I INPTR AND (7400 DCA INTMP ISZ INPTR INCHR1, TAD I INPTR GCHCOM, AND (377 TAD (-232 SNA JMP GETNXT TAD (232 CIF 10 ISZ GETCH JMP I GETCH RERROR, SMA CLA G7700=RERROR JMP ENDFIL IOERR, JMS I (SFATAL CIF 10 ERR62, JMS I (LLUNCH INPTR, 0 INWCNT, 0 INTMP, 0 INRCNT, 0 INEOF, 0 EOFERR, JMS MOUCOR /KICK MONITOR OUT JMS I (SFATAL CIF 10 ERR61, JMS I (LLUNCH MOUCOR, 0 CDF 0 CIF 10 JMS I (200 11 JMP I MOUCOR *3200 P377, 377 P7400, 7400 /WARNING ***DO NOT MOVE THIS*** PUTCH, 0 DCA PUTMP RAL DCA PUTLNK PUTCHX, ISZ JMPPUT ISZ OUWDCT JMPP, JMP JMPPUT CLA CLL CML RTL TAD OURCNT SZL JMP OUERR+1 DCA OURCNT ISZ CLOSCT ISZ CLOSCT JMS I (7607 4400 OUBFPT, OUBUF OUTREC, 0 JMP I (IOERR ISZ OUTREC ISZ OUTREC TAD (-1401 DCA OUWDCT TAD OUBFPT DCA OUPTR TAD JMPP DCA JMPPUT JMP PUTCHX JMPPUT, JMP . JMP PUTCH1 JMP PUTCH2 PUTCH3, TAD PUTMP RTL RTL DCA PUTMP TAD JMPP DCA JMPPUT TAD PUTMP AND P7400 TAD I OUPOLD DCA I OUPOLD TAD PUTMP RTL RTL P201, AND P7400 TAD I OUPTR DCA I OUPTR ISZ OUPTR JMP PCHCOM PUTCH2, TAD OUPTR DCA OUPOLD ISZ OUPTR PUTCH1, TAD PUTMP P200, AND P377 DCA I OUPTR PCHCOM, CIF 10 TAD PUTLNK CLL RAR JMP I PUTCH EOFORT, SZA CLA /ANY ERRORS? JMP I SF7600 /YES, DO NOT ASSEMBLE DCA PCHCOM TAD (232 JMS PUTCH TAD OUWDCT TAD (1400 SZA CLA JMP .-5 /FILL BUFFER WITH ^Z TAD I (JSBITS RAR CLL CML RAL DCA I (JSBITS /NO NEED TO SAVE CORE ON THIS MONITOR CALL CIF 10 JMS I (7700 10 /ESCAPE CLA IAC /DEVICE "SYS" CIF 10 JMS I P200 4 /CLOSE OUSNAM CLOSCT, 0 /CLOSING LENGTH JMP OUERR-3 CIF 10 JMS I P200 6 /RUN CLSABR, 0 BIGGIE, JMS I (MOUCOR JMS SFATAL CIF 10 ERR63, JMS I (LLUNCH CLA CLL CMA RTL AND I (JSBITS DCA I (JSBITS /WHOOPS - GUESS WE SHOULD RESTORE CORE AFTER ALL OUERR, JMS I (MOUCOR JMS SFATAL CIF 10 ERR64, JMS I (LLUNCH INBUF=1600 OUBUF=3600 OURCNT, 0 OUPTR, OUBUF OUWDCT, -1401 PUTMP, 0 OUPOLD, 0 SFATAL, 0 PUTLNK=SFATAL SF7600, 7600 /CLEAR AC CDF 10 TAD SCDIF0 DCA I (177 TAD (5601 DCA I P200 TAD SF7600 DCA I P201 SCDIF0, CDF CIF 0 JMP I SFATAL *2200 /CANNOT GO PAST 2373 SABR, TEXT /SABR/ TEXT /SV/ OUSNAM, TEXT /FORTRNTM/ NUMSG1, TEXT /ILLEGAL CONTINUATION/ EMSG15, TEXT /NO END STATEMENT/ EMSG16, TEXT #I/O ERROR# EMSG17, TEXT /SABR.SV NOT FOUND/ EMSG20, TEXT /NO ROOM FOR OUTPUT/ FIELD 1 /THESE ARE THE PATCHES OVER THE COMPILER. *FORST /HEADER PRINTER NOP NOP NOP *FORST+5 /LEADER OUTPUT CLA CLL CMA RTL /3 CHARACTERS OF LEADER *LPTRIN+1 /HIGH-SPEED READER ROUTINE CIF 0 JMS I .+1 GETCH *OSTOP+1 JMS I FPROP /PUNCH 'CALL 0,EXIT' 6253 JMP I OSTOP *LPUNCH+1 /PUNCH ROUTINE CIF 0 JMS I .+2 CLA SKP PUTCH *XFINI-3 /TRAILER PRINTER CLA CLL CMA RTL /3 CHARACTERS OF TRAILER *XFINI-1 /ENDING SEQUENCE CDF CIF 0 TAD L75 /PICK UP ERROR FLAG JMP I .+1 EOFORT *GOOON+4 /TRAILER AFTER "END" STATEMENT CLA CLL CMA RTL /3 CHARS ETC. *LTTYPE+1 /REVERSE TTY WAIT MODE TLS TSF JMP .-1 / *4753 VERPRT, 0 JMS I VPUNCH CDF CIF 0 JMP I VERPRT VPUNCH, 3372 / $ |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/ATAN.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | /ARCTANGENT ROUTINE OS8 FORTRAN II LIBRARY / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 11A / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS ENTRY ATAN ATAN, BLOCK 1 11 TAD ATAN DCA L4 TAD ATAN# DCA L4# INC ATAN# INC ATAN# CALL 1,IFAD L4, ARG 0 CLL TAD ACH SNA JMP EXIT SPA TAD (4000 DCA ACH /TAKE ABSVAL OF ARGUMENT RAR DCA SIGN /AND REMEMBER SIGN TAD ACH TAD (-2014 SPA CLA JMP LSTN45 /IF ARG>1, JMS INVRS /INVERT ARG - SUBTRACT RESULT FROM PI/2 CLA CMA LSTN45, DCA L4# /L4# IS THE "PI/2-RESULT" SWITCH TAD ACH TAD (-1774 /THIS IS AN APPROXIMATE TEST TO SEE SPA CLA /IF THE NEW ARG IS <2-SQRT(3) JMP LSTN15 /IF IT IS, CALL 1,FAD /PERFORM A "DIFFERENCE OF TANGENTS" ARG SQRT3 /TRANSFORMATION TO SUBTRACT PI/6 TAD (20 JMS INVRS /FROM THE RESULT. THE ARG IS TRANSFORMED CALL 0,CHS /INTO SQRT(3)-4/(ARG+SQRT(3)) CALL 1,FAD SQT3, ARG SQRT3 CLA CMA LSTN15, DCA INVRS /USE INVRS AS A SWITCH TO INDICATE THIS CALL 1,STO /TRANSFORMATION OCCURRED ARG T TAD (-4 DCA L4 TAD SQT3# DCA L3# ATLOOP, INC L3# /NOW PERFORM A STANDARD TAYLOR SERIES INC L3# /EXPANSION (WITH TRUNCATED COEFFICIENTS) INC L3# CALL 1,FAD /CONVERGENCE WILL BE GOOD SINCE WE L3, ARG SQRT3 /HAVE MADE THE ARGUMENT BE <.3 JMS FMPT JMS FMPT ISZ L4 JMP ATLOOP JMS FMPT CALL 1,FAD ARG T /FINISH UP THE SERIES ISZ INVRS JMP NOPI6 CALL 1,FAD /ADD PI/6 IF NECESSARY ARG PIOVR6 NOPI6, ISZ L4# JMP NOPI2 CALL 0,CHS /SUBTRACT FROM PI/2 IF NECESSARY CALL 1,FAD ARG PIOVR2 NOPI2, TAD SIGN TAD ACH /SET SIGN OF RESULT = SIGN OF ARGUMENT DCA ACH EXIT, RETRN ATAN INVRS, 0 /INVERSION SUBROUTINE TAD (2014 /ENTERED WITH AC=0 OR 20 DCA L4 /AC=0 MEANS 1/FAC, AC=20 MEANS 4/FAC CALL 1,STO ARG T TAD L4 DCA ACH /ACM AND ACL WERE CLEARED BY STORE CALL 1,FDV ARG T JMP I INVRS FMPT, 0 /SUBROUTINE TO MULTIPLY BY T CALL 1,FMP /SAVES A FEW MEASLY LOCATIONS ARG T JMP I FMPT SIGN, 0 /CELL FOR HOLDING SIGN OF ARG T, BLOCK 3 /FLOATING TEMPORARY PAGE PIOVR6, 2004;1405;2216 /PI/6 PIOVR2, 2016;2207;7325 SQRT3, 2016;7331;7272 /SQRT(3) /THE NEXT 4 NUMBERS MUST IMMEDIATELY FOLLOW SQRT3 1756;0462;4562 /APPROXIMATELY 1/9 5764;4221;3403 /APPROXIMATELY -1/7 1766;3141;6672 /APPROXIMATELY 1/5 5775;2525;2337 /APPROXIMATELY -1/3 END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/FLOAT.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 | / FLOATING POINT MATH PACKAGE / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 5A / APRIL 28, 1977 / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS / ENTRIES / ENTRY FAD ENTRY FSB ENTRY FMP ENTRY FDV ENTRY STO ENTRY FLOT ENTRY FLOAT ENTRY FIX ENTRY IFIX ENTRY IFAD ENTRY ISTO ENTRY ABS ENTRY CHS /THE FOLLOWING DEFINITIONS ENABLE LIBRARY OPTIMIZATIONS /WHERE CRITICAL TIMING CONSIDERATIONS EXIST. /THEY SHOULD BE USED WITH EXTREME CAUTION, AND MUST /REFERENCE CURRENT PAGE AND PAGE ZERO SYMBOLS ONLY. OPDEF TADI 1400 OPDEF DCAI 3400 OPDEF JMSI 4400 OPDEF JMPI 5400 SKPDF JMSKP 4000 / / ABSYM HAC 20 ABSYM MAC 21 ABSYM LAC 22 ABSYM SRH 23 ABSYM SRM 24 ABSYM SRL 25 ABSYM ACS 26 ABSYM ACX 27 ABSYM SRS 30 ABSYM SRX 31 ABSYM MQH 30 ABSYM MQM 31 ABSYM MQL 32 // ADDITION AND SUBTRACTION ROUTINE // LAP /LEAVE AUTO PAGING ADSRAD, ADSRAC /SOME INDIRECTS TO SAVE CORE... ARSAB, ARS GTSPLA, GTSPLT NORMAD, NORMAC COMAD, COM FSB, BLOCK 1 5 /FLOATING POINT SUBTRACT TAD FSB / CALL 1,FSB DCA FAD / ARG <F.P. VARIABLE> TAD FSB# DCA FAD# CLA CLL CML RAR JMP ED1 / ER1, FAD FAD, BLOCK 1 5 /FLOATING POINT ADD SUBROUTINE ED1, DCA FSB / CALL 1,FAD TAD FAD / ARG <VARIABLE> DCA FAD1 FAD1, NOP /CDF TO PICK UP ARGUMENT TADI FAD# INC FAD# DCA 7 CLA CMA TADI FAD# INC FAD# DCA 10 FADENT, TAD ER1 DCA ER0 TAD ACH /EXAMINE THE FLOATING AC SNA CLA JMP FADLD /IT'S ZERO, DO A LOAD... JMSI GTSPLA JMP FADEND TAD SRS TAD FSB DCA SRS TAD ACX SNA JMP SHFAC CIA TAD SRX SMA JMP SHFAC DCA FSB SHFSR, TAD SRH CLL RAR DCA SRH TAD SRM RAR DCA SRM TAD SRL RAR DCA SRL ISZ FSB JMP SHFSR JMP JD1 / SHFAC, CMA DCA FSB TAD SRX DCA ACX JMP ED3A ED3, JMSI ARSAB ED3A, ISZ FSB JMP ED3 / JD1, TAD ACS SMA CLA JMP ED4 CLA CLL CMA RTL / GENERATE -3 JMSI COMAD ED4, TAD SRS SPA CLA JMSI COMAD JMSI ADSRAD TAD HAC SMA CLA JMP ED5 CLA CLL CMA RTL JMSI COMAD CLA CLL CML RAR ED5, DCA ACS DCA RSW FADEND, JMSI NORMAD JMP FADEX FADLD, TAD 7 /FLOATING LOAD WHEN AC=0 DCA FADSB# JMS FADSB SZA /CHECK FOR 0.-0. DON'T GIVE -0. TAD FSB AND ABSSW DCA ACH JMS FADSB DCA ACM JMS FADSB DCA ACL FADEX, CLA CMA DCA ABSSW DCA FSB /FOR IFAD AFTER SUBTRACT CLA STL RTL /=0002 TAD FAD /HIGH SPEED RETURN DCA FAD3 FAD3, NOP JMPI FAD# ABSSW, 7777 /ABSOLUTE VALUE SWITCH FADSB, 0 /TIME SAVING SUBROUTINE NOP /CHANGED TO CDF TADI 10 JMPI FADSB / FLOATING POINT ABSOLUTE VALUE FUNCTION ABS, BLOCK 1 5 / CALL 1,ABS TAD ABS / ARG <F.P. VARIABLE> DCA FAD TAD ABS# DCA FAD# CLL STA RAR /=3777 DCA ABSSW JMP ED1 /GO INTO ADD ROUTINE... PAGE / ROUTINE TO GET OPERAND INTO SR, SEPARATE SIGNS AND / EXPONENTS OF AC AND SR, AND MOVE GLOBAL AC TO LOCAL AC. / GTSPLT, 0 TAD 7 DCA GTS1 GTS1, NOP TADI 10 /PICK UP HIGH ORDER WORD JMS SPLIT /MUST NOT CHANGE DATA FIELD**** DCA SRH TAD ACX SZA INC GTSPLT DCA SRX TAD ACS DCA SRS TADI 10 /PICK UP WORD 2 DCA SRM TADI 10 /PICK UP WORD 3 DCA SRL TAD ACH JMS SPLIT /EXPAND THE FLOATING AC... DCA HAC DCA RSW GTS2, TAD ACM /NEEDS LABEL TO FORCE CDF! DCA MAC TAD ACL DCA LAC JMPI GTSPLT / SPLIT, 0 /BREAK UP SIGN, EXPON, AND HI-ORD BITS DCA TMP /ROUTINE MUST NOT CHANGE DATA FIELD**** TAD TMP RAR RTR AND (377 DCA ACX CLA CLL CML RAR / = 4000 AND TMP DCA ACS TAD TMP AND (7 JMPI SPLIT TMP, 0 / / ALS, 0 /LOCAL AC SHIFT LEFT SUBROUTINE TAD LAC CLL RAL DCA LAC TAD MAC RAL DCA MAC TAD HAC RAL DCA HAC JMPI ALS / / ADD SR TO AC / ADSRAC, 0 /ADD LOCAL SR TO LOCAL AC CLL TAD LAC TAD SRL DCA LAC CLA RAL TAD MAC TAD SRM DCA MAC CLA RAL TAD HAC TAD SRH DCA HAC JMPI ADSRAC / / ROUTINE TO NORMALIZE AND RECOMBINE ACCUMULATOR, / AND PLACE LOCAL ACC. IN GLOBAL ACC. / ARSAD, ARS /SOME CORE SAVING INDIRECTS ERRAD, ERR RSW, 0 /ROUNDING BIT NORMAC, 0 /NORMALIZE AND PACKING SUBROUTINE ED6, TAD HAC TAD (7770 SPA CLA JMP RUND JMSI ARSAD ISZ ACX JMP ED6 / / ROUNDOFF ROUTINE / RUND, TAD RSW SNA CLA JMP LEFTST ISZ LAC JMP LEFTST ISZ MAC JMP LEFTST ISZ HAC DCA RSW JMP ED6 / LEFTST, TAD ACX SNA SPA JMP ZEROUT DCA ACX CLA CLL CMA RTL / = -3 TAD HAC SMA SZA CLA JMP COMBIN JMS ALS CLA CMA JMP LEFTST / COMBIN, TAD ACX CLL RAL RTL SPA JMPI ERRAD TAD HAC TAD ACS ED7, DCA ACH TAD MAC DCA ACM TAD LAC DCA ACL JMPI NORMAC ZEROUT, CLA DCA LAC DCA MAC JMP ED7 PAGE / / INDIRECT STORE / ISTO, BLOCK 1 5 /FLOATING POINT INDIRECT STORE TAD ISTO / CALL 1,ISTO DCA IST1 / ARG <2WORD ADDRESS> IST1, NOP TADI ISTO# INC ISTO# DCA IST2 TADI ISTO# DCA 7 TAD ISTO DCA STO TAD ISTO# DCA STO# IST2, NOP TADI 7 INC 7 DCA ISTO CLA CMA TADI 7 DCA 10 TAD ISTO DCA STOSB# JMP STOX / / / ROUTINE TO STORE CONTENTS OF FL. PT. ACC AND CLEAR IT / STO, BLOCK 1 5 / CALL 1,STO TAD STO / ARG <F.P. VARIABLE> DCA STO1 STO1, NOP /REPLACED BY CDF TADI STO# INC STO# DCA STOSB# CLA CMA TADI STO# DCA 10 STOX, TAD ACH JMS STOSB DCA ACH TAD ACM JMS STOSB DCA ACM TAD ACL JMS STOSB DCA ACL INC STO# CLA STL RTL /=0002 TAD STO /SOME TIME SAVING CODE... DCA STO3 STO3, NOP /REPLACED BY CIF CDF JMPI STO# STOSB, 0 /TIME SAVING SUBROUTINE NOP /CHANGED TO A CDF DESTINATION DCAI 10 JMPI STOSB / / FLOATING POINT TO FIXED POINT CONVERSION / FXER, 4611 3040 /"FIX" ERROR FIX, BLOCK 1 5 FIXX, TAD ACH JMS SPLIT DCA HAC TAD ACM DCA MAC TAD ACX TAD (-214 SMA JMP FIXERR TAD (-3 DCA SRM RSH, JMS ARS ISZ SRM JMP RSH TAD ACS RAL TAD MAC SZL CIA FIXRTN, DCA ACS DCA ACH DCA ACM DCA ACL TAD ACS RETRN FIX / IFIX, BLOCK 1 5 TAD IFIX DCA ADDR TAD IFIX# DCA ADDR# CALL 1,IFAD ADDR, ARG 0 TAD IFIX DCA FIX CLA CLL CML RTL / = 2 TAD IFIX# DCA FIX# JMP FIXX FIXERR, CALL 1,ERROR ARG FXER CLA CLL CMA RAR JMP FIXRTN /RETURN WITH 2047 IN FIXED AC PAGE / / FLOATING POINT MULTIPLICATION / ADSRAE, ADSRAC /SOME TIME SAVING INDIRECTS ARSAE, ARS COMAF, COM GTSPLB, GTSPLT NORMAG, NORMAC ER4, FDV ER01, ER0 ER3, FMP FMP, BLOCK 1 5 TAD ER3 DCAI ER01 TAD FMP DCA FMP1 FMP1, NOP /CDF TO FIELD OF CALLING PROGRAM TADI FMP# INC FMP# DCA 7 CLA CMA TADI FMP# INC FMP# DCA 10 JMSI GTSPLB /WARNING ***THIS INSTRUCTION SKIPS*** JMP MULZRO TAD ACS TAD SRS DCA ACS TAD ACX TAD SRX MULZRO, TAD (-201 DCA ACX TAD HAC DCA MQH TAD MAC DCA MQM TAD LAC DCA MQL DCA HAC TAD (-33 DCA FMP1 / MULT, JMSI ARSAE TAD MQH RAR DCA MQH TAD MQM RAR DCA MQM TAD MQL RAR DCA MQL SZL JMSI ADSRAE ISZ FMP1 JMP MULT JMSI NORMAG RETRN FMP / / / FLOATING POINT DIVISION / DIVZ, 4411 2632 FDV, BLOCK 1 5 TAD ER4 DCAI ER01 TAD FDV DCA FDV0 FDV0, NOP /CDF TO FIELD OF CALLING PROGRAM TADI FDV# INC FDV# DCA 7 CLA CMA TADI FDV# INC FDV# DCA 10 JMSI GTSPLB JMP DIVERR TAD ACS TAD SRS DCA ACS TAD SRX CIA TAD ACX TAD (177 DCA ACX DCA MQL TAD (-35 DCA FDV0 DVID, CLA CLL CML RAR / = 4000 AND SRH TAD HAC SPA CLA JMP FDV1 JMSI COMAF FDV1, JMSI ADSRAE TAD MQL RAL DCA MQL TAD MQM RAL DCA MQM TAD MQH RAL DCA MQH JMS ALS ISZ FDV0 JMP DVID / TAD MQH DCA HAC TAD MQM DCA MAC TAD MQL DCA LAC JMSI NORMAG FDVRET, RETRN FDV DIVERR, CALL 1,ERROR ARG DIVZ CLA CLL CMA RAR DCA ACH JMP FDVRET PAGE / / ROUTINE TO GET TWO'S COMPLEMENT OF TRIPLE WORD NUMBER / IF NO ADDRESS IN AC UPON ENTRY, SR IS ASSUMED. / COM, 0 TAD (25 /ADDRESS OF SRL DCA PTR2 CLA CLL CMA RTL / = -3 DCA CTR2 ED8, TAD I PTR2 CMA SZL CLL IAC DCA I PTR2 CLA CMA CML TAD PTR2 DCA PTR2 ISZ CTR2 JMP ED8 JMP I COM PTR2, 0 CTR2, 0 / / CONVERT FIXED POINT TO FLOATING POINT / CPAGE 14 FLOAT, BLOCK 1 5 /FLOAT FUNCTION TAD FLOAT / CALL 1,FLOAT DCA FLO1 / ARG <INT. VARIABLE> FLO1, NOP TADI FLOAT# INC FLOAT# DCA FLO2 TADI FLOAT# INC FLOAT# DCA 7 TAD FLOAT DCA FLOT TAD FLOAT# DCA FLOT# FLO2, NOP /CDF TO FIELD OF ARGUMENT TADI 7 JMP FLOTX / / INTEGER TO FLOATING POINT CONVERSION / FLOT, BLOCK 1 5 / CALL 0,FLOT FLOTX, CLL /ASSUMES INTEGER VARIABLE IN AC SPA CIA CML DCA MAC DCA HAC DCA LAC RAR DCA ACS TAD (217 DCA ACX DCA RSW JMS NORMAC RETRN FLOT / INDIRECT FLOATING POINT ADD CPAGE 36 IFAD, BLOCK 1 5 / CALL 1,IFAD TAD IFAD / ARG <2WORD ADDRESS> DCA IFA1 IFA1, NOP TADI IFAD# INC IFAD# DCA IFA2 CLA CMA TADI IFAD# INC IFAD# DCA 10 IFA2, NOP TADI 10 DCA 7 CLA CMA TADI 10 DCA 10 TAD IFAD DCA FAD TAD IFAD# DCA FAD# JMP FADENT ARS, 0 /LOCAL AC SHIFT RIGHT SUBROUTINE TAD HAC CLL RAR DCA HAC TAD MAC RAR DCA MAC TAD LAC RAR DCA LAC CLA RAL DCA RSW JMPI ARS FPER, 5726 0614 /"OVFL" ERROR CHS, BLOCK 1 5 /FLOATING POINT NEGATION TAD ACH / CALL 0,CHS SZA TAD (4000 CHSRET, DCA ACH RETRN CHS / / ERROR ROUTINES / ER0, 0 /CONTAINS ADDRESS OF CURRENT ENTRY PT ERR, CLA TAD I ER0 /BANK CALL IS FROM DCA CHS ISZ ER0 /INDEX TO ADDRESS TAD I ER0 /ADDRESS DCA CHS# CALL 1,ERROR ARG FPER CLA CLL CMA RAR JMP CHSRET END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/GENIOX.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 | / / COPYRIGHT 1971, DIGITAL EQUIPMENT CORPORATION, / MAYNARD, MASSACHUSETTS 01754 / UTILITY SUBROUTINE PACKAGE / VERSION UTILTY.V7A (OCTOBER 26,1971) / (VERS. CHG. V07 TO V7A 4/25/77 MH) / ENTRY OPEN /INITIALIZING AND FLAG SETTING ROUTINE ENTRY GENIO ENTRY EXIT /EXIT TO DISK MONITOR SYSTEM ENTRY ERROR ENTRY CKIO /USELESS ROUTINE OPDEF KRS 6034 OPDEF KCC 6032 OPDEF RIF 6224 OPDEF TADI 1400 OPDEF DCAI 3400 OPDEF JMSI 4400 OPDEF JMPI 5400 / CARD READER IOT'S OPDEF RCSE 6672 OPDEF RCSP 6671 OPDEF RCSF 6631 OPDEF RCRA 6632 /LINE PRINTER IOT'S OPDEF LLB 6666 OPDEF LSF 6661 LAP U17, 17 /*** MUST BE FIRST LOC IN PAGE *** IOER, 1117 0522 /"IOER" ERROR GENIO, BLOCK 2 /GENERAL INPUT/OUTPUT ROUTINE DCA 7 /SAVE ENTRY AC GENLP, TAD 7 RTL RTL RAL U200, AND U17 TAD JMPITB DCA DSPACH /INDEX JUMP TABLE BY DEVICE NUMBER TAD U200 KRS TAD UM203 SNA CLA KSF /CHECK FOR ^C ON TELETYPE DSPACH, NOP /NO ^C - DISPATCH TO I/O ROUTINE CALL 0,EXIT JMPITB, JMPI DEVTAB DEVTAB, TTYOUT HSPOUT IOERR GENOUT TTYIN HSRIN IOERR GENIN IOERR IOERR IOERR IOERR IOERR IOERR IOERR IOERR HSPOUT, PSF JMP GENLP TAD 7 PLS GENRTN, CLA RETRN GENIO HSRIN, ISZ T1 JMP HSRSF TAD U336 /TIME OUT-PRINT '^' TLS HLP, KSF JMP HLP AND U200 /GET 200 INTO AC KRS /READ THE CHAR. TAD UM203 SZA CLA /IS IT CONTROL C? KCC /NO-CLEAR FLAG RFC /USER TYPED-TICKLE RDR-FALL THRU RFC HSRSF, RSF JMP GENLP DCA T1 RRB RFC JMP GENRTN# U336, 336 T1, 0 UM203, -203 PAGE U377, 377 /MUST BE FIRST LOC IN THIS PAGE GENIN, 6201 TADI IHNDLR SNA CLA /OPEN INPUT FILE? JMP IOERR /NO 6202 JMS I FICHAR /GET A CHAR JMP IOERR /INPUT ERROR UU200, AND U377 GRTN2, RETRN GENIO GENOUT, 6201 TADI OHNDLR SNA CLA /OPEN OUTPUT FILE? JMP IOERR /NO 6202 TAD 7 /GET CHAR TO BE OUTPUT AND U377 JMS I FOCHAR /PUT A CHARACTER JMP IOERR /OUTPUT ERROR JMP GRTN2 IHNDLR, 122 /***ALL THESE LOCATIONS ARE VERY VOLATILE!! *** FICHAR, 606 /******* OHNDLR, 121 /******* FOCHAR, 651 /****************** BATIN, 5400 /************************** BATOUT, 7400 /************************** BATVFY, 5600 /************************** BATVAL, -2214 /************************** / / INITIALIZING SUBROUTINE CALLED BY FORTRAN / CLEARS FLOATING AC AND SETS FLAGS / OPEN, BLOCK 2 PLS RFC CALL 0,CLEAR CDFX, 6201 DCAI IHNDLR DCAI OHNDLR /ZERO DEVICE-INDEPENDENT IO FLAGS DCA TTFLAG /BEGINNING OF LINE TADI (7777 /GET BATCH FIELD AND (70 TAD CDFX /MAKE A CDF DCA CDFB TADI (7777 /GET BATCH RUNNING BIT RAL SMA CLA JMP IOERR /BATCH NOT RUNNING CDFB, HLT TADI BATVFY /CHECK CRUCIAL LOCATION TAD BATVAL /FOR RL'S INITIALS SZA CLA JMP IOERR TAD CDFB IAC /MAKE A CIF DCA CIFB1 TAD CIFB1 DCA CIFB2 RIF /MAKE A CDF TO HERE TAD CDFX DCA CDFH RETRN OPEN TTYIN, CIFB1, 0 /CIF BATCH JMSI BATIN /GET A CHAR JMP TTEOF1 /EOF DCA 7 /SAVE KEYBOARD CHAR TAD 7 TAD (-"$ /IS IT A "$"? SZA CLA JMP TTFUJ1 /NO ISZ TTFLAG /WAS LAST CHAR <CR>? JMP TTYEOF /YES - EOF TTFUJ1, CLA CMA DCA TTFLAG /RESET FLAG FOR NON <CR> TAD 7 TAD (-215 SNA CLA DCA TTFLAG /CLEAR FLAG TO INDICATE <CR> TYRTN, TAD 7 JMP GRTN2 /RETURN WITH CHAR IN AC TTFLAG, 0 /INITIALLY AT BEGINNING OF LINE TTYEOF, 6201 /CDF TADI (7777 /GET WORD FROM FIELD 0 RTR CLL CML RTL /SET BIT 10 DCAI (7777 /REPLACE IT CDFH, 0 /CDF HERE TTEOF1, JMP IOERR /WHAT TO DO? TYPE, 0 TAD 7 CIFB2, 0 /CIF BATCH JMSI BATOUT /SEND A CHAR TO THE BATCH OUTPUT STREAM JMPI TYPE TTYOUT, JMS TYPE JMP GRTN2 IOERR, CALL 1,ERROR ARG IOER PAGE PMESG, MESG MESG, 7777 7777 4005 2222 1722 4001 2440 1417 0340 LIT7, 0007 ERROR, BLOCK 2 /ERROR PROCESSOR U7600, 7600 TAD ERROR DCA TEM1 TEM1, NOP /SET DATA FIELD OF "CALL ERROR" TADI ERROR# DCA TEM3 INC ERROR# E60, CLA CMA CML /CML IS WINDOW DRESSING TADI ERROR# DCA 10 INC ERROR# TEM3, NOP /DATA FIELD OF MESSAGE&ENTRY POINT DCA CKIO /ZERO "FATAL ERROR" FLAG TADI 10 RAL SZL /NON-FATAL BIT ON? ISZ CKIO /YES - SET "FATAL FLAG" TO NON-FATAL CLL RAR /STRIP NON-FATAL BIT FROM MESSAGE DCA MESG TADI 10 /SECOND WORD OF MESSAGE DCA MESG# TADI 10 DCA TEM1 TADI 10 DCA TEM3 /CALLING ADDRESS TAD PMESG DCA TEM2 ERLP, TAD I TEM2 RTR RTR RTR JMS PR6BIT TAD I TEM2 JMS PR6BIT INC TEM2 JMP ERLP PRLOC, TAD TEM1 RTR RTR JMS ERTTY /PRINT CALLING FIELD TAD (-4 DCA TEM2 NUMLP, TAD TEM3 RTL RAL DCA TEM3 TAD TEM3 JMS ERTTY ISZ TEM2 JMP NUMLP TAD (215 DCA 7 JMS TYPE CLA CLL CMA RTL JMS TYPE TAD CKIO /GET THE FATAL ERROR FLAG SNA CLA /WHADDOWEDO?? JMP EXITX RETRN ERROR /HE SAYS ITS NON-FATAL - LET HIM HANDLE IT ERTTY, 0 /DIGIT PRINTING ROUTINE RAL AND LIT7 TAD E60 JMS PR6BIT JMP I ERTTY PR6BIT, 0 /6BIT TO 8BIT CONVERTOR AND (77 SNA JMP PRLOC /MESSAGE OVER TAD (7740 SPA TAD (100 TAD (240 CALL 0,GENIO /LOOK FOR ^C WHILE TYPING JMP I PR6BIT / /EXIT TO DISK MONITOR SYSTEM / EXIT, BLOCK 2 EXITX, CALL 0,CKIO 6203 JMPI U7600 /RETURN TO MONITOR CKIO, 0 TEM2, 0 /DUMMY SUBROUTINE TO WAIT FOR I/O COMPLETE RETRN CKIO END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/INTEGR.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 | /INTEGER MATH PACKAGE OS8 FORTRAN II LIBRARY / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 5A / APRIL 28, 1977 / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS / / ENTRY IREM ENTRY IABS ENTRY DIV ENTRY MPY ENTRY IRDSW ENTRY CLEAR ENTRY SUBSC /THE FOLLOWING DEFINITIONS ARE TO ENABLE LIBRARY /OPTIMIZATIONS WHERE CRITICAL TIMING CONSIDERATIONS /EXIST. THEY SHOULD BE USED WITH EXTREME CAUTION, /AND MUST REFERENCE CURRENT PAGE AND PAGE ZERO SYMBOLS /ONLY. OPDEF TADI 1400 OPDEF DCAI 3400 OPDEF JMSI 4400 OPDEF JMPI 5400 LAP /LV AUTO PAGING FOR PAL-III LIKE CODE AC, 0 /LOCATIONS USED BY MPY & DIV MQ, 0 SIGN, 0 CTR, 0 LOC, 0 SAV, 0 MPY, BLOCK 1 5 /INTEGER MULTIPLY SUBROUTINE DCA MQ / CALL 1,MPY TAD MPY / ARG <NUMBER> DCA MPY1 MPY1, NOP /REPLACED BY CDF TADI MPY# INC MPY# DCA MPY2 TADI MPY# INC MPY# DCA DIV MPY2, NOP /REPLACED BY CDF TADI DIV JMS MPYSB RETRN MPY MPYSB, 0 /INTERNAL MULTIPLICATION SUBR DCA DIV TAD (-14 DCA CTR BACK, CLL RAL DCA AC TAD MQ CLL RAL DCA MQ SZL TAD DIV TAD AC ISZ CTR JMP BACK JMPI MPYSB / CPAGE 4 DIVZA, DIVZ DVERR, 4411 /"DIVZ" ERROR 2632 DIV, BLOCK 1 5 /INTEGER DIVIDE SUBROUTINE SMA / CALL 1,DIV JMP AD1 / ARG <DIVISOR> INC SIGN CIA AD1, DCA MQ DCA CTR TAD DIV DCA DIV1 DIV1, NOP /REPLACED BY CDF TADI DIV# INC DIV# DCA DIV2 TADI DIV# INC DIV# DCA MPY DIV2, NOP TADI MPY SNA JMPI DIVZA /ATTEMPTING TO DIVIDE BY ZERO SMA JMP LOOP1 INC SIGN CIA LOOP1, CLL RAL INC CTR SMA JMP LOOP1 CLL RAR DCA LOC TAD LOC CIA DCA MPY TAD CTR CMA DCA CTR TAD CTR DCA SAV DCA AC TAD MQ LOOP2, TAD MPY LOOP3, ISZ CTR SKP JMP DONE STL SPA CLL DCA MQ TAD AC RAL DCA AC TAD MQ CLL RAL SNL JMP LOOP2 TAD LOC JMP LOOP3 DONE, CLA TAD SIGN RAR CLA DCA SIGN TAD AC SZL CIA RETRN DIV IREM, BLOCK 1 5 /INTEGER REMAINDER SUBROUTINE CLA / CALL 1,IREM INC IREM# / ARG <UNUSED VARIABLE> INC IREM# INC SAV /IREM MUST HAVE AN ARGUMENT TAD MQ /BECAUSE IT IS A FUNCTION. SPA /IREM CAN BE CALLED ONLY ONCE TAD LOC /AFTER EACH DIVISION ... SKP /SUBSEQUENT CALLS WILL RETURN ZERO. LOP, CLL RAR ISZ SAV JMP LOP RETRN IREM / PAGE IABS, BLOCK 1 5 /INTEGER ABS VALUE FUNCTION TAD IABS / CALL 1,IABS DCA IAB1 / ARG <INTEGER VARIABLE> IAB1, NOP TADI IABS# INC IABS# DCA IAB2 TADI IABS# INC IABS# DCA IRDSW IAB2, NOP /CDF TO ARGUMENT FIELD TADI IRDSW SPA CIA RETRN IABS IRDSW, BLOCK 1 5 /READ SWITCH REGISTER FUNCTION CLA OSR INC IRDSW# INC IRDSW# RETRN IRDSW DIVZ, CALL 1,ERROR /ZERO DIVIDE ERROR ARG DVERR CLA CLL CMA RAR RETRN DIV /THE FLOATING POINT CLEAR ROUTINE WAS ADDED TO "INTEGR" /SO THAT PROGRAMS WHICH DO NOT USE FLOATING POINT MATH /CAN RUN WITHOUT LOADING THE F.P. MATH PACKAGE. CLEAR, BLOCK 1 5 /FLOATING POINT CLEAR FUNCTION DCA IRDSW DCA ACH DCA ACM DCA ACL TAD IRDSW RETRN CLEAR / THE FOLLOWING CAN BE USED FOR DOUBLY OR SINGLY / SUBSCRIPTED ARRAYS. ON ENTRY THE AC SHOULD BE / NEGATIVE FOR FLOATING POINT VARIABLES. THIS MAY / BE ANY NEGATIVE NUMBER FOR SINGLY SUBSCRIPTED / VARIABLES, AND MUST BE THE FIRST DIMENSION FOR / DOUBLY SUBSCRIPTED VARIABLES. SOME EXAMPLES / FOLLOW: (TO LOAD THE I,JTH ELEMENT OF AN FP ARRAY) / TAD (-M /DIMENSIONS ARE M BY N / CALL 3,SUBSC / ARG J / ARG I / ARG ARRAY / LOC /MUST BE A DUMMY VARIABLE / CALL 1,IFAD / ARG LOC / TO LOAD THE JTH ELEMENT OF AN INTEGER ARRAY: / CALL 2,SUBSC / ARG J / ARG INTARR / LOC /STILL A DUMMY VARIABLE / TAD I LOC S1, BLOCK 1 /ADDR OF 1ST SUBSC S2, BLOCK 1 /ADDR OF 2ND SUBSC A, BLOCK 2 /ADDR OF ARRAY R, BLOCK 1 /ADDR FOR RESULT TM, 0 FL, 0 /DOUBLE SUBSC FLAG N, 0 /DIMENSION -- NEGATIVE IF FLOATING MQA, MQ /FOR INDIRECT DCA SUBSC, BLOCK 1 5 /FORTRAN SUBSCRIPTING ROUTINE DCA N /SAVE THE DIMENSION TAD N SPA /... ALSO ABS VALUE CMA DCAI MQA /WARNING **THIS ASSUMES DF=CURR FIELD** CLA CLL CMA RAL /HOW MANY ARGS? TAD SUBSC# DCA 10 TAD SUBSC DCA SUB1 SUB1, NOP /REPLACED BY CDF TADI 10 AND (100 SNA CLA /DOUBLE SUBSCRIPTS? JMP SB0 TADI 10 /YES, PICK UP ARGS... DCA SB2 TADI 10 DCA S2 CMA SB0, DCA FL /SET DBL SUBSC FLAG TADI 10 DCA SB1 TADI 10 DCA S1 TADI 10 DCA A TADI 10 DCA A# TAD SUBSC DCA SUB2 TADI 10 DCA R TAD 10 IAC DCA SUBSC# ISZ FL /DBL SUBSCRIPTING? JMP SB1 CLA CMA /GET THE 2ND SUBSC SB2, NOP /CDF TO FIELD OF 2ND SUBSCRIPT TADI S2 SZA /IS IT A 1? JMSI MPYSBA /NO, MULTIPLY BY DIMENSION SB1, NOP /CDF TO FIELD OF 1ST SUBSCRIPT TADI S1 TAD (-1 /MINUS ONE DCA TM SUB2, NOP /REPLACED BY CDF TAD A DCAI R INC R TAD N SPA CLA /FIXED OR FLOATING TAD TM CLL RAL TAD TM TAD A# DCAI R STL CLA RTL /FAST 'RETRN SUBSC' TAD SUBSC DCA SUB3 SUB3, NOP /REPLACED BY 'CDF CIF' JMPI SUBSC# MPYSBA, MPYSB END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/IOH.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 | /IOH SUBROUTINE OS8 FORTRAN II LIBRARY / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 10A / APRIL 28,1977 / INPUT OUTPUT CONVERSION SUBROUTINE / FOR 8K ALICS-FORTRAN SYSTEM / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS / ABSYM SACH 23 /SAVE FPAC FOR MANIPULATION OF AC ABSYM SACM 24 ABSYM SACL 25 ABSYM N2 175 /LAST ACCUMULATED NUMBER ABSYM ARGUMT 176 DUMMY ARGUMT DUMMY FPNT ENTRY READ ENTRY WRITE ENTRY IOH / / THE FOLLOWING IS NECESSARY BECAUSE CERTAIN SUBROUTINES SKIP / OPDEF TADI 1400 OPDEF DCAI 3400 OPDEF ANDI 0400 OPDEF JMPI 5400 OPDEF JMSI 4400 OPDEF ISZI 2400 SKPDF JMSKP 4000 LAP / A2, BLOCK 14 / / IOH ERROR ROUTINES / ERRNO, BLOCK 1 ERR2, ISZ WHI /SEE IF THIS WAS I FORMAT OR THE EXPONENT ERR3, ISZ ERRNO /IN E FORMAT ISZ ERRNO SKP ERR1, ISZ DV /ERR1 IS ALWAYS FATAL CLA TAD DV SNA CLA /WAS THIS AN INPUT ERROR FROM THE TELETYPE? CLA CLL CML RAR /YES - NON-FATAL TAD (615 DCA IO TAD ERRNO /IOH ERROR NUMBER TAD (2461 /MAKE INTO BCD DCA SW /TO ERROR COMMENT CALL 1,ERROR ARG IO JMP RETRY /DO ENTIRE READ STATEMENT OVER DV, 0 /SAVE DEVICE CODE CS, A2 /INITIAL PUSH POINTER PARN, 0 NOP /CDF N TADI WRITE# INC WRITE# JMP I PARN CH, 0 TW, 12 READ, BLOCK 1 10 /ENTRY POINT FOR READ RETRY, TAD READ /SNEAK IN DCA WRITE TAD READ# DCA WRITE# /SAVE SECOND RETURN WORD JMP ET CPAGE 4 IO, 0 SW, 0 /LEFT OR RIGHT HALF OF FORMAT WRITE, BLOCK 1 10 /ENTRY POINT CLA IAC /INITIALIZE SWITCH ET, DCA IO DCA CH /CLEAR CHARACTER DCA ERRNO /ZERO ERROR NUMBER IN CASE ERROR RESTART TAD WRITE DCA PARN# JMS PARN DCA DEVNO1 JMS PARN DCA 7 DEVNO1, NOP /CDF N CLA CMA TADI 7 /PICK UP DEVICE NUMBER CLL RTR /ROTATE IT INTO BITS 0-3 RTR RAR DCA DV TAD CS /INITIALIZE PUSH STACK DCA PUSH /- JMS PARN DCA FPNT01 JMS PARN DCA FPNT CLA IAC /SET UP "SW" TO START FORMAT DCA SW /FROM SECOND CHARACTER (FIRST IS LPAREN) DCA BA /ZAP END-OF-LINE SWITCH TAD PENTER /FAKE RE-ENTRY TO SET UP FIRST LPAREN DCA GLST /ON PUSHDOWN STACK RETRN WRITE PENTER, FENTER FPNT, 0 GFRM, 0 TAD SW INC SW CLL RAR TAD FPNT /FORM ADDRESS IN AC AND LEFT/RIGHT DCA 7 /SWITCH IN LINK FPNT01, NOP /CDF N TADI 7 SZL /LEFT OR RIGHT? JMP HR RTR RTR RTR HR, AND (77 JMP I GFRM CPAGE 5 0 /I1000 0 /I100 0 /I10 I1, 0 /I1 4000 SV, BLOCK 3 /FLOATING POINT TEMPORARY CPAGE 3 TN, 2045 /10.0 0 0 PAGE /EXPERIMENTAL RETN, DCA SACH /SET SACH TO 0 RTUR, JMS GFRM /GET NEXT CHAR IN FORMAT CPAGE 24 JMS CHTYPE /CLASSIFY FORMAT CHARACTER DG /DIGIT EXIT -57; SL -56; PER -54; CM -51; RPAR -50; LP -47; QT -40; RTUR 0; SVCHR SVCHR, DCA CH JMS NU /GET THE ACCUMULATED NUMBER CMA /KRONK IT DCA N1 /AND SAVE COUNT FOR ALL CONVERSIONS TAD CH AND (7757 TAD (7770 /THIS TESTS IF CH IS AN ,X, OR ,H, SNA CLA CM, JMS PR /IT WAS , PROCESS IT JMP RETN /NOT X OR H, KILL NUMBER AND TRY AGAIN N1, 0 SL, JMS PR /GO PROCESS THE PREVIOUS ITEM (IF ANY) JMS EJ JMP RETN QT, JMS PR /PROCESS PREVIOUS ITEM, IF ANY QT1, JMS GFRM TAD (-47 SNA /ANOTHER QUOTE? JMP RETN TAD (47 JMS PRINT /PRINT CHAR JMP QT1 DG, JMS DGT /ACCUMULATE DIGIT INTO SACH JMP RTUR /TRY ANOTHER CHARACTER LP, ISZ PUSH /LEFT PAREN CLA CMA /COUNT NESTING DEPTH, NEGATIVE TAD NPAR DCA NPAR TAD SW /PICK UP THE FORMAT POINTER DCA I PUSH /CRAM IT INTO THE LIST ISZ PUSH /KICK AGAIN JMS NU /THERE MAY BE AN ACCUMULATED NUMBER CIA /SAVE NUMBER DCA I PUSH /* CLA CLL CML RTL /HERE WE SEE IF THIS IS A POSSIBLE TAD NPAR /RESTART POINT SPA CLA /IF FIRST SAVE SW IN S1 JMP RETN /NOPE- FORGET IT TAD SW /YES--FIRST CRAM FORMAT--- DCA S1 /---INTO SAVE1 TAD I PUSH /AND THAT STUFF IN THE LIST--- DCA S2 /---GOES INTO SAVE 2 JMP RETN /READY FOR ANYTHING, HERE WE GO PUSH, 0 /PARENTHESIS PUSHDOWN LIST POINTER RPAR, JMS PR /PROCESS PREVIOUS ITEM, IF ANY ISZ I PUSH JMP TR CLA CLL CMA RAL /-2 TAD PUSH /DELETE THIS ITEM FORM THE LIST DCA PUSH /PUSH = PUSH-2 ISZ NPAR /NPAR = NPAR +1 ]-1[ SINCE MINUS COUNT JMP RETN JMS WH /THIS PAREN WAS THE BALANCING PAREN TAD S1 /GET THE FORMAT POINTER OF THE-- DCA SW /RESTART POINT AND CRAM IT TAD S2 /GET SWITCH AND THE COUNT CIA FENTER, DCA SACH CLA CMA TAD SW /TEST TO SEE IF SW IS ORIGINAL POINTER SNA CLA JMP L2 /YES - FAKE A RESTART ISZ PUSH /NO - PUSH ORIGINAL POINTER CLA IAC /SINCE WE ARE RETURNING TO DEPTH 2 DCA I PUSH ISZ PUSH CLA CMA /SET COUNT = 1, SWITCH = 1 DCA I PUSH CMA L2, DCA NPAR /PARNRN = -1 JMP LP TR, CLA CMA /GET OUT THE FORMAT POINTER-- TAD PUSH /* DCA N3 TAD I N3 DCA SW /HAA-- IT IS NOW RESTORED JMP RETN /AWAY WE GO N3, 0 /W FOR E AND F CONVER PER, JMS NU /GOT A PERIOD, MUST BE OR F TYPE DCA N3 JMP RETN S1, 0 S2, 0 /SAVE THE COUNT AND SWITCH NPAR, 0 PAGE /EXPERIMENTAL EX, JMS GLST /THIS IS E FORMAT CONVERSION EE, JMS NR /CHECK IF INPUT - IF NOT, GET NUMBER INTO [.1,1] TAD C DCA GLST /STORE C AWAY IN A SAFE PLACE DCA C CLA CMA DCA EFLG /SET "E FORMAT FAKEOUT" FLAG TAD (-5 JMP FFAKE /FAKE OUT "F" FORMAT TO PRINT DIGITS PRNTE, TAD (5 /PUT OUT THE E JMS PRINT / NOW PRINT 'C' DIGITS UNDER I3 FORMAT TAD GLST SPA SNA CLA CLA CLL CMA RAL TAD (55 JMS PRINT /PRINT A MINUS OR PLUS TAD GLST SPA CIA CALL 1,DIV ARG TW TAD (60 JMS PRINT /PRINT CPAGE 4 CALL 0,IREM /IREM NEEDS AN ARGUMENT TO IGNORE EFLG, 0 CRX, 0 TAD (60 JMS PRINT /PRINT SECOND DIGIT JMP EX /DONE, DO NEXT FX, CLA JMS GLST /THIS IS F FORMAT CONVERSION FF, JMS NR /CHECK IF INPUT - IF NOT, GET NUMBER INTO [.1,1] DCA EFLG TAD C /C CONTAINS NUMBER OF MULTS TO RANGE NUMBER SMA CLA CMA /0 MULTS NEEDED OR ALREADY THERE FFAKE, TAD N3 /NUM3 IS THE FIELD WIDTH CIA /MINUS SPACE FOR DADP+DP TAD N2 JMS SA /PUT OUT REQUIRED BLANKS + SIGN TAD C SMA JMP PRZRO /NO LEADING DIGIT - PRINT A ZERO FOR LOOKS CIA JMS DT PRDCPT, TAD (56 JMS PRINT TAD C /GET MULTIPLY COUNT SPA SNA JMP PAS2 CMA /THEY WERE MULTIPLIES, 0 TO N OF THEM DCA CRX TAD N2 /DIGITS AFTER DEC POINT, DADP CMA DCA NR JMP PASA /TEST FOR 0 MULTIPLIES RETR, TAD (60 /PUT OUT A ZERO JMS PRINT /ALL MULTIPLIES REPRESENTED PASA, ISZ CRX /NO, TRY RUN OFF FIELD SKP JMP PASS /YES ISZ NR /ALL WIDTH ACCOUNTED FOR% JMP RETR /NO, TRY NEXT POSITION PASS, TAD C /YES, GET MULT COUNT CIA /-MULT COUNT SKP PAS2, CLA TAD N2 /N2-MULT COUNT SMA SZA /IS MULT COUNT .GE. N2? JMS DT /NO - PRINT REMAINING DIGITS ISZ EFLG /WERE WE FAKED OUT BY "E" FORMAT? JMP FX /NO JMP PRNTE /YES - GO PRINT EXPONENT PRZRO, CLA TAD (60 JMS PRINT JMP PRDCPT /GO BACK TO PRINT THE DECIMAL POINT SA, 0 TAD SN SMA /THIS IS -(NUM OF BLANKS) JMP AS3 /POSITIVE, NUMBER TOO BIG FOR FIELD DCA CRX SKP CLA RETC, JMS PRINT /HERE WE PUT OUT THAT MANY BLANKS TAD (40 ISZ CRX JMP RETC /YES CLA TAD SN SNA CLA /IS SIGN MINUS? JMP I SA /EVIDENTLY NOT TAD (55 JMS PRINT /PUT OUT A MINUS SIGN JMP I SA PAGE /EXPERIMENTAL FN, TAD N3 /GET WIDTH, INPUT FOR E OR F FORMAT CMA /1'S COMPLEMENT DCA CR /TO COUNTER DCA D1 /0 TO D1 CALL 0,CLEAR CMA DCA D2 /-1 TO DECIMAL POINT SWITCH CMA /-0 TO SGN FLAG RRTSGN, DCA SN RRT, CLA ISZ CR /INDEX TO SEE IF WIDTH EXCEEDED SKP JMP FP /GET AN INPUT CHARACTER AND TEST IT JMS GCHR CPAGE 20 JMS CHTYPE /CLASSIFY INPUT CHAR FDIGIT /DIGIT -56; PUNT -40; RRT -53; RRT -55; RRTSGN -5; EPRO 0 PERR3, ERR3 FDIGIT, DCA IS CALL 1,FMP ARG TN CALL 1,STO /SAVE FLOATING POINT ACCUMULATOR ARG SV TAD IS CALL 0,FLOT /FLOAT NEW DIGIT CALL 1,FAD ARG SV INC D1 /COUNT OF DIGITS JMP RRT PUNT, ISZ D2 /TST DP SWITCH JMPI PERR3 /***** TWO DECIMAL POINTS ***** DCA D1 JMP RRT EPRO, CLA CMA /AN E FP, DCA IS /-1 TO IS IF E, 0 TO IS IF END OF FIELD ISZ D2 /TEST DP SWITCH JMP FA /ONE HAS OCCURRED TAD N2 /ONE HAS NOT OCCURRED, GET NDP SKP FA, TAD D1 /COUNT OF DIGITS AFTER EXPLICIT DP CMA /-COUNT JMS DH /DIVIDE FPAC BY TEN COUNT TIMES TAD ACH /IF ACH=0,DON'T CHK. SIGN SNA JMP ZR /ZERO-DON'T CHECK ISZ SN /TEST SIGN TAD (4000 /SET SIGN BIT DCA ACH ZR, ISZ IS /DID WE GET AN "E"? JMP VZA /NO - STORE RESULT AND GET OUT JMP VQ /YES - FAKE INTEGER ROUTINE TO ACCEPT EXPONENT D1, 0 D2, 0 IS, 0 CR, 0 PRO2, CMA /GOT EXPONENT - MAKE IT NEGATIVE ISZ SN /WHAT WAS ITS ORIGINAL SIGN? JMP VZB /NEGATIVE - DIVIDE BY 10^EXP DCA D1 /SAVE COUNT JMP VZD VZC, CALL 1,FMP ARG TN VZD, ISZ D1 /INDEX COUNT JMP VZC JMP VZA VZB, JMS DH VZA, CALL 1,ISTO /STORE IN PLACE ARG ARGUMT JMP FX PAGE /EXPERIMENTAL XX, JMS MR /TEST FOR MORE TAD IO /TEST FOR INPUT-OUTPUT SNA CLA JMP XX1 /INPUT, PSEUDO-JUMP TAD (40 /OUTPUT A BLANK JMS PRINT JMP XX /CYCLE XX1, JMS GCHR /IGNORE SPACES ON INPUT CLA JMP XX HH, JMS MR /THE H FIELD PROCESSOR JMS GFRM /SAME AS XXX, BUT PRINT NEXT JMS PRINT /----- FORMAT CHARACTER JMP HH /OUTPUT ONLY PRINT, 0 TAD (-40 SPA TAD (100 /CONVERT 6-BIT TO 8-BIT TAD (240 TAD DV /ADD ON DEVICE NUMBER IN BITS 0-3 CALL 0,GENIO JMP I PRINT WH, 0 JMS EJ /END THE RECORD TAD ARGUMT# SNA CLA /TEST PARAMETER FOR 0 JMS GLST /RETURN TO MAIN PROGRAM ON 0 PAR JMP I WH /MORE AGRUMENTS RETURN EJ, 0 /ROUTINE TO END RECORD TAD IO SZA CLA /INPUT OR OUTPUT? JMP E1 /OUTPUT E2, CLA TAD BA SZA CLA JMP BG /CARRIAGE RETURN SEEN - GOODBYE JMS GCHR /GET A CHARACTER JMP E2 /KEEP LOOKING FOR CR BG, DCA BA JMP I EJ E1, TAD (7715 /7715 TRANSLATES TO 215 JMS PRINT TAD (7712 JMS PRINT /PRINT CR-LF JMP I EJ BA, 0 /THIS IS THE END OF LINE SWITCH BH, ISZ BA /ENTRY TO LOOK FOR AN END OF LINE BL, TAD (40 AND (77 /KEEP THIS - BL IS REFERENCED BY GCHR JMP I GCHR GCHR, 0 /GET AN INPUT STRING CHARACTER JD, CLA TAD BA /GET EOR SWITCH SZA CLA JMP BL /IS EOR, RETURN BLANK CLA CLL CML RTR /****** IF # OF DEVICES IS CHANGED, TAD DV /THIS SHOULD BE CHANGED TOO ***** CALL 0,GENIO /CALL GENIO WITH OFFSET DEVICE NUMBER AND (177 /STRIP PARITY TAD (7763 SNA /CARRIAGE RETURN? JMP BH TAD (7655 CLL TAD (100 /IS CHAR IN RANGE 237<CHAR<340? SNL JMP JD /NO - IGNORE JMP BL /CONVERT TO SIXBIT AND RETURN PAGE /EXPERIMENTAL / GET F.P. NUMBER INTO THE RANGE .1 .LE. N .L. 1.0 NR, 0 JMSKP BB /CHECK DIRECTION OF I/O JMP FN /INPUT CALL 1,IFAD /OUTPUT - LOAD NUMBER INTO FLOATING AC ARG ARGUMT DCA SN /CLEAR THESE LOCS DCA C TAD ACH SNA JMP NREX /NUMBER IS ZERO SMA /IS IT A MINUS F P NUMBER JMP RETM TAD (4000 /YES-- MAKE IT POSITIVE ISZ SN /SET SIGN DCA ACH RETM, CLA /MULTIPLY BY 10 UNTIL NR .GT. (1.0) TAD ACH TAD (5764 SMA CLA JMP TB /GOT IT IT IS .GE.1 CALL 1,FMP ARG TN ISZ C /AND COUNT JMP RETM /GO TRY TO DO IT AGAIN TB, JMS SE /NOTE SE ' XR-1 CALL 1,STO ARG SV TAD (2004 DCA ACH /200400000000=.50000 IN AC TAD CH /TEST FORMAT TAD (7772 SNA CLA /IS IT E FORMAT? TAD C /NO - COUNT # OF MULTS NEEDED CIA TAD N2 /< DADP SMA CMA /NUMBER OF THIMES TO DIVIDE .5 BY 10 TO RND JMS DH /DO THE DIVIDES CALL 1,FAD ARG SV JMS SE /REDUCE TO NORMAL RANGE AGAIN GD, TAD ACH RAL SPA CLA JMP ZP /NUMBER IS ? 1/2 TAD ACH CLL RAR /WE ARE GETTING EXP TO 200 DCA ACH TAD ACM RAR DCA ACM TAD ACL RAR DCA ACL TAD ACH AND (7774 TAD ACH TAD (10 DCA ACH JMP GD ZP, TAD ACH AND (7 DCA ACH NREX, JMP I NR SN, 0 C, 0 /COUNTER FOR DEC. EXP. SE, 0 /DIVIDE BY 10 UNTIL N < 1.0 XR, TAD ACH /TEST NUMBER FOR .GE. 1 TAD (5764 SPA CLA JMP I SE /NUMBER IS IN RANGE, RETURN CLA CLL CMA RAL JMS DH CLA CMA /REDUCE COUNT TAD C DCA C JMP XR PAGE /EXPERIMENTAL GLST, 0 /GET NEXT ARGUMENT ROUTINE CALL 0,CLEAR /CLEAR FLOATING AC ISZ IOHCNT /ARE WE IN AN ARRAY I/O LOOP? JMP ARMORE /YES - GET NEXT ELEMENT INC IOH# RETRN IOH /RETURN TO USERS PROGRAM FOR MORE DATA ARMORE, TAD ARGUMT# TAD IOHINC /BUMP ARGUMENT POINTER BY ELEMENT LENGTH JMP IOHBAK /RESUME I/O CONVERSIONS WITH UPDATED ARGUMT CPAGE 33 IOH, BLOCK 1 10 SZA CLA /IS THIS A SCALAR OR AN ARRAY CALL? JMP IOHAR /AN ARRAY CALL CLA CMA IOGTAR, DCA IOHCNT /SET UP ARGUMENT COUNT FOR THIS CALL TAD IOH DCA IOH1 IOH1, NOP /SET DATA FIELD TO ARGUMENT LIST TADI IOH# DCA ARGUMT INC IOH# TADI IOH# IOHBAK, DCA ARGUMT# JMP I GLST /RETURN TO I/O CONVERSION IOHAR, INC IOH# CLA CLL CML RAR AND I IOH /GET TYPE OF ARRAY CLL RTL CML RAL /FORM A 1 OR A 3, DEPENDING ON ARRAY TYPE DCA IOHINC CLA CLL CMA RAR ANDI 7 /GET THE ELEMENT COUNT CIA INC IOH# JMP IOGTAR /SAVE IT AND GET ARRAY POINTER IOHINC, 0 IOHCNT, 0 CHTYPE, 0 /SUBROUTINE TO CLASSIFY CHARACTERS DCA CHCH TAD CHCH TAD (7706 CLL TAD (12 SZL /IS THE CHARACTER NUMERIC? JMP JMPOUT /YES - TAKE FIRST EXIT INC CHTYPE CHLOOP, CLA TAD I CHTYPE INC CHTYPE SNA /CHARACTER LIST EXHAUSTED? JMP JMPOTX /YES - TAKE LAST EXIT WITH CHAR IN AC TAD CHCH SNA CLA /MATCH? JMP JMPOUT /YES - TAKE EXIT WITH AC=0 INC CHTYPE JMP CHLOOP /NO MATCH - GO ON TO NEXT CHAR JMPOUT, DCA CHCH JMPOTX, TAD I CHTYPE DCA CHTYPE TAD CHCH JMP I CHTYPE CHCH, 0 DT, 0 CIA DCA CHCH /STORE COUNT RETT, JMS LS /LEFT SHIFT 1 TAD ACL /SAVE THE FPAC DCA SACL TAD ACM DCA SACM TAD ACH AND (17 DCA SACH TAD SACH DCA ACH /TRIM AC TO 28 BITS JMS LS /LEFT SHIFT 2 JMS LS TAD ACL /ADD THE DSAVE TO THE ACC TAD SACL DCA ACL RAL /* TAD ACM TAD SACM DCA ACM RAL /* TAD ACH TAD SACH DCA ACH TAD ACH CLL RAR /ROTATE 3 RIGHT RTR AND (17 TAD (60 /MAKE DIGIT JMS PRINT /DUMP IT AND SEE IF ANY MORE ISZ CHCH /LOOP ON COUNT JMP RETT /* JMP I DT LS, 0 /LEFT SHIFT THE FPAC 1 TAD ACL CLL RAL DCA ACL TAD ACM RAL DCA ACM TAD ACH RAL DCA ACH JMP I LS /DONE PAGE /EXPERIMENTAL PR, 0 TAD SACH /GET THE LAST NUMBER ACCUMULATED DCA N2 /SAVE IT PR2, TAD CH SNA JMP I PR /NOTHING TO DO CPAGE 22 JMS CHTYPE /CLASSIFY CH ERR1 /DIGIT IS ILLEGAL -30;XX -11;II -10;HH -6;FF -5;EE -1;AA 0;ERR1 MR, 0 /MORE? ISZ N1 /SEE IF IT GOES TO ZERO JMP I MR DCA CH /NO MORE FIELDS, FIRST WIPE CHAR JMP I PR /GO BACK TO FORMAT SCANNER NU, 0 /ROUTINE TO FETCH THE ACCUM NUMB TAD SACH SNA /IF IT IS ZERO, SET IT TO 1 CLA IAC /IT IS AND WE DO JMP I NU /GO HOME BB, 0 JMS MR /MORE? TAD ARGUMT# SNA CLA /IF ARG=0, JMS WH /END RECORD AND RETURN TO USERS PROGRAM TAD IO /TEST IN OUT SWITCH SZA CLA /OUTPUT INC BB /INPUT JMP I BB AX, JMS GLST AA, TAD N2 CIA DCA CX JMSKP BB JMP AR AS, JMS GADR /GET CHARACTER ADDRESS TADI 7 SZL JMP ASNORT RTR RTR RTR ASNORT, AND (77 /MASK 6 BITS JMS PRINT ISZ CX JMP AS /LOOP FOR CHARACTER COUNT JMP AX /GET NEXT ARGUMENT(IF ANY) AR, JMS GCHR DCA DH /GET AND SAVE INPUT CHAR JMS GADR /GET CHARACTER POINTER TAD DH SZL /WHICH HALF? JMP ARNORT /RIGHT HALF IAC RTL RTL RTL SKP ARNORT, TADI 7 TAD (7740 /CANCEL BLANK CHAR ARCOMN, DCAI 7 ISZ CX JMP AR JMP AX GADR, 0 /SUBR TO COMPUTE CHARACTER ADDR FOR "A" FMT TAD ARGUMT DCA AS1 TAD N2 TAD CX CLL RAR TAD ARGUMT# /AC=WORD POINTER, LINK=LEFT/RIGHT FLAG DCA 7 AS1, NOP /SET UP DATA FIELD OF ARGUMENT JMPI GADR CX, 0 DH, 0 DCA CX /DIVIDE FPAC BY TEN CX TIMES JMP DTA DTB, CALL 1,FDV ARG TN DTA, ISZ CX JMP DTB JMP I DH AS3, CLA /PRINT ASTERISKS FOR WHOLE FIELD SIZE TAD N3 /GET FIELD SIZE, E OR F CMA DCA CX /-COUNT JMP QQ QQA, TAD (52 /PRINT CX ASTERISKS JMS PRINT QQ, ISZ CX /INDEX COUNT JMP QQA JMS GLST /TEST FOR MORE JMP PR2 /RETURN TO FORMAT PROCESSOR, SAME TYPE PAGE /EXPERIMENTAL IN, TAD N2 /INTEGER INPUT, GET WIDTH OF FIELD CMA /1,S COMP TO COUNTER, CR DCA CR CMA VQ, DCA WHI /-1 TO NUMBER ACCUMULATED CMA /-1 TO SIGN RRSIGN, DCA SN DCA SACH RRS, ISZ CR /HAS WHOLE NUMBER BEEN ACCUMULATED SKP JMP PRO JMS GCHR CPAGE 14 JMS CHTYPE /CLASSIFY CHARACTER DIGIT /ITS A DIGIT -40; RRS -53; RRS -55; RRSIGN 0; ERR2 DIGIT, JMS DGT /ACCUMULATE DIGIT INTO SACH JMP RRS /GET NEXT DIGIT PRO, TAD SACH /WE HAVE AN INTEGER ... ISZ WHI /WHAT KIND? JMP PRO2 ISZ SN / 'I' FORMAT CIA DCA I ARGUMT IX, CLA JMS GLST /INTEGER CONVERSION II, JMSKP BB /TEST MORE AND NON ZERO CURRENT LIST ITEM JMP IN /INPUT TAD AB DCA SACL /OUTPUT TAD (-4 DCA WHI /-4 DCA SN /0 TAD I ARGUMT SMA /SET SN 0 FOR PLUS, 1 FOR MINUS JMP XZ /PLACE MAGNITUDE IN 20 CIA ISZ SN XZ, CALL 1,DIV ARG TW DCA SACH CPAGE 4 CALL 0,IREM /IREM NEEDS AN ARGUMENT TO IGNORE AB, I1 WHI, 0 DCA I SACL /SAVE REMAINDER CMA TAD SACL /SACL=SACL-1 DCA SACL ISZ WHI /INDEX COUNT TAD SACH /AND CHECK NUM FOR 0 SZA JMP XZ /CYCLE IB, TAD N2 DCA N3 /IN CASE OF OVERFLOW TAD N2 CMA TAD WHI TAD (4 /COMPUTE NUMBER OF LEADING BLANKS JMS SA /PRINT LEADING BLANKS AND SIGN ID, INC SACL /POINT TO DIGIT TO PRINT NEXT TAD I SACL /GET IT SPA /TERMINATOR? JMP IX /YUP TAD (60 JMS PRINT /NOPE - PRINT THE DIGIT JMP ID /GET NEXT DGT, 0 DCA SACM TAD SACH CLL RTL TAD SACH RAL TAD SACM DCA SACH JMP I DGT END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/IOPEN.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | /IOPEN SUBROUTINE OS8 FORTRAN II LIBRARY / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 21A / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS / SUBROUTINES TO MANIPULATE OS/8 FILES / ENTRY IOPEN /OPEN AN INPUT FILE ENTRY OOPEN /OPEN AN OUTPUT FILE ENTRY OCLOS /CLOSE AN OUTPUT FILE ENTRY CHAIN /CHAIN TO A PROGRAM OPDEF TADI 1400 OPDEF ISZI 2400 OPDEF DCAI 3400 OPDEF JMPI 5400 LAP /LEAVE AUTOMATIC PAGING - WE NEED THE 2 LOCATIONS IOER, 1117;0522 /"IOER" ERROR MESSAGE IOPEN, BLOCK 1 21 TAD ASDVM1 JMS SETUP /PUT 2 WORDS OF FIRST ARGUMENT INTO "ASDEV" TADI INHNDL /DATA FIELD IS 0 HERE - GET INPUT HANDLER PAGE SNA JMP IOERR /NO /I GIVEN - ERROR DCAI 10 /STORE IN "ASPAGE" JMS GFILNM /MOVE FILE NAME INTO LOCS 00000-00003 TAD FLUKUP /LOAD POINTER TO "FLUKUP" IN RUN-TIME ROUTINES CALASN, 6202 /CIF 0 JMS I FASIGN /SET DF=CURRENT AND GO LOOKUP FILE RETRN IOPEN /** FASIGN SKIPS BUT SECOND WORD IS SMALL ** IOERR, CALL 1,ERROR /I-O ERROR - GIVE MESSAGE AND QUIT ARG IOER OOPEN, BLOCK 1 21 JMS OOCOMN TAD FENTER JMP CALASN /SEE "IOPEN" FOR COMMENTS OOCOMN, 0 /COMMON SUBR BETWEEN "OOPEN" AND "OCLOS" TAD OOPEN DCA IOPEN TAD OOPEN# DCA IOPEN# /MOVE CALLING ADDRESS TO IOPEN TAD ASDVM1 JMS SETUP /SET UP DEVICE NAME IN FIELD 0 TADI OUHNDL SNA JMP IOERR /NO /O GIVEN - ERROR DCAI 10 /STORE IN "ASPAGE" JMS GFILNM /PUT FILE NAME INTO 00000-3 JMPI OOCOMN OCLOS, BLOCK 1 21 JMS OOCOMN /SET UP DEVICE AND FILE NAME TAD OCLOS DCA IOPEN TAD OCLOS# DCA IOPEN# /SET UP IOPEN FOR RETURN TAD CHAIN /=7177 DCA OOCOMN OCLOOP, TAD CHAIN# /=1632 =^Z ON DEVICE 4 OUTPUT CALL 0,GENIO ISZ OOCOMN JMP OCLOOP /FORCE OUT THE LAST BUFFER TAD FCLOSE JMP CALASN /DO WORK AND LEAVE SETUP, 0 DCA 10 TAD IOPEN DCA SETDF SETDF, 0 /SET CALLING DATA FIELD TADI IOPEN# DCA GETWD# /SAVE FIELD OF ARGUMENT INC IOPEN# TADI IOPEN# DCA SETDF /SAVE ADDRESS OF ARGUMENT INC IOPEN# JMS GETWD /TRANSFER TWO WORDS FROM THE JMS GETWD /ARGUMENT LIST TO WHERE XR 10 POINTS JMPI SETUP /RETURN WITH DATA FIELD =0 GETWD, 0 NOP /SET ARGUMENT FIELD TADI SETDF INC SETDF 6201 /CDF 00 DCAI 10 JMPI GETWD /DO NOT RESTORE DATA FIELD GFILNM, 0 CLA CMA JMS SETUP /MOVE TWO WORDS TO 00000 AND 00001 JMS GETWD /MOVE THE THIRD WORD TAD DA DCAI 10 /SUPPLY AN EXTENSION JMPI GFILNM DA, 0401 /.DA EXTENSION INHNDL, 74 OUHNDL, 75 FASIGN, 541 /***************** ASDVM1, 552 / CAUTION! FLUKUP, 567 /ALL THESE LOCATIONS ARE VERY VOLATILE!! FENTER, 741 /WATCH OUT IF YOU REASSEMBLE THE LOADER! FCLOSE, 757 /***************** CHAIN, 7177 /USE "CHAIN" TO STORE CONSTANTS 1632 /SINCE IT IS ONLY CALLED TERMINALLY TAD CHAIN DCA IOPEN CALL 0,CKIO /WAIT FOR DEVICE TAD CHAIN# DCA IOPEN# JMS GFILNM /GET FILE NAME INTO 00000-00003 ISZI INHNDL /FORCE INHNDL NONZERO SO IOPEN WONT FAIL TAD SV /CHANGE ASSUMED EXTENSION DCA DA /FROM .DA TO .SV TAD (0310 DCA IOER /IF IOPEN FAILS GIVE "CHER" MESSAGE CALOPN, CALL 1,IOPEN ARG SYS /CHAIN WORKS FROM THE SYSTEMS DEVICE ONLY 6201 0 /"ARG 0" POINTING TO 00000! TAD (6 6201 /SET DF TO 0 DCAI K2 /MODIFY "LOOKUP" INTO "CHAIN" DCAI ZRONAM /ALSO KILL LOC WHICH ZEROS FILE NAME PTR JMP CALOPN /GO BACK - THIS TIME IOPEN WILL CHAIN. SYS, 2303 /***** 2303+2326 =4631 = "SYS"! WATCH IT! SV, 2326 K2, 571 /**** SUPER VOLATILE LOCATION **** ZRONAM, 557 /**** DITTO **** END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/IPOWRS.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | /INTEGER POWERS OF NUMBERS ...INTEGER AND FLOATING POINT / /OS8 FORTRAN II LIBRARY / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 2A / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS ENTRY IIPOW ENTRY FIPOW OPDEF TADI 1400 LAP FIPOW, BLOCK 1 2 TAD FIPOW DCA IIPOW TAD FIPOW# DCA IIPOW# CALL 1,STO ARG X /SAVE BASE JMP FIFI X, BLOCK 3 RSLT, BLOCK 3 N, 0 FISW, 0 IIPOW, BLOCK 1 2 DCA X /SAVE BASE IAC FIFI, DCA FISW TAD IIPOW DCA II II, NOP TADI IIPOW# DCA NCDF INC IIPOW# TADI IIPOW# DCA N INC IIPOW# NCDF, NOP /GET FIELD OF EXPONENT TADI N /GET EXPONENT CLL SPA CIA CML DCA N /SAVE ABS VALUE TAD X /********* THE FOLLOWING CODE MAY BE REPLACED BY JUST "SNA CLA" /********* IF THE RULES ARE THAT 0**ANYTHING=0 FOR FLOATING /********* POINT TOO. (REMEMBER 0**0 AND 0**-1!) SNA CLA TAD FISW SZA CLA /********* JMP IPRTRN /BASE=0 MEANS RESULT=0 TAD FISW SZA JMP DCARSL ACHONE, TAD (2014 DCA ACH /INITIALIZE FPAC TO 1.0 DCARSL, DCA RSLT /INITIALIZE RSLT TO FISW SNL /THE LINK SHOULD CONTAIN THE EXPONENT SIGN JMP BACK /POSITIVE - ALLS WELL TAD FISW SZA CLA JMP IPRTRN /I**-N = 0 CALL 1,FDV ARG X /THERE'S A 1.0 IN THE AC, REMEMBER? CALL 1,STO ARG X CLL /FAKE A POSITIVE SIGN JMP ACHONE /GO BACK AND RESTORE FPAC TO 1.0 BACK, TAD N /USE STANDARD POWER-OF-2 ALGORITHM FOR POWERS SNA JMP DONE CLL RAR DCA N SNL JMP LOOP TAD RSLT SNA JMP FPMULT /RSLT=0 MEANS FLOATING POINT CALL 1,MPY ARG X STRSLT, DCA RSLT LOOP, TAD N SNA CLA JMP DONE TAD FISW SNA CLA JMP FPSQR TAD X CALL 1,MPY ARG X DCA X JMP BACK FPMULT, CALL 1,FMP /DO THE SAME STUFF IN FLOATING POINT ARG X /THAT WE DID ABOVE IN INTEGERS JMP STRSLT FPSQR, CALL 1,STO ARG RSLT /SAVE FLTG AC CALL 1,FAD ARG X CALL 1,FMP ARG X CALL 1,STO ARG X /SQUARE X CALL 1,FAD ARG RSLT DCA RSLT /KEEP RSLT ZERO! JMP BACK DONE, TAD RSLT IPRTRN, RETRN IIPOW END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/POWERS.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 | /POWERS SUBROUTINE OS8 FORTRAN II LIBRARY / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 5A / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS ENTRY IFPOW / INTEGER TO FLOATING POWER ENTRY FFPOW / FLOATING TO FLOATING POWER ENTRY EXP / E TO A POWER ENTRY ALOG / NATURAL LOGARITHM / / DUMMY LXP OPDEF JMSKP 4000 / / INTERNAL SUBROUTINE POL / / COMPUTES N TERMS OF POLYNOMIAL (NO CONSTANT TERM) / N IN AC ... X IN FLOATING AC / COEFFICIENTS START IN LOCATION WHOSE ADDRESS FOLLOWS JMS TO POL / POL2, BLOCK 1 POL, BLOCK 1 CIA DCA POL2 CALL 1,STO ARG X TAD I POL INC POL / DCA ARG1# /THIS CODE PROBABLY EXTRANEOUS / SKP ARG2, DCA ARG1# CALL 1,FAD ARG1, ARG EXS / ADDRESS STORED HERE CALL 1,FMP ARG X ISZ POL2 JMP POL1 JMP I POL POL1, TAD ARG1# TAD (3 JMP ARG2 CPAGE 17 / CANT BREAK UP THIS TABLE EXS, 1464 /7.9608942E-9 CONSTANTS FOR EXP 2142 1421 1545 /6.3578287E-7 2525 2525 1625 /4.0690103E-5 2525 2525 1704 /1.9531250E-3 0000 0000 1754 /6.25E-2 0000 0000 CPAGE 3 ONE, 2014 0000 0000 CPAGE 30 COF, 5716 /-6.4535442E-3 CONSTANTS FOR LOGS 4674 1006 1744 /3.6088494E-2 4750 6073 5756 /-9.5329390E-2 0636 0162 1765 /1.6765407E-1 2726 6023 5767 /-2.4073380E-1 5501 3543 1775 /3.3179902E-1 2360 6176 5777 /-4.9987412E-1 7767 6001 2007 /9.9999643E-1 7777 7041 CPAGE 3 ER16, 2014 /1.0644944 2040 5326 CPAGE 3 LN2, 1755 /8.6643397E-2 4271 0300 X, BLOCK 3 Y, BLOCK 3 / / ALOG - NATURAL LOGARITHM / / ALOG(X)=N*ALOG(2)+ALOG(M) WHERE 1/2 OR EQUAL TO M / ALOG(M)=ALTERNATING SERIES (K**I)/I WHERE K=2M-1 AND M AS ABOVE / CPAGE 4 LGER, 0114 / "ALOG" ERROR AT LOC XXXXX 1707 ALOG, BLOCK 1 5 / ENTRY POINT TAD ALOG DCA TEM TAD ALOG# DCA TEM# CALL 1,IFAD TEM, ARG 0 INC ALOG# INC ALOG# TAD ACH / GET EXPONENT SPA SNA JMP LGERR /LOG OF X<=0 - ERROR AND (3770 TAD (5770 / -2000 DCA TEM / N INTO TEM TAD ACH / GET M WITHOUT SIGN AND (7 TAD (2010 / 2M DCA ACH CALL 1,FSB / 2M-1 ARG ONE TAD (D8 / 8 TERMS OF SERIES JMS POL COF CALL 1,STO / ALOG(M) INTO Y ARG Y TAD TEM / GET N CALL 0,FLOT / FLOAT IT CALL 1,FMP / N *ALOG(2) ARG LN2 CALL 1,FAD / N *ALOG(2) ALOG(M)(ALOG(X) ARG Y RETRN ALOG / EXIT LGERR, CALL 1,ERROR ARG LGER / / EXP - E TO A POWER / / E**X=SERIES (X**I)/(I!) / IF B=E**(1/16) AND X IS BETWEEN -1 AND 1 THEN / B**X=1 SUMA(I)*(X**I) FOR I FROM I=1 TO I=5 / WHERE A(I)(1/((I!)*16**2)) / CPAGE 4 EXPER, 4530 2040 EXP, BLOCK 1 5 / ENTRY POINT TAD EXP DCA XT TAD EXP# DCA XT# INC EXP# INC EXP# CALL 1,IFAD XT, ARG 0 CLA CLL CMA RAR AND ACH TAD (-2075 SMA CLA TAD ACM CLL TAD (-4271 /TEST FOR FLTG. AC <88.2 SZL CLA JMP EXPERR TAD ACH SZA TAD (40 / X*16 DCA ACH CALL 1,STO / Y=16X ARG Y CALL 1,FAD / EXPRESS Y AS INTEGER N AND FRACTION F ARG Y CALL 0,FIX / GET N SMA IAC DCA ALOG / ALOG=N TAD ALOG / GET F CIA CALL 0,FLOT CALL 1,FAD ARG Y TAD (5 / 5 TERMS OF SERIES JMS POL EXS CALL 1,FAD / PLUS 1 ARG ONE CALL 1,STO / GIVES B**F ARG Y CALL 1,FAD / GET B ARG ER16 CALL 1,FIPOW ARG ALOG CALL 1,FMP / B**(N+F)=(B**16X)(E**X) ARG Y RETRN EXP / EXIT EXPERR, CALL 1,ERROR ARG EXPER TAD ACH SMA CLA CLL CMA RAR DCA ACH DCA ACM DCA ACL RETRN EXP / / IFPOW - INTEGER TO FLOATING POWER / / JUST FLOAT BASE AND GO TO FFPOW / IFPOW, BLOCK 1 5 / ENTRY POINT CALL 0,FLOT TAD IFPOW / FROM BANK DCA FFPOW / TO PROPER LOCATION TAD IFPOW# // FROM ADDRESS DCA FFPOW# /TO PROPER LOC JMP ML / SNEAK INTO ROUTINE / / FFPOW- FLOATING TO FLOATING POWER / / IDENTITY USED ... X**Y=EXP(Y*ALOG(X)) / CPAGE 4 FFPER, 4614 2027 FFPOW, BLOCK 1 5 / ENTRY POINT ML, TAD I FFPOW / GET CDF TO EXPONENT DCA LXP INC FFPOW# / INCREMENT TO EXPONENT ADDRESS TAD I FFPOW / GET EXPONENT ADDRESS DCA LXP# INC FFPOW# / INCREMENT FOR EXIT TAD I LXP / HIGH ORDER WORD OF EXPONENT SNA CLA / IS IT ZERO JMP FFP5 / YES ... RESULT=1 TAD ACH / BASE IS IN FLOATING POINT AC SPA JMP FFPERR SZA CLA / IF BASE EQUALS ZERO ... RESULT EQUALS ZERO JMP FFP1 RETRN FFPOW / ZERO RESULT EXIT FFP1, CALL 1,STO / SAVE BASE FFP2, ARG X CALL 1,ALOG ARG X CALL 1,FMP / Y*LOG(X) LXP, ARG 0 / ADDRESS STORED HERE CALL 1,STO ARG X CALL 1,EXP ARG X FFP6, RETRN FFPOW FFP5, CALL 0,CLEAR / ANYTHING TO ZERO POWER IS 1 TAD (2014 DCA ACH JMP FFP6 FFPERR, TAD (4000 DCA ACH CALL 1,ERROR ARG FFPER JMP FFP1 END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/RWTAPE.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | /DECTAPE I-O ROUTINES OS8 FORTRAN II LIBRARY / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 2A / / CALL 4, RTAPE(WTAPE) / ARG UNIT / ARG +-BLOCK (-MEANS START SEARCH FORWARD) / ARG WORD COUNT / ARG CORE ADDRESS / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS / ENTRY RTAPE ENTRY WTAPE DUMMY WCT DUMMY CAD OPDEF TADI 1400 OPDEF DCAI 3400 LAP /ENABLE FIT INTO 1 PAGE / /DATA / DFUNC, 0 DBLK, 0 DWCT, 0 DFIELD, 0 WCT, 7754 CAD, 7755 DCORE, / /ARG PICKUP ROUTINE / GETARG, 0 TAD I RTAPE DCA AA INC RTAPE# TADI RTAPE# DCA WTAPE# INC RTAPE# AA, NOP /SET DATA FIELD TADI WTAPE# JMP I GETARG / /ERROR / DTERR, CALL 1,ERROR /CK FOR ERROR ARG TAPERR / /DATA / / /START / WTAPE, BLOCK 1 2 TAD WTAPE /MOVE ARG ADDR TO RTAPE DCA RTAPE TAD WTAPE# DCA RTAPE# IAC /WRITE FUNCTION JMP TARGS TAPERR, 2401 /TA 2005 /PE RTAPE, BLOCK 1 2 TARGS, DCA DFUNC /READ=0, WRITE=1 JMS GETARG /GET UNIT # CLL RTR /TO BITS 0-2 RTR TAD DFUNC /COMBINE WITH R-W BIT DCA DFUNC JMS GETARG /GET BLK # SMA JMP RT2 /REV. SRCH. CIA /FORWARD SRCH. DCA DBLK JMP RT3 RT2, DCA DBLK TAD (400 /REV. SRCH. BIT TAD DFUNC DCA DFUNC RT3, JMS GETARG /GET W.C. CIA DCA DWCT JMS GETARG /GET CORE ADDR CLA CMA TAD WTAPE# DCA DCORE TAD AA /GET CORE FIELD DCA DFIELD / /DEFINITIONS / OPDEF DTCA 6762 OPDEF DTXA 6764 OPDEF DTLB 6774 OPDEF DTRB 6772 SKPDF DTSF 6771 OPDEF DTRA 6761 / /START OF DECTAPE I-O / TAD DFUNC /UNIT & DIRECTION AND (7400 TAD (10 /+ SRCH MODE DTCA DTXA /SET STATUS & CLR FLGS DTLB /CLR FIELD BITS TAD WCT /USE 7754 AS ADDR TO 6201 /SET FIELD 0 DCAI CAD /STORE BLK FOUND DTSERR, RTL /REENTRY FOR SRCH ERROR RAL /ENDZONE FLAG TO LINK CLA CML /CHANGE DIRECTION TAD (200 /DTA GO FLAG DTCONT, SNL /CK DIR. DTREV, TAD (400 /CHANGE DIR. DTSRCH, DTXA /GO INTO SEARCH DTSF DTRB /READ CONDITION JMP DTSRCH# SPA JMP DTSERR /ERROR DTRA /GET CUR. DIR. RTL /TO LINK RTL SZL CLA TAD (3 /FOR REV GET BLK-3 6201 TADI WCT /# OF LAST BLK SEEN CMA /CIA MIGHT BLOW THE LINK TAD DBLK CMA SZA CLA JMP DTCONT /CONT. SRCH SZL /FOUND, CK DIR. JMP DTREV /IF REV, SNEAK BACK UP TAD DWCT /SET WORD COUNT DCAI WCT TAD DCORE DCAI CAD LABEL, TAD DFIELD /LOAD FIELD BITS DTLB IAC /GET R-W FUNCTION AND DFUNC CLL RTL RTL TAD (130 /SET UP FUNCTION FOR /THE XOR TO GIVE SRCH /MODE CLEARED & SET CONTINUOUS MODE /READ=3, WRITE=5 DTXA /BEGIN TRANSFER DTWAIT, DTSF /WAIT FOR W.C. OVERFLOW JMP DTWAIT DTRA AND (200 /STOP-GO BIT TAD (2 /SAVE DTA & ERROR FLAGS DTXA /STOP TAPE DTRB /READ ERROR FLAGS SPA CLA /CK FOR ERROR JMP DTERR /YES RETRN RTAPE END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/SQRT.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | /SQUARE ROOT SUBROUTINE OS8 FORTRAN II LIBRARY LIBRARY / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 4A / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS ENTRY SQRT / / SQUARE ROOT ROUTINE / IF X0 IS AN APPROXIMATION FOR Y**(1/2) / THEN (X0+(Y/X0))/2 IS A BETTER APPROXIMATION / X0, BLOCK 3 Y, BLOCK 3 CNT, BLOCK 1 / / CPAGE 4 SQER, 6321 /"SQRT" ERROR FROM LOC XXXXX 2224 SQRT, BLOCK 1 4 /ENTRY POINT TAD I SQRT DCA IN INC SQRT# TAD I SQRT DCA IN# ISZ SQRT# CALL 1,FAD IN, ARG 0 CALL 1,STO /Y=ARGUMENT ARG Y CALL 1,FAD ARG Y TAD ACH /IF Y NEGATIVE THEN ERROR SMA JMP POS CALL 1,ERROR ARG SQER CLA CLL CMA RAR AND ACH POS, SZA /IF Y=0 THEN ROOT=0 JMP NONZ RETRN SQRT NONZ, RAR CLL /FORM INITIAL APPROXIMATION TAD (1004 DCA ACH TAD ACM RAR DCA ACM TAD ACL RAR DCA ACL TAD ACH AND (4 SNA CLA TAD (2 TAD ACH DCA ACH TAD (-3 /DO 3 ITERATIONS DCA CNT INIT, CALL 1,STO ARG X0 CALL 1,FAD ARG Y CALL 1,FDV /Y/X0 ARG X0 CALL 1,FAD /(Y/X0)+X0 ARG X0 TAD ACH /((Y/X0)+X0)/2 TAD (7770 DCA ACH ISZ CNT JMP INIT RETRN SQRT END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/TRIG.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | /TRIGONOMETRY ROUTINES OS8 FORTRAN II LIBRARY / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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 5 HAS PATCH FOR IMPROVED ACCURACY AT LARGE ARGS / INSERTED NOP INSTRUCTIONS AT PATCH1 AND PATCH2/C. STOLZ / / / / / / / / / / / VERSION 6A / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS ENTRY SIN ENTRY COS ENTRY TAN QUAD, 0 /CONTAINS ONE LESS THAN THE QUADRANT OF THE ARGUMENT Y, BLOCK 3 /TEMPORARY STORAGE FOR ARG CPAGE 22 COEF, 5476 /-2.39E-8 CONSTANTS FOR SIN 3246 2500 /2.7526E-6 1565 6134 5170 /-1.98409E-4 5646 4006 0026 /8.3333315E-3 1724 2104 2065 /-1.6666667E-1 5765 2525 2525 /1.0 2014 0000 0000 CPAGE 3 HALFPI, 2016 /1.5707963 2207 7324 CPAGE 3 QTRPI, 2006 /7.8539815E-1 2207 7324 CPAGE 25 TOEF, 1724 /9.5168091E-3 6766 1440 /2.9005250E-3 1705 7413 2741 /2.4565090E-2 1736 2236 2720 /5.3374060E-2 1746 6517 3023 /1.3339240E-1 1764 2114 0042 /3.3333140E-1 1775 2525 1517 /1.0 2014 0000 0000 TAN, BLOCK 1 6 DCA QUAD /SET QUADRANT OFFSET SWITCH TAD I TAN /PICK-UP CDF DCA TARG INC TAN# /POINT TO NEXT WORD TAD I TAN /PICK-UP ADDRESS DCA TARG# INC TAN# /POINT TO RETURN CALL 1,FAD /GET ARG IN FP-ACC TARG, ARG 0 BAC, TAD ACH /LOOK AT HIGH ORDER WORD SPA CLA /IF NEGATIVE JMP OVT /GO OM CALL 1,FSB /OTHERWISE SUBTRACT ARG QTRPI /PI/2 ISZ QUAD /AND INCREMENT QUADRANT COUNTER PATCH1, NOP /ALLOW FOR SKIP JMP BAC /UNTIL ARG IS NEGATIVE OVT, CALL 1,FAD /ADD PI/2 TO ARG UNTIL IT IS IN ARG QTRPI /THE FIRST QUADRANT CLA CMA TAD QUAD /BUT KEEP TRACK OF WHICH QUADRANT IT WAS IN DCA QUAD TAD ACH /GET HI ORDER WORD SPA CLA JMP OVT /IF NEGATIVE REPEAT TAD QUAD /FIND OUT WHAT QUAD IT WAS IN RTR SMA CLA JMP OM CALL 0,CHS /SUBTRACT FROM PI/2 IF QUAD 2 OR 4 CALL 1,FAD ARG QTRPI OM, TAD (7 /USE A 7 TERM SERIES CPAGE 3 JMS POL TOEF /ADRESS OF COEFICIENTS FOR THE SERIES CLA CMA TAD QUAD RTR SZL CLA JMP OM3 CALL 1,STO ARG Y TAD (2014 DCA ACH CALL 1,FDV ARG Y OM3, RETRN TAN / INTERNAL SUBROUTINE POL / / COMPUTES N TERMS OF POLYNOMIAL / N IN AC ... X IN FLOATING AC / COEFFICIENTS START IN LOCATION WHOSE ADDRESS FOLLOWS JMS TO POL / POL2, BLOCK 1 POL, BLOCK 1 CIA DCA POL2 CALL 1,STO /STORE ADJUSTED ARGUMENT ARG Y /IN A TEMPORARY CALL 1,FAD ARG Y /RESTORE FP AC CALL 1,FMP ARG Y /SQUARE IT CALL 1,STO ARG X TAD I POL INC POL ARG2, DCA ARG1# CALL 1,FAD ARG1, ARG COEF / ADDRESS STORED HERE ISZ POL2 JMP POL1 CALL 1,FMP /MULTIPLY AGAIN TO COMPLETE SERIES ARG Y TAD QUAD RTR SNL CLA /FIND OUT WHICH QUADRANT JMP POLEX CALL 0,CHS /IF IN QUADRANT 3 OR 4 SET NEGATIVE POLEX, JMP I POL POL1, CALL 1,FMP ARG X TAD ARG1# TAD (3 JMP ARG2 / X, BLOCK 3 /TEMPORARY FOR POL / / / 8K FORTRAN TRIGNOMETRY ROUTINES / / COS, BLOCK 1 6 TAD COS DCA SIN TAD COS# DCA SIN# /IT NOW APPEARS THAT SIN WAS CALLED CLA IAC /WITH QUADRANT OFFSET BY ONE JMP COSE SIN, BLOCK 1 6 COSE, DCA QUAD /SET QUADRANT OFFSET SWITCH TAD I SIN /PICK-UP CDF DCA SARG INC SIN# /POINT TO NEXT WORD TAD I SIN /PICK-UP ADDRESS DCA SARG# INC SIN# /POINT TO RETURN CALL 1,FAD /GET ARG IN FP-ACC SARG, ARG 0 BACK, TAD ACH /LOOK AT HIGH ORDER WORD SPA CLA /IF NEGATIVE JMP OVR /GO ON CALL 1,FSB /OTHERWISE SUBTRACT ARG HALFPI /PI/2 ISZ QUAD /AND INCREMENT QUADRANT COUNTER PATCH2, NOP /ALLOW FOR SKIP JMP BACK /UNTIL ARG IS NEGATIVE OVR, CALL 1,FAD /ADD PI/2 TO ARG UNTIL IT IS IN ARG HALFPI /THE FIRST QUADRANT CLA CMA TAD QUAD /BUT KEEP TRACK OF WHICH QUADRANT IT WAS IN DCA QUAD TAD ACH /GET HI ORDER WORD SPA CLA JMP OVR /IF NEGATIVE REPEAT TAD QUAD /FIND OUT WHAT QUAD IT WAS IN RTR SMA CLA JMP ON CALL 0,CHS /SUBTRACT FROM PI/2 IF QUAD 2 OR 4 CALL 1,FAD ARG HALFPI ON, TAD (6 /USE A 6 TERM SERIES CPAGE 3 JMS POL COEF /ADRESS OF COEFICIENTS FOR THE SERIES RETRN SIN END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBRARY/UTILTY.SB.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 | /UTILITY SUBROUTINE PACKAGE OS8 FORTRAN II LIBRARY / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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. / / / / / / / / / / /UTILITY SUBROUTINE PACKAGE OS8 FORTRAN II LIBRARY / VERSION 10A (APRIL 28, 1977) / VERSION NUMBER IS AVAILABLE AT ENTRY POINTS / ENTRY OPEN /INITIALIZING AND FLAG SETTING ROUTINE ENTRY GENIO ENTRY EXIT /EXIT TO DISK MONITOR SYSTEM ENTRY ERROR ENTRY CKIO /USELESS ROUTINE OPDEF KRS 6034 OPDEF KCC 6032 OPDEF TADI 1400 OPDEF DCAI 3400 OPDEF JMSI 4400 OPDEF JMPI 5400 / CARD READER IOT'S OPDEF RCSE 6672 OPDEF RCSP 6671 OPDEF RCSF 6631 OPDEF RCRA 6632 /LINE PRINTER IOT'S OPDEF LLB 6666 OPDEF LSF 6661 LAP U17, 17 /*** MUST BE FIRST LOC IN PAGE *** IOER, 1117 0522 /"IOER" ERROR GENIO, BLOCK 1 10 /GENERAL INPUT/OUTPUT ROUTINE DCA 7 /SAVE ENTRY AC GENLP, TAD 7 RTL RTL RAL U200, AND U17 TAD JMPITB DCA DSPACH /INDEX JUMP TABLE BY DEVICE NUMBER TAD U200 KRS TAD UM203 SNA CLA KSF /CHECK FOR ^C ON TELETYPE DSPACH, NOP /NO ^C - DISPATCH TO I/O ROUTINE CALL 0,EXIT JMPITB, JMPI DEVTAB DEVTAB, TTYOUT HSPOUT LPTOUT GENOUT TTYIN HSRIN CDRIN GENIN TTYFUJ /FUDGE - SEE TELETYPE INPUT ROUTINE IOERR IOERR IOERR IOERR IOERR IOERR IOERR HSPOUT, PSF JMP GENLP TAD 7 PLS GENRTN, CLA RETRN GENIO TTYIN, KSF JMP GENLP CLA CLL CML RTR /****DEPENDS ON NUMBER OF DEVICES **** JMP GENLP /TEST FOR ^C ONE LAST TIME HSRIN, ISZ T1 JMP HSRSF TAD U336 /TIME OUT-PRINT '^' TLS HLP, KSF JMP HLP AND U200 /GET 200 INTO AC KRS /READ THE CHAR. TAD UM203 SZA CLA /IS IT CONTROL C? KCC /NO-CLEAR FLAG RFC /USER TYPED-TICKLE RDR-FALL THRU RFC HSRSF, RSF JMP GENLP DCA T1 RRB RFC JMP GENRTN# U336, 336 T1, 0 UM203, -203 PCDRGC, CDRGCH /USED TO FORCE DF=CURRENT WHEN NECESSARY CDR215, 215 CDR100, 100 CDR240, 240 PCDRTB, CDRTBL /CONVERSION FROM CARD CODE TO ASCII-240 CDRCT, 0 CDRLEN, 0 CDRIN, TAD CDRCT SNA CLA JMP CDRNXT /NEW CARD NECESSARY ISZ CDRCT /ADVANCE TO NEXT COLUMN JMP CDRGET TAD CDR215 /NO MORE - SEND A CARRIAGE RETURN JMP GENRTN# CDREST, KSF JMP CDRTST KCC CDRNXT, RCSE JMP GENLP /CHECK FOR ^C WHILE WAITING FOR NEXT CARD CDRTST, RCSP JMP CDRCOL /NOT END OF CARD YET TAD CDRCT /END OF CARD - SET UP FOR EXTRACTION OF CHARS CIA DCA CDRLEN CDRGET, TAD CDRCT TAD CDRLEN /FORM CHAR POINTER INTO TABLE AT 10100 CLL RAR TAD CDR100 6211 JMSI PCDRGCH /INDEX TABLE AND PULL OUT CHAR (DF=10) TAD CDR240 /CHANGE TO ASCII JMP GENRTN# /RETURN CDRCOL, RCSF /ANYTHING YET? JMP CDREST /KEEP LOOKING RCRA /READ IT CLL RAR TAD PCDRTB JMS I PCDRGC /GET TABLE ENTRY, FORCING DATA FIELD CURRENT DCA CDRLEN /SAVE IT TEMPORARILY TAD CDRCT CIA CLL RAR TAD CDR100 /INDEX TABLE AT LOC 10100 DCA DSPACH 6211 /CDF 10 TAD CDRLEN SZL /WHICH HALF? JMP CDNORT /RIGHT HALF RTL RTL RTL SKP CDNORT, TADI DSPACH /ADD EXISTING LEFT HALF DCAI DSPACH /SAVE UPDATED ENTRY CLA CMA TAD CDRCT DCA CDRCT /UPDATE COLUMN POINTER JMP CDRCOL PAGE U377, 377 /MUST BE FIRST LOC IN THIS PAGE GENIN, 6201 TADI IHNDLR SNA CLA /OPEN INPUT FILE? JMP IOERR /NO 6202 JMS I FICHAR /GET A CHAR JMP IOERR /INPUT ERROR UU200, AND U377 GRTN2, RETRN GENIO GENOUT, 6201 TADI OHNDLR SNA CLA /OPEN OUTPUT FILE? JMP IOERR /NO 6202 TAD 7 /GET CHAR TO BE OUTPUT AND U377 JMS I FOCHAR /PUT A CHARACTER JMP IOERR /OUTPUT ERROR JMP GRTN2 IHNDLR, 122 /***ALL THESE LOCATIONS ARE VERY VOLATILE!! *** FICHAR, 606 /******* OHNDLR, 121 /******* FOCHAR, 651 /****************** / / INITIALIZING SUBROUTINE CALLED BY FORTRAN / CLEARS FLOATING AC AND SETS FLAGS / OPEN, BLOCK 1 10 TAD (212 TLS /PUT LINE-FEED ON TTY LLB /INITIALIZE LPT KCC /CLEAR KEYBOARD FLAG (AND AC) PLS RFC CALL 0,CLEAR 6201 DCAI IHNDLR DCAI OHNDLR /ZERO DEVICE-INDEPENDENT IO FLAGS RETRN OPEN LPTOUT, LSF JMP GENLP TAD 7 ISZ PFSTCH JMP NOFST TAD (-1262 /LOOK FOR CONTROL CHARS IN PRINT POSITION 1 CLL IAC IAC SNL JMP DCACH CLL RAL TAD (212 NOFST, LLB TAD (-1212 DCACH, SNA CLA /IF LINE FEED CMA /SET "FIRST CHAR" SWITCH ON DCA PFSTCH JMP GRTN2 PFSTCH, -1 TTYFUJ, TAD UU200 KRS DCA 7 /SAVE KEYBOARD CHAR KCC /CLEAR FLAG TAD 7 TAD (-212 SZA CLA JMS TYPE TAD 7 TAD (-215 SZA CLA JMP TYRTN CLA CLL CMA RTL JMS TYPE TYRTN, TAD 7 JMP GRTN2 /RETURN WITH CHAR IN AC TYPE, 0 TAD 7 TYPELP, TSF JMP TYPELP TLS CLA JMPI TYPE TTYOUT, JMS TYPE JMP GRTN2 IOERR, CALL 1,ERROR ARG IOER CDRTBL, 0021;2223;2425;2627 3031;3203;4007;3502 2017;6364;6566;6770 7172;7514;0577;3637 1552;5354;5556;5760 6162;0104;1211;3374 0641;4243;4445;4647 5051;7316;3410;1376 PAGE PMESG, MESG MESG, 7777 7777 4005 2222 1722 4001 2440 1417 0340 LIT7, 0007 ERROR, BLOCK 1 10 /ERROR PROCESSOR U7600, 7600 TAD ERROR DCA TEM1 TEM1, NOP /SET DATA FIELD OF "CALL ERROR" TADI ERROR# DCA TEM3 INC ERROR# E60, CLA CMA CML /CML IS WINDOW DRESSING TADI ERROR# DCA 10 INC ERROR# TEM3, NOP /DATA FIELD OF MESSAGE&ENTRY POINT DCA CKIO /ZERO "FATAL ERROR" FLAG TADI 10 RAL SZL /NON-FATAL BIT ON? ISZ CKIO /YES - SET "FATAL FLAG" TO NON-FATAL CLL RAR /STRIP NON-FATAL BIT FROM MESSAGE DCA MESG TADI 10 /SECOND WORD OF MESSAGE DCA MESG# TADI 10 DCA TEM1 TADI 10 DCA TEM3 /CALLING ADDRESS TAD PMESG DCA TEM2 ERLP, TAD I TEM2 RTR RTR RTR JMS PR6BIT TAD I TEM2 JMS PR6BIT INC TEM2 JMP ERLP PRLOC, TAD TEM1 RTR RTR JMS ERTTY /PRINT CALLING FIELD TAD (-4 DCA TEM2 NUMLP, TAD TEM3 RTL RAL DCA TEM3 TAD TEM3 JMS ERTTY ISZ TEM2 JMP NUMLP TAD (215 DCA 7 JMS TYPE CLA CLL CMA RTL JMS TYPE TAD CKIO /GET THE FATAL ERROR FLAG SNA CLA /WHADDOWEDO?? JMP EXITX RETRN ERROR /HE SAYS ITS NON-FATAL - LET HIM HANDLE IT ERTTY, 0 /DIGIT PRINTING ROUTINE RAL AND LIT7 TAD E60 JMS PR6BIT JMP I ERTTY PR6BIT, 0 /6BIT TO 8BIT CONVERTOR AND (77 SNA JMP PRLOC /MESSAGE OVER TAD (7740 SPA TAD (100 TAD (240 CALL 0,GENIO /LOOK FOR ^C WHILE TYPING JMP I PR6BIT / /EXIT TO DISK MONITOR SYSTEM / EXIT, BLOCK 1 10 EXITX, CALL 0,CKIO 6203 JMPI U7600 /RETURN TO MONITOR CKIO, 0 TEM2, 10 /DUMMY SUBROUTINE TO WAIT FOR I/O COMPLETE CKWAIT, 6041 JMP CKWAIT RETRN CKIO CDRGCH, 0 /GET A CHAR FROM A PACKED TABLE DCA TEM2 /WORD PTR IN AC, LEFT/RIGHT SW IN LINK TADI TEM2 /PRESERVE ENTRY FIELD SZL JMP CDRAND /RIGHT HALF RTR RTR RTR CDRAND, AND CDR77 JMP I CDRGCH /RESTORE CURRENT FIELD AND GET OUT CDR77, 77 END |
Added src/os8/uni/LANGUAGE/FORTRAN2/LIBSET.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 | /LIBSET - LIBRARY BUILDER PROGRAM / / / / / / / / / /COPYRIGHT (C) 1974,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 MANUAL. / /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. / / / / / / / / / / FIELD 1 HILOC=20 INFPTR=21 IFPTR=22 TEMP=23 NAMPTR=24 /VERSION=3 /PATCH="A *2600 START, SKP JMP .+4 CALLCD, JMS I (200 5 RL, 2214 0 /DON'T RESET OUTPUT FILES ISZ FIRST JMP NOTFST TAD I (7604 SNA TAD RL DCA I (7604 TAD I (7600 SZA CLA /IS THERE AN OUTPUT FILE? JMP OUTYES /YES CLA IAC DCA I (7600 /NO - MAKE SYS:LIB8.RL THE OUTPUT FILE TAD (1411 DCA I (7601 TAD (0270 DCA I (7602 TAD I (7617 SNA CLA /HOW ABOUT INPUT FILES? TAD I (MPARAM+1 AND (40 /IF NO INPUT FILES, SNA CLA /AND /S OPTION IS ON, JMP OUTYES DCA PTRCOD /USE PTR: FOR INPUT JMS I (200 12 4224 PTRCOD, 0 0 JMP I PERROR /NO PTR - BAD TAD PTRCOD DCA I (7617 OUTYES, JMS I (XOPEN JMS I (OCHAR JMS I (DMPREC /PUT OUT NOTHIN IN FIRST RECORD TAD (7000 DCA NAMPTR TAD (7376 DCA INFPTR NOTFST, TAD (7617 DCA IFPTR FILELP, TAD I IFPTR SNA CLA JMP NEXTCD TAD IFPTR JMS I (IOPEN READLP, CLA CMA TAD I (OUCCNT DCA FLEN DCA HILOC JMS I (IREAD /READ AND COPY A RELOCATABLE PROGRAM SZA CLA /TEST CHECKSUM JMP I PERROR TAD HILOC AND (7600 TAD FLEN DCA I INFPTR JMS I (DMPREC ISZ INFPTR DCA I INFPTR CLA CLL CMA RTL TAD INFPTR DCA INFPTR TAD I (MPARAM+1 AND (40 SZA CLA JMP READLP /IF /S SWITCH ON , CONTINUE READING TAPES UNTIL A ^Z NXFIL, ISZ IFPTR ISZ IFPTR JMP FILELP NEXTCD, TAD I (MPARAM-1 SMA CLA JMP CALLCD DCA I NAMPTR ISZ NAMPTR ISZ NAMPTR ISZ NAMPTR DCA I NAMPTR TAD NAMPTR CMA IAC TAD INFPTR SMA CLA JMP I (FINISH JMP I .+1 TOOBIG FIRST, -1 FLEN, 0 JTABL, DATAWD DATAWD ERROR SYMDEF ORIGIN DATAWD DATAWD PERROR, ERROR ENDTAP ERROR COMMON ERROR ERROR ERROR ERROR TRANVC VERSON, 6301 /VERSION AND PATCH LEVEL *3000 IREAD, 0 TAD (200 DCA LOC ILEADR, JMS I (ICHAR DCA CKSM TAD CKSM AND (177 SNA CLA JMP ILEADR TAD CKSM TAD (-232 SNA CLA JMP I (NXFIL TAD (200 JMS I (OCHAR TAD CKSM JMS I (OCHAR TAD CKSM SKP NXTFRM, JMS RCHAR CLL RTR RTR RAR DCA CHAR1 TAD CHAR1 RAL AND (17 TAD JMPTAB DCA BTMP TAD I BTMP DCA BTMP JMP I BTMP JMPTAB, JTABL RCHAR, 0 JMS I (ICHAR DCA CHAR TAD CKSM TAD CHAR DCA CKSM TAD CHAR JMS I (OCHAR TAD CHAR JMP I RCHAR DATAWD, JMS RCHAR CLA CLL TAD LOC CMA TAD HILOC SZL CLA JMP .+3 TAD LOC DCA HILOC ISZ LOC JMP NXTFRM SYMDEF, JMS RCHAR CLA CLL CMA RTL DCA CHAR1 GTNMLP, JMS RCHAR AND (77 CLL RTL RTL RTL DCA BTMP JMS RCHAR AND (77 TAD BTMP DCA I NAMPTR ISZ NAMPTR ISZ CHAR1 JMP GTNMLP TAD INFPTR AND (377 DCA I NAMPTR ISZ NAMPTR TAD NAMPTR CIA TAD INFPTR SPA SNA CLA JMP I (TOOBIG JMP NXTFRM ORIGIN, JMS RCHAR CLA TAD CHAR1 AND (7400 TAD CHAR DCA LOC JMP NXTFRM COMMON, JMS RCHAR CLA JMP NXTFRM TRANVC, JMS RCHAR CLL RAL TAD CHAR CLL RAL CIA DCA BTMP JMS RCHAR CLA ISZ BTMP JMP .-3 JMP NXTFRM ENDTAP, TAD CKSM CIA TAD CHAR DCA BTMP JMS RCHAR CLA TAD CHAR1 AND (7400 TAD CHAR TAD BTMP JMP I IREAD LOC, 0 CHAR1, 0 CHAR, 0 BTMP, 0 CKSM, 0 *3200 XOPEN, 0 TAD (7577 DCA 10 TAD (FILENM-1 DCA 11 TAD (-5 DCA 12 TAD I 10 DCA I 11 ISZ 12 JMP .-3 JMS I (OOPEN TAD I (OUBLK DCA CTLWRI TAD I (OUHNDL DCA ODVH JMP I XOPEN DMPREC, 0 JMS I (OCHAR JMS I (OCHAR TAD I (OUDWCT TAD (200 SZA CLA JMP .-4 JMP I DMPREC FINISH, JMS I (OCLOSE CIF 0 JMS I ODVH 4210 7000 CTLWRI, 0 JMP OUTERR CDF CIF 0 JMP I (7605 FILENM, ZBLOCK 5 ODVH, 0 TOOBIG, ISZ ERRNO ERROR, ISZ ERRNO OUTERR, ISZ ERRNO INERR, ISZ ERRNO ERR, TAD ERRNO TAD (ERR0 DCA EPCH DCA ERRNO TAD I EPCH DCA ODVH ERRLP, TAD I ODVH RTR RTR RTR JMS EPCH TAD I ODVH JMS EPCH ISZ ODVH JMP ERRLP ERXIT, CDF CIF 0 JMP I .+1 7605 EPCH, 0 AND (77 SNA JMP ERXIT TAD (-40 SPA TAD (100 TAD (240 6046 6041 JMP .-1 CLA JMP I EPCH ERRNO, 0 *3400 /ERROR MESSAGES ERR0, HELP INPER OUPER RELER BIGER HELP, TEXT /HELP!/ /THIS ERROR CANNOT OCCUR INPER, TEXT /INPUT ERROR/ OUPER, TEXT /ERROR WHILE WRITING OUTPUT FILE/ RELER, TEXT /BAD FORMAT OR CHECKSUM - TRY AGAIN./ BIGER, TEXT /LIBRARY DIRECTORY OVERFLOW - TOUGH/ INBUF=0 INCTL=2400 OUBUF=6000 OUCTL=4200 INDEVH=6400 OUDEVH=7000 INRECS=12 MPARAM=7643 DCB=7760 INFLD=INCTL&70 /GET FIELD OF INPUT BUFFER OUFLD=OUCTL&70 /DITTO OUTPUT BUFFER *2000 IN7400, 7400 IOPEN, 0 DCA INXPTR CLA CMA DCA INCHCT /SET INCHCT TO FORCE A READ ISZ INEOF /SET END-OF-FILE FLAG TO FORCE A NEW FILE 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 I (ERROR 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 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 JMP INERRX /SOME KIND OF HANDLER ERROR 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 JMP I (INERR 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 INRTRN, 0 /RESTORE CALLING FIELDS JMP I ICHAR /AND RETURN INXPTR, 0 INEOF, 1 /THESE PARAMETERS ARE SET UP SO THAT /IOPEN IS UNNECESSARY. INNEWF, -1 INCHCT=INNEWF CDF 10 TAD (INDEVH+1 DCA INHNDL /INITIALIZE HANDLER ADDRESS TAD I INXPTR SNA /ANY MORE? JMP I INNEWF /NO - OUT OF INPUT JMS I IN200 1 /ASSIGN, FETCH HANDLER INHNDL, 0 HLT /HUH? TAD I INXPTR 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 INXPTR TAD I INXPTR DCA INREC /STORE STARTING RECORD NUMBER OF FILE ISZ INXPTR DCA INEOF /ZERO END-OF-FILE FLAG ISZ INNEWF JMP I INNEWF INCTR=IOPEN PTP=20 *2200 OOPEN, 0 OU7600, 7600 RDF TAD OUCDIF DCA OORETN JMS OUASGN OUENTR, TAD I OU7600 JMS I (200 3 /ENTER OUTPUT FILE OUBLK, FILENM+1 OUELEN, 0 /REPLACED WITH LENGTH OF HOLE JMP OEFAIL /FAILED - MAYBE WE ASKED TOO MUCH DCA OUCCNT JMS I (OUSETP OORETN, HLT /RESTORE CALLING FIELDS JMP I OOPEN OEFAIL, TAD I OU7600 AND (7760 /GET REQUESTED LENGTH SNA CLA /WAS IT AN INDEFINITE REQUEST JMP I (OUTERR TAD I OU7600 AND (17 /MAKE THE REQUESTED LENGTH ZERO DCA I OU7600 JMP OUENTR /TRY, TRY AGAIN OUASGN, 0 TAD (OUDEVH+1 DCA OUHNDL CDF 10 TAD I (FILENM AND (17 /STRIP OFF ANY LENGTH INFO SNA /IS THERE AN OUTPUT DEVICE? JMP I (OUTERR JMS I (200 1 /ASSIGN, FETCH HANDLER OUHNDL, 0 /OUTPUT DEVICE HANDLER ENTRY HLT /HUH? JMP I OUASGN OUTDMP, 0 DCA OUCTLW /STORE THE CONTROL WORD 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 (OUTERR OUCDIF, CDF CIF 0 CDF 10 JMS I OUHNDL OUCTLW, 0 OUBUF OUREC, 0 JMP I (OUTERR JMP I OUTDMP OCLOSE, 0 RDF TAD OUCDIF DCA OCRET JMS I (OCHAR JMS I (OCHAR FILLLP, JMS I (OCHAR 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 NODUMP, JMS OUASGN /REASSIGN OUTPUT HANDLER TAD I (FILENM JMS I (200 4 /CLOSE THE OUTPUT FILE OU7601, FILENM+1 OUCCNT, 0 JMP I (OUTERR OCRET, HLT /RESTORE CALLING FIELDS JMP I OCLOSE *2400 OUSETP, 0 /ROUTINE TO INITIALIZE CHARACTER POINTERS TAD (OUCTL&3700 /GET SIZE OF BUFFER IN DOUBLEWORDS CIA /NEGATE IT DCA OUDWCT TAD (OUBUF 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 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 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, 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 KRS TAD (-203 SNA CLA /IS THE TELETYPE BUFFER A ^C KSF /WITH THE TELETYPE FLAG ON? JMP I CTCTST /NO CDF CIF 0 /YES - GO TO MONITOR JMP I (7605 /THROUGH THE "DON'T SAVE CORE" RETURN $ |
Added src/os8/uni/LANGUAGE/FORTRAN2/LOADER.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 | /OS8 FORTRAN II RELOCATING LOADER V4 / / / / / / / // / / / / /COPYRIGHT (C) 1973, 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. / / / / / / /LOADER.07 DECEMBER 5, 1973 / / /CHANGES MADE FOR V4 J.K. 1975 / / .VERSION NUMBER PRINTED ON MAP / .BIT ZERO OF 17645 IS USED INSTEAD OF THE WHOLE / WORD TO INDICATE THAT THE LOADER WAS CHAINED / TO FROM SABR / .CORE ROUTINE STANDARIZED / .CHECK FOR BATCH CORRECTED / / /FIELD 0, PAGE 0 VERSION=6400 /PRINTS ON MAP PATCH=01 JSTFLD= 7744 JSTADR= 7745 JSBITS= 7746 MOFILE= 7600 MIFILE= 7617 MPARAM= 7643 DCB= 7760 MSTCDF= 7772 MSTADR= 7775 SHNDLR= 7607 MGET= 7667 MTEMP= 27 OLDT9= 7 /LOCATION OF HANDLER ENTRY OF DEVICE /WITH DIRECTORY IN CORE *0 ZERO, JMS I XSHNDLR ONE, 2010 3600 MTEMP+11 HLT FIVE, JMP I .+1 7600 XSHNDLR,SHNDLR X1, 0 X2, 0 X3, 0 X4, 0 *16 NOPUNC *100 ENPUNC DFRSTR, CIF 10 JMS I DF200 11 /KICK OUT MONITOR DFSAVE, 0 /RESTORE CALLING FIELD JMP I CDZSKP /AND EXIT SAVEDF, 0 /COMMON SAVE-FIELD PROCESSOR FOR FORTRAN I/O DCA CDZSKP /CALLING ADDRESS RDF TAD .+2 DCA DFSAVE /CALLING FIELD CDF CIF 0 JMP I SAVEDF DF200, 200 /RUN-TIME SYSTEM PAGE 0 - PROPAGATED TROUGH ALL FIELDS *33 BNK=00 / / COMMON SUBROUTINE CALL LINKAGE ROUTINE / LINK, 0 K6201, CDF BNK /SET DATA FIELD TO THIS BANK K6202, CIF 00 /SET INSTRUCTION FIELD TO ZERO JMP I MLINKP /EXIT TO MASTER LINKAGE ROUTINE MLINKP, MLINK / / COMMON SUBROUTINE RETURN LINKAGE ROUTINE / RTN, 0 CDF BNK /SET DATA FIELD TO THIS BANK CIF 00 /SET INSTRUCTION FIELD TO ZERO JMP I MRTNP /EXIT TO MASTER RETURN ROUTINE MRTNP, MRTN / / CHANGE DATA FIELD TO CURRENT AND SKIP / CDFSKP, 0 ISZ CDFSKP /INDEX ADDRESS FOR SKIPPING CDF BNK /CHANGE DATA FIELD TO CURRENT BANK JMP I CDFSKP /EXIT / / CHANGE DATA FIELD TO ZERO AND SKIP / CDZSKP, 0 ISZ CDZSKP /INDEX RETURN ADDRESS FOR SKIPPING CDF 10 /CHANGE DATA FIELD TO ZERO JMP I CDZSKP /EXIT / / OFF BANK INDIRECT SUBROUTINE / OBISUB, 0 CDF BNK /SET DATA FIELD TO THIS BANK CIF 00 /SET INSTRUCTION FIELD TO ZERO JMP I MOBIP /EXIT TO MASTER OFF BANK INDIRECT SUBROUTINE MOBIP, MOBI / / OFF PAGE INDIRECT SUBROUTINE / OPISUB, 0 CDF BNK /SET DATA FIELD TO THIS BANK CIF 00 /SET INSTRUCTION FIELD TO BANK 0 JMP I MOPIP /EXIT TO MASTER OFF PAGE INDIRECT SUBROUTINE MOPIP, MOPI / / ROUTINE TO HANDLE DUMMY ARGUMENTS / DUMSUB, 0 CDF BNK /SET DATA FIELD TO THIS BANK CIF 00 /SET INSTRUCTION FIELD TO BANK 0 JMP I MDUMP /EXIT TO MASTER DUMMY ARGUMENT ROUTINE MDUMP, MDUM / PAGE 0 CELLS FOR FORTRAN EXECUTION TIME I/O / CELLS SET UP BY LINKING LOADER - CANNOT GO PAST 77 INHNDL, 0 /PAGE FOR INPUT HANDLER IF /I SWITCH WAS ON OUHNDL, 0 /PAGE FOR OUTPUT HANDLER IF /O SWITCH WAS ON ELENGT, 0 /"DESIRED LENGTH" FOR FORTRAN OUTPUT FILES - USUALLY 0 *DF200+1 /OTHER PAGE 0 LOCATIONS FOPOLD, 0 FINPTR, 0 FICHCT, 0 /MUST BE INIT. TO -1 AT LOOKUP FINTMP, 0 /MUST BE INIT. TO 10 AT LOOKUP OHNDLR, 0 /SET BY FENTER - CLEARED BY FCLOSE IHNDLR, 0 /SET BY FLUKUP - NEVER CLEARED FOUPTR, 0 FOCHCT, 0 *200 LSTART, JMP I (LDRZZ1 SSTART, CDF 10 TAD I (MPARAM+2 SMA CLA JMP NOTSBR TAD I (MPARAM+2 AND (3777 DCA I (MPARAM+2 TAD I (MOFILE SNA CLA JMP LDRYYY TAD (MOFILE+11 DCA X1 TAD (MOFILE DCA SEVEN TAD (-5 DCA SIX TAD (TEMP-1 DCA X2 MOVLP1, TAD I SEVEN CDF 0 DCA I X2 CDF 10 TAD I X1 DCA I SEVEN ISZ SEVEN ISZ SIX JMP MOVLP1 TAD TEMP+1 /GET BLOCK NUMBER WHICH SABR PLACED HERE DCA I (MIFILE+1 DCA I (MIFILE+2 CLA CLL CMA RAL AND I (MPARAM DCA I (MPARAM /REMOVE /L SWITCH FROM SABR INPUT CDF 0 CIF 10 CLA IAC JMS I (200 4 /DELETE FORTRL /THE FILE "FORTRL.TM" IF IT EXISTS 0 NOP /IT DIDN'T EXIST - BIG DEAL TAD TEMP LDRYYY, CDF 10 DCA I (MIFILE NOTSBR, CIF 10 CDF 0 JMS I (200 12 /GET DEVICE NUMBER WITHOUT HANDLER 2424 /TT TTYNUM, 3100 /Y 1000 /RANDOM NUMBER JMP LWOWIE /WHAT - NO TELETYPE??? CIF 10 CLA IAC /DEVICE "SYS" JMS I (200 2 PTSLIB, SYSLIB 0 /USELESS LENGTH WORD CLA SKP TAD PTSLIB CDF 10 DCA I (PSYSLB TAD TTYNUM DCA I (TTYNO /STORE AWAY TTY DEVICE NUMBER JMS I (BATCK CORO, TAD CORSIZ /GET FLD OF TEST RTL RAL AND COR70 TAD COREX /MASK USEFUL BITS DCA .+1 COR1, CDF TAD I CORLOC /SAVE CURRENT CONTENTS COR2, NOP DCA COR1 TAD COR2 DCA I CORLOC COR70, 70 TAD I CORLOC /TRY TO READ BACK CORX, 7400 TAD CORX TAD CORV /TAD (1400) SZA CLA JMP COREX /NON-EXISTENT FLD EXIT TAD COR1 DCA I CORLOC /RESTORE LOC ISZ CORSIZ JMP CORO COREX, CDF 0 TAD CORSIZ CIA FOUNDX, CDF CIF 10 DCA I (WROVLY /POSTPONE SPREADING FIELD ZERO RESIDENT TAD (TTYOUT / THRU FIELDS UNTIL /I,/O AND /H ARE TESTED DCA I (TYPE JMP I .+1 LDRXXX SIX, 0 SEVEN, 0 LWOWIE, CDF CIF 10 JMP I (SIOERR CORLOC, CORX CORV, 1400 CORSIZ, 1 TEMP, 0;0;0;0 PAGE /FULL LINKAGE ROUTINES FOR RUN-TIME SYSTEM *400 K77A, 0077 /MUST BE FIRST LOC ON PAGE / / MASTER OFF PAGE INDIRECT ROUTINE / MOPI, DCA AC /SAVE AC TAD I OPIP /PICK UP ADDRESS OF PARAMETER DCA DUMSUB TAD I DUMSUB /ACTUAL PARAMETER DCA 7 /TO A TEMP TAD I 7 /PICK UP FINAL DATA DCA I K7 /TO LOCATION 7 IN FROM BANK RDF /FROM BANK ATVX, TAD K6202 /MAKE A CIF FROM INSTRUCTION DCA ATV /SAVE IN THIS SEQUENCE JMP ATV-1 / / MASTER OFF BANK INDIRECT ROUTINE / MOBI, DCA AC /SAVE AC TAD I OBIP /ADDRESS OF PARAMETER DCA DUMSUB TAD I DUMSUB /ACTUAL COMMON ADDRESS DCA 7 /SAVE IT RDF /FROM BANK TAD K6201 /MAKE A CDF FROM INSTRUCTION DCA .+3 /PLACE IN THIS SEQUANCE CDF 10 /CHANGE DATA FIELD TO COMMON TAD I 7 /ACTUAL DATA NOP /BECOMES CDF AND CIF FROM INSTRUCTION DCA I K7 /TO LOCATION 7 IN FROM BANK RDF CDF 10 JMP ATVX / MASTER INDIRECT DUMMY ARGUMENT SUBROUTINE MDUM, DCA AC /SAVE AC TAD I DUMP /PICK UP ADDRESS OF PAR DCA DUMSUB TAD I DUMSUB /PICK UP POINTER TO 2 WORD VECTOR DCA DUMTEM /TO A TEMPORARY TAD I DUMTEM /FIELD DATA IS IN AS A CDF DCA ABCRT /TO THIS SEQUANCE RDF /FROM FIELD TAD K6202 /MAKE A CIF INSTRUCTION DCA ATV /TO THIS SEQUANCE FOR EXIT ISZ DUMTEM /POINT TO LOCATION IN FIELD TAD I DUMTEM /ACTUAL LOCATION IN UNKNOWN FIELD DCA I K7 /TO FROM FIELD LOCATION 7 ABCRT, NOP /BECOMES CDF UNKNOWN ISZ DUMSUB /BUMP RETURN ADDRESS ATV, NOP /BECOMES CIF FROM TAD AC /RESTORE AC JMP I DUMSUB /EXIT AC= CDZSKP DUMTEM= OBISUB OPIP, OPISUB OBIP, OBISUB DUMP, DUMSUB / / MASTER LINKAGE ROUTINE / MLINK, DCA AC /SAVE AC RDF TAD K6201 /MAKE A CDF DCA DUMTEM TAD I LINKP /ADDRESS OF CODE WORD JMS RTS1 TAD DUMTEM /CDF FROM INSTRUCTION DCA I DUMSUB /TO FIRST WORD OF 2 WORD VECTOR ISZ DUMSUB /POINT TO DISPLACEMENT TAD LINK /ADDRESS OF CODE WORD IAC /INCR. TO FIRST ARG DCA I DUMSUB /TO SECOND WORD OF 2 WORD VECTOR JMP ATVX-1 / / MASTER RETURN ROUTINE / MRTN, DCA AC /SAVE AC TAD I RTNP /ADDRESS OF CODE WORD JMS RTS1 TAD I DUMSUB /FIELD TO RETURN TO AS A CDF INSTRUCTION TAD K2 DCA ATV ISZ DUMSUB TAD I DUMSUB DCA DUMSUB JMP ATV /DATA K100A, 100 K7700A, 7700 LINKP, LINK RTNP, RTN / /SUBROUTINE 1 / RTS1, 0 DCA LINK TAD I LINK /CODE WORD K200A, AND K77A /MASK OUT NUMBER OF ARGUMENTS TAD K200A /+DISPLACEMENT DCA ABCRT /GIVES ADDRESS OF BCRT ENTRY TAD ABCRT TAD K100A /+DISPLACEMENT DCA ATV /GIVES ADDRESS OF TV DISPLACEMENT CDF CIF 0 /(TABLES IN FIELD 0!) TAD I ABCRT /TO CDF INSTRUCTION DCA RTSCDF /TO FIRST WORD OF 2 WORD VECTOR TAD I ATV /TO BANK DISPLACEMENT SNA /WAS IT LOADED? JMP NOTIN /NO DCA DUMSUB /TO SECOND WORD OF 2 WORD VECTOR RTSCDF, 0 JMP I RTS1 NOTIN, CIF 10 JMS I K7700A K7, 7 1 /USER ERROR 1 - PROGRAM NOT LOADED FASIGN, 0 /CALLED FROM SABR - DOES ASSIGN AND DCA CDFSKP /EITHER LOOKUP,ENTER OR CLOSE TAD FASIGN JMS SAVEDF CIF 10 JMS I K7700A 10 /CALL USR IN CIF 10 JMS I K200A 1 /ASSIGN HANDLER ASDEV, 0;0 /SET UP BY SABR ASPAGE, 0 /DITTO JMP ASERR /ASSIGN FAILURE ZRONAM, DCA FLUNAM /ZERO FILENAME FOR LOOKUP TAD ASDEV+1 /PUT DEVICE NUMBER IN AC JMP I CDFSKP /JUMP TO APPROPRIATE ROUTINE *567 /MUST CROSS PAGE BOUNDARY JUST SO FLUKUP, CIF 10 JMS I K200A K2, 2 /LOOKUP FILE FLUNAM, 0 /REPLACED BY BLOCK NUMBER FLUCNT, 0 /REPLACED BY LENGTH (UNUSED) ASERR, ISZ CDZSKP /SKIP RETURN IF ERROR TAD ASPAGE DCA IHNDLR /SET UP INPUT HANDLER ENTRY AND FLAG TAD FLUNAM FINRXX, DCA FINREC /***** THIS SHOULD BE AT LOC 600! ***** CLA CMA DCA FICHCT TAD FIN10 DCA FINTMP JMP FRESET /RESET I/O AND RETURN FROM FASIGN IFNZRO FINRXX-600 <FINERR,_ERROR> /GET A CHARACTER ROUTINE. /RETURNS TO .+1 IF ERROR, .+2 IF NORMAL /CHAR IN AC ON OUTPUT /DOES NOT HANDLE END-OF-FILE VERY WELL FICHAR, 0 TAD FICHAR JMS SAVEDF /SAVE RETURN FIELD AND ADDRESS FNXTCH, ISZ FICHCT /BUMP CHAR COUNT JMP FIGET JMS I IHNDLR /IT OVERFLOWED - READ IN A NEW BUFFER FI200, 200 FINBUF, 1200 FINREC, 0 FI7700, SMA CLA SKP /END - OF - FILE ERROR - IGNORE JMP DFSAVE /ERROR RETURN ISZ FINREC CLA CMA TAD FINBUF DCA FINPTR TAD FI7200 DCA FICHCT /INITIALIZE FOR NEW RECORD FIGET, TAD FINTMP /GET HIGH-ORDER-BIT BUFFER SPA /IS IT FULL? JMP FITHRD /YES - OUTPUT COMBINED HIGH-ORDER BITS FI7200, CLA ISZ FINPTR TAD I FINPTR /GET A LOC FROM THE BUFFER AND FI7400 RAL CLL TAD FINTMP /PUT THE HIGH ORDER BITS ONTO THE HOB BUFFER FINXX, RTL RTL DCA FINTMP TAD I FINPTR JMP DFEXIT /RETURN WITH SKIP FITHRD, DCA I FINPTR /FUDGE THIRD CHAR INTO BUFFER CLL CML JMP FINXX /RESET FINTMP TO 10 /PUT A CHARACTER /RETURNS TO .+1 IF ERR, .+2 IF NORMAL /CALLED WITH CHAR IN AC FOCHAR, 0 DCA FOUTMP /SAVE CHAR TAD FOCHAR JMS SAVEDF /SAVE CALLING FIELD AND LOC FOLOOP, ISZ FOUJMP ISZ FOCHCT /BUMP CHAR COUNT FOJMP, JMP FOUJMP /TAKE A BRANCH OF THE THREE-WAY JUMP JMS I OHNDLR 4200 FOUBUF, 1200 FOUREC, 0 JMP DFSAVE /OUTPUT ERROR ISZ FOUREC JMS FOSETP ISZ FOCCNT /BUMP FILE LENGTH ISZ FOOCNT /ALSO ENTER COUNT JMP FOLOOP /NOW GO PUT THE CHAR INTO THE NEW BUFFER JMP DFSAVE /ENTER COUNT OVERFLOWED - ERROR RETURN FOUJMP, JMP . /THREE-WAY SWITCH JMP FOUCH1 JMP FOUCH2 FOUCH3, TAD FOUTMP RTL RTL DCA FOUTMP TAD FOUTMP AND FI7400 TAD I FOPOLD /PUT HIGH ORDER BITS OF CHAR3 DCA I FOPOLD /INTO HIGH ORDER BITS OF CHAR 1 TAD FOUTMP RTL RTL AND FI7400 TAD I FOUPTR /PUT LOW ORDER BITS OF CHAR 3 DCA I FOUPTR /INTO HIGH ORDER BITS OF CHAR 2 TAD FOJMP DCA FOUJMP ISZ FOUPTR JMP DFEXIT /RETURN NORMALLY FOUCH2, TAD FOUPTR DCA FOPOLD /SAVE POINTER TO CHAR 1 ISZ FOUPTR FOUCH1, TAD FOUTMP DCA I FOUPTR /STORE CHAR 1 OR 2 DFEXIT, ISZ CDZSKP /INCREMENT RETURN ADDR JMP DFSAVE /AND GO THERE FOSETP, 0 TAD FO7177 DCA FOCHCT TAD FOUBUF DCA FOUPTR TAD FOJMP DCA FOUJMP JMP I FOSETP FO7177, 7177 FIN10, 10 FENTER, TAD ELENGT /ELENGT=0 UNLESS SOME KLUDGE SETS IT UP CIF 10 /FENTER JUMPED TO BY FASIGN JMS I FI200 3 FOONAM, 0 /FILE NAME IN LOCS 0-3 FOOCNT, 0 ISZ CDZSKP /FOR ENTER, ERROR RETURN IS SKIP RETURN TAD FOONAM DCA FOUREC /INITIALIZE OUTPUT RECORD # JMS FOSETP /SET UP CHARACTER POINTERS DCA FOONAM /SET FOONAM FOR NEXT ENTER TAD I PASPAG JMP STOHND /GO TO COMMON CODE WITH "FCLOSE" PASPAG, ASPAGE FCLOSE, CIF 10 /JUMPED TO BY FASIGN JMS I FI200 /CALL I/O MONITOR 4 FOCNAM, 0 /FILE NAME IN 0-3 FOCCNT, 0 /CLOSING LENGTH ISZ CDZSKP /ERROR - BUMP RETURN STOHND, DCA OHNDLR DCA FOCCNT /INITIALIZE CLOSING COUNT FOR NEXT FILE FRESET, CIF 10 JMS I FI200 13 /RESET ALL DEVICE HANDLER ENTRIES 0 /BUT RETAIN ANY OPEN OUTPUT FILES JMP DFRSTR /RETURN FROM FASIGN AFTER KICKING MONITOR OUT FOUTMP= FICHAR FI7400, 7400 PAGE *1000 PROPGT, 0 /CALLED FROM FIELD 1 LOADER WHEN 1ST CDF 10 /CHECKING FOR I/O SWITCHES. DCA I LTOPCOR /-# OF CORE FIELDS IN AC TAD I LTOPCOR DCA I LFCTR TAD I LTOPCOR CDF 0 CMA /GET # OF HI CORE FIELD PROPLP, DCA FC CLA CMA TAD FC SNA CLA JMP FIELD1 TAD FC JMS CHGBNK JMS STOBNK CLA CMA TAD FC JMP PROPLP FIELD1, CLA IAC JMS CHGBNK JMS I LSHNDLR 4100 0 MTEMP JMP I LLWOWIE JMS I LSHNDLR 4201 400 MTEMP+21 /WRITE OUT RUN-TIME ROUTINES JMP I LLWOWIE JMS CHGBNK TAD L6001 DCA I LJSBITS TAD L6213 DCA I LJSTFLD TAD LLRSTRT DCA I LJSTADR CDF CIF 10 /PROPGT IS CALLED FROM FIELD 1 ONLY JMP I PROPGT FC, 0 CHGBNK, 0 CLL RTL RAL TAD LCDF DCA X1 TAD X1 DCA LINK+1 TAD X1 DCA RTN+1 TAD X1 DCA CDFSKP+2 TAD X1 DCA OBISUB+1 TAD X1 DCA OPISUB+1 TAD X1 DCA DUMSUB+1 JMP I CHGBNK STOBNK, 0 TAD LLINK1 DCA X2 TAD X2 DCA X3 TAD LLINK2 DCA X4 TAD X1 DCA STOCDF STOLUP, CDF 0 TAD I X2 STOCDF, HLT DCA I X3 ISZ X4 JMP STOLUP CDF 0 JMP I STOBNK SYSLIB, TEXT /LIB8/ 2214 /.RL LTOPCOR,TOPCOR LSHNDLR,SHNDLR LFCTR, FCTR LLWOWIE,LWOWIE L6001, 6001 LJSBITS,JSBITS LJSTADR,JSTADR LJSTFLD,JSTFLD L6213, 6213 LCDF, CDF LLINK1, LINK-1 LLINK2, LINK-MDUMP-2 LDRZZ1, CDF 10 /COME HERE IF NOT CHAINED TO DCA I LMOFIL ISZ LMOFIL ISZ LMOCNT JMP .-3 CLA CLL CMA RAL /-2 DCA I LDOPRP CDF 00 JMP I .+1 LDRYYY LMOFIL, 7600 LMOCNT, -47 LLRSTRT,LRSTRT LDOPRP, DOPROP FORTRL, FILENAME FORTRL.TM PAGE *1200 /LINKING LOADER SUBROUTINES FOR /I AND /O OPTIONS INPENB, 0 ISZ INPFLG JMP INRTRN /ALREADY HAVE A /I JMS TWOPAG /HAS USER SPECIFIED 2-PG. HNDLRS? TAD OUPFLG SPA CLA JMP INVRGN TAD K2200 DCA INHNDL TAD (FINBUF DCA I (ST1600 /MARK THE INPUT BUFFER IN PAGE 1600 TAD K2377 JMS SETHLA INRTRN, CDF CIF 10 JMP I INPENB INVRGN, TAD K1000 DCA INHNDL TAD K1577 JMP INRTRN-1 OUPENB, 0 ISZ OUPFLG JMP OURTRN JMS TWOPAG /HAS USER SPECIFIED 2 PG. HNDLRS? TAD INPFLG SPA CLA JMP OUVRGN TAD K2200 DCA OUHNDL TAD (FOUBUF DCA I (ST1600 /MARK OUTPUT BUFFER IN 1600 TAD K2377 JMS SETHLA OURTRN, CDF CIF 10 JMP I OUPENB OUVRGN, TAD K1000 DCA OUHNDL TAD K1577 JMP OURTRN-1 INPFLG, -1 OUPFLG, -1 K1000, 1000 /SET TO 1001 FOR 2 PAGE HANDLERS K2200, 2200 /SET TO 2401 FOR 2 PAGE HANDLERS. K2377, 2377 /SET TO 2577 FOR 2 PAGE HANDLERS. K1577, 1577 /SET TO 1777 FOR 2 PAGE HANDLERS. /SUBROUTINE TO CHECK FOR /H SWITCH MEANING USER /WANTS RUN TIME DEVICE INDEPENDENT I/O TO /BE ABLE TO USE 2 PAGE DEVICE HANDLERS / TWOPAG, 0 CDF 10 TAD I (MPARAM AND (20 /IS /H SWITCH SET? SNA CLA JMP I TWOPAG /NO-RETURN (DATA FLD=1) TAD (1001 /YES-RESET HANDLR FETCH TO ACCEPT DCA K1000 /TWO PAGE HANDLERS TAD (2401 /RESET FETCH FOR SECOND HANDLER DCA K2200 TAD (2777 DCA K2377 /RESET HLA CONSTANT FOR 2 PG HANDLRS TAD (1777 DCA K1577 /RESET 2ND HLA CONSTANT FOR 2 PG TAD (2000 DCA I (K1600 /RESET BUFR. ADDRESS-SEE *LDRXIT* CDF 00 TAD (1400 DCA I (FINBUF /RESET IN AND OUT BUFFER ADDRESSES TAD (1400 /TO MAKE ROOM FOR 2 PG HANDLR DCA I (FOUBUF CDF 10 JMP I TWOPAG /RETN. DATA FLD=1 SETHLA, 0 DCA I (HLAZ TAD I (HLAZ CIA DCA I (HLAIO CDF 0 JMP I SETHLA BATCK, 0 CDF 0 TAD I (7777 AND (70 SNA JMP I BATCK CLL RTR RAR CMA DCA TMPC TAD I (7777 RAL SPA CLA IAC TAD TMPC JMP I (FOUNDX TMPC, 0 PAGE FIELD 1 /FIELD 1 PAGE 0 EQUIVALENCES - FIT INTO USR CRACKS DEVHND=20 BANK=21 TM1=22 TM2=23 RECNO=24 OVLYFG=25 CUR=26 WORD=27 HLAPTR=30 HLA=31 RCON=32 COML=33 /HI COMMON LOC, 0 IF NONE TYPE=34 CSUM=35 NSUB=36 *3600 LRSTRT, DCA I (MIFILE LDRZZZ, JMS I (IONULL LDRXXX, TAD (MIFILE DCA FILPTR DCA OVLYFG DCA I (WRBFSW JMS I (START JMP IOCHEK /GO TEST FOR /I, /O ALD /0-7 LDRLP, DCA BANK TAD I FILPTR SNA JMP GETCD JMS GETHND TAD I FILPTR ISZ FILPTR DCA RECNO TAD I (MPARAM RAR SZL CLA JMP I (LBRY JMS I (LOAD JMP LDRLP GETCD, TAD I (MPARAM+3 SNA JMP LKATMP DCA I (LSTADR TAD I (MPARAM-1 CLL RAL AND (17 CLL RTL TAD (CDF CIF 0 DCA I (LSTFLD /FALL INTO NEXT PAGE LKATMP, JMS I (WRPGBF TAD I (MPARAM AND (40 SZA CLA JMP BUILD TAD I (MPARAM-1 SPA CLA JMP BUILD JMS MAP CDCALL, JMS I (200 5 2214 TAD I (MPARAM+1 AND (100 SZA CLA JMP LDRZZZ IOCHEK, JMS I (IOTEST DCA TM1 TAD (MIFILE DCA FILPTR TAD I (MPARAM+2 AND (1774 SNA JMP LDRLP RAL ISZ TM1 SNL JMP .-3 CLA CMA CLL RTL TAD TM1 JMP LDRLP FILPTR, 0 MAP, 0 TAD I (MPARAM+1 AND (4410 /"M","P" AND "U" OPTIONS SNA MAPRTN, JMP I MAP CLL RTR RTR AND (200 SZA CLA CLL CML IAC CML RAL /FORM 0 IF /U, 1 IF /P AND 2 IF /M DCA TM1 JMP I (MAPIO BUILD, TAD (SHNDLR DCA DEVHND TAD PSYSLB SZA JMS I (LBSRCH JMS MAP JMP I (BUILDX PSYSLB, 0 GETHND, 0 AND (17 DCA I (EASGN TAD (401 DCA LASGN TAD I (EASGN ISZ FILPTR JMS I (200 1 /ASSIGN LASGN, 401 JMP I (HNDERR /BAD HANDLER TAD LASGN DCA DEVHND JMP I GETHND PAGE BUILDX, TAD LSTADR SZA CLA JMP ALREDY TAD (MAIN-1 DCA X1 JMS I (SETS1 JMS I (SEARCH JMP I (ERSTAD TAD (TVEC-1 TAD I (SYMNUM DCA TM1 CDF 0 TAD I TM1 SNA JMP I (ERSTAD DCA LSTADR TAD TM1 TAD (7700 DCA TM1 CLA CLL CML RTL /CHANGE CDF TO CDF CIF TAD I TM1 DCA LSTFLD ALREDY, CDF 10 JMS I (WROVLY TAD (1400 JMS STOINF DCA OLDT9 TAD (HLA7 DCA TM1 TAD (-10 DCA X3 DCA I X1 DCA X4 BLDLP, CLA CLL CML RTL TAD X3 SNA CLA JMP BFLD1 /TREAT FIELD 1 (COMMON AREA) DIFFERENTLY BLDLPX, TAD I TM1 AND (7600 SNA JMP BLDSKP BLDLPY, TAD (170 CLL CML CMA RTR RTR TAD X3 CLL CMA RTL RAL DCA I X1 DCA I X1 ISZ X4 BLDSKP, CLA CMA TAD TM1 DCA TM1 ISZ X3 JMP BLDLP TAD X4 CIA DCA I (1400 CIF 0 JMS I (SHNDLR 4210 1200 MTEMP+10 HLT CDF 0 TAD (JSTFLD-1 JMS STOINF TAD LSTADR DCA I (MSTADR TAD LSTFLD DCA I (MSTCDF JMP I (LDRXIT BFLD1, TAD COML SNA /IS THERE ANY COMMON? JMP BLDLPX /NO CLL CMA TAD I TM1 SNL CLA /IS THERE ANY CODE IN FIELD 1? JMP BLDSKP /NO TAD (110 /SAVE FIELD 1 IN TWO SEGMENTS - PAGE 0 AND DCA I X1 /THE CODE FOLLOWING THE END OF THE COMMON AREA ISZ X4 /(THIS IS TO ENABLE "CHAIN" TO WORK PROPERLY) TAD COML IAC DCA I X1 TAD COML CMA TAD I TM1 AND (7600 JMP BLDLPY CVTREC, 0 TAD CUR CLL RTL RTL RAL AND (7 JMP I CVTREC STOINF, 0 DCA X1 TAD LSTFLD DCA I X1 TAD LSTADR DCA I X1 DCA I X1 JMP I STOINF LSTADR, 0 LSTFLD, 0 PAGE MAPIO, TAD I ML7600 SNA TAD TTYNO /TELETYPE IS DEFAULT LISTING DEVICE JMS I (GETHND TAD I ML7604 /PICK UP EXTENSION WORD. SNA /NON-ZERO? TAD (1520 /NO-SUPPLY '.MP' EXTENSION. DCA I ML7604 /YES-LEAVE ALONE TAD ML7601 DCA MNAME TAD I (EASGN TAD (100 /4 SHIFTED LEFT INTO THE "DESIRED LENGTH" POSITION JMS I (200 3 MNAME, 0 MECNT, 0 JMP I (OUERR TAD MNAME DCA ORECNO JMS OUSETP DCA MCCNT TAD (OCHAR DCA TYPE TAD TM1 CLL CML RAR JMP I (MAPX OCHAR, 0 DCA OUTEMP ISZ OJMP ISZ OCHCNT OJMPE, JMP OJMP CIF 0 JMS I DEVHND 4210 OUBUF, 4600 ORECNO, 0 JMP I (OUERR ISZ ORECNO ISZ MCCNT JMS OUSETP ISZ MECNT JMP OCHAR+2 JMP I (OUERR OUSETP, 0 TAD (-601 DCA OCHCNT TAD OUBUF DCA OUPTR TAD OJMPE DCA OJMP JMP I OUSETP OJMP, HLT /THREE-WAY JUMP FOR CHAR OUTPUT JMP OCHAR1 JMP OCHAR2 OCHAR3, TAD OJMPE DCA OJMP TAD OUTEMP RTL RTL DCA OUTEMP TAD OUTEMP AND OU7400 TAD I OUPOLD DCA I OUPOLD TAD OUTEMP RTL RTL AND OU7400 TAD I OUPTR DCA I OUPTR ISZ OUPTR JMP OUCOM OCHAR2, TAD OUPTR DCA OUPOLD ISZ OUPTR OCHAR1, TAD OUTEMP AND OU377 DCA I OUPTR OUCOM, JMP I OCHAR OCHCNT, 0 OUPOLD=OUSETP OUTEMP, 0 OU7400, 7400 OUPTR, 0 OU377, 377 /CLOSE OUTPUT FILE OCLOS, TAD (232 JMS OCHAR TAD OCHCNT CMA SZA CLA JMP .-4 JMS OCHAR TAD I (EASGN JMS I (200 4 ML7601, 7601 MCCNT, 0 JMP I (OUERR TAD (TTYOUT DCA TYPE JMP I (MAPRTN TTYOUT, 0 6046 6041 JMP .-1 ML7600, 7600 JMP I TTYOUT TTYNO, 0 /SET TO TTY DEVICE NUMBER BY INITIALIZATION IONULL, 0 TAD ML7600 DCA I (HLASZA ML7604, 7604 /POINTER TO FILE EXT. WORD JMP I IONULL PAGE LOAD, 0 DCA LREQUR TAD BANK TAD (HLAZ DCA HLAPTR JMS I (SETRCN /SET UP HLA AND RCON TAD RCON CLL CML TAD LREQUR TAD (400 SNL SZA CLA JMP LFAILD TAD RECNO DCA LRECNO CLA CMA DCA INCHCT JMS ICHAR SNA CLA JMP .-2 JMP I (MORE ICHAR, 0 TAD XX7600 /PARITY TTY HACK KRS TAD (-7603 SNA CLA KSF SKP JMP I (MGET /17667=07605 ISZ IJMP ISZ INCHCT IJMPE, JMP IJMP CIF 0 JMS I DEVHND INCTLW, 0410 INBUF, 4600 LRECNO, 0 JMP INCKEF INISZ, ISZ LRECNO ISZ LRECNO TAD IN6377 DCA INCHCT TAD INBUF DCA INPTR TAD IJMPE DCA IJMP JMP ICHAR+1 IJMP, HLT /THREE-WAY JUMP FOR CHAR INPUT JMP ICHAR1 JMP ICHAR2 ICHAR3, TAD IJMPE DCA IJMP TAD I INPTR ISZ INPTR AND IN7400 CLL RTR RTR TAD INTEMP RTR RTR JMP INCOM ICHAR2, TAD I INPTR ISZ INPTR AND IN7400 DCA INTEMP ICHAR1, TAD I INPTR INCOM, AND IN377 JMP I ICHAR INCKEF, SMA CLA JMP LRECNO+2 JMP I (INERR INPTR, 0 INCHCT, 0 INTEMP, 0 IN7400, 7400 IN377, 377 IN6377, 6377 XX7600, XER2, 7600 TAD EASGN TAD (DCB-1 DCA TM2 TAD I TM2 SPA CLA JMP DIRDEV TAD (2205 JMS I (TTWO TAD (1417 JMS I (TTWO TAD (0104 JMS I (TTWO JMS I (CRLF DIRDEV, TAD I HLAPTR ISZ BANK CMA AND XX7600 JMP LOAD+1 LFAILD, ISZ BANK JMP LOAD+2 EASGN, 0 LREQUR, 0 LOADOK, JMS I (WRPGBF JMP I LOAD SETS1, 0 TAD (S1-1 DCA X2 TAD I X1 DCA I X2 TAD I X1 DCA I X2 TAD I X1 DCA I X2 JMP I SETS1 PAGE / 4600-5177 USED FOR LOADER MAP OUTPUT BUFFER / 5200-5577 USED FOR LIBRARY DIRECTORY BUFFER *5600 /** CAN ONLY USE FIRST HALF OF THIS PAGE - 2ND HALF IS PART OF MST /** NO LITERALS IN THIS PAGE! LBRY, TAD RECNO JMS LBSRCH JMP I .+1 GETCD LBSRCH, 0 /LIBRARY SEARCH ROUTINE DCA LBREC /SAVE START BLK OF LIBRARY CIF 0 JMS I DEVHND /READ LIBRARY DIRECTORY LBCTLW, 0210 L5200, 5200 LBREC, 0 JMP I LIOERR TAD LBCTLW DCA I LINCTL TAD L7177 DCA I LIN6377 DCA I LINISZ TAD L5177 DCA X1 /INITIALIZE FOR SEARCH LBRYLP, JMS I LSETS1 /GET NEXT DIRECTORY ENTRY TAD I X1 SNA JMP I LBSRCH /END OF DIRECTORY TAD L5200 DCA LBFPTR JMS I LSEARCH /IS IT IN SYMTAB? JMP LBRYLP /NO TAD I LSYMNUM TAD LTVEC1 DCA TM1 CDF 0 TAD I TM1 CDF 10 SZA CLA /IS SYMBOL ALREADY DEFINED? JMP LBRYLP /YES LBLDLP, TAD I LBFPTR /GET MODULE TO LOAD SNA JMP LBRYLP-2 /NO MORE MODULES TO LOAD AND L177 IAC TAD LBREC DCA RECNO DCA BANK TAD I LBFPTR AND L7600 JMS I LLOAD /LOAD LIBRARY MODULE ISZ LBFPTR JMP LBLDLP /GET NEXT MODULE LBFPTR, 0 LIOERR, INERR LINCTL, INCTLW L7177, 7177 LIN6377, IN6377 L5177, 5177 LSETS1, SETS1 LSEARCH, SEARCH L177, 177 L7600, 7600 LLOAD, LOAD LSYMNUM, SYMNUM LINISZ, INISZ LTVEC1, TVEC-1 IFZERO .-5700&4000 <LBRERR, _ERROR> /MAIN LOADING CODE /MODIFIED VERSION OF /PAPER-TAPE LINKING LOADER /DEFINITIONS BCRT= 200 TVEC= 300 ORGT= 100 /LOCAL SYMBOL TABLE NOW IN FIELD 0 MST= 6177 /MAIN SYMBOL TABLE *6200 /START OF PROGRAM - INITIALIZATION START, 0 TAD K7600 /SET COUNTER FOR 200 DCA NSUB TAD BCRTA /POINTER TO BANK TABLE DCA X3 CDF 00 DCA I X3 /CLEAR BANK TABLE & TV TABLE ISZ NSUB JMP .-2 /NOT DONE CDF 10 TAD M10 DCA NSUB TAD HLAZA DCA X3 TAD K777 DCA I X3 /BANK0 HIGHEST LOADED ADDR. =777 ISZ NSUB /NSUB INCREMENTS TO ZERO JMP .-2 DCA COML /INIT. OLD COMMON AT 0000 JMP I START /REENTRY FOR NEXT ROUTINE TO BE LOADED MORE, DCA LMTC /CLR LOCAL SYMBOL COUNT DCA CSUM /CLR CHECKSUM TAD MORE1A /SET FOR RETURN TO MORE1 IF LEADER DCA EOF MORE1, JMS RWORD TAD RC10A /RESET EOF TO WATCH FOR TRAILER DCA EOF TAD CODE /CK FOR HIGH COMMON TAD M12 SZA CLA JMP I ER5P /NOT THERE TAD COML CIA CLL CML /IF NO COMMON EXISTS, OR TAD WORD /IF NEW COMMON .LE. OLD IT'S SNL SZA CLA /OK, ELSE ERROR JMP I ER3P TAD COML SNA CLA TAD WORD /IF NO PREVIOUS COMMON AND IF AND K7600 /THIS PROGRAM HAS COMMON ABOVE 177 SNA /THEN SET COMMON LIMIT TO LIMIT OF THIS PROG JMP GETSW AND K7400 TAD K377 /HIGH COMMON MUST BE AT A MULTIPLE OF 400 DCA COML TAD I HLA1P /IF WE HAVE LOADED SZA CLA /ANY CODE INTO FIELD 1 JMP I ER3P /IT'S AN ERROR TAD COML /SET BANK1 HIGHEST LOADED ADDRESS DCA I HLA1P JMS I (SETRCN /SET UP HLA AND RCON AGAIN JUST IN CASE GETSW, TAD BANK /BANK NUMBER TAD TOPCOR /OK FOR NON-EX. MEM. SMA CLA JMP I ER2I /TOO BIG / /MAIN LOADING LOOP / LOOP, JMS RWORD TAD BASE /LOCATE CORRECT FUNCTION TAD CODE /IN TRANSFER TABLE DCA CODE CODE, 0 /TRANSFER TO APPROPRIATE ADDRESS /READ 12-BIT COMPUTER WORD & 4-BIT RELOCATION CODE /FROM 2 INPUT CHARACTERS RWORD, 0 JMS I HSRPA /FIRST FRAME DCA WORD TAD WORD /EXTRACT RELOC. CODE RTR RTR AND K17 DCA CODE TAD CODE /CK FOR LEADER TAD M10 SNA CLA JMP I EOF /YES TAD WORD /ADD TO CHECKSUM TAD CSUM DCA CSUM JMS FORMWD JMS I RCHARP TAD WORD DCA WORD JMP I RWORD FORMWD, 0 TAD WORD RTR RTR RAR AND K7400 /ISOLATE HI 4 BITS DCA WORD /FROM 1ST CHAR JMP I FORMWD /DATA EOF, 0 LMTC, 0 K17, 17 K377, 377 K777, 777 K7400, 7400 K7600, 7600 M10, -10 M12, -12 BASE, JMP I TRTAB BCRTA, BCRT-1 HLAZA, HLAZ-1 HSRPA, ICHAR MORE1A, MORE1 RCHARP, RCHAR TOPCOR, 0 HLA1P, HLA1 ER2I, ER2 /RELOCATION CODE TRANSFER TABLE TRTAB, RC0 /LOAD AS IS RC1 /ADD RELOCATION CONSTANT ER5 RC3 /DEFINE SYMBOL RC4 /ORIGIN RC5 /CDF TO CURRENT BANK RC6 /REPLACE LOCAL # WITH GLOBAL # ER5 RC10A, RC10 /LEADER-TRAILER ER5 ER3P, ER3 /HIGH COMMON ER5P, ER5 ER5 ER5 ER5 RC17 /EXTERNAL SYMBOL SPECIFICATION PAGE /NEW ORIGIN RC4, TAD WORD /NEW ORIGIN CLL TAD RCON /+ RELOCATION CONSTANT DCA CUR /= NEW LOADING ADDRESS SZL JMP I OVERFP /FIELD OVERFLOW JMP I LOOPP1 / /CHANGE CDF TO CURRENT BANK / RC5, TAD BANK /MOVE BANK TO BITS 6-8 CLL RTL RAL TAD WORD /PICK UP CDF JMP RC1+2 / /REPLACE LOCAL EXTERNAL SYMBOL NUMBER WITH GLOBAL EXT. SYM. NO. / RC6, TAD WORD AND K77 /EXTRACT LOCAL NUMBER DCA B1 TAD B1 /CK IF LOCAL # .LE. LOCAL SYM. COUNT CIA TAD I LMTCP1 SPA CLA JMP I ER5I /NO TAD B1 /ADD LOCAL # TO BASE OF TABLE TAD ORGTA DCA B1 TAD WORD /LOAD ARG COUNT AND K7700 KCDF, CDF 0 TAD I B1 /+ GLOBAL # CDF 10 JMP RC1+2 /AT CURRENT LOADING ADDRESS /ADD RELOCATION CONSTANT TO WORD RC1, TAD WORD TAD RCON DCA WORD / /LOAD WORD DIRECTLY AS IT IS / RC0, TAD HLA /CK FOR CURRENT ADDRESS TO LOAD CIA CLL /.GE. HIGHEST ALREADY LOADED TAD CUR SNL CLA JMP .+3 /NO TAD CUR /YES, RESET HIGHEST DCA HLA CLL TAD CUR /CK FOR ATTEMPT TO LOAD TOP PAGE TAD K200 SZL CLA JMP I OVERFP /YES, ROUTINE IS TOO BIG CLA CMA TAD BANK SZA CLA JMP JUSTLD CLL CML CLA RTR TAD CUR SZL SPA CLA JMP GT2000 TAD OVLYFG K7700, SMA CLA JMP OFFSET JMS I (CVTREC TAD (-11 JMP PAGEX2 GT2000, TAD CUR CLL TAD (-3600 SZL CLA JMP PAGEX1 JMS I (WROVLY CLA CMA DCA OVLYFG JMP JUSTLD PAGEX1, TAD K200 JMS I (CVTREC PAGEX2, TAD (MTEMP+11 JMS I (WRPGBF CLA CLL CML RTR TAD CUR SZL SPA CLA TAD K200 TAD CUR AND (377 TAD (1400 JMP JUSTLD+1 OFFSET, CLA IAC DCA OVLYFG TAD (1600 JUSTLD, TAD CUR DCA CURX TAD BANK CLL RTL RAL TAD KCDF DCA .+2 TAD WORD HLT DCA I CURX CDF 10 ISZ CUR JMP I LOOPP1 CURX, 0 / /DATA / K77, 77 K200, 200 ER5I, ER5 LMTCP1, LMTC LOOPP1, LOOP ORGTA, ORGT OVERFP, OVERFL HLAZ, 0 /HLA GROUP MUST REMAIN IN GIVEN ORDER HLA1, 0 HLA2, 0 HLA3, 0 HLA4, 0 HLA5, 0 HLA6, 0 HLA7, 0 B1, HLATST, 0 TAD HLAZ TAD HLAIO HLASZA, SZA CLA /SET TO CLA BY /R AND RESTART JMP I (UIOERR JMP I HLATST HLAIO, -777 PAGE /SYMBOL DEFINITION RC3, JMS I GTSYMP TAD TVM1 /ADJUSTED BASE OF TRANSFER VECTOR TABLE TAD SYMNUM /+ NUM. OF SYMBOL IN MST DCA C1 TAD RCON /LOADING ADDRESS OF THE SYMBOL TAD WORD CDF 00 DCA I C1 /TO THE TRANS. VEC. TABLE TAD C1 /GET POINTER INTO TRANSFER VECTOR TABLE TAD M100A /FORM CORRESPONDING POINTER INTO BANK TABLE DCA C1 /=PTR. TO BANK TABLE STORAGE TAD BANK /GET BANK IN BITS 6-8 CLL RTL RAL DCA I C1 /STORE IN BANK TABLE CDF 10 RC3A, TAD NSUB /CHECK FOR TOO MANY SYMBOLS TAD M100A SPA SNA CLA JMP I LOOPP2 /NO JMP ER1 / /TRANSFER VECTOR / RC17, TAD WORD /COUNTER OF SYMBOLS TO COME CIA DCA C2 RC17A, JMS I GTSYMP ISZ I LMTCP2 /INC. LOCAL SYM. CTR. TAD ORGTA2 /GET PTR TO STORAGE IN ORIG. TABLE TAD I LMTCP2 DCA C1 CMA /SYM. # -1 TO ORIG. TABLE TAD SYMNUM CDF 0 DCA I C1 CDF 10 ISZ C2 /CK CTR. JMP RC17A /NOT DONE JMP RC3A /ERRORS SIOERR, H7600, 7600 DCA ERBACK IAC HNDERR, IAC ERSTAD, IAC INERR, IAC OUERR, IAC ER5, IAC /ILLEGAL INPUT FORMAT ER4, IAC /CHECKSUM ERROR ER3, IAC /HIGHEST COMMON NOT FIRST ER2, IAC /PROGRAM TOO LARGE ER1, IAC /SYMBOL TABLE OVERFLOW UIOERR, DCA C3 JMS CRLF TAD K0522 /"ER" JMS TTWO TAD K2217 /"RO" JMS TTWO TAD K2240 /"R " JMS TTWO TAD C3 /# JMS TOCT JMS I (WRPGBF ERBACK, JMP I (CDCALL CDF CIF 0 JMP I H7600 /RETURN TO MONITOR / /TYPE A CARRIAGE RETURN & LINE FEED / CRLF, 0 TAD K215 JMS I TYPE TAD K212 JMS I TYPE JMP I CRLF / /UNPACK & TYPE 2 6-BIT CHARACTERS / TTWO, 0 DCA C1 CMA /SET FLAG FOR 1ST CHARACTER DCA C2 TAD C1 /MOVE LEFT HALF DOWN RTR RTR RTR SKP TTWO1, TAD C1 /GET RIGHT HALF AND C77 TAD M40 /200 OR 300 GROUP? SPA TAD K100 /300 + 6BIT TAD K2240 /200 + 6BIT JMS I TYPE ISZ C2 /2ND CHARACTER DONE? JMP I TTWO JMP TTWO1 /NO / /TYPE OCTAL CONTENTS OF AC / TOCT, 0 DCA C1 TAD M4B DCA C2 TOCT1, TAD C1 /MOVE NEXT DIGIT INTO BITS 9-11 RTL RAL DCA C1 TAD C1 /GET DIGIT RAL AND KK7 TAD C260 /CONVERT TO ASCII JMS I TYPE ISZ C2 JMP TOCT1 /MORE TO GO JMP I TOCT / /DATA / C1, 0 C2, 0 C3, SYMNUM, 0 KK7, 7 C77, 77 K100, 100 K212, 212 K215, 215 C260, 260 K0522, 0522 K2217, 2217 K2240, 2240 M4B, -4 M40, -40 M100A, -100 GTSYMP, GETSYM LMTCP2, LMTC LOOPP2, LOOP ORGTA2, ORGT TVM1, TVEC-1 PAGE /STORE OR LOOK UP SYMBOL IN SYMBOL TABLE DEFN, 0 /READ A SYMBOL FROM INPUT ASCII - 6 FRAMES CLA CLL CMA RTL DCA D1 TAD S1A /POINTER TO 3 WORD BUFFER DCA X3 RSYM1, JMS RCHAR AND K0077 /EXTRACT 6-BIT CLL RTL RTL RTL DCA D3 /SAVE LEFT HALF JMS RCHAR AND K0077 /GET RIGHT HALF TAD D3 DCA I X3 ISZ D1 JMP RSYM1 /NOT DONE JMP I DEFN / /SEARCH SYMBOL TABLE FOR CURRENT SYMBOL (IN S1-S3) / SEARCH, 0 DCA I SYMNMP /CLR SYMBOL COUNTER TAD MSTA /SET SYMBOL TABLE PTR DCA D4 TAD NSUB /SET CTR FOR NUMBER OF SYMBOLS CMA /+1 (IN CASE NSUB=0) DCA D5 JMP SRCH2 SRCH1, ISZ I SYMNMP /KEEP COUNT TAD D4 /TEST TABLE ENTRY DCA X4 /SYM. TAB. PTR CLA CLL CMA RTL DCA D2 /COUNTER TAD S1A DCA X3 /PTR TO S1/S3 COMP1, TAD I X4 /COMPARE WORDS CIA TAD I X3 SZA CLA JMP NOMACH /NOT ALIKE ISZ D2 JMP COMP1 /TRY NEXT WORD OF TRIPLET ISZ SEARCH JMP I SEARCH NOMACH, CLA CLL CMA RTL TAD D4 DCA D4 SRCH2, ISZ D5 JMP SRCH1 /NOT DONE JMP I SEARCH / /ENTER A SYMBOL IN THE SYMBOL TABLE / INSERT, 0 TAD NSUB /(NUMBER OF SYMBOLS)*3 CLL RAL TAD NSUB CIA /SUBTRACT FROM BASE OF TABLE TAD MSTA DCA X3 /FOR POINTER TAD S1 /1ST WORD DCA I X3 TAD S2 /2ND DCA I X3 TAD S3 /3RD DCA I X3 ISZ NSUB /COMPUTE SYM. TAB. NUMBER TAD NSUB DCA I SYMNMP JMP I INSERT / /CORE OVERFLOW / OVERFL, TAD BCRTA3 DCA D1 TAD TVECA3 DCA D2 TAD M100 DCA D3 CDF 00 OVERF2, TAD I D1 /CK FOR CDF IN BCRT SPA CLA JMP .+3 /YES DCA I D1 /NO, CLEAR IT DCA I D2 /CLEAR TV WORD ISZ D1 ISZ D2 ISZ D3 JMP OVERF2 /MORE TO GO CDF 10 JMP I ER2P GETSYM, 0 /GET SYMBOL AND SEARCH TABLE JMS DEFN JMS SEARCH JMS INSERT JMP I GETSYM /READ 1 FRAME & ADD TO CHECKSUM RCHAR, 0 JMS I HSRPB DCA D4 TAD D4 TAD CSUM DCA CSUM TAD D4 JMP I RCHAR SETRCN, 0 /SUBR TO SET HIGHEST-LOADED ADDRESS (HLA) TAD I HLAPTR /AND RELOCATION CONSTANT (RCON) DCA HLA TAD HLA AND (7600 DCA RCON JMP I SETRCN MAIN, 1501;1116;4040 /"MAIN" / /DATA / D1, 0 D2, 0 D3, 0 D4, 0 D5, 0 S1, 0 S2, 0 S3, 0 K0077, 77 M100, -100 BCRTA3, BCRT ER2P, XER2 HSRPB, ICHAR MSTA, MST-3 S1A, S1-1 SYMNMP, SYMNUM TVECA3, TVEC PAGE /TRAILER CODE EXIT RC10, JMS I (FORMWD JMS I HSRP /GET LOW ORDER PART TAD WORD CIA TAD CSUM /COMPARE WITH ACCUMULATED SUM SZA CLA JMP I ER4P /NOT EQUAL TAD BCRTA4 DCA T1 TAD TVECA DCA X2 TAD M100D DCA T3 K6201A, CDF 00 RC10Z, TAD I X2 /GET TV ENTRY SNA CLA JMP .+5 /NOT DEFINED; IGNORE IT TAD I T1 /GET BCRT WORD AND K70 /EXTRACT BANK TAD K6201A /COMBINE CDF DCA I T1 ISZ T1 ISZ T3 JMP RC10Z /NOT DONE YET CDF 10 TAD HLA /STORE HIGHEST LOADED ADDRESS DCA I HLAPTR /IN PROPER LOC. (HLA0-7) JMP I (LOADOK /LOADER MAP PRINT ROUTINE CONTINUED MAPX, SNL CLA /IF LINK=1 ONLY PRINT PAGE COUNTS, TAD NSUB /OTHERWISE PRINT SYMBOLS CMA DCA T1 /CTR OF ROUTINES TAD MSTA4 /SYMB. TAB. PTR. DCA X1 TAD TVECA /TV PTR DCA X2 TAD BCRTA4 /BCRT PTR DCA T4 TAD (2640 /PRINT V# JMS I TTWOP TAD (VERSION+PATCH JMS I TTWOP JMS I CRLFP JMP PRINT1 PRINT, TAD TM1 RTR CLL CDF 0 TAD I X2 CDF 10 DCA TM2 TAD TM2 SNL SZA CLA JMP PIGNOR TAD I X1 JMS I TTWOP TAD I X1 JMS I TTWOP TAD I X1 JMS I TTWOP TAD K4040 /2 SPACES JMS I TTWOP CDF 00 TAD I T4 /PRINT BANK NUMBER CDF 10 RTR RAR AND K7B TAD K260 JMS I TYPE TAD TM2 /PRINT SYMBOL VALUE JMS I TOCTP TAD TM2 /IF ADDRESS=0,IT IS UNDEFINED SZA CLA JMP .+3 /ITS OK TAD K4025 /TYPE SPACE,U JMS I TTWOP JMS I CRLFP TAD M03 PIGNOR, TAD M03 TAD X1 DCA X1 ISZ T4 PRINT1, ISZ T1 JMP PRINT /JUMP IF MORE SYMBOLS, ELSE FALL INTO NEXT PG PAGES, TAD FCTR /SET CTR FOR CORRECT # OF BANKS DCA T1 TAD (HLAZ-1 /INIT. PTR. TO HLA LIST DCA X1 TAD I X1 /GET HLA OF NEXT BANK CMA RTL /DIVIDE BY 200 AND COMPLEMENT RTL RTL AND K37 /=NUMBER OF PAGES LEFT + 1 SZA TAD (-1 /REDUCE IF NON-ZERO JMS I TOCTP JMS I CRLFP ISZ T1 JMP PAGES+4 /NOT DONE WITH ALL BANKS JMP I (OCLOS / /DATA / FCTR, 0 /# OF HIGHEST MEM. FIELD K37, 37 T1, 0 T3, 0 T4, 0 K7B, 7 K70, 70 K260, 260 K4025, 4025 K4040, 4040 M03, -3 BCRTA4, BCRT CRLFP, CRLF ER4P, ER4 HSRP, ICHAR MSTA4, MST-3 TOCTP, TOCT TTWOP, TTWO TVECA, TVEC-1 M100D, 7700 PAGE /WROVLY IS USED TO STORE THE FIELD COUNT FOR THE PROPGT /ROUTINE- PROPGT IS CALLED THE FIRST TIME THAT IOTEST IS /CALLED-SEE LOC.325 IN FIELD ZERO(APPROX.) BC1000, 1000 WROVLY, 0 TAD OVLYFG SPA SNA CLA JMP I WROVLY CIF 0 JMS I (SHNDLR 0110 1600 MTEMP JMP I (SIOERR CIF 0 JMS I (SHNDLR 5010 1600 MTEMP JMP I (SIOERR DCA OVLYFG JMP I WROVLY WRPGBF, 0 DCA PRECNO TAD WRBFSW SNA JMP PREAD CIA TAD PRECNO SNA CLA JMP I WRPGBF CIF 0 JMS I (SHNDLR 4210 1400 WRBFSW, 0 JMP I (SIOERR PREAD, DCA OLDT9 TAD PRECNO SNA CLA JMP SETBF CIF 0 JMS I (SHNDLR 0210 1400 PRECNO, 0 JMP I (SIOERR SETBF, TAD PRECNO DCA WRBFSW JMP I WRPGBF /LOADER CLEANUP CODE - PREPARES TO RETURN TO OS/8 LDRXIT, CDF 10 TAD I (HLA1 TAD BC200 L7700, SMA CLA /DID WE LOAD OVER THE LOADER? TAD (FIVE /NO DCA WROVLY /WROVLY=0 OR 5 CIF 0 JMS I (SHNDLR 0201 400 MTEMP+21 /READ BACK THE RUN-TIME ROUTINES JMP I (SIOERR /BADDIE TAD K1600 CDF 0 DCA I ST1600 TAD I P4 DCA I P5 ISZ P4 ISZ P5 ISZ P6 JMP .-5 /ALSO MOVE 16-32 INTO LOC 100 CDF 10 JMS I BC200 13 /RESET EVERYTHING TAD I (MPARAM AND (40 /GET "/G" SWITCH SNA CLA JMP CALMON /GO SWITCH NOT ON JMS I BC200 11 /KICK MONITOR OUT CDF CIF 0 TAD (MSTCDF DCA I (FIVE+1 /GO TO PROGRAM START ADR INSTEAD OF 7600 ISZ I (ONE /OPTOMIZE READ A LITTLE ON DECTAPE JMP I WROVLY CALMON, CLA CMA DCA I L7700 /INDICATE I/O MONITOR IS IN CORE CDF CIF 0 JMP I WROVLY /GET OUT ST1600, 177 /THIS IS SET TO "FINBUF" OR "FOUBUF" BY /I AND /O P4, 16 P5, 100 P6, -15 /ROUTINE TO TEST FOR /I AND /O SWITCHES IOTEST, 0 TAD I (MPARAM AND (10 SNA CLA //I? JMP .+4 JMS I (HLATST CDF CIF 0 JMS I (INPENB TAD I (MPARAM+1 BC200, AND BC1000 SNA CLA //O? JMP .+4 JMS I (HLATST CDF CIF 0 JMS I (OUPENB ISZ DOPROP /SHOULD WE PROPAGATE RESIDENT(AND WRITE OUT JMP .+4 /THE RUN-TIME ROUTINES?)--NO TAD WROVLY /YES-FIELD COUNT IS IN WROVLY CDF CIF 0 JMS I (PROPGT /DO IT JMP I IOTEST K1600, 1600 /RESET TO 2000 IF TWO PG.DEV.HNDLRS AT RUN TIME DOPROP, 7777 /ONCE-ONLY FLAG FOR PROPAGATING FIELD ZERO /RESIDENT AND WRITING OUT RUNTIME ROUTINES /NOT RESET AFTER /R!!!! /SET TO -2 IF CALLED BY ".R LOADER" /BECAUSE OF USELESS INIT CALL TO IOTEST PAGE $ |
Added src/os8/uni/LANGUAGE/FORTRAN2/SABR.CO.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 | /SABR ASSEMBLER, V17 / / / / / / / / / /COPYRIGHT (C) 1974 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 MANUAL. / /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. / / / / / / / / / / / /NOTE: WHENEVER ABOVE VERSION NUMBER IS CHANGED /BE SURE TO ALSO CHANGE VERSION NUMBER FOR TYPEOUT. /THIS IS AT VERSN+13 (ABOUT P. 83) / /THERE ARE TWO BASIC PHASES OF OPERATION WITHIN /SABR:(A) COLLECTION AND (B) ASSEMBLY. IN PASS 1 /SABR COLLECTS A FULL PAGE OF DATA AND THEN /ASSEMBLES THE FULL PAGE. IN PASS2 COLLECTION /AND ASSEMBLY ARE CARRIED OUT ON A LINE- /BY-LINE BASIS RATHER THAN PAGE-BY- /PAGE. FOLLOWING IS A DESCRIPTIVE FLOW CHART OF /THE PRINCIPAL METHODS OF OPERATION USED IN /THE PROGRAM DURING PASS1. /(1) BEGINNING AT START THERE ARE TWO ROUTINES NECESSARY /TO INTIALIZE THE ENTIRE PROGRAM. IOINIT CARRIES /OUT THE DIALOG WITH THE USER TO DETERMINE WHICH /I/O DEVICES WILL BE USED. INITA INTIALIZES ALL /THE FLAGS AND TABLES WHICH ARE USED CONTINOUSLY /THROUGHOUT THE PROGRAM. /(2) THE DRIVER FOR THE FULL PAGE-BY-PAGE ASSEMBLER /IS CONTAINED IN THE LOOP THAT RUNS FROM RSTRT /TO RSTRT6-1. THIS LOOP OPERATES AS FOLLOWS. /FIRST IT CALLS INILPT WHICH INITIALIZES ALL /THOSE FLAGS AND TABLES WHICH MUST BE /REFRESHED OR REBUILT FOR EACH PAGE OF CODE. /THEN IT CALLS THE MAIN LINE-BY-LINE /COLLECTION LOOP (WHICH IS DESCRIBED IN ITEM 3). /WHEN A FULL PAGE OF CODE HAS BEEN COLLECTED /THE DRIVER THEN CALLS L55 TO ASSEMBLE THE /PAGE (SEE ITEM 8). /(3) THE COLLECTION LOOP RUNS FROM RSTRT1 THROUGH /THE CODE AT RSTRT6. THIS LOOP FIRST CALLS /INCPT WHICH PREPARES FLAGS AND INCREMENTS /TABLE POINTERS FOR EACH LINE OF CODE. IT /THEN CALLS THE LINE DECODER DCIL (SEE /ITEM 4) FOLLOWED BY SETCT, THE ROUTINE WHICH /INCREMENTS THE PAGE COUNTERS AS REQUIRED /FOR THE GIVEN LINE (SEE ITEM 6). THEN /THE COLLECTIONS LOOP PROCEEDS TO INTERPRET /THE DATA LEFT BY DCIL AND STORE IT, PROPERLY /CODED, ON THE PAGE TABLE. IF THERE WAS /A TAG ("LFS" FOR "LOCATION FIELD SYMBOL") IT /IS NECESSARY TO CALL RECT FOR A PAGE RECOUNT. /(SEE ITEM 7). THEN THE SIZE OF THE PAGE SO /FAR COLLECTED IS TALLYED UP BY CPGES. IF /IT IS STILL .LE. 200. EVERYTHING IS FINE AND WE /RUN THROUGH THE LOOP AGAIN. IF NOT WE /FIRST SAVE (USING PUSHIN) /ALL THE KEY INFORMATION ABOUT THE LINE WHICH /CAUSED THE OVERFLOW AND THEN EXIT FROM THE /COLLECTION LOOP TO ASSEMBLE THE PAGE. /(4) CERTAIN NOTES ABOUT DCIL MAY BE HELPFUL. THIS /ROUTINE CONTROLS INPUT OF THE SOURCE. INDEV /(SET BY IOINIT) POINTS TO THE PROPER INPUT /ROUTINE, HSR OR ASR. THESE ROUTINES /READ ONE CHARACTER AT A /TIME FROM THE INPUT DEVICE. THE ROUTINE CALLED /R DRAWS CHARACTERS ONE AT A TIME FROM THE /INPUT BUFFER (DATA). WHEN THIS BUFFER IS /EMPTY R REFILLS IT USING @INDEV. FETCH /USES R TO EXTRACT ONE CHARACTER AT A TIME FROM /THE INPUT BUFFER AND DOES SOME PRELIMINARY /SCREENING. RLN USES FETCH TO READ A /FULL LINE OF CODE INTO THE LINE BUFFER. /L65 READS ONE CHARACTER AT A TIME FROM /THE LINE BUFFER. GTSYM READS THE LINE /ITEM-BY-ITEM. IF THE ITEM IS A SYMBOL, GTSYM /CALLS SRSYM TO LOOK UP THE ITEM IN THE /MAIN SYMBOL TABLE OR ENTER IT IF IT IS NOT /ALREADY THERE(SEE ITEM 5). /**IMPORTANT** /WHEN A SYMBOL HAS BEEN PLACED ON THE SYMBOL /TABLE THE ADDRESS OF THE FIRST WORD OF THE /ENTRY IS RETURNED AT "SYMBOL." THIS ADDRESS /IS UNIQUE FOR EACH SYMBOL AND IN THE /RANGE 2000-7575. THIS NUMBER IS USED /THROUGHOUT THE PROGRAM AS THE IDENTIFIER FOR /THIS SYMBOL. ** DCIL CONSIDERS EACH ITEM /OF THE LINE AND ACTS APPROPRIATELY. FOR /STANDARD INSTRUCTIONS A STRING OF KEY DATA ABOUT /THE LINE IS LEFT. IF THE LINE IS A PSUEDO-OP /DCIL WILL IMMEDIATELY CALL THE APPROPRIATE PSUEDO-OP /HANDLER TO TAKE ALL NECESSARY ACTION. MOST /OF THE PSUEDO-OP HANDLERS RETURN TO THE /BEGINNING OF DCIL WHERE THE NEXT LINE CAN BE /PROCESSED AS IF NOTHING UNUSUAL HAPPENED. THE /EXCEPTIONS TO THIS ARE THOSE PSUEDO-OPS WHICH /CAUSE A PREMATURE PAGE ASSEMBLY. /THE ROUTINE SKIPL IS ACTUALLY A SMALL PART OF /DCIL. IT HAS TWO PURPOSES. ONE, IT WATCHES /FOR LINES WHICH SHOULD BE IGNORED BECAUSE THE /FORTR PSUEDO-OP IS IN EFFECT. SECONDLY IT /MUST WATCH FOR SEMI-COLONS SO THAT /IF ONE IS ENCOUNTERED(OUTSIDE A COMMENT) /THE REMAINDER OF THE LINE CAN BE SAVED FOR /PROCESSING AS THE "NEXT" LINE. /(5)ONLY TWO MAIN ROUTINES SRSYM AND /OBSYM, TOGETHER WITH THEIR SUBSIDIARYS RUSVL AND SUSVL /MAY DIRECTLY CONTACT THE MAIN SYMBOL TABLE. /THESE ROUTINES COMMUNICATE WITH THE REST OF /THE PROGRAM THROUGH FOUR IMPORTANT /CELLS IN PAGE 0: /USE CONTAINS THE CODE WORD FOR THE SYMBOL ENTRY. /VAL CONTAINS THE VALUE OF THE SYMBOL. /SYMBOL CONTAINS THE ADDRESS OF THE FIRST WORD OF THE /ENTRY(NAMELY THE CODE WORD). /VALPTR CONTAINS THE ADDRESS OF THE VALUE WORD /OF THE ENTRY. /SRSYM, AFTER LOCATING A GIVEN SYMBOL IN THE TABLE /(OR ENTERING IT IF NECESSARY) /CALLS SUSVL TO FILL THE FOUR CELLS WITH THE /PROPER INFORMATION ABOUT THE SYMBOL. /OBSYM USES A SYMBOL IDENTIFIER TO GET /THE FOUR ESSENTIAL BITS OF INFORMATION, AGAIN /CALLING SUSVL TO DO THE WORK. HOWEVER /BEFORE EITHER SRSYM OR OBSYM DO ANYTHING /THEY BOTH MAKE USE OF RUSVL. RUSVL IS A /VERY IMPORTANT ROUTINE. HERE IS HOW IT WORKS. /LET US SUPPOSE THAT THE PROGRAM HAS OBTAINED /USE, VAL, SYMBOL AND VALPTR FOR A GIVEN /SYMBOL(USING SRSYM OR OBSYM). FURTHER, LET /US SUPPOSE THAT THE PROGRAM WISHES TO /MODIFY BOTH OR EITHER OF THE CODE AND VALUE /WORDS FOR THIS SYMBOL IN THE SYMBOL TABLE. /THE PROGRAM DOES NOT DIRECTLY ACCESS THESE /WORDS IN THE SYMBOL TABLE. INSTEAD THE /PROGRAM MERELY MAKES THE DESIRED MODIFICATIONS /TO USE AND VAL. NOW SYMBOL AND VALPTR /ARE THE POINTERS FOR STORING THIS NEW INFORMATION /BACK IN THE TABLE. IT IS VERY IMPORTANT THAT /NO PART OF THE PROGRAM EXCEPT SRSYM AND OBSYM /EVER MODIFY SYMBOL OR VALPTR, AND BEFORE /EITHER OF THESE MODIFY THEM THEY ALWAYS CALL /RUSVL. RUSVL TAKES USE AND VAL /INCLUDING ANY MODIFICATIONS THAT HAVE BEEN /MADE TO THEM AND STORE THESE WORDS BACK /IN THE TABLE USING THE STILL UNCHANGED POINTERS /SYMBOL AND VALPTR. IN THIS WAY MODIFICATIONS /TO THE SYMBOL TABLE ARE MADE IN TWO STAGES. /THE FIRST STAGE CONSISTS OF A SIMPLE REFERENCE /TO ONE OF TWO PAGE 0 LOCATIONS, AND THE /SECOND STAGE IS TAKEN CARE OF AUTOMATICALLY /DURING FURTHER OPERATION OF THE PROGRAM. /(6)SETCT AND CPGES DEAL WITH FIVE SEPARATE PAGE /COUNTERS. THE SUM OF THESE IS THE NUMBER /OF WORDS OF CORE NECESSARY TO ASSEMBLE THE CURRENT /COLLECTED DATA. PTSZE (PAGE TABLE SIZE) IS THE /NUMBER OF ITEMS - CONSTANTS,ADDRESS PARAMETERS /AND INSTRUCTIONS - WHICH HAVE BEEN SO FAR /COLLECTED. LTSZE IS THE NUMBER OF DISTINCT LITERALS /WHEN ARE REQUIRED ON THE CURRENT PAGE. PGEESC /WILL BE EITHER 2 OR 4. IT IS /2 IF THE LAST COLLECTED INSTRUCTION WAS NOT A /SKIP INSTRUCTION, 4 OTHERWISE. THESE ARE THE /NUMBER OF WORDS REQUIRED FOR THE PAGE /ESCAPE. THIS ITEM IS IGNORED WHEN THE AUTO- /MATIC PAGING SWITCH IS NON-ZERO. OPSCTR /IS THE NUMBER OF POINTERS TO OFF-PAGE SYMBOLS /WHICH ARE REQUIRED ON THE CURRENT PAGE. /THIS ITEM IS DETERMINED BY USE OF THE /PAGE SYMBOL TABLE. TWO TYPES OF SYMBOLS /ARE STORED ON THIS TABLE: TAGS(LFS'S) ON THE /CURRENT PAGE AND SYMBOLS WHICH ARE REFERENCED /BY MEMORY REFERENCE INSTRUCTIONS(AFS'S) ON THE /CURRENT PAGE. IN THIS TABLE SABR KEEPS TRACK OF /WHETHER THE SYMBOL IS ON-PAGE(I.E. IF IT OCCURS AS /A TAG ON THE PAGE) AND WHETHER IT HAS BEEN /REFERENCED EITHER SIMPLY OR WITH A NUMBER SIGN /(MEANING <SYM>+1). IF THE SYMBOL IS OFF-PAGE /AND HAS BEEN REFERENCED ON THE PAGE, ONE POINTER /IS REQUIRED ON THE ASSEMBLED PAGE FOR /EACH TYPE OF REFERENCE USED (SIMPLE OR #). /IN ADDITION CERTAIN INFORMATION REGARDING OBACTR /IS KEPT IN THE P.S.T. OBACTR KEEPS COUNT OF /THE NUMBER OF EXTRA INSTRUCTIONS WHICH MUST /BE GENERATED ON THE CURRENT PAGE. THESE /INCLUDE CDF'S TO CURRENT BANK (CODE05 6201'S), /CDF 00'S FOR REFERENCE TO COMMON, /(*) /JMS CDFSK/SKP PAIRS FOR CDF CUR'S FOLLOWING /SKIP INSTRUCTIONS, AND JMS CDZSK/SKP PAIRS FOR /CDF 00'S FOLLOWING SKIP INSTRUCTIONS. SUCH /CDF'S ARE NEEDED FOR OFF-PAGE REFERENCES WHENEVER /THE BANK REFERENCED IS NOT THE SAME AS PREVIOUSLY /(0 INSTEAD OF CURRENT=1 OR VICE-VERSA) OR WHEN /THE BANK IS UNKNOWN (=-1) AS AFTER A TAG, /AT THE START OF A PAGE, OR FOR ALL JMS'S. /OBACTR ALSO KEEPS COUNT OF EXTRA INSTRUCTIONS /NEEDED TO GENERATE OFF-PAGE INDIRECT REFERENCES. /FOR THESE EITHER 2 OR 4 EXTRA INSTRUCTIONS /ARE NEEDED DEPENDING ON WHETHER OR NOT THE /PREVIOUS INSTRUCTION WAS A SKIP INSTRUCTION. /IN THE PST AN UP-TO-DATE RECORD IS KEPT OF THE /NUMBER OF INCREMENTS TO OBACTR SPECIFICALLY /DUE TO EACH OFF-PAGE SYMBOL. IN VIEW /OF THE RECOUNT PROCEDURE DESCRIBED IN ITEM 7 /IT WOULD SEEM THAT THIS INFORMATION IS REDUNDANT /AND UNNECESSARY. HOWEVER, DURING THE DEBUGGING /STAGE OF THE PROGRAM WITH PASS 2 INCLUDED /I ENCOUNTERED SEVERAL SITUATIONS, WHICH I FIND /VERY DIFFICULT TO DESCRIBE, WHERE MORE IMMEDIATE /INFORMATION ABOUT OBACTR WAS NEEDED. I /AM NOT EVEN COMPLETELY SURE I UNDERSTAND WHY. /OBACTR MUST BE WATCHED CLOSELY. AT 6652 IN THE /PROGRAM THERE IS SOME CODE TO ASSIST IN /DEBUGGING THE PROGRAM IF PROBLEMS ARISE WITH /THE PAGE COUNT. /WHENEVER A NEW TAG IS ENCOUNTERED ON A /PAGE, SETCT USES CPLFS TO REDUCE /BOTH OPSCTR AND OBACTR APPROPRIATELY /SINCE WHAT PREVIOUSLY WERE OFF-PAGE REFERENCES /MAY NOW HAVE BECOME ON-PAGE REFERENCES. /(7) WHENEVER A TAG IS ENCOUNTERED ON A GIVEN /PAGE RECT IS CALLED TO GO THROUGH THE /ENTIRE CURRENT PAGE TABLE AND RECOUNT /THE PAGE. IT DOES THIS BY CALLING SETCT /AGAIN, ONCE FOR EACH ITEM ON THE PAGE TABLE. /THE ONLY THING REALLY ACCOMPLISHED HERE /IS THAT OBACTR IS RESET. OPSCTR IS /UNCHANGED AS WELL AS THE OTHER PAGE COUNTERS. /THE NEED TO RECOUNT OBACTR IS SHOWN /BY THE FOLLOWING EXAMPLE: / A, TAD B / TAD C / B, 0 / <PAGE FILLS UP> / C, 0 /NOW BECAUSE BANK IS UNKNOWN AFTER "A," /AND B IS UNDEFINED AS YET, "TAD B" /REQUIRES A CDF CUR. HENCE INCREMENT OBACTR. /"TAD C" IS OFF PAGE TOO, BUT REQUIRES NO /CDF SINCE IT IS IN THE SAME BANK. /HOWEVER WHEN B IS DEFINED ON PAGE, THE /CDF IT CAUSED IS NO LONGER NECESSARY, /BUT NOW THE "TAD C" REQUIRES A CDF. /(8) THE ROUTINE L55 CAUSES EACH PAGE TO BE ASSEMBLED. /DURING PASS 1 THERE ARE TWO SUB-PHASES TO THE ASSEMBLY. /FOR THE MOST PART BOTH PHASES RUN THROUGH THE /ENTIRE PAGE OF COLLECTED CODE USING THE /SAME ASSEMBLY ROUTINES. THE DIFFERENCE IS /THAT DURING PHASE 1 (ACTR=0) /ACTUAL OUTPUT IS SUPPRESSED. THE KEY /PURPOSE OF PHASE 1 IS TO DEFINE ALL THE /TAGS THAT OCCUR ON THE PAGE. CLEARLY THE /TAGS COULD NOT BE DEFINED DURING COLLECTION /BECAUSE AT THAT POINT WE WERE NOT SURE /WHAT SYMBOLS EVEN WERE ON PAGE, AND THUS /NOT SURE HOW MANY EXTRA INSTRUCTIONS /WOULD BE NECESSARY. THUS SUB-PHASE 1 OF THE /ASSEMBLY IS REQUIRED SO THAT IN THE /SECOND PHASE OF THE ASSEMBLY ON-PAGE /FORWARD REFERENCES CAN BE RESOLVED. HENCE /L55 CALLS THE ASSEMBLY ROUTINE ASMBL /TWICE FOR EACH PAGE OF CODE. /(9)AFTER INITIALIZING THE VARIOUS PAGE TABLE POINTERS /ASMBL GOES INTO A LOOP WHEREIN THE /LINE-BY-LINE ASSEMBLY ROUTINE ASM02 IS /CALLED ONCE FOR EACH ITEM ON THE PAGE TABLE. /ASM02 IS A HUGE ROUTINE OCCUPYING ABOUT /THREE FULL PAGES OF CODE. ASM02 FIRST /EXAMINES THE CODED DATA PERTAINING TO THE GIVEN /ITEM ON THE PAGE TABLE TO DETERMINE WHAT /TYPE OF INSTRUCTION IS TO BE ASSEMBLED AND /WHAT THE CURRENT BANK AND SKIP SETTINGS /ARE. THEN DEPENDING ON THIS ANALYSIS THE ROUTINE /TRANFERS TO THE PROPER SUBSECTION OF ITSELF /FOR HANDLING THIS TYPE OF INSTRUCTION. THERE /ARE A DOZEN OR MORE CASES WHICH MUST /BE DEALT WITH. THEN THE ROUTINE MOVES /TO ONE OF ITS VARIOUS EXIT STRINGS /TO COMPLETE THE ACTION AND SET THE BANK AND /SKIP CONDITIONS FOR THE NEXT LINE. AFTER ALL /ITEMS ON THE PAGE TABLE HAVE BEEN ASSEMBLED /IN THIS WAY ASMBL THEN CALLS THE ROUTINE /A2. A2 PRODUCES (IN PHASE 2) THE PAGE ESCAPE AND /THEN OUTPUTS THE ENTIRE LITERAL TABLE WITH /ALL THE OFF-PAGE POINTERS INTERMINGLED. /(10) SPECIAL CONSIDERATION SHOULD BE GIVEN TO OFF- /PAGE FORWARD REFERENCES SINCE THEY WILL REMAIN /UNRESOLVED WHEN THE CURRENT PAGE HAS BEEN /ASSEMBLED. DURING ASSEMBLY WHEN /A REFERENCE TO AN OFF-PAGE, OR AN AS YET /UNDEFINED SYMBOL IS ENCOUNTERED THE SYMBOL'S /IDENTIFIER IS STORED ON THE LITERAL/OFF-PAGE POINTER /TABLE. THEN WHEN A2 IS OUTPUTTING THE /LITERAL TABLE ANY STILL UNDEFINED SYMBOLS ARE /DEALT WITH AS FOLLOWS. THE SYMBOL'S INDENTIFIER /TOGETHER WITH THE LOCATION RESERVED IN THE CURRENT /PAGE FOR ITS VALUE ARE STORED ON THE OCCURRENCE /TABLE. THE LOCATION WHERE THE POINTER MUST BE /STORED IN THE CURRENT PAGE IS MERELY LEFT /BLANK AT THIS TIME. THEN LATER ON WHEN THIS SYMBOL IS /ENCOUNTERED AS A TAG THE ROUTINE LFSCK /WHICH PROCESSES TAGS DURING ASSEMBLY WILL /REMOVE THE ITEM FROM THE OCCURRENCE TABLE AND /OUTPUT IT PRECEEDING THE POINTER BY AN ORIGIN /TO THE CORRECT LOCATION. /(11) DURING PASS2 (THE LISTING PASS) MOST OF /THE SAME CODE IS USED TO PRODUCE THE /ASSEMBLY LISTING. HOWEVER THE TIMING IS /DIFFERENT. NOW THE COLLECTION-ASSEMBLY /ALTERATION IS CARRIED OUT ON A LINE-BY-LINE /BASIS RATHER THAN ON A PAGE-BY-PAGE BASIS. /(HOWEVER ALL THE PAGE TABLES AND COUNTERS MUST /STILL BE MAINTAINED JUST AS IN PASS1.) THE /PASS2 OPERATION DIFFERS FROM PASS1 IN THE /FOLLOWING RESPECTS. EACH TIME A LINE HAS /BEEN COLLECTED AND ITS DATA ENTERED INTO THE /PAGE TABLE IN THE NORMAL FIRST PASS WAY, /A CALL IS ISSUED TO THE LINE-BY-LINE /ASSEMBLY ROUTINE ASM02. SINCE ALL SYMBOLS /ARE NOW DEFINED THERE WILL BE NO UNRESOLVED /FORWARD REFERENCES ON OR OFF-PAGE. ASM02 ACTS /DURING PASS2 EXACTLY AS IT DOES DURING PASS1 /WITH ONE BIG EXCEPTION: THE BINARY OUTPUT ROUTINE /OUTBN IN SUPPRESSED AND IN ITS PLACE IS /SUBSTITUTED THE LISTING ROUTINE WRITE. /WHEN THE PAGE COUNTERS INDICATE THAT THE PAGE /IS FULL THE DRIVER ROUTINE WILL CALL L55 AS /USUAL. HOWEVER IN PASS2 THE TWO CALLS /TO ASMBL ARE BY-PASSED AND INSTEAD A SINGLE /CALL TO A2 IS ISSUED SO AS TO GET THE /LISTING TO THE PAGE ESCAPE, THE LITERALS AND /THE OFF-PAGE POINTERS. /(12) THE REASON FOR HAVING SEPARATE LITERAL TABLES FOR THE /COLLECTION AND THE ASSEMBLY PHASES OF /THE PROGRAM IS THAT DURING PASS2 BOTH /PHASES OF THE PROGRAM ARE OPERATING SIMUTANEOUSLY /AND BOTH ARE BUILDING LITERAL TABLES IN A /DIFFERENT WAY. /(13) THE PAGE ESCAPE TABLE, PEBSE, IS NECESSARY /IS THAT DURING PASS2 LOCATIONS /CANNOT BE ASSIGNED FOR LITERALS AND OFF-PAGE /POINTERS UNLESS THE FINAL PAGE ESCAPE /FOR THE PAGE IS KNOWN. HENCE THESE NUMBERS /ARE SAVED DURING PASS1. /(14) THE PAGE OP TABLE IS ACTUALLY A PART OF /THE PAGE TABLE. /(15) EXTERNAL SYMBOLS ARISE IN TWO WAYS: /FROM ENTRY STATEMENTS AND FROM CALL STATEMENTS. /THEY ARE ENTERED IN THE E.S.T. IN ORDER OF /APPEARANCE IN THE PROGRAM AND NUMBERED /ACCORDINGLY. THESE ARE THE NUMBERS WHICH THE /LOADER REFERS TO AS "LOCAL EXTERNAL NUMBERS." /(16) EQUIVALENCING OF TAGS /IS TREATED AS A PSEUDO-OP AND IS /HANDLED BY THE ROUTINE PBSS2. (INCIDENTALLY /SOME OF THE ODD NAMES IN THE SOURCE WERE /PASSED ON TO ME FROM THE ORIGINAL ICS /PROGRAM. I DID NOT CHANGE THEM MERELY BECAUSE /THEY MADE NO SENSE.) THE OPERATION IS THIS: /ALL EXTRA TAGS TO BE DEFINED AT A GIVEN LOCATION ARE /ENTERED AS A GROUP IN THE EQUIVALENCE TABLE, /AND A CODE BIT IS SET ON THE PAGE TABLE TO /INDICATE THAT SUCH A GROUP IS TO BE DEFINED /WHEN THE LOCATION HAS BEEN DETERMINED DURING /ASSEMBLY. ANUMCK DOES THE WORK OF DEFINITION. /(*) /V03 CHANGE NOTICE: / AS OF V03 THE SABR SYSTEM HAS / BEEN CHANGED SUCH THAT COMMON / WILL RESIDE IN FIELD 1 INSTEAD / OF FIELD 0. / THE ONLY CHANGES REQUIRED TO SABR / ITSELF ARE AS FOLLOWS / (1) HICOM=177 INSTEAD OF 777; / (2) PARG & ASMBL MUST NOW OUTPUT 6211'S / INSTEAD OF 6201'S FOR CDF'S TO COMMON. / NOTE: / THE COMMENTS HAVE NOT BEEN CHANGED TO / REFLECT THIS CHANGE. / ALSO, BANK = 0 IS STILL THE CONDITION / FOR REFERENCES TO COMMON. (BANK=1 / STILL MEANS BANK KNOWN TO BE CURRENT / AND BANK = -1 STILL MEANS BANK UNKNOWN.) |
Added src/os8/uni/LANGUAGE/FORTRAN2/SABR.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 | /SABR ASSEMBLER V18 / / / / / / / // / / / / /COPYRIGHT (C) 1971,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. / / / / / / / VERSION SABR.17 / OCTOBER 26, 1971 / C. MCCOMAS / R. LARY / B. CLOGHER /SABR.V17 DEC-08-A2D2-17 / OCTOBER 26,1971 /COPYRIGHT 1971, DIGITAL EQUIPMENT CORPORATION, MAYNARD MASSACHUSETTS 01754 / C. MCCOMAS/R. LARY/B. CLOGHER // / /FIXES TO SABR FOR V18 J.K 1975 / / .LITERAL POOL OVERFLOW / .INCORRECT LINE NUMBER WITH ERROR MESSAGE / / /ASSEMBLY, LOAD AND SAVE INSTRUCTIONS / / .PAL SABR.PA / .PAL SPATCH.PA / / .LO SABR$SPATCH$ / / .SA SYS SABR / / FIELD 1 / / / DEFINE LOCATIONS OF MONITOR SUBROUTINES / DISPL=10 CDFSK=35+DISPL CDZSK=41+DISPL DUMS=57+DISPL LINK=23+DISPL OBIS=45+DISPL OPIS=52+DISPL RTN=30+DISPL *1 USE, 0 VAL, 0 SYMBOL, 0 /PTR TO CURRENT USE WORD IN MST M7, -7 AS0, S0 OTP, CORE1-1 /OCC. TAB. PTR (NEXT FREE WORD BELOW) STT, STTP /PTR TO 1ST FREE WORD OF SYM. TAB. /(KEEP STT AFTER OTP FOR INITA) X0, 0 /LINE BUFFER INDEX X1, 0 /TEMP AUTOS X2, 0 X3, 0 /HSR BUFFER INDEX K2, 2 K4, 4 K3, 3 K130, 130 K30, 30 / INDIRRECT REFERENCES / ICPLFS, CPLFS /CHECK FOR AND PROCESS COLLECTION LFS CPGESI, CPGES CTYPE, L61 /CHARACTER TYPEOUT ROUTINE CRLF, L73 DUMMY, DUM /DUMMY ROUTINE GETCHR, L65 /ROUTINE TO READ NEXT CHAR GETSYM, GTSYM /ROUTINE TO INPUT AND DECODE NEXT SYMBOL INI, INILPT LFSCHK, LFSCK /CHECK FOR A LFS OBSYM, OBNSYM /OBTAIN SYMBOL FROM MST DCIL1, RDL1 NULLP, NULL OTYPE, L62 /OCTAL TYPEOUT ROUTINE OUTBIN, OUTBN /ROUTINE TO OUTPUT COMP WORD AND REL BITS OUTSKP, OUTSK /ROUTINE TO OUTPUT A SKIP INSTRUCTION POPEXP, POPEX PRSYMP, PRSYM PUNCH, L63 /BINARY PUNCH ROUTINE RDIL, DCIL /READ AND DECODE ONE INPUT LINE RECTI, RECT L55I, L55 SKIPL, L72 /SKIPS UNTIL A RETURN OR SEMICOLON SLITAB, SLTAB /SEARCH LITERAL TABLE SPSTAB, SPSTB /SEARCH PAGE SYMBOL TABLE SREST, L66 /ROUTINE TO SEARCH EXTERNAL SYMBOL TABLE STCE, SETCT TEST, TSCHR /ROUTINE TO TEST CHARACTERS FOR EQUALITY TYPE, L64 /TTY TYPE ROUTINE WLNP, WLN WRITEP, WRITE / / IMPORTANT VARIABLES / ACTR, 0 /ASSEMBLY COUNTER BSSSW, 0 /BSS 0 IN PROCESS SWITCH CHR, 0 /LOC TO HOLD CURRENT CHARACTER CSUM, 0 /BINARY CHECK SUM EQVOPR, EQUTB /EQUIVALENCE TABLE OUTPUT POINTER EQVIPR, EQUTB /EQ. TB. INPUT PTR. ILC, 0 /CURRENT LOCATION LFSPTR, 0 /POINTER TO LFS TABLE ENTRY LINE, 0 /NO OF LINES SINCE LAST LFS LITSZE, 0 /SIZE OF LIT TAB (ASM PHASE) LTSZE, 0 /SAME FOR COLL. PHASE LSTSKP, 0 /LAST INSTRUCTION SKIP INDICATOR LSTBNK, 0 /LAST INSTRUCTION BANK INDICATOR OBACTR, 0 /OFF BANK INSTRUCTION ADDITION COUNTER OPSCTR, 0 /OFF PAGE SYMBOL COUNTER /***** KEEP ITEMS SO INCLOSED IN THE GIVEN ORDER FOR INITA HICOM, 0177 PAG, 0200 /CURRENT PAGE BITS ESTSIZ, 0 /HOLDS SIZE OF EXTERNAL SYMBOL TABLE EQVBIT, 0 APMSW, 0 /AUTOMATIC PAGING MODE SWITCH TEM7, 1 /SPECIAL VARIABLE USED BY ASME5 CPSW, 1 DSW, 0 FORFLG, 0 /FORTR PSUEDO-OP FLAG /POS NON-0 MEANS IGNORE DATA SCOLON, 0 /***** PASS, 0 PGEESC, 0 /HOLDS SIZE OF PAGE ESCAPE REQUIRED FOR CUR PAGE PUPGE, 0 PHASE, 0 /PHASE SWITCH PSTCPR, 0 /PAGE SYMBOL TABLE CODE POINTER PSTSPR, 0 /PAGE SYMBOL TABLE SYMBOL POINTER PSTSZE, 0 /SIZE OF PST PTCPR, 0 /PAGE TABLE CODE POINTER PTOPR, 0 /PAGE TABLE OP CODE POINTER PTSPR, 0 /PAGE TABLE SYMBOL POINTER PTSZE, 0 /SIZE OF PT TEM1, 0 TEM2, 0 TEM3, 0 TEM4, 0 TEM5, 0 PTSIZ=PTSZE /KEYPUNCHING ERROR LITSIZ=LITSZE /KEYPUNCHING ERROR / /LISTING VARIABLES LFLG, 0 /0 IF NULL LINE EFLG, 0 /ERROR FLAG, 6BIT CHAR. IN LEFT HALF VFLG, 0 /0 IF NO VALUE TO OUTPUT AFLG, 0 /DITTO FOR ADDRESS CODE, 0 /RELOCATION CODE ADDRES, 0 /INSTR. ADDRESS VALUE, 0 /INSTR. VALUE /LINE INFO LFS, 0 /KEEP THIS LIST ORDERED AS GIVEN OP, 0 /TO AGREE WITH TLFS LIST IB, 0 AFS, 0 UMIC, 0 NSGN, 0 EXP, 0 SK, 0 CURSKP=SK BANK, 0 S0, 0 S1, 0 S2, 0 S3, 0 / FREQUENTLY USED CONSTANTS / K5, 5 K7, 0007 K10, 0010 K20, 0020 K40, 0040 K77, 0077 K100, 100 K177, 0177 K200, 0200 K240, 240 K400=L55I K600=GETSYM K3000=LFSCHK K1000=INI K4000=PRSYMP K7600, 7600 M200=K7600 M254, -254 LINAX, LINBUF-1 M2, -2 M3, -3 K2000=RDIL M3000=STCE M7600=K200 / / CORE LAYOUT POINTERS / PTOPTB=K200 /PAGE OP CODE TABLE 1 IN BANK 1 BSEEST=K100 /BASE OF EXTERNAL SYMBOL TABLE IN BANK 1 MST=K2000 /BASE MAIN SYM. TAB IN BANK1 LFSBSE=K600 /BASE OF LOCATION FIELD SYMBOL TABLE IN BANK 1 LITBSE=L55I /BASE OF ASSEMBLY PHASE LITERAL TABLE IN BANK 1 PSTBSE, PSTB /BASE OF PAGE SYMBOL TABLE IN BANK 0 PTBSE, PTB /BASE OF PAGE TABLE IN BANK 0 LTBSE=K1000 /BASE OF COLL. PHASE LIT. TABLE IN BANK 1 PTB=7176 PSTB=6776 IERROR=JMP I . /ERROR MESSAGES ERRI CERROR=JMP I . ERRC SERROR=JMP I . ERRS *0200 / / MAIN CONTROL LOGIC / START, CLA JMS I INITIO DCA PASS DCA I ICALSW JMS I INITAP RSTRT, JMS I INI /INITIALIZE PAGE TABLE POINTERS SKP RSTRT1, JMS I INCPTI /INCREMENT PAGE TABLE POINTERS JMS I RDIL /INPUT AND DECODE ONE LINE JMS I CKCSWP /CK FOR MISSING ARG DCA BSSSW /ALSO CLR BSS IS PROGRESS SW JMS I STCE /SET COUNTERS FOR CURRENT LINE TAD OP /OP CODE CDF 00 DCA I PTOPR /TO PT OP CODE WORD CDF 10 TAD SK /OR IN SKIP BIT SZA CLA TAD K40 /SKIP INST TAD I PTCPR /IN CASE LFS BIT IN ALREADY DCA TEM1 TAD IB /OR IN INDIRECT BIT SZA CLA TAD K400 /YES TAD TEM1 DCA TEM1 /FOR NEW PT CODE WORD TAD EXP /DO WE HAVE A PAR? SZA CLA JMP RSTRT5 /YES TAD UMIC /A MICRO INST? SNA CLA JMP RSTRT4 /NO AN MRI TAD K4 /OR IN OPERATE BIT JMP COMP /EXIT TO COMPUTE PAGE SIZE / / PAR FOR AN OP CODE / RSTRT5, TAD K10 /PLACE PAR BIT ON PAGE TABLE TAD TEM1 DCA TEM1 RSTRT4, TAD M2 TAD AFS /IS AFS A CONSTANT SZA JMP .+6 /NO TAD K20 /YES ... CONSTANT BIT RSTRT2, TAD TEM1 /+PT CODE WORD DCA TEM1 /FOR NEW PT CODE WORD TAD S0 /ACTUAL BINARY CONSTANT JMP COMPGO /EXIT TO COMPUTE PAGE SIZE IAC SZA CLA /IS AFS A LITERAL JMP .+3 /NO TAD K2 /YES ... LITERAL BIT JMP RSTRT2 /SAVE AS CONSTANT FROM THIS POINT TAD AFS /PLACE AFS ON PST COMPGO, DCA I PTSPR TAD NSGN /CK FOR # REF SZA CLA TAD K2000 /YES COMP, TAD TEM1 /GET ALL THE BITS DCA I PTCPR /TO THE CODE WORD / / NOW COMPUTE THE CURRENT PAGE SIZE / TAD LFS /IS THERE AN LFS SZA CLA JMS I RECTI /YES ... EXIT TO RECOUNT PAGE JMS I CPGESI /COMPUTE ACTUAL PAGE SIZE TAD M200 /SUBTRACT PHYSICAL PAGE SIZE SPA SNA CLA /IS SIZE .GT. PHYSICAL SIZE JMP RSTRT6 /NO ... GET NEXT JMS I PSHINI /YES ... PUSH CURRENT INPUT LINE TAD PUPGE /RESTORE LAST PAGE ESCAPE DCA PGEESC CLA CMA /DECREMENT PAGE TABLE SIZE TAD PTSZE DCA PTSZE / / ASSEMBLE THE CURRENT PAGE / JMS I L55I /ASSEMBLE CURRENT PAGE JMS I UDPG JMS I FIXI /FIX ILC IF PASS 2 JMS I POPINI /POP LAST INPUT LINE JMS I INI /INITIALIZE PT POINTERS DCA I RECTI /CLR RECOUNT FLAG FOR CPLFS JMP RSTRT1+2 /EXIT TO PROCESS POPPED LINE / RSTRT6, TAD PGEESC /SAVE CURRENT PAGE ESCAPE DCA PUPGE /IN CASE NEXT LINE OVERFLOWS PAGE TAD PASS SZA CLA JMS I LASMP JMP RSTRT1 LASMP, ASM02 INITAP, INITA ICALSW, CALLSW INCPTI, INCPT POPINI, POPIN PSHINI, PUSHIN FIXI, FIXILC CKCSWP, CKCSW / PAGE PSEUDO OPERATION / PPAGE, JMS I SKIPL CLA CMA /DECREMENT PAGE TABLE SIZE TAD PTSZE SNA /WATCH FOR ZERO JMP .+3 DCA PTSZE /FOR NEW PAGE TABLE SIZE JMS I L55I /ASSEMBLE CURRENT PAGE JMS I UDPG JMP RORGX /INITIALIZE AND INPUT ANOTHER LINE / / REORG PSEUDO OPERATOIN / PRORG, JMS I GETSYM /GET NEXT INPUT ITEM NOP /NOTHING THERE SKP /SYMBOL SKP CLA /CONSTANT IERROR /LITERAL JMS I SKIPL TAD S0 /NEW RELOCATABLE ORIGIN AND K7600 /MASK OFF PAGE DISPLACEMENT BITS SNA /ARE WE TRYING TO REORIGIN BELOW 200 IERROR /YES ... NOT ALLOWED DCA RORG1 /SAVE NEW ORIGIN CLA CMA /DECREMENT PAGE TABLE SIZE TAD PTSZE SNA /IS THIS THE BEGINNING OF A PAGE JMP .+3 /YES DCA PTSZE JMS I L55I TAD RORG1 /NEW ORIGIN DCA PAG /TO PROPER LOCATION RORGX, JMS I FIXI TAD RSTRTX /RETURN AT RSTRT INSTEAD OF RDL1 DCA DCIL1 JMP I NULLP /RE-INITIALIZE AND GO RORG1, 0 RSTRTX, RSTRT UDPG, UDPAGE INITIO, IOINIT *0400 / / ROUTINE TO CAUSE CURRENT PAGE TO BE ASSEMBLED /THIS ROUTINE ACTS AS THE DRIVER FOR THE ASSEMBLY /PROCESS. MOST OF THE ACTUAL ASSEMBLY WORK /IS DONE BY ASMBL,A1,A2,& ASM02. /FUNCTION:(PASS1) / CALL ASMBL TWICE. THE FIRST TIME / (ACTR=0) PROHIBIT OUTPUT BY CONVERTING / "JMS OUTBIN" TO "JMS DUMMY". BUT / ALSO CONVERT "JMS DUMMY" TO "JMS OUTBN" / SO THAT OUTPUTTING OF OCCURANCES / WILL OCCUR IN FIRST CALL TO ASMBL. / IN GENERAL, IN THE FIRST RUN THRU ASMBL / NOTHING HAPPENS EXCEPT THAT TAGS ARE / DEFINED (BY LFSCK). AS THE TAGS ARE / DEFINED LFSCK ALSO CAUSES THE / OCC.TAB. TO BE SEARCHED FOR PREVIOUSLY / UNRESOLVED FORWARD REFERENCES TO THIS / TAG. IF FOUND, RELOCATABLE POINTERS TO / THE TAG ARE OUTPUT AT ALL REQUIRED / ADDRESSES DURING PHASE1 OF ASMBL. / AFTER THE 1ST ASMBL, OUTBIN & DUMMY ARE / SWITCHED BACK TO NORMAL & ASMBL / IS CALLED AGAIN. DURING 2ND ASMBL / THE TAG DEFN. SECTION OF LFSCK IS / BY-PASSED & ALL CODE EXCEPT OCCURANCES / IS OUTPUT. / (PASS2) / DURING THE LISTING PASS MOST OF THE / ASSEMBLY IS DONE ON A LINE-BY-LINE / BASIS BY ASM02 SO L55 HAS LITTLE / TO DO. IT JUST CALLS A2 TO / OUTPUT THE LITERAL POOL & THEN / A1 TO INIT. ASSEMBLY OF THE NEXT / PAGE. / L55, 0 JMP I L55B /CHANGED FROM V16 TO FIX LISTING BUG L55C, TAD PASS SZA CLA JMP L55L JMS I L55A /CHECK COMMON PUNCHED TAD L56 /SET DUMMY ROUTINE TO OUTPUT DCA DUMMY TAD L56+1 /SET OUTPUT ROUTINE TO DUMMY DCA OUTBIN DCA ACTR /CLEAR ASSEMBLY COUNTER TAD EQVOPR /SAVE FOR 2ND ASSEMBL DCA TEM55 JMS I ASSMBL /ASSEMBLE PAGE FIRST TIME TAD L56 /RESTORE OUTPUT ROUTINE DCA OUTBIN TAD L56+1 /RESTORE DUMMY ROUTINE DCA DUMMY ISZ ACTR /SET ASSEMBLY COUNTER TAD TEM55 /RESTORE AS BEFORE 1ST ASSEMBL DCA EQVOPR JMS I ASSMBL /ASSEMBLE AND OUTPUT THIS TIME JMP I L55 /RETURN L56, OUTBN DUM ASSMBL, ASMBL L55A, HCBPS L55B, EQVFIX TEM55, 0 L55L, JMS I A2P JMS I A1P /INITIALIZE NEXT PAGE JMP I L55 A2P, A2 A1P, A1 / /COLLECTION PHASE ROUTINE /RECOUNT THE CURRENT PAGE BECAUSE OF AN LFS /CALL WITH AC=0, LEAVES AC=0 /FUNCTION:WHEN A NEW TAG IS DEFINED ON PAGE / OPSCTR & OBACTR MAY NEED TO BE / REDUCED. CPLFS TAKES CARE OF OPSCTR / BUT OBACTR REQUIRES REVIEWING THE / ENTIRE PAGE. /OPERATION: (1) CALL CLNPST TO CLEAR BITS 1-9 / OF ALL PST CODE WORDS-WIPES OUT / SHARE OF OBACTR DUE TO EACH SYM. / (2) RE-INIT PAGE & CLR OBACTR / (3) FETCH ITEM FROM PAGE TABLE / (4) SET ALL INSTR.TYPE FLAGS ACCORDINGLY / (5) CALL SETC / (6) INC PAGE TABLE PTRS TO NEXT ITEM / & LOOP BACK TO (3) / CONTINUE THRU ENTIRE TABLE. / RECT, 0 TAD PSTSZE /ANYTHING ON PST? SZA JMP I CLENUP /YES, CLEAN PST CODES RECRET, JMS I INISS /DO INITS. DCA OBACTR /ZERO OFF BANK ADDITION COUNTER TAD PTSZE /SIZE OF PT CIA DCA RECT1 /TO INDEX LOCATION / / THIS IS THE RECOUNT LOOP / RECT2, CDF 00 TAD I PTOPR /OP CODE FROM PT CDF 10 DCA OP TAD I PTCPR /CK FOR SKIP INST AND K40 DCA SK TAD I PTCPR /CK FOR # REF AND K2000 DCA NSGN TAD I PTCPR /PT CODE WORD AND K4 /IS IT AN OPERATE INSTRUCTION DCA UMIC TAD I PTCPR /CK FOR PAR EXP AND K10 DCA EXP TAD I PTCPR /PAGE TABLE CODE WORD AND K400 /MASK OFF INDIRECT BIT DCA IB /PLACE IT IN PROPER LOCATION TAD I PTCPR /PT CODE WORD AND K20 /IS AFS A CONSTANT CLL RTR SZA JMP .+3 /YES TAD I PTCPR /PT CODE WORD AND K2 /IS AFS A LITERAL CLL RAR SNA TAD I PTSPR /ADDRESS FIELD SYMBOL DCA AFS TAD I PTSPR /ACTUAL LITERAL DCA S0 /TO LITERAL LOCATION / / AREA WHICH CALLS COUNT ROUTINE / RECT3, TAD I PTCPR /PT CODE WORD AND K201 /IS THERE A TAG OR AN EQUIVALENCED TAG? SNA CLA JMP .+3 /NO CLA CMA /YES ... SET BANK UNKNOWN DCA BANK JMS I STCE /CALL COUNT ROUTINE ISZ RECT1 /OVER YET SKP /NO JMP I RECT /EXIT JMS I ISZPT1 JMP RECT2 /GO GET NEXT LINE RECT1=L55 INISS, INISUB CLENUP, CLNPST K201, 201 ISZPT1, ISZPT PAUS1, PPAUS1 / / END PSEUDO OPERATION / PEND, TAD FORFLG /IF FLAG ON, TURN OFF & SMA SZA CLA /GO TO RDL1 JMP I PAUS1 /GO TURN OFF FORTR P-OP CLA CMA /DECREMENT PT SIZE TAD PTSZE SNA /ARE WE AT THE BEGINNING OF A PAGE JMP PCSM /YES DCA PTSZE /NO ... NEW PAGE TABLE SIZE TAD PAG /CHECK FOR OVERFLOW INTO 7600 PAGE TAD K200 SNA CLA SERROR /OVERFLOW-ERROR S ISZ APMSW /LEAVE AUTO PAGING MODE FOR LAST PAGE JMS L55 /ASSEMBLE CURRENT PAGE PCSM, JMS I OUTBIN /OUTPUT CKSUM CSUM 10 TAD PASS SZA CLA JMP ENDEND JMS I LEAD /OUTPUT TRAILER CODE JMS I PRSYMP /TYPE OUT SYMBOL TABLE ISZ PASS JMS I INITAI JMS I A1P HLT JMP I REE ENDEND, JMS I WLNP /LIST THE "END" STATMT HLT CLA JMP I K200 /RESTART AT 200 REE, RSTRT INITAI, INITA LEAD, LEADER *600 /READ INPUT ITEM / IGNORES SPACES & TABS TO 1ST CHAR OF ITEM /ASSUMES AC=0 /CALLING SEQ: JMS I GETSYM / NULL RETURN (IF NO ITEM FOUND BEFORE CR ; / * / SYMBOL RET. (WITH SYM PACKED IN S1-S3 / AND S0=SYMBOL LENGTH) / CONST. RET. (WITH VALUE IN S0) / LITERAL RET. (WITH VALUE IN S0) /SYNTAX: LITERALS: (000 NUMERIC LIT. / (-000 NEG. / (K000 OCTAL / (D000 DECIMAL / ("A ASCII LIT. / (-"A NEGATIVE ASCII / CONSTANTS: 000,-000,"A,OR -"A / NOTE: AFTER A VALID QUOTE ANY ASCII CHAR MAY APPEAR / AND WILL BE STORED AS THE CONST OR LIT VALUE. / THIS INCLUDES CR ; / * SO THESE DO NOT / TERMINATE A LINE AFTER A QUOTE. /ALL EXITS LEAVE AC=0 /NOTE: TO PROVIDE A CHECK OF THE PUNCTUATION /CHAR. FOLLOWING PREVIOUSLY READ SYMBOL, GTSYM /DECREMENTS THE LINE PTR BEFORE STARTING /THE READ. IF THIS IS NOT WANTED /CALL TO GTSYM MUST BE PRECEDED /BY "ISZ X0" GTSYM, 0 CMA /DECREMENT CHARACTER PTR TAD X0 DCA X0 TAD DSW /SAVE NUMERIC MODE DCA TEM4 CMA /SIGN=-1 FOR POSITIVE ITM4, DCA SIGN /SIGN=0 TO FORCE NEGATION ITM2, JMS I RC /READ 1ST CHAR JMP ITM5 /DIGIT: GET NUMERIC CONST JMP ITM3 /ALPHA: GET SYMBOL JMS I TEST /SORT LEADING PUNCT. SL2-1 BL2-SL2 CERROR /ILLEGAL CHAR / /READ IN A SYMBOL /ASSUMES 1ST CHAR ALREADY READ IN & SAVED IN CHR /LEAVES SYMBOL PACKED IN 6BIT CHAR PAIRS IN S1-S3 / S0=NUMBER OF CHAR PAIRS ACTUALLY USED ITM3, ISZ SIGN /CK FOR -SYMBOL CERROR /YES DCA S0 /CLR FOR SYM LENGTH COUNT DCA TEM1 /CLR FOR CHAR COUNT DCA TEM3 /SET PTR FOR LEFT BYTE TAD AS0 /AUTO-INDEX STORAGE IN S1-S3 DCA X2 RSM2, ISZ TEM1 /COUNT CHAR TAD TEM1 /ARE MORE THAN 6 CHARS IN? TAD M7 SMA CLA JMP RSM1 /YES, IGNORE TAD CHR /NO, GET ASCII AND K77 /MASK TO 6BIT ISZ TEM3 /WHICH BYTE? JMP RSM3 /LEFT TAD TEM2 /ADD ON LEFT HALF DCA I X2 /STORE CHAR PAIR IN S1-S3 JMP RSM1 RSM3, RTL CLL /MOVE 6BIT TO LEFT BYTE RTL RTL DCA TEM2 /SAVE WHILE WAITING ON RT BYTE CMA /SET PTR FOR RT BYTE DCA TEM3 ISZ S0 /COUNT 1 SYMBOL WORD RSM1, JMS I RC /READ NEXT CHAR JMP RSM2 /DIGIT JMP RSM2 /ALPHA ISZ TEM3 /PUNCT=END OF SYM: CHECK BYTE PTR JMP .+3 /NOTHING IN TEM2 TAD TEM2 /SAVE THE ODD CHAR DCA I X2 TAD I IFCTP /SKIP SYM TAB IF IF-COUNT NOT UP SMA CLA JMS I SRS /LOOK IT UP IN SYM TAB. & ENTER IF NEC. JMP ITM14 /EXIT /READ DIGIT STRING /ASSUMES 1ST DIGIT ALREADY READ AND ASCII SAVED IN CHR / SGN=-1 IF NUM. IS TO BE NEGATED / DSW=0 FOR OCTAL CONVERSION, 1 FOR DECIMAL /LEAVES AC=OCTAL VALUE OF DIGIT STRING (NEG IF SGN=-1) / CHR=ASCII FOR TERMINAL PUNCTUATION ITM5, DCA TEM1 /CLEAR FOR ACCUMULATION RDS1, TAD CHR /REDUCE CHR TO OCTAL VALUE TAD M260A DCA TEM2 TAD DSW /OCTAL OR DECIMAL CONVERSION? SZA CLA /OCTAL, CK FOR 8 OR 9 JMP MUL1 /DECIMAL, 8 OR 9 IS OK TAD TEM2 /VALUE = 8 OR 9? TAD M7 SMA SZA CLA /NO, GO ON CERROR /YES /MULT. PREV. VAL. BY CONV. FACTOR TAD TEM1 CLL RTL /ARG *4 JMP MUL1+3 MUL1, TAD TEM1 CLL RTL /ARG * 4 TAD TEM1 /PLUS ARG=ARG*5 RAL /*2 TAD TEM2 /ADD NEW DIGIT DCA TEM1 /SAVE ACCUMULATED VALUE JMS I RC /READ NEXT CHAR. JMP RDS1 /DIGIT CERROR /ALPHA TAD TEM1 /PUNCT.; GET TOTAL ITM6, ISZ SIGN /IS NEGATE SW. SET? CIA /YES DCA S0 /STORE CONST VALUE TAD TEM4 /RESTORE NUMERIC MODE DCA DSW JMP ITM13 /EXIT ITM7, JMS I GETCHR /READ ALPHA CONST. SNA IERROR /NOTHING THERE DCA TEM1 JMS I GETCHR /READ NEXT CHAR FOR BENEFIT OF SKIPL CLA TAD TEM1 JMP ITM6 ITM8, JMS I CKIFP /MOVE PTR TO LITERAL EXIT ITM9, JMS I RC /READ 1ST CHAR OF LIT. JMP ITM5 /DIGIT: NUMERIC LIT. NOP /ALPHA: MUST BE K OR D JMS I TEST /LOOK FOR K,D,",- SL3-1 BL3-SL3 CERROR /ILLEGAL CHAR ITM10, DCA SIGN /SET FLAG FOR NEG. LIT. JMP ITM9 ITM11, IAC /FORCE DECIMAL LIT. ITM12, DCA DSW /FORCE OCTAL LIT. JMP ITM9 ITM13, JMS I CKIFP /CONST. EXIT ITM14, JMS I CKIFP /SYMBOL EXIT ITM15, JMP I GTSYM /NULL EXIT M260A, -260 SRS, SRSYM RC, RCH SIGN, 0 IFCTP, IFCTR CKIFP, CKIF AERROR=JMP I . ERRA CALLSP, CALLSW / /CHECK FOR TOO FEW ARGS /AERROR IF CALLSW MINUS / CKCSW, 0 TAD I CALLSP /CK SMA CLA JMP I CKCSW /OK ISZ I CALLSP /COUNT MISSING ARG NOP AERROR /FLAG / /CHECK FOR TOO MANY ARGS /AERROR IF CALLSW POSITIVE / CKCLS, 0 TAD I CALLSP /DO WE WANT THIS ARG? SMA CLA AERROR /NO, ARG COUNT OVERFLOW ISZ I CALLSP /YES, COUNT THIS ARG NOP JMP I CKCLS *1000 / / ROUTINE TO INITIALIZE POINTERS FOR THE COLLECTION OF A PAGE / INILPT, 0 CLA IAC DCA PTSZE /SET PAGE TABLE SIZE DCA PSTSZE /ZERO PAGE SYMBOL TABLE SIZE DCA LTSZE /ZERO LITERAL TABLE SIZE (COLL. PHASE) DCA LITSZE /& ASMBLY PHASE LIT TABL DCA OPSCTR /ZERO OFF PAGE SYMBOL COUNTER DCA PHASE /SET PHASE SWITCH TO COLLECTION JMS INISUB CLA CMA DCA I BNKSV CLA IAC DCA I LSTSKK TAD EQVBIT /ANY EQUIV. LEFT FROM LAST PAGE? SZA JMP EQSAV /YES, SKIP TABLE REINIT & SAVE BIT DCA EQVIPR /NO, RE-INIT EQ. TAB. PTRS DCA EQVOPR EQSAV, DCA I PTCPR /INITIALIZE PAGE TABLE CODE WORD DCA I PTSPR /INITIALIZE PAGE TABLE SYMBOL WORD CDF 00 DCA I PTOPR /INITIALIZE PT OP CODE WORD CDF 10 TAD LFSBSE /INITIALIZE LFS TABLE POINTER DCA LFSPTR DCA OBACTR /ZERO OFF BANK ADDITION COUNTER TAD RDL1X /RESTORE IN CASE OF REORG OR PAGE PSUEDO DCA DCIL1 JMP I INILPT /RETURN RDL1X, RDL1 BNKSV, BNKSAV LSTSKK, SKPSAV M211, -211 / /GENERAL PAGE TABLE INITALIZATION /DOES PARTS OF INITALIZ. COMMON TO SEVERAL /ROUTINES / INISUB, 0 TAD PTBSE /INITIALIZE PAGE TABLE CODE POINTER DCA PTCPR TAD PTBSE /INITIALIZE PAGE TABLE SYMBOL POINTER IAC DCA PTSPR TAD PTOPTB /INITIALIZE PT OP CODE POINTER DCA PTOPR CLA CMA /SET LAST BANK UNKNOWN DCA LSTBNK CLA IAC /SET LAST INSTRUCTION SKIP INDICATOR ON DCA LSTSKP CLA CMA /SET CURRENT BANK UNKNOWN DCA BANK JMP I INISUB / /SUBR. TO WRITE A LINE /MAY BE USED ONLY DURING PASS 2 (LISTING) /FUNCTION:TYPES (OR PUNCHES) EACH LINE OF SOURCE / WITH PROPER ASSEMBLY ADDR. & CODES / AT BEGINNING OF LINE (OR SPACES IF / THESE ARE OMITTED). /LINE FORMAT: /ADDR VALU RC CONTENTS OF LINE BUFFER /ERROR FLAGS TYPED BETWEEN ADDR & VALU /COLUMNS. RC=RELOCATION CODE. THE LINE /BUFFER IS IN FIELD 1 AT "LINBUF." / WLN, 0 TAD LFLG /NULL LINE? SNA CLA JMP WLN3 /YES TAD AFLG SZA CLA JMP .+4 JMS I CTYPE /IF AFLG=0 TYPE 4 SPACES JMS I CTYPE JMP .+3 TAD ADDRES /OTHERWISE TYPE 4 DIGITS JMS I OTYPE TAD EFLG /TYPE ERR. FLAG & SPACE JMS I CTYPE TAD VFLG /SAME TREATMENT FOR VALUE SZA CLA /AS FOR ADDRES JMP .+4 JMS I CTYPE JMS I CTYPE JMP .+3 TAD VALUE JMS I OTYPE TAD K240 /SPACE JMS I TYPE TAD CODE /2 DIGITS OR 2 SPACES JMS I CTYPE CDF 00 TAD I LINEB /IS THERE ANY LINE TO TYPE? CDF 10 SNA CLA JMP WLN3 /NO, EXIT JMS I CTYPE /2 SPACES TAD K240 /3RD SPACE JMS I TYPE TAD LINAX /INDEX LINE BUFFER DCA X1 DCA CHARCT /CLR COUNTER WLN1, CDF 00 TAD I X1 /GET CHAR CDF 10 SNA JMP WLN3 /END OF LINE DCA CHR TAD CHR /CK FOR TAB TAD M211 SNA CLA JMP WLN2 /YES ISZ CHARCT /COUNT 1 CHAR TAD CHR /OUTPUT IT JMS I TYPE JMP WLN1 WLN2, TAD K240 /SIMULATE TAB ISZ CHARCT JMS I TYPE TAD CHARCT AND K7 SZA CLA JMP WLN2 /CONTINUE TAB JMP WLN1 WLN3, JMS I CRLF DCA VFLG DCA EFLG DCA AFLG DCA CODE CDF 00 DCA I LINEB CDF 10 JMP I WLN LINEB, LINBUF CHARCT=TEM5 / /PATCH FOR SETCT /NOT USED BY ANY OTHER PART OF PROGRAM /(ADDED AT V15) / /FUNCTION: SET BANK=1 AFTER A "CALL" /(MUST BE DONE FOR BENEFIT OF RECT ROUTINE) / SETCAL, 0 TAD I PTCPR /CK FOR CALL CONST. AND K100 SNA CLA JMP .+3 /NO IAC /YES, BANK TO CURRENT DCA BANK TAD EXP /DO 2 INSTRUCTIONS THAT TAD UMIC /WERE KNOCKED OUT OF SETCT JMP I SETCAL *1200 / / ASSEMBLY PHASE PAR / /PPAR1 IS ACTUALLY A PART OF THE BASIC ASSEMBLY /ROUTINE ASM02. /IT ASSEMBLES ALL PARAMETERS /TYPES ARE: RC=00 ABSOLUTE CONSTANT / RC=01 RELOCATABLE ADDRESS / RC=05 CDF TO CURRENT FIELD / RC=06 CALL CONSTANT (#ARGS+EXT.SYM.#) / ALSO LITERALS USED IN ARG STATEMENTS / SUCH LITS. ARE PUT IN LIT. POOL / AND RC=01 ADDRESS OF LIT. PUT WHERE / THE ARG STATEMT OCCURS. /ADDRESS PARAMETERS ARE ACUALLY TAKEN /CAR OF BY SUBR. PPAR3S. / / PPAR1, DCA PPARY /CLR OUTPUT CODE TAD I PTCPR /CK FOR LITERAL ARG OR PARAM. AND K2 SZA CLA JMP PARLIT /YES TAD I PTCPR /PT CODE WORD AND K20 /IS IT PAR CONSTANT SNA CLA JMP PPAR3 /NO TAD I PTSPR /YES ... ACTUAL CONSTANT DCA TEM1 /TO DIRECTLY ADDRESSABLE LOC TAD I PTCPR /IS THIS A SPECIAL CONSTANT USED BY CALL AND K100 SNA CLA JMP .+5 IAC /YES, SET BANK TO CURRENT (NEW IN V15) DCA BANK IAC /& FORCE CODE=06 JMP .+5 TAD I PTCPR /IS THIS A CDF INSTRUCTION TO THIS BANK AND K1000 SNA CLA JMP .+3 TAD K5 DCA PPARY JMS I WRITEP JMS I OUTBIN /OUTPUT IT TEM1 /NO RELOCATION PPARY, 0 SKP PPAR3, JMS PPAR3S /DO ALL WORK JMP I PPAR5-1 SERALI, SRALT PARLIT, TAD I PTSPR /PUT LIT ON TAB. DCA S1 IAC DCA S0 JMS I SERALI AND K177 /GET PAGE ADDRESS TAD PAG /+ PAGE BITS DCA TEM1 ISZ PPARY /CODE FOR RELOCATABLE ADDR. JMP PPARY-3 / / SUBROUTINE TO ASSEMBLE PAR SYMBOL / /ASSEMBLE ADDRESS PARAMETER /SYMBOL MAY BE ABSOLUTE OR RELOCATABLE /NORMAL OR # REF. /IF SYMBOL IS YET UNDEFINED, AN ENTRY IS /MADE FOR IT & THE CURRENT ADDRESS IN THE /OCCURANCE TABLE. / / PPAR3S, 0 DCA PPARX /CLR OUTPUT CODE TAD ACTR /WHCH TIME ARE WE ASSEMBLING THIS PAGE /NOTE: ACTR REMAINS 1 DURING PASS 2 SNA CLA JMP I PPAR3S /FIRST TIME JUST RETURN TAD I PTSPR /SYMBOL DCA AFS /TO DIRRECTLY ADDRESSABLE LOCATION JMS I OBSYM /GET IT FROM MST AFS TAD USE /MST USE WORD AND K400 /IS IT DEFINED YET SNA CLA JMP PPAR4 /NO ... OCCURANCE TAD USE /MST USE WORD AND K3000 /IS SYMBOL ABSOLUTE SZA CLA ISZ PPARX /OUTPUT RELOCATABLE JMS I NSCHKI TAD VAL /INCREMENT IF # REF. PPAR6, DCA TEM1 JMS I WRITEP JMS I OUTBIN TEM1 PPARX, 0 JMP I PPAR3S /RETURN PPAR4, TAD AFS /SYMBOL DCA I PPAR5 /TO SUBROUTINE LOCATION TAD ILC /CUR LOC DCA I PPAR5+1 /TO SUBROUTINE LOC JMS I NSCHKI CLL RTL DCA I PPAR5+3 /SET ATEM2 FOR NORMAL OR # REFERENCE JMS I PPAR5+2 /CREATE AN OCCURANCE JMP PPAR6 /OUTPUT ZERO WORD FOR LOADER ASM01 PPAR5, ATEM3 ATEM4 L53B ATEM2 NSCHKI, NSCHK / /TWO CHARACTER TYPEOUT /FROM PACKED ASCII PAIR /CALL WITH 6-BIT PAIR IN AC /L61A ACTS AS SUBR FOR L61 / L61, 0 DCA TEM1 /SAVE CHARACTERS TAD TEM1 RTR /SHIFT HIGH 6 BITS TO LOW RTR RTR JMS L61A /MASK AND TYPE FIRST CHARACTER TAD TEM1 JMS L61A /MASK AND TYPE SECOND CHARACTER JMP I L61 /RETURN L61A, 0 AND K77 /MASK CHAR TO 6 BITS SNA /ZERO MEANS SPACE JMP L61B JMP I L61CP /HAVE DO SOME OF THIS WORK ON ANOTHER PAGE L61D, JMS I TYPE /TYPE CHAR JMP I L61A /RETURN L61B, TAD K240 /SPACE JMP L61D L61CP, L61C / / ROUTINE TO TEST CHARACTERS AND TAKE SELECTIVE EXITS / / CALL IS / JMS I TEST / SORT LIST ADDR -1 / BRANCH LIST ADDR - SORT LIST ADDR / RETURN IF ALL TESTS UNSUCCESSFUL / ASSUMES AC=0 & CHAR TO LOOK FOR IS IN CHR /SORT ENDS UNSUCCESSFULLY AT /NEGATIVE NUMBER FOLLOWING SORT LIST /IF SORT IS SUCCESSFUL, A BRANCH IS /TAKEN VIA BR. LIST ITEM CORRESPONDING /TO MATCHING SORT LIST ITEM. / TSCHR, 0 CLA TAD I TSCHR /GET SORT LIST ADDR -1 DCA X1 /AUTO-INDEX SORT LIST ISZ TSCHR /MOVE ARG PTR CDF 00 TSCHR2, TAD I X1 /GET SORT LIST ITEM SPA JMP TSCHR3 /NEG = END OF SORT LIST CIA /COMPARE ITEM WITH CHR TAD CHR SZA CLA /0 = MATCH FOUND JMP TSCHR2 /NO MATCH, TRY NEXT ITEM TAD X1 /GET ADDR. OF MATCH CDF 10 TAD I TSCHR /+BR. LIST ADDR - SORT LIST ADDR DCA TSCHR /= PTR TO BR. LIST ITEM CDF 00 TAD I TSCHR /GET BR. LIST ITEM DCA TSCHR /= BRANCH PTR FOR THE MATCH SKP TSCHR3, ISZ TSCHR /NO MATCH ON LIST CLA CLL CDF 10 JMP I TSCHR / RETURN UNSUCCESSFUL *1400 / / CALL PSEUDO OPERATION / PCALL, JMS I GETSYM /GET NEXT INPUT ITEM NOP /NOTHING THERE SKP /SYMBOL TAD CHR /CONSTANT TAD M254 /LITERAL SZA CLA /IS BREAK CHARACTER A COMMA JMP CALERR /NO ... ERROR TAD S0 /SAVE ARG COUNT DCA ARGCT ISZ X0 /PROHIBIT FLAGGING THE COMMA JMS I GETSYM /GET SUBROUTINE NAME SKP /NONE THERE JMP .+3 /SYMBOL NOP /CONSTANT CALERR, IERROR /LITERAL JMS I SKIPL JMS I SREST /SEARCH EXTERNAL SYMBOL TABLE AND OUTPUT TV DEF DCA PCALL1 /SAVE EXTERNAL SYMBOL NUMBER TAD LFS DCA I CALLFS TAD ARGCT /SET ARG COUNT IN DYNAMIC LOCATION CIA DCA CALLSW /SET CALL - ARG IN PROCESS SWITCH & COUNTER TAD ARGCT /COUNT OF ARGS RAL CLL /*2 TAD ARGCT /*3 IN CASE USING LITERAL ARGS TAD K2 /+2 JMS I PARG2 /CAN THE CURRENT PAGE HOLD IT SKP /YES JMS I INI /NO ... INITIALIZE PT PTRS ... HAD TO ASSEMBLE PAG TAD I CALLFS DCA LFS JMS I ICPLFS /PROCESS COLLECTION LFS TAD I PTCPR /PT CODE WORD TAD K30 /ADD CONSTANT BIT & PAR BIT DCA I PTCPR /TO PT CODE WORD TAD PARG6 /PLACE JMS LINK INSTRUCTION DCA I PTSPR /AS CONSTANT JMS PARG5 /INC PT PTRS & ASSMBL IF PASS 2 TAD K130 /CORRECT BIT PATTERN FOR CALL DCA I PTCPR /TO PT CODE WORD IAC /A CALL FORCES BANK TO CURRENT DCA LSTBNK /(NEW IN V15) IAC DCA BANK TAD ARGCT /COUNT OF ARGS CLL RTL /TO HIGH ORDER AC RTL RTL TAD PCALL1 /OR IN EXTERNAL SYMBOL NUMBER DCA I PTSPR /PLACE IN PT SYMBOL WORD JMP ARGPP0 /COMMON EXIT / / ARG PSEUDO OPERATION / PARG, JMS I GETSYM /GET NEXT INPUT ITEM IERROR /NOTHING THERE JMP PARGSM /SYMBOL JMP PARGCN /CONSTANT CODE IS 2 JMS I SKIPL /FIXES BUG IN V16 JMS I SLITAB /PUT LIT ON TABLE CMA /LIT CODE IS 1 PARGCN, TAD K2 SKP PARGSM, TAD SYMBOL /PAR ADDRESS DCA AFS JMS I SKIPL JMS I CKCLSP /CK FOR TOO MANY ARGS / / ROUTINE TO PUT A CDF IN THE PAGE TABLE / TAD K30 /PT CODE WORD DCA I PTCPR /TO PT JMS I ICPLFS /PROCESS ANY LFS TAD K6201 /CDF DCA I PTSPR /TO PT SYMBOL WORD TAD M2 TAD AFS /IS AFS A CONSTANT SNA JMP ARGPP4 /YES IAC /IS AFS A LITERAL SNA CLA JMP ARGPP5 /YES JMS I OBSYM /NO ... SYMBOL ... GET ITS POINTERS TO MST AFS TAD USE /AFS MST USE WORD AND K40 /IS IT A COMMON SYMBOL SNA CLA JMS CDFCHG /NO JMS ARGPP2 /INCREMENT PT PTRS AND PUT OUT A PAR TAD AFS DCA I PTSPR /PLACE SYMBOL IN PT SYMBOL WORD ARGPP0, JMS PARG5 /INC PT PTRS &ASSMBL IF PASS 2 JMP I POPEXP /EXIT TO GET NEXT LINE / ARGPP5, JMS CDFCHG JMS ARGPP2 /INCREMENT PTRS AND PUT OUT A PAR TAD K2 /SET LITERAL BIT JMP .+3 /SAVE AS CONSTANT FROM HERE / ARGPP4, JMS ARGPP2 /INCREMENT PTRS AND PUT OUT A PAR TAD K20 /SET CONSTANT BIT TAD I PTCPR /PT CODE WORD DCA I PTCPR /FOR PROPER WORD TAD S0 /PLACE CONSTANT IN PROPER LOCATION DCA I PTSPR JMP ARGPP0 / / ROUTINE TO INCREMENT POINTERS AND SET UP FOR A PAR IN THE PAGE TABLE / ARGPP2, 0 JMS PARG5 /INC PT PTRS & ASSMBL IF PASS 2 TAD K10 DCA I PTCPR JMP I ARGPP2 /RETURN K6201, CDF 10 ASMIF1, 0 TAD PASS SZA CLA JMS I ASM02S /ASSMBL NOW IF LISTING PASS JMS I INC JMP I ASMIF1 ASM02S, ASM02 INC, INCPT ARGCT, 0 CALLFS=PRSYMP /TEMP CALLSW, 0 PARG2, IFFSUB CKCLSP, CKCLS PARG5=ASMIF1 PARG6, JMS LINK M10, -10 /ROUTINE TO CHANGE CDF 10 TO CDF * CDFCHG, 0 TAD I PTCPR TAD K1000 /SET CDF * BIT IN P.T. DCA I PTCPR TAD I PTSPR /CHANGE 6211 TAD M10 /TO 6201 DCA I PTSPR JMP I CDFCHG PCALL1=CDFCHG /TEMP *1600 / / COMMN PSEUDO OPERATION / PCOMMN, JMS I GETSYM /GET ADDRESS FIELD SYMBOL NOP /NOTHING THERE SKP /SYMBOL THERE SKP CLA /CONSTANT IERROR /LITERAL JMS I SKIPL TAD LFS SNA CLA /IS THERE AN LFS JMP COMMN2 /NO ... JUST INCREMENT COUNTERS JMS I OBSYM /GET POINTERS TO LFS LFS TAD USE /MST USE WORD AND K3 /SAVE SYMBOL LENGTH TAD K440 /ADD CORRECT BITS DCA USE /FOR NEW MST USE WORD TAD S0 /NO OF COMMON LOCATIONS SNA CLA /ARE THERE ZERO JMP COMMN1 /YES ... EQUIVALENCE OUTPUT TAD HICOM /NO ... HIGHEST COMMON LOCATION USED TAD S0 /+SIZE OF THIS BLOCK DCA TEM1 /FOR TENTATIVE NEW HIGHEST TAD TEM1 /ACTUAL ADDRESS AND K7600 /ARE WE OVERFLOWING ONTO THE LAST PAGE TAD M7600 SZL CLA SERROR /YES ... ERROR TAD HICOM /LAST COMMON ASSIGNMENT IAC /+1 DCA VAL /GIVES NEW ADDRESS TAD TEM1 /NEW HIGHEST COMMON LOCATION DCA HICOM /TO PROPER LOC COMMN0, TAD VAL JMP I NULLP /GO GET NEXT LINE / / EQUIVALENCE GENERATED COMMON OUTPUT / COMMN1, TAD HICOM /PLACE LAST COMMON ASSIGNMENT IAC /+1 DCA VAL /IN MST AS ADDRESS JMP COMMN0 /EXIT / / NON LOCATION FIELD SYMBOL COMMON ASSIGNMENT / COMMN2, TAD HICOM /LAST HIGHEST TAD S0 /+CUR ASSIGNMENT DCA HICOM /FOR NEW HIGHEST TAD HICOM /NEW HIGHEST AND K7600 /ARE WE OVERFLOWING ONTO THE LAST PAGE TAD M7600 SZL CLA SERROR /YES ... ERROR JMP COMMN0 /NO ... EXIT K440, 0440 /TEXT PSUEDO-OP PTEXT, TAD FORFLG SMA SZA CLA JMP I DCIL1 JMS I GETCHR /LOOK FOR STRING START JMS I TEST SL1-1 BL1-SL1 TAD CHR /SAVE OPENING DELINEATOR CIA DCA DELIN DCA TEXCTR /CLR CHAR CTR TAD X0 /SAVE AUTO-INDEX TO START OF STR DCA TEXSUB TEX1, JMS I GETCHR /LOOK FOR END OF STRING SNA TEXERR, IERROR /TOO SOON END OF LINE TAD DELIN SNA CLA JMP TEX2 /THE END OF THE LINE ISZ TEXCTR /KEEP STRING TALLY JMP TEX1 TEX2, JMS I GETCHR /MOVE LINE PTR TO CHAR. AFTER DELINEATOR CLA JMS I SKIPL JMS I PUSH /SAVE INFO FOR A MINUTE TAD TEXCTR IAC CLL RAR /DIV BY 2 JMS I IFFS /SEE IF STR WILL FIT ON PAGE SKP CLA JMS I INI /HAD TO ASSMBL: RE-INIT PT JMS I POP /POP LINE INFO JMS I ICPLFS /PROCESS LFS TAD TEXCTR CIA DCA TEXCTR TAD TEXSUB /RE-INIT STRING INDEX DCA X0 DCA BYTE /SET FOR LEFT BYTE TEX5, JMS I GETCHR AND K77 /EXTRACT 6 BIT ISZ BYTE SKP JMP TEX4 /RIGHT BYTE CLL RTL RTL /MOVE LEFT RTL DCA TXSV CMA /SET PTR TO RT BYTE DCA BYTE SKP TEX4, JMS TEXSUB ISZ TEXCTR JMP TEX5 /NOT DONE ISZ BYTE /CK FOR ODD CHAR LEFT OVER SKP /NO JMS TEXSUB /YES JMP I POPEXP TEXSUB, 0 TAD TXSV /COMBINE LEFT & RT BYTES DCA I PTSPR TAD K30 /PAR CONST BITS TAD I PTCPR DCA I PTCPR TAD X0 /SAVE INDEX DCA TXSV JMS I ASIF /INC PTRS & ASSMBL IF PASS 2 TAD TXSV /RESTOR INDEX DCA X0 JMP I TEXSUB PUSH, PUSHIN POP, POPIN ASIF, ASMIF1 IFFS, IFFSUB DELIN, 0 TEXCTR, 0 TXSV=S3 BYTE=DELIN / /WRITE LINE IF IN PASS 2 / WLNIF1, 0 TAD PASS /WHICH PASS? SZA CLA JMS I WLNP /LISTING JMP I WLNIF1 / *2000 /READ & DECODE 1 LINE /IGNORES NULL LINES & COMMENT LINES / EXP=NON-0 IF NO OPERATION ON LINE (CONST, LIT, / OR ADDRESS ONLY) / SK=NON-0 IF SKIP INSTR. / UMIC=NON-0 IF OP CODE IS 6 OR 7 / IB=NON-0 IF INSTR IS INDIRECT / NSGN=NON-0 IF AFS IS # SYMBOL / OP=OP CODE / LFS=PTR TO LFS IN SYM. TAB., IF ANY /*** AFS=2 IF CONSTANT PARAMETER OR CONST. AFS*** /*** AFS=1 IF LITERAL PARAMETER OR LIT. AFS*** / AFS=SYM. TAB. PTR. TO ADDRESS PARAMETER OR AFS / DCIL, 0 RDL1, JMS I RLNP /READ IN A LINE DCA LFS /CLR STORAGE FOR LINE INFO DCA EXP DCA OP DCA SK DCA IB DCA NSGN DCA UMIC DCA I RECTI /CLR RECOUNT FLAG FOR CPLFS ISZ LINE /INC LINE COUNT ISZ X0 /DO NOT BACK UP X0 JMS I GETSYM /READ 1ST ITEM JMP RDL11 /NULL LINE OR COMMENT JMP RDL7 /SYMBOL - POSSIBLE LFS JMP .+3 /SET AFS=2 FOR CONSTANT RDL3, JMS I SLITAB /PUT LIT ON TAB CMA /AFS=1 FOR LITERAL RDL2, TAD K2 ISZ EXP /SET PARAMETER EXPRESSION FLAG RDL5, DCA AFS JMS I SKIPL /SKIP TO END OF LINE JMP I DCIL /RETURN RDL7, TAD CHR /CK FOR COMMA TAD M254 SZA CLA JMP RDL9 /NO, SHOULD BE SPACE,TAB,CR,OR ; JMS I WHATPP SKP IERROR /OP SYMBOL AS TAG TAD SYMBOL /NO, ENTER PTR TO LFS DCA LFS ISZ X0 /PROHIBIT FLAGGING COMMA JMS I GETSYM /GET ITEM AFTER LFS JMP I PB0 /NULL AFTER LFS IS BSS0 JMP RDL9 /SYMBOL-OP OR PARAMETER JMP RDL2 /CONSTANT JMP RDL3 /LITERAL RDL9, JMS I WHATPP JMP RDL4 /NO-MUST BE ADDRESS PARAMETER TAD USE /IS SYMBOLE A PSUEDO-OP AND K40 SZA CLA /NO JMP RDL18 /YES TAD USE /IS SYMBOL AN MRI? AND K400 SNA CLA JMP RDL14 /NO-OPR OR I/O INSTR. TAD USE /MRI-PUT OP SKIP BIT AND K20 /INTO SKIP FLAG DCA SK TAD VAL DCA OP SKP RDL10, ISZ IB / SET INDIRECT FLAG JMS I GETSYM /READ SYMBOL AFTER MRI IERROR /NOTHING THERE JMP RDL12 /SYMBOL IAC /AFS=2 FOR CONST. AFS IAC /AFS=1 FOR LIT.AFS JMP RDL5 /SKIP TO END OF LINE RDL12, TAD SYMBOL /CK FOR I CIA TAD IBTI /SYM. ADDR-I ADDR SNA CLA /NOT I JMP RDL10 /IT IS I JMS I WHATPP JMP .+3 IERROR /AFS NOT USER SYMBOL RDL4, ISZ EXP /ENTER HERE ON ADDRESS PAR. TAD CHR /CK FOR # TAD M243 SZA CLA JMP .+4 ISZ NSGN /YES JMS I GETCHR /PREVENT FLAGGING # CLA TAD SYMBOL /SET PTR TO AFS JMP RDL5 RDL13, JMS I WHATPP IERROR /ELIM USER SYM TAD USE /CK FOR OPR OR I/O INST. AND K4440 /ELIM. MRI, PSUEDO SZA CLA /OK IERROR /ILLEGAL SYMBOL RDL14, TAD USE /COMPARE NEW MICRO-GRP AND K300 /WITH OLD, IF ANY SNA JMP RDL16 /GRP0 OK WITH ANYTHING DCA TEM1 /NEW IS NOT 0 TAD MGRP /CK OLD MGP, IF ANY SNA /THERE IS ONE JMP RDL15 /0 OK WITH ANY NEW CIA /COMPARE OLD TAD TEM1 /WITH NEW SZA CLA /SAME-OK IERROR /ILLEGAL COMBINATION RDL15, TAD TEM1 /MICRO-GRP=NEW DCA MGRP RDL16, TAD VAL /OR NEW VALUE INTO OLD OP CMA /NOT A AND OP /AND B TAD VAL /+A DCA OP /=A OR B TAD USE /GET NEW SKIP BIT AND K20 SZA CLA /NON-SKIP ISZ SK /SET SKIP FLAG JMS I GETSYM /GET NEXT INSTR OF STRING JMP RDL17 /NONE THERE - END OF SRTING JMP RDL13 /SYMBOL (AS EXPECTED) NOP /CONST, ILLEGAL IERROR /LIT ILLEGAL RDL17, ISZ UMIC /SET MICRO INST FLAG JMP RDL5 /SKIP TO END OF LINE IBTI, II MGRP=UMIC RLNP, RLN PB0, PBSS2 K4440, 440 K300, 300 WHATPP, WHATYP M243, -243 /NULL LINE OR COMMENT RDL11, JMS I SKIPL JMP I NULLP /PSUEDO-OP RDL18, TAD VAL /GET PSUEDO-OP ADDRESS DCA TEM1 /STORE PTR JMP I TEM1 /TO PROPER PSUEDO-OP HANDLER *2200 / /END OF LINE PROCESSOR FOR COLLECTION PHASE /LOOKS FOR SEMI-COLON BEFORE A SLASH /STAR OR SLASH OR 000 (CR) MEANS NORMAL /END OF LINE. SEMI-COLON MEANS WE MUST /SAVE CURRENT ADDRESS IN LINE BUFFER FOR /START OF "NEXT" LINE. /THIS ROUTINE ALSO HAS THE IMPORTANT /FUNCTION OF WATCHING THE FORTR PSUEDO-OP /FLAG. IF FLAG IS ON L72 CAUSES LINE /TO BE TREATED AS NON-EXISTENT. L72 MUST /BE CALLED FOR EVER INSTR. LINE OR PSUEDO-OP /LINE (EXCEPT END, PAUSE, FORTR) BEFORE /ACTUAL PROCESSING OF THAT LINE BEGINS. / L72, 0 SKP JMS I GETCHR JMS I TEST SL6-1 BL7-SL6 IERROR L72S, TAD X0 DCA SCOLON L72X, TAD FORFLG /IF FLG=1 WE ARE SKIPPING SMA SZA CLA /1ST HALF OF FORTRAN OUTPUT JMP I DCIL1 JMP I L72 /KLUDGE TO RESET ILC BECAUSE A1 COMES BEFORE UDPAGE IN PASS 2 FIXILC, 0 TAD PASS SNA CLA JMP I FIXILC TAD PAG DCA ILC JMP I FIXILC / /COLLECTION PHASE ROUTINE /SEARCH PAGE SYMBOL TABLE FOR SYMBOL /CALLING SEQUENCE: (ASSUMES SYM.ID.IS IN "SYMBOL") / JMS SPSTB / RETURN IF NOT FOUND (HAD TO ENTER IT) / RETURN IF FOUND /THE SEARCH IS AT L31; ENTERING DONE BY L32. / SPSTB, 0 TAD PSTSZE /SIZE OF PST SZA /IS IT EMPTY JMP L31 /NO L32, TAD PSTSZE /IS PST FULL? TAD PSTMAX SMA CLA SERROR /YES TAD PSTSZE /SIZE OF PST*2 RAL CLL TAD PSTBSE /+BASE DCA PSTSPR /GIVES POINTER TO SYMBOL ISZ PSTSZE / INCREMENT COUNTER TAD SYMBOL /PHYSICALLY MOVE SYMBOL DCA I PSTSPR TAD PSTSPR IAC /ADD 1 DCA PSTCPR /FOR CODE WORD POINTER TAD PASS SNA CLA JMP L32A /ASSEMBLY: JUST ZERO CODE WORD JMS I OBSYM /LISTING SYMBOL TAD VAL /CK IF SYM IS ON PAGE FORWARD REF. AND K7600 /EXTRACT PAGE BITS CIA TAD PAG SZA CLA JMP L32A /NOT ON PAGE TAD K4000 /ON PAGE: SET DEFINED BIT ISZ SPSTB /& SET FOR "FOUND" RETURN L32A, DCA I PSTCPR JMP I SPSTB /NOT FOUND / L31, CIA /PLACE - COUNT OF TABLE DCA TEM1 /IN INDEX LOC TAD PSTBSE /PLACE TABLE BASE DCA TEM2 /IN ADDRESS LOC L31B, TAD I TEM2 /-SYMBOL CIA TAD SYMBOL /+ REQUESTED SYMBOL SNA CLA JMP L31A /FOUND ISZ TEM2 /NOT FOUNE ... INCREMENT ADDRESS ISZ TEM2 ISZ TEM1 /OVER JMP L31B /NO ... TRY AGAIN JMP L32 /YES ... PLACE ON TABLE L31A, ISZ SPSTB /FOUND ... INDEX FOR EXIT TAD TEM2 /POINTER TO SYMBOL DCA PSTSPR /TO PROPER LOC TAD PSTSPR /SYMBOL POINTER IAC /+1 DCA PSTCPR /GIVES CODE POINTER JMP I SPSTB /EXIT / PSTMAX, -100 /MUST BE (PSTB-PTB)/2 / /OUTPUT 6 CHARACTER ASCII NAME /TO BINARY TAPE /FOR EXTERNAL SYMBOL DEFN. /USED BY LFSCK (FOR RC=03) & 666 (FOR RC=17) /OUTPUT GOES VIA TYPE PTR, BUT PTR IS /CHANGED TO L66E SO CHAR CAN BE PUNCHED /& ADDED TO CK.SUM INSTEAD OF TYPED. /668 IS USED ONLY IN PAS1- /ASSEMBLY PHASE1 / L68, 0 TAD PASS SZA CLA JMP I L68 /EXIT IF LISTING TAD L66B /FOOL OUTPUT ROUTINE DCA TYPE /SO IT THINKS PUNCH IS TTY DCA S1 DCA S2 DCA S3 TAD AS0 DCA X1 TAD SYMBOL /MST SYMBOL ADDRESS - 1 DCA X2 /TO AUTO X2 TAD USE /MST USE WORD AND K3 /SYMBOL LENGTH CIA DCA TEM4 /-WORDS TO LOC CDF 00 TAD I X2 /OBTAIN SYMBOL CDF 10 DCA I X1 ISZ TEM4 JMP .-5 TAD AS0 DCA X2 TAD M3 DCA TEM4 TAD I X2 JMS I CTYPE /PUNCH IT EXPANDED ISZ TEM4 /MORE JMP .-3 /YES TAD L66D /RESTORE TYPE ROUTINE DCA TYPE JMP I L68 / / DUMMY TYPE ROUTINE FOR EST TV DEFINITION / T8=SPSTB /SCRATCH LOC L66E, 0 DCA T8 /SAVE CHAR TAD T8 TAD CSUM /ADD CHAR TO BINARY CHECK SUM DCA CSUM TAD T8 JMS I PUNCH /OUTPUT CHAR ON BINARY TAPE JMP I L66E /RETURN L66B, L66E L66D, L64 / /INITIALIZATION THAT WONT FIT IN "INITA" / INITMR, 0 DCA I VALPTP DCA I LLFSP DCA LINE JMP I INITMR VALPTP, VALPTR LLFSP, LLFS *2400 / /COLLECTION PHASE ROUTINE. /SEARCH LITERAL TABLE FOR VALUE IN S0. /PLACES LITERAL ON TABLE IS NOT THERE. /OTHERWISE DOES NOTHING. / SLTAB, 0 CLA TAD LTSZE /SIZE OF TABLE SZA /IS TABLE EMPTY JMP SLITB1 /NO ... SEARCH IT TAD LTBSE /BASE COLL. PHASE LIT. TABLE) TAD LTSZE /+DISPLACEMENT DCA TEM1 /GIVES ADDRESS POINTER TAD S0 /PHYSICALLY MOVE LITERAL CDF 00 DCA I TEM1 ISZ LTSZE /INCREMENT COUNT CDF 10 JMP I SLTAB /RETURN SLITB1, CIA /PLACE - COUNT DCA TEM1 CMA TAD LTBSE /LTBSE-1 DCA X1 /TO AUTO X1 SLITB2, CDF 00 TAD I X1 /-TABLE CDF 10 CIA TAD S0 /+REQUESTED LITERAL SNA CLA /SAME JMP I SLTAB /YES, RETURN ISZ TEM1 /MORE SYMBOLS TO TEST JMP SLITB2 /YES JMP SLTAB+5 /NO / /COLLECTION PHASE EQUIVALENCE PROCESSOR /(FORMERLY CALLED BSS0 PROCESSOR) /ENTERS SYMBOL ID. IN EQ. TAB / PBSS2, JMS I SKIPL TAD LFS /LOCATION FIELD SYMBOL SNA CLA /IS THERE ANY JMP I NULLP /NO CDF 00 TAD BSSSW /ARE WE PROCESSING A BSS 0 SEQUENCE SZA CLA JMP .+5 /YES ... SKIP INITIALIZING TAD EQVIPR /NO ... INITIALIZE DCA CTPTR /SET INPUT POINTER TO COUNT LOCATION DCA I CTPTR /ZERO COUNT ISZ EQVIPR /INCREMENT INPUT POINTER TAD LFS /LOCATION FIELD SYMBOL DCA I EQVIPR /PLACE LFS ON EQUIVALENCE TABLE ISZ I CTPTR /INCREMENT COUNT CDF 10 JMS I ICPLFS /PROCESS IT FOR COLLECTION CLA CMA /REMOVE LFS FROM LFS TABLE TAD LFSPTR DCA LFSPTR ISZ BSSSW /SET BSS 0 IN PROGRSS SWITCH CMA /REMOVE EXTRA LFS BIT TAD I PTCPR AND K7577X /REMOVE EXTRA BSS0 BIT TAD K200 /PLACE BSS0 BIT ON PT DCA I PTCPR TAD PSTCPR /SAVE PST ADDRESS IN CASE NEXT LINE OVERFLOWS DCA EQVBIT ISZ EQVIPR /INCREMENT POINTER JMP I NULLP /EXIT FOR NEXT LINE CTPTR, EQUTB LFSBSI, LFSBSS K7577X, 7577 / /ASSEMBLY PHASE EQUIVALENCE PROCESSOR /EXTRACTS ENTIRE GROUP OF TAGS EQUIVALENCED /TO SAME ADDRESS FROM TABLE & DEFINES /THEM BY USING LFSCK FROM LFSBSS ON. / ANUMCK, 0 TAD I PTCPR /PT CODE WORD AND K200 /MASK OUT BSS 0 BIT SNA CLA /IS IT A BSS 0 SYMBOL JMP I ANUMCK /NO ... EXIT CMA DCA BANK /BANK UNKNOWN TAD AANUM7 /CHEAT RETURN ADDRESS DCA I LFSCHK /SO IT LOOKS LIKE A JMS FROM SOMEWHERE ELSE JMS GNEQ /GET COUNT CIA /NEGATE DCA OPICTR /SAVE IN INDEX LOC JMS GNEQ /GET SYMBOL JMP I LFSBSI /PROCESS SYMBOL ANUM7, JMS I SPSTAB /SET DEFINED BIT ON PST IN CASE NOP /THIS WAS CARRIED OVER JMS I PSTD /THE LAST PAGE ISZ OPICTR /ANY MORE ? JMP ANUM7-2 /YES JMP I ANUMCK /EXIT PSTD, PSTDEF AANUM7, ANUM7 / / ROUTINE TO GET NEXT ITEM OFF EQUIVALENCE TABLE / GNEQ, 0 CDF 00 TAD I EQVOPR ISZ EQVOPR CDF 10 JMP I GNEQ / /SUBR. TO LIST A LINE IF IN PASS 2 / /CALLING SEQUENCE: JMS I WRITEP / JMS I OUTBIN / LOCATION OF WORD TO OUTPUT / CONSTANT=RELOC. CODE / RETURN /(CALL TO OUTBN MUST ALWAYS FOLLOW CALL /TO WRITE.) /ASSUMES CURRENT PC IS IN "ILC" /SETS FLAGS FOR PROPER LISTING /& CALLS WLN TO DO THE DRUDGE WORK. / WRITE, 0 TAD PASS SNA CLA JMP I WRITE /PASS 1 ISZ WRITE TAD I WRITE /ADDRESS OF VALUE DCA VALUE TAD I VALUE /GET VALUE DCA VALUE ISZ VFLG ISZ WRITE TAD I WRITE /GET RELOC. CODE DCA CODE TAD CODE SNA JMP WRITE2 RTR /CONVERT TO 6BIT RAR AND K7 TAD K60 CLL RTL RTL RTL DCA ADDRES /TEM SAVE TAD CODE AND K7 TAD K60 TAD ADDRES DCA CODE WRITE2, TAD ILC /CURRENT ADDRESS DCA ADDRES ISZ AFLG ISZ LFLG JMS I WLNP /LIST ISZ WRITE JMP I WRITE K60, 60 OPICTR=WRITE CDZSKP, JMS CDZSK *2600 / / BLOCK PSEUDO OPERATOR / PBSS, JMS I GETSYM /GET NEXT INPUT ITEM JMP I PBSS2I /NOTHING THERE (BSS 0) SKP /SYMBOL SKP CLA /CONSTANT IERROR /LITERAL JMS I SKIPL JMS I IPSHIN /SAVE ALL CURRENT INFO JMP I PBSS4I /CHECK BLOCK SIZE PBSS5, JMS IFFSUB /CAN THIS FIT IN CORE SKP CLA /YES JMS I INI /NO ... INITIALIZE PT POINTERS JMS I IPOPIN /POP CURRENT INFORMATION DCA BSSSW /CLEAR BSS0 SWITCH JMS I ICPLFS /PROCESS CURRENT LFS TAD S0 /-BLOCK CONSTANT CIA DCA TEM12 /TO INDEX LOCATION PBSS1, TAD K30 /PAR CONSTANT PT BIT STRUCTURE TAD I PTCPR /DONT LOSE LFS AND BSS 0 INFORMATION DCA I PTCPR JMS I ASMIF /DO THEM INDIVIDUALLY IF PASS 2 ISZ TEM12 /MORE JMP PBSS1 /YES JMP I POPEXP /EXIT TO GET NEXT LINE PBSS2I, PBSS2 TEM12, 0 /RESRV STORAGE CTR PBSS4I, PBSS4 / / CPAGE PSEUDO OPERATION / PIFF, JMS I GETSYM /GET NEXT INPUT ITEM NOP /NONE THERE SKP /SYMBOL SKP CLA /CONSTANT IERROR /LITERAL JMS I SKIPL JMS I WLNIF /LIST IF PASS 2 TAD S0 /BINARY CONSTANT JMS IFFSUB /USE GLOBAL IFF SUBROUTINE JMP I DCIL1 /DIDNT HAVE TO ASSEMBLE PAGE JMP I RSTRTI /GO INITIALIZE / / IFF SUBROUTINE / CALL IS TAD PAGE INCREMENT / JMS IFFSUB / OK RETURN / HAD TO ASSEMBLE PAGE RETURN /FUNCTION: TO SEE IF GIVEN NO. OF WORDS /WILL FIT ON CUR. PAGE; IF SO, RETURN /AT OK RET.; OTHERWISE ASSEMBLE PAGE WE /HAVE NOW & INIT A NEW PAGE & RET. AT /SECOND RET. LOC. /IFFSUB IS USED BY CPAGE,BLOCK & /SEVERAL OTHER P-OPS / / IFFSUB, 0 DCA TEM1 /SAVE INCREMENT JMS I ICPGES /COMPUTE PAGE SIZE TAD TEM1 /ADD INCREMENT TAD M201 /IS TOTAL .GT. PAGE SIZE (1 EXTRA BECAUSE SPA SNA CLA /PTSZE INCREMENTED BEFORE PSUEDO-OP JMP I IFFSUB /NO ... RETURN CLA CMA /YES ... DECREMENT PAGE TABLE SIZE TAD PTSIZ SNA /WATCH FOR AN EMPTY PAGE JMP .+4 /LEAVE THINGS ALONE IF PAGE EMPTY DCA PTSIZ JMS I L55I /ASSEMBLE THE PAGE JMS I UPDATE JMS I FIXIL ISZ IFFSUB /INCREMENT FOR EXIT JMP I IFFSUB /RETURN IPSHIN, PUSHIN IPOPIN, POPIN WLNIF, WLNIF1 ASMIF, ASMIF1 RSTRTI, RSTRT UPDATE, UDPAGE ICPGES=CPGESI M201, -201 FIXIL, FIXILC / ERROR ROUTINE / K6200, 6200 FATAL, 0 ERRE, TAD K6200 /0500 ERRS, ISZ FATAL /SET FATAL ERROR SWITCH TAD K600 /2300 JMP .+3 ERRM, TAD LFS DCA I LLFSI TAD K400 /1500 ERRI, TAD K600 /1100 ERRC, TAD K200 /0300 ERRA, TAD K100 /0100 DCA EFLG TAD PASS SZA CLA JMP ERREX /LISTING PASS JMS I CRLF /TYPE CRLF TAD EFLG /TYPE E# JMS I CTYPE TAD AT JMS I CTYPE JMS I CTYPE /TYPE 2 SPACES TAD I LLFSI DCA INDEX CDF 00 TAD I INDEX ISZ INDEX AND K3 CMA DCA COUNT TAD M3 /SET 6 CHAR PRINT CTR DCA MSCTR ISZ COUNT SKP /NOT DONE YET WITH SYMBOL JMP ERR1 /DONE : SEE IF SPACES NEEDED CDF 00 TAD I INDEX CDF 10 ISZ INDEX JMS I CTYPE /TYPE THE LETTERS OR SPACES ISZ MSCTR JMP .-11 ERR11, TAD SPPLUS /TYPE SPACE + JMS I TYPE TAD LINE /TYPE LINS FROM LAST LFS JMS I OTYPE JMS I CRLF ERREX, TAD FATAL /FATAL ERROR? SNA CLA JMP .+3 /NO HLT JMP I K200 /IF YES GO TO START AFTER HALT TAD PHASE /WHAT PHASE ARE WE IN SZA CLA JMP I ERR2 /ASSEMBLY JMP I NULLP /COLLECTION ERR2, ASM02R LLFSI, LLFS INDEX=S1 COUNT=S2 MSCTR=S3 AT, 0124 SPPLUS, 253 ERR1, JMS I CTYPE /FILL OUT THE REST WITH SPACES ISZ MSCTR JMP .-2 JMP ERR11 *3000 / /ASSEMBLY PHASE ROUTINE TO CHECK FOR A /LOC. TAG (LFS) & PROCESS IF FOUND. /FUNCTION: (ASMBLY PHASE 1 - ACTR=0) / (1) DEFINE TAG / (2) OUTPUT VALUE AT PAST OCCURANCES OF / FORWARD REF. TO THIS TAG / (3) CONDENSE OCC. TAB IF POSSIBLE. / / (ASMBLY PHASE 2 - ACTR=1 / (THIS INCLUDES ALL OF PASS 2 AS / ACTR STAYS=1 IN PASS 2) / (1) OUTPUT EXT. SYM. DEFN. ON REL-TAPE / LFSCK, 0 TAD I PTCPR /PT CODE WORD RAR SNL CLA /IS THERE A LFS JMP I LFSCK /NO ... RETURN CMA DCA BANK /BANK UNKNOWN TAD PASS /MOVE BACK PTR IF IN LISTING PASS CIA TAD LFSPTR DCA LFSPTR CDF 00 TAD I LFSPTR /ACTUAL LFS CDF 10 ISZ LFSPTR LFSBSS, DCA LFS JMS I OBSYM /OBTAIN LFS FROM MST LFS TAD ACTR /WHICH TIME ARE WE ASSEMBLING THIS PAGE /ACTR REMAINS 1 DURING PASS2 SZA CLA JMP L67 /SECOND TIME: NO TEST TAD USE /CK FOR MULTI DEF. AND K400 SZA CLA MERROR /YES JMP LFSCK1 L67, TAD USE /MST USE WORD AND K200 /(L67 HAS NO EFFECT IN PASS 2) SNA CLA /IS IT AN ENTRY JMP LFSCK1 /NO / / EXTERNAL SYMBOL DEFINITION / JMS I OUTBIN /OUTPUT BINARY DEFINITION ILC 3 JMS I L68I /PUNCH SYMBOL ON TAPE LFSCK1, TAD ILC /CUR ILC DCA VAL /PLACE ON MST AS DEFINITION TAD USE /SYMBOL TABLE USE WORD AND K7377 /MASK OUT DEFINED BIT TAD K400 /ADD IN DEFINED BIT DCA USE /SYMBOL IS NOW DEFINED IN MST / / NOW LETS SEARCH OCCURANCE TABLE TO SEE IF WE / CAN CLEAR OFF A FEW / TAD OTP /SIZE OF OCCURANCE TABLE CMA TAD TOPCOR SNA JMP I LFSCK /RETURN IF EMPTY CIA DCA TEM1 /PLACE - SIZE IN INDEX LOC TAD OTP /PLACE TABLE BASE IN TEM2 DCA TEM2 /TEM2=PTR TO SYMBOL CDF 00 L51, DCA L51FLG /CLR # SWITCH ISZ TEM2 CMA /CK 1ST WORD FOR # FLAG TAD I TEM2 SZA CLA JMP .+4 /NO ISZ L51FLG /YES, SET SWITCH ISZ TEM2 /MOVE PTR & CTR ISZ TEM1 /PAST EXTRA WORD TAD I TEM2 /- OCCURRING SYMBOL CIA TAD SYMBOL /+SYMBOL JUST DEFINED SNA CLA /ARE THEY EQUAL JMP .+7 ISZ TEM2 L51E, ISZ TEM1 /NO ... ARE THERE MORE ISZ TEM1 /(2 WORDS PER OCCURRANCE) JMP L51 /YES CDF 10 JMP I LFSCK /NO ... RETURN / / AN OCCURANCE FOUND ... OUTPUT IT / ISZ TEM2 TAD I TEM2 /ACTUAL ADDRESS CDF 10 DCA TEM4 JMS I DUMMY /OUTPUT ADDRESS AS ORIGIN TEM4 4 TAD VAL TAD L51FLG /ADD 1 IF # REF DCA TEM4 JMS I DUMMY /OUTPUT SYMBOL VALUE AS RELOCATABLE DEF TEM4 1 CDF 00 / / NOW MOVE OCCURANCE TABLE UP 2 / L51G, TAD OTP DCA TEM4 /SAVE TAD TEM2 DCA OTP /RESET TAD L51FLG TAD K2 CIA TAD TEM2 CIA TAD TEM4 SNA JMP L51E /NOTHING TO MOVE DCA TEM3 /CTR FOR MOVE UP TAD TEM3 CIA TAD TEM4 DCA TEM4 /TO PTR L51J, TAD I TEM4 DCA I OTP CMA TAD TEM4 DCA TEM4 CMA TAD OTP DCA OTP ISZ TEM3 JMP L51J JMP L51E L68I, L68 K7377, 7377 TOPCOR, CORE1 MERROR=JMP I . ERRM / / PUNCH ROUTINE / L63, 0 PLS /SELECT IT PSF /WAIT FOR PUNCH JMP .-1 CLA /EXIT WITH CLEAR AC JMP I L63 / /UPDATE "PAGE" TO NEXT CORE PAGE /I.E., PAGE =PAGE+200 / UDPAGE, 0 CLA TAD PAG /OLD PAGE SETTING TAD K200 /+SIZE OF ONE PAGE DCA PAG /FOR NEW PAGE SETTING JMP I UDPAGE /EXIT L51FLG=UDPAGE *3200 / / SUBROUTINE TO OUTPUT ASSEMBLY PHASE LITERAL / TABLE AND REMEMBER OCCURANCES / OAPLT, 0 TAD ACTR /SKIP IT THE 1ST TIME SNA CLA JMP I OAPLT JMS I SAVLNI /PREVENT ANY LINE TYPEOUT TAD LITSIZ /SIZE OF TABLE SNA JMP I OAPLT /RETURN IF NONE CIA DCA ATEM1 /PLACE - SIZE IN LOC CLA CMA TAD LITBSE /BASE - 1 DCA X2 /TO AUTO 12 TAD APMSW /ARE WE IN AUTO PAGING MODE SZA CLA JMP .+3 /NO ... OK TAD PGEESC /YES ... SUBRTACT SIZE OF PAGE ESCAPE RAR CLL /DIVIDED BY 2 TAD LITSIZ /& SUBTR. LITSIZ CIA DCA LITPTR /TEM SAVE TAD LITPTR TAD PAG /INITIALIZE PAGE ADDRESS TAD K200 DCA ILC TAD LITSIZ /INIT LIT TBL PTR CLL RAL /(MULT BY 2) TAD LITBSE DCA LITPTR IAC SKP / L52, ISZ ILC /INC PAGE LOC TAD M3 /DECREMENT LIT TBL PTR TAD LITPTR DCA LITPTR CDF 00 TAD I LITPTR /CODE DCA ATEM2 ISZ LITPTR TAD I LITPTR /SYMBOL OR LITERAL DCA ATEM3 CDF 10 CLA CMA TAD ATEM2 /IS CODE 1 ... LITERAL SZA CLA JMP L53 /NO ... SYMBOL JMS I ILC4P /YES ... OUTPUT PAGE ADDRESS AS ORIGIN JMS I WRITEP JMS I OUTBIN /OUTPUT LITERAL WITH NO RELOCATION ATEM3 0 L52A, ISZ ATEM1 /MORE JMP L52 /YES ISZ ILC /SET FOR ESCAPE JMP I OAPLT /NO ... RETURN L53, JMS I OBSYM /OBTAIN SYMBOL FROM MST ATEM3 TAD USE /MST USE WORD AND K400 /IS SYMBOL DEFINED SNA CLA JMP L53A /NO ... OCCURANCE JMS I ILC4P /YES ... OUTPUT ORIGIN TAD ATEM2 AND K4 SZA CLA IAC /ITS A # TAD VAL /ACTUAL VALUE DCA ATEM3 /TO DIRRECTLY ADDRESSABLE LOC JMS I WRITEP JMS I OUTBIN /OUTPUT VALUE ATEM3 1 /RELOCATABLE JMP L52A /TRY MORE L53A, TAD ILC DCA ATEM4 JMS L53B /PLACE ON OCCURANCE TALBE JMP L52A /TRY MORE / / SUBROUTINE TO CREATE AN OCCURANCE IN OCCURANCE TABLE / L53B, 0 TAD OTP CIA CLL IAC /ALLOW FOR # FLAG TAD STT /+TOP OF MST SZL CLA /OVERFLOW? SERROR /YES ... OUT OF CORE TAD M2 TAD OTP /OT SIZE - 2 DCA OTP /GIVES ADDRESS ON OCCUR TABLE TAD OTP DCA X1 CDF 00 TAD ATEM3 /SYMBOL DCA I X1 /TO OCCUR TABLE TAD ATEM4 /PAGE ADDRESS DCA I X1 /TO OCCUR TABLE TAD ATEM2 /CK FOR # AND K4 SNA CLA JMP .+6 /NO IAC /SET FLAG WORD DCA I OTP CMA /MOVE DOWN PTR TAD OTP /PAST EXTRA WORD DCA OTP CDF 10 JMP I L53B /TRY MORE / ATEM1, 0 ATEM2, 0 ATEM3, 0 ATEM4, 0 SAVLNI, SAVLIN LITPTR, 0 PFORT, ISZ FORFLG /SET TO 1 FOR 1ST PASS THRU FORTRAN CODE NOP /END PSUEDO SETS IT TO -1 TO NULLIFY JMS I SKIPL /SO BACK TO 0 FOR 2ND PASS JMP I NULLP / /DO SOME WORK FOR L61A / L61C, DCA TEM2 /SAVE 6-BIT CODE TAD TEM2 AND K40 SNA CLA TAD K100 /ADD CORRECT LEADING BITS TAD K200 TAD TEM2 /ADD CHAR BITS JMP I L61DP L61DP, L61D ILC4P, ILC4 *3400 / / ROUTINE TO PUNCH WORD AND RELOCATION BITS ON TAPE / CALL IS / JMS OUTBN / ADDRESS OF WORD / BITS / OUTBN, 0 CLA CLL TAD I OUTBN /ADDRESS OF WORD DCA OUT1 ISZ OUTBN TAD I OUTBN /RELOCATION BITS RTL /SHIFT LEFT 4 RTL DCA OUT2 /SAVE TAD PASS SZA CLA JMP OUTEX TAD I OUT1 /ACTUAL WORD DCA OUT1 /MUST DO THIS SINCE WE DO A JMS OUTBN;CSUM;10 TAD OUT1 /AT LOC. PCSM, AND OTHERWISE CSUM WOULD CHANGE AFTER CALL TO SUM. RTL /ROTATE HIGH 4 BITS TO LOW RTL RAL AND K17 /MASK TAD OUT2 /ADD REL BITS JMS SUM /ADD TO CHECK SUM JMS I PUNCH /PUNCH IT TAD OUT1 /REMAINDER OF WORD AND K377 /MASK TO 8 BITS JMS SUM /ADD TO CHECK SUM JMS I PUNCH /PUNCH IT OUTEX, ISZ OUTBN /INDEX FOR EXIT JMP I OUTBN /RETURN SUM, 0 DCA TSUM TAD CSUM TAD TSUM DCA CSUM TAD TSUM JMP I SUM TSUM=NSGN OUT1=IB OUT2=TEM5 K377, 377 K17, 17 / / ROUTINE TO SEARCH ASSEMBLY PHASE LITERAL TABLE / FOR 2 WORD ENTRY IN S0-S1 / PLACES ON TABLE IF NOT THERE / RETURNS PAGE ADDRESS IN AC / SRALT, 0 CLA DCA TEM2 /ZERO SEARCH COUNTER CDF 00 TAD LITSIZ /NO OF ENTRYS SZA JMP L40 /NON ZERO ... SEARCH L39, TAD LITSIZ /NO OF ENTRYS - 1 RAL CLL /MULTIPLY BY 2 TAD LITBSE /ADD BASE OF TABLE DCA TEM1 /GIVES ADDRESS OF NEW ENTRY ISZ LITSIZ /INCREMENT COUNT TAD S0 /FIRST WORD DCA I TEM1 /TO TABLE ISZ TEM1 /INCREMENT ADDRESS TAD S1 /SECOND WORD DCA I TEM1 /TO TABLE TAD LITSIZ /ENTRY NO / COMPUTE PAGE ADDRESS FROM DISPLACEMENT IN TABLE / AND STATUS OF AUTOMATIC PAGING MODE SWITCH AND SIZE OF PAGE / ESCAPE REQUIRED / L40A, DCA TEM1 /SAVE LOCATION IN TABLE TAD PASS SZA CLA JMP L40C /LISTING TAD APMSW /ARE WE IN AUTOMATIC PAGING MODE? SNA CLA TAD PGEESC /YES - COUNT ESCAPE WORDS L40DR, CLL RAR /(OVER 2) L40D, TAD TEM1 /NO ... COMPUTE PAGE ADDRESS CIA /BY STRAIGNT COMPLEMENTATION METHOD AND K377 /MASK CDF 10 JMP I SRALT /EXIT /FOR AUTO PAGING MODE L40, CIA DCA TEM1 /- NO OF ENTRYS TO LOC CLA CMA TAD LITBSE /BASE OF TABLE - 1 DCA X1 /TO AUTO 10 L41, ISZ TEM2 /INCREMENT SEARCH COUNTER TAD I X1 /- FIRST WORD FROM TABLE CIA TAD S0 /+FIRST COMP WORD SZA CLA JMP L40B /NO MATCH TAD I X1 /-SECOND TABLE WORD CIA TAD S1 SZA CLA JMP .+4 /NO MATCH TAD TEM2 /MATCH ... CTR TO AC JMP L40A /RETURN L40B, ISZ X1 /INCREMENT FOR NO SECOND COMPARISON ISZ TEM1 /OVER JMP L41 /NO ... TRY MORE JMP L39 /YES ... PLACE ON TABLE L40C, CDF 10 TAD I REDUCP /GET PAGE ESC COMPUTED BY A1 JMP L40DR REDUCP, REDUCE / / HAS COMMON BEEN PUNCHED YET SUBROUTINE /IF IT HAS ALREADY BEEN PUNCHED, EXIT /IF NOT, PUNCH IT & SET FLAG /THIS ROUTINE IS CALLED ONLY ONCE PER PROGRAM /BUT IT COULD BE CALLED FROM ANY OF SEVERAL PLACES / HCBPS, 0 TAD CPSW /COMMON PUNCHED SWITCH SNA CLA /HAS IT BEEN PUNCHED JMP I HCBPS /YES ... RETURN DCA CPSW /NO ... CLEAR SWITCH JMS I OUTBIN /AND PUNCH HIGHEST COMMON ASSIGNED HICOM 12 JMP I HCBPS /EXIT DUMSUB, JMS DUMS / /INCREMENT PAGE TABLE PTRS /TO PREPARE FOR NEXT INSTRUCTION (OR PARAMETER) / INCPT, 0 ISZ PTSZE /INCREMENT PAGE TABLE SIZE JMS I ISZPT2 DCA EQVBIT /CLR DCA I PTCPR /INITIALIZE PAGE TABLE CODE WORD DCA I PTSPR /INITIALIZE PAGE TABLE SYMBOL WORD CDF 00 DCA I PTOPR /INITIALIZE PT OP CODE POINTER CDF 10 TAD CURSKP /MOVE CURRENT SKIP INSTRUCTION INDICATOR DCA LSTSKP /TO LAST INSTRUCTION SKIP INDICATOR TAD BANK /MOVE CURRENT BANK DCA LSTBNK /TO LAST BANK JMP I INCPT /RETURN ISZPT2, ISZPT // //FOLLOWING CODE MOVED HERE TO MAKE ROOM FOR V03 IN ASME3 ASMEXT, JMS I OUTSKP /YES, OUTPUT SKP TAD ILC /GET PG.LOC.PTR. AND K177 TAD K5204 /OUTPUT JMP .+4 DCA TEM1 JMP I .+1 REEASM K5204, 5204 *3600 / ABSYM PSEUDO OPERATOR / PABSYM, TAD K400 JMS DEFSUB CLA JMP DEF1 /SKPDF & OPDEF PSUEDO-OPS SKPDEX, TAD K20 /PUT IN SKIP BIT OPDEX, TAD K3010 /STANDARD OP BITS JMS DEFSUB CLL AND K7000 /CK TYPE OF INST TAD K2000 SNA CLA JMP DEF1 /IOT SNL JMP DEF3 /MRI TAD S0 /OPR, BUT WHICH GRP? AND K401 CLL RAR SNA CLA JMP DEF2 /GRP1 SZL TAD K100 /GRP3 TAD K200 /GRP2 DEF1, TAD TEM5 DCA USE TAD S0 DCA VAL TAD VAL JMP I NULLP DEF2, TAD K100 JMP DEF1 DEF3, TAD K400 JMP DEF1 K401, 401 K3010, 3010 / /UTILITY FOR PABSYM & OPDEX /CALL WITH MST CODE WORD EXCEPT BITS 10-11 /IN AC. EXITS WITH SYMBOL VALUE /AS DEF. BY SOURCE TAPE IN S0 & IN AC. / DEFSUB, 0 DCA TEM5 JMS I GETSYM /GET THE SYMBOL NAME JMP DEFERR /NULL JMP .+3 /SYMBOL K7000, NOP JMP DEFERR /CONST. OR LIT. TAD S0 /ADD IN SYM LENGTH TAD TEM5 DCA TEM5 JMS I GETSYM /GET VALUE NOP /NULL SKP /SYMBOL K7410, SKP /CONST DEFERR, IERROR /LIT. JMS I SKIPL TAD S0 /VALUE JMP I DEFSUB / /OCTAL TYPEOUT /CALLING SEQUENCE: TAD (OCTAL#) / JMS L62 / RET. AC=0 / L62, 0 CLL RAL /PUSH THRU LINK DCA TEM1 TAD M4 /SET CTR DCA TEM2 L62A, TAD TEM1 RTL RAL DCA TEM1 TAD TEM1 AND K7 TAD K260 JMS I TYPE ISZ TEM2 JMP L62A JMP I L62 M4, -4 K260, 0260 / /DUMMY OUTPUT ROUTINE /REPLACES OUTBN DURING ASMBLY PHASE 1 /CALLING SEQUENCE: JMS DUMMY / ADDR. OF ARG / RELOC. CONST. / RETURN /NOTE: SAME CALLING SEQ. AS OUTBN / DUM, 0 CLA CLL ISZ DUM /INDEX FOR PROPER EXIT ISZ DUM /INDEX FOR PROPER EXIT JMP I DUM / / ROUTINE TO SEARCH EXTERNAL SYMBOL TABLE / FOR CUR SYMBOL - RETURNS EXTERNAL SYMBOL / NUMBER IN AC - PLACES SYMBOL ON TABLE / AND OUTPUTS BIN CODE FOR TV IF NOT ON TABLE / L66, 0 TAD ESTSIZ /IS TABLE FULL? TAD M100 M100, SMA CLA SERROR /YES TAD ESTSIZ /SIZE OF EST SZA /IS TABLE EMPTY JMP L66A1 /NO ... SEARCH IT L66A3, CLA CMA /YES ... PLACE SYMBOL ON IT ISZ ESTSIZ /INCREMENT TABLE SIZE TAD BSEEST /BASE TAD ESTSIZ /+SIZE DCA TEM1 /GIVES ADDRESS OF NEW ENTRY TAD SYMBOL /PHYSICALLY PLACE ON TABLE CDF 00 DCA I TEM1 CDF 10 TAD USE /MST CODE WORD AND K403A /SAVE LENGTH AND DEFINITION BIT TAD K2000 /ADD EXTERNAL BITS DCA USE JMP L66A /GO TO PUNCH TV DEF L66A1, CIA DCA TEM2 /PLACE -SIZE IN INDEX LOC DCA TEM3 /ZERO COUNT CLA CMA TAD BSEEST /BASE OF EST - 1 DCA X1 /TO AUTO X1 L66A2, ISZ TEM3 /INCREMENT COUNT LOC CDF 00 TAD I X1 /-TABLE SYMBOL CDF 10 CIA TAD SYMBOL /+ CUR SYMBOL SNA CLA /COMPARE JMP .+4 /SAVE ISZ TEM2 /NOT SAME ... ANY MORE JMP L66A2 /YES ... KEEP TRYING JMP L66A3 /NO ... PLACE ON TABLE TAD TEM3 /PLACE COUNT IN AC JMP I L66 /RETURN / / OUTPUT BINARY EXTERNAL SYMBOL / HCBPS L66A, JMS I .-1 /CHECK TO SEE IF COMMON HAS BEEN PUNCHED JMS I OUTBIN /TV DEF FOR 1 SYMBOL K1 17 JMS I L62A1 /PUNCH ASCII CHARS TAD ESTSIZ /EST NO TO AC JMP I L66 /RETURN L62A1, L68 K403A, 403 K1, 1 *4000 / /SYMBOL TABLE LISTING ROUTINE /TYPES TABLE FROM "STTP" UP /WITH NAME-VALUE-FLAG /POSSIBLE FLAGS ARE: EXT, COM, UNDF, ABS, OP /FLAGS TYPED BY "STFT" /TABLE LISTED ALPHABETICALLY WITH NUMERIC /CHARACTERS .GT. ALPHABETIC / PRSYM, 0 DCA PFLG /CLR PRSYM-PASS FLAG TAD I LSTDEP SNA CLA JMP .+3 TAD PUNCH /LIST ON H.S. PUNCH DCA TYPE JMS I CRLF PRS1, TAD PST /INIT SPTR AT TOP OF PERM. S.T. DCA SPTR TAD M3 /FILL S1,S2,S3 WITH 7777'S (MAX) DCA ALEN TAD APTR DCA X1 CMA DCA I X1 ISZ ALEN JMP .-3 TAD K3 /AND LENGTH=3 DCA ALEN DCA FOUND /CLR EXIT FLAG PRS2, TAD STT /HAS SEARCH HIT END OF TABLE? CIA TAD SPTR SNA CLA JMP PRS7 /YES, USE THE A-SYM WE HAVE JMS I OBSYM /NO, GET NEXT MST ENTRY SPTR TAD BCODE /EXTRACT LENGTH AND K3 DCA BLEN TAD BPTR /INDEX NEW ENTRY DCA X2 TAD BLEN /SET ENTRY CTR CIA DCA BCTR TAD ALEN /SET A-SYM CTR CIA DCA AACTR TAD APTR /INDEX A-SYM DCA X1 TAD PFLG /IS THIS THE FIRST TIME THRU THE TABLE? SZA CLA JMP PRS3 /NO TAD BCODE /YES, CLR ENTRY BIT 0 AND K3777 /(THE HAS-BEEN-PRINTED FLAG) DCA BCODE PRS3, TAD BCODE /HAS THIS SYMBOL BEEN PRINTED ALREADY? SPA CLA JMP PRS6 /YES, IGNORE IT PRS4, TAD I X1 /NO, COMRARE A-SYM WORD CIA CLL CDF 00 TAD I X2 /WITH B-SYM WORD CDF 10 SNA JMP .+4 /MATCH SO FAR SNL CLA JMP PRS5 /A-SYM WORD IS BIGGER-- USE B-SYM JMP PRS6 /VICE-VERSA ISZ AACTR /IS A-SYM DONE? SKP /NO JMP PRS6 /YES, STICK WITH A-SYM ISZ BCTR /IS B-SYM DONE JMP PRS4 /NO, TRY NEXT WORD PRS5, ISZ FOUND /YES, B-SYM IS NEW A-SYM /SET CONTINUE FLAG TAD BPTR /INDEX B-SYM DCA X2 TAD APTR /CLR STORAGE FOR NEW A-SYM DCA X1 DCA I X1 DCA I X1 DCA I X1 TAD APTR /RESET A-SYM INDEX DCA X1 TAD BLEN /CTR FOR TRANSFER CIA DCA ALEN CDF 00 TAD I X2 /MOVE B-SYM TO A-SYM CDF 10 DCA I X1 ISZ ALEN JMP .-5 TAD BLEN /NEW LENGTH DCA ALEN TAD BVAL /NEW VALUE DCA AVAL TAD BPTR /NEW PTR DCA ASAV PRS6, TAD BPTR /MOVE SPTR TO NEXT MST ENTRY TAD BLEN TAD K2 DCA SPTR JMP PRS2 /CONTINUE SEARCH PRS7, TAD FOUND /HAS ANOTHER SYMBOL BEEN FOUND? SNA CLA JMP PRS8 /NO, EXIT JMS I OBSYM /YES ASAV TAD USE TAD K4000 DCA USE /SET HAS-BEEN-PRINTED BIT ISZ PFLG /SET PASS FLAG JMS I CRLF /POSITION PRINT TAD APTR /INDEX SYMBOL DCA X1 TAD M3 /SET CTR DCA ALEN TAD I X1 /PRINT SYMBOL JMS I CTYPE ISZ ALEN JMP .-3 JMS I CTYPE /PRINT 2 SPACES TAD AVAL /PRINT VALUE JMS I OTYPE TAD USE /MOVE TYPE BITS TO LOW AC RTL /& DEF. BIT TO LINK RTL JMS I STFTI /TYPE FLAGS IF ANY JMP PRS1 /LOOK FOR ANOTHER SYMBOL TO PRINT PRS8, JMS I CRLF JMS I CRLF JMP I PRSYM STFTI, STFT ASAV=UMIC PFLG=TEM3 PST, STTP /TOP OF PERMANENT SYMBOL TABLE ALEN=S0 APTR=AS0 BPTR=SYMBOL BVAL=VAL BCODE=USE FOUND=TEM4 SPTR=TEM5 BLEN=LFS BCTR=OP AACTR=IB AVAL=AFS K3777, 3777 LSTDEP, LSTDEV *4200 / /ROUTINE TO PUSH DOWN CUR.LINE FOR NEXT PAGE. /SAVES ENTIRE LIST OF VITAL INFO /(LFS, OP, IB,...,BANK, S0) IN TEMP.LOCS /(TLFS, TOP, TIB,..., TS0) /BOTH LISTS MUST BE KEPT IN SPECIFIED /ORDER. /IF THERE IS AN LFS ON LINE MUST MARK IT /NO-LONGER-DEFINED-ON-PAGE IN PST. / PUSHIN, 0 TAD LFS /IS THERE AN LFS SNA CLA JMP PSHIN2 /NO JMS I OBSYM LFS JMS I SPSTAB /GET ITS POINTERS TO THE PAGE SYMBOL TABLE NOP TAD I PSTCPR /KILL THE DEFINED BIT AND K3777A DCA I PSTCPR /SET PAGE SYMBOL TABLE CODE WORD OFF PAGE PSHIN2, JMS PUSHER LFS-1 TLFS-1 JMP I PUSHIN /RETURN / / ROUTINE TO POP UP A PUSHED DOWN INSTRUCTION / POPIN, 0 CLA JMS PUSHER TLFS-1 LFS-1 JMP I POPIN /RETURN TLFS, 0 /KEEP THIS LIST ORDERED AS GIVEN TOP, 0 TIB, 0 TAFS, 0 TUMIC, 0 TNSGN, 0 TEXP, 0 TSKZ, 0 TBANK, 0 TS0, 0 / /TRANSFER ANY LIST OF 10 (12 OCTAL) ITEMS /FROM ONE LIST TO ANOTHER /CALL SEQ.: JMS PUSHER / ADDR-1 OF FROM-LIST / ADDR-1 OF TO-LIST / RET. / PUSHER, 0 TAD M12A DCA TEM1 /CTR TAD I PUSHER DCA X1 /INDEX FROM LIST ISZ PUSHER TAD I PUSHER DCA X2 /INDEX TO LIST TAD I X1 DCA I X2 ISZ TEM1 JMP .-3 ISZ PUSHER JMP I PUSHER M12A, -12 K3777A, 3777 /RETRN PSUEDO-OP / PRTN, JMS I GETSYM /GET NEXT INPUT ITEM SKP /NOTHING JMP .+3 /SYMBOL NOP /CONSTANT IERROR /LITERAL JMS I SKIPL JMS I SREST /PLACE SYMBOL ON EXTERNAL SYMBOL TABLE DCA PRTN0 /SAVE SYMBOL ID JMS PUSHIN /PUSH LFS INFO IN CASE OF PAGE ASSEMBLY TAD K2 /SET AC TO 2 JMS I PRTN1 /ARE THERE 2 LOCATIONS ON THIS PAGE SKP CLA /YES JMS I INI /NO ... HAD TO ASSEMBLE PAGE ... INITIALIZE PT JMS POPIN /POP LFS INFO FROM PAGE PUSH LIST JMS I ICPLFS /PROCESS ANY LFS TAD I PTCPR /PT CODE WORD WITH POSSIBLE LFS BIT TAD K30 /ADD SPECIAL RELOCATION BIT DCA I PTCPR /PLACE PROPER CODE WORD ON PT TAD DOTRTN DCA I PTSPR /PLACE JMS .RTN INSTRUCTION IN PT SYMBOL WORD JMS I PRTN3 /INCREMENT PT POINTERS TAD K130 /PROPER BIT PATTERN DCA I PTCPR /TO PT CODE WORD TAD PRTN0 /PLACE EXTERNAL SYMBOL NUMBER ON PT DCA I PTSPR /AS SYMBOL WORD JMS I PRTN3 /INCREMENT PT POINTERS JMP I POPEXP /EXIT FOR NEXT LINE DOTRTN, JMS RTN PRTN0, 0 PRTN1, IFFSUB PRTN3, ASMIF1 / / @PAUSE@ PSEUDO OPERATION / PPAUSE, JMS I WLNIFI /LIST IF PASS 2 CLA HLT /WAIT FOR OPERATOR ACTION RFC /SELECT READER JMS I INITRP JMS I SKIPL PPAUS1, CMA /WE REACH THIS ONLY IF FORFLG. LE. 0(ALSO COME FROM *PEND*) DCA FORFLG /SHUT OFF FORTR IN CASE GUY /HAS STARTED HIS TAPE IN /THE MIDDLE JMP I DCIL1 /RETURN FOR NEXT LINE WLNIFI, WLNIF1 / /OVERAL ASSEMBLY INITIALIZATION / INITA, 0 CDF 10 DCA I FATALP JMS I CRLF JMS I CRLF TAD PEB DCA I PEPTRP JMS PUSHER /INIT HICOM, PAGE, ESTSIZ, EQVBIT & APMSW ETC K777-1 HICOM-1 JMS I INITRP TAD PASS SZA CLA JMP I INITA DCA SYMBOL /PROTECT FROM RUSVL JMS I INITMP DCA CSUM TAD K10 /SET PUSH CTR=-2 JMS PUSHER /INIT OTP & STP OTPR-1 OTP-1 JMS I LEADI JMP I INITA OTPR, CORE1-1 /KEEP STTR IMMEDIATELY AFTER OTPR STTR, STTP /***** KEEP ITEMS SO INCLOSED IN GIVEN ORDER K777, 177 200 0 0 0 1 1 0 0 0 /****************** INITRP, INITR FATALP, FATAL PEPTRP, PEPTR LEADI, LEADER PEB, PEBSE INITMP, INITMR *4400 / / ROUTINE TO SEARCH SYMBOL TABLE FOR SYMBOL IN S0-S3 / PLACES SYMBOL ON TABLE IF NOT THERE / CALL IS / JMS SRSYM / NOT FOUND EXIT / FOUND EXIT /RETURNS WITH SYMBOL CODE BITS IN "USE" /SYMBOL VALUE (0 IF NOT DEFINED) /IN "VAL" /& PTR TO SYM.TAB. ENTRY IN "SYMBOL" /THE LATTER ADDRESS IS REFERRED TO HERE IN /AS THE SYMBOL "ID" /SRSYM CALL RUSVL TO STORE USE & VAL /OF LAST REFERENCED SYMBOL IN MST /IN CASE THEY HAVE BEEN CHANGED /IN THE MEANWHILE. / SRSYM, 0 JMS RUSVL TAD MST /START AT SYM. TAB. BASE SRS1, DCA SYMBOL /SET PTR. TO NEXT ENTRY TAD STT /COMPARE PTR. WITH SYM. TAB. TOP CIA TAD SYMBOL SNA CLA /CONTINUE SEARCH JMP SRS2 /NAME NOT IN TABLE ENTER IT CDF 00 TAD I SYMBOL /GET ENTRY CODE WORD CDF 10 AND K3 /EXTRACT SYMBOL LENGTH DCA TEM2 TAD TEM2 CIA /NEGATE FOR COMPARE & CTR. DCA TEM1 TAD TEM1 /COMPARE ENTRY & LOOK-UP SYMBOL LENGTHS TAD S0 SZA CLA /SAME LENGTH; COMPARE LETTERS JMP SRS5 /NOT SAME; GO TO NEXT ENTRY TAD AS0 /AUTO-INDEX LOOP-UP SYMBOL DCA X1 TAD SYMBOL /AUTO-INDEX TABLE ENTRY DCA X2 SRS3, CDF 00 TAD I X2 /GET TABLE ENTRY CHAR. PAIR CIA CDF 10 TAD I X1 /COMPARE LOOK-UP SYMBOL CHAR. PAIR SZA CLA /SAME JMP SRS5 /NO MATCH ISZ TEM1 /CK SYM. LEN. CTR. JMP SRS3 /NOT DONE, TRY NEXT CHAR. PAIR SRS4, JMS SUSVL /GET USE & VAL WORDS JMP I SRSYM SRS5, TAD SYMBOL /PTR TO LAST ENTRY TAD K2 /+2 FOR USE & VAL WORDS TAD TEM2 /+ENTRY SYMBOL LENGTH JMP SRS1 /=PTR TO NEXT ENTRY / /CURRENT SYMBOL NOT ON TABLE ... PLACE IT THERE / SRS2, TAD OTP /WILL NEW ENTRY FIT BELOW CIA CLL /OCCURANCE TABLE? TAD SYMBOL TAD S0 SZL CLA /0 LINK=YES SERROR /NO, SYMBOL TABLE OVERFLOW TAD S0 /ENTRY CODE WORD = SYM. LEN. TAD K1000 /+REL BIT CDF 00 DCA I STT /PUT CODE IN 1ST WORD OF NEW ENTRY TAD STT /AUTO-INDEX ENTRY DCA X2 TAD AS0 /AUTO-INDEX SYMBOL TO BE STORED DCA X1 TAD S0 /SET SYM. LEN. CTR. CIA DCA TEM1 ERS1, CDF 10 TAD I X1 /MOVE SYMBOL CHAR. PAIR TO TABLE CDF 00 DCA I X2 ISZ TEM1 /CK. CTR. JMP ERS1 /NOT DONE DCA I X2 /CLR VALUE WORD TAD STT /SAVE PTR TO NEW ENTRY DCA SYMBOL TAD X2 /RESET PTR. TO SYM. TAB. TOP IAC DCA STT CDF 10 JMP SRS4 / /OBTAIN GIVEN SYMBOL'S VITAL INFO FROM MST /CALL SEQ: JMS OBNSYM / ADDRESS OF SYMBOL ID / RET. /OBNSYM LEAVES SYMBOL ID IN "SYMBOL", / SYMBOL CODE WORD IN USE, / SYMBOL VALUE IN VAL. /OBNSYM CALLS RUSVL BEFORE ACTION /FOR SAME REASON AS SRSYM DOES. / OBNSYM, 0 JMS RUSVL TAD I OBNSYM /ADDRESS OF SYMBOL DCA TEM1 TAD I TEM1 /ACTUAL SYMBOL DCA SYMBOL ISZ OBNSYM /INDEX FOR EXIT JMS SUSVL /SET UP USE AND VALUE WORDS JMP I OBNSYM /RETURN WHEN FOUND / / ROUTINE TO SET UP USE AND VALUE WORDS / SUSVL, 0 CDF 00 /OFF TO BANK 1 TAD I SYMBOL /MST USE WORD FROM BANK 1 DCA USE /TO BANK 0 USE LOCATION TAD USE AND K3 IAC TAD SYMBOL DCA VALPTR TAD I VALPTR /MST VALUE WORD FROM BANK 1 DCA VAL /TO BANK 0 VALUE LOCATION CDF 10 /RESTORE DATA FIELD JMP I SUSVL /RETURN RUSVL, 0 CDF 00 TAD USE DCA I SYMBOL TAD VAL DCA I VALPTR CDF 10 JMP I RUSVL VALPTR, 0 /PTR TO CURRENT VAL WORD IN MST / /READ A CHARACTER / IGNORES LF, FF, RO, LEADER / ALSO CHECKS CHAR AS TO TYPE /CALLING SEQ: JMS RCH / RETURN IF CHAR IS A DIGIT / RETURN IF CHAR IS ALPHABETIC / RETURN FOR ALL OTHER (PUNCT,ETC) /LEAVES AC==0 / CHR=ASCII VALUE OF INPUT CHARACTER /CALLS SRT RCH, 0 JMS I GETCHR /GET 1 CHAR SNA JMP RCH3 /0=END OF LINE TAD M260 SPA JMP RCH3 /TAKE PUNCT.EXIT (200-257) TAD M12 SPA JMP RCH4 /TAKE DIGIT EXIT (260-271) TAD M7 SPA JMP RCH3 /TAKE PUNCT, EXIT (272-300) TAD M37A SMA RCH3, ISZ RCH /PUNCT, EXIT (337-376) ISZ RCH /ALPHA EXIT (301-336) RCH4, CLA /DIGIT EXIT JMP I RCH M260, -260 M12, -12 M37A, -36 /FORCE BUFFER FILL ON FIRST READ INITR, 0 TAD MBE DCA X3 JMP I INITR MBE=LINAX /=LAST WORD OF DATA BUFFER *4600 /SUBR TO READ 1 LINE INTO LINE BUFFER RLN, 0 DCA LFLG /CLR NON-NULL LINE FLAG TAD SCOLON /IF LAST LINE ENDED WITH ; SZA /NO NEED TO READ ANOTHER JMP RLN4 TAD LINAX /INIT STORAGE AUTO-INDEX DCA X2 RLN2, JMS FETCH /GET A CHARACTER JMS I TEST /IS IT A CR,TAB,SP,FF,LF? SL7-1 /IF SO GO TO RLN15,3,3,2,2 BL6-SL7 ISZ LFLG /OTHERWISE A NON-NULL LINE RLN3, JMS I STOREP /OTHERWISE PUT IT IN THE BUFFER TAD X2 /IS BUFFER FULL? TAD LINEND SZA CLA JMP RLN2 /NO CMA TAD X2 DCA X2 /IF SO MOVE BACK PTR JMP RLN2 RLN15, DCA CHR /TERMINATE LINE WITH 0 JMS I STOREP DCA AFLG DCA EFLG DCA VFLG DCA CODE TAD LINAX /INIT LINE INDEX RLN4, DCA X0 DCA SCOLON /CLR JMP I RLN STOREP, STORE LINEND, -LINBUF-107 /SUBROUTINE TO READ 1 CHARACTER VIA INPUT DEVICE /IGNORES 200'S & 377'S FETCH, 0 JMS R AND K177 TAD K200 /FORCE FULL 8BIT ASCII DCA CHR TAD CHR TAD M200 SZA TAD M177 SNA CLA JMP FETCH+1 JMP I FETCH M177, -177 /SUBR TO GET NEXT CHAR FROM HSR BUFFER /REFILL BUFFER WHEN X3 REACHES END OF BUFFER R, 0 CDF 00 TAD X3 TAD BUFEND /CK FOR END OF BUFFER SNA CLA JMP RG /REFILL R1, TAD I X3 /GET NEXT CHAR CDF 10 JMP I R RG, TAD BUF /INDEX THE BUFFER DCA X3 RG1, JMS I INDEV DCA I X3 TAD X3 /CK FOR FULL TAD BUFEND SZA CLA JMP RG1 /NOT FULL RG3, TAD BUF /RESET PTR DCA X3 JMP R1 INDEV, HSR BUF, DATA-1 BUFEND, 1-LINBUF /GET 1 CHAR FROM LINE BUFFER L65, 0 CDF 00 TAD I X0 CDF 10 DCA CHR TAD CHR JMP I L65 / / ROUTINE TO PUNCH LEADER TRAILER CODE / LEADER, 0 TAD K7600 DCA TEM1 TAD K200 JMS I PUNCH ISZ TEM1 JMP .-3 JMP I LEADER / / ROUTINE TO TYPE RETURN-LINE FEED / 0215 0212 L73, 0 CLA TAD L73-2 JMS I TYPE TAD L73-1 JMS I TYPE JMP I L73 /DECIM & OCTAL PSUEDO-OPS PDEC, JMS I SKIPL IAC /SET ARITHMETIC CONVERSION TO DECIMAL SKP POCT, JMS I SKIPL DCA DSW /SET ARITHMETIC CONVERSION TO OCTAL JMP I NULLP /GO GET NEXT INPUT LINE / /ROUTINE TO STOP NEXT LINE FROM BEING LISTED /THO IT IS ALREADY IN THE BUFR. /E.G., STOP LISTING OF PUSHED DOWN LINE /WHILE ASSEMBLING LIT. POOL / SAVLIN, 0 CDF 00 TAD I LINEB2 /SAVE 1ST CHAR OF LINE SNA /IF ANY JMP .+3 /THERE ISNT ANY DCA SAVEIT DCA I LINEB2 /CLR TO PREVENT TYPEOUT CDF 10 JMP I SAVLIN / /REENABLE LISTING OF LINE WHICH SAVLIN /PREVENTED / RELINE, 0 CDF 00 TAD SAVEIT /RESTORE 1ST CHAR OF LINE DCA I LINEB2 CDF 10 JMP I RELINE SAVEIT, 0 LINEB2, LINBUF /ROUTINE TO LIST NULL, COMMENT OR PSUEDO-OP LINE NULL, DCA VALUE /IF ANY GIVEN TAD VALUE /SET TYPEOUT FLAG IF NON-0 DCA VFLG JMS I WLIF /LIST IF PASS 2 JMP I DCIL1 /GO BACK TO RDL1 FOR NEXT LINE WLIF, WLNIF1 / / TYPE ROUTINE / L64, 0 TLS /SELECT IT TSF /WAIT FOR TTY JMP .-1 CLA /EXIT WITH CLEAR AC JMP I L64 *5000 / / ROUTINE TO SET THE CORRECT COUNTERS FOR THE CURRENT / OP CODE AND ADDRESS FIELD SYMBOL / /THIS IS A MAJOR ROUTINE. IT IS CALLED ONCE /FOR EVERY NORMAL (MRI,OPR,IOT) INSTR. COLLECTED. /IT IS ALSO CALLED DURING PAGE /RECOUNTING, ONCE FOR EVERY ITEM ON THE /PAGE TABLE. /CALLING SEQ: AC=0,JMS,RET WITH AC=0 /FUNCTION: DETERMINE THE TYPE OF LINE BEING /READ AND SET THE VARIOUS PAGE COUNTERS /AND FLAGS ACCORDINGLY. /A FLOW CHART OF TYPES & FLAG SETTINGS IS GIVEN BELOW. /CONSIDERABLE OVERLAPPING IS USED TO ACHIEVE /THE MIN. CORE USAGE. THIS IS SOMETIMES AT THE /EXPENSE OF LOGICAL CLARITY. /ALL POSSIBLE CONDITIONS EXIT VIA SETC00 /SETC00:(1) IF LAST INSTR. WAS A SKIP & LAST BANK / IS NOT= CUR.BANK, BANK=-1. / (2) IF CUR. INSTR. IS A SKIP, PGEESC=4 / OTHERWISE PGEESC=2. / (3) LASTSKIP CONDITION= CUR. SKIP CONDITION / (4) LAST BANK= CUR. BANK / /FLOW OF INSTR. TYPES /SETCT: IF (PARAMETER OR MICRO-INSTR.) SETC00 / IF (LITERAL AFS) SETC02 / IF(CONSTANT AFS) SETC01 / CALL OBNSYM(AFS) / IF (INSTR. IS INDIRECT) SETC07 / IF (AFS IS IN COMMON) SETCO4 / IF (ABSOLUTE AFS) SETC05 / CALL SPSTB (AFS) /SEARCH PST FOR AFS / CALL SETSUB / IF (AFS NOT BEFORE ON PST) SETC06 / IF (AFS WAS IN PST BUT NOT DEF. ON PAGE)SETC12 / IF (OP CODE=JMS) BANK=1 / GO TO SETC00 /ON PAGE MR1 /SETC01:IF (CONST.AFS ON PG.0)J2 / IF (INSTR. IS INDIRECT) ERROR / CALL SLTAB(CONST. AFS) /PUT CONST. IN LIT.TAB. /J1: IF (BANK NOT=1) SETC13 / GO TO SETC00 / J2* IF( INSTR.INDIR.) J1 /PG.0 INDIRECT / GO TO SETC00 /PG.0 DIRECT /SETC04:IF(BANK NOT 0) CALL INCOBA /INC OBACTR / CALL NUMSGN / S0=RESULT+COMMON ADDR. /SETC02:CALL SLTAB(S0) /LIT.OR. COMMN. ADDR. TO LIT. TAB. / GO TO SETC00 / IF (AFS NOT PREV. ON PST) SETC11 / IF (AFS WAS ON PST BUT NOT DEF. ON PAGE) SETC11 / GO TO J3 /SETC10:CALL NUMSGN / IF (ABS.AFS ON PAGE 0) J3 /SETC11:AC=1 /FORCE BANK=1 /SETC09:AC=AC+1 /FORCE BANK=0 /SETC08:AC=AC-2 /FORCE BANK=-1 / CALL INCOBA /INC OBACTR / AC=BANK /(BANK OFFSET BY -1) / GO TO SETC13 /(TAKEN CARE OF AT SETC13) /SETC12:IF (NEW PST CODE BITS 10-11=OLD SAME (IN TEM 3)) J3 /SETC06:INC OPSCTR /OFF PAGE SYMBOL /J3: IF (BANK=1) SETC00 / INC AC / CALL INCOBA /J4: IF (THERE HAS NOT BEEN A PST SEARCH) SETC00 / ADD CHANGE IN OBACTR (OBACTR-OLDOBA) TO PST CODE BITS 3-9 / GO TO SETC00 / /NOTE: CONDITION AT J4 IS TESTED BY SETSUB HEADER /WORD (OBFLG). THIS IS ALWAYS CLEARED /WHEN SETCT STARTS AND WILL NOT CHANGE /UNLESS THERE IS A CALL TO SPSTB BECAUSE /A CALL TO SETSUB ALWAYS FOLLOWS CALL TO /SPSTB IN SETCT. / SETCT, 0 JMS I ICPLFS /CHECK FOR AND PROCESS ANY LFS DCA OBFLG /CLR /NEXT 2 LINES MOVED TO /SETCAL (AS OF V15) TO MAKE ROOM FOR FOLLOWING INSTR. & PTR / TAD EXP /IS IT PAR OR A MICRO INST? / TAD UMIC JMS I SETCAP SZA CLA JMP I SET00I /YES CLA CLL CMA RAL TAD AFS SNA /IS AFS A CONSTANT JMP SETC01 /YES IAC SNA CLA /IS AFS A LITERAL JMP I SET02I /YES JMS I OBSYM /NO ... GET POINTERS TO AFS AFS TAD IB /INDIRECT BIT SZA CLA /IS IT SET JMP SETC07 /YES JMS USETST /TEST FOR OFF BANK OR ABSOLUTE SETC04 /OFF BANK SETC05 /ABSOLUTE JMS I SPSTAB /IS AFS ON PST CMA /NOT FOUND JMS SETSUB JMP I SET06I /NO ... MUST BE OFF PAGE TAD I PSTCPR /YES ... PST CODE WORD SMA CLA /IS AFS ON PAGE JMP I SET12I /NO JMP I SET00I / / INDIRECT MEMORY REFERANCE INSTRUCTION SETC07, TAD USE /AFS MST USE WORD AND K20 /IS AFS DUMMY SZA CLA JMP I SET08I /YES JMS USETST /TEST OFF BANK OR ABSOLUTE SETC09 /OFF BANK SETC10 /ABSOLUTE JMS I SPSTAB /IS AFS ON PST CMA /NOT FOUND JMS SETSUB JMP I SET11I /NO TAD I PSTCPR /YES ... PST CODE WORD SMA CLA /IS AFS ON PAGE JMP I SET11I /NO JMP I SET6P1 /YES / / CONSTANT FOR AN ADDRESS FIELD SYMBOL / SETC01, TAD S0 /ACTUAL BINARY CONSTANT AND K7600 /IS CONSTANT ON PAGE ZERO SNA CLA JMP SET01A /YES TAD IB /NO ... IS IT INDIRECT SZA CLA IERROR /YES ... ERROR JMS I SLITAB /IS CONSTANT ON LITERAL TABLE /IF NOT SUBROUTINE PUTS IT THERE TAD OP SPA CLA /IF OPCODE IS JMS OR JMP THEN BANK IS IRRELEVANT JMP I SET00I SET01B, CLA CMA TAD BANK /BANK SETTING SNA CLA /IS IT SET TO THE CURRENT BANK JMP I SET00I /YES ... NO PROBLEMS JMP I SET00J /EXIT TO; COMMON AREA / SET01A, TAD IB /IS INDIRECT BIT SET SZA CLA JMP SET01B /YES JMP I SET00I /NO SET00I, SETC00 SET02I, SETC02 SET00J, SETC13 SET00B, JMP I SETCT /OFF PAGE RETURN SET06I, SETC06 SET08I, SETC08 SET11I, SETC11 SET12I, SETC12 SET6P1, SETC6A SETCAP, SETCAL /ROUTINE TO TEST MST USE WORD TO DETERMINE WHETHER A SYMBOL IS /OFF-BANK OR ABSOLUTE USETST, 0 TAD USE AND K40 SZA CLA /IS IT OFF BANK? JMP USESUC /YES- RETURN INDIRECT THROUGH FIRST ARG TAD USE AND K3000 ISZ USETST SNA CLA /IS IT ABSOLUTE? JMP USESUC /YES- RETURN INDIRECT THROUGH SECOND ARG ISZ USETST JMP I USETST /NEITHER - RETURN TO CALL+3 USESUC, TAD I USETST DCA USETST JMP I USETST /TAKE PROPER BRANCH / /SETSUB IS A UTILITY USED BY SETCT ONLY. /USED ONLY IMMEDIATELY AFTER A PST SEARCH. /CALLING SEQUENCE: JMS SPSTB / CMA /SPSTB MAY SKIP / JMS SETSUB / RETURN IF SPSTB SKIPPED OVER CMA / RETURN IF SPSTB DID NOT SKIP /HAS SEVERAL FUNCTIONS: /(1) SAVE COPY OF OLD VALUE OF OBACTR BEFORE /CHANGING STARTS- SO IT MAY BE USED AT SETC13. /(2) IF INSTR IS INDIRECT, THAT'S IT- EXIT /(3) OTHERWISE SAVE OLD VALUE OF PST CODE BITS 10-11 /FOR LATER USE AT SETC12. WARNING: THIS /IS SAVED IN TEM3, SO TEM3 IS NOT /TEMPORARY FOR A FEW MINUTES. /(4) SET PST CODE BIT 10 IF THIS IS A #REF, /OR BIT 11 IF IT IS A NORMAL REF. /ALGORITHM IS A.OR.B=(.NOT.A.AND.B)+A / SETSUB, 0 DCA TEM1 /0=FOUND, -1=NOT TAD OBACTR /SAVE FOR SETC11,12,6,13 DCA I OLDOBP TAD IB /OMIT CHANGING PST BITS IF INDIRECT SZA CLA JMP SETSX TAD I PSTCPR /SAVE OLD CODE AND K3 DCA TEM3 TAD NSGN SZA CLA IAC /# IAC DCA TEM2 TAD TEM2 /OR INTO CODE CMA AND I PSTCPR TAD TEM2 DCA I PSTCPR SETSX, ISZ TEM1 /FOUND? ISZ SETSUB /YES JMP I SETSUB OLDOBP, OLDOBA OBFLG=SETSUB /SUBR TO STORE CHARACTER IN LINE BUFFER /ASSUMES X1 SET /CHAR MAY BE IN AC OR IN CHR STORE, 0 SNA TAD CHR CDF 00 DCA I X2 CDF 10 JMP I STORE / /ROUTINE TO CHECK NSGN FOR SETCT /USED ONLY BY SETCT ROUTINE. /CALLING SEQUENCE: AC=0 / JMS NUMSGN / RETURN WITH AC=0 IF / NSGN=0,AC=1 IF NSGN / NOT=0. /NOTE:NSGN MAY BE NON-0 AND NOT=1. THIS /IS THE REASON FOR NUMSGN. / NUMSGN, 0 TAD NSGN SZA CLA IAC JMP I NUMSGN *5200 / / AFS ABSOLUTE / SETC05, JMS I NUMSGP TAD VAL /ABSOLUTE SYMBOL VALUE AND K7600 /MASK OUT PAGE BITS SNA CLA /IS ABSOLUTE SYMBOL ON PAGE ZERO JMP SETC00 /YES ... EXIT JMS I NUMSGP TAD VAL /NO ... ABSOLUTE SYMBOL VALUE DCA S0 /TO LITERAL TABLE SEARCH LOCATION JMS I SLITAB /SEARCH LITERAL TABLE FOR VALUE /IF NOT THERE ROUTINE PLACES IT THERE JMP SETC06+1 /EXIT / / INDIRECT ABSOLUTE / SETC10, JMS I NUMSGP TAD VAL /ACTUAL AFS VALUE AND K7600 SNA CLA /IS ADDRESS FIELD SYMBOL ON PAGE ZERO JMP SETC6A /YES / / INDIRECT DUMMY ADDRESS FIELD SYMBOL / SETC08, TAD M2 /SET BANK UNKNOWN / / OFF PAGE INDIRECT / SETC11, IAC /SET BANK TO CURRENT / / OFF BANK INDIRECT - SET BANK TO 0 / SETC09, JMS INCOBA /SET BANK & INCR. OBACTR TAD BANK JMP SETC13+1 /EXIT TO COMMON AREA / / ADDRESS FIELD SYMBOL NOT ON PAGE SYMBOL TABLE. / SETC12, TAD I PSTCPR /HAS NEW TYPE REF BEEN ADDED? AND K3 CIA TAD TEM3 SZA CLA /YES SETC06, ISZ OPSCTR /INCREMENT OFF PAGE SYMBOL COUNTER TAD OP SPA CLA /DON'T WORRY ABOUT BANK FOR JMS'S AND JMP'S JMP SETC00 /WHICH ARE NOT EXPLICITLY INDIRECT SETC6A, TAD BANK SMA SZA CLA JMP SETC00 /YES ... EXIT TO COMMON AREA SETC13, IAC JMS INCOBA /SET BANK TO CUR. & INC OBACTR TAD I OBFLGP /WAS THERE A PST SEARCH? SNA CLA JMP SETC00 /NO TAD OLDOBA /YES GET CHANGE IN OBACTR CIA TAD OBACTR CLL RTL /IN BITS 1-9 TAD I PSTCPR /ADD TO PST CODE DCA I PSTCPR / / COMMON AREA / SETC00, JMS CMNSET /SET BANK=1 AFTER JMS JMS I SETCMN /UPDATE BANK AND LSTSKP SZA CLA /IS CURRENT INSTRUCTION A SKIP? TAD K2 /YES ... PAGE ESCAPE = 4 TAD K2 /NO ... PAGE ESCAPE = 2 DCA PGEESC JMP I .+1 /RETURN SET00B SETCMN, ASMCMN /ROUTINE TO SET BANK TO CURRENT AFTER A JMS CMNSET, 0 TAD OP TAD K4000 SZA CLA /WAS OP A JMS? JMP I CMNSET /NO IAC DCA BANK JMP I CMNSET OLDOBA, 0 OBFLGP, OBFLG / / DIRECT OFF BANK REFERANCE / SETC04, TAD BANK /BANK INDICATOR SZA CLA /IS BANK SET TO OFF JMS INCOBA /NO, SET BANK TO COMMN & INC OBACTR JMS I NUMSGP TAD VAL /YES ... ACTUAL BANK 0 ADDRESS DCA S0 /TO CONSTANT - LITERAL LOCATION / / LITERAL FOR AN AFS / SETC02, JMS I SLITAB /PLACE LITERAL ON LITERAL TABLE JMP I SET1AP / / COLLECTION ROUTINE TO CHECK FOR AND PROCESS AN LFS / /CALLING SEQUENCE: AC=0 / JMS CPLFS / RETURN WITH AC=0 /FUNCTION: USED DURING COLLECTION PHASE / EXCEPT WHEN RECOUNTING A PAGE. / IF TAG OCCURS ON CURRENT LINE, CPLFS / LOCATES (OR ENTERS) IT IN PAGE SYM.TAB. / AND SETS THE DEFINED-ON-PAGE BIT IN / THE PST CODE WORD. / ALSO SETS BANK CONDITION TO UNKNOWN / SINCE USER CODE CAN JUMP TO TAG / FROM ANYWHERE. ALSO SAVE / TAG IN LLFS & RESET LINE COUNT / IN CASE WE GET A MULT.DEF. ERROR / IN PASS1 WE MUST ALSO DO THE / FOLLOWING IF THE SYMBOL IS ALREADY / IN THE PST WHEN WE GO LOOK FOR / IT: (1) REDUCE THE OFF-PAGE SYM. / CTR. BECAUSE OFF-PAGE POINTER (FOR / EITHER NORMAL OR # REFERENCES) ARE / NO LONGER NEEDED. (2) REDUCE / OBACTR BY THE NO. OF EXTRA WORDS / OF CODE DUE TO THIS SYMBOL. /SUBRS. CALLED: OBNSYM(LFS),SPSTB,PSTDEF / CPLFS, 0 TAD I RECTI /ARE WE RECOUNTING? SZA CLA JMP I CPLFS /YES ... RETURN TAD LFS SNA JMP I CPLFS /NONE THERE CDF 00 DCA I LFSPTR /PLACE ON LFS TABLE ISZ LFSPTR /INCREMENT LFS TABLE POINTER CDF 10 ISZ I PTCPR /SET LFS BIT ON PAGE TABLE JMS I OBSYM LFS JMS I SPSTAB /IS IT ON THE PAGE SYMBOL TABLE JMP CPLFS3 /NO ... SKIP DECREMENTING DCA TEM1 /CLR TAD PASS /SKIP DECREMENTING IF PASS 2 SNA CLA TAD I PSTCPR /CK USE AND K3 CLL RAR SZL ISZ TEM1 /NORMAL SZA CLA ISZ TEM1 /# TAD TEM1 /SUBTRACT CIA TAD OPSCTR DCA OPSCTR TAD I PSTCPR /EXTRACT SHARE OF OBACTR DUE AND C3774 /TO THIS SYMBOL CLL RTR /MOVE TO LOW ORDER CIA /SUB. FROM OBACTR TAD OBACTR DCA OBACTR CPLFS3, JMS I PSTDEP CLA CMA CLL /SET BANK UNKNOWN (THE CLL IS USED ELSEWHERE) DCA BANK TAD LFS /SAVE IN CASE OF ERROR DCA LLFS DCA LINE /ZERO LINE COUNT FROM LAST LFS JMP I CPLFS C3774, 3774 NUMSGP, NUMSGN PSTDEP, PSTDEF LLFS, 0 / /UTILITY FOR SETC04,SETC08,SETC13 /NOT USED ELSEWHERE /CALLING SEQUENCE: DESIRED BANK SETTING IN AC / JMS INCOBA / RETURN WITH AC=0 /FUNCTION:(1) SET BANK AS SPECIFIED / (2) INCREMENT OFF-BANK ADDITION CTR / BY 1 OR 2: 2 IF PREVIOUS INSTR. / WAS A SKIP-TYPE, 1 OTHERWISE. / INCOBA, 0 DCA BANK TAD LSTSKP /LAST INSTRUCTION SKIP INDICATOR SZA CLA /WAS LAST INSTRUCTION A SKIP INSTRUCTION ISZ OBACTR /+ OLD VALUE OF OFF BANK ADDITION COUNTER ISZ OBACTR /FOR NEW VALUE OF OFF BANK ADDITION COUNTER JMP I INCOBA SET1AP, SET01A *5400 / / ROUTINE TO ASSEMBLE THE PAGE HELD IN THE CURRENT SET OF TABLES /THIS IS THE MAIN PASS1 ASSEMBLY ROUTINE /(NOT USED BY PASS2) /ASMBL GOES THRU ENTIRE PAGE TABLE /FLOW: (1) CALL A1 TO INIT. PAGE ASSEMBLY / (2) GET ITEM OFF P.T. / (3) CALL ASM02 TO ASSEMBLE ITEM / (4) LOOP BACK TO (2) TIL DONE WITH PAGE / (5) CALL A2 TO ASM. LITERALS /ASMBL IS CALLED TWICE BY L55 FOR /EACH PAGE OF CODE. / ASMBL, 0 JMS A1 JMS I ILC4PT /OUTPUT PAGE ORIGIN JMS I INIS /DO INITS. TAD PTSZE /PLACE - SIZE OF PAGE TABLE CIA DCA INDX1 /IN AN INDEX LOCATION TAD LFSBSE /SET UP LFS TABLE POINTER DCA LFSPTR CLA CMA DCA PHASE /SET PHASE SWITCH TO ASSEMBLY JMS I ASM02I /SKIP INCREMENTING POINTERS THE FIRST TIME JMS I ISSI /INCREMENT PAGE TABLE POINTERS ISZ INDX1 /OVER YET JMP .-3 JMS A2 JMP I ASMBL ISSI, ISZPT / /ASSEMBLY ROUTINE TO FINISH OFF A PAGE /(1) PUTS OUT PAGE ESCAPE /(2) LITERAL POOL (BY CALLING OAPLT) /(3) GET READY FOR NEXT PAGE / A2, 0 JMS I SAVLNP /STOP NEXT LINE LISTING TAD APMSW /ARE WE IN AUTOMATIC PAGING MODE SZA CLA JMP A2NONA /NO ... DONT SEND PAGE ESCAPE TAD PGEESC /SIZE OF PAGE ESCAPE REQUIRED RTR /2 BIT TO LINK SZL CLA JMP ASM01A /2 INSTRUCTION PAGE ESCAPE /4 INSTRUCTION PAGE ESCAPE JMS I WRITEP JMS I OUTBIN /JMP NEXT TO LAST LOC ON THIS PAGE K5376 0 ISZ ILC /FOR BENEFIT OF "WRITE" CLA CMA JMS A2SUBR /OUTPUT JMP AND LITERAL TABLE JMS I OUTSKP /OUTPUT 2 SKIP INSTRUCTIONS JMS I OUTSKP JMP ASM01B /RETURN / ASM01A, JMS A2SUBR /OUTPUT JMP AND LITERAL TABLE JMS I WRITEP JMS I OUTBIN /PLACE A NOP IN THE LAST LOCATION K7000 0 ASM01B, JMS I RELNP /RESTORE NEXT LINE FOR LISTING TAD ACTR /REMAINS 1 DURING PASS 2 SZA CLA JMP I A2 /EXIT IF LISTING OR 2ND ASSEMBLY TAD PUPGE /SAVE ESCAPE ON PUSH DOWN LIST CDF 00 DCA I PEPTR CDF 10 ISZ PEPTR /MOVE STACK PTR JMP I A2 /RETURN A2NONA, JMS I OUAPLT DCA PUPGE /CLR JMP ASM01B /SUBROUTINE TO ELIMINATE SOME COMMON CODE / A2SUBR, 0 TAD K177 TAD PAG DCA A2TEMP /SET ILC IN CASE NO LITERALS JMS I WRITEP JMS I OUTBIN K5377 0 JMS I OUAPLT /OUTPUT LITERAL TABLE TAD A2TEMP DCA ILC /SET ILC TO 176 OR 177 IN PAGE JMS I ILC4PT JMP I A2SUBR /RETURN A2TEMP, 0 ILC4PT, ILC4 ASM02I, ASM02 INDX1, 0 INIS, INISUB OUAPLT, OAPLT SAVLNP, SAVLIN RELNP, RELINE PEPTR, PEBSE REDUCE, 0 CDFSKP, JMS CDFSK / /INITIALIZE A PAGE ASSEMBLY / A1, 0 TAD PAG /MOVE PAGE TO ILC DCA ILC DCA LITSIZ /ZERO LITERAL TABLE SIZE TAD PASS SNA CLA JMP I A1 /EXIT IF PASS 1 CDF 00 TAD I PEPTR /GET NEXT PAGE ESC FROM STACK CDF 10 ISZ PEPTR /MOVE PTR DCA REDUCE JMP I A1 / / DUMMY PSEUDO OP / PDUMMY, JMS I GETSYM /GET NEXT INPUT ITEM SKP /NOTHING THERE JMP .+3 /SYMTOL NOP /CONSTANT IERROR /LITERAL JMS I SKIPL TAD USE /MST USE WORD AND K3403 /SAVE SYMBOL LENGTH, TYPE BITS, AND DEF BIT TAD K20 /ADD CORRECT MST BIT FOR DUMMY DCA USE /FOR CORRECT CODE WORD JMP I NULLP /EXIT TO GET NEXT LINE K3403, 3403 / /COMPUTE CURRENT PAGE SIZE /ENTER WITH AC=0 /EXIT WITH PAGE SIZE IN AC / CPGES, 0 TAD APMSW /OMIT PGEESC IF NON-AUTO PAGING SNA CLA TAD PGEESC /+SIZE OF ESCAPE REQUIRED TAD PTSZE /SIZE OF PAGE TABLE TAD LTSZE /+SIZE OF LITERAL TABLE TAD OPSCTR /+OFF PAGE SYMBOL COUNTER TAD OBACTR /+OFF BANK ADDITION COUNTER DCA PSTDEF /STORE IN TEM. TAD PSTDEF /GET IT BACK TAD PAG /AND CHECK FOR 7600 PAGE OVERFLOW AND K7600 TAD K200 SNA CLA SERROR /OVERFLOW-ERROR S TAD PSTDEF /O.K. GET PAGE SIZE, WHICH JMP I CPGES /IS DESIRED RESULT /ROUTINE TO SET DEFINED BIT ON PST /USED BY CPLFS & ANUMCK PSTDEF, 0 TAD I PSTCPR /PROTECT CODES SMA TAD K4000 /SET DEFINED BIT ON PST DCA I PSTCPR JMP I PSTDEF *5600 / / CONSTANT FOR AN ADDRESS FIELD SYMBOL / ASM05, TAD I PTSPR /ACTUAL BINARY CONSTANT AND K7600 /IS IT ON PAGE ZERO SZA CLA JMP I ASM5CI /NO TAD I PTSPR /ADD IN PAGE ZERO ADDRESS DCA TEMP6 TAD I PTCPR /YES ... IS IT INDIRECT AND K400 SNA CLA JMP ASM00 /EXIT TO COMMON AREA TAD TEMP6 JMP I ASM5AI ASM5AI, ASM12E ASM5CI, ASM05C / / OFF BANK DIRECT (COMMON DIRECT) / ASM08, JMS I NSCHKP TAD VAL /ACTUAL ADDRESS IN BANK ZERO DCA S1 /TO 2 WORD LITERAL TABLE SEARCH LOCATION CLA IAC DCA S0 /ABSOLUTE SEARCH JMS I SERALP /GET A PAGE ADDRESS TAD K400 /ADD INDIRECT BIT DCA TEMP6 TAD BANK /BANK INDICATOR SNA CLA /IS IT SET JMP ASM00 DCA I ASMX5I TAD KCDF1A DCA I ASMX4I TAD CDZSKI DCA I ASMX6I DCA TEM7 JMP I ASME7I ASMX5I, ASMX5 ASMX4I, ASMX4 KCDF1A, KCDF10 ASMX6I, ASMX6 ASME7I, ASME7 CDZSKI, CDZSKP SERALP, SRALT NSCHKP, NSCHK / /ASM02 IS THE HEART OF ASSEMBLY /IT IS CALLED ONCE FOR EACH ITEM ON /THE PAGE TABLE. /IT CONSISTS OF MANY PARTS, ONE FOR /EACH BASIC TYPE OF INSTR. TO BE /ASSEMBLED PLUS VARIOUS COMMON EXITS / ASM02, 0 DCA LFS /ZERO LFS INDICATOR TAD PASS SZA CLA JMS I GETBAP /RESTORE BANK & LSTSKP IF PASS2 JMS I LFSCHK /PROCESS LFS IF ANY JMS I ANCHK /PROCESS BSS 0 IF ANY KCDF00, CDF 00 TAD I PTOPR KCDF10, CDF 10 DCA OP TAD I PTCPR AND K40 /IS IT A SKIP INSTRUCTION DCA CURSKP /YES ... SET SKIP INDICATOR TAD I PTCPR AND K10 /IS IT A PSEUDO OP (PAR) SZA CLA JMP I ASM03I /YES ... EXIT TAD I PTCPR AND K4 /IS IT A MEMORY REFERANCE INSTRUCTION SZA CLA JMP ASME1 /NO TAD I PTCPR /PT CODE WORD AND K20 /IS AFS A CONSTANT SZA CLA JMP ASM05 /YES TAD I PTCPR /PT CODE WORD AND K2 /IS AFS A LITERAL SZA CLA JMP I ASM06I /YES TAD I PTSPR /AFS ID WORD FOR SYMBOL TABLE DCA AFS /TO DIRECTLY ADDRESSABLE LOCATION JMS I OBSYM /GET ITS POINTERS TO MST AFS TAD I PTCPR /PT CODE WORD AND K400 /IS OP INDIRECT SZA CLA JMP I ASM2AI /YES JMS I UZTST /TEST FOR OFF BANK OR ABSOLUTE ASM08 /OFF BANK ASM09 /ABSOLUTE JMP I ASM07I /NO ASM2AI, ASM02A ASM03I, PPAR1 ASM06I, ASM06 ASM07I, ASM07 ANCHK, ANUMCK UZTST, USETST / / END OF LINE NECESSITIES / ASM00, TAD TEMP6 ASME1, TAD OP ASME2, DCA TEM1 JMS I WRITEP JMS I OUTBIN TEM1 ASME1X, 0 ASM01, JMS I CMNASM /SET BANK=1 AFTER A JMS JMS ASMCMN /SET BANK AND LSTSKP DCA SKPSAV /SAVE CURSKP IN SKPSAV TAD BANK /SAVE FOR PROTECTION DURING LISTING DCA BNKSAV ISZ ILC /INCREMENT ILC ASM02R, JMP I ASM02 /USED AS OFF-PAGE RETURN SERROR /ILC OVERFLOWED 7777 - PROGRAM TOO BIG CMNASM, CMNSET GETBAP, GETBAS BNKSAV, 0 SKPSAV, 0 OPISUB, JMS OPIS OBISUB, JMS OBIS /SUBROUTINE TO UPDATE BANK,LSTSKP,LSTBNK / ASMCMN, 0 TAD LSTSKP /IS LAST INSTRUCTION A SKIP INSTRUCTION SNA CLA JMP .+10 /NO TAD LSTBNK /YES ... LAST BANK CIA TAD BANK /+CURRENT BANK SNA CLA /ARE THEY THE SAME JMP .+3 /YES CLA CMA /NO ... SET BANK UNKNOWN DCA BANK TAD CURSKP /PLACE CUR SKIP INDICATOR DCA LSTSKP /AS LAST SKIP INDICATOR TAD BANK /PLACE CURRENT BANK DCA LSTBNK /IN LAST BANK INDICATOR TAD LSTSKP JMP I ASMCMN *6000 / / / INDIRECT DUMMY ARGUMENT / DUMSUB ASM10, TAD I .-1 DCA TEMP6 CLA CMA /SET BANK UNKNOWN JMP ASME3 /EXIT FOR SKIP CHECK / / OFF BANK INDIRECT (INDIRECT COMMON) / OBISUB ASM11, TAD I .-1 DCA TEMP6 / TEMP6=EXP ASME3, DCA BANK /SET C(AC) IN BANK TAD LSTSKP /WAS LAST A SKIP? SNA CLA JMP ASME4 /NO //FOLLOWING 6 LINES HAVE BEEN //MOVED TO 6600 TO MAKE ROOM FOR V03 JMP I .+1 ASMEXT // JMS I OUTSKP /YES, OUTPUT SKP // TAD ILC /GET PG.LOC.PTR. // TAD K4 /+4 // AND K177 // TAD K5200A /OUTPUT JMP .+4 // DCA TEM1 REEASM, JMS I WRITEP JMS I OUTBIN TEM1 0 ISZ ILC /INCREMENT PG.LOC.PTR. ASME4, JMS I WRITEP JMS I OUTBIN /OUTPUT JMS TO TEMP6 /OBISUB,OPISUB, OR DUMSUB 0 ISZ ILC JMS I ASM10B /PPAR3S ISZ ILC TAD OP TAD K407 JMP I ASME2P ASME2P, ASME2 ASM02A, TAD USE /AFS MST USE WORD AND K20 /IS AFS A DUMMY ARGUMENT SZA CLA JMP ASM10 /YES JMS I UZETST /TEST FOR OFF-BANK OR ABSOLUTE ASM11 /OFF-BANK ASM12 /ABSOLUTE JMP I ASM13I /NO ASM10B, PPAR3S ASM13I, ASM13 K407, 0407 ASME5A, TAD OP SPA CLA /BANK NEED NOT BE CURRENT FOR A JMP OR JMS JMP ASME6+2 /WHICH IS NOT EXPLICITLY INDIRECT ASME5, TAD BANK SMA SZA CLA JMP ASME6+2 ASME7, TAD LSTSKP SZA CLA JMP .+7 JMS I WRITEP JMS I OUTBIN ASMX4, KCDF00 ASMX5, 5 ISZ ILC JMP ASME6 JMS I WRITEP JMS I OUTBIN ASMX6, CDFSKP 0 ISZ ILC JMS I OUTSKP ASME6, TAD TEM7 DCA BANK TAD K5 DCA ASMX5 TAD KCDFA DCA ASMX4 TAD CDFSKI DCA ASMX6 IAC DCA TEM7 JMP I .+1 ASM00 CDFSKI, CDFSKP ASME1I, ASME1 KCDFA, KCDF00 UZETST, USETST / / SYMBOL TABLE TYPEOUT FLAG TYPEOUT ROUTINE /CALL SEQ.: TAD USE /GET TYPE BITS / RTL / RTL / JMS STFT / RETURN /USED ONLY BY PRSYM / STFT, 0 AND K3 /MASK OUT TYPE BITS SNA JMP STFT3 /ABSOLUTE SYM. TAD M3 /CK FOR NEW OPDEF SNA JMP STFT2 /YES IAC SNA JMP STFT5 /EXTERNAL SZL CLA JMP STFT1 /DEFINED TAD K2516 /"UN" JMS I CTYPE TAD K0406 /"DF" STFT0, JMS I CTYPE /TYPE FLAG STFT1, CLA /WE MUST HAVE A CLEAR AC JMP I STFT /RETURN K2560, 2560 K1720, 1720 STFT2, TAD K1720 /TYPE "OP" JMP STFT0 STFT3, TAD USE AND K40 SZA CLA JMP STFT4 /COMMON TAD K0102 /"AB" JMS I CTYPE TAD K2300 /"S " JMP STFT0 STFT4, TAD K0317 /"CO" JMS I CTYPE TAD K1500 /"M " JMP STFT0 K0102, 102 K0317, 317 K2300, 2300 K1500, 1500 K2516, 2516 K0406, 406 K0530, 530 K2400=SLITAB STFT5, TAD K0530 /"EX" JMS I CTYPE TAD K2400 JMP STFT0 *6200 / / LOCAL DIRECT REFERANCE / ASM07, JMS I SPSTAB /IS AFS ON PST JMP ASM07A /NO ... ROUTINE PLACES IT THERE TAD I PSTCPR /PST CODE WORD SMA CLA /IS SYMBOL ON PAGE JMP ASM07A /NO JMS NSCHK TAD VAL /AFS MST VALUE AND K177 /SAVE PAGE ADDRESS TAD K200 /ADD PAGE BIT JMP I AS00I4 / ASM07A, TAD I PTSPR /ACTUAL SYMBOL DCA S1 /TO 2 WORD LITERAL TABLE SEARCH LOCATION JMS NSCHK CLL RTL TAD K2 /RELOCATABLE SEARCH JMP ASM05C+3 ASM09B, JMS NSCHK TAD VAL /DIRECT NON-PAGE 0 ABSOLUTE SKP / / / NON PAGE ZERO CONSTANT ADDRESS / ASM05C, TAD I PTSPR /ACTUAL BINARY CONSTANT DCA S1 /TO 2 WORD LITERAL TABLE SEARCH LOCATION CLA IAC DCA S0 /ABSOLUTE SEARCH JMS I SERALT /GET A PAGE ADDRESS TAD K400 /ADD INDIRECT BIT DCA TEMP6 JMP I .+1 ASME5A /EXIT FOR SKIP CHECK IF OP IS NOT JMP OR JMS / / DIRECT ABSOLUTE OR EXTERNAL / ASM09, JMS NSCHK TAD VAL /ABSOLUTE SYMBOL VALUE AND K7600 /IS SYMBOL ON PAGE ZERO SZA CLA JMP ASM09B /NO JMS NSCHK TAD VAL /ADD IN PAGE ZERO ADDRESS JMP I AS00I4 / AS00II, ASME5 / / LITERAL FOR AN ADDRESS FIELD SYMBOL / ASM06, TAD I PTSPR /ACTUAL LITERAL DCA S1 /TO 2 WORD LITERAL TABLE SEARCH LOCATION CLA IAC DCA S0 /ABSOLUTE SEARCH JMS I SERALT /GET A PAGE ADDRESS JMP I AS00I4 /EXIT FOR SKIP CHECK AS00I4, ASM05+5 OUTSK, 0 JMS I WRITEP JMS I OUTBIN K7410 0 ISZ ILC JMP I OUTSK SERALT, SRALT / / INDIRECT ABSOLUTE / ASM12, TAD VAL /AFS MST USE WORD AND K7600 /IS IT ON PAGE ZERO SZA CLA JMP ASM12F /NO / / INDIRECT PAGE ZERO ABSOLUTE SYMBOL / JMS NSCHK TAD VAL /SAVE PAGE ZERO ADDRESS ASM12E, TAD K400 /ADD INDIRECT BIT DCA TEMP6 JMP I AS00II / / INDIRECT NON PAGE ZERO ABSOLUTE SYMBOL / OPISUB ASM12F, TAD I .-1 DCA TEMP6 TAD BANK JMP I AS00I3 /EXIT FOR SKIP CHECK AS00I3, ASME3 K5377, 5377 / / LOCAL INDIRECT REFERANCE / ASM13, JMS I SPSTAB /IS AFS ON PST JMP ASM14 /NO ... MUST BE OFF PAGE TAD I PSTCPR /YES ... PST CODE WORD SMA CLA /IS AFS ON PAGE JMP ASM14 /NO JMS NSCHK TAD VAL /AFS VALUE FROM MST AND K177 /SAVE PAGE DISPLACEMENT TAD K600 /ADD PAGE AND INDIRECT BIT DCA TEMP6 /SAVE JMP I AS00II /GO OUTPUT INSTRUCTION / / OFF PAGE INDIRECT / OPISUB ASM14, TAD I .-1 DCA TEMP6 CLA IAC /SET BANK TO CURRENT JMP I AS00I3 /EXIT FOR SKIP CHECK NSCHK, 0 TAD I PTCPR AND K2000 SZA CLA IAC /ITS A # JMP I NSCHK /"IF" - CONDITIONAL ASSEMBLY PSUEDO-OP PIF, JMS I GETSYM JMP PIFERR /NOTHING THERE JMP .+3 /SYM NOP /CON JMP PIFERR /LIT TAD CHR /CK FOR COMMA TAD M254 SZA CLA IERROR /NOT A COMMA ISZ X0 /PREVENT FLAGGING COMMA JMS I GETSYM /YES, SET CTR TO SKIP N LINES NOP SKP SKP /I WANT A NUMBER PIFERR, IERROR TAD USE /IS SYMBOL DEFINED? AND K400 SZA CLA DCA S0 /YES, CONTINUE NORMAL ASSMBLY JMS I SKIPL TAD S0 /GET THE NUM. CIA DCA IFCTR JMP I NULLP IFCTR, 0 ILC4, 0 JMS I OUTBIN ILC 4 JMP I ILC4 /LAP & EAP PSUEDO-OPS *6372 /MUST BE AT 6372 OR AT PAGE BOUND. +172 FOR K5376 TO WORK AS SKIP PLAP, JMS I SKIPL IAC /LEAVE AUTO-PAGING MODE K5376, 5376 /THIS REPLACES A SKIP.*******DO NOT MOVE******** PEAP, JMS I SKIPL DCA APMSW /ENTER AUTO-PAGING MODE JMP I NULLP *6400 LISTON, 1411 2324 1116 0700 1716 0000 HISP, 1011 0710 0023 2005 0504 0020 2516 0310 7700 RDER, 0022 0501 0405 2277 0000 / PART OF MAIN PROGRAM / RECOUNT ROUTINE /FOLLOWING CODE CLEANS UP PST CODES BEFORE RECOUNTING CLNPST, CIA DCA IOINIT /SET COUNTER TAD PSTBSE IAC DCA PSTCPR /CODE POINTER TAD I PSTCPR /LOOP AND K4003K /KILL OBAC DUE TO THIS SYM. DCA I PSTCPR ISZ PSTCPR /MOVE PTR ISZ PSTCPR ISZ IOINIT JMP .-6 /NOT DONE JMP I .+1 RECRET K4003K, 4003 / / /COMMON EXIT FOR DATA-GENERATING PSUEDO-OPS / POPEX, DCA BSSSW TAD LFS /CK FOR TAG SNA CLA JMP I DCIL1 /NO TAG CMA /DECREMENT PTSZE TAD PTSZE DCA PTSZE JMS I RECTI /YES RECOUNT THE PAGE ISZ PTSZE /RESTORE PTSZE JMS I ISZPTX /RESTORE PT PTRS JMP I DCIL1 /RETURN FOR NEXT LINE ISZPTX, ISZPT /ROUTINE T0 INITIALIZE I/O DEVICES C2=JMS I CTYPE IOINIT, 0 CDF 10 TAD JL64 DCA TYPE VN, JMP I VERSI IOI, JMS I CRLF TAD JHISP DCA X1 TAD M5 JMS QUERY JMP RGO TAD JRDER DCA X1 TAD M5 JMS QUERY JMP RGO RGO, JMS KSR TAD JHSR TAD JASR DCA I INDEVP JMS I CRLF TAD JHISP DCA X1 TAD M11 JMS QUERY NOP JMS KSR JMP .+4 TAD TYPE DCA PUNCH JMP IOX TAD JL63 DCA PUNCH JMS I CRLF TAD JLIST DCA X1 TAD M17 JMS QUERY NOP JMS KSR IAC /1 = PUNCH, 0 = TYPE IOX, DCA LSTDEV JMP I IOINIT QUERY, 0 DCA JCOUNT TAD I X1 C2 KSF SKP JMP I QUERY ISZ JCOUNT JMP .-6 ISZ QUERY JMP I QUERY KSR, 0 KSF JMP .-1 KRB DCA TEM1 TAD TEM1 JMS I TYPE TAD TEM1 TAD M331 SZA CLA /0="YES" ISZ KSR /NOT "YES" JMP I KSR LSTDEV=QUERY M331, -331 JHSR, HSR-ASR JASR, ASR INDEVP, INDEV JL63, L63 JL64, L64 JCOUNT=TEM3 JHISP, HISP-1 JLIST, LISTON-1 JRDER, RDER-1 VERSI, VERNUM M5, -5 M11, -11 M17, -17 *6600 // //PART OF MAIN PROGRAM MOVED FOR V03 // /ROUTINE TO RESTORE BANK AND LSTSKP FOR PASS2 /WILL NOT FIT INTO ASM02 WHERE IT BELONGS GETBAS, 0 TAD I BNKSAP DCA BANK TAD I SKPSAP DCA LSTSKP JMP I GETBAS BNKSAP, BNKSAV SKPSAP, SKPSAV /INPUT ROUTINES HSR, 0 DCA TEM10 /CLR TIMER RFC HSR1, RSF JMP HSR2 RRB JMP I HSR HSR2, DCA ASR /WASTE SOME TIME ISZ TEM10 /CK TIMER JMP HSR1 /KEEP TRYING REXIT, TAD X3 /CK FOR EMPTY BUFFER TAD BUFBEG SZA CLA JMP .+4 /NO, WE HAVE A PARTIAL BUFFER CDF 10 JMP I .+1 /YES TAPE HAS ENDED WITH NO END STATMT ERRE DCA I X3 /FILL END OF BUFFER WITH 0'S TAD X3 TAD BUFEN SZA CLA JMP .-4 JMP I RG3P /NOW RET. FOR PROCESSING ASR, 0 TAD M50 DCA TEM11 DCA TEM10 ASR1, KSF JMP ASR2 KRB JMP I ASR ASR2, ISZ TEM10 JMP ASR1 ISZ TEM11 JMP ASR1-1 JMP REXIT M50, -50 TEM10, 0 TEM11, 0 BUFBEG, 1-DATA RG3P, RG3 BUFEN, 1-LINBUF / / ENTRY PSEUDO OPERATION / PENTRY, JMS I GETSYM /GET NEXT INPUT ITEM SKP /NOTHING THERE JMP .+3 /SYMBOL NOP /CONSTANT IERROR /LITERAL JMS I SKIPL JMS I SREST /PLACE SYMBOL ON EXTERNAL SYMBOL TABLE CLA TAD USE /AFS MST USE WORD AND K403 /SAVE SYMBOL LENGTH (& DEF. BIT FOR PASS 2) TAD K2220 /ADD IN PROPER BITS DCA USE /FOR NEW MST USE WORD JMP I NULLP /EXIT FOR NEXT LINE K2220, 2220 K403, 403 / / / /INCREMENT PAGE TABLE POINTERS / ISZPT, 0 ISZ PTCPR /INCREMENT PAGE TABLE CODE POINTER BY 2 ISZ PTCPR ISZ PTSPR /INCREMENT PAGE TABLE SYMBOL POINTER BY 2 ISZ PTSPR ISZ PTOPR /INCREMENT PT OP CODE POINTER JMP I ISZPT / /CK CONSTANT FOR BLOCK PSEUDO-OP / PBSS4, TAD APMSW /AUTOMATIC PAGING? SNA CLA TAD K2 /YES, 176 IS MAXIMUM TAD M200 /NO, 200 IS MAX TAD S0 /CHECK CONSTANT SMA SZA CLA IERROR /TOO BIG TAD S0 /IS CONSTANT 0? SNA JMP I PBSS2J /YES, EQUIVALENCE TAG JMP I PBSS5I /NO, CREATE BLOCK OF THIS SIZE PBSS2J, PBSS2 PBSS5I, PBSS5 / /PATCH TO DELETE DEFINED BIT IN PST FOR A TAG /EQUIVALENCED TO A LINE THAT OVERFLOWED THE PAGE / EQVFIX, TAD EQVBIT /WAS THERE SUCH A TAG? SNA CLA JMP I L55CP /NO TAD I EQVBIT /YES, GET PST CODE FOR THIS TAG TAD K4000 /CANCEL DEFINED BIT DCA I EQVBIT TAD K200 /SET EQUIVALENCE BIT FOR NEXT LINE DCA EQVBIT /WHEN NEXT PAGE GETS GOING JMP I L55CP /RETURN TO ASSEMBLE THE PAGE WE HAVE L55CP, L55C / /CK FOR TYPE OF SYMBOL /CALL SEQ: JMS WHATYP / RET. IF USER SYMBOL / RET. IF OP SYMBOL / WHATYP, 0 TAD USE AND K3000 TAD M3000 SNA CLA ISZ WHATYP JMP I WHATYP / /EXECUTE ISZ GTSYM (MOVE RETURN POINTER) ONLY IF IFCTR .GE. 0 /OTHERWISE MOVE LINE PTR TO NEXT SLASH, SEMI-COLON OR CAR.RET. /& ISZ IFCTR & TREAT AS A NULL LINE. / CKIF, 0 TAD I IFCT /IS CONDITIONAL NON-ASM IN EFFECT? SPA CLA JMP .+3 /YES: DO NOT ASMBL LINE ISZ I GETSYM /NO, MOVE RETRN PTR & CONT. AS USUAL JMP I CKIF ISZ I IFCT /COUNT IGNORED LINE NOP TAD CHR /MOVE LINE PTR TO END OF LINE CKIF2, SNA JMP CKIF3 /FOUND A CR TAD M257 SNA JMP CKIF3 /SLASH TAD M14 SNA CLA JMP CKIF3 /SEMI-COLON JMS I GETCHR /TRY NEXT JMP CKIF2 CKIF3, JMP I .+1 ITM15 M257, -257 M14, -14 IFCT, IFCTR *6776 /PAGE SYMBOL TABLE (200 WORDS) /DOUBLE WORD ENTRIES /REBUILT FOR EACH CORE PAGE OF CODE /EVERY SYMBOL DEFINED OR REFERENCED ON /GIVEN PAGE IS ENTERED /TYPICAL ENTRY*: WD1=SYMBOL ID / WD2=CODE BITS /SYMBOL ID=ADDRESS OF SYMBOL ENTRY IN MAIN SYM. TAB /CODE: BIT0=1 IF SYM. DEF. ON CUR. PAGE / BIT11=1 IF SYM REFERENCED NORMALLY BY A MR1 ON THE PG. / BIT10=1 IF SYM. REF'D. WITH A # / BITS 1-9 USED FOR COUNTING AMOUNT OF OBACTR / WHICH IS DUE TO THIS SYMBOL /SYMBOLS ARE ENTERED ON PST IN ORDER OF APPEARENCE /IN SOURCE /NO MORE THAN 64 (DEC) SYMBOLS MAY BE REF'D. /ON ANY PAGE. /NOTE: THE SIZE OF THIS TABLE SHOULD NOT BE /INCREASED UNLESS LFS TABLE IS ALSO INCREASED. *7176 /PAGE TABLE (402 WORDS) /DOUBLE WORD ENTRIES /ONE ENTRY FOR EACH INSTRUCTION TO BE ASSEMBLED /ROOM FOR 1 EXTRA ENTRY TO COVER PAGE OVERFLOW /A NEW TABLE FOR EACH PAGE OF CODE /TYPICAL ENTRY: WD1=CODE BITS / WD2=SYMBOL WORD /CODE: BIT1=1 IF # REF / BIT2=1 IF CDF TO CUR BANK / BIT3=1 IF INDIRECT / BIT4=1 IF BLOCK 0 (FOR EQUIVALENCED TAGS) / BIT5=1 IF SPECIAL CALL CONST / BIT6=1 IF SKIP INST. / BIT7=1 IF AFS IS CONST / BIT8=1 IF PARAMETER / BIT9=1 IF OPR OR IOT INST. / BIT10=1 IF AFS IS LITERAL / BIT11=1 IF LFS OCCURS / BIT0 UNUSED /THE SYMBOL WORD=0 IF CODE BIT9=1 / =THE ACTUAL CONST OR LITERAL IF BITS2,5,7 OR 10=1 / =THE SYMBOL ID (MST ENTRY ADDR.) FOR AN ADDR. PARAMETER / OR FOR THE AFS OF AN MRI / /TYPE VERSION NUMBER /(THIS IS ONCE ONLY CODE) /(OVERWRITTEN BY P.S.T.) / *7000 / VERNUM, JMS I CRLF TAD JVERS DCA X1 TAD M26 JMS I MTYPE NOP TAD K7000X DCA I VNOP JMP I .+1 IOI JVERS, VERSN-1 MTYPE, QUERY M26, -15 VNOP, VN K7000X, NOP VERSN, 2004 /PDP-8 SABR DEC-08-A2C2-V# 2055 7040 2301 0222 4004 0503 5560 7055 0162 0462 5561 /- VERSION # (1ST DIGIT) 7001 /2ND DIGIT AND PATCH LEVEL /SABR BANK 1 SECTION /TABLES FIELD 0 *0 EQUTB, 0 /EQUIVALENCE TABLE /100 WORDS /TABLE IS REINITIALIZED BEFORE EACH PAGE BEGINS /COLLECTION, IF NO EQUIV. IS LEFT FROM PREVIOUS PAGE /MULTIPLE WORD ENTRIES /ONE ENTRY IS MADE FOR /EACH LOC. TAG WHICH HAS /EQUIVALENTS /1ST WORD OF EACH ENTRY /CONTAINS NO. OF OTHER WORDS /IN THE ENTRY /OTHER WORDS ARE SYMBOL ID'S /(MST ADDRESSES) OF SYMBOLS /EQUIVALENT TO THE PARTICULAR /LOCATION TAG *100 /BSEEST, 0 /EXTERNAL SYMBOL TABLE /100 WORDS /SINGLE WORD ENTRIES /CONSISTING OF THE SYMBOL ID (MST ADDRESS) /EACH EXT. SYM. IS ENTRED IN /THE TABLE WHEN IT FIRST /OCCURS IN THE SOURCE AND /ASSIGNED A LOCAL EXT. NUMBER /ACCORDING TO ITS PLACE IN THE /TABLE. *200 /PTOPTB, 0 /PAGE OP CODE TABLE /200 WORDS /SINGLE WORD ENTRIES /ONE FOR EACH ENTRY IN PAGE TABLE /ENTRY=ACTUAL OP CODE FOR /ALL MRI, OPR OR IOT'S /OR 0 FOR ALL PARAMETERS /NEW TABLE FOR EACH PAGE OF CODE /NOTE: THIS TABLE MAY OVERFLOW BY 1 WORD DURING COLLECTION /OVERFLOW CAUSED BY PUTTING INFO ON TABLE BEFORE CK FOR OVERFLOW /NO HARM IF ASSEM. PHASE LIT. TAB FOLLOWS CDF CIF 10 /CODE FOR START AT 200 JMP I .+1 START *400 /LITBSE, 0 /ASSEMBLY PHASE LITERAL TABLE /200 WORDS /DOUBLE WORD ENTRIES /MUST BE SEPARATE FROM COLL. /PHASE LIT. TAB. BECAUSE BOTH /GOING AT ONCE IN PASS 2. /THIS TABLE CONTAINS NOT /ONLY LITERALS BUT ALSO /OFF PAGE POINTERS /1ST WORD OF ENTRY = 1 OR 2 OR 6 /1 MEANS LITERAL & /2ND WORD CONTAINS ACTUAL VALUE /2 MEANS OFF PAGE SYMBOL PTR /& 2ND WORD CONTAINS SYMBOL ID. /6 MEANS OFF PAGE SYM. PTR /WHERE SYMBOL REFERENCED BY A # /2ND WORD AS FOR 2 /TABLE BUILT ANEW FOR EACH /PAGE OF CODE. *600 /LFSBSE, 0 /LOC FIELD SYMBOL TABLE /100 WORDS /SINGLE WORD ENTRIES /EACH=SYMBOL ID (MST ADDRESS) /OF THE GIVEN LFS /LFS'S ARE ENTERED IN ORDER /OF THEIR APPEARENCE IN SOURCE /TABLE REBUILT FOR EACH PAGE OF CODE /NOTE: THIS TABLE MUST BE AT LEAST AS LONG /AS THE PST TO PREVENT LFS OVERFLOW *700 PEBSE, 0 /PAGE ESCAPE PUSH DOWN LIST /40 WORDS /SINGLE WORD ENTRIES /EACH ENTRY IS 0,2, OR 4 /BEING THE VALUE OF THE /PAGE ESCAPE (0,2,OR 4 WORDS) /OF EACH PAGE ASSEMBLED /THESE NOS. ARE SAVED DURING /PASS 1 & USED DURING /PASS 2 *740 /SORT LISTS /SORT LIST FOR INITIAL CHAR. OF LITERAL SL3, 242 /QUOTE 255 /MINUS 304 /D 313 /K -1 /SORT LIST MUST BE FOLLOWED BY A NEGATIVE /BRANCH LISTS BL6, RLN15 RLN2 RLN2 RLN3 RLN3 /SORT LIST FOR BEGINNING OF INPUT ITEM SL2, 255 /MINUS 250 /LEFT PARIN 242 /QUOTE SL6, 273 /SEMI-COLON 257 /SLASH SL1, 240 /SPACE 211 /TAB 000 /CR -1 /SORT LIST MUST BE FOLLOWED BY A NEGATIVE /BRANCH LIST FOR BEGINNING OF INPUT ITEM BL2, ITM4 /NEGATIVE ITM8 /LITERAL ITM7 /ALPHA CONSTANT ITM15 /NULL ITEM ITM15 /NULL ITEM ITM2 /IGNORE SPACE ITM2 /IGNORE TAB ITM15 /NULL ITEM /BRANCH LIST FOR INITIAL CHAR. OF LITERL BL3, ITM7 /GET ASCII VALUE FOR LITERAL ITM10 /SET NEG. SW. ITM11 /SET MODE TO DECIMAL ITM12 /SET MODE TO OCTAL *1000 /LTBSE, 0 /COLLECTION PHASE LITERAL TABLE /100 WORDS /SINGLE WORD ENTRIES /CONTAINING ACTUAL VALUES /TABLE CONTAINS NOT ONLY /LITERALS BUT ALSO /POINTERS TO CONSTANT /AND ABSOLUTE ADDRESSES. /TABLE BUILT ANEW FOR /EACH PAGE OF CODE. /INPUT DATA BUFFER /546 (OCTAL) WORDS /ALL DATA CHARACTERS READ DIRECTLY INTO THIS BUFFER /1 CHAR. PER WORD /THE ACTUAL SIZE OF THE BUFFER IS ARBITRARY. *1100 DATA, 0 /LINE BUFFER (73 WORDS) /CONTAINS ASCII CHARACTERS, 1 PER WORD /NULLS & RUBOUTS DONT MAKE IT /END OF LINE MARKED BY A 0000 /CR,LF,FF DON'T GO INTO THE BUFFER /BUFFER IS LAID OUT AS FOLLOWS: *1646 LINBUF, 0 /110(OCTAL) WORDS FOR LINE CHARACTERS *1756 /LINEND, 0 /1 EXTRA WORD TO PREVENT OVERFLOW /(GETS THE 0 WHEN LINE IS TOO LONG) *1757 SL7, 215 214 212 240 211 /SORT LIST MUST BE FOLLOWED BY A NEGATIVE -1 BL1, PTEXT /SPACE PTEXT /TAB TEXERR /000 BL7, L72S L72X L72+2 L72+2 L72X /MAIN SYMBOL TABLE *2000 /ENTRIES ARE COMPOSED OF THE FOLLOWING: / FIRST A 1 WORD HEADER CODE / THEN THE SYMBOL ITSELF IN PACKED 6BIT ASCII (1-3 WORDS) / FINALLY THE 1 WORD BINARY VALUE OF THE SYMBOL /THE HEADER CODE IS LAID OUT AS FOLLOWS: /(A) FOR OP CODE SYMBOLS: / BIT0=1 AFTER THE SYMBOL HAS BEEN PRINTED BY PRSYM / BITS1&2=3 (THESE ARE THE SYMBOL TYPE BITS) / BIT3=1 FOR MEMORY REFERENCE INSTRUCTIONS / BITS4&5=THE MICRO-GROUP FOR OPR INSTRUCTIONS (0 FOR MRI AND IOT INSTS.) / (NOTE: MICRO-GROUP IS SET TO 0 FOR CLA) / BIT6=1 IF THE SYMBOL IS A PSUEDO-OP / BIT7=1 IF THE INST. IS A SKIP TYPE INST. / BIT8=1 / BIT9=0 / BITS10&11=THE NUMBER OF PACKED ASCII SYMBOL WORDS IN THE ENTRY /(B) FOR OTHER SYMBOL TYPES: / BIT0 AS ABOVE / BITS1&2=0 FOR ABSOLUTE AND COMMON SYMBOLS / =1 FOR RELOCATABLE SYMBOLS / =2 FOR EXTERNAL SYMBOLS / BIT3=1 AFTER THE SYMBOL HAS BEEN DEFINED / BIT4=1 FOR ENTRY SYMBOLS / BIT5=1 IF THE SYMBOL IS EVER REFERENCED BY A # / BIT6=1 IF THE SYMBOL IS IN COMMON / BIT7=1 IF THE SYMBOL IS A DUMMY SYMBOL / BITS8-11 AS ABOVE /MST=. 3053 /ABSYM 0102 2331 1500 PABSYM 3052 /ARG 0122 0700 PARG 3412 /AND 0116 0400 AND 0 3053 /BLOCK 0214 1703 1300 PBSS 3052 /CALL 0301 1414 PCALL 3053 /COMMN 0317 1515 1600 PCOMMN 3112 /CIA 0311 0100 CIA 3012 /CLA 0314 0100 CLA 3112 /CLL 0314 1400 CLL 3112 /CMA 0315 0100 CMA 3112 /CML 0315 1400 CML 3053 /DECIM 0405 0311 1500 PDEC 3053 /DUMMY 0425 1515 3100 PDUMMY 3412 /DCA 0403 0100 DCA 0 3052 /EAP 0501 2000 PEAP 3052 /END 0516 0400 PEND 3053 /ENTRY 0516 2422 3100 PENTRY 3053 /FORTR 0617 2224 2200 PFORT 3212 /HLT 1014 2400 HLT 3051 /IF 1106 PIF 3053 /CPAGE 0320 0107 0500 PIFF 3432 /ISZ 1123 3200 ISZ 0 3412 /INC (NON-SKIP ISZ) 1116 0300 ISZ 0 3112 /IAC 1101 0300 IAC 3012 /IOF 1117 0600 IOF 3012 /ION 1117 1600 ION 3412 /JMP 1215 2000 JMP 0 3412 /JMS 1215 2300 JMS 0 3012 /KRB 1322 0200 KRB 3032 /KSF 1323 0600 KSF 3052 /LAP 1401 2000 PLAP 3112 /NOP 1617 2000 NOP 3053 /OCTAL 1703 2401 1400 POCT 3053 /OPDEF 1720 0405 0600 OPDEX 3212 /OSR 1723 2200 OSR 3052 /PAGE 2001 0705 PPAGE 3053 /PAUSE 2001 2523 0500 PPAUSE 3012 /PLS 2014 2300 PLS 3032 /PSF 2023 0600 PSF 3053 /REORG 2205 1722 0700 PRORG 3053 /RETRN 2205 2422 1600 PRTN 3112 /RAL 2201 1400 RAL 3112 /RAR 2201 2200 RAR 3012 /RFC 2206 0300 RFC 3012 /RRB 2222 0200 RRB 3032 /RSF 2223 0600 RSF 3112 /RTL 2224 1400 RTL 3112 /RTR 2224 2200 RTR 3232 /SKP 2313 2000 SKP 3053 /SKPDF 2313 2004 0600 SKPDEX 3232 /SMA 2315 0100 SMA 3232 /SNA 2316 0100 SNA 3232 /SNL 2316 1400 SNL 3232 /SPA 2320 0100 SPA 3112 /STA 2324 0100 STA 3112 /STL 2324 1400 STL 3232 /SZA 2332 0100 SZA 3232 /SZL 2332 1400 SZL 3232 /SPC=SPA+CLA (USED BY COMPILER) 2320 0300 SPA CLA 3412 /TAD 2401 0400 TAD 0 3052 /TEXT 2405 3024 PTEXT 3012 /TLS 2414 2300 TLS 3032 /TSF 2423 0600 TSF ACH=20 ACM=21 ACL=22 0452 /ACH 0103 1000 ACH 0452 /ACM 0103 1500 ACM 0452 /ACL 0103 1400 ACL II, 0451 /I 1100 0400 STTP=. CORE1=7600 *CORE1-1 /THE OCCURRENCE TABLE EXTENDS DOWNWARD FROM HERE /TOWARD THE MAIN SYMBOL TABLE /& SHARING THE SAME SPACE WITH IT. /THIS TABLE IS VARIABLE, BEING COLLAPSED /AS MUCH AS POSIBLE DURING USE. THE ONLY /THING LEFT ON IT AT THE END ARE UNDEFINED /SYMBOLS. /THE OCC. TAB. CONTAINS AN ENTRY FOR EVERY /REF. TO AN AS YET UNDF. SYMBOL. EACH /TIME A SYMBOL IS DEFINED THE TABLE IS SEARCHED /TO SEE IF FORWARD REFERENCES TO IT EXIST. /IF SO THEY ARE OUTPUT & THE TABLE /CONDENSED. /ENTRIES CONSIST OF 2 OR 3 WORDS /STRUCTURED AS BELOW: /HIGH WORD: LOCATION OF REFERENCE /LOW WORD: SYMBOL I.D. /OPTIONAL WORD: # FLAG /THE LOC. WORD CONTAINS THE PROG. ADDR. WHERE /THE VALUE OF THE SYM. MUST BE ASSEMBLED /THE # FLAG=1 IF IT EXISTS. IT WILL /EXIST ONLY FOR THOSE ENTRIES WHERE THE /SYM. WAS REF'D. BY A #. /THE TABLE IS ALWAYS SEARCHED IN REVERSE /FROM LOW CORE UPWARD /THE O.T. PTR (OTP) ALWAYS PTS. TO THE NEXT FREE /LOCATION BELOW THE TABLE /THE TABLE HAS NO IMPORTANCE DURING PASS 2. /MEMORY IS NOT USED $ |
Added src/os8/uni/LANGUAGE/FORTRAN2/SPATCH.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 | /OS8 SABR ASSEMBLER OVERLAY ***SPATCH.07*** / / / / / / / // / / / / /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. / / / / / / / /FIXES TO SPATCH FOR V18 J.K. 1975 / / .CHANGED USE OF 17645 SO /N CAN BE PASSED TO LOADER / BIT 0 OF 17645 INDICATES THAT SABR WAS CHAINED / TO FROM FORT / .ALLOW TWO PAGE OUTPUT HANDLER / / /SABR ASSEMBLER, LIKE 8K FORTRAN UNDER OS/8, RUNS /IN FIELD 1 WITH ITS TABLES IN FIELD 0. / OCTOBER 26,1971 / /MODIFIED SO THAT SABR WILL, AT RUN TIME, DETERMINE IF THE USER /SPECIFIED I/O DEVICES REQUIRE TWO PAGE HANDLERS, AND IF SO /SABR WILL ALLOCATE SPACE FOR THEM. ALSO IF ALL I/O IS DONE VIA THE /SYSTEM DEVICE, SABR WILL NOT RESERVE ANY SPACE FOR I/O HANDLERS /SPACE FOR TWO PAGE HANDLERS IS MADE BY SHRINKING THE INPUT /BUFFERS-CURRENTLY 4 PAGES-TO 2 PAGES. B.CLOGHER 10/71 / FIELD 0 SDVHND=772 MPARAM=7643 DVHNDL=7647 JSBITS=7746 MOFILE=7600 CORE1=6200 /UPPER CORE LIMIT OF OCCURRENCE TABLE(VARIES WITH I/O HANDLERS NEEDED!!) SABR=201 /SABR V17 FIRST LOC AFTER "JMS I IOINIT" PASS=110 /SABR V17 SERROR=JMS I 177/SABR V17 ERRE=2701 /SABR V17 PRSYMP=41 /SABR V17 TEM1=123 /SABR V17 TEM2=124 /" M4=3704 /" CLOC1=6 /" CLOC2=3162 /" CLOC3=4356 /" CTYPE=23 /" CRLF=24 CHR=61 /" SYMBOL=3 /" LLFS=5364 /" LINE=67 /" L64=4772 /" TYPE=54 /" PUNCH=42 /" INBUF=6200 /6200-7177 OR 6600-7177 PRJ5=4051 PRNOP=4136 PRJ2=4170 PRS2=4025 PRS5=4101 *30 /CCL PATCH; GOES HERE AS A HACK CCLKLG, TAD [SKP DCA I [CCLSKP CDF 10 TAD I [7645 SMA CLA JMP I [NOTFRT TAD I [7645 AND P3777 DCA I [7645 CDF JMP I [SETCOR P3777, 3777 *200 /INITIALIZATION - GETS DESTROYED DURING SABR EXECUTION START, ISZ I [FSWITC /SKIPS SINCE FSWITC=-1. ENTRY FROM "R SABR" FSTART, JMP CCLKLG /ENTRY FROM 8K FORTRAN VIA "RUN SABR" MONITOR CALL CLA CMA /USED AS TEM. BY SUBR. DNUM DCA I [FSWITC /USED AS TEM. BY SUBR. DNUM PTEM1, CIF 10 JMS I [7700 /CALL I/O MONITOR 10 /AND ASK IT TO STICK AROUND CIF 10 JMS I [200 5 /COMMAND DECODE 2302 /.SB ASSUMED EXTENSION NOTFRT, CDF 10 TAD I [MPARAM AND [100 CDF 0 SNA CLA /IS /F SWITCH ON? DCA I [FSWITC /NO - ZERO OUT FSWITC TAD I [JSBITS TAD [1000 DCA I [JSBITS CCLSKP, JMP .+5 SETCOR, ISZ I [FDSW /SET DELETE SWITCH CIF 10 JMS I [7700 /CALL I/O MONITOR--LOCK IT IN 10 CDF 10 TAD I [MOFILE /CHECK FIRST TWO OUT DEV. SPECS.--NEED 2 PAGE HNDLR? OUTL, JMS DNUM JMP OSYS /NO OUTPUT OR SYS DEV. JMP TWOPAG /NEED TWO-PAGE HANDLER DONE, TAD I [MOFILE+5 /1 PAGE HNDLR-LOOK AT 2ND OUT DEV. ISZ CNT /DONE BOTH? JMP OUTL /NO-GO ON CLA /YES- TAD PTEM2 /ARE BOTH OUT DEVS. SYS: OR NOT THERE? SZA CLA /IF SO-ALLOT 0 PAGES FOR OUTPUT HANDLER TAD [-200 /NO-ALLOT 1 PAGE FOR HANDLER DONE1, DCA OPGES /-SIZE OF OUT HANDLER NEEDED INLP, TAD I TEM /NOW LOOP THRU 9 POSSIBLE INPUT SPECS. JMS DNUM JMP ISYS /INPUT NOT THERE OR SYS DEV. JMP TWOPG /TWO PAGE HANDLER NEEDED ILP1, ISZ TEM /ONE-MOVE PTR TO NEXT ISZ TEM ISZ CNT1 /DONE ALL 9? JMP INLP /NO TAD TEM3 /YES-ARE ALL INPUTS FROM SYS OR NOT THERE? SZA CLA /IF SO-DON'T SAVE ROOM FOR INPUT HANDLER TAD [-200 /NO-NEED ONE PAGE FOR HANDLER IDONE, DCA IPGES /STORE AS SIZE OF INPUT HANDLER TAD IPGES TAD OPGES TAD [400 /NEED MORE THAN A TOTAL OF 2 PAGES FOR HANDLERS? CDF 00 /BACK TO DF 0 SMA CLA JMP NOTWO /NO-GO ON DCA I [INREC1 /YES-ADJUST INPUT ROUTINE FOR ONLY 2 PAGE BUFFERS TAD [200 DCA I [INBFPT-1 DCA I [INRD1 DCA I [INRD1+1 TAD [6600 /RESET ADDRESS OF INPUT BUFFER DCA I [INBFPT TAD [400 NOTWO, TAD [6200 /RESET UPPER CORE LIM. OF OCCURRANCE TABLE TAD IPGES TAD OPGES DCA [CORE1 TAD OPGES TAD [200 SPA CLA /MORE THAN ONE PAGE OUT HNDLR NEEDED? IAC /YES TAD OPGES TAD I [INBFPT /ADJUST HANDLER FETCH FOR TWO PAGE HANDLER CDF 10 /BACK TO DATA FIELD 1 DCA I [OUHND CMA /PROPAGATE CHANGES INTO MAIN PART OF SABR TAD [CORE1 DCA I [CLOC1 TAD I [CLOC1 DCA I [CLOC3 TAD [CORE1 DCA I [CLOC2 TAD IPGES TAD [200 SPA CLA /MORE THAN ONE PAGE FOR INPUT HNDLR? IAC /YES-ADJUST IN HNDLR FETCH ROUTINE TAD I [CLOC2 /(CONTAINS START ADDRESS OF CORE FOR IN HNDLR.) CDF 00 DCA I [ADEVN /STORE FOR HNDLR FETCH ROUTINE CDF 10 JMP I [LCHK ISYS, ISZ TEM3 IPGES, 0 JMP ILP1 /INPUT SPEC. NOT THERE OR SYS DEV. TWOPG, TAD [-200 /INPUT SPEC-NEEDS TWO PAGES JMP IDONE-1 TWOPAG, TAD [-200 /OUT HNDLR NEEDS TWO PAGES JMP DONE1-1 OSYS, ISZ PTEM2 /OUT HNDLR NOT NEEDED OR SYS. DEVICE OPGES, 0 JMP DONE / /ROUTINE TO CHECK DEVICE SPECS. LEFT BY COMMAND DECODER AND SEE /IF WE NEED ANY TWO PAGE HANDLERS. ALSO CHECK IF ALL I/O IS FROM /SYS DEVICE IN WHICH WE DON'T HAVE TO SAVE ROOM FOR ANY HANDLERS /RETN. TO CALL + 1 IF DON'T NEED ROOM FOR ANY HANDLER /RETN. TO CALL + 2 IF NEED 2 PAGES FOR HANDLER /RETN. TO CALL + 3 IF NEED 1 PAGE FOR HANDLER / DNUM, 0 AND [17 /MASK DEV. # DCA FSTART+1 /STORE TAD FSTART+1 CLL SNA /ANYTHING THERE? JMP I DNUM /NO-TREAT LIKE SYS. DEV TAD [DVHNDL-1 /CHECK IF THIS HANDLER CO-RESIDENT WITH SYS.(TD8/E--UNIT 1) DCA FSTART+2 TAD I FSTART+2 TAD [200 SZL CLA /IS ENTRY PT. ABOVE 7600?? JMP I DNUM /YES-JUST LIKE SYS DEV. TAD FSTART+1 TAD [SDVHND-1 /NO-PICK UP TABLE WD WHICH TELLS IF 2 PAGE HNDLR. DCA FSTART+2 TAD I FSTART+2 ISZ DNUM /BUMP RETN. SMA CLA /BIT 0=1? I.E. DOES IT NEED TWO PAGES? ISZ DNUM /NO-NORMAL RETN. TO CALL+3--NEED 1 PAGE JMP I DNUM /YES-RETN. TO CALL+2--NEED 2 PAGES TEM3, -11 CNT, -2 CNT1, -11 PTEM2, -2 TEM, MOFILE+17 *400 LCHK, TAD I [MPARAM+1 AND (4 SNA CLA ISZ STSABR TAD I [MPARAM+1 AND [40 SNA CLA /IF /S IS ON TAD I [MOFILE+5 SZA CLA /OR IF THERE IS NO LISTING OUTPUT FILE JMP NSPEED TAD [PRS5&177+5200 /SPEED UP SYMBOL TABLE SORT DCA I [PRJ5 DCA I [PRNOP DCA I [SYMXX /AND PRINT "U" MESSAGE FOR UNDEFINEDS TAD [PRS2-1&177+5200 DCA I [PRJ2 NSPEED, CDF 10 TAD I [MOFILE+4 /GET EXTENSION OF BINARY OUTPUT SNA /IS IT THERE? TAD [2214 /NO - SET TO .RL DCA I [MOFILE+4 TAD I [MOFILE+11 SNA TAD [1423 /SIMILIARLY SET LISTING EXTENSION TO .LS DCA I [MOFILE+11 DCA I [OUTINH TAD I [MOFILE SNA CLA /BINARY OUTPUT? JMP NOBNOT /NO CDF CIF 10 JMS I [TSTNTR /YES - OPEN IT CDF 10 JMP YESBOT NOBNOT, TAD [MOFILE+1 DCA I [PFILE ISZ I [OUTINH /INHIBIT OUTPUT YESBOT, TAD I [MOFILE+5 CDF 0 SZA CLA DCA I [LSTFLG CDF 10 TAD I [MPARAM AND [41 /"L" OR "G" FLAGS ON? CDF 0 SNA CLA JMP NOLOAD JMS I [MINCOR CLA IAC /DEVICE "SYS" CIF 10 JMS I [200 2 /LOOKUP ALOAD, LOADER 0 /LENGTH GOES HERE AND IS IGNORED JMP NOLODR /COULDN'T FIND IT TAD ALOAD DCA I [LDRBLK CDF 10 TAD I [OUTREC CDF 0 DCA I [REMEMB NOLOAD, JMS I [OPENFL /OPEN FIRST INPUT FILE WHILE MONITOR STILL IN CORE CDF CIF 10 JMP I .+1 STSABR, SABR /FIRST LOC IN SABR AFTER "INITIAL DIALOGUE" NOLODR, TAD [1200 JMP I [ERROR LOADER, TEXT /LOADERSV/ *1100 /FILE OPENER - RESIDES IN PART OF THE OLD SABR INPUT BUFFER O7760, 7760 OPENFL, 0 CDF 10 TAD I FILPTR SNA /IS THERE ANOTHER INPUT FILE? JMP I (ERROR+1 /ERROR - NO END STATEMENT IN PROGRAM DCA OTEMP TAD OTEMP AND (17 /EXTRACT DEVICE NUMBER TAD (DVHNDL-1 DCA OTEMP2 TAD I OTEMP2 DCA OTEMP2 ISZ FILPTR TAD I FILPTR /GET STARTING BLOCK # CDF 0 DCA I (INREC /STORE IT AWAY ISZ FILPTR TAD OTEMP AND (7760 /EXTRACT LENGTH SZA /LENGTH OF 256 IMPLIES MAY BE LARGER TAD (17 CLL CML RTR RTR /GET LENGTH AS A NORMAL NEGATIVE NUMBER DCA I (INCNT /STORE THAT AWAY TOO TAD OTEMP2 SZA JMP GOTIT JMS I (MINCOR /GET MONITOR TAD ADEVN /THIS LOC. SET UP BY INITIALIZATION ROUTINE DCA ADEVNO TAD OTEMP CIF 10 JMS I O200 1 /ASSIGN ADEVNO, 5600 /FORCE HANDLER INTO PAGE 5600 JMP I (DELERR /GIVE S ERROR TAD ADEVNO GOTIT, DCA I (INDEV JMS I (MOUCOR /GET MONITOR OUT CLA CMA DCA I (INCHCT /FORCE BUFFER LOAD ON FIRST READ JMP I OPENFL OTEMP, 0 OTEMP2, 0 FILPTR, 7617 O200, 200 ADEVN, 0 /SET UP BY INIT. ROUTINE-PAGE ADDR. OF IN HNDLR *1600 MINCOR, 0 RDF TAD MINCIF DCA MINXIT MINCIF, CDF CIF 0 CIF 10 JMS I SYSTEM 10 /ESCAPE TAD MIN200 DCA SYSTEM MINXIT, 0 /RESTORE CALLING FIELDS JMP I MINCOR MOUCOR, 0 CDF 0 TAD SYSTEM E7500, SMA CIF 10 MN7700, SMA CLA JMS I SYSTEM 11 /GET OUT TAD MN7700 DCA SYSTEM JMP I MOUCOR SYSTEM, 200 MIN200, 200 ERROR, TAD E7500 /MAKE SABR ERROR "B" DCA MINCOR JMS MOUCOR /KICK MONITOR OUT CDF CIF 10 DCA I EPASS /SET PASS=0 SO ERROR WILL PRINT TAD EL64 DCA I ETYPE TAD MINCOR JMP I .+1 ERRE EPASS, PASS EL64, L64 ETYPE, TYPE *7200 SPAUSE, 0 /"PAUSE" STATEMENT PATCH TAD FSWITC CLL RAL TAD I (FILPTR DCA I (FILPTR /RESET FILE POINTER IF CALLED FROM FORTRAN JMS I (OPENFL /OPEN NEXT FILE CDF CIF 10 JMP I SPAUSE FSWITC, -1 /AS ADVERTISED DELETE, TAD I (MPARAM RTR /PUT "K" SWITCH IN LINK D7600, 7600 CDF 0 TAD I (JSBITS RAR CLL CML RAL DCA I (JSBITS /MARK "DON'T CARE IF MONITOR AREA DESTROYED" BITS TAD FDSW SZL SNA CLA /DELETE ONLY IF CALLED FROM FORTRAN WITH JMP NODLET /"K" SWITCH(IN LINK) ZERO JMS I (MINCOR CLA IAC /DEVICE "SYS" CIF 10 JMS I (200 4 /CLOSE - USED AS DELETE NAME /NAME FOR CLOSE PROCESSOR 0 /NO BLOCKS - WILL BE DELETED JMP DELERR /ERROR NODLET, TAD LDRBLK SNA CLA /WAS A LOADER BLOCK STORED JMP GETOUT CDF 10 TAD I (L64 CDF 0 SZA CLA /IF WE USED THE TELETYPE ROUTINE, JMP GETOUT /THEN THERE WAS AN ERROR TAD REMEMB CDF 10 DCA I (MOFILE+1 CLL CML CLA RAR TAD I (MPARAM+2 DCA I (MPARAM+2 CDF 0 JMS I (MINCOR CIF 10 JMS I (200 6 /RUN LDRBLK, 0 REMEMB, 0 FDSW, 0 GETOUT, TAD I (SYSTEM CDF 10 D7700, SMA CLA CMA DCA I D7700 CDF 0 JMP I .+1 7605 DELERR, TAD (1700 /GIVE A "S" ERROR DELER2, TAD (200 CDF CIF 0 JMP I (ERROR NAME, 0617;2224;2216;2415 INREAD, 0 AND D7700 SNA CLA JMS I POPNFL JMS I INDEV 400 /OR 200 IF NEED TWO PAGE HANDLERS-REDUCE BUFFER SIZE TO MAKE ROOM INBFPT, INBUF INREC, 0 JMP INERR ISZ INREAD ISZ INREC INREC1, ISZ INREC /OR 0000 IF TWO PAGE HANDLERS-SINCE IN BUFFER IS 1/2 SIZE JMP I INREAD INDEV, 0 INERR, SPA CLA JMP DELER2 JMP INREC+3 POPNFL, OPENFL CLSMBE, 0 /SUBR TO CLOSE OUTPUT FILE IF ONE EXISTS CDF CIF 10 TAD I (OUTINH SNA CLA JMS I (OUCLOS CIF 0 /IN CASE WE DIDN'T CLOSE IT JMP I CLSMBE *7400 /END OF PASS CRAP AND INPUT ROUTINE P40, 40 PASEND, ISZ I (PASS /BUMP PASS COUNTER LSTFLG, JMP SBSYMT /ZERO IF LISTING FILE EXISTS JMS I (CLSMBE /CLOSE BINARY FILE CDF CIF 10 JMS I (TSTNTR /ENTER LISTING FILE TAD I (FSWITC SZA CLA JMP .+4 TAD (7617 DCA I (FILPTR /RESET FILE POINTER TO BEGINNING JMS I (OPENFL /AND OPEN FIRST FILE /IF CALLED FROM FORTRAN WE DONT HAVE TO DO THIS /BECAUSE OF THE PECULIAR NATURE OF FORTRAN OUTPUT JMS I (MOUCOR /KICK MONITOR OUT CDF CIF 10 TAD I (MPARAM+1 P200, AND P40 /MASK OUT "S" SWITCH DCA I (OUTINH /INTO "OUTPUT INHIBIT" FLAG JMS I (SYMPRT /PRINT SYMBOL TABLE UNDER CONTROL OF /S DCA I (OUTINH /ZERO FLAG FOR LISTING TAD I (MPARAM+1 /SYMPRT RETURNS WITH DATA FIELD=10 RTL CIF 10 SNL CLA /"N" FLAG IS IN THE LINK JMP I (ENDRSM /HE WANTS A LISTING - GO GET IT SBREND, CIF 0 JMS I (CLSMBE /CLOSE OUTPUT FILE JMP I (DELETE /DELETE FORTRN.TM AND CHAIN OR RETURN SBSYMT, TAD (TDUMMY CDF CIF 10 DCA I (PUNCH /INHIBIT ALL FUTURE OUTPUT JMS I (SYMPRT /CHECK SYMTAB FOR UNDEFINEDS CDF 0 ISZ I (JSBITS /SET "DON'T CARE ABOUT USR CORE" FLAG JMP SBREND /NOW GO CLOSE BINARY OUTPUT FILE AND RETURN INCHAR, 0 ISZ INJMP KSF JMP .+5 KRS TAD (-203 SNA CLA JMP I (7600 /EXIT TO MONITOR IF ^C TYPED ISZ INCHCT INJMPP, INJMPE TAD INCNT INRD, JMS I (INREAD DCA INCNT /RETURN HERE ON EOF INRD1, ISZ INCNT /SET TO 0000 IF 2 PAGE HANDLERS FORCE INPT. BUFF. TO 1/2 SIZE SKP / " " " TAD (600 ISZ INCNT IN7400, 7400 TAD (-1401 DCA INCHCT TAD INJMPP DCA INJMP TAD I (INBFPT DCA INPTR JMP INCHAR+1 INJMPE=JMP . INJMP, INJMPE JMP INCHA1 JMP INCHA2 INCHA3, TAD INJMPP DCA INJMP TAD I INPTR AND IN7400 CLL RTR RTR TAD INTEMP RTR RTR ISZ INPTR JMP INCOM INCHA2, TAD I INPTR AND IN7400 DCA INTEMP ISZ INPTR INCHA1, TAD I INPTR INCOM, AND (177 SZA TAD (-177 SNA JMP INCHAR+1 TAD (145 /CHECK FOR ^Z SNA JMP INRD /^Z ON INPUT MEANS GO TO NEXT FILE TAD (232 CDF CIF 10 DCA I (CHR JMP I INCHAR INPTR, 0 INCHCT, 0 INTEMP, 0 INCNT, 0 FIELD 1 *6400 /OUTPUT ROUTINE INTERFACE - CANT GO PAST 6423 OUCHAR, 0 DCA I POUTEM TAD OUTINH SZA CLA OUCRET, JMP I OUCHAR /DOUBLES AS OFF-PAGE RETURN ISZ I POUJMP ISZ OUCHCT JMP I POUJMX JMS OUTDMP JMP OUCHAR+2 POUJMP, OUJMP POUJMX, OUJMX POUTEM, OUTEMP OUTINH, 0 F3ERR, TAD O2100 F2ERR, TAD O2100 F1ERR, CDF CIF 0 JMP I .+1 ERROR O2100, 2100 *6457 /LOADS OVER OLD SABR INITIALIZATION ROUTINE TSTNTR, 0 /CALLED FROM FIELD 0 TAD PFILE TAD C4 DCA PFILE TAD I PFILE ISZ PFILE DCA ODEVNO TAD OUHND /THIS LOC. IS SET UP AT INIT. TIME DCA OUHNDL CIF 0 JMS I (MINCOR JMS I (200 13 /RESET OUTPUT DEVICE TAD ODEVNO /LOAD OUTPUT DEVICE JMS I (200 1 OUHNDL, 7400 JMP F2ERR TAD PFILE DCA ENAME /POINTS TO FILE NAME DCA OULNGT /ZERO CLOSING LENGTH TAD ODEVNO /LOAD DEVICE NUMBER AND REQUESTED LENGTH JMS I (200 3 /ENTER ENAME, 0 /POINTER INTO COMMAND DECODER AREA GOES HERE OUCHCT=ENAME ELENGT, 0 /"0 LENGTH" MEANS AS LARGE A SPACE AS POSSIBLE JMP F2ERR /COULDN'T ENTER FILE - MAYBE BAD DIRECTORY TAD ENAME /GET STARTING BLOCK # DCA OUTREC /STORE IT AWAY JMS OUSPTR /INITIALIZE OUTPUT ROUTINE ENTRTN, CDF CIF 0 JMP I TSTNTR OUSPTR, 0 TAD POUBUF DCA I (OUPTR TAD (-601 DCA OUCHCT TAD (OUJMPE DCA I POUJMP JMP I OUSPTR OUTDMP, 0 CIF 0 JMS I OUHNDL 4200 POUBUF, 1200 /REMAINDER OF OLD SABR INPUT BUFFER OUTREC, 0 JMP F3ERR ISZ OUTREC JMS OUSPTR ISZ OULNGT ISZ ELENGT JMP I OUTDMP JMP F2ERR OUCLOS, 0 TAD OUT232 /PUT A ^Z IN THE OUTPUT FILE JMS OUCHAR TAD OUCHCT CMA SZA CLA JMP .-4 /FILL REMAINDER OF BUFFER WITH ZEROS JMS OUTDMP CIF 0 JMS I (MINCOR TAD ODEVNO JMS I (200 C4, 4 /CLOSE PFILE, 7574 OULNGT, 0 JMP F2ERR /ERROR ON CLOSE DCA OULNGT CIF 0 JMP I OUCLOS OUT232, 232 ODEVNO, 0 OUHND, 0 /SET UP AT INIT. TIME TO ALLOW 2 PAGE HNDLR /IF NEEDED *6610 /OUTPUT ROUTINE - CANT GO PAST 6661 OUJMX, CDF 0 OUJMPE=JMP . OUJMP, OUJMPE JMP OUCHA1 JMP OUCHA2 OUCHA3, TAD OUTEMP RTL RTL DCA OUTEMP TAD OUJMPP DCA OUJMP TAD OUTEMP AND OU7400 TAD I OUPOLD DCA I OUPOLD TAD OUTEMP RTL RTL AND OU7400 TAD I OUPTR DCA I OUPTR ISZ OUPTR JMP OUCOM OUCHA2, TAD OUPTR DCA OUPOLD ISZ OUPTR OUCHA1, TAD OUTEMP AND OU377 DCA I OUPTR OUCOM, CDF 10 JMP I .+1 OUCRET OUPTR, 0 OUJMPP, OUJMPE OUPOLD, 0 OUTEMP, 0 OU7400, 7400 OU377, 377 /PATCHES TO SABR TO HOOK INTO THESE WONDERFUL ROUTINES *4574 /OLD "INITR" ROUTINE AREA - 4 LOCATIONS LONG SYMPRT, 0 /INTERMEDIATE ROUTINE TO PRINT SYMBOL TABLE JMS I PRSYMP /CALL SABR'S ROUTINE CIF 0 JMP I SYMPRT /BUT RETURN TO FIELD 0 *4641 /CODE IN THIS SECTION CAN'T GO PAST 4704 FETCH, 0 /REPLACES ROUTINE IN SABR OF SAME NAME CDF CIF 0 JMS I .+2 JMP I FETCH INCHAR LDRCT, 7700 /FOR LEADER-TRAILER ROUTINE ON SAME PAGE USYMFG, 0 /ROUTINE TO GIVE UNDEFINED SYMBOL MESSAGES WHEN JMS I CTYPE /NO SYMBOL TABLE IS REQUESTED SYMXX, JMP I USYMFG /ZEROED IF CHECKING FOR UNDEFINEDS TAD SYMBOL DCA I PLLFS /SET UP SABR CELLS SO THAT ERROR ROUTINE WILL DCA LINE /PRINT THE NAME OF THE UNDEFINED SYMBOL TAD U2300 /FUDGE FOR "U" ERROR MESSAGE - UNFORTUNATELY, JMP I .+1 /THIS MESSAGE IS INSTANTLY FATAL - SERVES HIM RIGHT F1ERR PLLFS, LLFS /RANDOM LOCATION IN SABR U2300, 2300 TDUMMY, 0 /DUMMY OUTPUT ROUTINE CLA JMP I TDUMMY /AS DUMMY AS YOU CAN GET *6133 /PATCH TO SYMBOL TABLE PRINTER TO USE ABOVE JMS I 6177 /THIS REPLACES A "JMS I CTYPE" *6177 USYMFG /LUCKILY THERE WAS A LOCATION FREE *3665 /REWRITE OF OCTAL TYPEOUT ROUTINE TO DCA TEM1 /NOT KEEP INFORMATION IN THE LINK ACROSS TAD M4 /A CALL TO THE OUTPUT ROUTINE DCA TEM2 L62A, TAD TEM1 RTL RAL DCA TEM1 TAD TEM1 RAL *3702 JMP L62A *4317 /"PAUSE" PROCESSOR CLA /REPLACES CLA HLT CDF CIF 0 *4332 /PATCHES TO INITIALIZATION ROUTINE NOP /DON'T GIVE NOP /TWO USELESS CARRIAGE RETURN - LINE FEED PAIRS *4341 NOP /DON'T JMS I 4372 'CAUSE WE HAVE CHANGED 4372! *4372 /MORE "PAUSE" FUDGE SPAUSE *4715 /ALTER COUNT ON LEADER-TRAILER TAD LDRCT *561 /"END" STMT PROCESSOR CIF 0 JMP I PEND /END OF PASS 1 ENDRSM=. *565 /MORE ON "END" NOP /ELIMINATE HALT AT END OF PASS 1 *570 /STILL MORE ON "END" CDF CIF 0 JMP I SEND /END OF PASS 2 *576 /THERE ARE (WERE) TWO WHOLE FREE LOCATIONS IN THIS PAGE! SEND, SBREND PEND, PASEND *2761 /FATAL ERROR HALT IN ERROR ROUTINE CDF CIF 0 JMP I 166 /166 = LITERAL 7600 *4003 /LISTING ROUTINE SKP CLA /ALWAYS PUT LISTING ON "PUNCH" *PUNCH /POINTER TO PUNCH ROUTINE OUCHAR /POINTER TO MY PUNCH ROUTINE / *200 VERNUM JMS I .-1 / *7000 VERNUM, 0 JMS I CRLF TAD I POINT JMS I CTYPE ISZ POINT ISZ COUNT JMP .-4 JMS I CRLF DCA I TYPE JMP I VERNUM / POINT, TITLE COUNT, -5 TITLE, TEXT /SABR V18A / $ |
Added src/os8/uni/LANGUAGE/FORTRAN4/F4.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 | /4 OS/8 FORTRAN (PASS ONE) / / VERSION 4A PT 16-MAY-77 / / OS/8 FORTRAN COMPILER - PASS 1 / / BY: HANK MAURER / UPDATED BY: R.LARY + M. HURLEY / / /COPYRIGHT (C) 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. / / / VERSON=4 /CHANGES FOR MAINTENANCE RELEASE (S.R.): /1. BUMPED VERSION NUMBER TO 304 /2. INCLUDED PATCH SEQ #4 (OCT DSN) FOR SF ERROR FIX /3. INCLUDED PATCH SEQ #6 (TEMP VARS IN ASF) /4. FIXED PROBLEM IN DATA STATEMENT /5. STOPPED HALT AFTER OT ERROR BY CONVERTING LOGICAL / VARS TO INTEGER IN ARITHMETIC IF STATEMENT /6. FIXED BUG RE /A AND .RA EXTENSION /LAST MINUTE CHANGES: /7. ALLOWED PARITY INPUT /8. IGNORE NULLS ON INPUT /9. FIXED BUG RE IGNORING LAST LINE IF IN ERROR / OR IN FACT IGNORING ANY LAST LINE IF NO END STATEMENT /10. ALLOW MULTIPLE INPUT FILES / / /CHANGES FOR OS/8 V3D AND OS/78 BY P.T. / .PATCH LEVEL NOW CONTAINED IN LOCATION 1130 // // 20-DEC-2018 LHN - edited DSN patches inot this source // - DSN seq 2 M // - DSN 51.3.1 M // - Changes version to 4C // *7 LINENO, 1 /2.01/ LINE NUMBER X10, 0 /AUTO INDEX REGISTERS X11, 0 X12, 0 NEXT, FREE-1 /FREE SPACE POINTER STACK, STACKS-1 /STACK POINTER CHRPTR, 0 /INPUT BUFFER POINTER X16, 0 X17, 0 STKLVL, STACKS-1 /STACK BASE LEVEL BUCKET, 0 /FIRST CHAR OF NAME WORD1, 0 /SIX WORD LITERAL BUFFER WORD2, 0 WORD3, 0 WORD4, 0 WORD5, 0 WORD6, 0 ACO, 0 /FLOATING AC OVERFLOW WORD OP1, 0 /SEVEN WORD OPERAND FOR "NUMBER" OP2, 0 OP3, 0 OP4, 0 OP5, 0 OP6, 0 OPO, 0 CHAR, 0 /ICHAR PUTS CHARACTER HERE NOCODE, 0 /IS 1 IF CODE GENERATION OFF NCHARS, 0 /SIZE OF INPUT LINE NUMELM, 0 /NUMBER OF VARS IN TYPED LIST TEMP, 0 TEMP2, 0 DECPT, 0 /SET 1 IF NUMBER CONTAINED . ESWIT, 0 /1 FOR E 0 FOR D NDIGIT, 0 /NUMBER OF DIGITS TO RIGHT OF . HCHAR, HCOUNT /HOLLERITH GETTER ROUTINE SNUM, 0 /POINTER TO ST ENTRY FOR STMT NUMBER IFSWIT, 0 /=1 IF INSIDE LOGICAL IF EXPON, 0 /HOLDS EXPONENT FOR CONVERSION TMPFIL, 0617;2224;2216;2415 /PASS1 OUTPUT FILE 0;0;0;0 /PASS2 OUTPUT FILE DOEND, 0 /SET 1 IF THIS STMT WAS A IF, /GOTO, RETURN, PAUSE, OR STOP THSNUM, 0 /CURRENT STATEMENT NUMBER DIMNUM, 0 /LINEARIZED SS FOR EQ DPRDCT, 0 /HOLDS DIMENSION PRODUCT EQTEMP, 0 /TEMP FOR EQUIVALENCE MQ, 0 /MQ FOR 12 BIT MULTIPLY MASTER, 0 /POINTER TO MASTER IN EQUIV GROUP MNUM, 0 /LINEARIZED SS FOR MASTER NSLAVE, 0 /NUMBER OF SLAVES IN GROUP PASS2O, 0 /START OF PASS 2 OVERLAY SECTION OUFILE, 0 /START OF PASS1 OUTPUT FILE DSERES, 0 /MAGIC NUMBER PROGNM, MAIN /POINTER TO PROG NAME ARGLST, 0 /POINTER TO ARG LIST FUNCTN, 0 /0=MAIN, 1=FUNCTION, -2=SUBROUTINE SETBIT, 0 /TEMPS FOR DECLARATION SCANNER BADBIT, 0 DOINDX, 0 /POINTER TO DO INDEX FOR DO LOOPS TLTEMP, 0 /TEMP FOR TYPE ROUTINE OWTEMP, 0 /TEMP FOR OUTWRD CNT72, -102 /72 COLUMN COUNTER DPUSED, 0 /=1 IF DOUBLE HARDWARE USED VERS, VERSON /VERSION NUMBER M211, -211 P211, 211 P240, 240 IXLNP5, LINE+5 /** IXLINE, LINE IXLINM, LINE-1 STMJMP, 0 /FOR DEFINE FILE / OPCODES AND EQUS MAXHOL=100 /MAXIMUM HOLLERITH LITERAL COMREG=4600 /INTER-PASS COMMUNICATION REGION STACKS=4700 /STACK AREA NAME1=6200 /NAME AND HOLLERITH BUFFER (WAS 6400)** LINE=6300 /LINE BUFFER (WAS 6500)** INBUF=6600 /INPUT BUFFER (FIELD 1) OUBUF=7200 /OUTPUT BUFFER (DITTO) INDEVH=7200 /INPUT DEVICE HANDLER (WAS 7400)** PAUSOP=22 DPUSH=PAUSOP+1 BINRD1=DPUSH+1 /OPCODE DEFINITIONS FMTRD1=BINRD1+1 RCLOSE=FMTRD1+1 DARD1=RCLOSE+1 BINWR1=DARD1+1 FMTWR1=BINWR1+1 WCLOSE=FMTWR1+1 DAWR1=WCLOSE+1 DEFFIL=DAWR1+1 ASFDEF=DEFFIL+1 ARGSOP=ASFDEF+1 EOLCOD=ARGSOP+1 ERRCOD=EOLCOD+1 RETOPR=ERRCOD+1 REWOPR=RETOPR+1 STOROP=REWOPR+1 ENDOPR=STOROP+1 DEFLBL=ENDOPR+1 DOFINI=DEFLBL+1 ARTHIF=DOFINI+1 LIFBGN=ARTHIF+1 DOBEGN=LIFBGN+1 ENDFOP=DOBEGN+1 STOPOP=ENDFOP+1 ASNOPR=STOPOP+1 BAKOPR=ASNOPR+1 FMTOPR=BAKOPR+1 GO2OPR=FMTOPR+1 CGO2OP=GO2OPR+1 AGO2OP=CGO2OP+1 IOLMNT=AGO2OP+1 DATELM=IOLMNT+1 DREPTC=DATELM+1 DATAST=DREPTC+1 ENDELM=DATAST+1 PRGSTK=ENDELM+1 DOSTOR=PRGSTK+1 / ASSEMBLE STATEMENT PAGE RDLOOP, CIF 10 /FOR OS/8 2 PG HANDLERS** JMS I [ICHAR /GET CHAR FROM INPUT FILE JMP ENDLIN /END LINE OR CR TAD M211 /CHECK FOR TAB** SNA TAD (240-211 /CONVERT TO BLANK TAD P211 /** DCA I CHRPTR /SAVE CHAR ISZ CNT72 /PAST COLUMN 72 ? SKP JMP SKPLIN /SKIP 73 TO 80 TAD CHRPTR CIA CLL TAD (LINE+670 SZL CLA /TEST FOR TOO MANY CONTINUATIONS JMP RDLOOP JMS I [ERMSG /LINE TOO LONG 1424 SKPCOM, TAD X16 /RESTORE CHRPTR DCA CHRPTR SKPLIN, CIF 10 /** JMS I [ICHAR /SKIP REST OF LINE JMP ENDLIN CLA JMP SKPLIN ENDLIN, TAD CHRPTR /SAVE CHAR POSITION DCA X16 TAD CHRPTR DCA X10 /SAVE POSITION FOR COMMENT CHECK TAD (-102 /SET COLUMN COUNT DCA CNT72 TAD M6 DCA NCHARS GET6, CIF 10 /** JMS I [ICHAR /GET FIRST 6 CHARS JMP SHORTL /IGNORE SHORT LINES TAD M211 /IS CHAR A TAB ? ** SZA CLA JMP NOTAB /NO TAD P240 /TREAT FIRST TAB AS SIX BLANKS DCA I CHRPTR ISZ NCHARS JMP .-3 TAD P240 /FAKE CONTINUATION CHECK DCA CHAR JMP CCHECK /GO TO COMMENT CHECK SHORTL, TAD X16 /RESET CHAR POINTER DCA CHRPTR /TO IGNORE SHORT LINES JMP ENDLIN NOTAB, TAD CHAR DCA I CHRPTR ISZ NCHARS JMP GET6 /LOOP CCHECK, TAD I X10 /IS IT A COMMENT ? TAD (-303 SNA CLA JMP SKPCOM /COMMENT, SKIP REST NOCMNT, TAD CHAR /WAS SIXTH CHAR A BLANK ? TAD MMM240 SNA CLA JMP GOTLIN /YES, NO MORE CONTINUATIONS CCARD, TAD X16 /IGNORE THESE SIX CHARACTERS DCA CHRPTR JMP RDLOOP /CONTINUE WITH THIS LINE GOTLIN, TAD CHRPTR /COMPUTE -NCHARS-1 CIA TAD (LINE+4 DCA NCHARS TAD [LINE-1 /RESET CHAR POINTER DCA CHRPTR JMS I [CKCTLC /CHECK FOR CONTROL C LINE1, DCA THSNUM /ZERO CURRENT STMT NUMBER CLL CML RAR /SET LABEL DEFINE BIT JMS I [STMNUM /GO LOOK FOR LABEL JMP COMPIL /NONE THERE TAD SNUM /SAVE STATEMENT NUMBER DCA THSNUM TAD (DEFLBL /OUTPUT DEFINITION FOR THIS LABEL JMS I [OUTWRD TAD SNUM JMS I [OUTWRD /FOLLOWED BY THE LABEL ADDRESS COMPIL, JMS I [SAVECP ISZ LINENO /2.01/ PUT LINE NUMBER TAD LINENO /2.01/ INTO MQ 7421 /2.01/ CLA IAC DCA NOCODE /SET NOCODE SWITCH JMS I [ERMSG /SET UP DEFAULT ERROR MESSAGE 1513 JMS I [LEXPR /IS IT ARITHMETIC ? JMP NOTAR /NO JMS I [GETC /LOOK FOR = JMP NOTAR /NOT ARITHMETIC TAD MMM275 /= SNA CLA JMS I [EXPR /SCAN LEFT PART JMP NOTAR JMS I [ERMSG /SET MESSAGE TO ILLEGAL OPERATOR 1720 ISZ NCHARS /SHOULD BE NOTHING LEFT JMP NOTAR /IF THERE IS, ITS NOT ARITHMETIC ITSAR, JMS I [RESTCP /RESTORE TO START OF LINE DCA NOCODE /ALLON CODE JMS I [LEXPR /GET LEFT SIDE M6, -6 /V3C MUST BE HERE JMS I [GETC /SKIP = MMM240, -240 /SHOULD NEVER GET HERE CLA JMS I [EXPR /GET RIGHT SIDE MMM275, -275 /SHOULD NEVER GET HERE TAD (STOROP /OUTPUT STORE JMS I [OUTWRD JMP I [NEXTST /DO NEXT LINE NOTAR, JMS I [RESTCP /RESTART LINE DCA NOCODE JMS I [SAVECP /RESAVE CHAR POSITION TAD (CMDLST-1 DCA X10 JMP I (CMDLUP /GO SEARCH FOR KEYWORD / KEYWORD SEARCH PAGE CMDLUP, CDF 10 /TABLE IN FIELD ONE TAD I X10 /GET NEXT 2 CHARS OF KEYWORD SZA JMP CMDLP2 /NOT DONE YET CLL CMA RAL /REMOVE CHAR POS FROM STACK TAD STACK DCA STACK TAD I X10 /GET ROUTINE ADDRESS CDF DCA STMJMP JMP I STMJMP /JUMP TO THE ROUTINE CMDLP2, DCA TEMP /SAVE THE TWO CHARS CDF JMS I [GET2C /GET TWO CHARS FROM THE INPUT JMP .+4 /NOT ENOUGH CHARS, CAN'T BE THIS ONE TAD TEMP /COMPARE SNA CLA JMP CMDLUP /MATCHES, KEEP GOING JMS I [RESTCP /RESTORE CHAR POS ISZ STACK ISZ STACK /AND SAVE IT AGAIN CDF 10 TAD I X10 /FIND END OF THIS COMMAND SZA CLA JMP .-2 ISZ X10 /SKIP ROUTINE ADDRESS TAD I X10 /IS THE LIST EXHAUSTED ? SZA JMP CMDLP2 /NO, GO AGAIN BADCMD, JMS I [ERMSG /TREAT AS BAD ARITHMETIC STMT ERCODE, 0 / END OF STMT PROC NEXTLN, NEXTST, DOENDR, TAD STKLVL /RESET STACK POINTER DCA STACK JMS I [POP /LOOK FOR DO END CIA TAD THSNUM /DOES THIS LINE END A DO LOOP ? SZA CLA JMP NODOND /NO, REPLACE STACK AND COMPILE STMT TAD (DOFINI JMS I [OUTWRD /OUTPUT DO END COMMAND JMS I [POP /GET INDEX VARIABLE JMS I [OUTWRD TAD STACK /RESET STACK BASE LEVEL DCA STKLVL TAD DOEND /WAS THIS A LEGAL ENDING STMT ? SZA CLA JMS I [ERMSG 0504 /DO END ERROR DCA DOEND /KILL SWITCH JMP DOENDR NODOND, ISZ STACK /REPLACE STACK ENTRY DCA DOEND /KILL SWITCH TAD (EOLCOD /OUTPUT EOL CODE JMS I [OUTWRD DCA ERCODE /RESET ERROR CODE DCA IFSWIT /KILL IF SWITCH TAD (-6 /MOVE FIRST 6 CHARS DCA NCHARS TAD [LINE-1 /INTO START OF BUFFER DCA CHRPTR TAD I X16 DCA I CHRPTR ISZ NCHARS JMP .-3 JMP I (RDLOOP / GOTO'S GOTO, ISZ DOEND /DO END ILLEGAL JMS I [STMNUM /IS IT A SIMPLE GOTO ? JMP CMPGO2 /NO, SEE IF ITS A COMPUTED ONE TAD (GO2OPR /OUTPUT GOTO OPERATOR JMS I [OUTWRD TAD SNUM /FOLLOWED BY STMT NUMBER JMS I [OUTWRD JMP I [NEXTST CMPGO2, JMS I [GETC /LOOK FOR ( JMP BADGO2 /BAD GOTO TAD (-250 SZA CLA JMP ASNGO2 /NOT ( , MAYBE ITS AN ASSIGNED GOTO TAD STACK /SAVE STACK POSITION DCA X12 DCA TEMP /ZERO BRANCH COUNTER GO2LUP, JMS I [STMNUM /GET NEXT STMT NUMBER JMP BADGO2 /MUST BE THERE TAD SNUM JMS I [PUSH /SAVE IT TEMPORARILY ISZ TEMP /BUMP BRANCH COUNT JMS I [COMARP /LOOK FOR COMMA OR RIGHT PAREN JMP BADGO2 /NEITHER JMP GO2LUP /COMMA, GO GET NEXT LABEL JMS I [GETC /SKIP NEXT CHAR (ITS A COMMA) JMP BADGO2 CLA TAD TEMP /SAVE COUNT JMS I [PUSH /ON STACK JMS I [EXPR /COMPILE INDEX EXPR JMP I [NEXTST TAD (CGO2OP /OUTPUT COMPUTED GOTO OPERATOR JMS I [OUTWRD JMS I [POP /GET COUNT CIA DCA TEMP /SAVE COMPLEMENT TAD TEMP CIA JMS I [OUTWRD /OUTPUT COUNT TAD X12 /RESTORE STACK POINTER DCA STACK TAD I X12 /MOVE STMT NUMBERS TO OUTPUT JMS I [OUTWRD ISZ TEMP JMP .-3 JMP I [NEXTST ASNGO2, JMS I [BACK1 /PUT BACK NON ( JMS I [LEXPR /GET ASSIGN VAR JMP BADGO2 TAD (AGO2OP /OUTPUT GOTO OPERATOR JMS I [OUTWRD JMP I [NEXTST BADGO2, JMS I [ERMSG 0724 JMP I [NEXTST / I/O STATEMENTS PAGE RDWR, 0 /SUBR FOR IO STATEMENTS JMS I [CHECKC /LOOK FOR ( M250, -250 JMP BADRD JMS I [EXPR /COMPILE UNIT JMP I [BADCMD JMS I [COMARP JMP DAQUOT /LOOK FOR ' (DIRECT ACCESS I/O) JMP RDFMT /, TAD (BINRD1 /FORMATLESS READ/WRITE IOSTRT, TAD I RDWR /ADD ADJUSTOR JMS I [OUTWRD /OUTPUT BINARY READ IOLIST, JMS I [PUSH /MARK STACK JMS I [GETC /IS IT AN IMPLIED DO ? JMP ENDIOL /NO, END OF LIST TAD M250 SZA CLA JMP TRYIOE /NO, LOOK FOR IO ELEMENT JMS I [SAVECP /SAVE CHAR POS AT START OF IDO DCA IDOPAR /ZERO PAREN COUNTER FINDND, JMS I [GETNAM /GET A NAME IF THERE IS ONE XPURGE, PRGSTK /DON'T WORRY ITS A NOP JMS I [GETC /GET A CHAR JMP ENDIOL TAD M251 /IS IT A ) ? SNA JMP RPIOL /YES IAC /IS IT ( ? SNA JMP LPIOL /YES TAD (250-275 /IS IT = ? SZA CLA JMP FINDND /NONE OF THESE TAD IDOPAR /IS PAREN COUNT 0 ? SZA CLA JMP FINDND /NO, ITS FROM AN INNER LOOP JMS I [LOOKUP /THIS ELEMENT IS THE DO INDEX DCA DOINDX JMS I (DOSTUF /COMPILE THE LOOP JMP BADIOL /ERROR IN DO PARMS JMS I [CHECKC /MUST HAVE ) -251 JMP BADIOL TAD CHRPTR /SAVE CHAR POSITION DCA TEMP TAD NCHARS DCA TEMP2 JMS I [RESTCP /RESTORE TO START OF IMPLIED LOOP TAD TEMP2 /NOW SAVE POS AFTER LOOP JMS I [PUSH TAD TEMP JMS I [PUSH TAD DOINDX /AND DO INDEX JMP IOLIST LPIOL, ISZ IDOPAR /( INCREASES COUNT JMP FINDND RPIOL, CMA /) DECREASES COUNT TAD IDOPAR SMA JMP FINDND-1 CLA BADIOL, BADRD, JMS I [ERMSG /BAD IO STMT 2227 JMP I [NEXTST TRYIOE, JMS I [BACK1 /PUT BACK NON ( JMS I [LEXPR /GET IOLIST ELEMENT JMP BADRD /NOT THERE, ERROR JMS I [GETC /LOOK FOR A COMMA JMP .+4 /EOL TAD (-254 SZA JMP NOTIOL /NOT AN ELEMENT TAD (IOLMNT /OUTPUT OPCODE JMS I [OUTWRD JMP IOLIST+1 NOTIOL, TAD (254-275 /IS IT AN = (END OF IDO) SZA CLA JMP BADIOL /NO, BAD JMS I [POP /GET STUFF FROM THE STACK SNA JMP BADIOL /ZERO IS BAD DCA DOINDX /THIS IS THE INDEX JMS I [RESTCP /GET THE CHAR POSITION TAD XPURGE /OUTPUT PURGE OPERATOR JMS I [OUTWRD /BECAUSE AN EXTRA IS ON THE STK TAD (DOFINI /END LOOP JMS I [OUTWRD TAD DOINDX JMS I [OUTWRD JMS I [GETC /END OF LIST ? JMP ENDIOL TAD (-254 SZA CLA JMP BADIOL /MUST BE A COMMA JMP IOLIST+1 IDOPAR, 0 ENDIOL, JMS I [POP /IS THE MARK THERE ? SZA CLA JMP BADRD /NO, ERROR TAD I RDWR TAD (RCLOSE /END OF IO OPERATION JMS I [OUTWRD JMP I [NEXTST RDFMT, JMS I [STMNUM /LOOK FOR FMT LINE NUMBER JMP RTFMT JMS I [OUTWRD /OUTPUT PUSH COMMAND TAD SNUM /OUTPUT STMT NUMBER OF FORMAT JMS I [OUTWRD RDLIST, TAD (FMTRD1 /START OF FORMATTED READ TAD I RDWR /ADD ADJUSTOR JMS I [OUTWRD JMS I [CHECKC /LOOK FOR ) M251, -251 JMP BADRD JMP IOLIST /GO GET IO LIST RTFMT, JMS I [LEXPR /GET R.T. FORMAT JMP BADRD JMP RDLIST /GET LIST /DIRECT ACCESS I/O PAGE DAQUOT, JMS I [BACK1 JMS I [CHECKC /LOOK FOR ' -247 JMP BADRD /SYNTAX IS NO GOOD JMS I [EXPR /GET RECORD NUMBER EXPR JMP BADRD JMS I [CHECKC /LOOK FOR ) -251 JMP BADRD TAD (DARD1 /DIRECT ACCESS OPEN JMP IOSTRT FIND, JMP I [NEXTST /COOL ISN'T IT ? DFINFL, JMS I [EXPR /COMPILE UNIT JMP BADDEF /BAD DEFINE STMT DCA STMJMP /PERMIT VARIABLE FOR LOG UNIT JMS I [CHECKC /( -250 JMP BADDEF JMS I [EXPR /NUMBER OF RECORDS JMP BADDEF JMS I [CHECKC /, -254 JMP BADDEF JMS I [EXPR /RECORD SIZE JMP BADDEF JMS I [CHECKC /, -254 JMP BADDEF JMS I [CHECKC /U -325 JMP BADDEF JMS I [CHECKC /, MCOMA, -254 JMP BADDEF JMS I [GETNAM /GET INDEX VARIABLE JMP BADDEF JMS I [OUTWRD JMS I [LOOKUP JMS I [OUTWRD /OUTPUT INDEX VAR TAD (DEFFIL /OUTPUT DEFINE OPERATOR JMS I [OUTWRD JMS I [CHECKC /) -251 JMP BADDEF JMS I [GETC /ANOTHER DEFINE ? JMP I [NEXTST TAD MCOMA /, ? SNA CLA JMP DFINFL /YES, ANOTHER FILE BADDEF, JMS I [ERMSG /BAD DEFINE FILE STMT 0406 JMP I [NEXTST RESTCP, 0 /RESTORE CHAR POSITION FROM STACK JMS I [POP DCA CHRPTR JMS I [POP DCA NCHARS JMP I RESTCP INTEGE, JMS I [CHECKC /INTEGER STMT -322 JMP I [BADCMD JMS I [TYPLST 0101 0100 NOP JMP I [NEXTST PAUZE, JMS I [CHECKC /LOOK FOR E -305 JMP I [BADCMD JMS I [GETC /ANY EXPR ? JMP NOARGP /MAKE IT PAUSE 1 JMS I [BACK1 /PUT IT BACK JMS I [EXPR /GET PAUSE NUMBER XPAUZ, PAUSOP OPAUZ, TAD XPAUZ /OUTPUT PAUSE OPERATOR JMS I [OUTWRD JMP I [NEXTST NOARGP, JMS I [OUTWRD /PUSH 1.0 TAD [ONE JMS I [OUTWRD JMP OPAUZ /GO PUT OPERATOR READ, JMS I (RDWR /COMPILE READ STMT 0 WRITE, JMS I [CHECKC /LOOK FOR E -305 JMP I [BADCMD JMS I (RDWR /COMPILE WRITE BINWR1-BINRD1 CKCTLC, 6403 /CHECK FOR CONTROL C TAD (7600 KRS TAD (-7603 /^C SNA CLA KSF JMP I CKCTLC JMP I (7600 XOCTAL, DCA WORD1 /** DCA WORD2 DCA WORD3 /STATEMENT NUM LEFT THERE** DCA WORD5 DCA WORD6 XCTAL1, DCA WORD4 JMS I [DIGIT /GET NEXT DIGIT JMP ENDOXT /NO DIGITS LEFT AND [7 /THROW AWAY SOME BITS DCA TEMP JMS I (AL1 /MOVE WORD LEFT THREE JMS I (AL1 JMS I (AL1 TAD WORD4 /ADD DIGIT TO WORD4 TAD TEMP JMP XCTAL1 /LOOP ENDOXT, TAD WORD2 /PUT WORDS INTO THE LEFT PLACE DCA WORD1 TAD WORD3 DCA WORD2 TAD WORD4 DCA WORD3 JMP DATAFP /GO STUFF IT AWAY / DIMENSION, COMMON, REAL PAGE DIMENS, JMS I [IFCHEK JMS I [CHECKC /CHECK FOR "N" -316 JMP I [BADCMD /NO GOOD JMS I [TYPLST /PROCESS LIST 0000 /DIMENSION IS THE SIMPLEST CASE 0000 NOP /ERROR RETURN JMP I [NEXTST REAL, JMS I [IFCHEK /CHECK FOR INSIDE IF JMS I [TYPLST /PROCESS LIST 0102 /TYPE-REAL 0100 NOP JMP I [NEXTST COMPLE, JMS I [CHECKC /CHECK FOR "X" -330 JMP I [BADCMD JMS I [IFCHEK JMS I [TYPLST /PROCESS COMPLEX LIST 0103 0100 NOP CLA IAC /SET DP SWITCH DCA DPUSED JMP I [NEXTST COMMON, JMS I [IFCHEK /BAD INSIDE LOGICAL IF JMS I [GETC /CHECK FOR SLASH JMP I [BADCMD TAD M257 SZA CLA JMP BLANKC /MUST BE BLANK COMMON JMS I [GETNAM /GET NAME OF COMMON JMP DBLSLS /MIGHT BE // JMS I [CHECKC /LOOK FOR / M257, -257 JMP BADCOM JMS I [LOOKUP /LOOKUP COMMON NAME IAC DCA COMNAM /SAVE ADDR OF TYPE WORD CDF 10 TAD I COMNAM /LOOK AT TYPE SZA TAD (-111 /MUST BE COMMON OR UNDEF. SZA CLA JMP BADCOM TAD (111 /SET CORRECT BITS DCA I COMNAM CDF DOCOMN, JMS I [TYPLST /HANDLE LIST 4000 5460 JMP I [NEXTST TAD X12 DCA STACK /RESET STACK CDF 10 ISZ COMNAM /POINTER TO COMMON INFO DCA I NEXT /ZERO NEXT PTR WORD TAD I COMNAM /LOOK FOR END OF LIST SNA JMP EOCL /THIS IS IT DCA COMNAM /PROCEED DOWN LIST JMP .-4 EOCL, TAD NEXT /HOOK IN NEXT PART DCA I COMNAM TAD NUMELM DCA I NEXT /NUMBER IN THIS PART TAD NUMELM CIA DCA NUMELM CDF TAD I X12 /MOVE VARIABLE PTRS CDF 10 DCA I NEXT ISZ NUMELM JMP .-5 CDF JMS I [GETC /ANOTHER BLOCK ? JMP I [NEXTST /NO JMP COMMON+3 /MAYBE DBLSLS, JMS I [CHECKC /LOOK FOR SECOND SLASH -257 JMP BADCOM SKP BLANKC, JMS I [BACK1 /PUT BACK NON SLASH TAD (BLNKCN /USE BLANK COMMON DCA COMNAM JMP DOCOMN BADCOM, JMS I [ERMSG /ERROR IN COMMON STMT 0317 JMP I [NEXTST COMNAM, 0 / EXTERNAL, FORMAT, BACKSPACE EXTERN, JMS I [TYPLST /PROCESS LIST 1000 6660 NOP JMP I [NEXTST FORMAT, TAD (FMTOPR /OUTPUT FORMAT OPERATOR JMS I [OUTWRD TAD NCHARS /GET NUMBER OF WORDS CIA CLL RAR /NWORDS=(NCHARS+1)/2 FMTLUP, JMS I [OUTWRD /OUTPUT IT JMS I [GETCWB /GET THE CHARS JMP I [NEXTST /NO MORE AND [77 CLL RTL /SHIFT LEFT 6 RTL RTL DCA TEMP JMS I [GETCWB /GET OTHER HALF NOP /IGNORE END OF LINE AND [77 TAD TEMP /PUT THEM TOGETHER JMP FMTLUP /LOOP /NOTE : THE ENTIRE FORMAT INCLUDING PARENTHESIS () / IS PASSED TO THE CODE BACKSP, JMS I [CHECKC /CHECK FOR "E" -305 JMP I [BADCMD JMS I [EXPR /COMPILE UNIT EXPR JMP I [BADCMD TAD (BAKOPR /OUTPUT BACKSPACE OPERATOR JMS I [OUTWRD JMP I [NEXTST / OUTPUT ROUTINE PAGE OUPTR, OUBUF OCOUNT, -401 OUTWRD, 0 /OUTPUT ROUTINE DCA OWTEMP /SAVE WORD TAD NOCODE SZA CLA JMP I OUTWRD /COOL IT IF NOCODE ISZ OCOUNT /TEST FOR BUFFER FULL JMP NOWRIT /STILL SOME ROOM JMS OUDUMP /DUMP THE BUFFER TAD OUBLOK-1 /RESET BUFFER PARAMETERS DCA OUPTR TAD (-400 DCA OCOUNT NOWRIT, TAD OWTEMP /PUT WORD CDF 10 DCA I OUPTR /INTO BUFFER CDF ISZ OUPTR /MOVE POINTER JMP I OUTWRD OULEN, 0 /NUMBER OF BLOCKS LEFT IN HOLE OUDUMP, 0 /DUMP OUT BUFFER TAD OULEN /ANY ROOM LEFT ? SNA JMP OUERR IAC DCA OULEN JMS I (7607 /CALL SYSTEM HANDLER 4210 OUBUF OUBLOK, 0 JMP OUERR ISZ OUBLOK /INCREMENT BLOCK NUMBER ISZ FILSIZ /ALSO SIZE OF FILE JMP I OUDUMP OUERR, JMS I [MESSAG /ERROR IN WRITING OR OPENING FILE 317 306 / END PASS ONE XEND, JMS I [CHECKC /LOOK FOR "D" -304 JMP I [BADCMD JMS I [GETC /END MUST BE ALL JMP ENDX L7700, SMA CLA /NEVER SKIPS JMP I [BADCMD ENDX, CDF 0 TAD (ENDOPR /OUTPUT END OF FILE JMS I [OUTWRD JMS OUDUMP /DUMP BUFFER CIF 10 JMS I L7700 /LOCK MONITOR IN 10 CIF 10 CLA IAC JMS I L200 /CLOSE TEMP FILE 4 TMPFIL FILSIZ, 0 JMP OUERR CIF 10 CLA IAC JMS I L200 /OPEN PASS 2 OUTPUT FILE L3, 3 OBLK, TMPFIL+4 /STARTING BLOCK 0 /SIZE JMP OUERR /ERROR TAD (COMREG-1 /SAVE IMPORTANT STUFF DCA X10 TAD NEXT /ADDR OF FREE SPACE DCA I X10 TAD STKLVL /STACK LEVEL DCA I X10 TAD OUFILE /START OF PASS1 OUTPUT FILE DCA I X10 TAD FILSIZ /ALSO THE SIZE DCA I X10 TAD PASS2O /START OF PASS2 OVERLAY DCA I X10 TAD OBLK /START OF PASS2 OUTPUT FILE DCA I X10 TAD OBLK+1 /AND MAX SIZE DCA I X10 TAD PROGNM /POINTER TO PROG NAME DCA I X10 TAD ARGLST /AND ARG LIST DCA I X10 TAD FUNCTN /AND PROG SWITCH DCA I X10 TAD DPUSED /STORE THE DP SWITCH DCA I X10 TAD VERS /AND THE VERSION NUMBER DCA I X10 CIF 10 JMS I L200 /CHAIN TO PASS TWO 6 PASS2B, 0 /FILLED BY ONCE ONLY CODE FOR PASS 1 RETURN, TAD (RETOPR /OUTPUT RETURN CODE JMS I [OUTWRD ISZ DOEND /DO END ILLEGAL HERE JMP I [NEXTST COMARP, 0 /LOOK FOR COMMA OR RIGHT PAREN JMS I [GETC JMP I COMARP TAD [-254 /COMMA ? SNA JMP .+5 TAD L3 /RIGHT PAREN ? SZA CLA JMP I COMARP ISZ COMARP ISZ COMARP /COMMA INCR ONCE JMP I COMARP LOGICA, JMS I [CHECKC /LOOK FOR L -314 JMP I [BADCMD /NO GOOD JMS I [TYPLST /PROCESS LIST 0105 0100 L200, 0200 /NOP JMP I [NEXTST / EQUIVALENCE (UGH!) PAGE EQUIV, JMS I [IFCHEK /BAD WITH IF JMS I [CHECKC /LOOK FOR "E" -305 JMP I [BADCMD EQVLUP, JMS I [CHECKC /LOOK FOR ( -250 JMP BADEQU TAD STACK /SAVE STACK POS DCA X17 DCA NSLAVE /NUMBER OF SLAVES = 0 JMS I [GETSS /GET THE MASTER JMP BADEQU SVMSTR, CDF 10 /1.03/ CHECK FOR ALREADY EQUIVALENCED TAD I TEMP2 /1.03/ CDF /1.03/ AND (200 /1.03/ (AS A SLAVE) SZA CLA /1.03/ JMP DOFUNY /3.01/BACK UP TO ITS MASTER TAD TEMP2 /SAVE THE MASTER TYPE ADDRESS DCA MASTER DCA SFUDGE /3.01/CLEAR OFFSET FUDGE TAD DIMNUM /SAVE THE MASTER SUBSCRIPT DCA MNUM GETSLV, JMS I [COMARP /LOOK FOR , OR ) JMP BADEQU JMP DOSLAV /, TAD NSLAVE /COMPLEMENT THE NUMBER OF SLAVES SNA JMP ENDGRP /NO SLAVES CIA DCA NSLAVE TAD X17 /RESTACK THE STORE DCA STACK EQLOOP, TAD I X17 /GET NEXT SUBSCRIPT NUMBER DCA TEMP TAD I X17 /AND NEXT TYPE WORD ADDRESS DCA TEMP2 CDF 10 TAD I TEMP2 /LOOK AT TYPE WORD TAD (200 /SET EQUIVALENCE BIT DCA I TEMP2 ISZ TEMP2 /MOVE TO EQUIVALENCE/DIMENSION PTR TAD I TEMP2 /PROPAGATE DIMENSION POINTER DCA I NEXT /TO EQUIVALENCE INFO BLOCK TAD NEXT /NOW STORE EQ INFO BLK ADDRESS DCA I TEMP2 /INTO EQ-DIM POINTER WORD CLA CMA TAD MASTER /STORE S.T. ADDR OF MASTER DCA I NEXT /INTO THE EQUIVALENCE BLOCK TAD MNUM /OUTPUT NUMBERS DCA I NEXT TAD TEMP DCA I NEXT CDF ISZ NSLAVE /ANY MORE SLAVES ? JMP EQLOOP /YES, EQUIVALENCE NOT YET ATTAINED ENDGRP, JMS I [GETC /FINI, ALL VARIABLES ARE CREATED JMP I [NEXTST /EQUIVALENCED TAD (-254 /IS NEXT CHAR A COMMA ? SNA CLA JMP EQVLUP /IF YES, DO NEXT GROUP BADEQU, JMS I [ERMSG /SYNTAX ERROR IN EQUIVALENCE 2123 JMP I [NEXTST EQUCOM, JMS I [ERMSG /MULTIPLE LEVELS OF EQUIVALENCE OR 2114 /MORE THAN ONE COMMON VARIABLE JMP I [NEXTST DOSLAV, ISZ NSLAVE /ANOTHER SLAVE VARIABLE JMS I [GETSS /GET THE GOODS JMP BADEQU CDF 10 TAD I TEMP2 /LOOK AT THE TYPE SMA CLA JMP SVSLAV /IT ISN'T IN COMMON TAD I MASTER /LOOK AT THE MASTERS TYPE SPA CLA JMP EQUCOM /MASTER IS IN COMMON TOO .. BAD CDF TAD MNUM /SAVE THE MAGIC NUMBER JMS I [PUSH TAD MASTER JMS I [PUSH /AND THE S.T. ADDRESS JMP SVMSTR /NOW GO MAKE THE NEW ONE MASTER SVSLAV, TAD I TEMP2 /1.03/ PREVIOUSLY EQUIVALENCED ? AND (200 /1.03/ SZA CLA /1.03/ JMP EQUCOM /1.03/ YES, ERROR TAD DIMNUM /SAVE THE NEW SLAVE TAD SFUDGE /3.01/ADD OFFSET FUDGE CDF JMS I [PUSH TAD TEMP2 JMS I [PUSH JMP GETSLV /AND GO GET THE NEXT SLAVE SFUDGE, 0 /ROUTINE TO HANDLE TRIVIAL CASES OF EQUIVALENCE CHAINING /THIS WHOLE PAGE IS 3.01 DOFUNY, CLA IAC TAD TEMP2 DCA MASTER /GET POINTER TO EQUIVALENCE BLOCK CDF 10 TAD I MASTER DCA X12 CLA IAC TAD I X12 /GET ADDRESS OF "REAL" MASTER'S DCA MASTER /TYPE WORD TAD I X12 TAD DIMNUM DCA MNUM /OFFSETS ARE ADDITIVE TAD I X12 DCA SFUDGE /SAVE OTHER HALF OF OFFSET TO ADD CDF /TO SLAVES JMP GETSLV / (PRAY) PAGE / EQUIVALENCE (UGH!) O1420, 1420 /1.03/ MUST BE FIRST ON PAGE GETSS, 0 /GET THE LINEARIZED SUBSCRIPT DCA DIMNUM JMS I [GETNAM /GET THE VARIABLE JMP I GETSS JMS I [LOOKUP IAC /ADDRESS OF TYPE WORD DCA TEMP2 CDF 10 TAD I TEMP2 CDF O200, AND O1420 /1.03/ EXT, STMTFUN, SUBARG ? SZA CLA JMP I GETSS TAD STACK DCA X12 /SAVE STACK POSITION DCA TEMP /ZERO NUMBER OF DIMENSIONS TAD TEMP2 IAC DCA EQTEMP /ADDRESS OF EQ-DIM POINTER JMS I [GETC JMP I GETSS TAD (-250 /LOOK FOR ( SNA CLA JMP DIMGET-1 /OK JMS I [BACK1 JMP RGETSS DCA DIMNUM /DATA CALLS GETSS WITH AC = 7777 DIMGET, JMS I (SMLNUM /GET A SUBSCRIPT CLA CMA TAD EXPON /SS-1 JMS I [PUSH /SAVE SS ISZ TEMP /BUMP COUNT OF SS JMS I [COMARP /LOOK FOR , OR ) JMP I GETSS JMP DIMGET /, CLA IAC /) DCA DPRDCT /SET DIMENSION PRODUCT TO 1 TAD X12 /RESTORE STACK POSITION DCA STACK TAD TEMP /COMPLEMENT NUMBER OF SS CIA DCA TEMP CDF 10 CLL CML RTR /2000 AND I TEMP2 /HAS VARIABLE BEEN DIMENSIONED ? SNA CLA JMP I GETSS /NO, THATS BAD TAD I EQTEMP /GET ADDRESS OF DIMENSION BLOCK DCA EQTEMP TAD I EQTEMP /IS NUMBER OF DIMENSIONS TAD TEMP /EQUAL TO NUMBER OF SUBSCRIPTS ? SZA CLA JMP TRY1SS /1.03/ SEE IF ITS ONE SUBSCRIPT CLA CLL IAC /+1 V3C // // TAD I EQTEMP /+ NUMBER OF DIMENSIONS // TAD EQTEMP /+ ADDRESS OF COUNT WORD // TAD PAT11 //DSN SEQ. 2 M JMP PAT10 // // DCA EQTEMP /GIVES ADDRESS OF NEXT TO LAST DIMENSION LINEAR, CDF TAD I X12 /GET NEXT SS - 1 DCA MQ TAD DPRDCT /MULTIPLY BY THE DIMENSION PRODUCT JMS MUL12 /WHERE D.P. = 1,D1,D1D2,D1D2D3,... TAD DIMNUM /ACCUMULATE THE SUM DCA DIMNUM CDF 10 TAD I EQTEMP /ADDR OF LITERAL IAC DCA X11 /WORKING POINTER TO VALUE TAD I X11 /GET DIMENSION INTO FAC DCA WORD1 TAD I X11 DCA WORD2 TAD I X11 DCA WORD3 CDF JMS I [FIXNUM /GO FIX IT DCA MQ TAD DPRDCT /OF THE D.P. SERIES (ABOVE) JMS MUL12 DCA DPRDCT CLA IAC /V3C BUMP POSITION POINTER TAD EQTEMP DCA EQTEMP ISZ TEMP /ANY MORE SS ? JMP LINEAR /YES RGETSS, ISZ GETSS JMP I GETSS TRY1SS, CLA IAC /1.03/ TAD TEMP /1.03/ ONLY ONE SS ? SZA CLA /1.03/ JMP I GETSS /1.03/ MORE, THATS NO GOOD CDF /1.03/ TAD I X12 /1.03/ GET THE SUBSCRIPT DCA DIMNUM /1.03/ AND RETURN IT JMP RGETSS /1.03/ MUL12, 0 /12 BIT UNSIGNED MULTIPLY DCA OP2 /SAVE OPERAND TAD (-15 /SET SHIFT COUNT DCA SC JMP STMUL M12LUP, TAD AC SNL JMP .+3 CLL TAD OP2 RAR STMUL, DCA AC TAD MQ RAR DCA MQ ISZ SC JMP M12LUP TAD MQ /RETURN VALUE JMP I MUL12 AC=OP3 SC=OP4 // // DSN seq. 2 M // PAT10, ISZ EQTEMP // NOP // TAD EQTEMP // JMP LINEAR-1 // PAT11, 2 // // / IF STATEMENTS PAGE IF, JMS I [EXPR /COMPILE CONDITION EXPRESSION JMP I [BADCMD JMS I [STMNUM /IS IT ARITHMETIC IF ? JMP LOGIF TAD (ARTHIF /START IF COMMAND JMS I [OUTWRD CLL CMA RTL DCA TEMP ISZ DOEND /DO END ILLEGAL HERE JMP IFLABL /GET IF LABELS IFLOOP, JMS I [CHECKC /LOOK FOR , -254 JMP I [NEXTST JMS I [STMNUM /GET NEXT STMT NUMBER JMP BADIF IFLABL, TAD SNUM /OUTPUT LABEL JMS I [OUTWRD ISZ TEMP JMP IFLOOP JMP I [NEXTST LOGIF, JMS IFCHEK /IF()IF()... NOT LEGAL ISZ IFSWIT /CLEAR IF SWITCH TAD (LIFBGN /START LOGICAL IF JMS I [OUTWRD JMP I (COMPIL /COMPILE THE STATEMENT DOSWT, IFCHEK, 0 /CHECK IF SWITCH TAD IFSWIT SNA CLA JMP I IFCHEK BADIF, JMS I [ERMSG 1111 JMP I [NEXTST / CALL STMT CALL, JMS I [SAVECP /SAVE CHAR POS JMS I [GETNAM /GET SUBROUTINE NAME JMP BADCAL /NO NAME HERE IS BAD JMS I [LOOKUP /GET ADDRESS OF TYPE WORD IAC DCA TEMP CDF 10 TAD I TEMP /LOOK AT TYPE AND (6640 /ANYTHING BUT EXT OR ARG ? SZA CLA JMP BADCAL /YES, BAD TAD I TEMP /SET EXT BIT AND (137 /LEAVE TYPE AND ARG BITS TAD (1000 DCA I TEMP CDF JMS I [RESTCP /RESTORE CHAR POS CLA IAC /SIGNAL THAT THIS IS A CALL JMS I [LEXPR /COMPILE IT XSTORE, DOSTOR /DON'T WORRY VIRGINIA, ITS A NOP TAD OWTEMP /WHAT WAS THE LAST THING OUT ? CLL TAD (-63 /IF LESS THAN 63 SNL CLA JMP I [NEXTST /IT WAS AN ARG COUNT TAD [ARGSOP /OTHERWISE IT WAS AN ARG LESS CALL JMS I [OUTWRD /SO TELL PASS 2 ABOUT IT JMS I [OUTWRD JMP I [NEXTST BADCAL, JMS I [ERMSG 2316 JMP I [NEXTST / DO DAH, DO DAH DO, JMS I [IFCHEK /IF(...)DO IS ILLEGAL JMS I [STMNUM /LOOK FOR ENDING STMT NUMBER JMP I [BADCMD JMS I [GETNAM /LOOKUP INDEX VARIABLE JMP I [BADCMD JMS I [LOOKUP DCA DOINDX JMS I [CHECKC /LOOK FOR = -275 JMP I [BADCMD ISZ DOEND /CAN'T END DO LOOP ON A DO JMS DOSTUF /GET DO PARAMETERS JMP BADDO TAD DOINDX /PUSH DO INDEX JMS I [PUSH TAD SNUM /PUSH ENDING STMT NUMBER JMS I [PUSH TAD STACK DCA STKLVL /SAVE NEW STACK BASE JMP I [NEXTST DOSTUF, 0 /SUBR FOR DO LOOP STUFF JMS I [OUTWRD /OUTPUT DO INDEX TAD DOINDX JMS I [OUTWRD JMS I [EXPR /GET EXPR FOR INITIAL VALUE JMP I DOSTUF TAD XSTORE /YES JMS I [OUTWRD JMS I [CHECKC /LOOK FOR COMMA N254, -254 JMP I DOSTUF JMS I [EXPR /GET EXPR FOR FINAL VALUE JMP I DOSTUF JMS I [GETC /LOOK FOR A COMMA JMP STEP1 /USE STEP OF 1 TAD N254 SZA CLA JMP STEP1-1 JMS I [EXPR /GET EXPR FOR STEP JMP I DOSTUF DORET, ISZ DOSTUF TAD (DOBEGN /DO BEGIN OPERATOR JMS I [OUTWRD JMP I DOSTUF JMS I [BACK1 /PUT BACK NON , (OFFICER BELOW LT.) STEP1, JMS I [OUTWRD /OUTPUT A PUSH 1.0 TAD (ONE JMS I [OUTWRD JMP DORET /FINISH DO STUFF BADDO, JMS I [ERMSG /BAD DO COMMAND 0417 JMP I [NEXTST BDERR, JMS I [ERMSG /ILLEGAL IN BLOCK DATA 0223 JMP I [NEXTST / TYPE STATEMENT SUBROUTINE PAGE TYPLST, 0 /HANDLE LIST FOR TYPE DELL TAD STACK DCA X12 /SAVE STACK POINTER DCA NUMELM TAD I TYPLST /GET SET BITS DCA SETBIT ISZ TYPLST TAD I TYPLST /AND ILLEGAL BITS DCA BADBIT ISZ TYPLST LSTLUP, JMS I [GETNAM /GET VARIABLE JMP BADLST JMS I [LOOKUP /S.T. SEARCH DCA TLTEMP /SAVE VAR ADDRESS TAD TLTEMP /PUT IT ON THE STACK ISZ TLTEMP /NOW POINT TO TYPE WORD JMS I [PUSH /INCREMENT NUMBER ISZ NUMELM /INCREMENT NUMBER CDF 10 TAD I TLTEMP /COMPARE TYPES AND BADBIT /CHECK FOR ILLEGAL BITS SZA CLA JMP TYPAGN /ATTEMPT TO RE-TYPE TAD SETBIT /GET SET BITS CMA /GENERATE MASK AND I TLTEMP TAD SETBIT /DO THE SET DCA I TLTEMP /BUT NOT DIMENSION BIT CDF GETDIM, JMS I [GETC JMP EOL TAD (-250 /LOOK FOR ( SZA JMP NOTDIM /NOT DIMENSIONED CLA IAC /INITIALIZE MAGIC NUMBER DCA DSERES CLA IAC DCA DPRDCT /AND DIMENSION PRODUCT TAD STACK DCA X17 /SAVE STACK POINTER DCA TEMP2 /DIMENSION COUNT=0 JMP I (DIMLUP /GET DIMENSIONS PUTDIM, TAD X17 DCA STACK /RESTORE STACK CDF 10 TAD (3400 /DIM, EXT, SF ? AND I TLTEMP SZA CLA JMP DIMAGN /ATTEMPT TP RE-DIMENSION CLL CML RTR TAD I TLTEMP /SET DIMENSION BIT DCA I TLTEMP ISZ TLTEMP TAD TEMP2 /NUMBER OF DIMS. DCA I NEXT TAD I TLTEMP /GET EQUIVALENCE POINTER SZA DCA TLTEMP TAD NEXT /STORE POINTER TO DCA I TLTEMP /DIMENSION INFORMATION TAD DPRDCT /SAVE DIM PRODUCT DCA I NEXT TAD DSERES /AND MAGIC NUMBER DCA I NEXT DCA I NEXT /ZERO MAGIC LITERAL POINTER TAD TEMP2 CIA DCA TEMP2 /LEAVE LAST DIM CDF MOVDIM, TAD I X17 /1.03/ GET THE DIMENSION CDF 10 /1.03/ DCA I NEXT /1.03/ INTO THE DIMENSION INFO BLOCK CDF /1.03/ ISZ TEMP2 /1.03/ JMP MOVDIM /1.03/ NEXTEL, JMS I [GETC /LOOK FOR , JMP TLRETN TAD (-254 SNA CLA JMP LSTLUP /OK, GET NEXT MEMBER ENDLST, JMS I [BACK1 ISZ TYPLST JMP I TYPLST BADDIM, JMS I [ERMSG /DIMENSION ERROR 0204 JMP I TYPLST BADLST, JMS I [ERMSG /ERROR IN LIST 2404 JMP I TYPLST TYPAGN, JMS I [ERMSG 2224 /RE-TYPE JMP GETDIM DIMAGN, JMS I [ERMSG /ATTEMPT TO RE DIMENSION 2204 JMP NEXTEL NOTDIM, TAD (250-254 /IS IT A COMMA? SZA CLA JMP ENDLST JMP LSTLUP /GET NEXT ELEMENT EOL, TLRETN, ISZ TYPLST JMP I TYPLST /TAKE OK EXIT ENDFIL, JMS I [CHECKC /LOOK FOR "E" -305 JMP I [BADCMD JMS I [EXPR /COMPILE UNIT JMP I [BADCMD TAD (ENDFOP /OUTPUT ENDFILE OPERATOR JMS I [OUTWRD JMP I [NEXTST DOUBLE, JMS I [CHECKC /LOOK FOR N -316 JMP I [BADCMD JMS I [IFCHEK /NOT ON AN IF JMS I [TYPLST /PROCESS LIST 0104 0100 NOP CLA IAC /SET THE DP SWITCH DCA DPUSED JMP I [NEXTST / SYMBOL TABLE LOOKERUPPER PAGE LOOKUP, 0 /SYMBOL TABLE LOOKUP FOR VARIABLE ENTRY TAD NOCODE /IS THIS IN NOCODE MODE ? SZA CLA JMP I LOOKUP /YES, DO NOTHING TAD BUCKET TAD (ALIST-1 /GET START OF CORRECT BUCKET CDF 10 LOOK, DCA OLDN3 /SAVE ADDR OF PREVIOUS ENTRY TAD I OLDN3 /GET ADDR OF NEXT ENTRY SNA JMP HOOKIN /NO NEXT ENTRY, ATTACH NEW ENTRY TAD (2 /SKIP OVER TYPE AND DIM POINTER DCA X10 TAD (NAME1 DCA PNAME /SETUP POINTER TO NAME CDF CHKNAM, TAD I PNAME /GET WORD NAME CIA CLL CDF 10 TAD I X10 /COMPARE WITH THIS ENTRY SZA CLA JMP NOTSAM /DIFFERENT CDF TAD I PNAME AND [77 /WAS THIS THE END OF NAME? ISZ PNAME SZA CLA JMP CHKNAM /NO, KEEP COMPARING CDF 10 RLOOKU, TAD I OLDN3 /GET ADDR OF START OF ENTRY CDF /AND RETURN IT IN THE AC JMP I LOOKUP /RETURN ADDR OF SYMBOL NOTSAM, SZL JMP HOOKIN /NEW SYMBOL <CURRENT ONE TAD I OLDN3 JMP LOOK /CONTINUE SEARCH HOOKIN, TAD I OLDN3 /HOOK NEW ENTRY INTO LIST DCA I NEXT TAD NEXT DCA I OLDN3 DCA I NEXT /ZERO TYPE WORD DCA I NEXT /ZERO EQUIVALENCE/DIMENSION POINTER TAD (NAME1 /PREPARE TO STICK IN THE NAME DCA PNAME CDF ENTERN, TAD I PNAME /MOVE NAME INTO S.T. CDF 10 DCA I NEXT CDF TAD I PNAME ISZ PNAME /END OF NAME? AND [77 SZA CLA JMP ENTERN /NO, KEEP GOING CDF 10 STCHEK, TAD NEXT /CHECK FOR S.T. OVERFLOW CIA CLL TAD (4740 /5000 STARTS PASS2 SKELETON TABLES SZL CLA JMP RLOOKU CDF JMS I [ERMSG /S.T. FULL 2324 JMP I (ENDX /TREAT AS END OF INPUT OLDN3, 0 /ADDR OF PREVIOUS ENTRY N3SIZE, 0 /SIZE OF ENTRY LTEMP, PNAME, /POINTER TO NAME BUFFER LUKUP2, 0 /LOOKUP FOR FIXED LENGTH SYMBOLS TAD I LUKUP2 /GET THE BUCKET START DCA OLDN3 /SAVE IT AS THE PREVIOUS ENTRY ISZ LUKUP2 TAD I LUKUP2 /GET THE ENTRY SIZE ISZ LUKUP2 DCA N3SIZE TAD LUKUP2 /SAVE RETURN ADDR DCA LOOKUP TAD NOCODE /IS CODE GENERATION OFF ? SZA CLA JMP I LOOKUP /YES, JUST RETURN CDF 10 LOOK2, TAD I OLDN3 /GET ADDR OF NEXT ENTRY SNA JMP HOKIN2 /IF 0 ITS END OF LIST IAC DCA X10 /START OF VALUE INFO TAD (WORD1-1 /SETUP POINTER TO PROTOTYPE DCA X11 TAD N3SIZE /AND TEMP OF ENTRY SIZE DCA LTEMP CHKVAL, CDF TAD I X11 CIA CLL /COMPARE THIS WORD OF THE VALUE CDF 10 TAD I X10 SZA CLA JMP NOTSM2 /NOT THIS ONE ISZ LTEMP /INCR SIZE COUNT JMP CHKVAL /MORE STUFF JMP RLOOKU /RETURN WITH THE GOODS NOTSM2, SZL JMP HOKIN2 /NEW SYMBOL < CURRENT ONE TAD I OLDN3 /CONTINUE SEARCH DCA OLDN3 JMP LOOK2 HOKIN2, TAD I OLDN3 /HOOK NEW ENTRY INTO LIST DCA I NEXT TAD NEXT DCA I OLDN3 TAD (WORD1-1 /PREPARE TO STICK IN THE VALUE DCA X11 DCA I NEXT /ZERO TYPE WORD CDF ENTERV, TAD I X11 /MOVE VALUE INTO S.T. CDF 10 DCA I NEXT ISZ N3SIZE /INCR SIZE COUNT JMP ENTERV-1 JMP STCHEK /STORE TYPE AND CHECK FOR OVERFLOW STOP, TAD (STOPOP /OUTPUT STOP OPERATOR JMS I [OUTWRD ISZ DOEND /DO ILLEGAL ON STOP JMP I [NEXTST / EXPRESSION ANALYZER PAGE EXPR, 0 /POLISHIZE EXPRESSION TAD EXPR JMS I [PUSH /SAVE RETURN ADDR JMS I [PUSH /MARK STACK UNOPR, JMS I [GETC /LOOK FOR UNARY OPERATOR JMP MISARG /THERE HAS TO BE AN OPERAND TAD (-253 /UNARY+(NOP) SNA JMP UNOPR TAD (253-255 /UNARY- SNA JMP UMINUS TAD (255-256 /.NOT. SZA CLA JMP OPRAND DCA BUCKET /FOR CKNOT JMS I (TRUFAL /.TRUE. OR .FALSE. ? JMP CKNOT /NEITHER, IS IT >.NOT. JMP .+3 /.TRUE. TAD (NOTOPR /FALSE=.NOT.TRUE JMS I [PUSH JMS I [OUTWRD TAD (TRUE JMS I [OUTWRD JMP I (NOSS CKNOT, TAD BUCKET TAD (-16 SZA CLA JMP OPRAND /MIGHT BE LITERAL .XXXXXX TAD (NOTOPR /PUSH .NOT. OPERATOR JMS I [PUSH JMP UNOPR UMINUS, TAD (UMOPR /PUSH UNARY MINUS JMS I [PUSH JMP UNOPR OPRAND, JMS I [BACK1 /PUT BACK NON UNARY OPERATOR JMS I [GETNAM /LOOK FOR VARIABLE REFERENCE JMP NOTVAR /NOPE. JMS I [LOOKUP /SYMBOL TABLE SEARCH JMP I [OPR8R /GO OUTPUT PUSH-VAR NOTVAR, JMS I [NUMBER /LOOK FOR A LITERAL JMP NOTNUM /NO KIND OF NUMBER JMP HOLCHK /INTEGER JMP DPLIT /DOUBLE PRECISION FPLIT, JMS I [LUKUP2 /FLOATING, ENTER INTO TABLE FPLIST -3 JMP I [OPR8RL /PUSH VARIABLE, NO SUBSCRIPTS DPLIT, JMS I [LUKUP2 /DOUBLE-PREC., ENTER IN TABLE DPLIST -6 JMP I [OPR8RL HOLCHK, JMS I [GETC /IS THIS HOLLERITH? JMP .+5 TAD (-310 SNA CLA JMP I (HFIELD /YES JMS I [BACK1 JMS I [LUKUP2 /FIND THE ENTRY INTLST -3 JMP I [OPR8RL NOTNUM, JMS I [GETC /LOOK FOR COMPLEX LITERAL JMP MISARG /MISSING OPERAND TAD (-250 /OPEN PAREN? SZA JMP QUOTE /GO LOOK FOR A STRING JMS I [SAVECP /SAVE CHAR POSITION JMS I [NUMBER /GET REAL PART JMP I (NCMPLX /NO NUMBER SKP /INTEGER-OK JMP I (NCMPLX /DOUBLE-NOT LEGAL FOR COMPLEX JMS I [CHECKC /LOOK FOR , -254 JMP I (NCMPLX /NO, CAN'T BE COMPLEX LIT. TAD WORD1 /SAVE REAL PART DCA TEMP TAD WORD2 DCA TEMP2 TAD WORD3 DCA CHAR JMS I [NUMBER /GET IMAGINARY PART JMP BADCL /NOT THERE, BAD SKP /I JMP BADCL /D-BAD JMS I [CHECKC /LOOK FOR ) -251 JMP BADCL /NO ) BAD TAD WORD1 /PUT IMAGINARY PART DCA WORD4 TAD WORD2 /INTO SECOND AHLF DCA WORD5 TAD WORD3 /OF COMPLEX LITERAL DCA WORD6 TAD TEMP /NOW RESTORE REAL PART DCA WORD1 TAD TEMP2 DCA WORD2 TAD CHAR DCA WORD3 CLL CMA RAL /REMOVE CHAR POS FROM STACK TAD STACK /SINCE OTHERWISE IT GOES OUT DCA STACK /AS CODE JMS I [LUKUP2 /WHICH WE WILL NOW SEARCH CMPLST /USE COMPLEX LIST -6 JMP I [OPR8RL BADCL, JMS I [ERMSG /BAD COMPLEX LITERAL 0314 JMP I [BADEXP MISARG, JMS I [ERMSG /MISSING OPERAND 1517 JMP I [BADEXP / EXPRESSION ANALYZER PAGE HQUOTE, 0 /SUBR FOR QUOTE STRINGS JMS I [GETCWB /GET CHAR JMP BADH TAD [-247 /IS IT ' SZA JMP NOTQ2 /NO JMS I [GETCWB JMP LUHOL TAD [-247 /LOOK FOR '' SNA CLA JMP NOTQ2 /REPLACE '' BY ' JMS I [BACK1 /ITS END OF STRING JMP LUHOL NOTQ2, TAD [247 /RESTORE CHAR AND [77 JMP I HQUOTE HFIELD, JMS I [FIXNUM /INTEGERIZE NUMBER SNA JMP BADH /ZERO IS BAD CMA CLL DCA TEMP TAD (HCOUNT /SET SUBR POINTER DOHOL, DCA HCHAR TAD (-MAXHOL /SET COUNTER FOR MAX DCA HOLCTR TAD (NAME1 /SET UP NAME POINTER DCA TEMP2 PAKHOL, DCA I TEMP2 /PACK HOLLERITH STRING JMS I HCHAR CLL RTL RTL RTL DCA I TEMP2 JMS I HCHAR TAD I TEMP2 DCA I TEMP2 ISZ TEMP2 ISZ HOLCTR /CHECK FOR TOO MANY JMP PAKHOL BADH, JMS I [ERMSG /BAD OR TOO BIG HOLLERITH FIELD 1017 JMP I [BADEXP LUHOL, TAD (33 /LOOK UP THIS LITERAL DCA BUCKET JMS I [LOOKUP JMP I [OPR8RL HCOUNT, 0 ISZ TEMP /CHECK COUNT SKP JMP LUHOL /EXPIRED JMS I [GETCWB /GET CHAR JMP BADH AND [77 /6-BIT IZE IT JMP I HCOUNT HOLCTR, 0 /COUNTER FOR HOLLERITH FIELDS NCMPLX, JMS I [RESTCP /NOT COMPLEX LITERAL JMS I [EXPR /MUST BE SUB EXPRESSION JMP BADEXP JMS I [GETC /LOOK FOR ) JMP PARMM TAD (-251 SNA CLA JMP I (NOSS /NO SUBSCRIPT LEGAL AFTER SUB EXPR PARMM, JMS I [ERMSG /MISSING ) 1515 BADEXP, JMS I [POP /BAD EXPRESSION, SZA CLA JMP BADEXP /LOOK FOR STACK MARKER JMS I [POP DCA TEMP /RETURN ADDR. JMP I TEMP JMS I [BACK1 /PUT BACK TEMINAL CHAR ENDEXP, JMS I [POP /GET NEXT THING FROM STACK SNA JMP EXPDUN /IF ZERO, FINISH IAC /GET ADDR OF OPERATION NUMBER DCA TEMP TAD I TEMP /GET OPERATOR VALUE JMS I [OUTWRD /OUTPUT OPERATOR XXXXXX JMP ENDEXP /LOOP EXPDUN, JMS I [POP /GET RETURN ADDR IAC DCA TEMP JMP I TEMP LETTER, 0 /GET A LETTER JMS I [GETC JMP I LETTER TAD (-301 SPA JMP NLETR TAD (301-333 SMA JMP NLETR TAD (33 ISZ LETTER JMP I LETTER NLETR, JMS I [BACK1 JMP I LETTER QUOTE, TAD (250-247 /IS IT ' SZA CLA //was SZA DSN 51.3.1 M JMP MISARG /NO, OPERAND IS MISSING TAD (HQUOTE /SET SUBR POINTER JMP DOHOL CHECKC, 0 /CHECK FOR A SINGLE CHAR TAD I CHECKC /GET THE CHAR DCA CCTEMP ISZ CHECKC /SKIP PAST THE CHAR JMS I [GETC /GET CHAR FROM INPUT JMP I CHECKC /DIDN'T MAKE IT TAD CCTEMP /IS THIS IT ? SNA CLA ISZ CHECKC /YES JMP I CHECKC CCTEMP, 0 / EXPRESSION ANALYZER PAGE BADFSS, JMS I [ERMSG 2323 JMP I [BADEXP OPR8R, DCA TEMP JMS I [OUTWRD /PUSH TAD TEMP JMS I [OUTWRD /OUTPUT OPERAND PTR JMS I [GETC JMP I [ENDEXP TAD (-250 /IS IT S.S. OR FUNCTION SZA JMP NOTFSS TAD STMJMP TAD (-DFINFL SNA CLA /FOR D.F.,PERMIT VARPARENS JMP NOTFSS ISZ TEMP /LOOK AT TYPE CDF 10 TAD (3420 /DIM, EXT, SF, OR ARG ? AND I TEMP SZA CLA JMP NOTFUN /NOT A FUNCTION REFERENCE TAD I TEMP TAD (1000 /SET EXT BIT DCA I TEMP NOTFUN, CDF SKP JMS I [POP /PUT COUNT INTO AC SSFUN, IAC /INCREMENT ARG COUNT JMS I [PUSH /SAVE IT ON THE STACK JMS I [EXPR /GET ARG (OR S.S.) JMP I [BADEXP JMS I [COMARP /LOOK FOR , OR ) JMP BADFSS /NEITHER JMP SSFUN-1 /, GET NEXT ARG (SUBSCRIPT?) TAD (ARGSOP /YES, OUTPUT ARGLIST OPER JMS I [OUTWRD JMS I [POP /AND THE COUNT JMS I [OUTWRD NOSS, JMS I [GETC /GET NEXT CHAR JMP I [ENDEXP TAD (-253 /PREPARE IT JMP NOTFSS+1 OPR8RL, DCA TEMP /SAVE ADDR OF LITERAL JMS I [OUTWRD TAD TEMP JMS I [OUTWRD JMP NOSS / TYPLST PART TWO DIMLUP, JMS I [NUMBER /GET DIMENSION JMP VARDIM /MAYBE ITS VAR DIM ? JMP .+3 /OK, INTEGER JMP BADDIM JMP BADDIM /DP AND FP ARE BAD JMS I [FIXNUM /FIX IT FOR SOME STUFF DCA MQ TAD DPRDCT /GET NEW DIMENSION PRODUCT JMS I [MUL12 DCA DPRDCT ISZ TEMP2 /INCREMENT DIM COUNT TAD WORD2 /IF WORD2 OR AC NON ZERO TAD AC /DIM IS TOO BIG SZA CLA /1.03/ JMP BADDIM /1.03/ JMS I (ANORM /1.03/ RENORMALIZE THE NUMBER JMS I [LUKUP2 /1.03/ ENTER IT INTO LITERAL LIST INTLST /1.03/ -3 /1.03/ PSHDIM, JMS I [PUSH /1.03/ AND SAVE ON THE STACK JMS I [COMARP /LOOK FOR , OR ) JMP BADDIM SKP /COMMA MEANS ANOTHER DIM FOLLOWS JMP PUTDIM /) MEANS END OF DIMS TAD DSERES /FORM NEXT VALUE OF MAGIC NUMBER TAD DPRDCT DCA DSERES JMP DIMLUP /NOW LOOP FOR NEXT DIM VDTEMP, 0 VARDIM, CDF 10 /IS ARRAY AN ARG ? TAD I TLTEMP CDF AND (20 SNA CLA JMP BADDIM /NO, BAD DIMENSION JMS I [GETNAM /OK, GET DIMENSION JMP BADDIM JMS I [LOOKUP IAC DCA VDTEMP /ADDR OF TYPE WORD CDF 10 /IS THA VARIABLE AN ARG ? TAD I VDTEMP AND (20 CDF SNA CLA JMP BADDIM /NO, THATS BAD DCA DPRDCT /3.02 ZERO DIM PRODUCT ISZ TEMP2 /INCREMENT DIM COUNT CMA /1.03/ TAD VDTEMP /1.03/ SAVE DIMENSION VARIABLE JMP PSHDIM /3.02 SAVE DIM ON STACK MESSAG, 0 /PRINT PASS1 IMMEDIATE ERROR TAD I MESSAG /GET CHAR ONE ISZ MESSAG JMS I (TTYOUT TAD I MESSAG /GET CHAR TWO JMS I (TTYOUT TAD (215 /CR JMS I (TTYOUT TAD (212 /LF JMS I (TTYOUT JMP I (7605 /EXIT TO MONITOR / EXPRESSION ANALYZER REVISITED PAGE NOTFSS, TAD (250-253 /IS IT + SZA JMP .+3 TAD (ADDOPR /YES JMP GOTOPR TAD (253-255 /IS IT - SZA JMP .+3 TAD (SUBOPR /YES JMP GOTOPR TAD (255-252 /IS IT * SZA JMP NOTMUL /NO JMS I [GETC JMP NOTEXP TAD (-252 /IS IT ** SZA CLA JMP .+3 TAD (EXPOPR /YES JMP GOTOPR JMS I [BACK1 NOTEXP, TAD (MULOPR /IT WAS * JMP GOTOPR NOTMUL, TAD (252-257 /IS IT / SZA JMP .+3 TAD (DIVOPR /YES JMP GOTOPR IAC /IS IT . SZA CLA JMP I (ENDEXP-1 /NO, END OF EXPR JMS CKEOPR /LOOK FOR EXTENDED OPERATOR JMP BADOPR /NONE THERE JMS I [CHECKC /CHECK FOR CLOSING . -256 JMP BADOPR /NOT THERE CDF 10 /3.01/ TAD I X10 /GET OPERATOR POINTER CDF JMP GOTOPR CKEOPR, 0 /CHECK FOR EXTENDED OPERATOR JMS I [GETNAM /GET NAME JMP I CKEOPR /NONE TAD (OPRLST-1 /PTR TO LIST DCA X10 OPRLUP, CDF 10 /3.01/ TAD I X10 /COMPARE FIRST CHAR CDF 0 SNA JMP I CKEOPR /END OF LIST TAD BUCKET SZA CLA JMP NOTHIS /NOT THIS ONE CDF 10 /3.01/ TAD I X10 CDF TAD I (NAME1 /COMPARE 2ND AND 3RD SZA CLA JMP NOTHIS+1 /NOT THIS ONE ISZ CKEOPR /BUMP RETURN JMP I CKEOPR NOTHIS, ISZ X10 /BUMP LIST PTR ISZ X10 /AGAIN JMP OPRLUP /KEEP GOING BADOPR, JMS I [ERMSG /NOT LEGAL EXT. OPER. 1720 JMP I [BADEXP GOTOPR, DCA NEWOP /SAVE NEWEST OPER. JMS I [POP /GET STACK TOP SNA JMP PUSH2 /EMPTY DCA OLDOP TAD I OLDOP /COMPARE PREC. CIA TAD I NEWOP /NEW-OLD SPA SNA CLA JMP OUTOLD /OLD>NEW TAD OLDOP PUSH2, JMS I [PUSH /OLD < NEW TAD NEWOP /GO PUSH BOTH JMS I [PUSH JMP I (UNOPR /GO LOOK FOR NEXT OPERAND OUTOLD, ISZ OLDOP /OUTPUT OPERATOR TAD I OLDOP JMS I [OUTWRD JMP GOTOPR+1 /TRY NEXT STACK ELEMENT NEWOP=WORD1 OLDOP=WORD2 / UTILITIES GETCWB, 0 /GET A CHARACTER (PRESERVE BLANKS) ISZ NCHARS JMP .+4 CLA CMA DCA NCHARS /RESET NCHARS JMP I GETCWB ISZ GETCWB TAD I CHRPTR /GET THE CHAR JMP I GETCWB SAVECP, 0 /SAVE CHAR POSITION TAD NCHARS JMS I [PUSH TAD CHRPTR JMS I [PUSH JMP I SAVECP FIXNUM, 0 /FIX FAC (I'M MOVING IT AGAIN) TAD WORD1 /IS IT FIXED ? TAD (-27 SNA JMP RETFN /YES, EXPONENT IS 23 SMA CLA JMP I FIXNUM /BAD IF EXP IS >23 JMS I (AR1 /RIGHT SHIFT ONE JMP FIXNUM+1 /TEST AGAIN RETFN, TAD WORD3 /RETURN LOWEST 12 BITS JMP I FIXNUM / UTILITIES PAGE GETC, 0 /GET A CHARACTER (IGNORING BLANKS) ISZ NCHARS JMP .+4 CLA CMA DCA NCHARS JMP I GETC TAD I CHRPTR TAD (-240 /IS IT A BLANK SNA JMP GETC+1 /YES IGNORE IT TAD (240 /FIX CHAR ISZ GETC JMP I GETC ERMSG, 0 /ERROR MESSAGE HANDLER CDF TAD NOCODE /IS CODE GENERATION ON ? SZA CLA JMP NOTOUT /NO TAD (ERRCOD /ERROR CODE TO OUTPUT FILE JMS I [OUTWRD TAD I ERMSG ISZ ERMSG JMS I [OUTWRD JMP I ERMSG /RETURN NOTOUT, TAD I ERMSG /SAVE THE ERROR CODE ISZ ERMSG DCA ERCODE JMP I ERMSG POP, 0 /PUT TOP OF STACK INTO AC TAD STACK DCA ERMSG CLA CMA TAD STACK DCA STACK /DECREMENT STACK POINTER TAD I ERMSG JMP I POP TRUFAL, 0 /CHECK FOR LOGICAL LITERALS JMS I [GETNAM JMP I TRUFAL JMS I [CHECKC /LOOK FOR TERMINAL . -256 JMP I TRUFAL TAD BUCKET /LOOK AT FIRST CHAR TAD (-24 SNA JMP .+5 /ITS "T" TAD (24-6 SZA CLA JMP I TRUFAL /ITS NEITHER ISZ TRUFAL /ITS "F" ISZ TRUFAL JMP I TRUFAL / LEFT HALF EXPRESSION ANALYZER LEXPR, 0 /GET LEFT HAND EXPRESSION DCA LETEMP /SAVE CALL SWITCH JMS I [GETNAM /LOOK FOR VAR NAME JMP MSNGOP /MUST BE THERE JMS I [OUTWRD /OUTPUT A ZERO (PUSH) JMS I [LOOKUP /SEEK OUT ENTRY FOR THIS VAR DCA TEMP TAD TEMP JMS I [OUTWRD JMS I [GETC /LOOK FOR DIMENSIONS JMP LEXPOK /NO ( TAD (-250 SZA CLA JMP LEXPOK-1 /NO ( ISZ TEMP /LOOK AT TYPE CDF 10 CLL CML RTR /DIMENSIONED ? AND I TEMP TAD LETEMP /OR A CALL ? TAD NOCODE /OR CODE OFF ? SZA CLA JMP NOTSF /YES, NOT AN ARITHMETIC S.F. TAD I TEMP AND (1420 /EXT, SF, OR ARG ? SNA CLA /V3C TAD [-M6 /SEE IF CALLED FROM SPECIAL PLACE TAD LEXPR /V3C COMPARE WITH ENTRY PT SZA CLA JMP ASFERR /THIS IS BAD IF SO TAD I TEMP TAD (400 DCA I TEMP /SET A.S.F. BIT CDF TAD (ASFDEF /DEFINE ASF JMS I [OUTWRD NOTSF, CDF SKP JMS I [POP /ARG COUNT TO AC SSLOOP, IAC /INCREMENT SS COUNT JMS I [PUSH /SAVE ON THE STACK JMS I [EXPR /COMPILE SUBSCRIPT JMP FSSBAD+2 /ERROR WITHIN SS JMS I [COMARP /LOOK FOR , OR ) JMP FSSBAD /NEITHER (THERE WAS A BUG HERE) JMP SSLOOP-1 /, GET NEXT ARG/SS TAD (ARGSOP /OUTPUT SS OPERATOR JMS I [OUTWRD JMS I [POP /THEN COUNT JMS I [OUTWRD SKP JMS I [BACK1 /PUT BACK A CHARACTER LEXPOK, ISZ LEXPR JMP I LEXPR /RETURN MSNGOP, JMS I [ERMSG /MISSING OPERAND 1517 JMP I LEXPR FSSBAD, JMS I [ERMSG /MISSING COMMA OR CLOSE PARENTHESIS 2323 JMS I [POP /GET ARG COUNT OFF STACK CLA JMP I LEXPR ASFERR, JMS I [ERMSG /BAD ARITHMETIC STMT FUNCTION 2306 JMP NOTSF /DO THE REST OF THE ASF DEF LETEMP, 0 /UTILITIES PAGE G2CTMP, PUSH, 0 /PUT AC ONTO STACK DCA I STACK /STORE TAD (STACKS+100 /CHECK FOR STACK OVERFLOW CIA CLL TAD STACK SNL CLA JMP I PUSH /OK, RETURN DCA NOCODE /SET CODE GENERATION ON JMS I [ERMSG 2004 JMP I [NEXTST GET2C, 0 /GET 2 SIX BIT CHARS INTO ONE WPRD JMS I [GETC /GET FIRST CHAR JMP I GET2C AND [77 CLL RTL RTL RTL DCA G2CTMP JMS I [GETC /GET SECOND CHAR JMP I GET2C ISZ GET2C /FIX RETURN ADDR AND [77 TAD G2CTMP JMP I GET2C STMNUM, 0 /PICK UP STATEMENT NUMBER DCA WORD4 /SAVE DEFINED BIT (IF ANY) DCA WORD2 /ZERO SOME STUFF DCA WORD3 JMS DIGIT /GET A DIGIT JMP I STMNUM /NONE THERE, NO STMT NUMBER TAD (-60 /IS IT A LEADING 0 ? SNA JMP .-4 /YES, IGNORE IT TAD (60 CLL RTL RTL RTL DCA WORD1 JMS DIGIT /GET SECOND DIGIT JMP ENDNUM /END OF NUMBER TAD WORD1 DCA WORD1 /COMBINE FIRST AND SECOND JMS DIGIT JMP ENDNUM CLL RTL RTL RTL DCA WORD2 JMS DIGIT JMP ENDNUM /COMBINE THIRD AND FOURTH TAD WORD2 DCA WORD2 JMS DIGIT /GET FIFTH DIGIT JMP ENDNUM CLL RTL RTL RTL DCA WORD3 ENDNUM, JMS I [LUKUP2 /LOOK UP IN S.T. SNLIST /STMT NUMBER LIST -3 ISZ STMNUM DCA SNUM /SAVE S.T. ADDRESS OF LABEL CDF 10 /SET TYPE WORD TAD SNUM /GET ADDR OF TYPE IAC DCA SNTEMP TAD I SNTEMP /GET TYPE WORD CLL TAD WORD4 /PUT IN THE DEFINITION BIT SNL DCA I SNTEMP /RESTORE IT IF NOT MULTIPLE DEFN CDF SNL CLA JMP I STMNUM JMS I [ERMSG 1514 JMP I STMNUM SNTEMP, DIGIT, 0 /GET A DIGIT JMS I [GETC /GET A CHAR JMP I DIGIT TAD (-272 /IS IT > 271 (9) SMA JMP NODIGT /YES, ITS GREATER TAD (272-260 /IS IT < 260 (0) SPA JMP NODIGT /YES, ITS LESS TAD (60 ISZ DIGIT JMP I DIGIT /TAKE SUCCESSFUL RETURN NODIGT, JMS I [BACK1 /RESTORE NON DIGIT JMP I DIGIT ASSIGN, JMS I [STMNUM /GET STMT NUMBER JMP BADASN JMS I [GET2C /LOOK FOR "TO" JMP BADASN TAD (-2417 SNA CLA JMS I [LEXPR /GET ASSIGN VARIABLE JMP BADASN TAD (ASNOPR /OUTPUT ASSIGN OPERATOR JMS I [OUTWRD TAD SNUM /NOW STMT NUMBER JMS I [OUTWRD JMP I [NEXTST BADASN, JMS I [ERMSG 0123 JMP I [NEXTST TTYOUT, 0 /TTY OUTPUT ROUTINE TLS TSF JMP .-1 CLA JMP I TTYOUT / PRECEDENCE TABLE PAGE ADDOPR, 100 1 SUBOPR, 100 2 MULOPR, 200 3 DIVOPR, 200 4 EXPOPR, 500 5 NOTOPR, 30 6 UMOPR, 400 7 EQOPR, 40 16 NEOPR, 40 17 GEOPR, 40 10 GTOPR, 40 11 LEOPR, 40 12 LTOPR, 40 13 ANDOPR, 20 14 OROPR, 10 15 XOROPR, 7 20 EQVOPR, 7 21 / UTILITY ROUTINES BACK1, 0 /BACK UP ONE CHAR CLA CMA TAD NCHARS DCA NCHARS CLA CMA TAD CHRPTR DCA CHRPTR JMP I BACK1 OADD, 0 /ADD OPERAND TO FAC CLL TAD OPO TAD ACO DCA ACO RAL TAD OP6 TAD WORD6 DCA WORD6 RAL TAD OP5 TAD WORD5 DCA WORD5 RAL TAD OP4 TAD WORD4 DCA WORD4 RAL TAD OP3 TAD WORD3 DCA WORD3 RAL TAD OP2 TAD WORD2 DCA WORD2 JMP I OADD / FLOATING POINT DIVIDE ROUTINE PAGE FPDIV, 0 JMS I DAR1 /UNNORMALIZE AC BY ONE TAD OP1 /COMPUTE FINAL EXPONENT CIA TAD WORD1 DCA OP1 /AND SAVE IT TAD DM74 /SET ITERATION COUNTER DCA DITCNT TAD WORD2 RAL /INITIALIZE LINK FPDVLP, CLA RAR /COMPARE SIGNS TAD OP2 SPA CLA JMP .+3 TAD OPMAC /NEGATE OPERAND JMS I DFNEG JMS I DOADD /ADD OPERAND AND FAC TAD D6 /RIGHT SHIFT QUOTIENT RAL /PRESERVING ADD OVERFLOW BIT DCA D6 TAD D5 RAL DCA D5 TAD D4 RAL DCA D4 TAD D3 RAL DCA D3 TAD D2 RAL DCA D2 JMS I DAL1 /LEFT SHIFT FAC ONE ISZ DITCNT /TEST ITERATION COUNT JMP FPDVLP TAD OP1 /PUT QUOTIENT INTO FAC DCA WORD1 TAD D2 DCA WORD2 TAD D3 DCA WORD3 TAD D4 DCA WORD4 TAD D5 DCA WORD5 TAD D6 DCA WORD6 DCA ACO JMS I DNORM /NORMALIZE JMP I FPDIV D2, 0 D3, 0 D4, 0 D5, 0 D6, 0 DITCNT, 0 DAR1, AR1 DAL1, AL1 DM74, -74 OPMAC, OPO-ACO DFNEG, NEGFAC DOADD, OADD DNORM, ANORM *STACKS-1 -1 /TO PREVENT SPURIOUS DO ENDS / NUMERIC CONVERSION ROUTINE PAGE NUMBER, 0 /GENERAL NUMBER CONVERSION ROUTINE DCA ESWIT /ZERO E/D SWITCH DCA DECPT /ZERO DECIMAL POINT SWITCH DCA WORD1 /ZERO FAC DCA WORD2 DCA WORD3 DCA WORD4 DCA WORD5 DCA WORD6 DCA ACO DCA SIGN /CLEAR SIGN SWITCH JMS I [GETC /GET A CHAR JMP I NUMBER /NO CHAR IS NO NUMBER JMS CHKSGN /CHECK FOR SIGN SIGN, 0 /THIS SWITCH GETS SET DCA NDIGIT /ZERO DIGIT COUNT CONVLP, JMS I [DIGIT /GET A DIGIT JMP TRYDEC /IS THERE A DECIMAL POINT ? AND [17 DCA NXTDGT /SAVE THE DIGIT ISZ NDIGIT /INCR NUMBER OF DIGITS TAD WORD2 /PREPARE TO MULT BY 10 DCA OP2 TAD WORD3 DCA OP3 TAD WORD4 DCA OP4 TAD WORD5 DCA OP5 TAD WORD6 DCA OP6 TAD ACO DCA OPO JMS I (AL1 /DOUBLE FAC JMS I (AL1 /DOUBLE AGAIN JMS I (OADD /TIMES FIVE JMS I (AL1 /ONE MORE DOUBLING IS TIMES 10 DCA OP2 DCA OP3 /PUT NEWEST DIGIT INTO OPERAND DCA OP4 DCA OP5 DCA OP6 TAD NXTDGT DCA OPO JMS I (OADD /ADD IN NEWEST DIGIT JMP CONVLP TRYDEC, TAD DECPT /DECIMAL ALREADY ? SZA CLA JMP TRYE2 /YES, LOOK FOR EXPONENT JMS I [GETC /LOOK FOR . JMP DIGTST /SEE IF THERE WAS ANYTHING TAD (-256 SZA JMP TRYE1 /TRY FOR E JMS I [SAVECP /SAVE CHAR POS JMS I (CKEOPR /CHECK FOR SPECIAL CASE OF LIT.RE. JMP NOLDRE /NOT LIT.RE. JMS I [RESTCP JMS I [BACK1 /PUT BACK . IT BELONGS TO RELATIONAL DIGTST, TAD NDIGIT /ANY DIGITS ? SNA CLA JMP I NUMBER /NO, NO NUMBER JMP INTEGR /TAKE INTEGER EXIT NOLDRE, ISZ DECPT /SET DECIMAL POINT SW JMS I [RESTCP /RESTORE CHAR POS JMP CONVLP-1 /LOOP FOR OTHER DIGITS TRYE1, JMS I [BACK1 /PUT BACK NON . TAD NDIGIT /ANY DIGITS YET ? SNA CLA JMP I NUMBER /NO, NO NUMBER JMS EORD /LOOK OR E OR D JMP INTEGR TRYE2, JMS EORD /LOOK FOR E OR D FPNUM, ISZ NUMBER ISZ NUMBER DCA EXPON /ZERO EXPONENT JMS I (DODEC /HANDLE DIGITS RIGHT OF . JMP DOSIGN-1 /GO DO SIGN INTEGR, TAD (107 /PUT IN EXPONNT DCA WORD1 JMS I (ANORM /NORMALIZE ISZ NUMBER /BUMP RETURN DOSIGN, TAD SIGN /CHECK THE SIGN SZA CLA JMS I (NEGFAC /NEGATE IF NEGATIVE JMP I NUMBER /RETURN CHKSGN, 0 /CHECK FOR SIGN TAD (-255 /IS IT - ? SNA ISZ I CHKSGN /YES, SET SWITCH SZA TAD (255-253 /IS IT + ? SZA CLA JMS I [BACK1 /RETURN CHAR OTHERWISE JMP I CHKSGN EORD, 0 /LOOK FOR E OR D JMS I [GETC /LOOK FOR E OR D JMP I EORD TAD (-304 CLL RAR SZA CLA /E OR D? JMP NOEORD /NO SZL ISZ ESWIT /SET SWITCH IF E SNL ISZ DPUSED /SET D.P. SWITCH IF D JMP I (GETEXP /OK, GET EXPONENT NOEORD, JMS I [BACK1 /PUT IT BACK CAUSE ITS NOT OURS JMP I EORD NXTDGT, 0 REWIND, JMS I [EXPR /COMPILE UNIT JMP I [NEXTST TAD (REWOPR /OUTPUT REWIND OPERATOR JMS I [OUTWRD JMP I [NEXTST / NUMERIC CONVERSION ROUTINE PAGE SMLNUM, 0 /INPUT A NUMBER <= 4095 EXPLUP, DCA EXPON /ZERO THE EXPONENT JMS I [DIGIT /GET THE NEXT DIGIT JMP I SMLNUM /NUMBER DONE AND [17 DCA OPO /SAVE THE DIGIT TAD EXPON /MULT BY 10 CLL RAL CLL RAL TAD EXPON CLL RAL TAD OPO /ADD IN DIGIT JMP EXPLUP /STORE BACK INTO EXPONENT GETEXP, DCA ESIGN /ZERO EXPONENT SIGN SWITCH JMS I [GETC /GET A CHAR JMP I (FPNUM+1 JMS I (CHKSGN /IS IT A SIGN FPRTNE, ESIGN, 0 /THIS IS THE SWITCH TO SET JMS SMLNUM /GO GET THE EXPONENT FIXEXP, TAD ESIGN /CHECK EXPONENT SIGN SNA CLA JMP .+4 TAD EXPON /COMPLEMENT EXPONENT CIA DCA EXPON JMS DODEC /GO HANLE EXPONENT CLL CML RTL /BUMP RETURN BY TWO (DP) OR 3 (FP) TAD ESWIT /DEPENDING ON E/D SWITCH TAD I [NUMBER DCA I [NUMBER JMP I (DOSIGN /CHECK THE SIGN DODEC, 0 TAD DO107 /NORMALIZE THE NUMBER DCA WORD1 JMS I (ANORM TAD DECPT /WAS THERE A DECIMAL POINT ? SZA CLA TAD NDIGIT /HOW MANY DIGITS TO THE RIGHT ? CIA TAD EXPON /SUBTRACT THAT NUMBER FROM EXP SMA JMP POSEXP /EXPONENT IS POSITIVE CIA DCA EXPON /ONLY NEED ABS VALUE TAD (FPDIV /DO DIVIDES JMP .+3 POSEXP, DCA EXPON TAD (FPMUL /DO MULTIPLIES DCA FPRTNE /MULTIPLY/DIVIDE ROUTINE TAD (PETABL-1 /POWERS OF TEN TABLE DCA X17 EXPMUL, TAD EXPON /LOOK AT THE EXPONENT SNA JMP I DODEC /IF 0 ITS THRU CLL RAR DCA EXPON /PUT LOWEST BIT INTO LINK SNL JMP SKPEXP /THIS ONE DOESN'T COUNT CDF 10 /3.01/ TAD I X17 /MOVE FACTOR INTO OPERAND DCA OP1 TAD I X17 DCA OP2 TAD I X17 DCA OP3 TAD I X17 DCA OP4 TAD I X17 DCA OP5 TAD I X17 DCA OP6 DCA OPO CDF JMS I FPRTNE /MULTIPLY OR DIVIDE BY THIS FACTOR JMP EXPMUL /CHECK NEXT BIT SKPEXP, TAD X17 /SKIP OVER THIS FACTOR TAD (6 JMP EXPMUL-1 AR1, 0 /SHIFT FAC RIGHT ONE TAD WORD2 CLL RAR DCA WORD2 TAD WORD3 RAR DCA WORD3 TAD WORD4 RAR DCA WORD4 TAD WORD5 RAR DCA WORD5 TAD WORD6 RAR DCA WORD6 TAD ACO RAR DCA ACO ISZ WORD1 DO107, 107 JMP I AR1 AL1, 0 /SHIFT FAC LEFT ONE TAD ACO CLL RAL DCA ACO TAD WORD6 RAL DCA WORD6 TAD WORD5 RAL DCA WORD5 TAD WORD4 RAL DCA WORD4 TAD WORD3 RAL DCA WORD3 TAD WORD2 RAL DCA WORD2 JMP I AL1 / NUMERIC CONVERSION ROUTINE PAGE FPMUL, 0 /FLOATING MULTIPLY ROUTINE TAD WORD1 /COMPUTE NEW EXPONENT TAD OP1 DCA OP1 TAD WORD2 /SAVE AC MANTISSA DCA TW2 TAD WORD3 DCA TW3 TAD WORD4 DCA TW4 TAD WORD5 DCA TW5 TAD WORD6 DCA TW6 TAD (-74 /SET ITERATION COUNTER DCA ITRCNT DCA WORD2 /ZERO FAC MANTISSA DCA WORD3 DCA WORD4 DCA WORD5 DCA WORD6 DCA ACO MULLUP, JMS I (AR1 /SHIFT FAC RIGHT ONE TAD TW2 /SHIFT MULTIPLIER RIGHT CLL RAR DCA TW2 TAD TW3 RAR DCA TW3 TAD TW4 RAR DCA TW4 TAD TW5 RAR DCA TW5 TAD TW6 RAR DCA TW6 SZL JMS I (OADD /ADD IF LINK IS ONE ISZ ITRCNT /BUMP COUNT JMP MULLUP /LOOP TAD OP1 /PUT IN CORRECT EXPONENT DCA WORD1 JMS I (ANORM /NORMALIZE THE RESULT JMP I FPMUL TW2, 0 TW3, 0 TW4, 0 TW5, 0 TW6, 0 ANORM, 0 /NORMALIZE FAC TAD WORD2 /IS MANTISSA 0 ? SNA TAD WORD3 SNA TAD WORD4 SNA TAD WORD5 SNA TAD WORD6 SNA TAD ACO SNA CLA JMP ZEXP /YES, ZERO EXPONENT NORMLP, CLA CLL CML RTR /IS HIGH ORDER MANTISSA = 6000 TAD WORD2 SZA JMP NO6000 /NO, SKIP THIS STUFF TAD WORD3 /YES, IS THE REST 0 ? SNA TAD WORD4 SNA TAD WORD5 SNA TAD WORD6 SNA TAD ACO SZA CLA /SKIP IF 600000 ... 0000 NO6000, SPA CLA JMP I ANORM /NORM IS DONE WHEN BITS DIFFER JMS I (AL1 /SHIFT LEFT ONE CLA CMA /DECREMENT EXPONENT TAD WORD1 DCA WORD1 JMP NORMLP /LOOP ZEXP, DCA WORD1 JMP I ANORM NEGFAC, 0 /NEGATE FAC TAD (ACO /GET POINTER TO OPERAND DCA NFPTR TAD (-6 /SIX WORD NEGATE DCA NFCNT CLL NFLOOP, RAL TAD I NFPTR /GET NEXT WORD CLL CML CIA DCA I NFPTR /RESTORE AFTER COMPLEMENTING CML CLA CMA /LINK GETS COMPLEMENTED ONCE HERE TAD NFPTR /AND ONCE AGAIN HERE DCA NFPTR /RESTORE DECREMENTED POINTER ISZ NFCNT JMP NFLOOP JMP I NEGFAC NFPTR, 0 NFCNT, 0 ITRCNT, DHLRTH, 0 /HOLLERITH IN DATA SUBR ISZ TEMP SKP JMP I DHLRTH ISZ DHLRTH JMS I [GETCWB JMP DHOLER JMP I DHLRTH / VARIABLE SCANNER PAGE GETNAM, 0 /GET VARIABLE NAME JMS LETTER /FIRST CHAR MUST BE ALPHABETIC JMP I GETNAM /NO VARIABLE DCA BUCKET /FIRST ONE IS THE BUCKET TAD (NAME1 DCA NPTR /POINTER TO NAME BUFFER CLL CMA RTL /SIX CHARS MAX (3 WORDS) DCA NCNT PAKLUP, JMS LETTER /GET A LETTER SKP JMP .+3 /WE GOT IT JMS I [DIGIT /NO LETTER, IS IT A DIGIT ? JMP NDONE /NO, NAMES OVER CLL RTL RTL RTL /MOVE CHAR TO A HIGHER PLACE DCA I NPTR /STORE IT ISZ NCNT /BUMP COUNTER JMP MORNAM /MORE TO COME SKP NDONE, DCA I NPTR /ZERO NEXT WORD ISZ GETNAM /FIX RETURN ADDR JMP I GETNAM MORNAM, JMS LETTER /GET NEXT CHAR SKP JMP .+3 /ITS A LETTER JMS I [DIGIT JMP NDONE+1 /NO GOOD, NAMES OVER TAD I NPTR DCA I NPTR /COMBINE TWO CHARS ISZ NPTR JMP PAKLUP NPTR, 0 NCNT=OADD / DATA STATEMENT DATA, JMS I [IFCHEK /IF(..)DATA ???? TAD (DATAST /START DATA STATEMENT JMS I [OUTWRD DATLUP, CLA CMA /SET DIMNUM = -1 IF NO SUBSCRIPTS JMS I [GETSS /GET LIST ELEMENT JMP DATAER TAD (DPUSH /OUTPUT DPUSH OPERATOR JMS I [OUTWRD CMA TAD TEMP2 /FOLLOWED BY POINTER JMS I [OUTWRD TAD DIMNUM /FOLLOWED BY NUMBER JMS I [OUTWRD CDF 10 TAD I TEMP2 /LOOK AT TYE TYPE AND (20 /IS IT AN ARG ? CDF SZA CLA JMP DATAER /YES, THATS BAD JMS I [GETC /, ? JMP DATAER TAD (-254 SNA JMP DATLUP /LOOK FOR MORE TAD (254-257 // ? SZA CLA JMP DATAER JMP DLOOP2 /GO LOOK FOR ELEMENT DATA3, TAD (WORD1-1 DCA X10 /POINTER TO THE GOODS TAD I X10 /THEN STUFF JMS I [OUTWRD ISZ TEMP JMP .-3 NXTDE, TAD (ENDELM /OUTPUT END OF ELEMENT JMS I [OUTWRD JMS I [GETC /LOOK FOR COMMA JMP DATAER TAD (-254 SNA JMP DLOOP2 /YES, GET MORE DATA TAD (254-257 /SLASH ? SZA CLA JMP DATAER /NO, ERROR JMS I [GETC /ANOTHER DATA GROUP ? JMP I [NEXTST /NO TAD (-254 /COMMA ? SNA CLA JMP DATA+1 /START A NEW DATA STMT DATAER, JMS I [ERMSG 0401 /OK WHEN THIS IS AN AND JMP I [NEXTST DHOLER, JMS I [ERMSG 0410 /HOLLERITH DATA ERROR JMP I [NEXTST DQUOTE, 0 /GET CHAR FOR QUOTED DATA JMS I [GETCWB JMP DHOLER TAD [-247 SZA JMP DNOTQ2 JMS I [GETCWB JMP I DQUOTE TAD [-247 SNA CLA JMP DNOTQ2 /REPLACE '' BY ' JMS I [BACK1 JMP I DQUOTE DNOTQ2, TAD [247 /FIX CHAR ISZ DQUOTE JMP I DQUOTE OUT3WD, 0 /2.02/ OUTPUT 3 WORDS TAD [DATELM /2.02/ OUTPUT ELEMENT HEAD JMS I [OUTWRD /2.02/ TAD (3 /2.02/ AND SIZE JMS I [OUTWRD /2.02/ TAD WORD1 /2.02/ NOW THREE WORDS JMS I [OUTWRD /2.02/ TAD WORD2 /2.02/ JMS I [OUTWRD /2.02/ TAD WORD3 /2.02/ JMS I [OUTWRD /2.02/ JMP I OUT3WD /2.02/ / DATA STATEMENT PAGE DLOOP2, JMS I [GETC JMP DATAER TAD (-250 /IS CHAR ( ? SZA JMP NOCMPD /NO, NOT COMPLEX DATA JMS I [NUMBER /GET REAL PART JMP DATAER SKP JMP DATAER /DP IS NG WITH COMPLEX JMS OUT3WD /2.02/ OUTPUT 3 WORDS JMS I [CHECKC /LOOK FOR COMMA -254 JMP DATAER /BAD IF NOT THERE JMS I [NUMBER /GET IMAGINARY PART JMP DATAER SKP JMP DATAER JMS I [CHECKC /LOOK FOR ) -251 JMP DATAER /NOT THERE JMP DATAFP /GO MOVE IMAGINARY PART NOCMPD, IAC /IS IT QUOTED STRING ? SZA JMP NQUOTD /NO TAD (DQUOTE /GET SUBR ADDRESS JMP HOLDAT /GO HANDLE IT NQUOTD, TAD (247-317 /IS IT AN O (OCTAL) SNA JMP I (XOCTAL /YES TAD (317-256 /IS IT . SNA CLA JMS I (TRUFAL /CHECK FOR TRUE OR FALSE JMP NOTF /NO TRUE-FALSE, TRY NUMBER CLL CML RTR /2000 DCA WORD2 TAD WORD2 SZA CLA IAC DCA WORD1 /TRUE=1.0 FALSE=0.0 DCA WORD3 JMP DATAFP /GO PUT IT NOTF, JMS I [BACK1 /PUT BACK CHAR JMS I [NUMBER /TRY FOR A NUMBER JMP DATAER /ELEMENT MISSING JMP TRYHOS /IF INTEGER, TRY FOR H OR * TAD (-3 DATAFP, TAD (-3 /FP DATA DCA TEMP /SIZE OF ITEM TAD [DATELM /DATA ELEMENT SIGNAL JMS I [OUTWRD TAD TEMP /THEN SIZE CIA /ALWAYS POSITIVE JMS I [OUTWRD JMP DATA3 /GO OUTPUT THE DATA TRYHOS, JMS I [GETC /LOOK FOR H JMP DATAER TAD (-310 SZA JMP TRYSTR /NOT H, MAYBE ITS * JMS I [FIXNUM /INTEGERIZE IT SNA JMP DHOLER /HOLLERITH DATA ERROR CMA DCA TEMP /SAVE COUNT TAD (DHLRTH /GET SUBR POINTER HOLDAT, DCA HCHAR CLL CMA RTL /2.02/ COUNT DCA TEMP2 /2.02/ BY THREES TAD (WORD1-1 /2.02/ DCA X10 /2.02/ POINTER HDLOOP, JMS I HCHAR /GET A CHAR JMP EOHD /2.02/ AND [77 /6 BITIZE IT CLL RTL RTL RTL /UPPER-PART-OF-WORDIZE DCA WORD3 /2.02/ STORAGIZE IT JMS I HCHAR /GET ANOTHER JMP LASTHD /LAST HALF WORD MUST GO OUT AND [77 TAD WORD3 /2.02/ COMBINIZE THE TWO HALVES DCA I X10 /2.02/ STORE IT ISZ TEMP2 /2.02/ THREE AT A TIME JMP HDLOOP /2.02/ JMS OUT3WD /2.02/ OUTPUT THREE JMP HOLDAT+1 /2.02/ GO DO NEXT THREE WDS EOHD, CLL CML RTL /2.02/ ANY CHARS IN THIS SET ? TAD TEMP2 /2.02/ SPA CLA /2.02/ JMP NXTDE /2.02/ NO, DO NEXT ELEMENT JMP .+4 /2.02/ YES, FILL IT OUT LASTHD, TAD WORD3 /2.02/ FILL OUT LOWER CHAR TAD (40 /2.02/ WITH A BLANK DCA I X10 /2.02/ TAD (4040 /2.02/ THEN FILL REST DCA I X10 /2.02/ WITH BLANKS TAD (4040 /2.02/ DCA I X10 /2.02/ JMP DATAFP /2.02/ GO OUTPUT IT TRYSTR, TAD (310-252 /* SNA CLA JMP .+3 JMS I [BACK1 /PUT BACK THAT CHAR JMP DATAFP /ITS JUST AN INTEGER TAD (DREPTC /REPETITION COUNT JMS I [OUTWRD JMS I [FIXNUM JMS I [OUTWRD /OUTPUT COUNT JMP DLOOP2 /LOOP / INITIALIZE READ IN *6400 INITLN, TAD IX7772 /READ FIRST SIX CHARS DCA TEMP TAD IXLINM DCA CHRPTR INITLP, CIF 10 JMS I [ICHAR /READ A CHAR JMP INITLN TAD IXM211 /TAB ? SZA CLA JMP NIXTAB /NO THIS ONE TAD IX0240 DCA I CHRPTR ISZ TEMP JMP .-3 JMP CHKCOM /DO COMMENT CHECK NIXTAB, TAD CHAR DCA I CHRPTR /STORE THE CHAR ISZ TEMP JMP INITLP CHKCOM, TAD I IXLINE /COMMENT ? TAD IXM303 SNA CLA JMP IGNORE /IGNORE IT TAD I IXLNP5 /CONTINUATION ? TAD IXM240 SZA CLA JMP IGNORE TAD IX7700 /FIX CALL CDF 10 /SEE WHAT HAPPENS WHEN YOU MOVE A ROUTINE** DCA I IXINCL CDF /** CIF 10 JMS I IX200 /REMOVE MONITOR 11 CDF 10 /FIX FIELD ONE STUFF TAD I MOV1 DCA I MOV2 ISZ MOV1 ISZ MOV2 ISZ MOVCNT JMP .-5 CDF JMP I IXRDFS /LOOK FOR PROG HEADER MOV1, 2020 MOV2, 20 MOVCNT, -160 IGNORE, CIF 10 /** JMS I [ICHAR /SKIP TILL CARRIAGE RETURN JMP INITLN CLA JMP IGNORE IXRDFS, RDFRST IXINCL, INCALL IXM240, -240 IXM303, -303 IX0240, 0240 IX200, 200 IX7600, 7600 IX7772, 7772 IXM211, -211 IX7700, 7700 /V3C / SEARCH FOR PROGRAM HEADER PAGE RDFRST, CIF 10 /** JMS I [ICHAR /THIS IS A DUPLICATE OF THE CODE JMP ENDLNF /AT LABEL 'RDLOOP' , ONLY THE TAD (-211 SNA TAD (240-211 TAD (211 DCA I CHRPTR /NAMES HAVE BEEN CHANGED TO ISZ CNT72 SKP JMP SKPFL2 TAD CHRPTR /PROTECT THE ASSEMBLY CIA CLL /(IT GETS THE FIRST LINE TAD (LINE+270 /WHICH MAY BE SUBROUTINE OR /FUNCTION. 1ST LINE SHORTER THAN REST BEC OF BUFFER OVERWRITES** SZL CLA /OR SOMETHING ELSE, IN WHICH CASE JMP RDFRST /ITS THE MAIN PROGRAM) JMS I [ERMSG /LINE TOO LONG 1424 JMP SKPFL /SKIP REST SKPFL2, CIF 10 /** JMS I [ICHAR JMP ENDLNF CLA JMP SKPFL2 SKPCMF, TAD X16 /BY ORDER OF THE EMPEROR DCA CHRPTR /MARIO DE NOBILI ENDLNF, TAD CHRPTR DCA X16 TAD CHRPTR DCA X10 TAD (-102 DCA CNT72 TAD (-6 DCA NCHARS GET6F, CIF 10 /** JMS I [ICHAR JMP SKPCMF TAD (-211 SZA CLA JMP NOTABF TAD (240 DCA I CHRPTR ISZ NCHARS JMP .-3 TAD (240 DCA CHAR JMP CCHEKF NOTABF, TAD CHAR DCA I CHRPTR ISZ NCHARS JMP GET6F CCHEKF, TAD I X10 TAD (-303 SZA CLA JMP NOCMTF SKPFL, CIF 10 /** JMS I [ICHAR JMP SKPCMF CLA JMP SKPFL NOCMTF, TAD CHAR TAD (-240 SNA CLA JMP GOTFST CCARDF, TAD X16 DCA CHRPTR JMP RDFRST GOTFST, TAD CHRPTR CIA TAD (LINE+4 DCA NCHARS TAD [LINE-1 DCA CHRPTR JMS I [SAVECP TAD (HDRLST-1 DCA X10 /PREPARE TO SEARCH THE LIST CLOOP1, CDF 10 /(FNC NAMES UP IN FLD 1)** TAD I X10 /OF LEGAL HEADER LINES CDF SZA /CODE IS AS UNDER 'CMDLUP' JMP CLOOP2 CLA CMA RAL TAD STACK DCA STACK CDF 10 /** TAD I X10 CDF DCA TEMP JMP I TEMP CLOOP2, DCA TEMP JMS I [GET2C JMP BADCMF CIA TAD TEMP SNA CLA JMP CLOOP1 SEARCH, CDF 10 /** TAD I X10 CDF SZA CLA JMP SEARCH ISZ X10 JMS I [RESTCP ISZ STACK ISZ STACK CDF 10 /** TAD I X10 CDF SZA JMP CLOOP2 BADCMF, JMS I [RESTCP /NOT A FUNCTION OR SUBROUTINE JMP I (LINE1 /SO GO TO MAIN PART OF COMPILER BADDIE, JMS I [MESSAG /SOMETHING MISSING FROM SYS 323 /S 331 /Y / ANALYZE PROGRAM HEADER PAGE SUBRTN, CLA CMA /SET TO -1 FOR SUBR JMP XXXFUN+1 REAFUN, TAD (102 /SET TYPE TO REAL DCA TYPE JMP XXXFUN LOGFUN, IAC /SET TYPE OF FUN DBLFUN, IAC /WITH DOUBLEMINT GUM ! CMPFUN, IAC IAC INTFUN, TAD (101 DCA TYPE JMS I [CHECKC /LOOK FOR 'N' -316 JMP BADBGN XXXFUN, CLA IAC DCA FUNCTN /SET SWITCH CDF 10 /1.05/ KILL ENTRY FOR 'MAIN' DCA I (ALIST+14 /1.05/ BUT DO IT BEFORE THE M BUCKET CDF /1.05/ CONTAINS ANYTHING USEFULL JMS I [GETNAM /GET FUNC/SUBR NAME JMP BADBGN JMS I [LOOKUP /PUT INTO SYMBOL TABLE DCA PROGNM TAD PROGNM /SET UP TYPE IAC DCA TEMP TAD STACK DCA X12 /SAVE POINTER DCA TEMP2 /ZERO ARG COUNTER CDF 10 TAD TYPE /PUT IN THE TYPE BITS TAD (1000 DCA I TEMP CDF JMS I [CHECKC /LOOK OFR ( -250 JMP ISITFN /IS IT A FUNCTION ? ARGLUP, JMS I [GETNAM /GET THE ARG JMP BADBGN JMS I [LOOKUP IAC DCA TEMP /ADDR OF TYPE WORD CDF 10 TAD I TEMP SZA CLA JMP BADBGN /ALREADY AN ARG TAD (20 DCA I TEMP CDF CMA TAD TEMP /OUTPUT ADDR OF ARG JMS I [PUSH ISZ TEMP2 /KEEP COUNT JMS I [COMARP /LOOK FOR , OR ) JMP BADBGN /NEITHER JMP ARGLUP /, TAD TEMP2 /) HOW MANY ARGS ? CDF 10 DCA I NEXT /INTO ARG LIST TAD TEMP2 CIA DCA TEMP2 TAD NEXT /SAVE ADDR OF ARG LIST DCA ARGLST CDF TAD X12 /RESTORE THE STACK DCA STACK MOVARG, TAD I X12 /PUT ARGS INTO ARG LIST CDF 10 DCA I NEXT CDF ISZ TEMP2 JMP MOVARG JMP I [NEXTST /DO NEXT LINE TYPE=WORD6 ISITFN, TAD FUNCTN /IS IT A FUNCTION SPA SNA CLA /WITH NO ARGS ? JMP I [NEXTST /NO, WE'RE OK BADBGN, JMS I [ERMSG 2010 JMP I [NEXTST BDATA, JMS I [CHECKC /LOOK FOR A -301 JMP BADBGN CLL CMA RAL /SET FUNCTION SWITCH DCA FUNCTN /2.02/ STORE IT DUMMY!! TAD (BDLIST-1 /POINTER TO LIST OF PATCHES DCA X10 BDLOOP, CDF 10 TAD I X10 /GET PATCH LOCATION CDF SNA JMP I [NEXTST /NO MORE PATCHES DCA TEMP /SAVE PATCH ADDRESS TAD BADJMP /GET ERROR JUMP DCA I TEMP /STORE IT JMP BDLOOP /LOOP BADJMP, JMP I [BDERR / INITIAL SYMBOL TABLE FIELD 1 *2020 NOPUNC *20 ENPUNC 0 BLNKCN, 111;0 /BLANK COMMON SLOT ALIST, 0;0;0;0;0;0;0;0;0;0;0;0;MAIN;0;0;0;0;0;0;0;0;0;0;0;0;0 HOLIST, 0 FPLIST, 0 DPLIST, 0 INTLST, ONE CMPLST, 0 SNLIST, 0 ONE, THREE;0;1;2000;0 THREE, SIX;0;2;3000;0 SIX, 0;0;3;3000;0 TRUE, 0;0145;0 MAIN, 0;1000;0;0111;1600 FREE, 0 / BLOCK DATA PATCH LIST BDLIST, IF /BLOCK DATA PATCH LIST DOUBLE DO GOTO CALL READ REWIND ENDFIL FORMAT WRITE BACKSP ASSIGN STOP PAUZE DFINFL FIND ITSAR 0 / INITIALIZATION *2200 START, SKP /NON-CHAINED ENTRY POINT JMP .+5 /CCL ENTRY CIF CDF 10 /START HERE JMS I (200 /COMMAND DECODE 5 0624 /DEFAULT EXT IS .FT TAD I L7600 /IS AN OUTPUT FILE GIVEN ? SNA CLA JMP MYFILE /NO, USE FORTRN.TM MOVOFN, TAD I OFNAME /MOVE NAME INTO PAGE 0 CDF DCA I NAMEOF CDF 10 ISZ NAMEOF ISZ OFNAME ISZ OFNSIZ JMP MOVOFN EXTEST, TAD I (7604 /SET DEFAULT EXTENSIONS SZA JMP EXTSET TAD I (7643 SPA JMP GETRA /A WAS SET.USE RA AND L41 /CHECK FOR L+G SNA CLA TAD (0610 /USE RL TAD (1404 /USE LD EXTSET, DCA I (7604 TAD I (7604 CDF 0 DCA I NAMF CDF 10 TAD I (7611 SNA TAD (1423 /.LS FOR LISTING DCA I (7611 TAD I (7616 SNA TAD (1520 /.MP FOR LOAD MAP DCA I (7616 EFILE, CLA IAC /OPEN PASS1 OUTPUT FILE JMS I (200 3 OBLOK, TMPFL2 OSIZE, 0 JMP OBAD /BADDIE CDF TAD OBLOK /SAVE STARTING BLOCK DCA OUBLOK TAD OBLOK DCA I (OUFILE TAD OSIZE DCA OULEN CDF 10 CLA IAC JMS I (200 /GET PASS2 2 SPASS2, PASS2N 0 JMP OBAD CLA IAC JMS I (200 2 SP2O, PAS2ON /GET PASS2 OVERLAY 0 JMP OBAD CDF /SAVE PASS2 AND PASS2O BLOCKS TAD SPASS2 DCA PASS2B TAD SP2O /SKIP FIRST BLOCK IAC /ITS THE CORE TABLE DCA I (PASS2O CIF JMP INITLN /GO START COMPILE MYFILE, CDF /PUT DEFAULT INTO 17600 TAD I NAMOF DCA I NAMEOF TAD I NAMOF /ALSO INTO PAGE 0 CDF 10 DCA I OFNAME ISZ NAMOF ISZ NAMEOF ISZ OFNAME ISZ OFNSIZ JMP MYFILE CLA IAC /SET DEV TO SYS DCA I L7600 JMP EXTEST /GO OPEN FILE OBAD, CIF CDF JMP BADDIE OFNAME, 7601 /IGNORE DEVICE (ALWAYS USE SYS) NAMEOF, TMPFIL+4 NAMOF, TMPFIL OFNSIZ, -3 TMPFL2, 0617;2224;2216;2415 /FORTRN.TM PASS2N, 2001;2323;6200;2326 /PASS2.SV PAS2ON, 2001;2323;6217;2326 /PASS2O.SV NAMF, TMPFIL+7 L7600, GETRA, 7600 /CLA TAD (2201 /V3C USE RA JMP EXTSET L41, 41 PAGE / PROGRAM HEADER LIST HDRLST, TEXT 'INTEGERFUNCTIO' INTFUN TEXT 'REALFUNCTION' REAFUN TEXT 'COMPLEXFUNCTIO' CMPFUN TEXT 'DOUBLEPRECISIONFUNCTIO' DBLFUN TEXT 'LOGICALFUNCTIO' LOGFUN TEXT 'FUNCTION' XXXFUN TEXT 'SUBROUTINE' SUBRTN TEXT 'BLOCKDAT' BDATA 0 / PS-8 FILE INPUT ROUTINES /NEED TWO PAGES BEC. MOVING ICHAR OUT OF FIELD 1 REQUIRES /ALOT OF FIELD DIDDLING. *5400 MORCHR, TAD (214 /FIX CHAR CDF 0 /** DCA I QCHAR CDF 10 TAD I (ICHAR IAC /UPDATE ADDR DCA TCHAR CIF CDF 0 TAD I QCHAR /RETURN VALUE IN AC JMP I TCHAR TCHAR, 0 QCHAR, CHAR / EXTENDED OPERATOR LIST OPRLST, -01;-1604;ANDOPR -17;-2200;OROPR -05;-2100;EQOPR -16;-0500;NEOPR -07;-0500;GEOPR -07;-2400;GTOPR -14;-0500;LEOPR -14;-2400;LTOPR -30;-1722;XOROPR -05;-2126;EQVOPR 0 / EXPONENT TABLE PETABL, 0004;2400;0000 /1E1 0000;0000;0000 0007;3100;0000 /1E2 0000;0000;0000 0016;2342;0000 /1E4 0000;0000;0000 0033;2765;7020 /1E8 0000;0000;0000 0066;2160;6744 /1E16 6770;1000;0 0153;2356;1326 /1E32 6501;2670;2655 0325;3023;6017 /1E64 5117;7747;6466 0652;2235;6443 /1E128 7114;0164;6145 1523;2523;7565 /1E256 7734;7374;7357 3245;3430;6320 /1E512 2565;1407;2176 ENDSTM, 211;"E;"N;"D;215;211;215;232 /V3C /FAKE END STATEMENT USED IF PROGRAM HAS NONE PAGE /MAIN PART OF OS/8 INPUT ROUTINES ICHAR, 0 /READ CHAR FROM INPUT FILE CDF 10 ISZ INJMP /BUMP THREE WAY UNPACK SWITCH ISZ INCHCT INJMPP, JMP INJMP / CDF ** TAD INEOF /DID LAST READ YEILD END OF FILE ? SNA CLA JMP INGBUF /NO, DO ANOTHER READ GETNEW, JMS INNEWF /OPEN A NEW INPUT FILE JMP ENDIN /END OF INPUT INGBUF, TAD INCTR /BUMP RECORD COUNTER CLL IAC SNL DCA INCTR /RESTORE IF IT HASN'T OVERFLOWED SZL ISZ INEOF /SET END OF FILE SWITCH CDF 10 /** CIF 0 /** JMS I INHNDL /DO THE READ 0210 /ONE BLOCK TO FIELD 1 INBUFP, INBUF INREC, 0 JMP INERR /HANDLER ERROR INBREC, ISZ INREC /BUMP RECORD NUMBER TAD INBUFP /RESET BUFFER POINTER SVIBPT, DCA INPTR /V3C TAD (-601 /SET CHAR COUNT DCA INCHCT TAD INJMPP /RESET THREE WAY JUMP SWITCH DCA INJMP JMP ICHAR+1 /GO AGAIN INERR, ISZ INEOF /EITHER EOF OR BADDIE SMA CLA JMP INBREC /END OF FILE, DO NEXT FILE JMP TERR /INPUT ERROR, GIVE I F AND EXIT ENDIN, TAD (ENDSTM /V3C IF NO END STATEMENT, FORCE ONE JMP SVIBPT /ENDIN, TAD INCALL /END OF INPUT IS USR IN CORE ? / TAD (-200 / CIF 0 /** / SZA CLA / JMP I (ENDX /NO, ITS END OF PROG TERR, JMS I (MESSAG /YES, BAD INPUT. WAS SQ.BRCK** 311 306 INJMP, HLT /3 WAY CHAR UNPACK BRANCH JMP ICHAR1 JMP ICHAR2 ICHAR3, TAD INJMPP /RESET JUMP SWITCH DCA INJMP TAD I INPTR AND (7400 /COMBINE THE HIGH ORDER BITS CLL RTR /OF THE TWO WORDS RTR TAD INTMP /TO FORM THE THIRD CHAR RTR RTR ISZ INPTR /BUMP WORD POINTER JMP ICHAR1+1 /DO SOME COMMON STUFF ICHAR2, TAD I INPTR /SAVE THE HIGH ORDER BITS AND (7400 DCA INTMP /FOR THE THIRD CHAR ISZ INPTR /GO TO THE SECOND WORD ICHAR1, TAD I INPTR /GET THE LOW 8 BITS / CDF AND (177 /AND I MEAN ONLY 8 !! SNA /V3C YOU WERE WRONG - YOU MEANT ONLY 7 JMP ICHAR+1 TAD (-32 /IS IT ^Z (END OF FILE) SNA JMP GETNEW /YES, LOOK FOR THE NEXT FILE TAD (232-212 SNA JMP ICHAR+1 /IGNORE LINE FEEDS TAD (212-215 SNA JMP ICHARN /RETURN ON CARRIAGE RETURN ** IAC SNA JMP ICHAR+1 /IGNORE FORM FEEDS JMP I (MORCHR /** ICHARN, CIF CDF 0 JMP I ICHAR INTMP, 0 INFPTR, 7617 /POINTER TO INPUT FILE LIST INEOF, 1 INCHCT, INNEWF, -1 /FETCH HANDLER FOR NEXT FILE CDF 0 /** TAD (INDEVH+1 /THIS IS WHERE IT GOES ** DCA INHNDL CDF 10 TAD I INFPTR /GET NEXT INPUT FILE INFO SNA JMP I INNEWF /NO MORE FILES CDF 10 /WAS CIF 10** JMS I INCALL /CALL MONITOR 1 /FETCH HANDLER INHNDL, 0 /ENTRY ADDR GOES HERE JMP INERR+3 /THIS CAN'T HAPPEN HERE TAD I INFPTR /GET LENGTH AND (7760 SZA /A ZERO HERE MEANS >=256 BLOCKS TAD (17 /PUT IN SOME MORE BITS CLL CML RTR RTR DCA INCTR /STORE LENGTH OF FILE ISZ INFPTR TAD I INFPTR /GET STARTING RECORD NUMBER DCA INREC ISZ INFPTR DCA INEOF /CLEAR EOF FLAG ISZ INNEWF JMP I INNEWF INCTR, 0 INCALL, 200 /CHANGED TO 7700 AFTER FIRST TIME INPTR, 0 PAGE / KEYWORD LIST CMDLST, -1106;0;IF /IF -0417 -2502 -1405 -2022 -0503 -1123 -1117;0;DOUBLE /DOUBLE PRECISION -0417;0;DO /DO -0717 -2417;0;GOTO /GOTO -0317 -1515 -1716;0;COMMON /COMMON -0317 -1520 -1405;0;COMPLE /COMPLEX -0317 -1624 -1116 -2505;0;NEXTST /CONTINUE -0301 -1414;0;CALL /CALL -2205 -0114;0;REAL /REAL -2205 -0104;0;READ /READ -2205 -2711 -1604;0;REWIND /REWIND -2205 -2425 -2216;0;RETURN /RETURN -0516 -0406 -1114;0;ENDFIL /ENDFILE -0516;0;XEND /END -0411 -1505 -1623 -1117;0;DIMENS /DIMENSION -0401 -2401;0;DATA /DATA -0617 -2215 -0124;0;FORMAT /FORMAT -2722 -1124;0;WRITE /WRITE -0521 -2511 -2601 -1405 -1603;0;EQUIV /EQUIVALENCE -0405 -0611 -1605 -0611 -1405;0;DFINFL /DEFINEFILE -1116 -2405 -0705;0;INTEGE /INTEGER -1417 -0711 -0301;0;LOGICA /LOGICAL -0530 -2405 -2216 -0114;0;EXTERN /EXTERNAL -0201 -0313 -2320 -0103;0;BACKSP /BACKSPACE -0123 -2311 -0716;0;ASSIGN /ASSIGN -2001 -2523;0;PAUZE /PAUSE -2324 -1720;0;STOP /STOP -0611 -1604;0;FIND /FIND 0 /END OF LIST $ |
Added src/os8/uni/LANGUAGE/FORTRAN4/FORGEN.BI.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | $JOB FORGEN.BI ASSEMBLE OS8 FORTRAN IV. /SCRE: is the input device and must be assigned here, / replace "C" with the input device name. /}ASSIGN C SRCE }PAL F4<SRCE:F4 }LOAD F4 }SA SYS F4.SV;12200=100 }PAL PASS2<SRCE:PASS2 }LOAD PASS2 }SA SYS PASS2.SV;5000=100 }PAL PASS2O<SRCE:PASS2O,PASS2 }LOAD PASS2O }SA SYS PASS2O.SV;7605=100 }PAL PASS3<SRCE:PASS3 }LOAD PASS3 }SA SYS PASS3.SV;400=100 }PAL LOAD<SRCE:LOAD }LOAD LOAD }SA SYS LOAD.SV;200=100 }PAL FRTS<SRCE:RTS,RTL/W/K }LOAD FRTS }SA SYS FRTS.SV;200=100 }PAL RALF<SRCE:RALF/W }LOAD RALF }SA SYS RALF.SV;200=100 }PAL LIBRA<LIBRA }LOAD LIBRA }SAVE SYS:LIBRA.SV;200=100 $END |
Added src/os8/uni/LANGUAGE/FORTRAN4/FORLIB.BI.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | $JOB (FORLIB.BI) Assemble and link the FORTRAN library /.ASSIGN XXX SRCE where XXX is the device containing the source files /.ASSIGN YYY TARG where YYY is the output device for the .SV files / NOTE: XXX and YYY must be different devices. .R RALF *ABS.RL<SRCE:ABS.RA .R RALF *ASIN.RL<SRCE:ASIN.RA .R RALF *ATAN.RL<SRCE:ATAN.RA .R RALF *EXP.RL<SRCE:EXP.RA .R RALF *IFIX.RL<SRCE:IFIX.RA .R RALF *SINH.RL<SRCE:SINH.RA .R RALF *AMOD.RL<SRCE:AMOD.RA .R RALF *COSH.RL<SRCE:COSH.RA .R RALF *ACOS.RL<SRCE:ACOS.RA .R RALF *ONQIB.RL<SRCE:ONQIB.RA .R RALF *SIGN.RL<SRCE:SIGN.RA .R RALF *TANH.RL<SRCE:TANH.RA .R RALF *EXPII.RL<SRCE:EXPII.RA .R RALF *LTR.RL<SRCE:LTR.RA .R RALF *SIN.RL<SRCE:SIN.RA .R RALF *TAN.RL<SRCE:TAN.RA .R RALF *ALOG.RL<SRCE:ALOG.RA .R RALF *AMIN.RL<SRCE:AMIN.RA .R RALF *EXP3.RL<SRCE:EXP3.RA .R RALF *COS.RL<SRCE:COS.RA .R RALF *CHKEOF.RL<SRCE:CHKEOF.RA .R RALF *RFDV.RL<SRCE:RFDV.RA .R RALF *RFCV.RL<SRCE:RFCV.RA .R RALF *PAUSE.RL<SRCE:PAUSE.RA .R RALF *CLK8A.RL<SRCE:CLK8A.RA .R RALF *AMAX.RL<SRCE:AMAX.RA .R RALF *ATAN2.RL<SRCE:ATAN2.RA .R RALF *SQRT.RL<SRCE:SQRT.RA .R RALF *XFIX.RL<SRCE:XFIX.RA .R RALF *ALOG10.RL<SRCE:ALOG10.RA .R RALF *DIM.RL<SRCE:DIM.RA .R RALF *EXPIR.RL<SRCE:EXPIR.RA .R RALF *CHARS.RL<SRCE:CHARS.RA .R RALF *DATE.RL<SRCE:DATE.RA .R RALF *FLOAT.RL<SRCE:FLOAT.RA / /LINK THE LIBRARY: / .R LIBRA *TARG:FORLIB.RL</Z/C *ABS,SIGN,AMIN,AMAX,DIM,EXP,EXP3,SIN,COS/C *TAN,TANH,SQRT,ASIN,ACOS,ATAN,FLOAT,CHARS,CHKEOF/C *ALOG10,DATE,ATAN2,IFIX,SINH,ALOG,COSH,AMOD,LTR/C *EXPII,RFCV,RFDV,PAUSE,EXPIR,XFIX,CLK8A,ONQIB/C *,LIBRA.LS< / /cleanup sys / .DELETE ABS.RL,SIGN.RL,AMIN.RL,AMAX.RL,DIM.RL .DELETE EXP.RL,EXP3.RL,SIN.RL,COS.RL .DELETE TAN.RL,TANH.RL,SQRT.RL,ASIN.RL,ACOS.RL .DELETE ATAN.RL,FLOAT.RL,CHARS.RL,CHKEOF.RL .DELETE ALOG10.RL,DATE.RL,ATAN2.RL,IFIX.RL,SINH.RL .DELETE ALOG.RL,COSH.RL,AMOD.RL,LTR.RL .DELETE EXPII.RL,RFCV.RL,RFDV.RL,PAUSE.RL,EXPIR.RL .DELETE XFIX.RL,CLK8A.RL,ONQIB.RL $END |
Added src/os8/uni/LANGUAGE/FORTRAN4/FORLIB.EN.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | (REMARK Image File Created by PDP-8) (REMARK File Date: 21-Apr-1973) (FILE FORLIB.RL) <0081814G08I114O00010896000000J4HPO0000H5693JG0000J94TG00082D4JM400039> <4TG00000D4JM4000004Q1CC00020J85HH0000Q1CC00000385HH0000044J800000H489> <6G00002M20000008AO8CO00014P4S00000437KO00000IG2E000002A09OG000096H950> <00010ACIE0000411JQC0000G581700002331S2K0008680KIC0010P02I0000033HAG00> <000D0LA000001I1CAF30082C7HU700110585000041A09R4000H4C9C000020I9P80000> <0IEA0000004P4S800004163OS0000GCUJ4000020J9S800008QF20000008PH8I000053> <2K8000004CS5000000HHOK0000026C2G000008OT80000013650000004CAO829402HKG> <O6M000A6N30QO0008Q8C4B0005380AL6500KCAO82A802HHH5G000096P70O0001GPGU3> <5G00131J14SK002GID2G00007JI4I00008UE8GG0000FVS00X0006X000000O3400000I> <114O00020600I0GIC0000041GX0007X00FA40O00001084001HG7K001OO36001042SG4> <C1P080A60J0CG803GGA01G0000000040000401X00F200O3400001693JG00020602A4K> <P4EE00041G0AO0000000000000000G0401X00F740O000030CGO0AP0600018839I8ST0> <G20C00041060002CG30001C81G001660P1G06H0K0000000030H0O3Q002I40GG0O34G0> <04C1I900D2284200CG0E8P08SHI100KC260P2G12104C160P2G13J0CGO0A8G260J0CH8> <0A8G201J0CGO0A80000G0401X00DG00O34000002D4JM00020602B0J94TH00041G001K> <IEO000010C03QD4JM400008300UG0000X0004X00EU40O000030CI00GOGC11G0406106> <822430F800AOG460KG0O3A003G45G84010280608G88003K68202HG4O3Q003KC1K901D> <60OG00T30D0O0APG68K04S8202008C1I301B210060400G0360P1G0LH0G063K68202J0> <C800EGG2M0J0CGG06PG68C0308500004000000060P4011H0823001G68C00G88X0009X> <00CO00O34000002D0M600020602B0J85HH00041G001K2OO000010C03QD0M640000830> <0UG0000X0004X00EU40O000030CI00GOGC11G0406106822430F800AOG460KG0O3A003> <G45G84010280608G88003K68202HG4O3Q003KC1K901D60OG00T30D0O0APG68K04S820> <2008C1I301B210060400G0360P1G0LH0G063K68202J0C800EGG2M0J0CG806PG68C030> <8500004000000060P4011H0823001G68C00G88X0009X00CO00O3400000896G0000206> <01B4H14Q000041G04O0000000000000000G0401X00F740O000030CGO04P0600018G30> <000Q81G000G40O0009H0806121G7K005481101G690008O34I00K4508400P00SHI0HP3> <42018O2M130CG80A8G20130CGO0A80000G0401X00E900O3400000AO80000020603VHG> <A8E5900820X0007X00FA40O000030CGO0F0G80000000001G900000832M2210G30CI00> <4HG69401S8OX000I00A000000900001060004S81081G68C01C81001G68C05C8H012FK> <C1FVH3FKRO0LCM0SC07ATLE200LOL8T01G8GC1T001B20880C1I800I60P4G07H142100> <E8064CG00530041VVJ0CG80KOGA01G8000H3M84C1I700625G0HI200G0350M8521CGCK> <DP188OQ2KG8KAP188N21QGK42D1C8EA330F8000OG4030GGO3M000440G0KO38007M40G> <GOO3E0006C1I301B60OG001J0CGO0AO0000G0401X00AO00O3400000AO8CO00020602M> <HGA8E59008200004OF3G00020K0005C4000000G600000000X0004X00EU40O000030CG> <O0A9G900000832M2370G30CI003HG69401C8F080000000000X000700A000020C0008O> <G20G30CGO01OG20030CGO09OG4030H0O3Q002E40GG0O34G00SC1I900B2284200SG0C8> <P0GSHI1G0KC260P000JH0B4230PG6800AC82P0O84C1I50026195G0030CGO0IPG68C02> <482H0U84C32B00060P1G0JJ0CGO048G22230CGO09O0000G0401X00CB00O3400001697> <00000206047HGA8E5900820X0007X00FA40O000030CGO0E1G900000839I9Q10G30CI0> <03HG69401C8OX000C00A0000005I8FR804P47TK03CI3UQ81G001320820C1I30072080> <0C1I301724FV8L0U1NVPMD5KRVUL36NI005DA46FV1000000C2430F8009OG22030CI00> <3HG69401C890G803I01H340018O010FVSO34C052C1I001720O0610000O34E00444MGV> <420200801IGA47P0Q8CC1I503321U860C00D4404086I2J0CH80QGGA234GF4310Q8SC1> <I603K20886C1K001720806C1I301723G86Q2SGE43P0K8KA5OG8KCH0H8R212GM4360Q0> <00JH040360P1G0JG0001X00AF00O34000006F9G000020601V9I9O00000820X0007X00> <FA40O000030CGO09OG637KS21060P400630CI8028GO0G00000X000600B4GVMI0C0008> <8G20G30CGO018G20030CGO098G4030H0O3Q002A40GG0O34G00OC1I90092284200SG0C> <8P000A602GF426115G0030CGO099G68C01S00X00DK00O34000018170000020602EHGA> <8E5900820000CUJ0000020K000J4JG00000G600000000X0004X00EU40O000030CGO0A> <9G90000083A09Q10G30CI003HG69401C8C080000000000X000740O000HH041060P1G0> <3H040060P1G0JH0806121G7K004S81101G69001OO34I00M43G8401P00OHI000KC060P> <000JH07426195G0030CGO0GHG68C024O34000440SGCO64M000C1I302B60P1G08H05K3> <60P1G0JG0001X00CQ00O3400001817200002060281JQCG0000820002CIE4000020K00> <00000000X0003X00F440O000030CGO09OG6K0JH21060P400630CI8028GO0G00000X00> <0940O000GH041060P1G02H040060P1G0IH0806121G7K004K81101G69001GO34I00I44> <08401P00OHI000KC0P0HG89C000O34603SC1I300F20E86C2IB00060P1G12J0CGO03OG> <2Q1J0CGO0980000G0401X00D200O34000016H95000020604HHGA8E5900820X0007X00> <FA40O000030CGO0F0GE0000000X000302PG900000839KA990G30CI0059G6940288LX0> <00F00A000000900001060005881081G68C01O81001G68C05O8E003800000150007VUJ> <BVVBVVDG000030H0O3Q002S40GG0O34G01AC1I900I21O4200SG0C8P000A6030CG00BH> <G68K014O3Q000AC1H000660UG00130C80010G20430CG0130GG024GLK6P0G0G024GA46> <60P0G1J10G0304A8A0430F8000OG6210134260OG002H074360SGG0O30CO80DGGJI20G> <DK45138DI20GDK4511G7K000K8201G04C1T000320884C1R00042080AC1H000560P1G0> <N10D45P0G06C1I30360000200G0401X009Q00O34000002J4JG000206033HGA8E59008> <20002D2IA000020K0001A09O0000G600000000X0004X00EU40O000030CGO0B9G64003> <OO3I001AC1I301B20O5697840O34G014C1I900F24G200000000X000800A0000005I8F> <R9060004S81081G68C01C81001G68C05C8201G8GC1T001B20880C1I800I60P4G07H0S> <2100E8064CG005301G7K002KO3420444100D4460P1014J0I00001G68C05CO32001A40> <G0CO3I001A40IGGO34000440SGCO54M000C1I302O60P1G0C1074360OG00AH09K3P0PG> <C9C000O34602MC1I300O0000200G0401X00BH00O3400000237KO000206033HGA8E590> <0820002D2IA000020K0001A09O0000G600000000X0004X00EU40O000030CGO09OG611> <JQE1060P400630CI8028HA0G00000X000900B4GVMG050000004P47TKG30002240G40O> <34600A40G00O34602A4100O4860UG00IH044060P400630CI8028GG10G07403268002H> <G34260P001G10820VVPG684084840G00001KGKO34404GC28000060P1G0IH0K42H0G06> <A2SGCO54M000C1I302J60P1G09109K2P0PGC9C000O34605MC1I300I60Q000IH04K660> <P1G0IH044460P1G0IG0001X00BL00O34000002K0JG00020604LX0006X00FG40O00003> <0CGO0I0G61A09Q1060P400630CI8028HA0000000X000F00A000020C00088G20G30CGO> <018G20030CGO098I7VPK0000003VVO0FVT29GK802RMPTG008C2KJVUM2CKNVVLNDQ8FV> <PJ63O7VVALAM801CI3UQ01S000001G8GC1T001520880C1I800C60P4G04H142100E806> <4CG00530041VVJ0CG80NOGC1000003P0M86I530CGG13OG2I5J0CGG0QGGE236GB4200M> <88214HGO34A07G4CGHMK215384A6SG84EP108521CGK4FH199122II64554K8AA38G8K4> <P0G86I330CGG13OG429KG8O34609040GG8O38002A40G0CO34602A0000401X00A700O3> <400000CC7GAG0020600FX0006X00FG40O00001084001HG7K001CO36000Q44SG4C1P08> <0A60G0000000040000401X00F700O3400000680KIC0020602G1I0540000S300UGCE5A> <000010C03U385AG000083013G0000X0004X00EU40O000010C680KIC0C1I800A60P4G0> <3H1G00X000B40O000FH041060P1G01H040060P1G0HJ0CGO098G4030H0O3Q002640GG0> <O34G00KC1I90072104200SG0C861MG00FH0SE8P0OSHI100KC3041G68C04KO34K02AC3> <8000020G1HM130CGO08PG69804K8330G120130Q00089G68C04CG6000004E0026D5N38> <KBD6IOM5D2000EF001NK5TF0HU8AJBI05T70LO5E187F003V7I1RG0NKL59GC00000AKX> <0004HJ9FE3OU0RG45S3AUBE6M4MSDDHCAQQ000VO000EURQ000SU003AUBQU13SGLIF40> <ANGTTLF5T70DO3E0OLF003PTI1RK4LF1U9F9B2G00KS1SF0DO22U1MS5SGF3O2E0ONGDM> <G00FPG01NL5TF0HS82URI05839TUCE07I057OF3O2E0ONGDHDSQ0VSGC0760O000510C0> <0007VUC1G000B20FS00000401X008L00O3400000685H9SC0206018HH9SCJBG0820X00> <07X00FA40O000030CGO02OGM342OKU6X000601G8GC1T001620880C1I900560P400410> <N400G80264CG0O34602081G000T20820C1I300520880C2D000020O0A01DG0O34602C0> <000401X00E300O34000002C7HU7002060210J1SE0000820X0007X00FA40O000030CGO> <09OG6163OV3G60P400630CI8028GO0G00000X0006VVRF5NM20C00088G20G30CGO018G> <20030CGO098G4030H0O3Q002A40GG0O34G00OC1I90092204200SG0C8P000A60CG8O44> <M000C1I301U60P1G07H064360P1G0IG0001X00DF00O340000081A180003G603RHH058> <5000820X0007X00FA40O000030CGO0DH06000188320AGB0G20C00041060002CG30001> <C81G000P40O000E104006111VVVI0C00098G20G30CGO038G20030CGO0A8GQ00CG4TK1> <DF4LO56UR43NAVVU6000O4860UG00KH044060P400130CI8038GO10G03403I68274CG8> <E8P0OOBI2008O3Q001I45G84081100I08G8BVS1100LI2008O3Q001I45GGG2201O0K09> <0GG23VUO0NI2008O3Q001I42GGG230280M09J0E000AOGM02G37C106MO415NM82B0001> <NM1J0CGO0A80000G0401X00BF00O34000002K0JM8002060390L04S0000820X0007X00> <FA40O000030CGO09OG61A09R5060P400630CI8028H40G00000X000900J4GVMG05I8FQ> <P060004481081G68C00K81001G68C04K8201G8GC1T001520880C1I800C60P4G04H1G2> <100E8064CG8E8P0O0A61CG822009G6800C0O34C044420880030U86C1I002Q20O84Q1S> <G8O44M000C1I302F60P1G07H074260P0G1A108K4P0HG6G804K8210I88C1I30152088A> <C1K202U20806C1I3015208O6C1I503620804C1I301520888C1I30150000200G0401X0> <0BB00O3400000I64M000020600R0I9P8000041G0014SK0000010C0000000000X0003X> <00F440O00001084001HG7K002SO36001I42SG4C1P080A60J0CHO05PG68K02C8202008> <C1I300N210060400G0360P1G0BH080000G0000G0401X00EJ00O340000169720000206> <0402M2000000820X0007X00FA40O000030CGO0DGG6J4JH21060P400630CI8028HA0G0> <0000X000C00A000000900001060004481081G68C00K81001G68C04K8H002ON45FVLJ6> <CPG0ELVDQ803C000003NG00001G8GC1T001520880C1I800C60P4G04H102100E8064CG> <00530688C1I102A20O07I1KHCO34407640KHGO34205UC22B00060P1G1BJ0CGO058GDI> <1GGLK300P86Q330CGO098G621KHB436115G0030CGO0Q1G68C02882P0O88C1I103G20G> <8601J0CGO098G221J0CGO098GM228GJ43H1685Q1MHMK410R8SA230CGO0980000G0401> <X00AK00O34000002C7HO00020604VHGA8E5900820X0007X00FA40O000030CGO0J8GQ0> <000000X000400I0000005I8FR9G900000O34603CC28000060P1G0R13C2C7HS2000000> <00X000900A00000000002O00VVVS800B2SGO81G001I20820C1I300Q20800C1I301M25> <VVV00883VVAJOCHVV89FK9VVILQR0VVMF63UFVOIF8OJVPIP1TQ030H0O3Q003C40GG0O> <34G01QC1I900Q21O4200SG0C8P000A6030CG003PG68K02C840G7VVI14GGO34003CC1I> <103G21888Q1CG820001G68C0E48110HG6S0014O3Q000A40GGKO3Q0004C1T000660OG0> <0210G04H1U862130F80019G640018O3Q0006C1H000524I89I18I0KFH0H8T212HM4253> <484A5OG8KAH0H8D212GCO38003C40G0CO34603C0000401X009G00O34000006F9I0000> <206036HGA8E5900820000LGG0000020K0000000000X0003X00F440O000030CGO0D1G6> <4005OO4G000041GPT68G81G690020O34I00Q4904000X000A00A000000900001060004> <K81081G68C01481001G68C0548B002ON457VTVVVVO0EM07DG06121G7K005481101G69> <0020O34I00Q4408401P00OHI000KC0P0PG6840908300U84I630CG80M9GA9C000O3460> <54C1I300M21E84226G8K2D19G68C0548192HG68O0088253686C2IB00060P1G1I30CGO> <05HG68C05400X00BP00O34000002D7H000020602OHGA8E590082G001KU40000010C02> <O0000000X0003X00F440O000030CGO0B0G616JOI1060P400630CI8028GI0000000X00> <0640O000GH041060P1G02H040060P1G0IJ0M00000G20130CGO098G4030H0O3Q002A40> <GG0O34G00OC1I90092284200SG0C8P0GSHI000KC060P000JJ0CHG0GOG601SG0C260P3> <01510K030G801I16G0O34E02E42G1004H0006A130D080LGG201J0CGO0980000G0401X> <00CH00O34000026CA4G000206021HHA40000041G00SCS50000010C00L33H800000830> <0B8PGA0000020O04267A000000G601AHJ2G0000041G0D00000000000000000G0401X0> <0E940O000030C800EOG202J0CGO00PG6800008100HG68C008O34600KC1I000G60OG00> <TH040560P1G0530C800EOG202J0CGO05HG68402C8100HG68C02KO32003M40G0KO3460> <20C1I200T20804C1I300V60OG00TH040560P1G0L30CHG09OG20130CGO0A9G64007C81> <019G68C06GO34A03240G08O3460364300500X0005X00CN00O340000265C414I020602> <EX0006X00FG40O000030CGO001G7K008KO34200E41G0F41069G7K009C820GFUIC1H00> <1S60UG0111044160P000J30DO00FOG40400GO3Q004GC1P001V20A82C1I501N20G81Q0> <30C800I0G3I0J0D2804HG64009C81049G64008KO34A032C1H002260P1G0030C800F1G> <6S0088O34600040GG0O3U0044C1I301024G02G000002800000000000X000AX00CD00O> <35000026I30QO0020602BHKGP6M00082G004DE69LG0020O0013BHGDC0008300T00000> <X0004X00EU40O000030CGO0A8GB31I9U1008020C1I900B60P1G0611400X000840O000> <HH040060P1G02H040060P1G0JH0806121G7K004S81019G69401CO54M00040SG4O54M0> <0041SG818109G68C04SO3Q000S4100O4860UG00JJ0CI802OG402GG4O64M00040GG8O6> <4M000C1I30170000200G0401X00CU00O34000026I312O0020600VHKIDCF000820X000> <7X00FA40O00001041860UG00CH0806101G7K002S81019G640034O4C0000C1T000P60O> <G00E30HG0001G7K003G810A1G640034O34601E4300000X0005X00EE00O34000026G0L> <ACA03G601KHLQ8IK7G0820004D4JB3O0020K0013919O8F00G600000000X0004X00EU4> <0O000030F8009OG4030G0O3Q001A40G0KO4C0000C1I301A60P1G0MJ0C8009PGAO0000> <O6C0000C1O000N60P1G0AH3K00X30059AL9HG1C36L0O7N81G0SGESNX0006K9S101AKO> <ME9RBT400000401X00DP00O340000265C4154020600N2M2360000820X0007X00FA40O> <000030CGO001G7K002G81101G7K0024O44M000C1I300F60P1G08J0CGO051G68C00086> <X0007X00ER00O3400002664M000020600EX0006X00FG40O000030CGO001G68K010820> <2008C1I3000210060400G0360P1G0000001X00F700O3400002644KQ000106000HL733> <I000820001SSH4G00020K000JCJGC0002860430PGU35G0021G0AE63629P800GC07NA2> <9KA00004301U80000000000000000G0401X00E941G000030OIG0EPGD000O882066O2C> <32301421O000000000000000BJ0O0009GGJVTL3QS5X00031J1S6BG20O00080G20G30O> <GO06GG20030OGO090HI02K000003A0000025GQG000SJH0000AFK00003M800000A0000> <0000001G8GC3D001420880C32807E61H4G0410N4136E806GSG4O42000042024053001> <0C32301R61H500TH08C092HGC840EK8230A86C32203C20H86I5J0OHG0R0GE12VVG220> <08T4U0KHCO64406SC34D03521844002HF44059GD000GGO64602841G8806309GC8C0DS> <8O3F8C000G60020300801G40800065TQ02UGNFDQHD0Q52TVI45EBDR7LSBSO6000D053> <2U3IAS21EVO43TBOOL9N0LO4E42L6SI3ETS8AKSVA54J94JL4T8NE1R7M1AG6HLKED3PF> <7OGUG0KI1RF80RLMT8NFSI195SC0LFK1ONF81I1RGG005RV4GBNF33H1109FCQ23GHNEF> <1687F1AIJ2U5TJ93RC6DSJFUI2ENS41217ALOQ93P46HJG4U83P2A60TNP0LN1FFUG9V2> <UG618000010S0F1VO00000000100HGC000F8O60008O410000061H500TH084201HGC40> <0T88501809227IBC061H1G0I00001X00E700O3400000UE8I80004G603QHI9P8000082> <0004CI46180020O000F748800008301400000X0004X00EU40O000015000L6A80ILS09> <TB5BQAMULKG15B70280UMILK5G5CBQMIMS055EN019AQ0RG0KBD0E83G12LTT99A9AMUK> <KL4L6FAE03I5QG4O400000C1G001K60O0011H6VVRU207V60CGETK005B5APAMALIXLCG> <AX0006LM1SGJ47T8NA9QGB0AOKT1V89QTSGBA6P6U85IRCJI0ILTV65Q2ECVJ4SOL6FPM> <8NB4J0O00001G6000DOO30007A47VVF43NRG01BMATINCXLR03X0006X00BPZ43MAVVVV> <VVVV> (END FORLIB.RL) (REMARK End of File) |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRA.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 | /LIBRA: F4 LIBRARIAN, V24A / / / / / / / // / / / / /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. / / / / / / /LIBRA: FORTRAN IV LIBRARIAN / / / BORN OF JUD LEONARD, UNDER THE / SIGN FOR WHICH IT IS NAMED. / / / CHANGES FOR V23 / .PRINT VERSION NUMBER / .ACCEPT INPUT FROM CONSOLES WITHOUT PARITY / / / CHANGES FOR OS/8 V3D BY PAULA TIRAK / .CHANGED VERSION NUMBER TO 24A / .PUT IN NEW DATE ALGORITHM / .NO LONGER MISNAMES THE SECOND OUTPUT FILE / / / OS/8 CONSTANTS: VERS=24 PATCH="A / FETCH=1 LOOKUP=2 ENTER=3 CLOSE=4 DECODE=5 CHAIN=6 ERROR=7 USRIN=10 USROUT=11 / OUTF1=7600 /LIBRARY OUTF2=7605 /CATALOG LISTING OUTF3=7612 /UNUSED INF=7617 / EQHI=7642 SWATOL=7643 SWMTOX=7644 SWYTO9=7645 EQLO=7646 DHRES=7647 /HANDLER RESIDENCY TABLE SYSDAT=7666 /SYSTEM DATE DCTLW=7760 /DEVICE CONTROL WORD TABLE / DEVICE CONTROL WORDS HAVE THE FORM: / BIT 0 FILE STRUCTURED / BIT 1 READ ONLY / BIT 2 WRITE ONLY / BITS 3-8 DEVICE TYPE / BITS 9-11 DIR BLOCK OF CURRENT TENTATIVE FILE / / INTERNAL DEFINITIONS: F0=00 F1=10 CATBUF=2000 /IN FIELD 1 CBUFS=1 /NUMBER OF BUFFERS FOR CATALOG MODBUF=2400 /LIKEWISE MBUFS=12 /BUFFERS FOR MODULE ODEVH=7200 /OUTPUT DEVICE HANDLER (ROOM FOR 2-PAGE) IDEVH=6600 /INPUT DEVICE HANDLER / / PAGE 0 FOR LIBRA / *1 TMP1, 0 TMP2, 0 /SOME TEMPS TMP3, 0 TMP4, 0 TMP5, 0 TMP6, 0 TMP7, 0 X0, 0 /AUTO-INDEX X1, 0 X2, 0 X3, 0 X4, 0 X5, 0 X6, 0 X7, 0 USR, 200 /CURRENT USR CALL ADDRESS /LIBRA ASSUMES USR ALWAYS PRESENT LIBDVH, ODEVH /ADDRESS OF LIBRARY DEVICE HANDLER LIBU, 1 /UNIT CONTAINING LIBRARY; INITIALLY SYS: CATLEN, 0 /LENGTH OF CATALOG CATBLK, 0 /CURRENT CATALOG BLOCK IN CORE LAVAIL, 0 /NEXT AVAILABLE LIBRARY BLOCK LIBNAM, TEXT "FORLIBRL" *.-1 INFP, INF /CURRENT PLACE IN INPUT FILE LIST MODU, 0 /UNIT CONTAINING CURRENT MODULE MODDVH, IDEVH /INPUT DEVICE HANDLER ADDRESS MODLEN, 0 /LENGTH OF THIS MODULE MODBLK, 0 /FIRST BLOCK OF MODULE INLSW, 0 /NON-ZERO IF IN LIBRARY INPUT INFST, 0 /FIRST BLOCK OF INPUT FILE INBLK, 0 /NEXT INPUT BLOCK NUMBER THSBLK, 0 /READIN CONTROL FULFLG, 0 /-1 IF CAT FULL ENAM1, 0 ENAM2, 0 /HOLDER FOR ESD NAMES ENAM3, 0 0 /TEXT STOPPER FOR ENAME ESDCTR, 0 PCAT, CATBUF /POINTER TO CURRENT CATALOG BLOCK INCLUD, -1 /SW FOR NAME INCLUDED IN CATALOG CHANGD, 1 /0 IF CAT BLOCK MODIFIED PMOD, MODBUF /POINTER TO CURRENT MODULE BLOCK / TTFLAG, 0 /NON-ZERO WHEN TTY HAS INITIALIZED PCHR, TTO /OUTPUT ROUTINE TTPOS, 0 /TTY POSITION COUNTER CATCNT, 0 IOERR, 0 7421 /ERROR CODE TO MQ JMP I .+1 IOMES /LOG THE ERROR / LIBRA MAIN CONTROL / *177 /MAKES IT EASY TO CALL START START, CDF F0 JMS TTWAIT /ALLOW TTY TO COMPLETE CIF F1 JMS I USR DECODE TXTRL, 2214 /RL DEFAULT EXT TAD (INF /RESET INPUT FILE POINTER DCA INFP TAD (TTO /AND IO DEVICE DCA PCHR DCA FULFLG CDF F1 TAD I (OUTF1 SNA /NEW LIBRARY SPECIFIED? JMP LASTLB /NO, USE LAST ONE DCA LIBU /GET LIBRARY UNIT TAD (OUTF1 DCA X0 TAD I X0 DCA LIBNAM /MOVE TAD I X0 /IN DCA LIBNAM+1 /NEW TAD I X0 /NAME DCA LIBNAM+2 TAD I X0 SNA TAD TXTRL /IF NO EXT, FORCE .RL DCA LIBNAM+3 LASTLB, TAD LIBU /REGET UNIT AND (17 TAD (DCTLW-1 /ADDRESS DEV CTL TABLE DCA TMP1 TAD I TMP1 CDF F0 SMA CLA /IS DEVICE FILE-STRUCTURED? JMP NOTFS /NO, BOMB TAD (ODEVH!1 DCA OHADDR /ALLOW 2-PAGE HANDLER TAD LIBU AND (17 CIF F1 JMS I USR /GET THE HANDLER FETCH OHADDR, ODEVH!1 JMS IOERR /YOU'RE KIDDING TAD OHADDR /NOW THE REAL ADDRESS DCA LIBDVH JMP ZTEST NOTFS, JMS TTOTXT FLSTR-1 JMS CRLF JMP START / IOMES, CLA TAD (TTO DCA PCHR /ENSURE IT COMES OUT ON TTY JMS TTOTXT IOMSG-1 JMS CRLF JMP START PAGE ZTEST, CDF F1 /FIND OR CREATE LIB. TAD I (SWYTO9 /GET SWITCH WORD AND (2000 /TEST FOR /Z CDF F0 SZA CLA JMP NEWLIB /YES, ENTER NEW ONE OLDLIB, JMS FNDLIB /LOOKUP THE LIBRARY LOOKUP JMP NEWLIB /COULDN'T FIND IT / TAD LIBBLK /FIRST BLOCK OF LIBRARY DCA ZCATB TAD (CBUFS+MBUFS^200!F1 DCA ZCATC /READ ALL YOU CAN JMS ZCAT /DO THE READ CDF F1 TAD I (CATBUF /LOOK AT CONTROL WORD CLL RAR SZA CLA /IS IT A LIBRARY? JMP NOTLIB /NO, ERROR TAD I (CATBUF+3 CDF F0 DCA CATLEN /LENGTH IN BLOCKS TAD LIBBLK DCA LAVAIL /WILL BE UPDATED DURING SCAN TAD LAVAIL DCA CATBLK /CURRENT BLOCK IN BUFFER TAD CATLEN CIA DCA TMP2 /COUNTER CSLOOP, TAD (CBUFS+MBUFS TAD TMP2 SMA /WILL THE REST FIT IN BUFFER? JMP CSLAST /YES DCA TMP2 TAD (-CBUFS-MBUFS^100 DCA TMP1 /ENTRIES NOW IN CORE JMS SCAT /SCAN CATALOG TAD ZCATB /NEXT BLOCK WE'LL READ DCA CATBLK JMS ZCAT /READ SOME JMP CSLOOP CSLAST, CIA /NO OF BLOCKS WE DON'T NEED TAD (CBUFS+MBUFS JMS R6L /NO OF ENTRIES WE CAN LOOK AT CIA DCA TMP1 JMS SCAT /LOOK FOR END FULCAT, JMS TTOTXT /RAN OFF THE END CATFUL-1 JMS CRLF /** JMP LCLOSE / SCAT, 0 TAD (CATBUF-1 DCA X0 SCLOOP, CDF F1 TAD I X0 CMA /TEST FOR END SNA CLA JMP GETINF /THAT'S IT ISZ X0 ISZ X0 /IGNORE REST OF NAME TAD I X0 /GET LENGTH TAD LAVAIL /ADD TO ST BLOCK OF FREE AREA DCA LAVAIL ISZ TMP1 JMP SCLOOP CDF F0 JMP I SCAT /GO FOR NEXT BUFFER LOAD / NOTLIB, JMS PRLBNM /PRINT LIBRARY NAME JMS TTOTXT UNLIB-1 JMS CRLF JMP START PAGE NEWLIB, JMS FNDLIB ENTER JMS IOERR TAD LIBU AND (7760 CLL RTR RTR SNA /DID HE GIVE A LENGTH? STL RTL /NO, USE 2 DCA CATLEN CDF F1 TAD I (EQLO /HOW MANY EXTRA BLOCKS WANTED CDF F0 TAD CATLEN /PLUS CATALOG REQUIREMENT CLL TAD LIBLEN /MINUS AVAILABLE LENGTH SZL CLA /CHECK FOR ENUF ROOM JMP LSZERR /NO ROOM, GIVE MESSAGE / / WRITE EMPTY CATALOG / TAD (CATBUF-1 DCA X0 TAD (-MBUFS-CBUFS^400 DCA TMP1 CDF F1 DCA I X0 ISZ TMP1 JMP .-2 TAD (CATBUF-1 /RESET FOR LATER USE DCA X0 CLA CMA TAD CATLEN SPA SNA /MORE THAN ONE? JMP CATB0 /JUST ONE CIA ISZ ZCATB /START WITH SECOND CAT BLOCK ZCLOOP, CLL TAD (MBUFS+CBUFS DCA TMP1 SZL /FULL WRITE? TAD TMP1 /NO CIA TAD (MBUFS+CBUFS JMS R6R TAD (4000!F1 DCA ZCATC /SET CONTROL JMS ZCAT TAD TMP1 SPA JMP ZCLOOP /MORE TO GO CATB0, CDF F1 CLA IAC /1 IS LIBRARY CODE DCA I X0 TAD (VERS DCA I X0 /MARK LIBRA VERSION # TAD LIBLEN /JUST A GUESS CIA DCA I X0 TAD CATLEN DCA I X0 CLA CMA /END OF CAT INDICATOR DCA I X0 /MARKS FIRST AVAIL SLOT CDF F0 DCA CHANGD /FORCE A WRITE ON THIS ONE TAD ZCATB DCA LAVAIL TAD LIBBLK /LIBRARY START BLOCK DCA CATBLK /IS CURRENTLY IN BUFFER JMP GETINF /BEGIN / ZCAT, 0 CDF F0 JMS CCHK /LOOKOUT FOR CONTROL C JMS I LIBDVH ZCATC, F1 CATBUF ZCATB, 0 JMS IOERR TAD ZCATC JMS R6L AND (17 TAD ZCATB DCA ZCATB ISZ CHANGD /SET UNMODIFIED SW JMP I ZCAT JMP .-2 / FNDLIB, 0 TAD I FNDLIB DCA USRCOD ISZ FNDLIB TAD (LIBNAM DCA LIBBLK TAD LIBU AND (17 CIF F1 JMS I USR USRCOD, 0 LIBBLK, LIBNAM LIBLEN, 0 /NEG, REMEMBER JMP I FNDLIB /COULD'T DO IT TAD LIBBLK /FIRST BLOCK DCA ZCATB /OF CATALOG ISZ FNDLIB JMP I FNDLIB LSZERR, JMS TTOTXT SMALL-1 JMS CRLF JMP START /GO FOR MORE PAGE / / SETUP POINTERS AND THINGS FOR NEXT INPUT MODULE / GETINF, CLA CMA DCA INCLUD /SET NO-NAME-INCLUDED SW TAD INLSW /ARE WE GETTING INPUT FROM A LIBR? SZA CLA JMP INLIB /YES-GET NEXT MODULE THEREIN NXTINF, CDF F1 TAD I INFP /UNIT AND LEN OF NEXT IN FILE SZA /IS THERE ONE? JMP FTCHIN /YES TAD I (SWATOL AND (1000 /TEST FOR /C CDF F0 SNA CLA JMP LCLOSE /NO MORE JMS SAVRES /PRESERVE DEV HANDLER RESIDENCY JMS TTWAIT /FINISH ANY TYPING CIF F1 JMS I USR /NEW LINE CONTINUES OLD DECODE 2214 /RL DEFAULT EXT 0 /DO NOT DELETE TENTATIVE FILES JMS RSTRES /RESTORE RESIDENCY TABLE TAD (INF DCA INFP /RESET INPUT FILE POINTER JMP NXTINF /TRY AGAIN FTCHIN, DCA MODU /UNIT CONTAINING INPUT MOD ISZ INFP TAD I INFP DCA INFST /START OF INPUT FILE ISZ INFP TAD INFST DCA MODBLK /IN THIS CASE, FILE=MODULE TAD MODU AND (7760 CIA CLL RTR RTR DCA MODLEN TAD (IDEVH!1 DCA INDVH /TENTATIVE HANDLER ADDR CDF F0 TAD MODU AND (17 CIF F1 JMS I USR FETCH INDVH, IDEVH!1 /TENTATIVE INPUT HANDLER ADDR JMS IOERR /DON'T GIVE ME THAT TAD INDVH DCA MODDVH /DEVICE HANDLER ADDRESS DCA THSBLK /FORCE READIN TO READ LUKMOD, TAD MODBLK /FIRST BLOCK OF MODULE DCA INBLK /INITIALIZE READIN JMS READIN /GET FIRST BLOCK CDF F1 CLA CMA /-1 TAD I PMOD /LOOK AT IDENTIFIER CDF F0 SNA JMP GOTLIB /ITS A LIBRARY CLL RTR SZA CLA /IS IT A MODULE JMP BADINF /BAD INPUT TAD LIBBLK /MAKE SURE CIA TAD LIBLEN /THAT MODULE TAD LAVAIL /FITS IN LIBRARY CLL SNA /CHECK FOR TOO LONG HERE TOO** JMP OVFLO /IT IS TOO LONG TAD MODLEN SNL CLA JMP NXTEBK /GO GETTUM OVFLO, JMS TTOTXT TOOBIG-1 JMS CRLF JMP GETINF BADINF, JMS TTOTXT NOTMOD-1 JMS CRLF JMP GETINF / GOTLIB, TAD MODLEN SNA CLA JMP LB2BIG /CAN'T DO A LOOKUP IF G. T. 255 ISZ INLSW /SET IN-LIBRARY SWITCH JMP INLIB LB2BIG, JMS TTOTXT L2BMSG-1 JMS CRLF JMP START PAGE / GET NEXT MODULE FROM LIBRARY / INLIB, TAD INFST /START OF INPUT FILE DCA INBLK /IS WHAT WE WANT JMS READIN /BRING CATALOG INTO MODULE BUFFER TAD (3 TAD PMOD DCA TMP1 CDF F1 TAD I TMP1 /GET CATALOG LEN CIA DCA TMP1 /HOLD COUNTER IN CASE OF FULL CATALOG TAD INFST DCA INBLK /WE WANT THE SAME ONE AGAIN TAD INFST DCA TMP3 /INIT ACCUMULATED MODULE START BLOCK DCA MODLEN /INITAIL MOD LEN IS ZERO INLSC1, JMS READIN /GET CATALOG BLOCK TAD (-100 DCA TMP2 /COUNT ENTRIES IN CAT BLOCK INLSC2, CDF F1 TAD I PMOD /LOOK FOR END-OF-CATALOG WORD CMA SNA CLA JMP NDLSC /END OF SCAN TAD (3 TAD PMOD /POINT TO LENGTH DCA TMP5 TAD I TMP5 SNA CLA /FIRST ENTRY FOR A MODULE? JMP NOLEN /NO, DO NOT UPDATE TAD MODLEN TAD TMP3 /UPDATE MODULE STARTING BLOCK DCA TMP3 TAD I TMP5 /GET THIS LENGTH DCA MODLEN /FOR THIS MODULE NOLEN, TAD MODBLK /COMPARE LAST MODULE STARTING BLOCK CMA CLL TAD TMP3 /TO ACCUMULATED START BLOCK SNL CLA /INTERESTING? JMP NOTYET /NO TAD I PMOD /YES; WAS NAME DELETED? SZA CLA JMP GLMOD /NO, WE'VE GOT A GOOD MODULE NOTYET, TAD (4 TAD PMOD /POINT TO NEXT NAME DCA PMOD ISZ TMP2 /END OF CAT BLOCK? JMP INLSC2 /NO ISZ TMP1 /YES; END OF CATALOG? JMP INLSC1 /NO, GET NEW BLOCK NDLSC, DCA INLSW /YES, NO LONGER IN A LIBRARY JMP NXTINF /GET ANOTHER FILE GLMOD, TAD TMP3 /GET STARTING BLOCK DCA MODBLK /OF MODULE JMP LUKMOD /AND GO GET THE MODULE L2BMSG, TEXT "INPUT LIBRARY TOO BIG";0 PAGE / PROCESS LOOP FOR ONE MODULE / NXTEBK, TAD (3 TAD PMOD /ADDR OF FIRST ESD-1 DCA X0 /RESET POINTER TO NAMES TAD (-52 /PER BLOCK COUNT DCA ESDCTR ESDLUP, CDF F1 TAD I X0 DCA ENAM1 TAD I X0 DCA ENAM2 TAD I X0 DCA ENAM3 TAD I X0 /TYPE CODE CDF F0 TAD (ESDTAB /DISPATCH FROM TBL DCA TMP1 JMP I TMP1 ESDTAB, JMP ESDEND /0=END OF ESD TABLE JMP DUPLUK /1=ENTRY=LOOK FOR /DUPLICATE NAME JMP ESDLND /2=EXTERN=IGNORE NAME JMP ESDLND /3=FORT COMMON=IGNORE JMP DUPLUK /4=PROG SECTION HLT /5=MUL ENTRY=DOESN'T /EXIST HLT /6=MUL SECTION=DITTO JMP DUPLUK /7=SECT8 JMP ESDLND /10=COMMZ JMP DUPLUK /11=FIELD1 / / LOOK FOR DUPLICATION OF THIS ESD SYMBOL / DUPLUK, TAD CATLEN CIA DCA TMP1 /COUNT LENGTH OF CAT TAD CATBLK CIA TAD LIBBLK /ARE WE AT FIRST BLOCK? SZA CLA JMS CHGCHK /CHECK FOR BLOCK MODIFIED TAD LIBBLK DCA NXTCAT /SETUP FOR FIRST BLOCK OF CAT TAD CATLEN CIA DCA CATCNT GETCB, JMS GCATB /GET IT TAD (CATBUF-1 DCA X1 TAD (-100 /COUNT ENTRIES/BLOCK DCA TMP2 CDF F1 CBSRCH, TAD I X1 /LOOK AT NAME CMA SNA JMP CHKI /END OF CATALOG-LOOK FOR /I IAC /COMPLETE THE CIA TAD ENAM1 /COMPARE SZA CLA JMP NOMTCH TAD I X1 CIA TAD ENAM2 SZA CLA JMP NOMTCH TAD I X1 /LAST CHANCE CIA TAD ENAM3 SNA CLA JMP GOTMAT /EQUAL! NOMTCH, TAD X1 AND (-4 TAD (3 /BUMP TO NEXT DCA X1 ISZ TMP2 JMP CBSRCH JMS CHGCHK /CHECK FOR MODIFIED BLOCK ISZ TMP1 /END OF CATALOG? JMP GETCB /NO, GET NEXT JMS TTOTXT CATFUL-1 JMS CRLF CLA CMA DCA FULFLG JMP ESDEND /PUT THAT, IF POSSIBLE GOTMAT, CDF F0 JMS TTOTXT ENAM1-1 /PRINT THE NAME JMS TTOTXT NDUP-1 /WHICH TO KEEP? CDF F1 TAD I (SWATOL CDF F0 AND (10 /TEST /I SNA CLA JMP CHKR /NO, LOOK FOR /R GMASK, JMS TTOTXT KEEP-1 JMS WAITOP JMP ESDLND /DEFAULT TO THE OLD ONE TAD (-"O SNA JMP ESDLND /KEEP OLD IAC /IS IT "N"? SZA CLA JMP GMASK /TRY AGAIN JMP DELTO /DELETE THE OLD PAGE CHKR, JMS CRLF CDF F1 TAD I (SWMTOX AND (100 /TEST /R SNA CLA JMP ESDLND /DEFAULT:KEEP THE OLD ONE DELTO, CDF F1 TAD X1 AND (-4 CIA CMA /BACK UP POINTER DCA X1 DCA I X1 /CLEAR DCA I X1 /OLD DCA I X1 /NAME ISZ X1 /SKIP OVER LENGTH DCA CHANGD /BLOCK HAS BEEN MODIFIED JMP NXTE /ENTER AT END OF LOOP NDSCN, CDF F1 TAD I X1 /LOOK AT NEXT CMA SNA CLA JMP ENDCAT /NOW WE'RE THERE TAD X1 TAD (3 /BUMP TO NEXT NAME DCA X1 NXTE, ISZ TMP2 JMP NDSCN JMS CHGCHK /LOOK OUT FOR CHANGES ISZ CATCNT /END OF CAT ? SKP JMP FULCAT /NO MORE PUSSY JMS GCATB TAD (CATBUF-1 DCA X1 TAD (-100 DCA TMP2 JMP NDSCN CHKI, TAD I (SWATOL /LOOK AT /I SW AND (10 SNA CLA JMP ENDCAT /NOT SET JMS TTOTXT ENAM1-1 /TYPE ESD NAME JMS TTOTXT NCLUD-1 /INCLUDE IT? IANS, JMS WAITOP JMP ENDCAT /DEFAULT TO INCLUDE TAD (-"Y SNA JMP ENDCAT /YES, INCLUDE TAD ("Y-"N SZA CLA /IS IT "N"? JMP IANS /NO, TRY AGAIN JMP ESDLND ENDCAT, TAD X1 /POINT TO EMPTY SLOT AND (-4 CIA CMA DCA X1 JMP INSERT PAGE / THIS ESD GOES IN THE CATALOG / INSERT, CDF F1 TAD ENAM1 /MOVE DCA I X1 /NAME TAD ENAM2 /TO DCA I X1 /LIBRARY TAD ENAM3 /CATALOG DCA I X1 ISZ INCLUD /IS THIS THE FIRST? SKP TAD MODLEN /YES, GET THE LENGTH DCA I X1 /AND STORE 4TH WORD DCA CHANGD /SET CAT MODIFIED SW CLA IAC TAD X1 /CHECK FOR END OF BLOCK AND (377 SZA CLA JMP MARKND /NO, MARK END OF CAT JMS CHGCHK /WRITE THIS BLOCK CDF F1 TAD (-400 DCA TMP1 /SET COUNT FOR BLOCK LEN TAD (CATBUF-1 DCA X1 /SET POINTER CLA CMA DCA I X1 ISZ TMP1 JMP .-2 /CLEAR THE BLOCK DCA CHANGD ISZ CATBLK JMP ESDLND MARKND, CLA CMA DCA I X1 /MARK NEW END OF CAT ESDLND, CDF F0 CLA STL RTL /TWO TO SKIP VALUE TAD X0 DCA X0 ISZ ESDCTR /DONE WITH BLOCK? JMP ESDLUP /NO, GET NEXT JMS READIN /GET NEXT BLOK JMP NXTEBK /RESET POINTERS AND CONTINUE ESDEND, ISZ INCLUD /CHECK FOR ANY NAMES OUT JMP CPYMOD /YES, COPY MODULE INTO LIBRARY JMS TTOTXT /SORRY, DIDN'T MAKE IT NONEIN-1 JMS CRLF ISZ FULFLG JMP GETINF /TRY NEXT JMP LCLOSE CPYMOD, TAD MODBLK /GET IN FILE STRT BLOCK DCA INBLK TAD MODLEN CIA DCA TMP1 TAD LAVAIL /FIRST AVAILABLE BLOCK DCA NXTOBK CPYLUP, JMS READIN /READ BLOCK OF INPUT TAD PMOD DCA PNXTOB JMS I LIBDVH /CALL OUTPUT HANDLER 4200!F1 PNXTOB, MODBUF NXTOBK, 0 /NEXT OUTPUT BLOCK NUMBER JMS IOERR ISZ NXTOBK /BUMP BLOCK NUMBER ISZ TMP1 /CHECK LENGH JMP CPYLUP TAD NXTOBK DCA LAVAIL /UPDATE AVAILABLE POINTER JMP GETINF /GO FOR NEXT PAGE CHGCHK, 0 CDF F0 /PRECAUTION TAD CHANGD /HAS BLOCK BEEN MODIFIED? SZA CLA JMP I CHGCHK /NO, NOTHING TO DO TAD CATBLK DCA ZCATB /WRITE THE BLOCK TAD (4200!F1 DCA ZCATC JMS ZCAT JMP I CHGCHK /OK / / GCATB, 0 CDF F0 TAD NXTCAT CIA TAD CATBLK /IS IT IN CORE? SNA CLA JMP SOEZ /YES, ITS EZ TAD NXTCAT CIA TAD LIBBLK TAD CATLEN SPA SNA CLA /CHECK FOR INTERNAL ERROR JMP FULCAT /** TAD NXTCAT DCA ZCATB TAD (200!F1 /SET FOR READ DCA ZCATC JMS ZCAT TAD NXTCAT /NEXT BLOCK DCA CATBLK /IS IN CORE SOEZ, ISZ NXTCAT JMP I GCATB NXTCAT, 0 PAGE LCLOSE, JMS CHGCHK TAD USRCOD TAD (-ENTER /DID WE ENTER A NEW FILE? SZA CLA JMP CATLST /NO, GO LIST CATALOG TAD LIBBLK /GET LEN CIA CDF F1 TAD I (EQLO /GET USER EXTENSION REQUEST CDF F0 TAD LAVAIL /PLUS CURRENT END DCA TMP1 TAD TMP1 CLL TAD LIBLEN /CHECK FOR POSSIBLE SNL CLA JMP .+4 TAD LIBLEN /CAN'T GIVE ALL HE WANTS CIA SKP TAD TMP1 DCA LCLEN /SET CLOSE LENGTH TAD CATLEN CMA TAD LCLEN /COMPARE CAT LEN TO LIB LEN SPA SNA CLA JMP NOLIB /THERE'S NO POINT TAD LIBBLK /GET FIRST BLOCK DCA NXTCAT JMS GCATB CDF F1 TAD LCLEN /ACTUAL LIBRARY LENGTH DCA I (CATBUF+2 CDF F0 DCA CHANGD JMS CHGCHK /WRITE IT TAD LIBU AND (17 CIF F1 JMS I USR CLOSE LIBNAM LCLEN, 0 JMS IOERR JMP CATLST /GO LIST THE CATALOG / NOLIB, JMS TTOTXT WHYCLS-1 JMS CRLF JMP START PAGE / LIST THE CATALOG / CATLST, JMS OOPEN /OPEN LISTING FILE JMP START /NONE DESIRED TAD (OCHAR /SETUP FOR DEVICE-INDEPENDENT DCA PCHR /OUTPUT TAD (214 /AT TOP OF PAGE JMS I PCHR JMS CRLF JMS TTOTXT LBV-1 JMS TTOTXT CATOF-1 JMS PRLBNM /PRINT THE NAME CDF F1 TAD I (SYSDAT CDF F0 SNA JMP NODATE /DON'T KNOW THE DATE DCA TMP1 JMS TTOTXT ON-1 CLA /THE FOLLOWING CODE GETS THE DAY DCA TMP2 TAD TMP1 /GET THE DATE RTR /ROTATE THREE RIGHT AND MASK RAR /TO GET THE DAY IN OCTAL AND (37 JMS MAK8BT /MAKE IT 8-BIT AND PRINT DCA TMP2 TAD TMP1 /GET THE DATE BACK AND (7400 /MASK TO GET THE MONTH BITS JMS R6R /MONTH*4 (IN OCTAL) DCA TMP2 /PUT IN TEMP. VARIABLE TO SAVE IT TAD TMP2 /GET IT BACK RTR /MONTH TAD TMP2 TAD (MONTHS-6 DCA .+2 /ADDRESS OF MONTH FROM TABLE JMS TTOTXT /PUT IT IN THE TEXT LINE 0 TAD TMP1 /GET THE DATE---TO FIND THE YEAR AND (7 /MASK TO GET THE YEAR OFFSET BITS DCA TMP4 /SAVE THEM DCA TMP2 TAD I (7777 /GET THE DATE EXTENSION BITS AND (600 CLL RTR /ROTATE TO GET THEM INTO BIT RTR /POSITIONS 7 AND 8 TAD (106 /ADD 70(ORIGINAL BASE YEAR) TAD TMP4 /ADD IN THE YEAR OFFSET BITS JMS MAK8BT /MAKE 8-BIT AND PRINT NODATE, JMS CRLF JMP PRCAT /TITLE IS DONE, PRINT CAT MAK8BT, 0 /ROUTINE TO CONVERT TO 8-BIT AND PRINT CLL /FIRST CONVERT TO DECIMAL CONVYR, TAD (-12 /KEEP SUBTRACTING 12 SPA /HAVE THE YEAR JMP GETDG1 ISZ TMP2 /HOLDS THE FIRST DIGIT OF YEAR JMP CONVYR GETDG1, TAD (12 /GET THE SECOND DIGIT DCA TMP3 /SAVE IT TAD TMP2 /GET THE FIRST DIGIT SNA /FIRST DIGIT IS A ZERO JMP PRDIG2 /PRINT THE SECOND DIGIT TAD (260 /MAKE FIRST DIGIT OF YEAR 8-BIT JMS I PCHR /PRINT IT PRDIG2, TAD TMP3 /GET THE SECOND DIGIT TAD (260 /MAKE SECOND DIGIT OF YEAR 8-BIT JMS I PCHR /PRINT IT JMP I MAK8BT /RETURN PAGE / LIST ALL ENTRIES IN THE CATALOG / PRCAT, TAD CATLEN CIA DCA TMP1 TAD LIBBLK DCA NXTCAT CLA CMA DCA TMP3 /SET LINE COUNTER CATLUP, JMS GCATB TAD (CATBUF-1 DCA X0 TAD (-100 DCA TMP2 CATLP2, CDF F1 TAD I X0 /GET FIRST WORD OF NAME SNA JMP EMPTY /NOT AN ESD NAME CMA SNA JMP NDCATL /END OF CATALOG CMA /RESTORE FIRST WORD JMS TTO2 /PRINT JMP NDNAM /A SHORT NAME CDF F1 TAD I X0 JMS TTO2 JMP NDNAM CDF F1 TAD I X0 JMS TTO2 NOP NDNAM, ISZ TMP3 /MORE ROOM ON THIS LINE? JMP SAMLIN /SURE JMS CRLF TAD (-10 /SETUP FOR 8 PER LINE DCA TMP3 JMP EMPTY SAMLIN, JMS TAB /SPACE OVER TO NEXT NAME EMPTY, TAD X0 AND (-4 TAD (3 DCA X0 /POINT TO NEXT ISZ TMP2 JMP CATLP2 /GO FOR NEXT ISZ TMP1 /MORE BLOCKS? JMP CATLUP /YES JMS CRLF JMS TTOTXT CATFUL-1 NDCATL, JMS CRLF TAD (214 /EJECT PAGE JMS I PCHR JMS OCLOSE /CLOSE THE FILE JMP START PAGE / USEFUL OUTPUT THINGS / TTO, 0 DCA TTOCHR JMS TTWAIT TAD (200 KRS TAD (-217 /CRTL/O CHECK SNA CLA KSF SKP JMP I TTO TAD TTOCHR TLS DCA TTFLAG JMP I TTO TTOCHR, 0 TTWAIT, 0 TAD TTFLAG SNA CLA JMP I TTWAIT JMS CCHK /BEWARE OF CTRL/C TSF JMP .-2 /WAIT TILL DONE DCA TTFLAG /CLEAR BUSY FLAG JMP I TTWAIT CCHK, 0 KSF JMP I CCHK /NOTHING TO WORRY ABOUT TAD (200 KRS TAD (-203 SNA CLA /WAS IT CONTROL C? JMP I (7600 /YES JMP I CCHK TTO2, 0 DCA TMP7 TAD TMP7 JMS R6R JMS TTO2A TAD TMP7 JMS TTO2A ISZ TTO2 JMP I TTO2 TTO2A, 0 AND (77 SNA JMP I TTO2 TAD (-40 SPA TAD (100 TAD (240 JMS I PCHR ISZ TTPOS /BUMP POSITION COUNT JMP I TTO2A R6R, 0 CLL RTR RTR RTR JMP I R6R R6L, 0 CLL RTL RTL RTL JMP I R6L TTOTXT, 0 CDF F0 TAD I TTOTXT DCA X7 ISZ TTOTXT /BUMP PAST POINTER TAD I X7 JMS TTO2 JMP I TTOTXT JMP .-3 CRLF, 0 DCA TTPOS /RESET POSITION TAD (215 JMS I PCHR TAD (212 JMS I PCHR JMP I CRLF TAB, 0 /PSEUDO-TAB GENERATOR TAD (240 JMS I PCHR ISZ TTPOS TAD TTPOS AND (7 SNA CLA /IS POSITION A MULTIPLE OF 8 JMP I TAB JMP TAB+1 /NO, TRY MORE PAGE WAITOP, 0 TAD (277 /QUESTION JMS TTO DCA RETCHR WREP, JMS TTI /WAIT FOR REPLY TAD (-215 SNA JMP DFALT TAD (215-240 /PRINTING? SPA JMP WREP /NO, TRY AGIAN TAD (240 DCA RETCHR TAD RETCHR ECHO, JMS TTO JMS TTI TAD (-215 SNA JMP GOTREP TAD (215-377 /LOOKOUT FOR RUBOUT! SNA JMP RUBOUT TAD (377 JMP ECHO RUBOUT, JMS CRLF JMP WAITOP+1 GOTREP, ISZ WAITOP /GOT A REAL ANSWER DFALT, JMS CRLF TAD RETCHR JMP I WAITOP RETCHR, 0 / TTI, 0 KSF /WAIT FOR A KEY JMP .-1 KRB AND (177 /TAKE CARE OF PARITY TAD (-3 /CTRL C? SNA JMP I (7600 /YES TAD (203 /GET ORGINIAL CHAR BACK JMP I TTI PAGE / / INPUT BUFFERRER AND STUFF / READIN, 0 CDF F0 TAD INBLK TAD THSBLK /-FIRST BLOCK FOLLOWING BUFFER CONTENTS CLL TAD (MBUFS SNL /IS IT IN CORE? JMP MUSTRD /NO, WE HAVE TO DO A READ CLL RTR RTR RAR /TIMES 400 SETP, TAD (MODBUF /PLUSS BUFFER ADDR DCA PMOD /POINTS TO BLOCK ISZ INBLK /READY FOR NEXT JMP I READIN MUSTRD, CLA /THIS ONE'S HARDER TAD INBLK DCA RDBLK TAD INBLK TAD (MBUFS CIA DCA THSBLK JMS I MODDVH MBUFS^200!F1 MODBUF RDBLK, 0 JMS IOERR JMP SETP /OK / ROUTINES TO SAVE AND RESTORE / DEVICE HANDLER RESIDENCY TABLE / SAVRES, 0 TAD (DHRES-1 DCA X0 TAD (SVRES-1 DCA X1 JMS MOVRES JMP I SAVRES RSTRES, 0 TAD (SVRES-1 DCA X0 TAD (DHRES-1 DCA X1 JMS MOVRES JMP I RSTRES MOVRES, 0 TAD (-17 DCA TMP1 CDF F1 TAD I X0 DCA I X1 ISZ TMP1 JMP .-3 CDF F0 JMP I MOVRES SVRES=7400 / PRINT THE LIBRARY NAME / PRLBNM, 0 TAD LIBNAM JMS TTO2 /FIRST 2 CHARS JMP PREXT TAD LIBNAM+1 JMS TTO2 JMP PREXT TAD LIBNAM+2 JMS TTO2 NOP PREXT, TAD (". JMS I PCHR TAD LIBNAM+3 JMS TTO2 JMP I PRLBNM JMP I PRLBNM PAGE / OUTPUT HANDLERS STOLEN FROM PIP OUFLD=F1 OUCTL=MBUFS^200!4000!F1 OUBUF=MODBUF / / INITIALIZE FOR OUTPUT / OUSETP, 0 TAD (OUCTL&3700 /BUFFER SIZE IN DBL WORDS CIA /NEGATE IT (PAL10 BLOWS) DCA OUDWCT TAD (OUBUF DCA OUPTR /INITIALIZE WORD POINTER TAD OUJMPE DCA OUJMP /INITIALIZE 3-WAY CHARACTER SWITCH JMP I OUSETP / / STORE CHARACTERS IN OUTPUT BUFFER / IN PS8 FORMAT (YOU KNOW, 3 CHARS / IN 2 WORDS THE WRONG WAY) / OCHAR, 0 AND (377 DCA OUTEMP 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 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 2ND WORD FROM LO 4 BITS TAD OUJMPE DCA OUJMP /RESET SWITCH ISZ OUPTR ISZ OUDWCT /BUMP COUNTER EVERY 3 CHARS JMP OUCOMN TAD (OUCTL /LOAD CONTROL WORD FOR A FULL WRITE JMS I (OUTDMP /DUMP THE BUFFER 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, CDF F0 JMP I OCHAR OUTEMP, 0 OUPOLD, 0 OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 / / MOVE OUTPUT FILE NAME TO FIELD 0 / OFNAME, 0 TAD (OUTF2 DCA X0 /NAME OF CAT LIST FILE CDF F1 TAD I X0 DCA OUFNAM /FIRST 2 CHARS TAD I X0 DCA OUFNAM+1 TAD I X0 DCA OUFNAM+2 TAD I X0 SNA TAD TXTCA /DEFAULT CAT EXT DCA OUFNAM+3 CDF F0 /RESTORE FIELD JMP I OFNAME OUFNAM, ZBLOCK 4 TXTCA, 301 PAGE OOPEN, 0 CDF F1 TAD I (OUTF2 /GET DEVICE CODE, LEN DCA OUELEN /HOLD IT A MO JMS I (OFNAME /GET FILE NAME INTO FIELD 0 TAD OUELEN /CHECK FOR NULL FILE SNA CLA JMP I OOPEN /NOTHING TO OPEN TAD OUNAME /RESET ENTER CALL DCA OUBLK TAD (IDEVH!1 DCA OUHNDL TAD OUELEN /THE UNIT CIF F1 JMS I USR FETCH /ASSIGN, FETCH HANDLER OUHNDL, 0 /OUTPUT DEVICE HANDLER ENTRY JMS IOERR /HUH? TAD OUELEN /UNIT AGAIN CIF F1 JMS I USR ENTER /ENTER OUTPUT FILE OUBLK, OUFNAM /REPLACED WITH STARTING BLOCK OUELEN, 0 /REPLACED WITH LENGTH OF HOLE JMS IOERR /YOU BLEW IT!!! DCA OUCCNT JMS I (OUSETP ISZ OOPEN JMP I OOPEN OUTDMP, 0 DCA OUCTLW /STORE THE CONTROL WORD TAD OUCCNT SNA ISZ OUCTLW TAD OUBLK DCA OUREC /COMPUTE STARTING BLOCK TAD OUCTLW JMS R6L AND (17 /COMPUTE THE NUMBER OF RECORDS TAD OUCCNT /UPDATE SIZE OF FILE DCA OUCCNT TAD OUCCNT CLL CML TAD OUELEN SNL SZA CLA /EXCEED GIVEN LENGTH ? JMS IOERR /YES - ERROR CDF F0 JMS I OUHNDL OUCTLW, 0 OUBUF OUREC, 0 JMS IOERR JMP I OUTDMP OCLOSE, 0 TAD (232 /OUTPUT A CTRL/Z JMS I PCHR FILLLP, JMS I PCHR TAD (77 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 TAD (4000!OUFLD /PUT IN FIELD AND WRITE BITS JMS OUTDMP NODUMP, CIF CDF F1 TAD I (OUTF2 CDF F0 JMS I USR CLOSE /CLOSE THE OUTPUT FILE OUNAME, OUFNAM /POINTER TO OUTPUT FILE NAME OUCCNT, 0 JMS IOERR /ERROR WHILE CLOSING - BAD!! JMP I OCLOSE /ALL DONE PAGE / MESSAGES / LBV, TEXT "LIBRA V " *.-1 VMESG, VERS&70^7+VERS+6060 PATCH&77^100+40 4000 NONEIN, TEXT "MODULE NOT INCLUDED";0 FLSTR, TEXT "LIBRARY MUST BE ON A FILE-STRUCTURED DEVICE";0 SMALL, TEXT "INSUFFICIENT SPACE FOR LIBRARY";0 NOTMOD, TEXT "INPUT NOT A MODULE";0 TOOBIG, TEXT "INPUT TOO BIG FOR LIBRARY";0 UNLIB, TEXT " IS NOT A LIBRARY";0 NDUP, TEXT " IS DUPLICATE NAME";0 KEEP, TEXT "; KEEP OLD OR NEW";0 CATFUL, TEXT "CATALOG IS FULL";0 NCLUD, TEXT ": INCLUDE";0 WHYCLS, TEXT "LIBRARY TOO SMALL FOR USE; START OVER";0 IOMSG, TEXT "I/O ERROR";0 CATOF, TEXT "CATALOG OF ";0 ON, TEXT " ON ";0 CS197, TEXT ", 197";0 MONTHS, TEXT "-JAN-@@@@@-FEB-@@@@@-MAR-@@@@" TEXT "-APR-@@@@@-MAY-@@@@@-JUN-@@@@" TEXT "-JUL-@@@@@-AUG-@@@@@-SEP-@@@@" TEXT "-OCT-@@@@@-NOV-@@@@@-DEC-@@@@" $ |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/ABS.RA.
> > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | / / VERSION 5A 4-27-77 PT / SECT IABS ENTRY ABS BASE 0 ABS, FLDA 0 /GET RETURN ADDRESS STARTD FSTA RETRN FADD TWO /GET ADDRESS OF ARG POINTER FSTA 3 FLDA% 3 /GET ARG ADDRESS FSTA 3 STARTF FLDA% 3 /GET ARG JGE RETRN /POSITIVE, SKIP NEGATE FNEG RETRN, 0;0 TWO, 0;2 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/ACOS.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | / / / A C O S / - - - - / /SUBROUTINE ACOS(X) / / VERSION 5A 4-27-77 PT / SECT ACOS JA #ACOS TEXT +ACOS + ACOSXR, SETX XRACOS SETB BPACOS BPACOS, FNOP 0 0 XRACOS, F 0.0 ACOS8, F 0.0 ACOS7, F 0.0 FPI2AC, 1 /PI OVER 2 3110 3755 F1ACOS, F 1. FPIACS, 2 /PI 3110 3755 ORG 10*3+BPACOS FNOP JA ACOSXR 0 ACSRTN, JA . BASE 0 #ACOS, STARTD FLDA 10*3 FSTA ACSRTN FLDA 0 SETX XRACOS SETB BPACOS BASE BPACOS LDX 1,1 FSTA BPACOS FLDA% BPACOS,1 /ADDR OF X FSTA BPACOS STARTF FLDA% BPACOS /GET X FSTA ACOS8 /SAVE IT JEQ ACOSEQ /IF 0 RTN PI OVER 2 LDX -1,0 /JUMP TIME JGE .+5 LDX 0,0 FNEG FSUB F1ACOS /1-!X! JLE ACOSOK /IS IT <1.? EXTERN #ARGER TRAP4 #ARGER JA ACSRTN /AND RETURN ACOSOK, FLDA ACOS8 /X FMUL ACOS8 /X^2 FNEG /-X^2 FADD F1ACOS /1-X^2 FSTA ACOS7 EXTERN SQRT JSR SQRT /CALL SQRT JA .+4 /SQRT (1-X^2) JA ACOS7 FDIV ACOS8 /SQRT (1-X^2)/X FSTA ACOS7 EXTERN ATAN JSR ATAN /CALL ATAN JA .+4 /ATAN (SQRT(1-X^2)/X) JA ACOS7 JXN ACSRTN,0 /NO SIGN CHG NECESSARY FADD FPIACS /ADD PI IF MINUE JA ACSRTN ACOSEQ, FLDA FPI2AC /RTN PI OVER 2 IF 0 JA ACSRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/ADC.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | / / VERSION 5A 4-27-77 PT / ADSK=6534 ADRB=6533 ADST=6532 ADLM=6531 ADCL=6530 SAM=100 LINC=6141 ESF=4 PDP=2 SECT8 ADC /AD SAMPLER (UNBUFFERED, UNCOLCKED) BASE 0 STARTD FLDA 0 /GET RETURN ADDRESS FSTA ADCRET FADD L2 /GET ADDR OF ARG POINTER FSTA 0 FLDA% 0 /GET ADDR OF CHANNEL NUMBER FSTA 0 STARTF FLDA% 0 /GET THE CHANNEL NUMBER ALN 0 /FIX IT FSTA CHANEL /STORE IT FOR ADC8 TRAP4 ADC8 /GO TO PDP8 CODE TO DO THE SAMPLING FLDA SAMPLE FNORM /GET THE SAMPLE AND NORMALIZE IT FDIV L511 /SCALE BETWEEN -1 AND +1 ADCRET, JA . L2, 0;2 L511, F 511. SAMPLE, 13;0;0 CHANEL, 0;0;0 ADC8, 0 /PDP8 MODE END OF ADC IFSW 8 < ADCL /CLEAR AD LOGIC TAD CHANEL+2 /SET MULTIPLEXOR CHANNEL ADLM ADST /START CONVERSION ADSK /WAIT FOR IT JMP .-1 ADRB /READ CONVERTOR BUFFER> IFNSW 8 < TAD CHANEL+2 /CREATE FIRST SAM TAD SAM0 DCA DOSAM IOF LINC /ENTER LINC MODE WITHOUT INTERRUPTS ESF /DISABLE FAST SAM DOSAM, 0 PDP ION /BACK IN 8 MODE, TURN ON INTERRUPTS> DCA SAMPLE+1 /SAVE SAMPLE CIF CDF JMP% ADC8 IFNSW 8 < SAM0, SAM 0> |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/ALOG.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | / / / A L O G / - - - - / /SUBROUTINE ALOG(X) / / VERSION 5A 4-26-77 (MH) / SECT ALOG JA #ALOG 0 /WORKING SPACE FOR EXPONENT DIDDLE. 0 0 ALOGTM, 0 0 0 0 F2ALOG, F 2. FPI2, 1 3110 3755 / EXTERN #ARGER ALOG0, TRAP4 #ARGER JA ALGRTN /RETURN NOW. / EXTERN #ARGER ALOGM1, TRAP4 #ARGER JA ALGRTN TEXT +ALOG + ALOGXR, BPALOG, F 0.0 XRALOG, F 0.0 ALOG1, F 0.0 ALOG2, F 0.0 F1ALOG, F 1. / ALOGMG, 0 0 13 /CORRECT EXPONENT DIDDLER. / / / / ALOGL1, 0 3777 7742 / ALOGE2, 0 2613 4414 / ORG 10*3+BPALOG FNOP JA ALOGXR 0 ALGRTN, JA . ALOGL2, 7777 4000 4100 / ALOGL3, 7777 2517 0310 / ALOGL4, 7776 4113 7211 / ALOGL5, 7776 2535 3301 / ALOGL6, 7775 4746 0771 / ALOGL7, 7774 2236 4304 / ALOGL8, 7771 4544 1735 BASE 0 #ALOG, STARTD FLDA 10*3 FSTA ALGRTN FLDA 0 SETX XRALOG SETB BPALOG BASE BPALOG LDX 1,1 FSTA BPALOG FLDA% BPALOG,1 /ADDR OF X FSTA BPALOG STARTF FLDA% BPALOG /GET X JEQ ALOG0 /IF =0 THEN ERROR JLT ALOGM1 /IF<0 THEN ERROR LDX -1,0 /IF >0 THEN START DOING FSTA ALOG1 /SAVE IN A TEMP. FSUB F1ALOG /KNOCK OFF ONE. JEQ ALGRTN /IF ZERO EXIT. LOG(1)=0 JGE ALOGST /IF POSITIVE LOG>0 FLDA F1ALOG /NEGITE. INVERT IT. FDIV ALOG1 /BY DIVIDING INTO ONE. FSTA ALOG1 LDX 0,0 /RESET SIGN TO NEGATIVE. JA .+3 /AVOID USELESS LOAD INSTRUCTION. / ALOGST, FLDA ALOG1 /RECALL NUMBER. FDIV F2ALOG /CUT IN HALF. FSTA ALOGTM /PREPARE FOR EXPONENT DIDDLE. FLDA ALOGMG /SET THE EXPONENT OF THE EXPONENT TO 13. FSTA ALOGTM-3 /SO THAT NORMALIZE WILL DO JOB. FSTA ALOGTM+1 /AND ALSO ZERO OUT LOW ORDER POART OF EX. MANT. FLDA ALOGTM-1 /RECALL THE NUMBER FNORM /NORMALIZE IT. FMUL ALOGE2 /NOW MULITPLY EXPONENT BY LOG E 2 FSTA ALOG2 /AND SAVE IT FOR A SECOND. FLDA ALOG1 /RECALL THE NUMBER AGAIN. FSTA ALOGTM /STORE IN THE TEMPORARY WORKER. FLDA FPI2-2 /RECALL WORD WITH LOW ORDER ONE. FSTA ALOGTM-2 /STORE AWAY. FLDA ALOGTM /RECALL NUMBER WITH AN EXPONENT OF 1 FSUB F1ALOG /SUBTRACT AWAY. FSTA ALOG1 /AND STORE FMUL ALOGL8 /MULTIPLY BY THE CONSTANT. FADD ALOGL7 /ADD IN FMUL ALOG1 /MULT. FADD ALOGL6 /AND SO ON DOWN THE LINE. FMUL ALOG1 FADD ALOGL5 FMUL ALOG1 FADD ALOGL4 FMUL ALOG1 FADD ALOGL3 FMUL ALOG1 FADD ALOGL2 FMUL ALOG1 FADD ALOGL1 FMUL ALOG1 FADD ALOG2 /CORRECT NOW.ADD IN EXPONENT. JXN ALGRTN,0 /EXIT IF SIGN IS OK. FNEG /ELSE NEGATE IT. JA ALGRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/ALOG10.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | / / / A L O G 1 0 / - - - - - - / / VERSION 5A 4-27-77 PT / /SUBROUTINE ALOG10(X) SECT ALOG10 JA #ALOG TEXT +ALOG10+ LOGXR, SETX XRLOG SETB BPLOG BPLOG, FNOP 0 0 XRLOG, F 0.0 LOG1, F 0.0 ALOG1C, 7777 /FUDGE CONSTANT 3362 6754 ORG 10*3+BPLOG FNOP JA LOGXR 0 LOGRTN, JA . BASE 0 #ALOG, STARTD FLDA 10*3 FSTA LOGRTN FLDA 0 SETX XRLOG SETB BPLOG BASE BPLOG LDX 1,1 FSTA BPLOG FLDA% BPLOG,1 /ADDR OF X FSTA BPLOG STARTF FLDA% BPLOG /GET X FSTA LOG1 EXTERN ALOG JSR ALOG /CALL ALOG JA .+4 JA LOG1 FMUL ALOG1C /CORRECT FOR THE LOG BASE E. JA LOGRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/AMAX.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | / / VERSION 5A 4/27/77 MH / SECT AMAX0 ENTRY AMAX1 ENTRY MAX0 ENTRY MAX1 BASE 0 AMAX1, SETX XR LDX 1,3 /DON'T INTEGERIZE RESULT MAXCOM, STARTD FLDA 0 /ADDRESS OF JA .+2+2*N FSTA 3 FLDA 30 /RETURN ADDRESS FSTA RETN FLDA% 3 / JA .+2+2*N FSUB 0 /-JA . FSUB TWO /- 2 LDX 1,1 ALN 1 /DIVIDE BY TWO FNEG /-N ATX 1 LDX 0,2 /FOR ARG PICKUP FLDA% 0,2+ /ADDRESS OF FIRST ARG FSTA 3 STARTF NEW, FLDA% 3 /SAVE NEW MAX FSTA MAX SAME, JXN MORMAX,1+ /ANY MORE ARGS ? FLDA MAX /GET RESULT JXN RETN,3 /DON'T FIX JLT NEGFIX /NEGATIVE FIX ALN 0 FNORM JA RETN NEGFIX, FNEG ALN 0 FNORM FNEG RETN, JA . MORMAX, STARTD /NEXT ARG ADDRESS FLDA% 0,2+ FSTA 3 STARTF FLDA MAX /COMPARE FSUB% 3 JGE SAME /SAME MAX JA NEW /NEW MAX TWO, 0;2 MAX, 0;0;0 MAX0, MAX1, SETX XR LDX 0,3 /INTEGERIZE RESULT JA MAXCOM /GO DO IT XR, 0;0;0;0;0;0;0;0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/AMIN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | / / VERSION 5A 4/27/77 MH / SECT AMIN0 ENTRY AMIN1 ENTRY MIN0 ENTRY MIN1 BASE 0 AMIN1, SETX XR LDX 1,3 /DON'T INTEGERIZE RESULT MINCOM, STARTD FLDA 0 /ADDRESS OF JA .+2+2*N FSTA 3 FLDA 30 /RETURN ADDRESS FSTA RETN FLDA% 3 / JA .+2+2*N FSUB 0 /-JA . FSUB TWO /- 2 LDX 1,1 ALN 1 /DIVIDE BY TWO FNEG /-N ATX 1 LDX 0,2 /FOR ARG PICKUP FLDA% 0,2+ /ADDRESS OF FIRST ARG FSTA 3 STARTF NEW, FLDA% 3 /SAVE NEW MIN FSTA MIN SAME, JXN MORMIN,1+ /ANY MORE ARGS ? FLDA MIN /GET RESULT JXN RETN,3 /DON'T FIX JLT NEGFIX /NEGATIVE FIX ALN 0 FNORM JA RETN NEGFIX, FNEG ALN 0 FNORM FNEG RETN, JA . MORMIN, STARTD /NEXT ARG ADDRESS FLDA% 0,2+ FSTA 3 STARTF FLDA MIN /COMPARE FSUB% 3 JLE SAME /SAME MIN JA NEW /NEW MIN TWO, 0;2 MIN, 0;0;0 MIN0, MIN1, SETX XR LDX 0,3 /INTEGERIZE RESULT JA MINCOM /GO DO IT XR, 0;0;0;0;0;0;0;0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/AMOD.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | / / / / A M O D / - - - - / /SUBROUTINE AMOD(X,Y) / / VERSION 5A 4-27-77 PT / SECT AMOD ENTRY MOD JA #AMOD TEXT +AMOD + AMODXR, SETX XRAMOD SETB BPAMOD BPAMOD, F 0.0 XRAMOD, F 0.0 AMODX, F 0.0 ORG 10*3+BPAMOD FNOP JA AMODXR 0 AMDRTN, JA . EXTERN #ARGER AMODER, TRAP4 #ARGER FCLA JA AMDRTN BASE 0 MOD, #AMOD, STARTD FLDA 10*3 FSTA AMDRTN FLDA 0 SETX XRAMOD SETB BPAMOD BASE BPAMOD LDX 1,1 FSTA BPAMOD FLDA% BPAMOD,1 /ADDR OF X FSTA AMODX FLDA% BPAMOD,1+ /ADDR OF Y FSTA BPAMOD STARTF FLDA% BPAMOD /GET Y JEQ AMODER /Y=0 IS ERROR JGT .+3 FNEG /ABS VALUE FSTA BPAMOD FLDA% AMODX /GET X JGT .+5 FNEG /ABS VALUE LDX 0,1 /NOTE SIGN FSTA AMODX /SAV IN A TEMPORARY FDIV BPAMOD /DIVIDE BY Y JAL AMODER /TOO BIG. ALN 0 /FIX IT UP NOW. FNORM FMUL BPAMOD /MULITPLY IT. FNEG /NEGATE IT. FADD AMODX /AND ADD IN X. JXN AM,1 /CHECK SIGN FNEG AM, JA AMDRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/ASIN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | / / / A S I N / - - - - / /SUBROUTINE ASIN(X) / / VERSION 5A 4-27-77 PT / SECT ASIN JA #ASIN ASINEQ, FLDA FPI2AS /RETURN PI OVER TWO. FMUL ASIN8 /TIMES ARG. JA ASNRTN TEXT +ASIN + ASINXR, SETX XRASIN SETB BPASIN BPASIN, FNOP 0 0 XRASIN, F 0.0 ASIN8, F 0.0 ASIN7, F 0.0 F1ASIN, F 1. FPI2AS, 1 /PI OVER 2 3110 3755 ORG 10*3+BPASIN FNOP JA ASINXR 0 ASNRTN, JA . BASE 0 #ASIN, STARTD FLDA 10*3 FSTA ASNRTN FLDA 0 SETX XRASIN SETB BPASIN BASE BPASIN LDX 1,1 FSTA BPASIN FLDA% BPASIN,1 /ADDR OF X FSTA BPASIN STARTF FLDA% BPASIN /GET X FSTA ASIN8 /STORE ARG AWAY. JGE .+3 /TAKE ABSOLUTE VALUE. FNEG FSUB F1ASIN /SEE IF >1 JLE ASINOK /CONTINUE PROCESS. EXTERN #ARGER TRAP4 #ARGER /TRAP OUT. JA ASNRTN /RETURN. ASINOK, FLDA ASIN8 /X USES STRAIGHT TRIG RELATION. FNEG FMUL ASIN8 /-X^2 FADD F1ASIN /1.-X^2 JEQ ASINEQ /IF 0,FAC=PI OVER 2 FSTA ASIN7 EXTERN SQRT JSR SQRT JA .+4 JA ASIN7 FSTA ASIN7 /SQRT(1.-X^2) FLDA ASIN8 FDIV ASIN7 /X/SQRT(1.X^2) FSTA ASIN7 EXTERN ATAN JSR ATAN /TAKE THE ARCTANGENT. JA ASNRTN JA ASIN7 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/ATAN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | / / / A T A N / - - - - / /SUBROUTINE ATAN(X) / / VERSION 5A 4-27-77 PT / SECT ATAN JA #ATAN TEXT +ATAN + ATANXR, SETX XRATAN SETB BPATAN BPATAN, F 0.0 XRATAN, F 0.0 ATAN1, F 0.0 ATAN22, F 0.0 ATAN3, F 0.0 ATAN4, F 0.0 F1ATAN, F 1. ORG 10*3+BPATAN FNOP JA ATANXR 0 ATNRTN, JA . / ATANC1, -15 /LOWER LIMIT TEST. 2000 0000 / ATANC2, 0 /UPPER LIMIT TEST. 3777 7000 / ATANC3, -1 2111 4121 / ATANC4, 1 3355 4754 / ATANC5, 0 2060 2511 / ATANC6, -3 3023 1227 / ATANC7, -2 5566 7220 / ATANC8, -2 3146 0740 / ATANC9, -1 5252 5262 / ATANCH, 1 3110 3755 / ATANCJ, F -4. BASE 0 #ATAN, STARTD FLDA 10*3 FSTA ATNRTN FLDA 0 SETX XRATAN SETB BPATAN BASE BPATAN LDX 1,1 FSTA BPATAN FLDA% BPATAN,1 /ADDR OF X FSTA BPATAN STARTF FLDA% BPATAN /GET X LDX -1,0 /REMEMBER SIGN JGE .+5 LDX 0,0 /SAVE THE SIGN. FNEG /NEGATE THE FAC [ABS] FSTA ATAN1 /AND STORE AWAY. FSTA ATAN22 FSUB ATANC1 /TEST TO SEE IF TOO SMALL. JLE ATANBG /IT IS. ATAN(X)=X FSUB ATANC2 /TEST TO SEE IF TOO BIG. JLE ATANLW /IT ISNT. FLDA F1ATAN /TO BIG. INVERT IT. FDIV ATAN1 FSTA ATAN1 / ATANLW, FCLA /CLEAR OUT TEMP. FSTA ATAN3 FLDA ATAN1 /RECALL NUMBER. FSUB ATANC3 /START THE KNOCKING OFF PROCESS. JLT ATANNT /WRONG SECTOR. FLDA ATANC4 /BOP UP ORIGINAL. FADDM ATAN1 FLDA ATANCJ /GET MAGIC NUMBER. FDIV ATAN1 FADD ATANC4 FSTA ATAN1 FLDA ATANC5 FSTA ATAN3 / ATANNT, FLDA ATAN1 /RECALL AND SQUARE IT. FMUL ATAN1 FSTA ATAN4 /YET ANOTHER TEMP. FLDA ATANC6 FMUL ATAN4 FADD ATANC7 FMUL ATAN4 FADD ATANC8 FMUL ATAN4 FADD ATANC9 FMUL ATAN4 FADD F1ATAN FMUL ATAN1 FADD ATAN3 FSTA ATAN1 FLDA ATAN22 FSUB F1ATAN JLE ATANBG FLDA ATANCH FSUB ATAN1 JA .+3 / ATANBG, FLDA ATAN1 JXN ATNRTN,0 FNEG JA ATNRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/ATAN2.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | / / / / A T A N 2 / - - - - - / /SUBROUTINE ATAN2(Y,X) / / VERSION 5A 4-27-77 PT / SECT ATAN2 JA #ATAN2 TEXT +ATAN2 + ATN2XR, SETX XRATN2 SETB BPATN2 BPATN2, FNOP 0 0 XRATN2, F 0.0 YCOR, F 0.0 XCOR, F 0.0 FPIAT2, 2 /PI 3110 3755 ATPI, F 1.570796 /PI/2 ORG 10*3+BPATN2 FNOP JA ATN2XR 0 AT2RTN, JA . BASE 0 #ATAN2, STARTD FLDA 10*3 FSTA AT2RTN FLDA 0 SETX XRATN2 SETB BPATN2 BASE BPATN2 LDX 1,1 FSTA BPATN2 FLDA% BPATN2,1 /ADDR OF Y FSTA YCOR FLDA% BPATN2,1+ /ADDR OF X FSTA XCOR STARTF FLDA% YCOR /GET Y - THE TAN FSTA YCOR /SAV FOR A SECOND LDX 1,2 /POSITIVE X JEQ ATN0 JGT ATN1 LDX 0,2 ATN1, FLDA% XCOR /GET X - THE QUADRAND FSTA XCOR /+MOVE IT TO A SAFE PLACE JEQ ATASP FLDA YCOR /Y/X FDIV XCOR FSTA YCOR EXTERN ATAN JSR ATAN /CALL ATAN JA .+4 /TAKE ARCTAN OF Y/X JA YCOR FSTA YCOR /SAVE IT AWAY JGE A2 /SKIP IF 1 OR 3 Q FADD FPIAT2 /ADD PI FOR 4TH Q FSTA YCOR A2, JXN AT2RTN,2 FLDA YCOR FSUB FPIAT2 /SUB PI FOR 2ND+3RD QUADS JA AT2RTN ATASP, FLDA ATPI /X=0 MEANS +-PI/2 JXN ATNG,2 FNEG ATNG, JA AT2RTN ATN0, FLDA% XCOR JLT POSX /IF X POS,ANS IS 0 FCLA JA AT2RTN POSX, FLDA FPIAT2 /OTHERWISE,ANS IS PI JA AT2RTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CABS.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | / / C A B S / - - - - / / VERSION 5A 4-27-77 PT / /ENTER IN COMPLEX, EXIT IN REAL / /Z=X+IY / /CABS(Z)=SQRT(X^2+Y^2) / DPCHK SECT CABS JA #CABS TEXT +CABS + CABSXR, SETX XRCABS SETB BPCABS JA .+3 BPCABS, F 0.0 XRCABS, F 0.0 ARG, F 0.0 F 0.0 ORG 10*3+BPCABS FNOP JA CABSXR 0 CABSRT, JA . BASE 0 #CABS, STARTD FLDA 10*3 FSTA CABSRT FLDA 0 SETB BPCABS SETX XRCABS BASE BPCABS LDX 1,1 FSTA BPCABS FLDA% BPCABS,1 FSTA BPCABS STARTE FLDA% BPCABS FSTA ARG STARTF FLDA ARG FMULM ARG /X^2 FLDA ARG+3 /Y FMUL ARG+3 /Y^2 FADD ARG /X^2+Y^2 FSTA ARG EXTERN SQRT JSR SQRT JA RT1 JA ARG RT1, JA CABSRT EXTERN #CAC |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CARITH.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | /COMPLEX ARITHMETIC ROUTINES / (A+BI)+-*/(C+DI) / / VERSION 5A 4-26-77 MH / DPCHK SECT #CAD JA . FSTA #CARG /SAVE SECOND ARG STARTF FLDA #CARG /STARTF ROUNDS FADDM #CAC /A+C FLDA #CARG+3 FADDM #CAC+3 /B+D STARTE JA #CAD ENTRY #CSB #CSB, JA . FSTA #CARG STARTF FLDA #CARG /STARTF ROUNDS FNEG FADDM #CAC /A-C FLDA #CAC+3 FSUB #CARG+3 /B-D FSTA #CAC+3 STARTE JA #CSB ENTRY #CNG #CNG, JA . STARTF FLDA #CAC FNEG FSTA #CAC FLDA #CAC+3 FNEG FSTA #CAC+3 STARTE JA #CNG ENTRY #CEQ #CEQ, JA . JSA #CSB STARTF FLDA #CAC JNE NOTEQ FLDA #CAC+3 JNE NOTEQ FLDA ONE JA #CEQ NOTEQ, FCLA JA #CEQ ONE, F 1.0 ENTRY #CML #CML, JA . FSTA #CARG STARTF FLDA #CARG /STARTF ROUNDS FMUL #CAC /A*C FSTA TEMP FLDA #CARG+3 FMUL #CAC+3 /B*D FSTA TEMP2 FLDA #CARG FMULM #CAC+3 /B*C FLDA #CAC FMUL #CARG+3 /A*D FADDM #CAC+3 /A*D+B*C FLDA TEMP FSUB TEMP2 /A*C-B*D FSTA #CAC STARTE JA #CML ENTRY #CDV #CDV, JA . FSTA #CARG STARTF FLDA #CARG /STARTF ROUNDS FMUL #CAC+3 /B*C FSTA TEMP FLDA #CARG+3 FMUL #CAC /A*D FSTA TEMP2 FLDA #CARG FMULM #CAC /A*C FLDA #CAC+3 FMUL #CARG+3 /B*D FADDM #CAC /A*C+B*D FLDA #CARG FMULM #CARG /C*C FLDA #CARG+3 FMUL #CARG+3 /D*D FADDM #CARG /C*C+D*D FLDA TEMP FSUB TEMP2 /B*C-A*D FDIV #CARG /(B*C-A*D)/(C*C+D*D) FSTA #CAC+3 FLDA #CAC FDIV #CARG /(A*C+B*D)/(C*C+D*D) FSTA #CAC STARTE JA #CDV TEMP, 0;0;0 TEMP2, 0;0;0 #CARG, 0;0;0 0;0;0 ENTRY #CAC #CAC, 0;0;0 0;0;0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CEXP.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | / / C E X P / - - - - / / COMPLEX EXPONENT ROUTINE /Z=X+IY / / VERSION 5A 4-25-77 MH / / /CEXP(Z)=EXP(X)*(COS(Y)+I*SIN(Y)) /ENTER+EXIT IN COMPLEX /EXTERNAL EXP,SIN,COS / SECT CEXP JA #CEXP DPCHK TEXT +CEXP + CEXPXR, SETX XR SETB BP JA .+3 BP, F 0.0 XR, F 0.0 ARG, F 0.0 F 0.0 ORG 10*3+BP FNOP JA CEXPXR 0 RT, JA . BASE 0 #CEXP, STARTD FLDA 10*3 FSTA RT FLDA 0 SETB BP SETX XR BASE BP LDX 1,1 FSTA BP FLDA% BP,1 FSTA BP STARTE FLDA% BP FSTA ARG STARTF EXTERN EXP JSR EXP /EXP(X) JA CEX1 JA ARG CEX1, FSTA ETEMP EXTERN COS JSR COS /COS(Y) JA CEX2 JA ARG+3 CEX2, FSTA ARG EXTERN SIN JSR SIN /SIN(Y) JA CEX3 JA ARG+3 CEX3, FSTA ARG+3 FLDA ETEMP FMULM ARG FMULM ARG+3 STARTE FLDA ARG FSTA #CAC JA RT EXTERN #CAC ETEMP, F 0.0 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CHARS.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | / / VERSION 5A 4-27-77 PT / SECT CHARS ENTRY CGET ENTRY CPUT TEXT +CHARS+ CHARXR, SETX XRCHAR SETB BPCHAR BPCHAR, F 0. XRCHAR, F 0. FROM, F 0. NCHAR, F 0. ORG 10*3+BPCHAR FNOP JA CHARXR 0 CHARTN, JA . BASE 0 START, JA . STARTD FLDA 10*3 FSTA CHARTN FLDA 0 SETX XRCHAR SETB BPCHAR BASE BPCHAR LDX 1,1 FSTA BPCHAR /STR SAVED IN BPCHAR FLDA% BPCHAR,1 FSTA STR FLDA% BPCHAR,1+ FSTA NCHAR FLDA% BPCHAR,1+ FSTA FROM /ADDR OF F STARTF FLDA% NCHAR ATX 0 JA START / CGET, JSA START TRAP4 CGETIT XTA 0 FSTA% FROM /TO 3 WORDS JA CHARTN / CPUT, JSA START FLDA% FROM ATX 1 FCLA TRAP4 CPUTIT JA CHARTN / SECT8 CHAR /ALL IN 1 PAGE CGETIT, 0 JMS FLDRTN TAD O2FLD DCA ORGFLD TAD XFLD DCA XR2FLD TAD PFLD DCA GFLD GFLD, 0 /STR FIELD TAD% STR-1 ORGFLD, 0 /THIS ROUTINE DCA LOC TAD XR /N RAR SNL CLA JMP RIGHT CLL TAD LOC RTR RTR RTR BOTH, AND P77 XR2FLD, 0 DCA% QXR+1 /PASS TO FPP CDF CIF 0 JMP% CGETIT RIGHT, TAD LOC JMP BOTH CADD, ADDR CGETIT 0 STR, 0 0 / CPUTIT, 0 JMS FLDRTN TAD QXR1 AND P7 RTL RAL TAD CDFINS DCA XR1FLD TAD O2FLD DCA O1FLD TAD O2FLD DCA O3FLD TAD PFLD DCA P1FLD XR1FLD, 0 TAD% QXR1+1 /F VALUE O1FLD, 0 AND P77 DCA LOC P1FLD, 0 TAD% STR-1 O3FLD, 0 DCA XR1FLD /USE AS A TMP TAD XR RAR SNL CLA JMP PRIGHT CLL TAD XR1FLD AND P77 /SAVE RIGHT HALF DCA XR1FLD TAD LOC RTL RTL RTL TAD XR1FLD PFLD, 0 DCA% STR-1 CIF CDF 0 JMP% CPUTIT PRIGHT, TAD XR1FLD AND P7700 TAD LOC JMP PFLD / FLDRTN, 0 TAD CADD AND P7 RTL RAL TAD CDFINS DCA O2FLD TAD QXR AND P7 RAL RTL TAD CDFINS DCA XFLD XFLD, 0 TAD% QXR+1 O2FLD, 0 DCA XR TAD XR RAR SNL TAD M1 CLL TAD STR+1 DCA STR-1 SZL CLA IAC CLL TAD STR AND P7 RAL RTL TAD CDFINS DCA PFLD /STR FLD JMP% FLDRTN P77, 77 CDFINS, 6203 P7, 7 QXR, ADDR XRCHAR LOC, 0 XR, 0 M1, -1 QXR1, ADDR XRCHAR+1 P7700, 7700 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CHKEOF.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | / / VERSION 5A 4-26-77 MH / SECT CHKEOF /CHECKS END OF FILE CONDITION. /ZEROS PASSED VARIABLE + PASSES ITS ADDRESS TO #EOFSW /FRTS DOES REST EXTERN #EOFSW BASE CHKBAS JA CODE NAME, TEXT +CHKEOF+ CHKBAS, F 0. CHKXR, F 0. BASE 0 CODE, STARTD FLDA 30 FSTA CHKRTN /RETURN ADDR FLDA 0 /GET PTR TO VARIABLE LIST BASE CHKBAS SETB CHKBAS SETX CHKXR FSTA CHKBAS LDX 1,1 FLDA% CHKBAS,1 /HERES PTR TO VAR ADDR FSTA CHKBAS JA PART2 ORG 10*3+CHKBAS FNOP JA NAME+3 PART2, FLDA CHKBAS FSTA #EOFSW /PASS ADDR TO SYS STARTF FCLA FSTA% CHKBAS /ZERO VAR CHKRTN, JA . |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CLK8A.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 | /PDP-8A OPTION 1 (100 HZ) CLOCK ROUTINE................CLK8A / / / / / / / / / / / / /COPYRIGHT (C) 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 ANY OTHER /COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH A 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 USEOR RELIABILITY OF ITS /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. / / / / / / / / / / / / / /E.P. 11/6/75 / VERSION 5A 4/26/77 MH / / EXTERN #DISP /SYSTEM PAGE 0,NEEDED TO /PUT CLOCK STATUS ON PG0 /(CSTAT) FOR USE BY GEN /USER CLOCK SERVICE ROUTS EXTERN #T812 /RTS CPTYP EXTERN ONQI /INTERRUPT QUEUER CLLE= 6135 /AC11=1 INTRRUPTS ON. CLCL= 6136 /CLEAR CLOCK FLAG CLSK= 6137 /SKIP ON CLOCK FLAG. CSTAT=157 /IDOCLK PUTS CLSA BITS /IN HERE BASE FTMP0 INDEX FCNWD FIELD1 SYNC JSA SETUP /HERE TO READ A STRIG /INITIALIZE ARGS TRAP4 DOSYNC /FCNWD (XR) HOLDS STRIG /TO READ XTA FCNWD /=ANS=0,1 FSTA% FTMP1 /GIVE ANS TO CALLER JA GOBAK FTMP0, F 0.0 /BASE PAGE FTMP1, F 0.0 RPTR, 27;ADDR RTBL /PTR TO RATE TBL, ALSO /USED TO FLT OVRCNT (NOTE /THAT THE EXPONENT=27) MINRAT, F .02 /MIN ALLOWABLE RATE TOVR, F 0.0 NAME, TEXT +CLOCK + ORG 10*3+FTMP0 FNOP JA NAME+3 0 GOBAK, JA . RTBL, F 16.0 /CONSTANT USED TO CHK FOR /EXT CLK BIT IN FCNWD /THIS CONST MUST BE NE 0 MAXRAT, F4096, F 4096.0 /USED TO GET OVRFLO COUNT F 100000.0 /FASTEST RATE IN HERTZ F 10000.0 /NEXT FASTEST RATE F 1000.0 F 100.0 /SLOWEST RATE F 1.0 /USED BY TIME FOR EXT CLK BASE 0 SETUP, 0;0 /HERE TO INIT ALL FPP SUBS STARTD FLDA 30 /PICK UP RTN TO CALLER FSTA GOBAK FLDA 0 /GET PTR TO CALLERS ARGS SETX FCNWD /CLOCK XR AND BASE SETB FTMP0 BASE FTMP0 FSTA FTMP1 FLDA% FTMP1,P1 FSTA FTMP0 /PTR TO 1ST ARG FLDA% FTMP1,P2 FSTA FTMP1 /PTR TO 2ND ARG FLDA #T812 /TELLS PDP8,PDP12 ATX CPTYP /0=8=DK8ES,1=12=KW12A STARTF FLDA% FTMP0 /=1ST ARG ATX FCNWD /ALWAYS IN FCNWD JA SETUP ENTRY CLOCK CLOCK, JSA SETUP /HERE FOR CLOCK START FLDA% FTMP0 FSUB RTBL /FCNWD IS IN FAC,IF GE 16 JGE ITSEXT /(RTBL=16.0) THEN USER IS /REQUESTING AN EXTERNAL /CLOCK I.E. B8 OF FCNWD /IS SET. FLDA% FTMP1 /=REQUESTED RATE IN HERTZ FSUB MINRAT /.LE. MINUMUM RATE JLE GOTR-2 /MEANS STOP CLOCK. FADD MINRAT FSUB MAXRAT /CHK FOR TOO FAST JGT GOTR-2 LDX -4,OVRFLO /THERE ARE 4 BASIC RATES LDX 1,RATE /=INDEX INTO RTBL; UPON /TRAP(CLOCK) RATE=(0, /2,3,4,5,6) 0=STOP, /6=EXTERNAL /2-5=PROGRAMMABLE RATES LOP0, FLDA% RPTR,RATE+ /GET NEXT SLOWEST RATE FDIV% FTMP1 /=REQUESTED RATE IN HZ. /FAC=OVRFLO COUNT; FSUB F4096 /MUST BE MODULO 12 BITS. JLE GOTR /FOUND IT JXN LOP0,OVRFLO+ LDX 0,RATE /RATE IS TOO SLOW, STOP /CLOCK. GOTR, FADD F4096 /RESTORE FSTA TOVR ATX OVRFLO /OVER FLOW COUNT TRAP4 SETCLK /GO START CLOCK JA GOBAK /RTN TO CALLER ITSEXT, LDX 6,RATE /=RATE FOR EXT CLK FLDA% FTMP1 /REQUESTED RATE IS /INTERPRETED AS OVRFLO JA GOTR+1 /WHEN RATE IS EXTERNAL /MAGIC TABLE USED BY SETCLK TO SET CLOCK ENABLE /BITS. EVEN NUMBERED ENTRIES ARE FOR THE DK8ES; /ODD NUMBERED ONES ARE FOR THE KW12A. CLKTBL, 0675 /"STANDARD" DK BITS 300 /STND KW BITS 1 /DK STRIG1 BIT 60 /KW STRIG1 BITS 2 /DK S2 14 /KW S2 4 /S3 P3, 3 /S3 40 /DK ADC ON OVR BIT 400 /KW ADC ON OVR BIT /IF NOT NEXT PAGE DO ORG IFNEG .-200 < ORG .-SYNC&7600+200+SYNC > SETCLK, 0 /TRAP HERE TO START CLK /THIS ROUT HANDLES BOTH /DK8ES AND KW12A. CLCL /TRY AND CLEAR IT HERE???? / CLLR /STOP KW AND SET MODE 0; /NOP FOR DK. / CLEN /CLR KW12 ENABLE OR /READ DK ENABLE. / CLA / TAD P7540 /TOGGLE KW MODE 0 TO 1 TO / CLLR /CLR CLK COUNTER, OR SET /DK ENABLE BITS, RATE FOR / CLA CMA /BOTH NOW=7=STOP. / CLZE /CLR ALL DK ENABLE BITS, / CLSA /CLR STATUS OF BOTH, ALL CLA /IS NOW CLEAR. TAD FCNTBL+1 /SET PTR TO CLKTBL FOR /SETTING OF ENABLE REGS. TAD CPTYP /=0 IF PDP8 =1 IF PDP12 DCA FCNPTR /TBL ENTRIES ALTERNATE /FOR 8 AND 12. CPTYP SETS /PTR TO 1ST 8 OR 1ST 12 /ENTRY TAD IDOCLK /(AC=JMP AROUND). THE /FOLLOWING IS ONCE ONLY /CODE. THESE LOCS ARE /SUBSEQUENTLY USED AS /OPERANDS DCA .-1 /THE TAG "ISVBIT" MUST BE /IN FRONT OF THE STRIG /FLAGS (STFLG) TO COVER /THE ILLEGAL CASE OF /STRIG 0 IN A FORT CALL /TO SYNC. ISVBIT, TAD CPTYP /(AC=0,1) MAKE THE INST /RAR CLL (FOR DK) OR THE /INST RTR CLL FOR IDOCLK; STFLG, RAL CLL /BECAUSE STATUS BITS FOR TAD RARCLL /STRIGS DIFFER ON DK,KW. DCA LOP2+1 /SEE SUB IDOCLK. /THE ABOVE 3 LOCS ARE /SCHMITT TRIGGER FLAGS. /THE ORDER IS S1,S2,S3 /FOR PDP8 AND S3,S2,S1 /FOR PDP12. (CHK THE STATUS /BITS FOR DK AND KW). JMS% KONQI+1 /PUT CLOCK ON THE ITMP0, CLSK /INTERRUPT QUE /VIA ONQI. CLENAB, ADDR IDOCLK /THIS LOC WILL HOLD THE /ENABLE BITS FOR DK,KW AROUND, TAD RATE /(AC=0,2,3,4,5,6) RATE IS /SET BY FPP RTR CLL /START TO POSITION RATE RAR /BITS. B3-B5 FOR DK /B0-B2 FOR KW TAD CPTYP /(THIS IS TRICKY) NEED RAR /CPTYP IN LNK BECAUSE /POSITION OF RATE BITS /DIFFER FOR DK KW. TAD% FCNPTR /AC="STANDARD" /ENABLE BITS FOR DK,KW. SZL /IF ITS A KW THE RATE AND /AND STND BITS ARE ALREADY /POSITIONED AS FOLLOWS: /RRR011000000 /B0-B3 AND B5 WILL GO TO /KW CONTROL. B4,B5 WILL /GO TO ENABLE. B3 IS ADC /ON OVRFLO AND MAY BE SET /BELOW. B5 ON CONTROL IS /MODE 1. B4 AND B5 ON /ENABLE ARE BUFF PRESET TO /CLOCK COUNTER AND INTRUPT /ON OVRFLO RESPECTIVELY. JMP NOBIT-1 /ITS KW GO PUT IN CLENAB. RTR /ITS DK; POSITION RATE TO RAR /B3-B5. NOTE THAT THE LNK /(CPTYP=0) IS BEING USED. CMA /NOTE ALSO THAT THE RATE /AND STND BITS ARE THE 1S /COMP. OF WHAT THEY SHOULD /BE, IE CPTYP=LNK=0 /BECOMES /B2=1 OF ENABLE=BUFF /PRESET TO CLK CNTR ON /OVERFLO. LOOK AT THE RATE /BITS IN THE HANDBOOK FOR /BOTH DK,KW. R2,R5 /FOR DK IS 100HZ, 100KHZ /RESPECTIVELY. R2,R5 FOR /KW IS 100KHZ,100HZ. /1S COMP.OF 2=5 ETC. /SMARTEN UP STEVE! /THE FINAL VALUE OF THE /STND DK ENABLE BITS (1ST /ENTRY IN CLKTBL) IS LEFT /AS AN EXERCISE FOR THE /PROGRAMMER. JMP NOBIT-1 /GO PUT IN CLENAB LOP1, RAR CLL /ROT 1 FCN BIT INTO LNK. /B7=EXT CLK AND IS /IGNORED HERE. B8=ADC ON /OVRFLO, B9-B11 ARE STRIG3 /-STRIG1 RESP. BX=1=ENABLE /FCN. 0=DISABLE DCA FCNWD /PUT IT BACK (FCNWD IS /SET BY FPP) SNL /ENABLE FCN ? JMP NOBIT /NO TAD% FCNPTR /GET BITS FROM THE MAGIC TAD CLENAB /TABLE. DCA CLENAB /UPDATE ENABLE WORD. NOBIT, ISZ FCNPTR /ADV TO NEXT ISZ FCNPTR /TBL ENTRY. TAD FCNWD /WHEN FCNWD GOES TO 0 AND P17 /WE ARE ALL DONE. /THE "AND" IS DONE TO /PROTECT AGAINST A BAD /ARG FROM THE FORT CALL. P7540, SMA SZA /SMA IS SUPERFLOUS TO /THE ROUT; BUT IT /CREATES A NICE CONST. JMP LOP1 /MORE TO DO DCA STFLG /CLR THE SCHMITT DCA STFLG+1 /TRIGGER FLAGS. DCA STFLG+2 TAD OVRFLO /SET BUFF PRESET CIA /(FPP SET THIS ARG) / CLAB CLA TAD CLENAB /THIS IS FOR KW ONLY. AND P377 /AC=3XX. 3= OR BUFF PRE /INTO CLK CNTR AND ENAB /INT ON OVRFLO. /XX ARE THE STRIGS. / CLEN /SET KW ENABLE OR CLA /READ DK ENABLE. DCA OVRCNT+1 /CLR NUM OF CLK OVRFLOS DCA OVRCNT /SINCE TIME 0. TAD CPTYP /NEED TYPE IN ORDER TO RARCLL, RAR CLL /ISOLATE CONTROL TAD CLENAB /BITS FOR SZL /KW ? AND P7540 /YES, B0-B2 IS RATE, /B3 IS ADC, B5 IS BUFF /PRE TO CLK CNTR ON /OVRFLO, B6 IS MOX NIX. /IF DK ALL BITS MAY HAVE /MEANING CLA IAC /SET BIT 11 CLLE /ENABLE THE CLOCK INTERRUPTS / CLLR /START THE CLOCK CLA CIF CDF JMP% SETCLK /RTN TO RTS DOSYNC, 0 /HERE TO DISPOSITION A /A SCHMITT TRIGGER. TAD CPTYP /DK AND KW FLAGS ARE IN RAR CLL /REVERSE ORDER. IF DK /ARG IS OK; IF KW THEN /MUST SET 1=3, 2=2, 3=1 /TO GET INDEX TO /CORRECT FLAG. TAD FCNWD /=REQUESTED STRIG=1,2,3 /(SET BY FPP) SZL /DK ? CIA /NO KW AND P3 /IE 1 GOES TO -1 GOES /TO 3 ETC. "AND" ALSO /INSURES RANGE IS 0-3. /IF ARG IS 0 RESULT IS /ALWAYS 0. TAD KSTFLG+1 /GET PTR TO FLAG DCA SETCLK TAD% SETCLK /FLAG=0 IF TRIG HAS NOT /TRIPPED SINCE THE LAST /CALL TO SYNC; =1 /OTHERWISE IE RTN 0=FALSE DCA FCNWD /,1=TRUE (FPP WILL PICK / UP FCNWD) DCA% SETCLK /CLR FLAG ANYWAY CIF CDF JMP% DOSYNC /RTN TO RTS IDOCLK, JMP AROUND /HERE ON CLOCK INTERRUPT /(JMP AROUND IS A ONCE /ONLY CONSTANT). CLCL /JUST TO MAKE SURE! TAD KSTFLG+1 /SET PTR TO STRIG FLAGS. DCA ITMP0 / CLSA /GET CLOCK BITS. CLA CLL CML RAR /SIMULATE TICK DCAZ CSTAT /SAVE THEM FOR SOME TADZ CSTAT /BODY ELSE. SPA /OVER FLOW ? ISZ OVRCNT+1 /YES BUMP LO ORD CNTR SKP ISZ OVRCNT /BUMP HI ORD JMP DOTRIG /(HI ORD ISZ SKP IS /HARMLESS) LOP2, ISZ ITMP0 /ADV STRIG FLAG PTR. RAR CLL /(OR RTR CLL IF KW) /IE PUT STRIG BIT IN LNK. /IF DK THE ORDER OF /INTERROGATION IS S1,S2,S3 /IF KW THE ORDER IS S3, /S2,S1. THE STATUS BITS /FOR DK ARE ADJACENT IE / B9(S3),B10(S2),B11(S1) /FOR KW ITS EVERY OTHER, /B6(S1),B8(S2),B10(S3). DCA ISVBIT /SAVE WHATS LEFT. RAL /COPY LNK INTO FLAG IF=1 SZA /IE DONT CLR FLAG WHEN DCA% ITMP0 /ITS SET. TAD ISVBIT DOTRIG, AND P377 /THE "AND" INSURES THAT /THE HI ORD BITS ARE /CLRED SO THAT ISVBIT /GOES TO 0 WHEN ALL /STRIGS HAVE BEEN /DISPOSITIONED. IE /CLR OVRFLO BIT FOR DK,KW /AND CLR PRE-EVENT BIT /ON KW IF IT IS SET SZA /DONE ? JMP LOP2 /NO TAD #CLINT /CALL USER EXTENDED SZA CLA /CLOCK ROUT ? JMS% #CLINT+1 /YES JMP% IDOCLK /RTN TO IHANDL FCNPTR, OVRCNT, KONQI, ADDR ONQI P17, 17 P377, 377 FCNWD, 0 /FPP XRS CPTYP, 0 RATE, 0 P1, 1 P2, 2 OVRFLO, FCNTBL, ADDR CLKTBL KSTFLG, ADDR STFLG-1 ENTRY #CLINT #CLINT, 0;0 ENTRY TIME /FIGURE WHAT TIME IT IS TIME, JSA SETUP FLDA RPTR /=27;X;X IS USED TO FLOAT STARTD FLDA# OVRCNT /NUM OF CLK OVRFLOS SINCE STARTF /TIME 0 FNORM FMUL TOVR /=NUM OF BASIC TICKS PER /CLOCK OVER FLOW. /FAC=NUM OF TICKS SINCE /TIME 0. FDIV% RPTR,RATE /DIV BY BASIC RATE IN HZ /OR 1 IF EXTERNAL CLK. FSTA% FTMP0 /GIVE ANS TO CALLER, ALSO /LEAVE ANS IN FAC IN /CASE TIME WAS A FCN /CALL. ANS=ELAPSED TIME IN /SECONDS SINCE TIME 0 OR /NUM OF EXTERNAL UNIT JA GOBAK /TICKS |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CLOCK.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 | / / VERSION 5A 4/26/77 MH / EXTERN #DISP /SYSTEM PAGE 0,NEEDED TO /PUT CLOCK STATUS ON PG0 /(CSTAT) FOR USE BY GEN /USER CLOCK SERVICE ROUTS EXTERN #T812 /RTS CPTYP EXTERN ONQI /INTERRUPT QUEUER CLZE=6130 /CLOCK IOTS CLSK=6131 CLLR=6132 /ALSO CLOE CLAB=6133 CLEN=6134 CLSA=6135 CSTAT=157 /IDOCLK PUTS CLSA BITS /IN HERE BASE FTMP0 INDEX FCNWD FIELD1 SYNC JSA SETUP /HERE TO READ A STRIG /INITIALIZE ARGS TRAP4 DOSYNC /FCNWD (XR) HOLDS STRIG /TO READ XTA FCNWD /=ANS=0,1 FSTA% FTMP1 /GIVE ANS TO CALLER JA GOBAK FTMP0, F 0.0 /BASE PAGE FTMP1, F 0.0 RPTR, 27;ADDR RTBL /PTR TO RATE TBL, ALSO /USED TO FLT OVRCNT (NOTE /THAT THE EXPONENT=27) MINRAT, F .02 /MIN ALLOWABLE RATE TOVR, F 0.0 NAME, TEXT +CLOCK + ORG 10*3+FTMP0 FNOP JA NAME+3 0 GOBAK, JA . RTBL, F 16.0 /CONSTANT USED TO CHK FOR /EXT CLK BIT IN FCNWD /THIS CONST MUST BE NE 0 MAXRAT, F4096, F 4096.0 /USED TO GET OVRFLO COUNT F 100000.0 /FASTEST RATE IN HERTZ F 10000.0 /NEXT FASTEST RATE F 1000.0 F 100.0 /SLOWEST RATE F 1.0 /USED BY TIME FOR EXT CLK BASE 0 SETUP, 0;0 /HERE TO INIT ALL FPP SUBS STARTD FLDA 30 /PICK UP RTN TO CALLER FSTA GOBAK FLDA 0 /GET PTR TO CALLERS ARGS SETX FCNWD /CLOCK XR AND BASE SETB FTMP0 BASE FTMP0 FSTA FTMP1 FLDA% FTMP1,P1 FSTA FTMP0 /PTR TO 1ST ARG FLDA% FTMP1,P2 FSTA FTMP1 /PTR TO 2ND ARG FLDA #T812 /TELLS PDP8,PDP12 ATX CPTYP /0=8=DK8ES,1=12=KW12A STARTF FLDA% FTMP0 /=1ST ARG ATX FCNWD /ALWAYS IN FCNWD JA SETUP ENTRY CLOCK CLOCK, JSA SETUP /HERE FOR CLOCK START FLDA% FTMP0 FSUB RTBL /FCNWD IS IN FAC,IF GE 16 JGE ITSEXT /(RTBL=16.0) THEN USER IS /REQUESTING AN EXTERNAL /CLOCK I.E. B8 OF FCNWD /IS SET. FLDA% FTMP1 /=REQUESTED RATE IN HERTZ FSUB MINRAT /.LE. MINUMUM RATE JLE GOTR-2 /MEANS STOP CLOCK. FADD MINRAT FSUB MAXRAT /CHK FOR TOO FAST JGT GOTR-2 LDX -4,OVRFLO /THERE ARE 4 BASIC RATES LDX 1,RATE /=INDEX INTO RTBL; UPON /TRAP(CLOCK) RATE=(0, /2,3,4,5,6) 0=STOP, /6=EXTERNAL /2-5=PROGRAMMABLE RATES LOP0, FLDA% RPTR,RATE+ /GET NEXT SLOWEST RATE FDIV% FTMP1 /=REQUESTED RATE IN HZ. /FAC=OVRFLO COUNT; FSUB F4096 /MUST BE MODULO 12 BITS. JLE GOTR /FOUND IT JXN LOP0,OVRFLO+ LDX 0,RATE /RATE IS TOO SLOW, STOP /CLOCK. GOTR, FADD F4096 /RESTORE FSTA TOVR ATX OVRFLO /OVER FLOW COUNT TRAP4 SETCLK /GO START CLOCK JA GOBAK /RTN TO CALLER ITSEXT, LDX 6,RATE /=RATE FOR EXT CLK FLDA% FTMP1 /REQUESTED RATE IS /INTERPRETED AS OVRFLO JA GOTR+1 /WHEN RATE IS EXTERNAL /MAGIC TABLE USED BY SETCLK TO SET CLOCK ENABLE /BITS. EVEN NUMBERED ENTRIES ARE FOR THE DK8ES; /ODD NUMBERED ONES ARE FOR THE KW12A. CLKTBL, 0675 /"STANDARD" DK BITS 300 /STND KW BITS 1 /DK STRIG1 BIT 60 /KW STRIG1 BITS 2 /DK S2 14 /KW S2 4 /S3 P3, 3 /S3 40 /DK ADC ON OVR BIT 400 /KW ADC ON OVR BIT /IF NOT NEXT PAGE DO ORG IFNEG .-200 < ORG .-SYNC&7600+200+SYNC > SETCLK, 0 /TRAP HERE TO START CLK /THIS ROUT HANDLES BOTH /DK8ES AND KW12A. CLLR /STOP KW AND SET MODE 0; /NOP FOR DK. CLEN /CLR KW12 ENABLE OR /READ DK ENABLE. CLA TAD P7540 /TOGGLE KW MODE 0 TO 1 TO CLLR /CLR CLK COUNTER, OR SET /DK ENABLE BITS, RATE FOR CLA CMA /BOTH NOW=7=STOP. CLZE /CLR ALL DK ENABLE BITS, CLSA /CLR STATUS OF BOTH, ALL CLA /IS NOW CLEAR. TAD FCNTBL+1 /SET PTR TO CLKTBL FOR /SETTING OF ENABLE REGS. TAD CPTYP /=0 IF PDP8 =1 IF PDP12 DCA FCNPTR /TBL ENTRIES ALTERNATE /FOR 8 AND 12. CPTYP SETS /PTR TO 1ST 8 OR 1ST 12 /ENTRY TAD IDOCLK /(AC=JMP AROUND). THE /FOLLOWING IS ONCE ONLY /CODE. THESE LOCS ARE /SUBSEQUENTLY USED AS /OPERANDS DCA .-1 /THE TAG "ISVBIT" MUST BE /IN FRONT OF THE STRIG /FLAGS (STFLG) TO COVER /THE ILLEGAL CASE OF /STRIG 0 IN A FORT CALL /TO SYNC. ISVBIT, TAD CPTYP /(AC=0,1) MAKE THE INST /RAR CLL (FOR DK) OR THE /INST RTR CLL FOR IDOCLK; STFLG, RAL CLL /BECAUSE STATUS BITS FOR TAD RARCLL /STRIGS DIFFER ON DK,KW. DCA LOP2+1 /SEE SUB IDOCLK. /THE ABOVE 3 LOCS ARE /SCHMITT TRIGGER FLAGS. /THE ORDER IS S1,S2,S3 /FOR PDP8 AND S3,S2,S1 /FOR PDP12. THE MAIN /REASON FOR REVERSING /THE ORDER IS BECAUSE /ENGINEERS NEVER CONSULT /PROGRAMMERS WHEN THEY /ARE BUILDING NEW /HARDWARE (CHK THE STATUS /BITS FOR DK AND KW). JMS% KONQI+1 /PUT CLOCK ON THE ITMP0, CLSK /INTERRUPT QUE /VIA ONQI. CLENAB, ADDR IDOCLK /THIS LOC WILL HOLD THE /ENABLE BITS FOR DK,KW AROUND, TAD RATE /(AC=0,2,3,4,5,6) RATE IS /SET BY FPP RTR CLL /START TO POSITION RATE RAR /BITS. B3-B5 FOR DK /B0-B2 FOR KW TAD CPTYP /(THIS IS TRICKY) NEED RAR /CPTYP IN LNK BECAUSE /POSITION OF RATE BITS /DIFFER FOR DK KW. TAD% FCNPTR /AC="STANDARD" /ENABLE BITS FOR DK,KW. SZL /IF ITS A KW THE RATE AND /AND STND BITS ARE ALREADY /POSITIONED AS FOLLOWS: /RRR011000000 /B0-B3 AND B5 WILL GO TO /KW CONTROL. B4,B5 WILL /GO TO ENABLE. B3 IS ADC /ON OVRFLO AND MAY BE SET /BELOW. B5 ON CONTROL IS /MODE 1. B4 AND B5 ON /ENABLE ARE BUFF PRESET TO /CLOCK COUNTER AND INTRUPT /ON OVRFLO RESPECTIVELY. JMP NOBIT-1 /ITS KW GO PUT IN CLENAB. RTR /ITS DK; POSITION RATE TO RAR /B3-B5. NOTE THAT THE LNK /(CPTYP=0) IS BEING USED. CMA /NOTE ALSO THAT THE RATE /AND STND BITS ARE THE 1S /COMP. OF WHAT THEY SHOULD /BE, IE CPTYP=LNK=0 /BECOMES /B2=1 OF ENABLE=BUFF /PRESET TO CLK CNTR ON /OVERFLO. LOOK AT THE RATE /BITS IN THE HANDBOOK FOR /BOTH DK,KW. R2,R5 /FOR DK IS 100HZ, 100KHZ /RESPECTIVELY. R2,R5 FOR /KW IS 100KHZ,100HZ. /1S COMP.OF 2=5 ETC. /SMARTEN UP STEVE! /THE FINAL VALUE OF THE /STND DK ENABLE BITS (1ST /ENTRY IN CLKTBL) IS LEFT /AS AN EXERCISE FOR THE /PROGRAMMER. JMP NOBIT-1 /GO PUT IN CLENAB LOP1, RAR CLL /ROT 1 FCN BIT INTO LNK. /B7=EXT CLK AND IS /IGNORED HERE. B8=ADC ON /OVRFLO, B9-B11 ARE STRIG3 /-STRIG1 RESP. BX=1=ENABLE /FCN. 0=DISABLE DCA FCNWD /PUT IT BACK (FCNWD IS /SET BY FPP) SNL /ENABLE FCN ? JMP NOBIT /NO TAD% FCNPTR /GET BITS FROM THE MAGIC TAD CLENAB /TABLE. DCA CLENAB /UPDATE ENABLE WORD. NOBIT, ISZ FCNPTR /ADV TO NEXT ISZ FCNPTR /TBL ENTRY. TAD FCNWD /WHEN FCNWD GOES TO 0 AND P17 /WE ARE ALL DONE. /THE "AND" IS DONE TO /PROTECT AGAINST A BAD /ARG FROM THE FORT CALL. /IN A FRIENDLY ENIVORN, /ITS NOT NECESSARY. /NEVER TRUST A FORTRAN /"PROGRAMMER". P7540, SMA SZA /SMA IS SUPERFLOUS TO /THE ROUT; BUT IT /CREATES A NICE CONST. JMP LOP1 /MORE TO DO DCA STFLG /CLR THE SCHMITT DCA STFLG+1 /TRIGGER FLAGS. DCA STFLG+2 TAD OVRFLO /SET BUFF PRESET CIA /(FPP SET THIS ARG) CLAB CLA TAD CLENAB /THIS IS FOR KW ONLY. AND P377 /AC=3XX. 3= OR BUFF PRE /INTO CLK CNTR AND ENAB /INT ON OVRFLO. /XX ARE THE STRIGS. CLEN /SET KW ENABLE OR CLA /READ DK ENABLE. DCA OVRCNT+1 /CLR NUM OF CLK OVRFLOS DCA OVRCNT /SINCE TIME 0. TAD CPTYP /NEED TYPE IN ORDER TO RARCLL, RAR CLL /ISOLATE CONTROL TAD CLENAB /BITS FOR SZL /KW ? AND P7540 /YES, B0-B2 IS RATE, /B3 IS ADC, B5 IS BUFF /PRE TO CLK CNTR ON /OVRFLO, B6 IS MOX NIX. /IF DK ALL BITS MAY HAVE /MEANING CLLR /START THE CLOCK CLA CIF CDF JMP% SETCLK /RTN TO RTS DOSYNC, 0 /HERE TO DISPOSITION A /A SCHMITT TRIGGER. TAD CPTYP /DK AND KW FLAGS ARE IN RAR CLL /REVERSE ORDER. IF DK /ARG IS OK; IF KW THEN /MUST SET 1=3, 2=2, 3=1 /TO GET INDEX TO /CORRECT FLAG. TAD FCNWD /=REQUESTED STRIG=1,2,3 /(SET BY FPP) SZL /DK ? CIA /NO KW AND P3 /IE 1 GOES TO -1 GOES /TO 3 ETC. "AND" ALSO /INSURES RANGE IS 0-3. /IF ARG IS 0 RESULT IS /ALWAYS 0. TAD KSTFLG+1 /GET PTR TO FLAG DCA SETCLK TAD% SETCLK /FLAG=0 IF TRIG HAS NOT /TRIPPED SINCE THE LAST /CALL TO SYNC; =1 /OTHERWISE IE RTN 0=FALSE DCA FCNWD /,1=TRUE (FPP WILL PICK / UP FCNWD) DCA% SETCLK /CLR FLAG ANYWAY CIF CDF JMP% DOSYNC /RTN TO RTS IDOCLK, JMP AROUND /HERE ON CLOCK INTERRUPT /(JMP AROUND IS A ONCE /ONLY CONSTANT). TAD KSTFLG+1 /SET PTR TO STRIG FLAGS. DCA ITMP0 CLSA /GET CLOCK BITS. DCAZ CSTAT /SAVE THEM FOR SOME TADZ CSTAT /BODY ELSE. SPA /OVER FLOW ? ISZ OVRCNT+1 /YES BUMP LO ORD CNTR SKP ISZ OVRCNT /BUMP HI ORD JMP DOTRIG /(HI ORD ISZ SKP IS /HARMLESS) LOP2, ISZ ITMP0 /ADV STRIG FLAG PTR. RAR CLL /(OR RTR CLL IF KW) /IE PUT STRIG BIT IN LNK. /IF DK THE ORDER OF /INTERROGATION IS S1,S2,S3 /IF KW THE ORDER IS S3, /S2,S1. THE STATUS BITS /FOR DK ARE ADJACENT IE / B9(S3),B10(S2),B11(S1) /FOR KW ITS EVERY OTHER, /B6(S1),B8(S2),B10(S3). DCA ISVBIT /SAVE WHATS LEFT. RAL /COPY LNK INTO FLAG IF=1 SZA /IE DONT CLR FLAG WHEN DCA% ITMP0 /ITS SET. TAD ISVBIT DOTRIG, AND P377 /THE "AND" INSURES THAT /THE HI ORD BITS ARE /CLRED SO THAT ISVBIT /GOES TO 0 WHEN ALL /STRIGS HAVE BEEN /DISPOSITIONED. IE /CLR OVRFLO BIT FOR DK,KW /AND CLR PRE-EVENT BIT /ON KW IF IT IS SET SZA /DONE ? JMP LOP2 /NO TAD #CLINT /CALL USER EXTENDED SZA CLA /CLOCK ROUT ? JMS% #CLINT+1 /YES JMP% IDOCLK /RTN TO IHANDL FCNPTR, OVRCNT, KONQI, ADDR ONQI P17, 17 P377, 377 FCNWD, 0 /FPP XRS CPTYP, 0 RATE, 0 P1, 1 P2, 2 OVRFLO, FCNTBL, ADDR CLKTBL KSTFLG, ADDR STFLG-1 ENTRY #CLINT #CLINT, 0;0 ENTRY TIME /FIGURE WHAT TIME IT IS TIME, JSA SETUP FLDA RPTR /=27;X;X IS USED TO FLOAT STARTD FLDA# OVRCNT /NUM OF CLK OVRFLOS SINCE STARTF /TIME 0 FNORM FMUL TOVR /=NUM OF BASIC TICKS PER /CLOCK OVER FLOW. /FAC=NUM OF TICKS SINCE /TIME 0. FDIV% RPTR,RATE /DIV BY BASIC RATE IN HZ /OR 1 IF EXTERNAL CLK. FSTA% FTMP0 /GIVE ANS TO CALLER, ALSO /LEAVE ANS IN FAC IN /CASE TIME WAS A FCN /CALL. ANS=ELAPSED TIME IN /SECONDS SINCE TIME 0 OR /NUM OF EXTERNAL UNIT JA GOBAK /TICKS |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CLOG.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | / / C L O G / - - - - / / VERSION 5A 4-27-77 PT / /COMPLEX LOG ROUTINE / /ENTER + EXIT IN COMPLEX / /Z=X+IY /LOG(Z)=LOG(ABS(Z))+I*THETA /ABS(Z)=SQRT(X*X+Y*Y) /THETA=ATAN(Y/X) / /CALLS REAL SQRT,LOG,ATAN2 / SECT CLOG JA #CLOG DPCHK TEXT +CLOG + CLOGXR, SETX XR SETB BP JA .+3 BP, F 0.0 XR, F 0.0 F 0.0 ARG, F 0.0 F 0.0 ORG 10*3+BP FNOP JA CLOGXR 0 RT, JA . BASE 0 #CLOG, STARTD FLDA 10*3 FSTA RT FLDA 0 SETB BP SETX XR BASE BP LDX 1,1 FSTA BP FLDA% BP,1 FSTA BP STARTE FLDA% BP FSTA ARG STARTF EXTERN ATAN2 JSR ATAN2 JA CL1 JA ARG+3 /ATAN(Y/X) JA ARG CL1, FSTA ETEMP FLDA ARG FMULM ARG FLDA ARG+3 FMUL ARG+3 /X*X+Y*Y FADD ARG FSTA ARG EXTERN SQRT JSR SQRT /TAKE SQRT JA CL2 JA ARG CL2, FSTA ARG EXTERN ALOG /ALOG(ABS(Z)) JSR ALOG JA CL3 JA ARG CL3, FSTA ARG /REAL PART FLDA ETEMP /IMAGINARY PART FSTA ARG+3 STARTE FLDA ARG FSTA #CAC JA RT EXTERN #CAC ETEMP, F 0.0 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CMPLX.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | / / C M P L X / - - - - - / / VERSION 5A 4-27-77 PT / /ENTER IN REAL,EXIT IN COMPLEX /CMPLX(X,Y) /Z=X+IY / SECT CMPLX JA #CMPLX DPCHK TEXT +CMPLX + CMPXR, SETX XR SETB BP BP, F 0.0 XR, F 0.0 PTR1, F 0.0 ARG, F 0.0 F 0.0 ORG 10*3+BP FNOP JA CMPXR 0 RT, JA . BASE 0 #CMPLX, STARTD FLDA 10*3 FSTA RT FLDA 0 SETB BP SETX XR BASE BP LDX 1,1 FSTA BP FLDA% BP,1 FSTA PTR1 /ADDR OF X FLDA% BP,1+ FSTA BP /ADDR OF Y STARTF FLDA% PTR1 FSTA ARG /X FLDA% BP FSTA ARG+3 /Y STARTE FLDA ARG /X+IY FSTA #CAC /SAVE IN CMPLX AC JA RT EXTERN #CAC |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/COS.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | / / / C O S / - - - / /SUBROUTINE COS(X) / / VERSION 5A 4-27-77 PT / SECT COS JA #COS TEXT +COS + COSXR, SETX XRCOS SETB BPCOS BPCOS, FNOP 0 0 XRCOS, F 0.0 COS1, F 0.0 FPI2CS, 1 /PI DIVIDED BY 2 3110 3755 ORG 10*3+BPCOS FNOP JA COSXR 0 COSRTN, JA . BASE 0 #COS, STARTD FLDA 10*3 FSTA COSRTN FLDA 0 SETX XRCOS SETB BPCOS BASE BPCOS LDX 1,1 FSTA BPCOS FLDA% BPCOS,1 /ADDR OF X FSTA BPCOS STARTF FLDA% BPCOS /GET X FADD FPI2CS /ADD IN PI OVER 2 FSTA COS1 EXTERN SIN JSR SIN /AND CALL THE SIN JA COSRTN JA COS1 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/COSD.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | / / / / C O S D / - - - - / /SUBROUTINE COSD(X) / / VERSION 5A 4-27-77 PT / SECT COSD JA #COSD TEXT +COSD + COSDXR, SETX XRCOSD SETB BPCOSD BPCOSD, FNOP 0 0 XRCOSD, F 0.0 COSD90, F 90. COSD91, 6 3451 3560 COSD1, F 0.0 ORG 10*3+BPCOSD FNOP JA COSDXR 0 CSDRTN, JA . BASE 0 #COSD, STARTD FLDA 10*3 FSTA CSDRTN FLDA 0 SETX XRCOSD SETB BPCOSD BASE BPCOSD LDX 1,1 FSTA BPCOSD FLDA% BPCOSD,1 /ADDR OF X FSTA BPCOSD STARTF FLDA% BPCOSD /GET X IN DEGREES FADD COSD90 /ADD IN 90 FDIV COSD91 /CONVERT TO REDIANS FSTA COSD1 EXTERN SIN JSR SIN /CALL THE SINE JA CSDRTN JA COSD1 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/COSH.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | / / VERSION 5A 4-27-77 PT / / C O S H / - - - - / /SUBROUTINE COSH(X) / / VERSION 5A 4-27-77 PT SECT COSH JA #COSH COSHE, FLDA COSHB /GIVE INFINITY IN CASE OF NO REC EXTERN #ARGER TRAP4 #ARGER TEXT +COSH + COSHXR, SETX XRCOSH SETB BPCOSH BPCOSH, FNOP 0 0 XRCOSH, F 0.0 COSH7, F 0.0 COSH8, F 0.0 F1COSH, F 1. F2COSH, F 2. ORG 10*3+BPCOSH FNOP JA COSHXR 0 CSHRTN, JA . / COSHLG, 0 2613 4412 / COSHB, 3777 3777 7777 / / COSH1, F 88.029 /LIMIT FACTOR. BASE 0 #COSH, STARTD FLDA 10*3 FSTA CSHRTN FLDA 0 SETX XRCOSH SETB BPCOSH BASE BPCOSH LDX 1,1 FSTA BPCOSH FLDA% BPCOSH,1 /ADDR OF X FSTA BPCOSH STARTF FLDA% BPCOSH /GET X FSTA COSH8 /SAVE ARGUMENT JGE .+3 /ABS(X) FNEG FSTA COSH7 FSUB COSH1 /TEST FOR LIMITS. JGE COSHBG EXTERN EXP JSR EXP /EXP(X) JA .+4 JA COSH8 FSTA COSH7 FLDA F1COSH /1. FDIV COSH7 / 1./EXP(X) FADD COSH7 / EXP(X)+1./EXP(X) FDIV F2COSH / (EXP(X)+1./EXP(X))2. JA CSHRTN /AND THAT IS THE DEFINITION OF COSH. / / COSHBG, FSUB COSHLG /SEE IF TOO BIG JGT COSHE /YEP. ERROR FADD COSH1 /READD IN SUBTRACTION FACTOR. FSTA COSH8 / EXP(ABS(X)-LN(2)) EXTERN EXP JSR EXP JA .+4 JA COSH8 JA CSHRTN / A VERY GOOD APPROXIMATION. |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CSIN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | / / C S I N / - - - - / / VERSION 5A 4-27-77 PT / /COMPLEX SIN AND COS ROUTINE / /CCOS(X+I*Y)=COS(X)*COSH(Y)-SIN(X)*SINH(Y) / /CSIN(X+I*Y)=SIN(X)*COSH(Y)+COS(X)*SINH(Y) / /CALLS SIN,COS,COSH,SINH / SECT CSIN JA #CSIN DPCHK TEXT +CSIN + CSINXR, SETX XR SETB BP JA .+3 BP, F 0.0 XR, F 0.0 ARG, F 0.0 F 0.0 C, F 0.0 CH, F 0.0 S, F 0.0 ORG 10*3+BP FNOP JA CSINXR 0 RT, JA . SH, F 0.0 BASE 0 #CSIN, SETX XR LDX 0,0 COM, STARTD FLDA 10*3 FSTA RT FLDA 0 SETB BP BASE BP LDX 1,1 FSTA BP FLDA% BP,1 FSTA BP STARTE FLDA% BP FSTA ARG STARTF EXTERN COS JSR COS JA CSA JA ARG /COS(X) CSA, FSTA C EXTERN SIN JSR SIN JA CSB JA ARG CSB, FSTA S /SIN(X) EXTERN SINH JSR SINH JA CSC JA ARG+3 CSC, FSTA SH /SINH(Y) EXTERN COSH JSR COSH JA CSD JA ARG+3 CSD, FSTA CH /COSH(Y) /XR0 IS 0 FOR CSIN AND 1 FOR CCOS JXN CALCOS,0 FLDA S FMUL CH FSTA ARG /SIN*COSH FLDA C CSE, FMUL SH FSTA ARG+3 /COS*SINH STARTE FLDA ARG FSTA #CAC JA RT EXTERN #CAC /DO COS / CALCOS, FLDA C FMUL CH FSTA ARG FLDA S FNEG JA CSE ENTRY CCOS CCOS, SETX XR LDX 1,0 JA COM |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/CSQRT.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | / / C S Q R T / - - - - - / / VERSION 5A 4-27-77 PT / /COMPLEX SQUARE ROOT ROUTINE /ENTER+ EXIT IN COMPLEX /Z=X+IX / /SQRT(Z)=SQRT(R)*COS(THETA)+SIN(THETA)) / /R=SQRT(X*X+Y*Y) /THETA=ATAN2(Y/X)/2 / /CALLS SQRT,ATAN2,SIN,COS / SECT CSQRT JA #CSQRT DPCHK TEXT +CSQRT + CSQRTX, SETX XR SETB BP JA .+3 BP, F 0.0 XR, F 0.0 ARG, F 0.0 F 0.0 THETA, F 0.0 FP2, F 2.0 ORG 10*3+BP FNOP JA CSQRTX 0 RT, JA . BASE 0 #CSQRT, STARTD FLDA 10*3 FSTA RT FLDA 0 SETB BP SETX XR BASE BP LDX 1,1 FSTA BP FLDA% BP,1 FSTA BP STARTE FLDA% BP FSTA ARG STARTF EXTERN ATAN2 JSR ATAN2 /ATAN(Y/X) JA CSA JA ARG+3 JA ARG CSA, FDIV FP2 /ATAN/2 FSTA THETA FLDA ARG FMULM ARG /X*X FLDA ARG+3 FMUL ARG+3 /Y*Y FADD ARG /X*X+Y*Y FSTA ARG EXTERN SQRT /SQRT(X*X+Y*Y) JSR SQRT JA CSB JA ARG CSB, FSTA ARG /R EXTERN SQRT JSR SQRT JA CSC JA ARG /SQRT(R) CSC, FSTA ARG /SQRT(R) EXTERN SIN JSR SIN /SIN(THETA/2) JA CSD JA THETA CSD, FMUL ARG /*SQRT(X) FSTA ARG+3 EXTERN COS JSR COS /COS(THETA/2)*SQRT(R) JA CSE JA THETA CSE, FMUL ARG FSTA ARG STARTE FLDA ARG FSTA #CAC JA RT EXTERN #CAC |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DABS.RA.
> > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | / / VERSION 5A 4-27-77 PT / SECT DABS BASE 0 DPCHK DPABS, FLDA 0 /GET RETURN ADDRESS STARTD FSTA RETRN FADD TWO /GET ADDRESS OF ARG P7S FSTA 3 FLDA% 3 FSTA 3 STARTE FLDA% 3 JGE RETRN /POSITIVE, SKIP NEGATE FNEG RETRN, 0;0 TWO, 0;2 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DATAN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | / / / SUBROUTINE DATAN(X) / / VERSION 5A 4-26-77 (MH) / /X,THE ARGUMENT, IS REDUCED TO /0<X<1/2 /BY THE IDENTITIES: /ATAN(-X)=-ATAN(X) /IF X>1.0 THEN ATAN(X)=PI/2 - ATAN(1/X) /IF .5<X<1.0 THEN ATAN(X)=ATAN(1/2)+ATAN(2*X-(1/(X+2))) /ATAN(X)=X FOR X<2^(-15) / / / SECT DATAN JA #DATAN DPCHK / TEXT +DATAN + DATNXR, SETX XRDATN SETB BPDATN BPDATN, F 0.0 XRDATN, F 0.0 DATFP1, F 1.0 F 0.0 DATLOW, -15 2000 0000 0000 0000 0000 / ORG 10*3+BPDATN FNOP JA DATNXR 0 DATRTN, JA . / LAMBDA, 0004 3057 7537 4017 0276 4536 DATB0, 0005 3221 3522 3121 3352 5066 DATA1, 0007 5372 4104 3437 1766 6167 DATB1, 0003 3135 1757 0565 4141 4270 DATA2, 0001 5473 7524 1112 4701 2723 DATB2, 0002 2065 4070 1015 2710 3176 DATA3, 7775 5374 4326 3317 1675 3124 DATB3, 0001 2410 5255 0370 2076 6374 PIS2, 0001 3110 3755 2421 0264 3013 ATN1S2, 7777 3553 0634 0530 3443 6406 DATP5, 7777 3777 7777 7777 7777 7776 X, F 0.0 F 0.0 C0, F 0.0 F 0.0 DT1, F 0.0 F 0.0 DATFP2, F 2.0 F 0.0 Z, F 0.0 F 0.0 / /PICK UP RETURN AND ARGUMENT BASE 0 #DATAN, STARTD FLDA 10*3 FSTA DATRTN FLDA 0 SETX XRDATN SETB BPDATN BASE BPDATN LDX 1,1 FSTA BPDATN FLDA% BPDATN,1 FSTA BPDATN STARTE FLDA% BPDATN /GET X LDX -1,0 /SIGN JGE .+5 LDX 0,0 /SAVE SIGN FNEG FSTA X /SAVE ARG / /CHECK ARGAINST LOWER LIMIT FLDA X FSUB DATLOW /TOO SMALL? JLE DATGO /YES ATAN(X)=X LDX -1,1 FCLA FSTA C0 / /REDUCE X TO RANGE 0<X<.5 DATA, FLDA X FSUB DATFP1 JLE DATB />1? FLDA DATFP1 /YES FDIV X /X=1/X LDX 0,1 /SET FLAG FSTA X DATB, FLDA X FSUB DATP5 />= .5 JLT DATC FLDA X /X=(2X-1)/(X+2) FADD DATFP2 FSTA DT1 /TEMP FLDA X FMUL DATFP2 FSUB DATFP1 FDIV DT1 FSTA X FLDA ATN1S2 /C0=ATAN(1/2) FSTA C0 /COMPUTE ATAN USING ALGORITHM DATC, FLDA X FMUL X FSTA Z /Z=X*X FLDA Z FADD DATB3 /Z+B3 FSTA DT1 FLDA DATA3 FDIV DT1 /A3/(Z+B3) FADD DATB2 FADD Z /ADD Z+B2 FSTA DT1 /TEMP FLDA DATA2 /A2/TEMP FDIV DT1 FADD DATB1 FADD Z /ADD Z +B1 FSTA DT1 /TEMP FLDA DATA1 /A1/TEMP FDIV DT1 FADD DATB0 /ADD Z+B0 FADD Z FSTA DT1 FLDA LAMBDA /LAMBDA*X FMUL X FDIV DT1 /DIV BY THE REST FADD C0 FSTA X JXN DATD,1 /WAS X>1 ORIGINALLY? FLDA PIS2 /Y ATAN(X)=PI/2-ATAN(X) FSUB X DATD, JXN DATRTN,0 /WAS X<0? FNEG /Y JA DATRTN DATGO, FLDA X JA DATD |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DATAN2.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | / / / / D A T A N 2 / - - - - - - / /SUBROUTINE DATAN2(Y,X) / / VERSION 5A 4-27-77 PT / SECT DATAN2 JA #DATN2 DPCHK TEXT +DATAN2+ ATN2XR, SETX XRATN2 SETB BPATN2 BPATN2, FNOP 0 0 XRATN2, F 0.0 YCOR, F 0.0 0;0;0 XCOR, F 0.0 0;0;0 ORG 10*3+BPATN2 FNOP JA ATN2XR 0 AT2RTN, JA . FPIAT2, 2 3110 /PI 3755 2421 0264 3016 ATPI, 0001 3110 /PI/2 3755 2421 0264 3016 BASE 0 #DATN2, STARTD FLDA 10*3 FSTA AT2RTN FLDA 0 SETX XRATN2 SETB BPATN2 BASE BPATN2 LDX 1,1 FSTA BPATN2 FLDA% BPATN2,1 /ADDR OF Y FSTA YCOR FLDA% BPATN2,1+ /ADDR OF X FSTA XCOR STARTE FLDA% YCOR FSTA YCOR /SAVE FOR A SECOND LDX 1,2 /POSITIVE Y JEQ ATN0 JGT ATN1 LDX 0,2 ATN1, FLDA% XCOR /GET X - THE QUADRAND FSTA XCOR /+MOVE IT TO A SAFE PLACE JEQ ATASP FLDA YCOR /Y/X FDIV XCOR FSTA YCOR EXTERN DATAN JSR DATAN /CALL ATAN JA .+4 /TAKE ARCTAN OF Y/X JA YCOR FSTA YCOR /SAVE IT AWAY JGE A2 /SKIP IF 1ST OR 3RD QUADS FADD FPIAT2 /ADD PI FOR 4TH QUAD FSTA YCOR A2, JXN AT2RTN,2 /DONE IF 1 OR 4 Q FLDA YCOR FSUB FPIAT2 /2ND OR 3RD Q JA AT2RTN ATASP, FLDA ATPI /PI/2 JXN ATNG,2 FNEG ATNG, JA AT2RTN ATN0, FLDA% XCOR JLT POSX FCLA /X POS, ANS =0 JA AT2RTN POSX, FLDA FPIAT2 /X LT 0, ANS = PI JA AT2RTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DATE.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | / / VERSION 5A 4/28/77 PT / SECT8 DATE JA #ST EXTERN #DATE #XR, ORG .+10 TEXT +DATE + #RET, #BASE, ORG .+3 MONTH, ORG .+3 DAY, ORG .+3 YEAR, ORG .+3 TEMP, ORG .+3 DATADR, 0 JA #DATE-1 /ADDRESS OF PS8 DATE WORD ORG 10*3+#BASE FNOP JA #RET 0 DRTN, JA . BASE 0 NEWDAT, 0 CDF 0 TAD% BIPCCL AND BITMSK CLL RTR RTR DCA DATEMP CDF CIF 0 JMP% NEWDAT BIPCCL, 7777 BITMSK, 600 #ST, STARTD 0210 FSTA DRTN 0200 BASE #BASE SETX #XR SETB #BASE LDX 0,1 FSTA #BASE FLDA% #BASE,1+ FSTA MONTH FLDA% #BASE,1+ FSTA DAY FLDA% #BASE,1+ FSTA YEAR FLDA% DATADR /GET THE PS-8 DATE WORD FSTA TEMP /SAVE IT FCLA FSTA TEMP,0 /ZERO EXPONENT AND HIGH HALF OF MANTISSA LDX 10,1 /SHIFT COUNT FLDA TEMP /GET IT BACK ALN 1 /ISOLATE THE MONTH ATX 1 /SAVE THE MONTH LDX -4,2 /DAY SHIFT COUNT FLDA TEMP /GET BACK THE DATE ALN 2 /SHIFT MONTH BITS INTO /HIGH HALF OF MANTISSA FSTA TEMP /SAVE THIS FCLA FSTA TEMP,0 /ISOLATING DAY/YEAR BITS FLDA TEMP /GET THEM BACK LDX 7,2 /NOW ISOLATE DAY ALN 2 ATX 2 /AND SAVE IT IN 2 FLDA TEMP /GET DAY/YEAR BITS LDX -5,3 /PREPARE TO REMOVE DAY BITS ALN 3 /BY SHIFTING THEM INTO HIGH HALF OF MANTISSA FSTA TEMP /SAVE THEM FCLA FSTA TEMP,0 /ZERO DAY BITS FLDA TEMP /RESTORE YEAR BITS LDX 11,3 /SHIFT BACK ALN 3 ATX 3 /PUT THEM INTO XR 3 TRAP4 NEWDAT STARTF /RE-ENTER F MODE XTA 1 /GET MONTH FSTA% MONTH /RETURN IN ARG XTA 2 /NOW DAY FSTA% DAY ADDX 3662,3 /MAKE IT + 1970 ADDX 0,3 DATEMP=.-1 XTA 3 /NOW YEAR FSTA% YEAR JA DRTN /RETURN END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DBLE.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | / SUBROUTINE DBLE - REAL TO DBL PREC / / VERSION 5A 4-27-77 PT / SECT DBLE BASE 0 DPCHK FLDA 0 STARTD FSTA RETRN /SAVE RETURN FADD TWO /ADDR OF ARG POINTER FSTA 3 FLDA% 3 /ADDR OF ARG FSTA 3 STARTF FLDA% 3 /GET ARG FSTA DTEMP FCLA FSTA DTEMP+3 /0 FOR LAST 3 WORDS STARTE FLDA DTEMP RETRN, 0;0 /FLOAT IS A NOP TWO, 0;2 DTEMP, F 0.0 F 0.0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DCOS.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | / / / D C O S / - - - - / /SUBROUTINE DCOS(X) / / VERSION 5A 4-27-77 PT / SECT DCOS JA #DCOS DPCHK TEXT +DCOS + COSXR, SETX XRCOS SETB BPCOS BPCOS, FNOP 0 0 0 0 0 XRCOS, F 0.0 F 0.0 COS1, F 0.0 F 0.0 FPI2CS, 1 /PI DIVIDED BY 2 3110 3755 2421 0264 3016 ORG 10*3+BPCOS FNOP JA COSXR 0 COSRTN, JA . BASE 0 #DCOS, STARTD FLDA 10*3 FSTA COSRTN FLDA 0 SETX XRCOS SETB BPCOS BASE BPCOS LDX 1,1 FSTA BPCOS FLDA% BPCOS,1 /ADDR OF X FSTA BPCOS STARTE FLDA% BPCOS /GET X FADD FPI2CS /ADD IN PI OVER 2 FSTA COS1 EXTERN DSIN JSR DSIN /AND CALL THE SIN JA COSRTN JA COS1 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DEXP.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 | / / / SUBROUTINE DEXP / / VERSION 5A 4-26-77 MH / /E^X=2^(X*LOG2(E)) /E^X=2^(M+F) /M=INTEGER; F=FRACTION / /2^(M+F)=2^(M+N+R) /WHERE 0<R<1/8 /AND M+N+R=M+F=X*LOG2(E) / /(2^M)*(2^N)*(2^R)=E^X / /2^M IS CALCULATED BY SUCCESSIVE MULTIPLIES /2^N IS CALCULATED BY LOOK UP /2^R=1+<A4/((B4/R)-C4+(D4*R)+(H4/(R+(B4/R))))> / /RESTRICTIONS: /X=0 IMPLIES E^X=1 / /X>88.028 IMPLIES E^X=3377/3377/3777/7777/777/7777 / /X<-88.028 IMPLIES E^X=0 / / / SECT DEXP JA #DEXP DPCHK TEXT +DEXP + / DEXPXR, SETX XRDEXP SETB BPDEXP / /BEGINNING OF BASE PAGE / BPDEXP, F 0.0 XRDEXP, F 0.0 X, F 0.0 F 0.0 / ORG 10*3+BPDEXP FNOP JA DEXPXR 0 DEXRTN, JA . / TOPLIM, 3377 3377 3777 7777 7777 7777 M, F 0.0 F 0.0 N, F 0.0 F 0.0 R, F 0.0 F 0.0 LOG2E, 0001 /1.4426950408889634 2705 2435 4512 7013 7603 DFP125, 7775 /.125 3777 7777 7777 7777 7776 DEXFP1, F 1.0 F 0.0 / DFR1S8, 0001 /2^1/8 2134 5340 7437 2505 7302 DFP2S8, 0001 /2^2/8 2301 5770 1214 3334 2524 DFP3S8, 0001 /2^3/8 2457 7553 2515 4250 4720 DFP4S8, 0001 /2^4/8 2650 1171 4637 6357 1425 DFP5S8, 0001 /2^5/8 3053 1625 0212 5174 3070 DFP6S8, 0001 /2^6/8 3272 1176 3126 5516 5532 DFP7S8, 0001 /2^7/8 3526 0143 3476 7222 0722 / / DEXA4, 0006 /60.593191717336463 3622 7666 6462 2157 5534 DEXB4, 0007 /87.417497202235527 2566 5341 0613 6705 7214 DEXC4, 0005 /30.296595858668232 3622 7666 6462 2157 5546 DEXD4, 0001 /1.0500 2063 1463 1463 1463 1462 DEXH4, 0010 /214.17286814547704 3261 3040 4261 5654 0240 DTEMP1, F 0.0 F 0.0 DFP2, F 2.0 F 0.0 / BASE 0 #DEXP, STARTD FLDA 10*3 FSTA DEXRTN FLDA 0 SETX XRDEXP SETB BPDEXP BASE BPDEXP LDX 1,1 LDX 73,2 /FOR ALIGNING FSTA BPDEXP FLDA% BPDEXP,1 /ADDRESS OF X FSTA BPDEXP STARTE FLDA% BPDEXP /GET X LDX 0,0 JGT DEX1 /CHECK SIGN FNEG LDX -1,0 /SET FLAG DEX1, JNE DEX2 /X=0 FLDA DEXFP1 /E^0=1 JA DEXRTN DEX2, FSTA X JA DEX4 DEX3, FCLA JA DEXRTN /RETURN 0 FOR TOO SMALL / /SET UP M+N+R=X*LOG2(E) DEX4, FLDA LOG2E FMULM X FLDA X ALN 2 /FIX FNORM /FLOAT FSTA M /INTEGER PART FLDA X FSUB M FSTA N /FRACTION JNE DEX50 /0 IS SPECIAL CASE FLDA DEXFP1 /1.0 FSTA N /N FSTA R /R JA DEX20 /SKIP / /CALCULATE N+R DEX50, LDX 0,1 FLDA N FSTA R /IF < .125 ALREADY DEX5, FSUB DFP125 /-.125 JLT DEX6 /DONE IF .LT. FSTA R /STORE REMAINDER ADDX 1,1 /NEXT POWER OF 2 JA DEX5 /AND AGAIN / /GET N FROM TABLE DEX6, FLDA DEXFP1,1 FSTA N / /NOW CALCULATE R FLDA R /IF R=0 JNE DEX7 FLDA DEXFP1 /2^R=1 FSTA R JA DEX20 /NO CALCULATION / / DEX7, FLDA DEXB4 FDIV R /(B4/R) FSTA X FLDA DEXD4 /D4*R FMUL R FADD X /+(B4/R) FSUB DEXC4 /-C4 FSTA DTEMP1 FLDA R FADD X /R+(B4/R) FSTA R FLDA DEXH4 FDIV R /H4/(R+B4/R) FADD DTEMP1 FSTA DTEMP1 FLDA DEXA4 FDIV DTEMP1 FADD DEXFP1 FSTA R / /CALCULATE 2^M / DEX20, FLDA M JNE DEX21 FLDA DEXFP1 FSTA M JA DEX30 DEX21, FNEG ATX 1 FLDA DEXFP1 FSTA M FLDA DFP2 DEX22, FMULM M /M*2 JXN DEX22,1+ /CALCULATE M*N*R DEX30, FLDA M FMUL N FMUL R FSTA X JXN DEX31,0 /WAS X MINUS JA DEXRTN DEX31, FLDA DEXFP1 /.1/X IF -X FDIV X JA DEXRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DEXP3.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | / / / / D E X P 3 / - - - - - / /SUBROUTINE DEXP3(B,E) FOR DOUBLE TO DOUBLE / / VERSION 5A 4-26-77 MH / SECT DEXP3 JA #DEXP3 DPCHK EXTERN #ARGER EXP3ER, TRAP4 #ARGER TEXT +DEXP3 + EXP3XR, SETX XREXP3 SETB BPEXP3 JA .+3 BPEXP3, FNOP 0 0 XREXP3, F 0.0 EXP31, F 0.0 F 0.0 EXP32, F 0.0 F 0.0 ORG 10*3+BPEXP3 FNOP JA EXP3XR 0 XP3RTN, JA . FP1XP3, F 1. F 0.0 BASE 0 #DEXP3, STARTD FLDA 10*3 FSTA XP3RTN FLDA 0 SETX XREXP3 SETB BPEXP3 BASE BPEXP3 LDX 1,1 FSTA BPEXP3 FLDA% BPEXP3,1 /ADDR OF B FSTA EXP31 FLDA% BPEXP3,1+ /ADDR OF E FSTA EXP32 STARTE FLDA% EXP31 /GET B JEQ XP3RTN /0 ^ X = 0 FSTA EXP31 /SAVE BASE FLDA% EXP32 /GET E JEQ EXP3ON /X ^ 0 = 1 FSTA EXP32 /SAVE EXPONENT FLDA EXP31 JLT EXP3ER /ALL IS NOT WELL EXTERN DLOG JSR DLOG /CALL LOG JA .+4 /TAKE LOG (B) JA EXP31 FMUL EXP32 /MULT BY EXPONENT-E FSTA EXP31 EXTERN DEXP JSR DEXP /CALL EXP. JA XP3RTN JA EXP31 EXP3ON, FLDA FP1XP3 JA XP3RTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DIM.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | / / VERSION 5A 4-27-77 PT / SECT DIM ENTRY IDIM JA #ST #XR, ORG .+10 #BASE, ORG .+3 A, ORG .+3 B, ORG .+3 BASE #BASE IDIM, #ST, STARTD 0210 FSTA #RTN,0 0200 SETX #XR SETB #BASE LDX 0,1 FSTA #BASE FLDA% #BASE,1+ FSTA A FLDA% #BASE,1+ FSTA B STARTF FLDA% A FSUB% B JGE #RTN FCLA #RTN, JA . END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DLOG.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | / / / D L O G / - - - - / / VERSION 5A 4-27-77 PT / /LOGE(X) / /X=2^N*F / /LOGE(X) /= N*LOGE(2)+LOGE(F) / / SECT DLOG JA #DALOG DPCHK / /IF X<=0 - IT IS AN ERROR EXTERN #ARGER DALERR, TRAP4 #ARGER / TEXT +DLOG + DALXR, SETX XRDAL SETB BPDAL BPDAL, F 0.0 XRDAL, F 0.0 F 0.0 ORG 10*3+BPDAL FNOP JA DALXR 0 DALRTN, JA . N, F 0.0 F 0.0 F, F 0.0 F 0.0 DAL1, F 1.0 F 0.0 / DT7, 7776 /1/7 2222 2222 2222 2222 2221 DT6, 7776 /-1/6 5252 5252 5252 5252 5252 DT5, 7776 /1/5 3146 3146 3146 3146 3146 DT4, 7776 /-1/4 4000 0 0 0 0 DT3, 7777 /1/3 2525 2525 2525 2525 2524 DT2, 7777 /-1/2 4000 0 0 0 0 / A0, F 1.84375 F 0.0 A1, F 1.65625 F 0.0 A2, F 1.500 F 0.0 A3, F 1.375 F 0.0 A4, F 1.250 F 0.0 A5, F 1.1875 F 0.0 A6, F 1.09375 F 0.0 A7, F 1.03125 F 0.0 LA0, 0 /.6118015411059928976 2344 7603 2325 4250 3144 LA1, 0 /.5045560107523952859 2011 2512 4551 3503 7657 LA2, 7777 /.4054651081081643810 3174 6217 5457 7141 1370 LA3, 7777 /.3184537311185346147 2430 3057 0207 0573 0232 LA4, 7776 /.2231435513142097553 3443 7737 0746 5150 4146 LA5, 7776 /.1718502569266592214 2577 6301 6051 7117 2356 LA6, 7775 /.08961215868968712374 2674 1512 1271 2655 1272 LA7, 7773 /.030771658666753687 3740 5154 1636 0313 7764 D16, F 16.0 F 0.0 D8, F 8.0 F 0.0 CUM, F 0.0 F 0.0 DLOGE2, 0 2613 4413 7676 4347 5715 / /PICK UP X BASE 0 #DALOG, STARTD FLDA 10*3 FSTA DALRTN FLDA 0 SETX XRDAL SETB BPDAL BASE BPDAL LDX 1,1 FSTA BPDAL FLDA% BPDAL,1 /ADDRESS FSTA BPDAL STARTE FLDA% BPDAL /AND X JLE DALERR /X <= 0 IS ERROR FSUB DAL1 /SUB 1.0 JNE DALA FCLA /LOG(1)=0 JA DALRTN / DALA, FADD DAL1 /ADD BACK FSTA XRDAL /STORE AT X /EXPONENT STORED IN XR0 /MANTISSA STORED IN XR1-5 /PICK UP EXP + MULTIPLY BY LOGE(2) / XTA 0 FMUL DLOGE2 FSTA N /N*LOGE(2) /XRDAL IS NOW FRACTION IN RANGE .5<=F<1.0 /COMPUTE LOG(F) BY /LOG(F)=LOG(A(K1)*A(K2)...(F))-(LOG(A(K1))+ / LOG(A(K2))...) /FIT F IN A 1/16 RANGE /I.E. 1/2-9/16,9/16-10/16,ETC. /MULTIPLY F BY APPROPRIATE A(K) MULTIPLIER /KEEP RUNNING SUM OF LOG(A(K)) /CONTINUE UNTIL F>1 / LDX 0,0 FLDA XRDAL FSTA F FCLA FSTA CUM DALB, FLDA F FMUL D16 /16 REAL PARTS FSUB D8 /NEED JUST 8 ATX 1 FLDA A0,1 /GET MULTIPLIER FMULM F FLDA LA0,1 /ADD LOG(A(K)) TO SUM FADDM CUM FLDA F FSUB DAL1 JLT DALB /NOW F>1. USE TAYLOR SERIES /LOG(T)=Z-(Z^2)/2+(Z^3)/3+... WHERE Z=T-1 FLDA F FSUB DAL1 /F-1.0 FSTA F FMUL DT7 FADD DT6 FMUL F FADD DT5 FMUL F FADD DT4 FMUL F FADD DT3 FMUL F FADD DT2 FMUL F FADD DAL1 FMUL F FSUB CUM FADD N JA DALRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DLOG10.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | / / / D L O G 1 0 / - - - - - - / /SUBROUTINE DPLOG10(X) / / VERSION 5A 4-26-77 (MH) / SECT DLOG10 JA #DLOG10 DPCHK TEXT +DLOG10+ LOGXR, SETX XRLOG SETB BPLOG JA .+3 BPLOG, FNOP 0 0 0;0;0 XRLOG, F 0.0 LOG1, F 0.0 0;0;0 ORG 10*3+BPLOG FNOP JA LOGXR 0 LOGRTN, JA . ALOG1C, 7777 /DP .4342944819032518276 3362 6754 2511 5624 1612 BASE 0 #DLOG10, STARTD FLDA 10*3 FSTA LOGRTN FLDA 0 SETX XRLOG SETB BPLOG BASE BPLOG LDX 1,1 FSTA BPLOG FLDA% BPLOG,1 /ADDR OF X FSTA BPLOG STARTE FLDA% BPLOG /GET X FSTA LOG1 EXTERN DLOG JSR DLOG /CALL ALOG JA .+4 JA LOG1 FMUL ALOG1C /CORRECT FOR THE LOG BASE E. JA LOGRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DMAX1.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | / / VERSION 5A 4-27-77 PT / SECT DMAX1 BASE 0 DPCHK DPMAX, SETX XR MAXCOM, STARTD FLDA 0 /ADDRESS OF JA .+2+2*N FSTA 3 FLDA 30 /RETURN ADDRESS FSTA RETN FLDA% 3 / JA .+2+2*N FSUB 0 /-JA . FSUB TWO /- 2 LDX 1,1 ALN 1 /DIVIDE BY TWO FNEG /-N ATX 1 LDX 0,2 /FOR ARG PICKUP FLDA% 0,2+ /ADDRESS OF FIRST ARG FSTA 3 STARTE NEW, FLDA% 3 /SAVE NEW MAX FSTA MAX SAME, JXN MORMAX,1+ /ANY MORE ARGS ? FLDA MAX /GET RESULT RETN, JA . MORMAX, STARTD /NEXT ARG ADDRESS FLDA% 0,2+ FSTA 3 STARTE FLDA MAX /COMPARE FSUB% 3 JGE SAME /SAME MAX JA NEW /NEW MAX TWO, 0;2 MAX, 0;0;0 0;0;0 XR, 0;0;0;0;0;0;0;0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DMIN1.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | / / VERSION 5A 4/26/77 MH / SECT DMIN1 BASE 0 DPCHK DPMIN, SETX XR MINCOM, STARTD FLDA 0 /ADDRESS OF JA .+2+2*N FSTA 3 FLDA 30 /RETURN ADDRESS FSTA RETN FLDA% 3 / JA .+2+2*N FSUB 0 /-JA . FSUB TWO /- 2 LDX 1,1 ALN 1 /DIVIDE BY TWO FNEG /-N ATX 1 LDX 0,2 /FOR ARG PICKUP FLDA% 0,2+ /ADDRESS OF FIRST ARG FSTA 3 STARTE NEW, FLDA% 3 /SAVE NEW MIN FSTA MIN SAME, JXN MORMIN,1+ FLDA MIN RETN, JA . MORMIN, STARTD /NEXT ARG ADDRESS FLDA% 0,2+ FSTA 3 STARTE FLDA MIN /COMPARE FSUB% 3 JLE SAME /SAME MIN JA NEW /NEW MIN TWO, 0;2 MIN, 0;0;0 0;0;0 XR, 0;0;0;0;0;0;0;0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DMOD.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | / / / / D M O D / - - - - / /SUBROUTINE DMOD(X,Y) / / VERSION 5A 4-27-77 PT / SECT DMOD JA #DMOD DPCHK TEXT +DMOD + AMODXR, SETX XRAMOD SETB BPAMOD STHREE, 0007 /73 2217 7777 7777 7777 7777 BPAMOD, F 0.0 F 0.0 XRAMOD, 0;1;73 /73 FOR ALIGNING ON 59 XSTOR, F 0.0 F 0.0 AMODX, F 0.0 F 0.0 ORG 10*3+BPAMOD FNOP JA AMODXR 0 AMDRTN, JA . EXTERN #ARGER AMODER, TRAP4 #ARGER FCLA JA AMDRTN BASE 0 #DMOD, STARTD FLDA 10*3 FSTA AMDRTN FLDA 0 SETX XRAMOD SETB BPAMOD BASE BPAMOD FSTA BPAMOD LDX 1,1 FLDA% BPAMOD,1 /ADDR OF X FSTA AMODX FLDA% BPAMOD,1+ /ADDR OF Y FSTA BPAMOD STARTE FLDA% BPAMOD /GET Y JEQ AMODER /Y=0 IS ERROR FLDA% BPAMOD JGT .+3 /GET ABS VALUE FNEG FSTA BPAMOD FLDA% AMODX /GET X JGT .+5 FNEG /GET ABS VALUE OF X LDX 0,1 /NOTE THE SIGN FSTA AMODX /SAV IN A TEMPORARY FDIV BPAMOD /DIVIDE BY Y FSTA XSTOR /SAVE X/Y XTA 3 /GET EXPONENT FSUB STHREE /CHECK SIZE JGE AMODER /TOO BIG FLDA XSTOR /ABS VALUE X/Y ALN 2 /FIX IT UP NOW. FNORM FMUL BPAMOD /MULITPLY IT. FNEG /NEGATE IT. FADD AMODX /AND ADD IN X. JXN AMR,1 FNEG /RESTORE SIGN AMR, JA AMDRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DSIGN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | / / VERSION 5A 4-27-77 PT / SECT DSIGN JA #ST #XR, ORG .+10 TEXT 'DSIGN ' #BASE, ORG .+6 A, ORG .+6 B, ORG .+6 ORG #BASE+31 JA #BASE GOBACK, 0;0;0 BASE #BASE DPCHK #ST, STARTD 0210 /FLDA 10 FSTA GOBACK+1,0 0200 SETX #XR SETB #BASE LDX 0,1 FSTA #BASE FLDA% #BASE,1+ FSTA A FLDA% #BASE,1+ FSTA B STARTE FLDA% B /NEG? JLT #50 /B POS FLDA% A JLT #100 JA GOBACK+1 /A+,B+ #50, FLDA% A JLT GOBACK+1 /A-,B- #100, FNEG /OPP. SIGNS JA GOBACK+1 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DSIN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 | / / / D S I N / - - - / /SUBROUTINE DSIN(X) / / VERSION 5A 4-27-77 PT / SECT DSIN JA #DSIN DPCHK TEXT +DSIN + SINXR, SETX XRSIN SETB BPSIN FPI2SN, 1 /PI DIVIDED BY 2 3110 3755 2421 0264 3016 FPISIN, 2 /PI 3110 3755 2421 0264 3016 F2PISN, 3 /TWO PI 3110 3755 2421 0264 3016 BPSIN, F 0.0 XRSIN, F 0.0 X, F 0.0 F 0.0 ORG 10*3+BPSIN FNOP JA SINXR 0 SINRTN, JA . SIN1, F 0.0 F 0.0 F3PIB2, 0003 /4.71238898038468986 2266 2761 7714 6207 2212 F1SIN, F 1.0 F 0.0 / SINC17, 7720 /1/17! 3124 5435 6014 1265 1236 SINC15, 7730 /-1/15! 4506 0060 3063 0437 4133 SINC13, 7740 /1/13! 2604 4430 2352 0664 1151 SINC11, 7747 /-1/11! 4506 3352 3002 5354 3710 SINC9, 7756 /1/9! 2707 3616 4525 5434 6350 / SINC7, 7764 /-1/7! 4577 4577 4577 4577 4636 / SINC5, 7772 /1/5! 2104 2104 2104 2104 2104 / SINC3, 7776 /-1/3! 5252 5252 5252 5252 5244 / SINTST, 7770 2000 0000 0000 0000 0000 SEVTHR, 0007 2217 7777 7777 7777 7777 BASE 0 #DSIN, STARTD FLDA 10*3 FSTA SINRTN FLDA 0 SETX XRSIN SETB BPSIN BASE BPSIN LDX 1,1 LDX 73,2 FSTA BPSIN FLDA% BPSIN,1 /ADDR OF X FSTA BPSIN STARTE FLDA% BPSIN /GET X LDX -1,0 /SET SIGN TO POSITIVE. JGT SINMOD /IF POSITIVE BYPASS FUDGE. JEQ SINRTN /IF ZERO EXIT. FNEG /NEGATIVE. NEGATE AC. SIN(-X)=-SIN(X) LDX 0,0 /SET SIGN TO MINUS. SINMOD, FSTA X FDIV F2PISN /X/2PI ALN 2 FNORM FMUL F2PISN /*2PI FSTA SIN1 FLDA X FSUB SIN1 FSTA SIN1 FSTA X /CHECK FOR QUADRANT /1 0-PI/2 SIN(PI/2)=1 /2 PI/2-PI SIN(PI)=0 /3 PI-3PI/2 SIN(3PI/2)=-1 /4 3PI/2-2PI SIN(2PI)=0 / FLDA FPI2SN /PI/2 FSUB SIN1 JGT TAYLOR JEQ SPIB2 /=PI/2 FLDA FPISIN /PI FSUB SIN1 JLT S1 JEQ SPI /=PI FLDA FPISIN FSUB SIN1 /SIN(X)=SIN(PI-X) FSTA X JA TAYLOR S1, FLDA F3PIB2 /3PI/2 FSUB SIN1 JLT S2 JEQ S3PIB2 /=3PI/2 FLDA SIN1 FSUB FPISIN FNEG FSTA X /SIN(X)=-SIN(X-PI) JA TAYLOR S2, FLDA F2PISN /2PI FSUB SIN1 JLT DSNER /ERROR JEQ SPI FNEG FSTA X /CALCULATE SIN VIA TAYLOR SERIES TAYLOR, FLDA X /RECALL NUMBER TO BE WORKED ON. FMUL X /MULTIPLY OUT. FSTA SIN1 FMUL SINC17 /NOW DO THE STANDARD ITERATION. FADD SINC15 FMUL SIN1 FADD SINC13 FMUL SIN1 FADD SINC11 FMUL SIN1 FADD SINC9 FMUL SIN1 FADD SINC7 FMUL SIN1 FADD SINC5 FMUL SIN1 FADD SINC3 FMUL SIN1 FADD F1SIN /ADD IN 1 FOR SERIES FMUL X /DO THE FINAL MULTIPLY. SING, JXN SINRTN,0 /SHALL WE NEGATE FNEG /YEP JA SINRTN /AND RETURN. SPIB2, FLDA F1SIN JA SING SPI, FCLA JA SINRTN S3PIB2, FLDA F1SIN FNEG JA SING EXTERN #ARGER DSNER, TRAP4 #ARGER |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/DSQRT.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | / / / D S Q R T / / VERSION 5A 4-27-77 PT / SECT DSQRT JA #DSQRT DPCHK TEXT +DSQRT + / DSQXR, SETX XRDSQ SETB BPDSQ JA .+3 BPDSQ, F 0.0 XRDSQ, F 0.0 DARSAV, F 0.0 F 0.0 DSQ2, F 2.0 F 0.0 SNGL, F 0.0 F 0.0 ORG 10*3+BPDSQ FNOP JA DSQXR / 0 DSQRTN, JA . DSQ1, F 0.0 F 0.0 /PICK UP ARGUMENTS BASE 0 #DSQRT, STARTD FLDA 10*3 FSTA DSQRTN FLDA 0 SETX XRDSQ SETB BPDSQ BASE BPDSQ LDX 1,1 FSTA BPDSQ FLDA% BPDSQ,1 /ADDR OF X FSTA BPDSQ / /DO GENERAL TESTS ON THE ARGUMENT / STARTE FLDA% BPDSQ JEQ DSQRTN /RETURN IF 0 JLT DSQER /<0 ERROR FSTA DARSAV /SAVE DOUBLE STARTF /F MODE + ROUND FSTA SNGL /SAVE / /GET INITIAL APPROXIMATION BY CALLING /SINGLE PRECISION ROUTINE / EXTERN SQRT JSR SQRT JA .+4 JA SNGL FSTA SNGL /FIRST APPROX STARTE /BACK TO E / /TAKE N ITERATIONS OF /X(K+1)=1/2(X(K)+X/X(K)) / LDX -3,0 /3 TIMES DSIT, FLDA DARSAV /GET X FDIV SNGL /X(K) FADD SNGL /X(K) FDIV DSQ2 /DIVIDE BY 2 FSTA SNGL /X(K+1) JXN DSIT,0+ /ITERATE FLDA SNGL /GET ANSWER JA DSQRTN /RETURN EXTERN #ARGER DSQER, TRAP4 #ARGER |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXP.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | / / / E X P / - - - / /SUBROUTINE EXP(X) / / VERSION 5A 4-27-77 PT / SECT EXP JA #EXP 0 EXPFUD, 0 0 0 / EXTERN #ARGER EXPER, TRAP4 #ARGER TEXT +EXP + EXPXR, SETX XREXP SETB BPEXP BPEXP, F 0.0 XREXP, F 0.0 EXP1, F 0.0 EXP2, F 0.0 EXP33, F 0.0 EXP4, F 0.0 F1EXP, F 1. F2EXP, F 2. ORG 10*3+BPEXP FNOP JA EXPXR 0 EXPRTN, JA . / EXPAF, 4 2372 1402 / EXPBF, 7774 2157 5157 / EXPCF, 12 5454 343 / EXPDF, 7 2566 5341 / EXP2E, 1 2705 2435 BASE 0 #EXP, STARTD FLDA 10*3 FSTA EXPRTN FLDA 0 SETX XREXP SETB BPEXP BASE BPEXP LDX 1,1 FSTA BPEXP FLDA% BPEXP,1 /ADDR OF X FSTA BPEXP STARTF FLDA% BPEXP /GET X LDX -1,0 /PRESERVE SIGN. JGE .+5 FNEG /IF NEGATIVE NEGATE IT. LDX 0,0 /AND REMEMBER IT,BUBBY. FMUL EXP2E /MULTIPLY TO BINARY TYPE. FSTA EXP1 /AND SAVE IT AWAY. JAL EXPER /CAN T FIX IT, ERROR. ALN 0 /FIX IT UP. FSTA EXP33 /AND SAVE IT. FNORM /NOW NORMALIZE FOR OUR COMPUTATIONS. FNEG /NEGATE THE FAC FADD EXP1 /ADD IN BEFORE NORMAL. FSTA EXP1 /AND STORE BACK. NO FADDM FMUL EXP1 /NOW SQUARE IT. FSTA EXP2 /AND SAVE IT. FADD EXPDF /START THE ITERATION. FSTA EXP4 /SAVE IN ANOTHER TEMP. FLDA EXPCF /NEXT CONSTANT. FDIV EXP4 /AND DIVIDE INTO IT. FSUB EXP1 /SUBTRACT BACK NOW. FADD EXPAF /NEXT CONSTANT. FSTA EXP4 /AND SAVE AGAIN. KEEP THIS UP. FLDA EXPBF FMUL EXP2 FADDM EXP4 FLDA EXP1 FDIV EXP4 FMUL F2EXP FADD F1EXP FSTA EXPFUD /NOW FIDDLE THE EXPONENT. STARTD FLDA EXP33 FADDM EXPFUD-1 /EXPONENT UPDATE. STARTF JXN EXPP,0 /NO INVERSION NECESSARY. RETURN. FLDA F1EXP /INVERT IT FDIV EXPFUD JA EXPRTN EXPP, FLDA EXPFUD /AN EXIT. JA EXPRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXP3.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | / / / / E X P 3 / - - - - / /SUBROUTINE EXP3(B,E) / / VERSION 5A 4-26-77 MH / SECT EXP3 JA #EXP3 EXTERN #ARGER EXP3ER, TRAP4 #ARGER TEXT +EXP3 + EXP3XR, SETX XREXP3 SETB BPEXP3 BPEXP3, FNOP 0 0 XREXP3, F 0.0 EXP31, F 0.0 EXP32, F 0.0 FP1XP3, F 1. ORG 10*3+BPEXP3 FNOP JA EXP3XR 0 XP3RTN, JA . BASE 0 #EXP3, STARTD FLDA 10*3 FSTA XP3RTN FLDA 0 SETX XREXP3 SETB BPEXP3 BASE BPEXP3 LDX 1,1 FSTA BPEXP3 FLDA% BPEXP3,1 /ADDR OF B FSTA EXP31 FLDA% BPEXP3,1+ /ADDR OF E FSTA EXP32 STARTF FLDA% EXP31 /GET B JEQ XP3RTN /0 ^ X = 0 FSTA EXP31 /SAVE BASE FLDA% EXP32 /GET E JEQ EXP3ON /X ^ 0 = 1 FSTA EXP32 /SAVE EXPONENT FLDA EXP31 JLT EXP3ER /ALL IS NOT WELL EXTERN ALOG JSR ALOG /CALL LOG JA .+4 /TAKE LOG (B) JA EXP31 FMUL EXP32 /MULT BY EXPONENT-E FSTA EXP31 EXTERN EXP JSR EXP /CALL EXP. JA XP3RTN JA EXP31 EXP3ON, FLDA FP1XP3 JA XP3RTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPCC.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | / /EXPCC /COMPLEX RAISED TO COMPLEX / / VERSION 5A 4-26-77 MH / /(A+I*B)^(C+I*D) /A+B=0 YIELDS 0 /B+D=0 MEANS USE EXP3 TO CALCULATTE A^C /A+B=0,C+D=0 YIELDS 1.0 /ENTER + EXIT IN STARTE SECT #EXPCC DPCHK EXTERN #CAC EXTERN EXP EXTERN COS EXTERN SIN EXTERN ALOG EXTERN EXP3 EXTERN ATAN2 EXTERN SQRT BASE 0 EXPCC, JA . FSTA C,0 FLDA 0 FSTA A,0 STARTF BASE .+2000 XTA 0 FSTA T1 /SAVE XR 0 FLDA A JNE EX1 /A NOT 0 FLDA B JNE EX1 STARTE /A=B=0 FCLA EX, FSTA #CAC /RESULT = 0 JA EXPCC EX1, FLDA C /C+D=0? JNE EX2 FLDA D JNE EX2 STARTE FLDA FP1 /RESULT = 1 IF C=D=0 JA EX EX2, FLDA B JNE EX3 /USE EXP3 IF B=D=0 FLDA D JNE EX3 STARTF JSR EXP3 JA .+6 JA A JA C FSTA A STARTE FLDA A /RETURN AS REAL PART JA EX EX3, STARTF /TH=ATAN(B/A) JSR ATAN2 JA .+6 JA B JA A FSTA TH / /LOGR=ALOG(SQRT(A*A+B*B)) FLDA A FMUL A FSTA LOGR FLDA B FMUL B FADDM LOGR JSR SQRT JA .+4 JA LOGR FSTA LOGR JSR ALOG JA .+4 JA LOGR FSTA LOGR /ARG=C*TH+D*LOGR FLDA C FMUL TH FSTA ARG FLDA D FMUL LOGR FADDM ARG / /CALCULATE IN AND COS OF ARG. SAVE SIGN OF EACH JSR SIN JA .+4 JA ARG FSTA SINE JSR COS JA .+4 JA ARG FSTA CSINE /CALL C*LOGR-D*TH FLDA D FMUL TH FSTA REST FLDA C FMUL LOGR FSUB REST FSTA REST /REAL = EXP(REST+ALOG(CSINE)) FLDA CSINE /REAL JLT .+6 LDX 0,1 /=1 IF POSITIVE JA .+3 FNEG JSA DO JXN .+3,0 /SKIP IF POS FNEG FSTA A FLDA SINE /IMAG JLT .+6 LDX 0,1 JA .+5 LDX 0,0 FNEG JSA DO JXN .+3,0 FNEG /RESTORE SIGN FSTA B FLDA T1 /RESTORE XR0 ATX 0 STARTE FLDA A FSTA #CAC JA EXPCC / DO, JA . FSTA TH JSR ALOG JA .+4 JA TH FADD REST FSTA ARG JSR EXP JA .+4 JA ARG FSTA ARG FLDA TH /CHECK SIGN JGE DOX FLDA ARG FNEG FSTA ARG DOX, FLDA ARG JA DO A, F 0.0 B, F 0.0 C, F 0.0 D, F 0.0 LOGR, F 0.0 TH, F 0.0 ARG, F 0.0 SINE, F 0.0 CSINE, F 0.0 REST, F 0.0 FP1, F 1.0 F 0.0 T1, F 0.0 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPCI.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | / /EXPCI /COMPLEX RAISED TO INTEGER OR REAL / / VERSION 5A 4-26-77 MH / / /C=A+I*B /C^D=R^D*EXP(D*I*THETA) / /C IS IN #BASE /D IS IN AC / /ENTER IN STARTF,EXIT IN STARTE / SECT #EXPCI ENTRY #EXPCR DPCHK EXTERN SQRT EXTERN ATAN2 EXTERN SIN EXTERN COS EXTERN EXP3 EXTERN #CAC BASE 0 #EXPCR, JA . FSTA EXPON,0 FLDA 0 /REAL FSTA A,0 FLDA 3 /IMAG FSTA B,0 /SET DUMMY BASE PAGE BASE .+2000 / /R=SQRT(A*A+B*B) FLDA A FMUL A FSTA R FLDA B FMUL B FADDM R JSR SQRT JA .+4 JA R FSTA R /R^EXPON JSR EXP3 JA .+6 JA R JA EXPON FSTA R /THETA=ATAN(B/A) JSR ATAN2 JA .+6 JA B JA A /THETA*EXPON FMUL EXPON FSTA A /PHASE ANGLE /IMAG=R*SIN(PHASE) JSR SIN JA .+4 JA A FMUL R FSTA B /REAL=R*COS(PHASE) JSR COS JA .+4 JA A FMUL R FSTA A JGE .+3 /SKIP IF RESULT IS POS FNEG /IF NOT,MAKE IT POS FSUB LOWLIM /TEST FOR ZERO JGE .+5 /JUMP IF NOT 0 FCLA /ASSUME RESULT SHOULD BE 0 FSTA A /AND STORE A 0 /RETURN RESULT IN #CAC AND STARTE STARTE FLDA A FSTA #CAC JA #EXPCR A, F 0.0 B, F 0.0 EXPON, F 0.0 R, F 0.0 LOWLIM, F 0.000009 /NUMBERS >= 1.E-5 OK |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPDD.RA.
> > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | / / VERSION 5A 4-25-77 MH / SECT #EXPDD DPCHK BASE 0 EXTERN DEXP3 JA . FSTA EXPON,0 /EXPONENT FLDA 0 /BASE FSTA BASE,0 JSR DEXP3 /EXP3(BASE,EXPON) JA .+6 JA BASE JA EXPON JA #EXPDD BASE, F 0.0 F 0.0 EXPON, F 0.0 F 0.0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPDI.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | SECT #EXPDI / B**E / WHERE E IS INTEGER / AND B IS DOUBLE PRECISION / / VERSION 5A 4-26-77 MH / DPCHK BASE 0 EXPDI, JA . FSTA SIGN /SAVE SIGN OF EXPONENT JGE POSINT /ITS POSITIVE FNEG POSINT, FSTA EXP XTA 1 /SAVE XR 1 FSTA XR1 LDX -27,1 /BIT COUNT STARTE FLDA ONE /START WITH ONE FSTA PROD STARTF FLDA EXP LOOP, JEQ YES /DONE IF ITS ZERO FDIV TWO /DIVIDE BY TWO ALN 0 /INTEGERIZE FNORM FSTA TEMP /SAVE AT FMUL TWO /IS EXPONENT ODD ? FSUB EXP STARTE JLT ODD /YES, JUMP FLDA 0 /SQUARE BASE SQUARE, FMULM 0 STARTF FLDA TEMP /EXPONENT OVER 2 FSTA EXP JXN LOOP,1+ /LOOP IF MORE BITS YES, FLDA XR1 /DONE, RESTORE XR 1 ATX 1 FLDA SIGN /CHECK SIGN OF EXPONENT JLT INVERT /IT WS NEGATIVE, INVERT RESULT STARTE FLDA PROD /RETURN ANSWER JA EXPDI INVERT, STARTE FLDA ONE /RETURN WITH 1/PROD FDIV PROD JA EXPDI ODD, FLDA 0 FMULM PROD JA SQUARE /GO SQUARE THE BASE ONE, F 1.0 F 0.0 TWO, F 2.0 PROD, F 0.0 F 0.0 SIGN, F 0.0 TEMP, F 0.0 XR1, F 0.0 EXP, F 0.0 F 0.0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPDR.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | / / VERSION 5A 4-26-77 MH / SECT #EXPDR DPCHK BASE 0 EXTERN DEXP3 JA . FSTA EXPON,0 /EXPONENT FCLA FSTA EXPON+3 /MUST BE 6 WDS STARTE FLDA 0 /BASE FSTA BASE,0 JSR DEXP3 /EXP3(BASE,EXPON) JA .+6 JA BASE JA EXPON JA #EXPDR BASE, F 0.0 F 0.0 EXPON, F 0.0 F 0.0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPIC.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | / /EXPIC /INTEGER OR REAL RAISED TO COMPLEX / / VERSION 5A 4-26-77 MH / /(A)^(C+I*D) /A=0 YIELDS 0 /D=0 MEANS USE EXP3 TO CALCULATE A^C /C+D=0 YIELDS 1.0 /ENTER + EXIT IN STARTE SECT #EXPIC DPCHK EXTERN #CAC EXTERN EXP EXTERN COS EXTERN SIN EXTERN ALOG EXTERN EXP3 EXTERN SQRT BASE 0 EXPIC, JA . FSTA C,0 STARTF FLDA 0 /BASE FSTA A,0 BASE .+2000 XTA 0 FSTA T1 /SAVE XR 0 FLDA A JNE EX1 /A NOT 0 STARTE /A=B=0 FCLA EX, FSTA #CAC /RESULT = 0 JA EXPIC EX1, FLDA C /C+D=0? JNE EX2 FLDA D JNE EX2 STARTE FLDA FP1 /RESULT = 1 IF C=D=0 JA EX EX2, FLDA D JNE EX3 /USE EXP3 IF D=0 JSR EXP3 JA .+6 JA A JA C FSTA A STARTE FLDA A /RETURN AS REAL PART JA EX / /LOGR=ALOG(SQRT(A*A)) EX3, FLDA A FMUL A FSTA LOGR JSR SQRT JA .+4 JA LOGR FSTA LOGR JSR ALOG JA .+4 JA LOGR FSTA LOGR /ARG=C+D*LOGR FLDA D FMUL LOGR FADD C FSTA ARG / /CALCULATE SIN AND COS OF ARG. SAVE SIGN OF EACH JSR SIN JA .+4 JA ARG FSTA SINE JSR COS JA .+4 JA ARG FSTA CSINE /CALL C*LOGR-D FLDA C FMUL LOGR FSUB D FSTA REST /REAL = EXP(REST+ALOG(CSINE)) FLDA CSINE /REAL JLT .+6 LDX 0,1 /=1 IF POSITIVE JA .+3 FNEG JSA DO JXN .+3,0 /SKIP IF POS FNEG FSTA C FLDA SINE /IMAG JLT .+6 LDX 0,1 JA .+5 LDX 0,0 FNEG JSA DO JXN .+3,0 FNEG /RESTORE SIGN FSTA D FLDA T1 /RESTORE XR0 ATX 0 STARTE FLDA C FSTA #CAC JA EXPIC / DO, JA . FSTA LOGR JSR ALOG JA .+4 JA LOGR FADD REST FSTA ARG JSR EXP JA .+4 JA ARG FSTA ARG FLDA LOGR /CHECK SIGN JGE DOX FLDA ARG FNEG FSTA ARG DOX, FLDA ARG JA DO A, F 0.0 C, F 0.0 D, F 0.0 LOGR, F 0.0 ARG, F 0.0 SINE, F 0.0 CSINE, F 0.0 REST, F 0.0 FP1, F 1.0 F 0.0 T1, F 0.0 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPID.RA.
> > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | / / VERSION 5A 4-26-77 MH / SECT #EXPID DPCHK BASE 0 EXTERN EXPID2 EXPID, JA . FSTA EXPON,0 /EXPONENT STARTF FLDA 0 /BASE FSTA BASE,0 JSR EXPID2 JA .+6 JA BASE JA EXPON JA EXPID BASE, F 0.0 EXPON, F 0.0 F 0.0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPID2.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | / / / / E X P I D 2 / - - - - - - / /SUBROUTINE EXPID2(B,E) /WHERE B IS INTEGER AND E IS DOUBLE / / VERSION 5A 4-26-77 MH / SECT EXPID2 JA #EXID2 EXTERN #ARGER EXP3ER, TRAP4 #ARGER TEXT +EXPID2+ EXP3XR, SETX XREXP3 SETB BPEXP3 BPEXP3, FNOP 0 0 XREXP3, F 0.0 EXP31, F 0.0 F 0.0 EXP32, F 0.0 FP1XP3, F 1. F 0.0 ORG 10*3+BPEXP3 FNOP JA EXP3XR 0 XP3RTN, JA . BASE 0 #EXID2, STARTD FLDA 10*3 FSTA XP3RTN FLDA 0 SETX XREXP3 SETB BPEXP3 BASE BPEXP3 LDX 1,1 FSTA BPEXP3 FLDA% BPEXP3,1 /ADDR OF B FSTA EXP31 FLDA% BPEXP3,1+ /ADDR OF E FSTA EXP32 STARTF FLDA% EXP31 /GET B JEQ XP3RTN /0 ^ X = 0 JLT EXP3ER FSTA EXP31 /SAVE BASE FCLA FSTA EXP31+3 STARTE LDX 73,1 EXTERN DLOG JSR DLOG /CALL LOG JA .+4 /TAKE LOG (B) JA EXP31 FSTA EXP31 FLDA% EXP32 /GET EXPONENT JEQ EXP3ON /X^0=1 FMULM EXP31 EXTERN DEXP JSR DEXP /CALL EXP. JA XP3RTN JA EXP31 EXP3ON, STARTE FLDA FP1XP3 JA XP3RTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPII.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | SECT #EXPII / B**E / WHERE E IS INTEGER / AND B IS REAL OR INTEGER / / VERSION 5A 4/26/77 MH / BASE 0 JA . FSTA SIGN /SAVE SIGN OF EXPONENT JGE POSINT /ITS POSITIVE FNEG POSINT, FSTA 3 /PUT IT INTO 3 XTA 1 /SAVE XR 1 FSTA XR1 LDX -27,1 /BIT COUNT FLDA ONE /START WITH ONE FSTA PROD FLDA 3 /GET EXPONENT LOOP, JEQ YES /DONE IF ITS ZERO FDIV TWO /DIVIDE BY TWO ALN 0 /INTEGERIZE FNORM FSTA TEMP /SAVE AT FMUL TWO /IS EXPONENT ODD ? FSUB 3 JLT ODD /YES, JUMP FLDA 0 /SQUARE BASE SQUARE, FMULM 0 FLDA TEMP /EXPONENT OVER 2 FSTA 3 JXN LOOP,1+ /LOOP IF MORE BITS YES, FLDA XR1 /DONE, RESTORE XR 1 ATX 1 FLDA SIGN /CHECK SIGN OF EXPONENT JLT INVERT /IT WS NEGATIVE, INVERT RESULT FLDA PROD /RETURN ANSWER JA #EXPII INVERT, FLDA ONE /RETURN 1/PROD FDIV PROD JA #EXPII ODD, FLDA 0 /MULT PROD BY BASE FMULM PROD JA SQUARE /GO SQUARE THE BASE ONE, F 1.0 TWO, F 2.0 PROD, F 0.0 SIGN, F 0.0 TEMP, F 0.0 XR1, F 0.0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/EXPIR.RA.
> > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | / / VERSION 5A 4-26-77 MH / SECT #EXPIR BASE 0 EXTERN EXP3 JA . FSTA EXPON,0 /EXPONENT FLDA 0 /BASE FSTA BASE,0 JSR EXP3 /EXP3(BASE,EXPON) JA .+6 JA BASE JA EXPON JA #EXPIR BASE, F 0.0 EXPON, F 0.0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/FLOAT.RA.
> > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | / / VERSION 5A 4-27-77 PT / SECT FLOAT BASE 0 FLDA 0 STARTD FSTA RETRN /SAVE RETURN FADD TWO /ADDR OF ARG POINTER FSTA 3 FLDA% 3 /ADDR OF ARG FSTA 3 STARTF FLDA% 3 /GET ARG RETRN, 0;0 /FLOAT IS A NOP TWO, 0;2 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/IDINT.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | / VERSION 5A 4-27-77 PT / SECT IDINT JA #DINT DPCHK TEXT +DINT + DINTXR, SETX XRDINT SETB BPDINT BPDINT, F 0.0 F 0.0 XRDINT, 0;73;1 F 0.0 ORG 10*3+BPDINT FNOP JA DINTXR 0 #GOBAK, JA . BASE 0 #DINT, STARTD SETX XRDINT FLDA 10*3 FSTA #GOBAK,0 FLDA% 0,2 SETB BPDINT BASE BPDINT FSTA BPDINT STARTE FLDA% BPDINT JLT NEGFIX /NEGATIVE ARG ALN 1 /FIX POSITIVE ARG FNORM JA #GOBAK /RETURN NEGFIX, FNEG /FIRST MAKE POSITIVE ALN 1 /THEN FIX FNORM FNEG /THEN RE-NEGATE JA #GOBAK END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/IFIX.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | / / VERSION 5A 4-27-77 PT / SECT IFIX ENTRY AINT ENTRY INT BASE 0 AINT, INT, FLDA 0 /ADDRESS OF CALL STARTD FSTA RETRN /SAVE RERN FADD TWO /INCR BY TWO FSTA 3 /GIVES ADDRESS OF ARG POINTER FLDA% 3 /GET ADDR OF ARG FSTA 3 STARTF FLDA% 3 /GET ARG JAL RETRN /LEAVE BIGGIES ALONE JLT NEGFIX /NEGATIVE ARG ALN 0 /FIX POSITIVE ARG FNORM JA RETRN /RETURN NEGFIX, FNEG /FIRST MAKE POSITIVE ALN 0 /THEN FIX FNORM FNEG /THEN RE-NEGATE RETRN, JA . TWO, 0;2 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/LTR.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | / LTR (LOAD TRUTH) EMULATION ROUTINES / / VERSION 5A 4-26-77 MH / SECT #LTR ENTRY #EQ FLDA TRUE STARTF #EQ, JA . JEQ #EQ-3 FCLA JA #EQ-1 ENTRY #NE #NE, JA . JEQ .+4 FLDA TRUE STARTF JA #NE ENTRY #GE FLDA TRUE STARTF #GE, JA . JGE #GE-3 FCLA JA #GE-1 ENTRY #LE FLDA TRUE STARTF #LE, JA . JLE #LE-3 FCLA JA #LE-1 ENTRY #GT FLDA TRUE STARTF #GT, JA . JGT #GT-3 FCLA JA #GT-1 ENTRY #LT FLDA TRUE STARTF #LT, JA . JLT #LT-3 FCLA JA #LT-1 TRUE, F 1.0 F 0.0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/ONQIB.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | / / VERSION 5A 4/28/77 PT / FIELD1 ONQI 0 JMP SETINT /SET UP #INT INITIALLY ISZ ONQI /BUMP ARG POINTER ISZ INTQ+1 /BUMP INTERRUPT Q POINTER IOF /** DCA% INTQ+1 /STICK IOT ONTO INT Q TAD XSKP /FOLLOWED BY A SKIP ISZ INTQ+1 DCA% INTQ+1 /ONTO INT Q ISZ ONQI /SKIP FIRST WORD OF ADDR ISZ INTQ+1 ONQISW, TAD% ONQI /GET INT HANDLER ADDRESS ISZ ONQI DCA% INTADR+1 /ONTO ADDRESS STACK TAD INTADR+1 /NOW MAKE JMS% AND L177 TAD L4600 DCA% INTQ+1 /ONTO INT Q ISZ INTADR+1 ION /:: ISZ IQSIZE /ROOM FOR MORE ? JMP% ONQI /YES TAD .-1 /NO, CLOSE OUT THESUBR DCA ONQI+1 JMP% ONQI SETINT, TAD ONQISW /DO THIS PART ONLY ONCE DCA ONQI+1 CDF IOF /** TAD XSKP /FIX UP #INT DCA% XINT+1 ISZ XINT+1 TAD INTQ+1 DCA% XINT+1 ISZ XINT+1 TAD CIFCDF DCA% XINT+1 ION /** CIFCDF, CDF CIF 10 JMP ONQI+1 /BACK TO ONQI EXTERN #INT XINT, ADDR #INT INTQ, ADDR IHANDL INTADR, ADDR IHADRS IQSIZE, -5 XSKP, SKP L177, 177 L4600, 4600 CDF CIF JMP% IHANDL IHANDL, 0 REPEAT 16 JMP IHANDL-2 IHADRS, 0;0;0;0;0 ENTRY ONQB ONQB, 0 JMP SETBAK /SETUP #IDLE TAD% ONQB /GET ADDRESS OF IDLE JOB ONQBSW, ISZ ONQB DCA% BAKADR+1 /STORE ONTO BACKROUND JOB Q TAD BAKADR+1 /MAKE A JMS% ISZ BAKADR+1 AND L177 TAD L4600 ISZ BAKQ+1 DCA% BAKQ+1 ISZ BQSIZE /MORE ROOM ? JMP% ONQB /YES TAD .-1 /NO, CLOSE THE DOOR DCA ONQB+1 JMP% ONQB SETBAK, TAD ONQBSW /CLOSE OFF #IDLE INITIALIZATION DCA ONQB+1 CDF TAD XSKP /FIX UP #IDLE DCA% XIDLE+1 TAD BAKQ+1 ISZ XIDLE+1 DCA% XIDLE+1 ISZ XIDLE+1 TAD CIFCDF DCA% XIDLE+1 CIF CDF 10 JMP ONQB+1 EXTERN #IDLE XIDLE, ADDR #IDLE BAKQ, ADDR BAKRND BAKADR, ADDR BHADRS BQSIZE, -5 CDF CIF JMP% BAKRND BAKRND, 0 REPEAT 6 JMP BAKRND-2 BHADRS, 0;0;0;0;0 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/PAUSE.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | / / VERSION 5A 4-26-77 MH / SECT8 #PAUSE /FORTRAN PAUSE HANDLER EXTERN #WRITO EXTERN #RSVO EXTERN #RENDO BASE 0 FSTA PNUM /SAVE ARGUMENT STARTD FLDA 0 /GET RETURN ADDRESS FSTA PAURET STARTF TRAP3 #WRITO JA ZERO JA PAUFMT FLDA PNUM /PRINT A MESSAGE "PAUSE N" TRAP3 #RSVO TRAP3 #RENDO TRAP4 OPAUSE /DO ACTUAL PAUSE PAURET, JA . /RETURN OPAUSE, 0 AND% 0 AND% 0 /WASTE SOME TIME SO THAT THE LAST AND% 0 /TWO CHARS OF THE MESSAGE WILL PRINT. AND% 0 AND% 0 ISZ ZERO JMP OPAUSE+1 DPAUSE, IOF KSF JMP .-1 KRB CLA ION CDF CIF 0 JMP% OPAUSE PNUM, F 0.0 ZERO, F 0.0 PAUFMT, TEXT %(' PAUSE'I6/)% END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/PLOT.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | / / VERSION 5A 4-27-77 PT / LINC=6141 PDP=2 DIS=140 COMMZ #PAGE0 /STANDARD PAGE 0 ORG 17 0 /ALPHA REG FOR PDP-12 ENTRY #DISP /THIS IS SO #PAGE0 CAN BE LOADED #DISP, DISPLY, 0 TAD BUFADR+2 /GET BUFFER ADDRESS DCA BUFADR TAD DBFLD /SET UP CHANGABLE CDF DCA FLDDB DBFLD, HLT /GO TO FIRST FIELD OF BUFFER TAD PLTXR+4 /NUMBER OF POINTS CMA DCA NPTS /NEGATED JMP ENDDL /BEGIN DISPLAY DSPLUP, /START OF DISPLAY LOOP IFSW 8 < TAD% BUFADR /GET X VALUE 6053 /LOAD X DISPLACEMENT CLA ISZ BUFADR /BUMP ADDRESS SKP CLA JMS BUMPF /BUMP FIELD TAD% BUFADR 6054 /LOAD Y DISPLACEMENT CLA ISZ BUFADR /INCR ADDRESS SKP CLA JMS BUMPF /INCR FIELD 6052 /SKIP ON BEAM POSITIONED JMP .-1 6055 /INTENSIFY POINT > IFNSW 8 < TAD% BUFADR /GET X DISPLACEMENT DCAZ 17 /INTO ALPHA REG ISZ BUFADR /INCREMENT ADDRESS SKP CLA JMS BUMPF /INCREMENT DATA FIELD TAD% BUFADR /GET Y DISPLACEMENT CIF 10 LINC DIS 17 PDP CLA ISZ BUFADR /INCR BUFFER POINTER SKP CLA JMS BUMPF > ENDDL, ISZ NPTS /INCREMENT COUNTER JMP DSPLUP /LOOP CDF 10 JMP% DISPLY /RETURN TO IDLE Q BUMPF, 0 /FIELD CHANGER TAD FLDDB /BUMP FIELD TAD L10 DCA FLDDB FLDDB, HLT /CHANGE IT NOW JMP% BUMPF PUTONQ, 0 /PUT DISPLY ONTO BACKROUND Q TAD BUFADR+1 /CREATE CDF FOR DISPLAY LOOP AND L7 CLL RAL RTL TAD FLD0 DCA DBFLD IFSW 8 < 6050 /CLEAR DISPLAY LOGIC > CDF CIF SKP JMP% PUTONQ DCA .-2 /ONCE ONLY CIF CDF 10 JMS% ONQBX+1 ADDR DISPLY CIF CDF JMP% PUTONQ /CALLED VIA TRAP4 EXTERN ONQB ONQBX, ADDR ONQB BUFADR, 0 0 PLTXR, 0;0;0;-1;0;0 FLD0, CDF L7, 7 L10, 10 NPTS, 0 SECT PLOT JA #PLOT NAME, TEXT +PLOT + PLTBAS, 0;0;0 XLO, X, 0;0;0 YLO, Y, 0;0;0 XHI, N, 0;0;0 YHI, 0;0;0 ADRBUF, 0;0;0 IFSW 8 < YSCALE, F 1022. YZERO, F 511. ORG 10*3+PLTBAS FNOP JA NAME+3 0 PLTRET, JA . XSCALE, F 786. XZERO, F 511. RANGE, F 1022. BASE, F 511.> IFNSW 8 < YSCALE, F 510. YZERO, F 255. ORG 10*3+PLTBAS FNOP JA NAME+3 0 PLTRET, JA . XSCALE, F 392. XZERO, F 0. RANGE, F 510. BASE, F 255.> L1P5, F 1.5 XYPAIR, 0;0;0 #PLOT, BASE PLTBAS JSA SETUP LDX 1,1 FLDA% PLTBAS,1 /GET ARG ADDRESSES FSTA N FLDA% PLTBAS,1+ FSTA X FLDA% PLTBAS,1+ FSTA Y STARTF FLDA% N /NUMBER OF POINTS TO PLOT FNEG ATX 1 /INTO XR 1 LDX -1,2 /XR 2 IS THE INDEXER PLTLUP, JXN PLOOP,3+ /ANY MORE ROOM IN PLOT BUFFER ? LDX -1,3 /NO, FIX COUNT JA PLTRET PLOOP, FLDA% Y,2+ /GET Y VALUE FMUL YSCALE /SCALE IT FSUB YZERO /SUBTRACT LOWER LIMIT ALN 0 FSTA XYPAIR FLDA% X,2 /GET X VALUE OF PAIR FMUL XSCALE /SCALE IT FSUB XZERO /SUBTRACT LOWER LIMIT ALN 0 STARTD FSTA XYPAIR,0 /XYPAIR+1,+2 CONTAINS THE POINT FLDA XYPAIR /STORE THIS DOUBLE WORD INTO PLOT BUFFER FSTA% ADRBUF,4 ADDX 1,4 /TROUBLE IS, WE WANT POST INCREMENT STARTF JXN PLTLUP,1+ /LOOP IF MORE POINTS JA PLTRET BASE 0 SETUP, JA . STARTD FLDA 30 /GET RETURN ADDRESS FSTA PLTRET FLDA 0 /GET ARG POINTER BASE PLTBAS SETB PLTBAS SETX PLTXR FSTA PLTBAS JA SETUP SECT PLOTR BASE PLTBAS JSA SETUP LDX 1,1 FLDA% PLTBAS,1 /GET ARG ADDRESSES FSTA N FLDA% PLTBAS,1+ FSTA X FLDA% PLTBAS,1+ FSTA Y FLDA% PLTBAS,1+ FSTA YHI STARTF FLDA% YHI ATX 5 FLDA% N /NUMBER OF POINTS TO PLOT FNEG ATX 1 /INTO XR 1 LDX -1,2 /XR 2 IS THE INDEXER PLOTRL, FLDA% Y,2+ /GET Y VALUE FMUL YSCALE /SCALE IT FSUB YZERO /SUBTRACT LOWER LIMIT ALN 0 FSTA XYPAIR FLDA% X,2 /GET X VALUE OF PAIR FMUL XSCALE /SCALE IT FSUB XZERO /SUBTRACT LOWER LIMIT ALN 0 STARTD FSTA XYPAIR,0 /XYPAIR+1,+2 CONTAINS THE POINT FLDA XYPAIR /STORE THIS DOUBLE WORD INTO PLOT BUFFER FSTA% ADRBUF,5 ADDX 1,5 /TROUBLE IS, WE WANT POST INCREMENT STARTF JXN PLOTRL,1+ /LOOP IF MORE POINTS JA PLTRET SECT CLRPLT BASE PLTBAS JSA SETUP LDX 0,4 /DISABLE DISPLAY LOOP LDX 1,1 FLDA% PLTBAS,1 /GET ARG POINTERS FSTA N FLDA% PLTBAS,1+ FSTA ADRBUF FSTA BUFADR+1 STARTF FLDA% N /SIZE OF BUFFER FMUL L1P5 /NUMBER OF 2 WORD PAIRS FNEG ATX 3 /INTO SOME CHOICE XRS TRAP4 PUTONQ /PUTISPLY ONTO IDLE Q CLRRET, JA PLTRET SECT SCALE /SET SCALING FACTORS BASE PLTBAS JSA SETUP LDX 1,1 FLDA% PLTBAS,1 /GET ARGS FSTA XLO FLDA% PLTBAS,1+ FSTA YLO FLDA% PLTBAS,1+ FSTA XHI FLDA% PLTBAS,1+ FSTA YHI STARTF FLDA% XHI /COMPUTE X RANGE FSUB% XLO FSTA XHI FLDA% YHI /NOW Y RANGE FSUB% YLO FSTA YHI FLDA RANGE /COMPUTE XSCALE FDIV XHI FSTA XSCALE FLDA RANGE /NOW Y SCALE FDIV YHI FSTA YSCALE FLDA% XLO /COMPUTE XZERO FMUL RANGE FDIV XHI IFSW 8 < FADD BASE> FSTA XZERO FLDA% YLO /NOW YZERO FMUL RANGE FDIV YHI FADD BASE FSTA YZERO SCLRET, JA PLTRET END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/REAL.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | / / R E A L / - - - - / / A I M A G / - - - - - / / C O N J G / - - - - - / / VERSION 5A 4-27-77 PT / /REAL,AIMAG - ENTER IN COMPLEX,EXIT IN REAL /CONJG - ENTER + EXIT IN COMPLEX / SECT REAL JA #REAL DPCHK TEXT +REAL + REALXR, SETX XRREAL SETB BPREAL BPREAL, F 0.0 XRREAL, F 0.0 ARG, F 0.0 F 0.0 ORG 10*3+BPREAL FNOP JA REALXR 0 REALRT, JA . BASE 0 #REAL, SETX XRREAL LDX 0,2 LDX 1,0 COMM, STARTD FLDA 10*3 FSTA REALRT FLDA 0 SETB BPREAL BASE BPREAL LDX 1,1 FSTA BPREAL FLDA% BPREAL,1 FSTA BPREAL STARTE FLDA% BPREAL /GET ARG FSTA ARG JXN REAM,0 STARTF FLDA ARG+3 FNEG FSTA ARG+3 STARTE FLDA ARG FSTA #CAC JA REALRT REAM, STARTF CON, FLDA ARG,2 JA REALRT EXTERN #CAC / ENTRY AIMAG AIMAG, SETX XRREAL LDX 1,2 LDX 1,0 JA COMM / ENTRY CONJG CONJG, SETX XRREAL LDX 0,2 LDX 0,0 JA COMM |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/REALTM.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | / A-D CLOCKED, BUFFERED SAMPLING ROUTINE / / VERSION 5A 4-27-77 PT / ADSK=6534 ADRB=6533 ADST=6532 ADLM=6531 ADLE=6536 ADCL=6530 CLZE=6130 ESF=4 LINC=6141 PDP=2 SAM=100 CLEN=6134 FIELD1 SAMPLE 0 /INTERRUPT TIME AD SAMPLER IFNSW 8 < JMS LNCSAM /INITIATE SAMPLE NEXTCH, ISZ SAMINS /UPDATE SAM INST FOR NEXT CHAN JMS LNCSAM /SAM AND INITIATE NEXT CHANNEL > TAD SAMPTR /SAVE THE OLD SAM BUFFER POINTER DCA OLDPTR TAD BUFFLD /AND THE FIELD DCA OLDFLD ISZ SAMPTR /BUMP BUFFER POINTER JMP FLDOK /FIELD IS OK TAD BUFFLD /BUMP FIELD TAD L10 DCA BUFFLD FLDOK, ISZ SAMCNT /BUMP BUFFER COUNT JMP BUFFLD /NOT END OF BUFFER TAD ARRAY+2 /RESET POINTER TO START OF BUFFER DCA SAMPTR TAD FLDBUF /RESET BUFFER FIELD DCA BUFFLD TAD BUFSIZ /RESET COUNT DCA SAMCNT BUFFLD, HLT /GET FIELD OF NEW ADB STOP CODE TAD% SAMPTR /IS THIS THE SAM STOP CODE ? TAD M3776 /(ILLEGAL AS A SAMPLE) SZA CLA JMP NOERR ISZ TOOFAS /SET TOO FAST SWITCH SAMPLD, CDF 10 DCA% XCLINT+1 /STOP SAMPLING JMP% SAMPLE NOERR, CLL CMA RAR /SET ADB STOP CODE DCA% SAMPTR OLDFLD, HLT /GET TO FIELD OF SAMPLE IFSW 8 < ADRB /READ SAMPLE > IFNSW 8 < TAD SAMTMP /GET PREVIOUSLY READ SAMPLE > DCA% OLDPTR /INTO BUFFER ISZ NPOINT+2 /ANY MORE SAMPLES SKP /YES ISZ NPOINT+1 /MORE THAN 7777 ? SKP /YES JMP SAMPLD /NO ISZ NCHANL+1 /ANY MORE CHANNELS TO SAMPLE ? JMP NEXTCH /YES GO START SAMPLING TAD CSTART+2 /STARTING CHANNEL IFSW 8 < ADLM > IFNSW 8 < DCA SAMINS JMS LNCSAM /SET CHANNEL TO START /IN CASE CLOCK INITIATED > TAD NCHANL+2 /NUMBER OF CHANNELS DCA NCHANL+1 /INTO COUNTER CDF 10 JMP% SAMPLE IFSW 8 < NEXTCH, ADST /SAMPLE NEXT CHANNEL ADSK /WAIT FOR SAMPLE JMP .-1 JMP SAMPLE+1 > IFNSW 8 < LNCSAM, 0 /LINC SAM SUBROUTINE LINC SAMINS, SAM 0 /SAMPLE AND SELECT NEXT CHANNEL PDP DCA SAMTMP /SAVE IT JMP% LNCSAM > ADSETU, 0 /SET UP ROUTINE DCA TOOFAS /CLEAR TOO FAST SWITCH TAD ARRAY+1 /GET FIELD OF BUFFER AND L7 CLL RTL RAL TAD CDF0 DCA FLDBUF TAD FLDBUF DCA BUFFLD /SAVE IN SAMPLER CODE TAD ARRAY+2 /SET SAMPLER BUFFER POINTER IAC DCA SAMPTR TAD LENGTH+2 /SIZE OF BUFFER CLL RAL TAD LENGTH+2 /TIMES THREE DCA BUFSIZ /SAVE IT TAD BUFSIZ /SET INITIAL COUNT IAC DCA SAMCNT TAD NCHANL+2 /SET CHANNEL COUNT DCA NCHANL+1 IFSW 8 < CLA CMA /STOP THE CLOCK CLZE CLA ADCL /CLEAR AD LOGIC JUST IN CASE TAD L300 /SET AD ENABLE BITS ADLE TAD CSTART+2 /STARTING CHANNEL NUMBER ADLM > IFNSW 8 < CLEN /STOP THE CLOCK TAD CSTART+2 /SET UP INITIAL SAM INSTRUCTION TAD L100 DCA CSTART+2 TAD CSTART+2 DCA SAMST /STARTING SAM TAD SAMST /ALSO INTERRUPT TIME SAM DCA SAMINS TAD L100 /SET FAST SAM BIT IOF /TURN OFF INTERRUPTS IN LINC MODE LINC /ENTER LINC MODE ESF SAMST, SAM 0 /SET INITIAL SAM CHANNEL PDP ION CLA > CIF CDF JMP% ADSETU BASEX, FNOP M3776, -3776 L10, 10 SAMPTR, ARRAY, 0;0;0 LENGTH, 0;0 BUFSIZ, 0 SAMCNT, CSTART, 0 OLDPTR, 0;0 SAMTMP, NCHANL, 0;0;0 NPOINT, 0;0;0 FLDBUF, XCLINT, ADDR #CLINT IFSW 8 < L300, 300 > IFNSW 8 < L100, 100 > SAMXR, 0;0 TOOFAS, 0 ORG 10*3+BASEX 0 JA NAME+3 0 SAMRTN, JA . CDF0, CDF L7, 7 SECT REALTM BASE 0 STARTD FLDA 30 /GET RETURN ADDR FSTA SAMRTN FLDA 0 /GET ARG POINTER BASE BASEX SETB BASEX SETX SAMXR FSTA NPOINT /SAVE ARG POINTER FCLA EXTERN #CLINT FSTA #CLINT /STOP ANY SAMPLING NOW! LDX 1,1 FLDA% NPOINT,1 /GET BUFFER ADDRESS FSTA ARRAY FLDA% NPOINT,1+ /GET ADDR OF LENGTH FSTA LENGTH FLDA% NPOINT,1+ /ADDR OFHANNEL START FSTA CSTART FLDA% NPOINT,1+ /ADDR OF # CHANNELS FSTA NCHANL FLDA% NPOINT,1+ /ADDR OF NUMBER OF POINTS FSTA NPOINT FLDA ARRAY /CREATE SETX INS FADD STXMJA FSTA BUFSTX FSTA ADBSTX /AND SAVE IT IN TWO PLACES STARTF FLDA% LENGTH /INTEGERIZE AND NEGATE SOME ARGS FNEG ALN 0 FSTA LENGTH FNORM ATX 1 /SET BUFFER COUNT FLDA% CSTART /GET STARTING CHANNEL ALN 0 FSTA CSTART FLDA% NCHANL FNEG ALN 0 FSTA NCHANL FLDA% NPOINT FNEG ALN 0 FSTA NPOINT LDX -1,2 /SET UP FOR BUFFER CLEAR FCLA CLRBUF, FSTA% ARRAY,2+ JXN CLRBUF,1+ TRAP4 ADSETU /SET UP AD STUFF FLDA LENGTH /RE-GET BUFFER SIZE FNORM ATX 1 /BUT NOW ITS TIMES THREE FLDA STPCOD /STORE STOP CODES FSTA% ARRAY /INTO FIRST 3 WORD STARTD FLDA SAMADR /SET UP SAMPLER INTERRUPT HANDLER FSTA #CLINT STARTF JA SAMRTN /RETURN NAME, TEXT +RTMADB+ SAMADR, ADDR SAMPLE STPCOD, 3776;3777;0 STXMJA, 1100-1030;0 L2047, F 2047. L511, F 511. ENTRY ADB ADB, BASE 0 /FETCH SAMPLE FROM BUFFER STARTD FLDA 30 /SAVE REUTRN FSTA SAMRTN SETB BASEX SETX SAMXR BASE BASEX JXN SPEEDK,2 /CLOCK TOO FAST FLDA ADBSTX /SAVE OLD SETX FSTA OLDSTX FADD L1 /ADD ONE TO IT FSTA ADBSTX /AND SAVE IT BACK JXN NORINQ,1+ /END OF BUFFER ? FLDA BUFSTX /YES, RESTART FSTA ADBSTX FLDA LENGTH /RESET COUNT ATX 1 NORINQ, STARTF ADBSTX, SETX 0 /SET XR0 TO NEXT SAMPLE WAIT, XTA 0 /GET THE NEXT SAMPLE FSUB L2047 /IS IT THE STOP CODE JEQ WAIT /YES XTA 0 /NO, FETCH THE SAMPLE LDX 3776,0 /SET SAMPLE STOP CODE OLDSTX, SETX 0 /SET XR0 TO PREVIOUS STOP CODE LDX 0,0 /NOW ZERO IT JA SAMRTN /RETURN SPEEDK, EXTERN #WRITO /USE FORTRAN I/O TRAP3 #WRITO /TO WRITE A MESSAGE JA TTYUNT /ON THE TTY JA MESSAG EXTERN #RENDO TRAP3 #RENDO /CLOSE THE RECORD LDX 0,2 /KILL TOO FAST SWITCH JA SAMRTN /RETURN FROM ADB TTYUNT, F 0. MESSAG, TEXT '(" SAMPLING TOO FAST")' BUFSTX, SETX 0 L1, 0;1 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/RFCV.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | / / VERSION 5A 4/26/77 MH / SECT #RFCV /READ FORMATTED COMPLEX VARIABLE ENTRY #WFCV EXTERN #RFSV EXTERN #WFSV JA START DPCHK TEXT "#CIO " RETN, FNOP FNOP SETB BP JA .+3 BP, 0;0;0 CVAL, 0;0;0;0;0;0 ORG BP+30 0;JA RETN 0 GOBAK, JA . START, BASE 0 STARTD 0210 FSTA GOBAK,0 STARTF SETB BP BASE BP JSR #RFSV FSTA CVAL JSR #RFSV FSTA CVAL+3 STARTE FLDA CVAL JA GOBAK BASE 0 #WFCV, FSTA CVAL,0 STARTD 0210 FSTA GOBAK,0 SETB BP BASE BP STARTF FLDA CVAL JSR #WFSV FLDA CVAL+3 JSR #WFSV JA GOBAK END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/RFDV.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | /DOUBLE PRECISION BINARY AND DIRECT ACCESS I/O /FOR OS/8 FORTRAN / / VERSION 5A 4-26-77 MH / /I/O CALLS ARE: / TRAP3 #RSVO ALL SINGLE PRECISION I/O / TRAP3 #RSVO ALL DOUBLE PRECISION FORMATTED I/O / JSR #RFDV DOUBLE PRECISION BINARY + DIRECT ACCESS I/O / TREATED AS 2 SINGLE PRECISION FORMATTED JOBS SECT #RFDV EXTERN #RSVO BASE 0 STARTE FSTA FTEMP3 /SAVE 6 WDS FOR A WRITE STARTD FLDA 0 /RETURN ADDRESS FSTA RFDVRT /SAVE FOR EXIT STARTF FLDA FTEMP3 /PASS 1ST 3 WDS FOR A WRITE TRAP3 #RSVO /DO THE READ OR WRITE FSTA FTEMP3 /SAVE 1ST 3 WDS FROM A READ FLDA FTEMP3+3 /GET 2ND 3 WDS FOR A WRITE TRAP3 #RSVO /DO THE READ OR WRITE FSTA FTEMP3+3 /SAVE 2ND 3 WDS FROM A READ STARTE FLDA FTEMP3 /GET ALL 6 WORDS FOR A READ RFDVRT, JA . FTEMP3, E 0.0 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/RSW.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | / / VERSION 5A 4-26-77 MH / /THE FOLLOWING IS A SET OF 8 MODE (RALF TYPE) /ROUTINES THAT ENABLE PDP 12(8) HARDWARE OPTIONS /THESE ROUTINES ARE CALLABLE AT THE FORTRAN LEVEL /THE FOLLOWING OPTIONS ARE SUPPORTED: / / 1 READ A BIT IN THE RIGHT SWITCHES / 2 READ A BIT IN THE LEFT SWITCHES / 3 READ A SENSE SWITCH / 4 READ AN EXTERNAL LEVEL / 5 OPEN OR CLOSE A RELAY / /IF THE REQUESTED BIT OR SWITCH IS SET THE /SUBROUTINE RETURNS WITH THE CALLERS ARG SET TO /A 1,OTHERWISE IT IS SET TO A 0 / / SECT8 RSW INDEX P17 BASE 0 JSA SETUP /CHECK ONE RSW BIT TRAP4 DORITE /CALL 8 MODE ROUT USER /ARG IS IN FPP XR3 CONT, STARTD /ANSWER IS IN XR3 FLDA% 0,XR2 /GET PTR TO CALLER ANS FSTA 3 STARTF XTA XR3 FSTA% 3 /GIVE ANS TO CALLER GOBAK, FLDA 30 /RTN TO CALLER JAC ENTRY LSW LSW, JSA SETUP /READ 1 LSW BIT TRAP4 DOLEFT /CALL 8MODE ROUT JA CONT ENTRY SSW SSW, STARTD /READ A SENSE SWITCH FLDA ANSNSI JA ESSW ENTRY ROPEN ROPEN, STARTD /OPEN A RELAY FLDA ABCLI ERCLOS, FSTA MASK /PLANT A BCLI OR BSEI IN /8 MODE ROUTINE JSA SETUP TRAP4 RELAY FLDA 30 JAC ENTRY EXTLVL EXTLVL, STARTD /READ AN EXTERNAL LEVEL FLDA ANSXL ESSW, FSTA LSKP /PLANT SXLI OR SNS IN JSA SETUP /8 MODE ROUTINE TRAP4 DOSXL JA CONT ENTRY RCLOSE RCLOSE, STARTD /CLOSE A RELAY FLDA ABSEI JA ERCLOS SETUP, 0;0 /GET ARGS AND SETUP RTN STARTD SETX P17 FLDA% 0,XR1 /GET PTR TO 1ST USER ARG FSTA 3 STARTF FLDA% 3 /USER ARG TO FAC ATX XR3 /PUT IN XR FOR 8 MODE JA SETUP DORITE, 0 /READ RIGHT SWITCHES LAS DCA MASK JMS SETBIT /GET REQUESTED BIT AND MASK /MASK RSW SZA CLA /IF BIT IS SET,SET XR3=1 ISZ XR3 CIF CDF /RTN TO RTS JMP% DORITE DOLEFT, 0 /READ LEFT SWITCHES TAD DOLEFT DCA DORITE IOF 6141 /LINC 517 /LSW 2 /PDP ION JMP DORITE+2 DOSXL, 0 /READ SENSE SWITCH /OR EXTERNAL LEVEL TAD XR3 /=SSW OR LVL TO DO AND P17 TAD LSKP DCA LSKP CLL CML /SET LNK=COND MET IOF 6141 LSKP, 0 /=SNS I N OR SXL N 261 /IF SKP FAILS THEN COND /IS MET SO ROTATE LNK /INTO AC(11) (261=ROL I 1) 2 /PDP ION DCA XR3 /SAVE ANSWER CIF CDF JMP% DOSXL /RTN TO RTS RELAY, 0 /OPEN A RELAY TAD CONT /=6 JMS SETBIT /GO SET RELAY BIT DCA MASK+1 IOF 6141 15 /GET RELAYS MASK, 0 /BCL I OR BSE I 0 /SET OR CLR 1 RELAY BIT 14 /ATR PUT RELAYS BACK 2 ION CLA CIF CDF JMP% RELAY SETBIT, 0 /COME HERE TO POSITION TAD XR3 /BIT IN AC ACCORDING TO /C(AC)+XR3 CMA CLL CML /ROTATE BIT INTO POSITION DCA XR3 /XR3 MUST=0 UPON EXIT RAR /ROTATE LINK UNTIL ISZ XR3 /XR3=0 JMP .-2 JMP% SETBIT /RTN WITH AC SET ABCLI, 1560 /BCL I ABSEI, 1620 /BSE I P17, 17 /FPP XR0 XR1, 1 XR2, 2 XR3, 0 ANSXL, 400 /SXL 261 /ROL I 1 ANSNSI, 460 /SNS I 261 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/SIGN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | / / VERSION 5A 4-27-77 PT / SECT SIGN ENTRY ISIGN JA #ST #XR, ORG .+10 TEXT 'SIGN ' #BASE, ORG .+3 A, ORG .+3 B, ORG .+3 ORG #BASE+31 JA #BASE GOBACK, 0;0;0 BASE #BASE ISIGN, #ST, STARTD 0210 FSTA GOBACK+1,0 0200 SETX #XR SETB #BASE LDX 0,1 FSTA #BASE FLDA% #BASE,1+ FSTA A FLDA% #BASE,1+ FSTA B STARTF FLDA% B JLT #50 FLDA% A JLT #100 JA GOBACK+1 #50, FLDA% A JLT GOBACK+1 #100, FNEG JA GOBACK+1 END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/SIN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | / / / S I N / - - - / /SUBROUTINE SIN(X) / / VERSION 5A 4-27-77 PT / SECT SIN JA #SIN EXTERN #ARGER SINER, TRAP4 #ARGER TEXT +SIN + SINXR, SETX XRSIN SETB BPSIN BPSIN, F 0.0 XRSIN, F 0.0 SIN1, F 0.0 SIN2, F 0.0 F1SIN, F 1. FPI2SN, 1 /PI DIVIDED BY 2 3110 3755 FPISIN, 2 /PI 3110 3755 F2PISN, 3 /TWO PI 3110 3755 ORG 10*3+BPSIN FNOP JA SINXR 0 SINRTN, JA . / SINC9, 7764 2501 7015 / SINC7, 7771 5464 5515 / SINC5, 7775 2431 5362 / SINC3, 0000 5325 0414 / SINTST, 7770 2000 0000 BASE 0 #SIN, STARTD FLDA 10*3 FSTA SINRTN FLDA 0 SETX XRSIN SETB BPSIN BASE BPSIN LDX 1,1 FSTA BPSIN FLDA% BPSIN,1 /ADDR OF X FSTA BPSIN STARTF FLDA% BPSIN /GET X LDX -1,0 /SET SIGN TO POSITIVE. JGT SINMOD /IF POSITIVE BYPASS FUDGE. JEQ SINRTN /IF ZERO EXIT. FNEG /NEGATIVE. NEGATE AC. SIN(-X)=-SIN(X) LDX 0,0 /SET SIGN TO MINUS. SINMOD, JAL SINER /IF SIGN CAN T INT, THEN ERROR. FDIV F2PISN /REDUCE TO BELOW TWO PI. FSTA SIN1 /SAVE IN A TEMP. ALN 0 FNORM /INTERGIZE IT. FNEG FADD SIN1 /RECALL NUMBER. AC NOW <0 FMUL F2PISN /NOW MULTIPLY BACK. FSTA SIN2 /AND SAVE AWAY. FSUB FPISIN /SUBTRACT OFF PI. JLT SINP /LESS THEN PI. FSTA SIN2 /RESTORE AS 2. XTA 0 /INVERT THE SIGN. FNEG FSUB F1SIN /SIN(X-PI)=-SIN(X) ATX 0 /AND PUT BACK. / SINP, FLDA SIN2 /RECALL MAGIC GOODY. FSUB FPI2SN /TEST TO SEE IF X<PI/2 JLT SINPP /YEP. / FLDA FPISIN /SIN(X)=SIN(PI-X) FSUB SIN2 FSTA SIN2 /AND STORE IT BACK. / SINPP, FLDA SIN2 /GET THE MAGIC NUMBER. FSUB SINTST /SEE IF ITS CLOSE TO AN EDGE JGT SINPPP /IT IS NOT FLDA SIN2 /RECALL NUMBER IF TOO SMALE JXN SINRTN,0 /EXIT IF SAME SIGN. FNEG /ELSE NEGATE IT. JA SINRTN SINPPP, FLDA SIN2 /RECALL NUMBER TO BE WORKED ON. FDIV FPI2SN /DIVIDE BY PI OVER TWO. FSTA SIN2 /AND STORE BACK. FMUL SIN2 /MULTIPLY OUT. FSTA SIN1 FMUL SINC9 /NOW DO THE STANDARD ITERATION. FADD SINC7 FMUL SIN1 FADD SINC5 FMUL SIN1 FADD SINC3 FMUL SIN1 FADD FPI2SN /ADD IN PI OVER 2 FMUL SIN2 /DO THE FINAL MULTIPLY. JXN SINRTN,0 /SHALL WE NEGATE FNEG /YEP JA SINRTN /AND RETURN. |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/SIND.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | / / / S I N D / - - - - / /SUBROUTINE SIND(X) / / VERSION 5A 4-27-77 PT / SECT SIND JA #SIND TEXT +SIND + SINDXR, SETX XRSIND SETB BPSIND BPSIND, FNOP 0 0 XRSIND, F 0.0 SIND91, 6 3451 3560 SIND1, F 0.0 ORG 10*3+BPSIND FNOP JA SINDXR 0 SNDRTN, JA . BASE 0 #SIND, STARTD FLDA 10*3 FSTA SNDRTN FLDA 0 SETX XRSIND SETB BPSIND BASE BPSIND LDX 1,1 FSTA BPSIND FLDA% BPSIND,1 /ADDR OF X FSTA BPSIND STARTF FLDA% BPSIND /GET X IN DEGREES FDIV SIND91 /CONVERT TO RADIANS FSTA SIND1 EXTERN SIN JSR SIN /CALL THE SINE JA SNDRTN JA SIND1 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/SINH.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | / / / S I N H / - - - - / /SUBROUTINE SINH(X) / / VERSION 5A 4-27-77 PT / SECT SINH JA #SINH TEXT +SINH + SINHXR, SETX XRSINH SETB BPSINH BPSINH, FNOP 0 0 XRSINH, F 0.0 SINH6, F 0.0 SINH7, F 0.0 SINH8, F 0.0 F1SINH, F 1. F2SINH, F 2. ORG 10*3+BPSINH FNOP JA SINHXR 0 SNHRTN, JA . / SINHLG, 0 2613 4412 / SINH1, F .1 / SINH2, F 87.929 / SINH3, F 6. / SINH4, F 120. BASE 0 #SINH, STARTD FLDA 10*3 FSTA SNHRTN FLDA 0 SETX XRSINH SETB BPSINH BASE BPSINH LDX 1,1 FSTA BPSINH FLDA% BPSINH,1 /ADDR OF X FSTA BPSINH STARTF FLDA% BPSINH /GET X FSTA SINH8 /SAVE THE ARGUMENT. JGE .+3 /MAKE IT POSITIVE. FNEG FSTA SINH7 /AND SAVE ABS VALUE IN CASE WE NEED IT. FSUB SINH1 /IS IT LESS THEN .1? JLE SINHSR /YES. USE SERIES APPROXIMATION. FSUB SINH2 /IS IT GREATER THEN 88.029? JGE SINHAP /YES. USE LOG(2) APPROXIMATION. EXTERN EXP JSR EXP /EXP(X) JA .+4 JA SINH8 FSTA SINH7 FLDA F1SINH FDIV SINH7 /1/EXP(X) FNEG /-1/EXP(X) FADD SINH7 /EXP(X)-1/EXP(X) FDIV F2SINH / 1/2(EXP(X)-1/EXP(X)) JA SNHRTN /AND RETURN NOW. / / SINHAP, FLDA SINH7 /RECALL ABSOULTE VALUE. FSUB SINHLG /ABS(X)-LN(2) FSTA SINH7 /EXP(ABS(X)-LN(2)) EXTERN EXP JSR EXP JA .+4 JA SINH7 FSTA SINH7 FLDA SINH8 /GET SIGN OF ARGUMENT. JGE SPLR /LOAD POSITIVE IF ARG WAS POSITIVE. FLDA SINH7 FNEG /ELSE NEGATE IT. JA SNHRTN /AND RETURN. SPLR, FLDA SINH7 JA SNHRTN / / SINHSR, FLDA SINH8 /X SERIES IF X<.1 FMUL SINH8 /X^2 FSTA SINH7 /X^2 FMUL SINH8 /X^3 FSTA SINH6 /X^3 FMULM SINH7 /X^5 FDIV SINH3 /X^3/6 FADDM SINH8 /X+X^3/6 FLDA SINH7 /X^5 FDIV SINH4 /X^5/120 FADD SINH8 /X+X^3/6+X^5/120 JA SNHRTN /VOILA. WE ARE DONE. |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/SNGL.RA.
> > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | / SUBROUTINE SNGL - DBL PREC TO REAL / / VERSION 5A 4-26-77 MH / SECT SNGL DPCHK BASE 0 FLDA 0 STARTD FSTA RETRN FADD TWO FSTA 3 FLDA% 3 FSTA 3 STARTE FLDA% 3 STARTF JA RETRN RETRN, 0;0 TWO, 0;2 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/SQRT.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | / / / S Q R T / - - - - / /SUBROUTINE SQRT(X) / / VERSION 5A 4-27-77 PT / SECT SQRT JA #SQRT 0 /THE MANTISSA ND EXPOENT DIDDLE AREAS. 0 SQRTEX, 0 0 SQRT13, 0 0 13 /PHONEY EXPONENT PATCH. / EXTERN #ARGER SQRTM1, TRAP4 #ARGER TEXT +SQRT + SQRTXR, SETX XRSQRT SETB BPSQRT BPSQRT, F 0.0 XRSQRT, F 0.0 SQRT1, F 0.0 SQRT2, F 0.0 SQRT3, F 0.0 F1SQRT, F 1. F2SQRT, F 2. ORG 10*3+BPSQRT FNOP JA SQRTXR 0 SQTRTN, JA . SQRTS1, 0 /IF BETWEEN 1/4 & 1/2 3200 0 0 /IF BETWEEN 1/2 & 1 2240 0 / SQRTS2, 7777 /IF BETWEEN 1/4 & 1/2 2327 7772 7777 /IF BETWEEN 1/2 & 1 3300 0 BASE 0 #SQRT, STARTD FLDA 10*3 FSTA SQTRTN FLDA 0 SETX XRSQRT SETB BPSQRT BASE BPSQRT LDX 1,1 FSTA BPSQRT FLDA% BPSQRT,1 /ADDR OF X FSTA BPSQRT STARTF FLDA% BPSQRT /GET X JEQ SQTRTN /IF =0 JUST RTN JLT SQRTM1 /IF <0 THEN ERROR FSTA SQRTEX+1 /SAVE NUMBER AWAY FOR A SECOND. FLDA SQRT13 /GET A RIGHT ADJUSTED 13 IN THE FAC. FSTA SQRTEX-2 /STORE AWAY RIGHT AHEAD OF THE EXPONENT. FLDA SQRTEX /NOW RETREIVE THE EXPONENT AS HIGH ORDER WORD. ALN 0 /CHOP OFF CRAP. JEQ SQRTSC /IS IT EXACTLY ZERO? IF SO, SPECIAL CASE. FNORM /NORMALIZE IT. FSUB F1SQRT /NOW SUBTRACT ONE FROM IT. FDIV F2SQRT /CHOP IT IN HALF NOW. FSTA SQRT1 /AND SAVE 1/2 EXP IN A TEMP. ALN 0 /NOW FIX THE EXPONENT. FNORM /AND NORMALIZE IT TO REMOVE UNDESIRABLE BITS. FSUB SQRT1 /NOW SUBTRACT OFF EXTRANEOUS BITS. FMUL F2SQRT /EXPAND IT AGAIN [FAC =0 OR -1], OR 0 TO +1 JGE .+3 /MAKE SURE ITS POSITIVE. FNEG /NOW MAKE IT 0 IF NO BIT OR +1 IF BIT SQRTBK, ATX 1 /SAVE IN AN INDEX. FSUB F1SQRT /SUBTRACT ONE TO MAKE IT -1 IF NO BIT OR 0 IF BIT. ALN 0 /AND NOW SHIFT IT RIGHT. FSTA SQRTEX-1 /AND SAVE IT OVER THE OLD EXPONENT. FLDA SQRT1 /RECALL OLD PART ALN 0 /FIX IT UP, NOW. FSTA SQRT1 /AND STORE IT BACK FOR LATER USE / / SQRTEX IS NOW 1/4 <X< 1 / FLDA SQRTEX+1 /RECALL NUMBER. FSTA SQRT2 /SAVE IN A TEMP. / FMUL SQRTS1,1 /MULTIPLY BY CORRECT CONSTANT. FADD SQRTS2,1 /AND NOW ADD IN CORRECT CONSTANT. / / NOTE: INITIAL APPROXIMATION DEPENDS ON WHETHER X IS 1/4<X<1/2 OR / 1/2<X<1 / FSTA SQRT3 /SAVE IN A SECOND TEMP. FLDA SQRT2 /RECALL INITIAL. FDIV SQRT3 /CALCULATE X(0)/X(1) FADD SQRT3 /X(1)+X(0)/X(1) FDIV F2SQRT /1/2(X(1)+X(0)/X(1)) FSTA SQRT3 /SAVE AGAIN. NOW X(2) FLDA SQRT2 /RECALL ORIGINAL. FDIV SQRT3 /X(0)/X(2) FADD SQRT3 /X(2)+X(0)/X(2) FSTA SQRTEX+1 /NOW STORE AWAY FOR FINAL EXPONENT DIDDLING. / STARTD / FCLA /ZERO HIGH ORDER EXPONENT PART. FSTA SQRTEX-1 FLDA SQRT1 /RECALL MODIFIED EXPONENT. FADDM SQRTEX /UPDATE FRACTIONAL EXPONENT. / STARTF /RETRUN TO FLOATING MODE. / FLDA SQRTEX+1 /PICK UP THE ANSWER. JA SQTRTN /AND RTN / SQRTSC, FSUB F1SQRT /SPECIAL CASE FUDGE. FSTA SQRT1 /SET EXPONENT ADD ON TO -1. FNEG /AND SET ODD BIT ON. JA SQRTBK /AND GO BACK UP. |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/TAN.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | / / / T A N / - - - / /SUBROUTINE TAN(X) / / VERSION 5A 4-27-77 PT / SECT TAN JA #TAN EXTERN #ARGER TANER, TRAP4 #ARGER TEXT +TAN + TANXR, SETX XRTAN SETB BPTAN BPTAN, FNOP 0 0 XRTAN, F 0.0 TAN1, F 0.0 TAN2, F 0.0 ORG 10*3+BPTAN FNOP JA TANXR 0 TANRTN, JA . BASE 0 #TAN, STARTD FLDA 10*3 FSTA TANRTN FLDA 0 SETX XRTAN SETB BPTAN BASE BPTAN LDX 1,1 FSTA BPTAN FLDA% BPTAN,1 /ADDR OF X FSTA BPTAN STARTF FLDA% BPTAN /GET X JEQ TANRTN /IF 0 RTN NOW FSTA TAN1 /SAVE FOR A SECOND EXTERN COS JSR COS /TAKE COS(X) JA .+4 JA TAN1 JEQ TANER /COS=0. A NO-NO FSTA TAN2 /SAV IT EXTERN SIN JSR SIN /NOW TAKE SIN(X) JA .+4 JA TAN1 FDIV TAN2 /DIV BY COS(X) JA TANRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/TAND.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | / / / T A N D / - - - - / /SUBROUTINE TAND(X) / / VERSION 5A 4-27-77 PT / SECT TAND JA #TAND TEXT +TAND + TANDXR, SETX XRTAND SETB BPTAND BPTAND, FNOP 0 0 XRTAND, F 0.0 TAND91, 6 3451 3560 TAND1, F 0.0 ORG 10*3+BPTAND FNOP JA TANDXR 0 TNDRTN, JA . BASE 0 #TAND, STARTD FLDA 10*3 FSTA TNDRTN FLDA 0 SETX XRTAND SETB BPTAND BASE BPTAND LDX 1,1 FSTA BPTAND FLDA% BPTAND,1 /ADDR OF X FSTA BPTAND STARTF FLDA% BPTAND /GT X IN DEGREES FDIV TAND91 /CONVERT TO RADIANS FSTA TAND1 EXTERN TAN JSR TAN /CALL THE TANGENT JA TNDRTN JA TAND1 |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/TANH.RA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | / / / T A N H / - - - - / /SUBROUTINE TANH(X) / / VERSION 5A 4-27-77 PT / SECT TANH JA #TANH TEXT +TANH + TANHXR, SETX XRTANH SETB BPTANH BPTANH, FNOP 0 0 XRTANH, F 0.0 TANH1, F 0.0 TANH2, F 0.0 ORG 10*3+BPTANH FNOP JA TANHXR 0 TNHRTN, JA . BASE 0 #TANH, STARTD FLDA 10*3 FSTA TNHRTN FLDA 0 SETX XRTANH SETB BPTANH BASE BPTANH LDX 1,1 FSTA BPTANH FLDA% BPTANH,1 /ADDR OF X FSTA BPTANH STARTF FLDA% BPTANH /GET X FSTA TANH1 /SAV IT EXTERN COSH JSR COSH /CALL COSH JA .+4 JA TANH1 FSTA TANH2 /SAVE COSH(X) EXTERN SINH JSR SINH /CALL SINH JA .+4 JA TANH1 FDIV TANH2 /SINH/COSH=TANH JA TNHRTN |
Added src/os8/uni/LANGUAGE/FORTRAN4/LIBRARY/XFIX.RA.
> > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | / / VERSION 5A 4-26-77 MH / SECT #FIX JA . JLT NEGFIX ALN 0 FNORM JA #FIX NEGFIX, FNEG ALN 0 FNORM FNEG JA #FIX END |
Added src/os8/uni/LANGUAGE/FORTRAN4/LOAD.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 | / OS/8 F4 LOADER, V24A / / / / / / / // / / / / /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. / / / / / / / / FIXES FOR V23 J.K. 1975 / / .CORE ROUTINE- RECONIZE CORE RESTRICTION / / / / CHAMGES FOR OS/8 V3D AND OS/78 BY P.T. / .CHANGED VERSION NUMBER TO 24A / .PUT IN NEW DATE ALGORITHM / / VERNUM=24 PATCH="A ESDPG= 7400 /START OF ESD REFERENCE PG IN FIELD 1 LHDR= 7200 /WD0 IN CORE OF LDR HDR IN FIELD 1 OS8SWS= 7643 OSJSWD= 7746 OS8DCB= 7760 OSDATE= 7666 AC7776= CLL STA RAL AC7775= CLL STA RTL AC4000= CLA STL RAR AC2000= CLA STL RTR AC0002= CLA STL RTL / PASS0 DEFINITIONS / ----- ----------- MCTTBL= 6000 /MODULE COUNT TABLE BASE OVTLEN= 2^20^7+2+1 /2 WORDS/OVERLAY, 2 FOR MAIN & 1 FGL OVLTBL= MCTTBL-OVTLEN /(FGL = FOR GOOD LUCK) MODTBL= 21^7+MCTTBL+3 /START OF MODULE TABLE NUMMOD= 7200-MODTBL%3 /NUMBER OF ENTRIES IN MODULE TABLE PTRIO= NDX6 /FLD1;INIT SET TO 7617-1 RALFBF= 7000 /FLD1;BLK TO READ"ESD"FOR FILE CHK /LOADER IMAGE HEADER BLOCK DUMMY SECTION NOPUNCH *LHDR 2 /LOADER IMAGE FILE ID QRTSWP, ZBLOCK 2 /SWAPPER ARGS TO LOAD AND START USER MAIN QHGHAD, ZBLOCK 2 /HIGHEST ADDRESS USED BY THIS PROGRAM QVERNO, 0 /LOADER VERSION NUMBER QDPFLG, 0 /"D.P. HARDWARE REQUIRED" FLAG QUSRLV, ZBLOCK 40 /USER OVERLAY LEVEL DSRN INFO LDBUFS, ZBLOCK 50 /PASS2 BUFFER POINTERS ENPUNCH /RTS ENTRY POINTS /** SOME OF THESE MAY CHANGE IN FUTURE VERSIONS OF RTS ** /** (I HOPE NOT) JARGER= 204 JBAK= 210 JDATE= 203 JDEF= 213 JDISMS= 412 JENDF= 211 JEOFSW= 16 JEXIT= 223 JHANG= 524 JIDLE= 227 JINT= 403 JRDAO= 217 JREADO= 221 JRENDO= 206 JRETRN= 235 JREW= 212 JRSVO= 207 JRUO= 215 JSWAP= 222 JT812= 225 JUERR= 204 JWDAO= 216 JWRITO= 220 JWUO= 214 *0 TMP0, 0 /TMP0-TMP4 FOR GEN. USE TMP1, 0 TMP2, 0 TMP3, 0 *10 /INDEX REGISTERS NDX0, 0 NDX1, 0 NDX2, 0 NDX3, 0 NDX4, 0 NDX5, 0 NDX6, 0 NDX7, OVLTBL-1 /POINTER INTO OVERLAY LENGTH TABLE USR, 200 /USR CALL: COULD BE 200 OR 7700 PPACK, PACK /CHANGED TO TTYO BY ERROR ROUTINE IOFLG, 0 SYMTM3, SYMTBL-3 ORGFLG, 0 RFPTR1, 0 GPTR, 0 LBPTR, 0 TRPCNT, 0 P2FLG, 0 CZFLG, 0 F1FLG, 0 S8FLG, 0 OVRFLO, -1 SWITZ, -1 SVMAIN, -4 /0 IF /S SPECIFIED DPFLG, 0 /MORE PAGE ZERO LOCATIONS GTYP, 0 EPTR, 0 EPT2, 0 ETYP, 0 BPTR, 0 BPT2, 0 REFPTR, 0 RLEN, 0 FTMP0, 0;0 RBLK, 0 FATAL, 0 BP, LDBUFS /POINTER INTO PASS2 BUFFER ARRAY A1, 1;0 /CURRENT ADDRESS IN FIELDS 1-7 LNONUM, 0 LBCNT, 0 BLKCNT, 0 TRAPV, 0;0 BLKSIZ, 0 BSECTP, 0 /POINTER INTO BINARY SECTION TABLE (PASS 2) OUTINH, 0 BLKBEG, 0 NEWBLK, 0 NEWLEN, 0 MCNT, 0 MBGCNT, 0 TMP4, 0 TMP5, 0 PAGE /LOADER STARTS AT 200 ISZ .+2 /NON-CHAIN ENTRY JMP I .+1 /CHAIN ENTRY START /COME HERE TO READ/WRITE THE LOADER IMAGE. LDRIO, 0 /AC=4000 FOR WRITE, 0 FOR READ DCA LDRIOC /STORE READ/WRITE JMS I (NEWBUF TAD BP DCA LDRIOA ISZ LDRIOA TAD I LDRIOA DCA LDRIOB /BLOCK # ISZ LDRIOA TAD I LDRIOA /NUMBER OF BLOCKS LEFT IN SECTION SPA SNA JMP LDRIOR /NULL BUFFER - JUST IN CASE TAD [-4 SMA CLA /IF >4 BLOCKS LEFT ONLY DO 4 TAD [4 CLL RTR RTR RTR TAD LDRIOC /ADD READ/WRITE CDF 0 TAD I (OUTFLD TAD (-CDF DCA LDRIOC /STORE R/W + BLOCK COUNT + FLD BITS TAD BLKBEG DCA LDRIOA JMS I [IOHAN /DF MUST BE 0 HERE! LIMGU /LOADER IMAGE FILE LDRIOC, 0 LDRIOA, 0 LDRIOB, 0 CDF 10 LDRIOR, CLA JMP I LDRIO SETBGX, 0 CLA IAC TAD GPTR JMS SETBPT /EXTREMELY COMMON SEQUENCE JMP I SETBGX SETBPT, 0 DCA BPTR /STORE BPTR CLA IAC TAD BPTR DCA BPT2 /AND PTR TO NEXT WD JMP I SETBPT ORGMSG, TEXT /ILLEGAL ORIGIN/ SYMMSG, TEXT /OVER SYMB/ IOMSG, TEXT %LOADER I/O ERROR% ENTMSG, TEXT %OS/8 ENTER ERROR% PAGE /TTYHAN- TTY HANDLER FOR OUTPUT OF ANY MESSAGE IN ANY FIELD. / MESSAGE MUST BE FIELD CONTAINED & TERMINATE WITH 0 / HANDLER CAN BE CALLED ACROSS FLDS WITH AC CLR. / RTN WITH"IF & DF" SET TO CALLING FLD. / / CALL CDF X /X=FLD OF CALLER*10 / CIF Y /Y=FLD OF TTYHAN*10 / JMS TTYHAN / CDF Z /Z=FLD OF MESS.BUF / BUFADR /MESS BUF. ADDR. / TTYHAN, 0 TAD (6203 /SETUP MICRO INSTR RDF /CDF & CIF FOR RTN DCA CRLFF+1 TAD I TTYHAN /SET UP FLD OF DCA TTYCDF /MESS BUF ISZ TTYHAN CMA TAD I TTYHAN /SET UP MESS BUFF ADDR-1 DCA MESADR ISZ TTYHAN DCA MESADR+1 TTYCDF, 0 JMS CRLF TTYLP, ISZ MESADR+1 JMP .+3 TAD I MESADR JMP HAF ISZ MESADR CLA CMA DCA MESADR+1 TAD I MESADR RTR RTR RTR HAF, AND [77 SNA JMP CRLFF TAD [240 AND [77 TAD [240 JMS TTYO JMP TTYLP CRLFF, JMS CRLF 0 JMP I TTYHAN MESADR, 0 0 RTNOS8, 0 /HERE ON PASS1 FATAL ERROR STA CDF 10 DCA I (OVLTBL /PRINT SYMBOL MAP W/O OVERLAY LENGTH TABLE DOMAP, JMS I (SYMMAP CDF TAD I RTNOS8 /ADDR OF TTY DCA .+3 /MSG JMS I [TTYHAN CDF 0 TAD (TTYO DCA PPACK /FAKE OUT SYMBOL PRINTER TAD LNONUM DCA GTYP /PUT LEVEL AND OVERLAY IN GTYP JMS I (CVLOVL /OUTPUT LEVEL AND OVERLAY AC7775 DCA TMP5 /PRINT 3 DIGIT FILE-WITHIN-OVERLAY TAD MCNT TAD MBGCNT IAC CLL RTL RAL JMS I (CVRT JMS CRLF /OUTPUT CRLF AFTERWARDS JMP I .+1 /RTN TO 7605 /OS8 LDRNAM, 1;0617;2224;2216;1404 /SYS:FORTRN.LD ZBLOCK 5 /NO DEFAULT SYMBOL MAP DEVICE TTYO, 0 TLS TSF JMP .-1 CLA JMP I TTYO / CRLF, 0 TAD (215 JMS TTYO TAD (212 JMS TTYO JMP I CRLF /OS8ER- USED WHEN AN OS/8 ERROR OCCURS WHICH IS FATAL OS8ER, 0 CDF 0 JMS I [TTYHAN CDF 0 /FLD OF MESS BUF SYSERR /ADR OFMESS BUF JMP I [7605 /RTN TO OS8 SYSERR, TEXT /SYSTEM ERROR/ TYTBL, 4040 /CHARS FOR SMAP 0530 /EX (EXTERN) 4040 /GOOD TYPES ARE 4040 /SPACES 1505 /ME (MUL ENTRY) 1523 /MS (MUL SECTN) 4040 /GEN 8MOD SECT 4040 /8MOD COM SECT 4040 /8MOD F1 SECT PAGE /IOHAN- I/O HANDLER 1)FETCHES A OS8 DEVICE HANDLER; / 2)CHKS FOR E.O.FILE;3)ISSUES CALL TO THE HANDLER. / RTN TO CALLER WITH "IOFLG" SET IF / NUM OF BLKS TRANSF LESS THAN REQ AMT. / CAN BE CALLED FROM ANY FLD / IF AC=0,DO ALL OF THE ABOVE. / IF AC=DEV NUM,DO ONLY "FETCH"PART / / CALL CDF X / CIF Y / JMS IOHAN / ADDR /PTR TO UNIT,LEN,STBLK OF FILE IN FLD 1 / ARG(1)/OS8 ARG: FCN CTRL WD / ARG(2)/ " : TRNASF BUF ADR / ARG(3)/ " : REL STBLK OF TRANSF / IOHAN, 0 DCA UNITSV /SAV DEV NUM IF ONE DCA IOFLG /CLR FLG RDF TAD P6201 DCA GETCDF+1 TAD P6203 /SETUP CIF & CDF FOR RDF /RTN JMP DCA RTNIO /FETCH A DEV HANDLER OR LOOKUP ENTRY PT /IF DESIRED HANDLER IS IN CORE TAD UNITSV /GET DEV NUM IF ONE SNA CLA /JUST A FETCH? JMP .+3 /NO JMS INQIRE /YES JMP RTNIO TAD I IOHAN /GET PTR TO UNIT(DEV NUM) DCA ULSADR CDF 10 TAD I ULSADR /GET DEV NUM AND [17 SNA JMS I [OS8ER DCA UNITSV JMS INQIRE /CHK FOR E.O.FILE ISZ IOHAN JMS GETCDF TAD I IOHAN /GET FCN CTRL WD CLL RTL /NUM OF PAGES IS CONVRTED RTL /TO NUM BLKS & PUT RTL /IN BITS 8-11 AND [17 DCA TMP0 /NUM BLKS TO TRANSF /SETUP FCN CTRL WD; TRANSF BUF ADR; & ABS STBLK OF TRANSF /FOR OS8 CALL TO HANDLER TAD I IOHAN /FCN CTRL WD DCA FCNWD ISZ IOHAN TAD I IOHAN /TRANSF BUF ADR DCA FCNWD+1 ISZ IOHAN TAD I IOHAN /GET REL STBLK & BUILD TAD TMP0 /ABS STBLK CIA CLL ISZ ULSADR CDF 10 TAD I ULSADR /FILE LEN-(REL STB+NUM BLKS) SNL SZA /E.O.FILE CONDITION? JMP .+3 /YES CLA /NO JMP SETSBN TAD TMP0 SMA SZA /ANY BLKS TO TRANSF? JMP IOH /YES CLA /NO /CHK IF FILE LEN=0; IF SO DO SEQ STUFF TAD I ULSADR SNA CLA /SEQ DEV? JMP IOH+1 /YES CMA /NO,=-1 IF NUM BLKS TRANSF L.T. REQ DCA IOFLG JMP RTNIO IOH, DCA TMP0 /THIS NUM OF BLKS /UPDATE FCN CTRL WD IN OS8 CALL TAD FCNWD AND (4077 /REMOVE REQ NUM OF PGS DCA FCNWD /& PUT IN THE TAD TMP0 /ALTERED NUM CLL RTR RTR RTR TAD FCNWD DCA FCNWD CMA /=-1 IF NUM BLKS TRANSF L.T. REQ DCA IOFLG /SETUP STARTING BLK NUMBER / SETSBN, ISZ ULSADR CDF 10 TAD I ULSADR /GET ABS STBLK JMS GETCDF /GET DF TAD I IOHAN /ADD REL STBLK DCA FCNWD+2 TAD I IOHAN /UPDATE REL STBLK TAD TMP0 /BY NUM BLKS OF TRANSF DCA I IOHAN /CALL TO THE HANDLER P6203, CIF CDF 0 /IOHAN & OS8 DEV HAN IN FLD 0 KSF /CHK FOR CTRLC JMP .+5 KRS TAD (-203 SNA CLA JMP I [7605 JMS I IOENT FCNWD, 0 0 0 JMP HNDERR /ERROR RETURN OF CALL ISZ IOHAN RTNIO, 0 /CIF INSTR JMP I IOHAN IOENT, 0 ULSADR, 0 UNITSV, 0 / GETCDF, 0 0 JMP I GETCDF HNDERR, JMS I [RTNOS8 IOMSG /INQIRE- DETERMINE IF DESIRED DEV HANDLER IS IN CORE / & IF SO,GET ITS ENTRY PT DVTBL=7647 INQIRE, 0 CDF 10 TAD UNITSV TAD (DVTBL-1 DCA IOENT /ADR OF ENRTY PT IN RESID. TBL TAD I IOENT /GET ENTRY PT IF ONE DCA IOENT TAD IOENT SZA CLA /DEV HAN WAS IN CORE? JMP I INQIRE /YES TAD (7201 /NO DCA P6201+4 TAD UNITSV /GET DEV NUM BK P6201, CDF 0 CIF 10 JMS I USR 1 0 JMS I [OS8ER TAD .-2 DCA IOENT JMP I INQIRE PAGE NXTESD, 0 ISZ EPTR /ADV PTR TO ISZ EPTR /WD 0 OF TAD EPTR /NEXT ENTRY AND [377 /IF AT BLK SNA CLA /BOUNDARY TAD [4 /BUMP IT FOUR TAD EPTR JMS I [SETEPT TAD [3 /CHECK FOR TAD EPTR /END OF DCA TMP0 /ESD TAD I TMP0 /TYPE WD AND [17 /TO AC B8-B11 SZA /LAST ESD? ISZ NXTESD /NO DCA ETYP /SAVE TYPE JMP I NXTESD ADVOVR, 0 /UPDATE PASS1 PASS2 ARGS ISZ MCNT /MORE MODS IN THIS OVR? JMP SAMOVR /YES JMS NXTOVR /SET ARGS FOR NEXT OVER JMP EOLVL /RTN HERE= END OF LEVEL TAD P2FLG /DOING PASS2 ? SMA CLA JMP BY10 /NO TAD (2 /GET NEW LDR TAD BSECTP /IMAGE REL BLK DCA TMP0 /FOR NEXT OVR TAD TMP0 DCA NDX0 TAD I NDX0 /LENGTH OF OVERLAY TAD I TMP0 /PLUS OLD RELATIVE BLOCK DCA I TMP0 /EQUALS NEW RELATIVE BLOCK BY10, TAD LNONUM /ADD 1 TO BITS TAD (20 /4-7 OF LEVEL DCA LNONUM /AND OVR LAY NUM JMP SAMOVR EOLVL, JMS NXTOVR /GET NXT OVR NEW LEVEL JMP SAMOV4 /HERE=END OF ALL LEVELS TAD LNONUM /ADD 1 TO AND [3400 /THE LEVEL TAD (400 /BITS (1-3) DCA LNONUM /AND CLEAR THE OVR BITS TAD P2FLG SMA CLA /DOING PASS2 ? JMP BY7 /NO TAD [4 TAD BSECTP /UPDATE BIN SECTION PTR DCA BSECTP JMP SAMOVR BY7, ISZ I (LEVSYM+2 /SET THE INTERNAL LEVEL SYMBOL TO LEVLN+1 TAD (LEVSYM /ENTER NEW JMS I [LOOK /LEVEL SYMBOL INTO GST TAD [4 TAD LNONUM /SET TYPE DCA I GPTR /TO PROG SECTION IAC /SET PTR TO TAD GPTR /NEW LEVEL DCA I [LVPTR LEVRND, TAD I BPT2 CLL TAD [377 /ROUND UP OLD LEVEL AND [7400 /TO A BLOCK BOUNDARY SZL ISZ I BPTR /MIND THE CARRIES! DCA I BPT2 SAMOVR, TAD [3 /ADV PTR TO TAD RFPTR1 /NXT RALF DCA RFPTR1 /MODULE JMP I ADVOVR SAMOV4, ISZ ADVOVR /BUMP RETURN TAD P2FLG SPA CLA JMP SAMOVR /SKIP ROUNDUP IF PASS 2 JMS I (LEVLUP /MERGE OVERLAY SIZE INTO LEVEL SIZE JMP LEVRND /AND RND UP LAST LEVEL NXTOVR, 0 /HERE AT END OF OVERLAY ISZ MTBL /GET NUM OF TAD I MTBL /MOD IN NXT SNA /OVR JMP I NXTOVR /=END OF LEVEL DCA MBGCNT TAD MBGCNT CIA DCA MCNT TAD P2FLG SMA CLA JMS I (LEVLUP /SET CUR. LEVL =MAX (CUR LEVL, CURNT OVR) ISZ NXTOVR /RTN P+1 IF JMP I NXTOVR /NOT END OF LEVEL SETCNT, 0 TAD (MCTTBL+1 /PTR TO MOD DCA MTBL /COUNT TBL TAD I MTBL /-NUM IN DCA MBGCNT TAD MBGCNT CIA /MAIN DCA MCNT TAD (MODTBL+3 /PTR TO TOP DCA RFPTR1 /OF MOD TBL DCA I (OVRSIZ DCA I (OVRSIZ+1 JMP I SETCNT MTBL, 0 PAGE /LOOKUP OR ENTER A SYMBOL INTO /GLOBAL SYMBOL TABLE (GST). PTR /TO SYMBOL IN FIELD 1 IS IN /AC. USUALLY ITS AN ESD. /RTN P+1=NO MATCH /RTN P+2=MATCH LOOK, 0 DCA TMP0 /PTR TO SYM CDF 10 TAD I TMP0 /SELECT RTR /BUCKET RTR /A-Z, SPACE RTR /OR POUND AND [77 TAD (BUCKET-1 /PTR TO BUCKET LOP5, DCA TMP1 /PTR TO PREV ENTRY TAD I TMP1 /PTR TO NEXT ENTRY SNA /0=BUCKET BOTTOM JMP HOOKIN /NO MATCH IAC /APPEND SYMBOL DCA GPTR /LOOK FOR AC7775 /3 WORD MATCH DCA TMP2 TAD TMP0 DCA EPTR YUCCH, TAD I EPTR CIA CLL TAD I GPTR SZA CLA JMP YECCH /SYMBOLS DIFFER ISZ EPTR ISZ GPTR ISZ TMP2 /ALL MATCH? JMP YUCCH /NO ISZ LOOK /BUMP RTN SETTYP, TAD I EPTR /GET ESD TYPE AND [17 DCA ETYP CLA IAC TAD EPTR JMS I [SETEPT /BUMP EPTR AND SET EPT2 TAD I EPTR /GET ESD NUM RTR /IN B1-B7 RTR /AND SET AND (177 /REFERENCE TAD (ESDPG /POINTER DCA REFPTR TAD I GPTR /SET GST AND [17 /TYPE DCA GTYP /FIELD BITS OF TAD I EPTR /VALUE WORDS AND [7 /CLR DCA I EPTR /HI 9 JMP I LOOK YECCH, SZL /IS NEW GUY LESS THAN GST ENTRY? JMP HOOKIN /YES HOOK-IN HERE TAD I TMP1 JMP LOP5 /TRY NEXT HOOKIN, TAD I TMP1 /GET FWD LINK DCA I NDX4 /TO NEXT INTO TAD NDX4 /NEW. PUT FWD DCA I TMP1 /LINK TO NEW INTO PREV. TAD TMP0 /3 SYM DCA EPTR /INTO GST AC7775 DCA TMP2 TAD I EPTR DCA I NDX4 ISZ EPTR ISZ TMP2 JMP .-4 ISZ NDX4 /SET PTR TO TAD NDX4 /WORD 4 (TYPE) DCA GPTR /OF GST ISZ NDX4 /SET PTR TO NEXT ISZ NDX4 /FREE ENTRY TAD [7 /SEE IF TAD NDX4 /GST IS FULL TAD ENDSYM /END OF GST SPA SNA CLA JMP SETTYP /ITS OK JMS I [RTNOS8 /SYMBOL TABLE SYMMSG /OVER FLOW ENDSYM, 1-OVLTBL SETEPT, 0 DCA EPTR CLA IAC TAD EPTR DCA EPT2 /SET PTR TO BOTH WDS OF DBLWD JMP I SETEPT GETTYP, 0 /ADV GST PTR TAD [7 /TO WD 4 OF TAD GPTR /ENTRY DCA GPTR /CHECK FOR TAD GPTR TAD ENDSYM SMA CLA JMP I GETTYP TAD I GPTR /END OF GST. SZA CLA /IF NOT END, ISZ GETTYP /ISZ RETURN. JMP I GETTYP OLINE, 0 /OUTPUT A LINE OF TEXT TO THE SYMBOL MAP DCA TMP5 OLINLP, TAD I TMP5 JMS I (HAFWD TAD I TMP5 ISZ TMP5 AND [77 SZA CLA JMP OLINLP JMS I [PCRLF /DOUBLE SPACE AFTERWARDS JMS I [PCRLF JMP I OLINE PAGE /HERE TO OUTPUT SYMBOL MAP /EACH SYMBOL IN GST IS 7 WORDS LONG /THE FORMAT IS: /WD0 PTR TO NEXT ALPHABETICAL SYMBOL /WD1 SYMBOL NAME IN PACKED SIX BIT /WD2 ASCII. 00 IS INTERPRETED AS SPACE /WD3 SIX CHARS MAX PER SYMBOL /WD4 B0=1=TRAP VECT SYMBOL ON PASS1 OR / B0=1=PASS2 ERROR, B1-B3=LEVEL NUM / (0-7) B4-B7=OVERLAY NUM (0-17) / B8-B11=TYPE. TYPE FORMAT IS: / 0=END OF ESD TBL (NA TO LDR) / 1=ENTRY POINT / 2=EXTERN / 3=COMMON SECTION / 4=PROGRAM SECTION / 5=MULTIPLE ENTRY POINT / 6=MULTIPLE SECTION / 7=GENERAL 8-MODE SECTION / 10=FIELD1 8-M0DE SECTION / 11=COMMON PG0 8-MODE SECTION / 12-17=UNDEFINED / /WD5 B0-B8=PTR TO PARENT SYMBOL (0R 0) / ON PASS1 =TRAP VECTOR DISPLACEMENT / ON PASS2 / B9-B11=FIELD BITS OF SYMBOL /WD6 ADDR BITS OF SYMBOL /OUTPUT FORMAT OF MAP IS: / /SYMBOL VALUE LEVEL OVRNUM TYPE(*) / /THE TYPE COLUMN IS EITHER 2 BLANKS OR /EX=EXTERN /ME=MULTIPLE ENTRY POINT /MS=MULTIPLE SECTION /ASTERISK MEANS SOME TYPE OF ILLEGAL /REFERENCE TO A SYMBOL AND USUALLY /MEANS A LOADER ORIGINATED TRAP HAS /BEEN GENERATED SOMEWHERE IN THE BINARY /E.G. SUBR GROG AT LEVEL 2 CALLS SUBR /COLUMBO AT LEVEL 1. A USER 7 TRAP /WOULD BE GENERATED IN SUBR GROG, AND /THE SYMBOL COLUMBO WOULD HAVE AN /ASTERISK ASIDE OF IT IN THE TYPE /COLUMN SYMMAP, 0 CDF TAD I (LDRNAM+5 /MAP UNIT SNA /IS IT 0 ? JMP NOMAP /YES, NO MAP TO OUTPUT JMS I [IOHAN /FETCH HANDLER TAD I (LDRNAM+5 /ENTER OUTPUT CIF 10 JMS I USR 3 MPBLK, LDRNAM+6 0 JMP ENTERR /WHOOPS WE HAVE AN ENTER ERROR TAD I (LDRNAM+5 AND [17 CDF 10 DCA I (SMAPU /STORE SYMBOL MAP UNIT TAD (SMAPU /SYMMAP ARGS DCA NDX0 /FOR I/O TAD MPBLK+1 /LENGTH CIA DCA I NDX0 TAD MPBLK DCA I NDX0 TAD (BUCKET /START AT 1ST DCA RLEN /BUCKET (A) TAD (-42 /DO UP UNTIL BUT NOT INCL. DCA RBLK /POUND SIGN AC7775 /INIT PACK ARGS DCA FATAL TAD (RALFBF DCA TMP4 TAD SM600 DCA BLKCNT JMS I [PCRLF TAD (TLINE JMS I (OLINE TAD (STLINE JMS I (OLINE /OUTPUT TITLE AND SUBTITLE TAD I RLEN /1ST SYM LOP10, DCA GPTR TAD GPTR /ANY MORE IN SZA /THIS BUCKET ? JMP JOUSYM /YES ISZ RLEN /NXT BUCKET ISZ RBLK /DONE ALL JMP LOP10-1 /NO ISZ SWITZ /BEEN HERE BEF? JMP DUNMP /YES ALL DONE CLA CMA /SET FOR JUST DCA RBLK /POUND SYMS TAD SVMAIN SNA /DO ONLY #MAIN? JMP LOP10-1 /NO - DO ALL # SYMBOLS PRMAIN, CLA /** REPLACED WITH JMS I (OUTSYM ** DUNMP, TAD [-4 /OUT PUT DCA TMP5 /THE HIGHEST LOCATION TAD A1 /USED BY THE PROGRAM TAD (4060 /FLD BITS JMS HAFWD TAD A1+1 JMS I (CVRT TAD (HLINE JMS I (OLINE /PRINT " = HIGHEST LOC USED" JMS I (PROVLY /PRINT OVERLAY TABLE SM600, CLA /** AC NOT 0 ON RETURN** TAD (214 JMS I PPACK TAD (232 /CTRL Z OUFILP, JMS I PPACK TAD BLKCNT /HAVE WE FILLED TAD [600 /A BLOCK UP COMPLETELY? SZA CLA JMP OUFILP /NO CDF /CLOSE SYMMAP TAD I (SYLST /AC=LENGTH DCA SMPCLN TAD I (LDRNAM+5 /MAP UNIT CIF 10 JMS I USR 4 LDRNAM+6 SMPCLN, 0 JMS I [OS8ER NOMAP, CDF 10 JMP I SYMMAP JOUSYM, JMS I (OUTSYM TAD I GPTR /NEXT SYM TO DO JMP LOP10 HAFWD, 0 /OUTPUT THE 2 6 BIT ASCII CHARS IN AC DCA TMP3 TAD TMP3 /LEFT HALF 1ST RTR RTR RTR JMS SIXTO8 TAD TMP3 JMS SIXTO8 JMP I HAFWD SIXTO8, 0 /CVRT AC FROM AND [77 /6 TO 8 BIT ASCII SZA TAD [240 /TURN ZEROS TO BLANKS AND [77 TAD [240 JMS I PPACK /PUT IN BUFF IN PS/8 FORMAT JMP I SIXTO8 ENTERR, DCA I (DOMAP /CANCEL SYMBOL MAP FROM RTNOS8 JMS I [RTNOS8 /AS WE MASY HAVE COME FROM SYMMAP ENTMSG PAGE /PACK ASCII IN AC INTO OUTPUT BUFF IN /OS/8 3 WORD FORMAT TO 2 12 BIT WORDS PACK, 0 ISZ FATAL /3RD WORD ? JMP ONEOR2 /NO DCA TMP0 /SAVE CHAR AC7776 /BU BUFF PTR TAD TMP4 DCA TMP4 AC7775 DCA FATAL /RESET CNTR JMS ROL /POSITION HI DCA I TMP4 ISZ TMP4 JMS ROL /POSITION LO ONEOR2, DCA I TMP4 ISZ TMP4 ISZ BLKCNT /BLOCK FULL ? JMP I PACK /NO JMS WRBUF TAD SBPTR DCA TMP4 /RESET ARGS TAD (-600 DCA BLKCNT JMP I PACK ROL, 0 TAD TMP0 /3RD CHAR RTL /POSITION RTL /BITS DCA TMP0 /SAV FOR NXT CALL ON LO TAD TMP0 AND [7400 TAD I TMP4 /ADD IN OLDY JMP I ROL WRBUF, 0 /WRITE OUT CDF /SYM MAP JMS I [IOHAN /BUFFER SMAPU /ADDR OF SYM U 200^1!4000!10 /1 BLK OF FLD 1 SBPTR, 7000 /1ST ADDR SYLST, 0 /REL BLK CDF 10 JMP I WRBUF CVRT, 0 /CONVERT AC TO DCA CVRTMP /ASCII NUM TAD TMP5 /-NUM OF DIGITS DCA TMP1 /TO CONVERT LOP7, TAD CVRTMP /CVRT LEFT TO RTL /RIGHT RAL /3 BITS PER DCA CVRTMP /DIGIT TAD CVRTMP RAL AND [7 TAD (260 JMS I PPACK ISZ TMP1 /ENOUGH ? JMP LOP7 /NO JMS I (HAFWD /OUTPUT A PAIR JMP I CVRT /OF SPACES OUTSYM, 0 /DO ONE SYMBOL DCA NDX1 /ADDRESS IN AC ON ENTRY AC7775 DCA TMP2 TAD I NDX1 /SYMBOL IS 1ST JMS I (HAFWD ISZ TMP2 JMP .-3 TAD I NDX1 /SAVE DCA GTYP /TYPE TAD I NDX1 /FLD OF SYMBOL JMS PR15 JMS CVLOVL /CONVERT ADDR, LEVEL, OVERLAY TAD GTYP /NOW DO TYPE AND (17 /ITS B8-B11 TAD (TYTBL-1 /PTR TO TBL OF DCA TMP0 /CHAR PAIRS FOR CDF 0 TAD I TMP0 /TYPE EG EX FOR CDF 10 JMS I (HAFWD /EXTERN TAD GTYP /IF ERROR WAS SPA CLA /FOUND DURING PASS2 B0 OF TYPE=1 EG ILLEGAL SUBR CALL. * ON MAP INDICATES TAD (12 /PASS2 ERROR TAD [240 JMS I PPACK JMS PCRLF JMP I OUTSYM CVRTMP, 0 CVLOVL, 0 CLA CMA DCA TMP5 /DO LEVEL NUM TAD GTYP /ITS B1-B3 OF RAL /OF TYPE WORD JMS CVRT AC7776 /DO OVER NUM DCA TMP5 /ITS B4-B7 OF TAD GTYP /TYPE WORD RTL /POSITION INTO AND (1700 /HI 2 DIGITS JMS CVRT JMP I CVLOVL PCRLF, 0 TAD (215 /EOL JMS I PPACK TAD (212 JMS I PPACK JMP I PCRLF PR15, 0 AND [7 TAD (4060 JMS I (HAFWD TAD [-4 /NOW DO ADDR OF DCA TMP5 /SYMBOL TAD I NDX1 JMS CVRT JMP I PR15 PAGE /PASS 2 OF LOADER - TRANSFORMS BINARIES INTO LOADER IMAGE FILE PASS2, DCA LNONUM /SET FOR MAIN JMS I (BLDTV /BUILD TRAP VECTOR TAD LBCNT /PROCESS LIBR CIA /MODULES 1ST SNA /ANY TO DO? JMP BY12 /NO DCA LBCNT /=-NUM TO DO TAD LBPTR /PTR TO 1ST DCA RFPTR1 /LIBR MOD JMS SETREF /INIT RELOC ARGS AND PROCESS TXT TAD [3 /ADV TO NXT TAD RFPTR1 /LIBR MOD. DCA RFPTR1 ISZ LBCNT /DONE LIBR? JMP .-5 /NO BY12, JMS I (SETCNT /SET ARGS TO PROCESS USER MODS. JMS SETREF /DO 1 MOD JMS I (ADVOVR /ADVANCE ARGS JMP .-2 /RTN HERE IF MORE TO DO JMS I (WRALL /WRITE OUT ALL THE RESIDENT BIN BLOCKS /END OF PASS 2 - RETURN TO OS8 OR CHAIN TO RSYS TAD (7616 DCA NDX0 TAD I (LIMGU /SAVE UNIT AND BLOCK OF LOADER IMAGE DCA I NDX0 /FILE IN CD AREA IN CASE WE CHAIN TAD I (LIMGU+2 DCA I NDX0 /TO THE RUN-TIME-SYSTEM DCA I NDX0 /A PRECAUTION CDF 0 CIF 10 JMS I USR 10 /LOCK USR IN TAD (200 DCA USR TAD I (LDRNAM CIF 10 JMS I USR 4 LDRNAM+1 /CLOSE LOADER IMAGE FILE LDCLEN, 0 JMS I [OS8ER /OOPS! JMS I (SYMMAP /PRINT SYMBOL TABLE IF REQUESTED TAD I (OS8SWS CDF 0 AND (40 /TEST /G SWITCH SNA CLA JMP I [7605 /NOT ON - RETURN TO OS8 CLA IAC CHAIN, CIF 10 JMS I USR CHCODE, 2 RTSNAM /LOOKUP RTS 0 JMP NORTS TAD (6 DCA CHCODE /CHANGE LOOKUP TO CHAIN JMP CHAIN NORTS, DCA I (LDRNAM+5 /KILL SECOND STORAGE MAP JMS I [RTNOS8 RTSMSG RTSNAM, 0622;2423;0000;2326 /FRTS.SV SETREF, 0 JMS I (RDRLES /GET MODULE ESD TABLE AC7776 DCA EPTR LOP12, JMS I .+4 /GET NXTESD JMP BY11 /ALL DONE TAD EPTR /LOOK UP JMS I [LOOK /SYMBOL NXTESD CLA CMA /IGNORE ESD IF TAD ETYP /ITS AN ENTRY SNA CLA /POINT JMP LOP12 /IGNORE TAD GPTR /PUT ADDR OF DCA I REFPTR /GST SYM IN JMP LOP12 /ESD REF. PAGE BY11, CDF 0 /COMPUTE 1ST TAD EPTR /TEXT BLK AND [7400 CLL RTL RTL RAL IAC DCA I (TXTBLK CLA CMA /SET CNT TO -1 DCA BLKCNT /TO KICK OFF 1ST TXT READ TAD RFPTR1 /PTR TO DCA I (TXTBLK-3 /RALF MOD CDF 10 JMS I (TXTSCN /RELOCATE JMP I SETREF /TEXT PAGE BLDTV, 0 /BUILD UP TAD TRPCNT /TRAP VECTOR SNA CLA /ANY TO DO? JMP I BLDTV /NO TAD .+2 /GET BASE JMS I [LOOK /ADDR OF TRPSYM /TRAP VECT ISZ GPTR TAD I GPTR DCA TMP0 ISZ GPTR TAD I GPTR DCA TMP1 TAD TMP0 /FOR SUBR DCA TRAPV /TRPVEC TAD TMP1 DCA TRAPV+1 JMS NEWORG /PROCESS NEW ORIGIN DCA TRPCNT /WILL BE USED TO MARK GST SYMS TAD .+2 /THAT HAVE A VECTOR ENTRY JMS I [LOOK /GET SWAPPER SWPSYM /ADDR ISZ GPTR ISZ GPTR TAD I GPTR DCA RFPTR1 TAD SYMTM3 /SCAN GST LOP11, DCA GPTR /FOR ALL JMS I [GETTYP /TRAP SYMS JMP I BLDTV /ALL DONE TAD I GPTR /IF TYPE WD SMA CLA /B0=1, THEN SYMBOL NEEDS A VECTOR ENTRY JMP LOP11+1 /TRY NEXT 1ST WD OF ENTRY IS TAD (3000 /TRAP3 JMS I [PUTBIN TAD RFPTR1 /NXT IS JMS I [PUTBIN /SWAP ADDR CLL CML CLA RAR /CLR B0 TAD I GPTR /OF TYPE WD DCA I GPTR TAD I GPTR ISZ GPTR RTL RTL DCA TMP0 /HAVE TO MUSH SOME BITS AROUND: TAD TMP0 /OVERLAY NUMBER MOVES FROM B4-7 TO B0-3 AND [7400 DCA TMP1 /LEVEL NUMBER MOVES FROM B1-3 TO B6-8 TAD TMP0 RTL RTL AND (70 TAD TMP1 TAD I GPTR /ADD FLD BITS TO MESS JMS I [PUTBIN TAD TRPCNT /ADV VECT TAD (10 /ENTRY NUM DCA TRPCNT /COUNTER TAD I GPTR /TAG HI 9 TAD TRPCNT /OF GST SYM DCA I GPTR /WD5 WITH TV ENTRY NUMBER ISZ GPTR TAD I GPTR /ENTER JMS I [PUTBIN /ADDR AC7776 TAD GPTR JMP LOP11 /FOR THIS SYM NEWORG, 0 TAD BSECTP JMS I [SETEPT /SET PTR TO CURRENT SECTION TAD I EPT2 CIA CLL TAD TMP1 DCA TMP3 TAD TMP3 AND (6000 DCA TMP2 /DO A DOUBLE PRECISION SUBTRACT CML RAL TAD I EPTR CIA CLL TAD TMP0 SPA JMP BADORG /OUT OF RANGE CLL RAR TAD TMP2 /COMBINE AND SHIFT RIGHT 8 RAL RTL RTL /(I.E. LEFT 5) DCA TMP2 TAD TMP2 ISZ EPT2 TAD I EPT2 /ADD TO RELATIVE BLOCK OF SECTION DCA NEWBLK ISZ EPT2 TAD TMP2 CIA TAD I EPT2 SPA JMP BADORG /ORIGIN OUT OF RANGE DCA NEWLEN JMS I (NEWBB /GET BUFFER USING NEWBLK AND NEWLEN TAD TMP3 AND (1777 TAD BLKBEG DCA BLKSIZ /FORM POINTER INTO PROPER BUFFER JMP I NEWORG BADORG, JMS I [RTNOS8 ORGMSG /ORIGIN OUT OF CURRENT FILE LIMITS JMP I NEWORG PAGE PROVLY, 0 /ROUTINE TO PRINT OVERLAY INFO IN SYMBOL MAP JMS I [PCRLF TAD (OTLINE JMS I (OLINE TAD (OVLTBL-1 DCA NDX1 PROVLP, TAD I NDX1 /GET ENTRY SPA /TEBLE ENDS WITH -1 JMP I PROVLY DCA GTYP TAD [240 JMS I PPACK JMS I (CVLOVL /PRINT LEVEL AND OVERLAY TAD GTYP JMS I (PR15 /PRINT 15-BIT LENGTH JMS I [PCRLF JMP PROVLP RDRLES, 0 /READ A TAD RFPTR1 /PTR TO RALF DCA RLARG-1 /MOD DCA RLARG+2 /STRT AT BLK 0 CDF /AND READ JMS I [IOHAN /3 BLKS INTO 0 /10000-11400 RLARG, 200^3!10 0 0 CDF 10 JMP I RDRLES /STARTING WITH THE LATEST, /WRITE OUT ALL CORE RESIDENT /BINARY BUFFERS WRALL, 0 TAD BP IAC /PTR TO DCA TMP0 /CURNT BLK TAD I TMP0 SNA CLA /ALL DONE ? JMP I WRALL /YES AC4000 JMS I (LDRIO /WRITE IT TAD I BP SNA JMP I WRALL DCA BP JMP WRALL+1 NOTREL, JMS I [RTNOS8 RELMSG RELMSG, TEXT /BAD INPUT FILE/ RTSMSG, TEXT /NO FRTS/ MERGE, 0 JMS I (GETTXT /COMBINE TXT DCA FTMP0 /PAIR WITH JMS I (GETTXT /PAIR WHOSE DCA FTMP0+1 /ADDR IS IN BPTR CLL TAD I BPT2 TAD FTMP0+1 DCA TMP1 RAL TAD I BPTR TAD FTMP0 AND [7 DCA TMP0 TAD FTMP0 /GET THE OPCODE OR WHATEVER AND [7770 /IS IN THE HIGH 9 BITS TAD TMP0 /AND COMBINE THEM WITH THE RELOCATED ADDRESS JMS I [PUTBIN /AND OUTPUT THE MESS TAD TMP1 JMS I [PUTBIN /DON'T FORGET WORD 2 JMP I MERGE GETCTL, 0 /GET TEXT JMS I (GETTXT /CTRL WORD DCA TMP0 /B4-B11 TAD TMP0 /IS TYPE AND [377 /INDICATOR DCA REFPTR /SOMETIMES TAD REFPTR /ITS AN ESD. TAD (ESDPG /WHEN IT IS, DCA GPTR /GPTR PNTS TAD I GPTR /TO THE DCA GPTR /CORRESPONDING GST SYM (WORD 4) JMS I [SETBGX /AND BPTR POINTS TO THE VALUE TAD TMP0 /TEXT TYPE RTL /IS IN RTL /B0-B3 RAL /PUT IN AND [17 /AC8-AC11 TAD GETCTL DCA GETCTL /USE IT TO BUMP RETURN ADDRESS JMP I GETCTL PAGE /COME HERE ON ORIGIN OR WHEN CROSSING /AN AREA BOUNDARY TO SELECT A BINARY /CORE BUFFER FOR A NEW LOADER IMAGE /AREA. THE BINARY BUFFER TABLE /ASSOCIATES CORE BUFFERS TO LOADER /IMAGE AREAS. /EACH ENTRY HAS FOUR WORDS - THEY CONTAIN: /WORD 1 POINTER TO BUFFER OF NEXT EARLIEST REFERENCE /WORD 2 RELATIVE BLOCK NUMBER (0 IF UNUSED) /WORD 3 NUMBER OF BLOCKS LEFT UNTIL END OF SECTION /WORD 4 BUFFER ADDRESS AND FIELD /EACH ENTRY MAPS FROM 1 TO 4 BLOCKS (400 TO 2000 OCTAL WORDS) FROM THE /ADDRESSES GENERATED BY THE LOADER ONTO THE LOADER IMAGE FILE. /THE RELATIVE BLOCK NUMBERS ARE ALWAYS OF THE FORM S+4N, WHERE /S IS THE RELATIVE BLOCK NUMBER OF THE NEAREST BINARY SECTION / (A BINARY SECTION IS AN OVERLAY OR "MAIN"). /THE BUFFERS ARE ORGANIZED AS A CHAIN IN ORDER OF REFERENCE, /WITH WORD 1 BEING THE LINK TO THE NEXT EARLIEST BUFFER. IN CASE /A BUFFER NEEDS TO BE WRITTEN THE CHAIN IS TRAVERSED AND THE LAST BUFFER /WRITTEN OUT, SINCE IT WAS THE LEAST RECENTLY ACCESSED. NEWBB, 0 /ENTER WITH NEW TAD BP DCA NDX5 /SAVE CURRENT "MOST RECENT" BUFFER TAD I NDX5 CIA TAD NEWBLK /CHECK WHETHER THE BUFFER WE WANT SNA CLA /IS THE CURRENT BUFFER JMP QUIKIE /YES - SAVE GRIEF NEWBB4, TAD BP /MAKE THE CURNT DCA BPPREV /BUFFER THE PREVIOUS BUFF TAD I BP /MAK THE BUF OF DCA BP /NEXT EARLIEST REFERENCE THE NEW CURNT BUFF TAD BP /GET THE PTR TO IAC /LDR IMAGE BLK DCA CURBLK /IN THIS BUFF TAD I CURBLK /HAVE WE SCANNED CIA /IS NEWBLK TAD NEWBLK /IN CORE SNA CLA /? JMP GOTBLK /YES TAD I BP /ARE WE AT THE SZA CLA /BUFFER OF EARLIEST REF? JMP NEWBB4 /NO DO NEXT STL /INITIALIZE LINK AS FLAG TAD I CURBLK /IS THERE A SNA CLA /BLK TO WRITE? JMP VIRGIN /NO - NONE TO READ, EITHER AC4000 JMS I (LDRIO /YES WRITE IT CLL /SET FLAG THAT BUFFER WAS WRITTEN VIRGIN, TAD NEWBLK DCA I CURBLK ISZ CURBLK TAD NEWLEN /STORE NEW BLOCK # AND LENGTH DCA I CURBLK /IN BUFFER CONTROL WORD RAR /GET "VIRGIN FLAG" DCA NEWBUF TAD MAXBLK CMA CLL TAD NEWBLK /CHECK IF THE BLOCK WE'RE MAPPING SNL CLA /IS LARGER THAN ANY OTHER SO FAR - JMP .+3 /IF SO WE DON'T HAVE TO READ IT TAD NEWBLK DCA MAXBLK /UPDATE MAXBLK TAD NEWBUF /LINK = MAX FLAG, SIGN = VIRGIN FLAG SNL SMA CLA /IF NEITHER IS ON, JMS I (LDRIO /READ THE BLOCKS INTO THE BUFFER GOTBLK, TAD I BP DCA I BPPREV /BREAK NEW BUFFER OUT OF THE CHAIN STA TAD NDX5 /NDX5 CONTAINS PTR TO OLD "MOST RECENT" + 1 DCA I BP /MAKE NEW BUFFER THE BUFFER OF LATEST REFERENCE QUIKIE, JMS NEWBUF /SET UP FOR PUTBIN JMP I NEWBB /AND RETURN /COME HERE TO CUMPUTE A 15 BIT /BUFFER ADDRESS FROM AN ENTRY /IN THE BINARY BUFFER TABLE. NEWBUF, 0 TAD [3 TAD BP DCA OUTFLD TAD I OUTFLD /LOAD ADRESS AND FIELD AND (7600 DCA BLKBEG TAD I OUTFLD AND (70 TAD (CDF DCA OUTFLD /DECOMPOSE INTO ADDRESS AND CDF JMP I NEWBUF BPPREV, 0 MAXBLK, 0 /COME HERE TO STORE 1 WORD /IN SOME BINARY OUTPUT BUFFER PUTBIN, 0 DCA TMP2 /SAVE DATA TAD ORGFLG /N.E. 0 MEANS SZA CLA /INHIBIT JMP I PUTBIN /BINARY OUTPUT BECAUSE OF NEW ORIGIN TAD OUTINH /N.E. 0 MEANS SNA CLA /INHIBIT BIN OUT BECAUSE OF BAD ORIGIN JMP OUTFLD /ITS OK TAD I OUTINH /SET B0 OF RAL /OFFENDING GST CLL CML RAR /SYMBOL DCA I OUTINH /SEE SUBR REORG JMP I PUTBIN /FOR DEFINITION OF C(OUTINH) OUTFLD, 0 /CDF X TAD TMP2 /STORE IT DCA I BLKSIZ /AWAY CDF 10 /RESTORE FLD ISZ BLKSIZ /BUMP PTR TAD BLKBEG CIA TAD BLKSIZ /HAVE WE AND (1777 /CROSSED A SZA CLA /BLK BOUND? JMP I PUTBIN /NO TAD NEWBLK TAD [4 DCA NEWBLK TAD NEWLEN TAD [-4 DCA NEWLEN /BUMP BLOCK NUMBER AND REMAINING BLOCKS JMS NEWBB /SELECT A NEW BUFFER TAD BLKBEG DCA BLKSIZ /RE-INITIALIZE WORD POINTER JMP I PUTBIN CURBLK, 0 PAGE /COME HERE TO SCAN AND RELOCATE /THE TEXT OF AN ENTIRE MODULE TXTSCN, 0 /SET CTRL WD JMS I (GETCTL /ARGS. RTN TO .+1,2,3, OR 4 JMP RELC2 /SPECIAL TYPE JMP RELC6 /DIRECT COPY JMP REORG /NEW ORIGIN TAD I GPTR /RELOCATE FPP AND [17 /PAIR DCA TMP0 /GST SYM TYPE AC7776 /IS RELOCATION TAD TMP0 /WITH RESPECT SZA CLA /TO GST EXTERN? JMP BY2 /NO SETTRP, JMS GETTXT /BAD TEXT. CLA JMS GETTXT /IGNORE RELOCATION AND MAKE AN ERROR TRAP CLA TAD (3000 /=TRAP3 JMS I [PUTBIN TAD (JUERR /RTS ERROR JMS I [PUTBIN /TRAP SUBR BY2M5, TAD I GPTR /SET ILLEGAL RAL /REFERENCE CLL CML RAR /BIT IN DCA I GPTR /GST TYPE WD JMP TXTSCN+1 /DO NEXT BY2, TAD (-5 /RELOCATE TO TAD TMP0 /A MULTIPLE SNA CLA /ENTRY? JMP SETTRP /YES TAD I GPTR /CHECK FOR LEGALITY OF REFERENCE AND (0360 /WITH RESPECT TO LEVEL AND OVERLAY NUMBER DCA TMP1 / = GST OVER NUM TAD LNONUM /=CURNT MOD AND [3400 /LEVEL NUM DCA TMP2 TAD I GPTR AND [3400 SNA /RELOCATE TO MAIN? JMP RELC /YES, ITS OK CIA /IS RELOCATION TAD TMP2 /ACROSS LEVELS SZA /? JMP TSTTRP /YES TAD LNONUM /=CURRENT MOD AND (0360 /OVER NUM CIA TAD TMP1 /WITHIN LEVL CALL IS LEGAL ONLY SNA CLA /IF WITHIN OVR ALSO. JMP RELC /ITS OK /** TSTTRP REPLACED BY "SKP CLA" IF /U SPECIFIED TSTTRP, SMA CLA /NOT OK - IS X LEVL LO TO HI? JMP SETTRP /NO TAD I BPTR /TRAP VECT TAD [7770 /SUBTRACT 1 FROM ENTRY NUM AND [7770 /IN HIGH 9 BITS OF GST WD 5 CLL RAR /DIV BY 2 TO GET ENTRY NUM * 4 TAD TRAPV+1 /LINK IS 0 DCA I (SYMX+1 /STORE VECTOR ENTRY ADDRESS RAL TAD TRAPV /IN SYMX AS A DOUBLEWORD DCA I (SYMX TAD (SYMX JMS I [SETBPT /COMBINE IT WITH TXT PAIR JMS I (MERGE /I.E. RELOCATE TO TRAP VECT TAD FTMP0 AND [7 SNA TAD FTMP0+1 SNA CLA /WERE LOW ORDER 15 BITS OF TXT=0? JMP TXTSCN+1 /YES, ITS OK JMP BY2M5 /SET ILL REF BIT. NOTE TRAP IS NOT GENERATED RELC, JMS I (MERGE /MAKE FPP PAIR AND STORE IN BIN BUFFER JMP TXTSCN+1 /DO NEXT RELC2, TAD REFPTR /CHK IND. SNA CLA /FOR SPECIAL TYPE JMP I TXTSCN /0=END OF TEXT JMP TXTSCN+1 /1=IGNORE 1 WORD OF TEXT RELC6, TAD REFPTR /IND HOLDS CIA /NUM OF WDS DCA REFPTR /TO COPY JMS GETTXT JMS I [PUTBIN ISZ REFPTR JMP .-3 JMP TXTSCN+1 REORG, ISZ ORGFLG /SET INHIBIT BIN OUT FLG JMS I (MERGE /GET NEW ORIGIN TAD I GPTR /SEE IF AND (3760 /ORIGIN IS CIA /TO A DIFFERENT TAD LNONUM /BINARY SECTION SZA CLA /? TAD GPTR /YES - SET INHIBIT/ERROR FLAG SNA JMS I (NEWORG /NO - SET UP NEW ORIGIN DCA OUTINH DCA ORGFLG JMP TXTSCN+1 GETTXT, 0 /GET ONE WORD OF TEXT FROM THE BUFFER ISZ BLKCNT JMP RDTCDF CDF /TO READ IN JMS I [IOHAN /RALF TEXT 0 /PTR TO UNIT 200^4!10 /OR 200^17!20 0 TXTBLK, 2 TAD .-2 /SET TXT DCA RBLK /BUF PTR TAD TXTWDS /-NUM OF DCA BLKCNT /WDS-1 IN RDTCDF, CDF 10 /OR CDF 20 TAD I RBLK CDF 10 ISZ RBLK JMP I GETTXT /RETURN TXTWDS, -2000 /OR -7400 PAGE /ENTER A SYMBOL INTO GST. PTR TO ESD /SYMBOL IS IN AC JMP I PUTSYM /FOR XPAGE RTN PUTSYM, 0 JMS I [LOOK /LOOKUP SYMBOL JMP I (NOMAT /NEW SYMBOL DISPOSITION /TYPE OF MATCH 2 EXTERNS, 2 COMMONS, ETC. /ETYP HOLDS SYM TYPE FOR ESD GTYP HOLDS GST TYPE TAD (5 DCA TMP0 /FOR ME,MS TAD ETYP TAD (-7 SPA TAD (2 TAD [4 RAR CLL CMA DCA TMP2 CML CMA /GET -1 TAD GTYP /RESTR LNK, GET GST TYP-1 RAL TAD (MYSTIC /GET ADDR OF 4 CODES DCA TMP1 CDF 0 TAD I TMP1 /GET 4 CODES CDF 10 CTST, ISZ TMP2 /WHICH CODE ? JMP SHFT3 /NOT THIS 1 AND [7 TAD T2J /PICK UP JMP I DCA .+1 0 T2J, JMP I .+1 ISCOM3 /FORT COMM N FLD1 SECTION PUTSYM-1 /ESD IS EXT JUST EXIT REP /GST IS EXT GO REPLACE MULENT /MULTIPLE ENTS ISCOM /2 F COMMS OR 2 COMMZS OR 2 FLD1S BADDY /MULTIPLE SECTS BADDY /UNDEF TYPES BADDY BADDY SHFT3, RAR RTR JMP CTST BADDY, TAD MCNT TAD MBGCNT DCA MTMCNT /SAVE PARAMS FOR ERROR MESSAGE LATER CLA IAC TAD LNONUM /MULTIPLE SECTION DCA FATAL ISZ TMP0 /IS FATAL MULENT, TAD I GPTR /SET TYPE TO AND (7760 /5 FOR MUL ENT TAD TMP0 /OR 6 FOR DCA I GPTR /MUL. SECTION JMP I PUTSYM ISCOM3, TAD (11 /F COMM N FLD1 (RITE9=11) DCA I GPTR /SET TYP TO F1 ISZ F1FLG ISCOM, JMS I [SETBGX TAD BPTR /UPDATE DCA I REFPTR /ESD REFERENCE PTR JMS I (MAXCOM /PUT LARGER OF 2 COMMONS INTO JMP I PUTSYM /GST WORDS 5 AND 6 MTMCNT, 0 /THE FOLOWING TABLE IS USED TO /DISPOSITION SYMBOL MATCHES BETWEEN /A RALF ESD AND A GST SYMBOL /EACH DIGIT IN THE TABLE IS AN INDEX /INTO A TABLE THAT IS USED TO CALL /ROUTINES TO HANDLE THE VARIOUS TYPES /OF MATCHES: / 0=FORT COMMON AND FLD1 SECTION / 1=ANY MATCH WITH ESD EXTERN / 2=ANY MATCH WITH GST EXTERN / 3=MULTIPLE ENTRY POINTS / 4=2 FORT COMMONS OR 2 FIELD1 / SECTIONS OR 2 COMMZ SECTS / 5=MULTIPLE SECTIONS / 6-7=UNDEFINED AND HALT / /THE FIRST 2 WORDS COVER ALL POSSIBLE /MATCHES WITH GST TYPE 1, THE SECOND /TWO WORDS ARE FOR GST TYPE 2 ETC /THE 4 DIGITS IN THE FIRST WORD OF /ANY PAIR CORRESPOND TO ESD TYPES /11,7,3,1 RESPECTIVELY /ESD CORRESPONDENCE FOR THE 2ND WORD /IS 12,10,4,2 /ESD TYPE 12 IS UNDEFINED MYSTIC, 5553 /G1 E(11,7,3,1) 7551 /E(12,10,4,2) 2222 /G2 E(11,7,3,1) 7221 /E(12,10,4,2) 0545 /G3 7551 5555 /G4 7551 5553 /G5 7551 5555 /G6 7551 5555 /G7 7551 5555 /G10 7451 4505 /G11 7551 ESDSCN, 0 CLL STA RTL /-3 TAD I (0 SZA CLA JMP I (NOTREL /NOT RALF MODULES - NASTY! TAD I (2 /CHK FOR DP SPA CLA /HARDWARE REQUIRED ISZ DPFLG /ISZ=YES AC7776 /ENTER ESD OF MODULE DCA EPTR /INTO GST. ESD STARTS AT 10000 JMS I (NXTESD /GET NXT 1 JMP I ESDSCN /NO MORE TAD EPTR JMS PUTSYM /ENTER IT JMP .-4 /DO ANOTHER MSMSG, TEXT /MULT SECT/ CORMSG, TEXT /OVER CORE/ LIMSG, TEXT /OVER IMAG/ MNMSG, TEXT /NO MAIN/ PAGE /CONTINUATION OF SUB PUTSYM REP, DCA GTYP AC7775 /REPLACE GST TAD ETYP /EXTERN SNA /IS IT A REF TO COMMON? JMP MNSECN /YES TAD M4 /IS IT A REF SMA CLA /8 MODE SECN ? JMP NOMAT TAD I GPTR /NO CHK FOR AND [3400 /CROSS LEVEL CIA /REFERENCE DCA TMP0 /COMPARE WITH TAD LNONUM /CURNT LEVEL AND [3400 SNA /DOING MAIN ? JMP NOMAT /YES DONT CHK FOR TRAP ENTRY TAD TMP0 SNA CLA /X LEVEL? JMP NOMAT ISZ TRPCNT /YES BUMP TRAP VECTOR COUNTER AC4000 /SET B0=1, GST SYM WILL GO IN TRAP VECTOR NOMAT, DCA GTYP TAD ETYP /ENTER GST TAD (.+3-1 /WORDS 4,5,6. DCA TMP0 /DISPATCH ESD JMP I TMP0 /TYPE 1,2,3,4 JMP ENTMN2 /ENTRY POINT JMP ENTMN /EXTERN JMP MNSECN /COMMON SECN JMP PRGSCN /PROGRAM SECN M4, -4 M7, -7 JMP MNS8 /GEN 8 MODE SCT JMP MNCZ /COMM 8 MODE JMP MNF1 /FLD1 8 MODE PRGSCN, TAD LNONUM AND [3400 /IS IT A MAIN SNA CLA /? JMP MNSECN /YES TAD I [OVRSIZ DCA TMP0 TAD I [OVRSIZ+1 DCA TMP1 /SAVE OLD OVERLAY SIZE CLL TAD I EPT2 TAD TMP1 DCA I [OVRSIZ+1 RAL TAD I EPTR TAD TMP0 DCA I [OVRSIZ /SET OVLY SIZE = OVLY SIZE + SECTION SIZE TAD TMP0 DCA I EPTR TAD TMP1 DCA I EPT2 /SET SECTION SIZE = OLD OVERLAY SIZE TAD GPTR /PUT ADDR OF IAC /GST WD5 OF DCA I REFPTR /SECTION SYM INTO ESD REFERENCE PAGE ENTM2, TAD [LVPTR /SET REFERENCE DCA REFPTR /TO PARENT SYM =WD5 OF #YLVLN ENTMN, TAD LNONUM /=CURNT OVRLAY AND CURNT LEVEL NUM JMP MNSEC5 ENTMN2, TAD LNONUM /SEE IF ENTRY AND [3400 /POINT IS IN SNA CLA /MAIN? JMP ENTMN /YES TAD I REFPTR /IS PARENT JMS I [SETBPT /REFERENCE TO CLA CMA /COMMON? TAD REFPTR /LOOK FOR DCA TMP0 /TYPE CODE 3 AC7775 TAD I TMP0 SNA JMP ENTMN /YES, HANDLE LIKE A MAIN ENTRY POINT TAD M4 /IS IT A REF SNA CLA /TO AN 8 SECT? JMP MNSEC5 /YES HANDLE LIKE MAIN CLL TAD I BPT2 TAD I EPT2 DCA I EPT2 /SET OVR ENT = OVR ENT + OVR RAL TAD I BPTR AND [7 /WATCH HIGH-ORDER BITS TAD I EPTR DCA I EPTR JMP ENTM2 /SIZE OF SECTION MNF1, ISZ F1FLG /SET FOR NE TO JMP MNSECN /0 SO DO8S WILL MNCZ, ISZ CZFLG /KNOW THESE JMP MNSECN /TYPES OF SECTS MNS8, ISZ S8FLG /EXIST AND WILL FIT THEM INTO CORE MNSECN, TAD GPTR /PUT ADDR OF IAC /GST WD5 OF DCA I REFPTR /SECTION SYM INTO ESD REFERENCE PAGE TAD (SYMX+1 /THIS VALUE DCA REFPTR /YIELDS 0 IN HI 9 WD 5 OF GST SYM MNSEC5, TAD ETYP /SYM TYPE TO AC8-11. AC MAY HAVE TAD GTYP /LEVEL AND OVR BITS (AC1-7) ALREADY SET DCA I GPTR /GST WD4 HOLDS SYMBOL TYPE JMS I [SETBGX /SET BPTR TO GST WORD DCA TMP0 /PREPARE FOR DIVISION BY 7 TAD I REFPTR TAD (2-SYMTBL /GET OFFSET FROM SYMTBL TAD M7 ISZ TMP0 SMA JMP .-3 /DIVIDE BY REPEATED SUBTRACTION STA /AC IS NOT NECESSARILY ZERO! TAD TMP0 CLL RTL /ROTATE SYMBOL NUMBER INTO AC BITS 0-8 RAL TAD I EPTR /AND INSERT IT INTO THE ADDRESS DCA I BPTR /DOUBLEWORD TO FORM THE GST TAD I EPT2 /ADDRESS DOUBLEWORD DCA I BPT2 JMP I .+1 PUTSYM-1 PAGE STPAS1, DCA I NDX0 /ZERO OUT GST ISZ STCNT /NDX0 SET UP BY PASS0 JMP STPAS1 JMS I (SETCNT /SET MOD CNTS JMS I (RDRLES /READ A RALF ESD JMS I (ESDSCN /PROCESS IT JMS I (ADVOVR /UPDATE COUNTS JMP .-3 /DO NEXT TAD LIBRSW SNA CLA /LIBRARY SEARCH POSSIBLE? JMP I (DOCORE /NO - SKIP IT TAD SYMTM3 /TOP OF DCA GPTR /GST TAD RFPTR1 /1ST FREE DCA LBPTR /ENTRY IN MODULE TBL THIS IS WHERE LIBR MODULES WILL GO JMS I (GETEXT /GET AN JMP .+3 /EXTERN LOP4, JMS I (GETEXT TAD RESFLG /=1 IF DCA IOFLG /LIBR CAT IS ENTIRELY CORE RES DCA LBREC /SET I/O FOR DCA LSTBLK /BLK 0 OF LIBRARY DCA RBLK /SET REL BLK DCA RLEN /AND LENGTH JMP BY3 /TO 0 NXTENT, TAD NDX1 /ADV TO AND [-4 /NXT ENTRY TAD (2 /BUT GET DCA NDX1 /LENGTH OF JMS I (GETLEN /PREV ONE 1ST ISZ NUMENT /MORE IN CORE? JMP BY3+1 /YES TAD IOFLG /END OF SZA CLA /CATALOGUE? JMP LOP4 /YES, NO MATCH ON THIS EXTERN BY3, JMS RDLBR /GET NEXT TAD [-4 /CAT. BLKS TAD GPTR /LOOK FOR DCA NDX0 /LIBR MATCH AC7775 DCA TMP0 LBFLD, CDF 0 /CDF 20 IF GREATER THAN 8K CORE TAD I NDX1 CDF 10 CMA /IS IT THE END SNA /OF CAT ? JMP LOP4 /YES IAC TAD I NDX0 SZA CLA /MATCH 1? JMP NXTENT /NO TRY NXT LIBR ENTRY ISZ TMP0 /ALL MATCH? JMP LBFLD /NO JMS I (GETLEN /UPDATE RBLK, CLA CMA /RLEN TAD RFPTR1 /ENTER MOD DCA NDX0 /INTO TBL TAD I (MODTBL /LIBR UNIT DCA I NDX0 TAD RLEN /LENGTH OF DCA I NDX0 /MODULE TAD I (MODTBL+2 /STARTING BLOCK OF LIBRARY, + TAD RBLK / RELATIVE BLOCK OF MODULE = DCA I NDX0 / ABSOLUTE BLK OF MOD ISZ LBCNT /=NUM OF LIBR MOD IN MAIN TAD GPTR /SAVE GST DCA LSTBLK /PTR JMS I (RDRLES /READ IN ESD DCA LNONUM /SET FOR MAIN JMS I (ESDSCN /PROCESS ESD TAD [3 /ADV MODULE TAD RFPTR1 /TBL PTR DCA RFPTR1 TAD LSTBLK DCA GPTR ISZ MLEFT /MOD TBL FULL? JMP LOP4 /NO DO SOME MORE JMP I (DOCORE LIBRSW, 0 /NON-ZERO IF LIBRARY SEARCH POSSIBLE STCNT, SYMTBL-OVLTBL RDLBR, 0 TAD IOFLG /IS THIS SZA CLA /THE END JMP ENDLB /OF CAT.? CDF /NO JMS I [IOHAN /READ SOME MODTBL /MORE LBARG, 200^5 /OR 200^17!20 LB0BUF /OR 0 LBREC, 0 /REL CAT BLK TAD LBREC /GET -NUM OF CIA /BLKS READ, TAD LSTBLK /AND COMPUTE DCA TMP0 /THE NUM OF TAD (-100 /ENTRIES IN ISZ TMP0 /CORE. THERE JMP .-2 /ARE 100 PER DCA OLDCNT /BLOCK TAD LBREC /UPDATE DCA LSTBLK /LSTBLK ENDLB, TAD OLDCNT DCA NUMENT CLA CMA /SET PTR TO TAD LBARG+1 /1ST ENTRY DCA NDX1 CDF 10 JMP I RDLBR LSTBLK, 0 MLEFT, 0 RESFLG, 1 NUMENT, 0 OLDCNT, 0 PAGE /END OF PASS 1 - FIT EVERYTHING INTO CORE DOCORE, TAD TRPCNT SNA CLA JMP LOP3-3 /NO OVRS TAD (TRPSYM /ENTER TRAP JMS I [LOOK /VECT. SYM TAD [4 /ITS A DCA I GPTR /MAIN SECN ISZ GPTR /GST WD6 ISZ GPTR /HOLDS LENGTH TAD TRPCNT /GET SIZE OF RTL CLL /TRAP VECTOR DCA I GPTR /= NUMBER OF ENTRIES * 4 JMS I (DO8S /GO DO ALL 8 MODE SECTIONS TAD SYMTM3 /ALLOCATE DCA GPTR /CORE FOR LOP3, JMS I [GETTYP /ALL MAIN NON 8 MODE JMP DUNMN /SECTIONS AC7775 /4=PROG TAD I GPTR /SECN, 3=COMMON RAR CLL SNA CLA JMS I (FIT /GO FIT SECN JMP LOP3 DUNMN, STA DCA I NDX7 /TERMINATE OVERLAY LENGTH LIST TAD A1 DCA I (OVLTBL /STORE ENTRY FOR LEVEL 0 TAD A1+1 DCA I (OVLTBL+1 TAD A1+1 CLL TAD [377 AND [7400 SZL ISZ A1 /(WATCH CARRY!) DCA A1+1 /DITTO FOR NON-FIELD 0 CLA IAC /WILL HOLD DCA BLKCNT /SIZE OF LOADER IMAGE TAD (1460 /RESET INT. DCA I (LEVSYM+2 /#YLVLN SYM TAD (QUSRLV-1 /WHERE OVRLAY DCA NDX3 /DSRN INFO GOES IN LHDR CLA IAC DCA I NDX3 /USER MAIN IS LEVEL 0 TAD (10 DCA I NDX3 /SET UP LOADING INFORMATION FOR USER MAIN STA /IN THE USRLV TABLE JUST LIKE TAD A1 /ANY OTHER OVERLAY LEVEL CLL RAR TAD A1+1 /LENGTH HAS TO BE COMPUTED FROM RAL /CORE LENGTH RTL RTL DCA TMP0 CLA IAC DCA I NDX3 /USER MAIN FIRST THING IN LDR IMAGE TAD TMP0 DCA I NDX3 TAD TMP0 LOP6, TAD BLKCNT /UPDATE LENGTH DCA BLKCNT /OF LDR IMAGE ISZ I (LEVSYM+2 /NEXT LEVEL TAD (LEVSYM /LOOKUP ISZ NLVL JMS I [LOOK /#YLVLN JMP DUNLVL /DONE ALL OVR LEVELS JMS I (FIT /FIT LEVEL ISZ GPTR /IN CORE TAD I NDX3 /NUMBER OF OVERLAYS ON THIS LEVEL - ALSO CIA /SERVES AS AN INDICATOR TO THE RUN-TIME DCA TMP0 /SYSTEM THAT THIS LEVEL IS INITIALLY TAD I GPTR /UNINHABITED. AND [7 /GET FIELD BITS CLL RTL RAL ISZ GPTR TAD I GPTR /AND ADDRESS BITS DCA I NDX3 /PUT-EM OUT TAD BLKCNT /STARTING BLOCK OF LEVEL DCA I NDX3 TAD BLKSIZ DCA I NDX3 /LENGTH OF A SINGLE OVERLAY IN THE LEVEL TAD BLKSIZ /(NUM OF OVRS)* ISZ TMP0 /NUM OF BLKS JMP .-2 /AC=LENGTH OF LEVEL JMP LOP6 /DO NEXT LEVEL NLVL, 0 DUNLVL, CLA /AC NOT ZERO! TAD SYMTM3 /NOW RESOLVE DCA GPTR /ALL OTHER SYMBOLS LP1, JMS I [GETTYP JMP I (ALLDN1 /ALL DONE JMS I [SETBGX /SET BPTR TO GST WD5 TAD I BPTR AND [7770 SNA JMP LP1 /NO RELATIVE SYMBOL - DON'T RELOCATE DCA EPTR TAD EPTR /FIGURE OUT THE SYMBOL TABLE ADDRESS CLL RTR /OF THE RELATIVE SYMBOL BY STL CMA RAR /TAKING 7 * THE RELATIVE SYMBOL NUMBER TAD EPTR /IN BITS 0-8 AND ADDING IN THE BASE TAD (SYMTBL-1 /ADDRESS OF THE SYMBOL TABLE JMS I [SETEPT TAD I EPT2 CLL TAD I BPT2 DCA I BPT2 RAL TAD I BPTR AND [7 /THROW AWAY THE OLD RELATIVE SYMBOL # TAD I EPTR DCA I BPTR /AND PERFORM THE RELOCATION JMP LP1 /DO AGAIN PAGE ALLDN1, TAD A1 DCA I (QHGHAD /SAVE HIGHEST PROGRAM ADDRESS TAD A1+1 /SO THAT RTS WILL KNOW HOW MUCH ROOM DCA I (QHGHAD+1 /IT HAS FOR BUFFERS & THINGS TAD FATAL /ANY MULTIPLE SNA /SECTIONS? JMP NOMSCT /NO DCA LNONUM CDF 0 TAD I (MTMCNT DCA MBGCNT /RESTORE ERROR PARAMETERS CDF 10 JMS I [RTNOS8 MSMSG NOMSCT, TAD (SASYM /GET STRT JMS I [LOOK /ADDR MAIN SKP /NO MAIN JMP .+3 JMS I [RTNOS8 MNMSG TAD SVMAIN /IF .NE. SET TO SZA /POINT TO GST TAD GPTR /FOR PND MAIN DCA SVMAIN /FOR /S THINGS IN SYMMAP RT. CDF 0 TAD I (JOUSYM DCA I (PRMAIN /ENABLING PRINTING OF #MAIN ON ERRORS CDF 10 ISZ GPTR TAD I GPTR /MAKE SWAPPER CONTROL WORD DCA I (QRTSWP /LEVEL 0, OVERLAY 0 IS MAIN ISZ GPTR TAD I GPTR /12 BIT ADDR DCA I (QRTSWP+1 TAD DPFLG /N.E. MEANS LDR IMAGE NEEDS DP HRDWRE DCA I (QDPFLG /RETAIN INFO IN LHDR FOR PASS3 CDF 0 /FETCH LDR TAD I (LDRNAM /IMAGE JMS I [IOHAN /HANDLER TAD BLKCNT CLL RTL /SINCE WE KNOW THE LENGTH OF THE SZL SPA /LDR IMAGE FILE, TELL IT TO THE USR CLA /(UNLESS ITS >255) RTL SZL CLA TAD I (LDRNAM /OPEN LDR CIF 10 /IMAGE JMS I USR 3 LDRBLK, LDRNAM+1 LDRLEN, 0 JMP I (ENTERR TAD BLKCNT /SEE IF LDR STL /IMAGE WILL TAD LDRLEN /FIT ON SZL SNA CLA /TENTATIVE FILE JMP .+3 /IT FITS JMS I [RTNOS8 /OUTPUT FILE LIMSG /TOO SMALL TAD BLKCNT /CLOSE LDR DCA I (LDCLEN /IMAGE FILE TAD (LIMGU-1 /PASS2 DCA NDX0 TAD I (LDRNAM CDF 10 AND [17 DCA I NDX0 /UNIT TAD BLKCNT DCA I NDX0 /LENGTH TAD LDRBLK DCA I NDX0 /STRT BLK CDF 0 JMS I [IOHAN LIMGU /WRITE OUT LOADER IMAGE HEADER BLOCK 4210 LHDR 0 /IN RELATIVE BLOCK 0 OF LOADER IMAGE FILE CDF 10 /SET UP TABLE THAT RELATES /BINARY SECTINS TO LDR /IMAGE RELATIVE BLOCK NUMS. /1 DBL WD AND 2 SINGLE-WD ARGUMENTS PER /SECTION (15 BIT ADDR, RELATIVE /BLOCK, AND LENGTH). THERE ARE /8 SECTIONS /(MAIN, LEVL1,....,LEVL7) /TABLE STARTS AT LHDR AND /IS USED BY SUBR NEWORG TAD (LHDR-1 DCA NDX1 TAD (QUSRLV /NOW DO THE DCA NDX0 /8 LEVELS TAD [-10 DCA TMP0 SETSLP, TAD I NDX0 DCA BSECTP TAD BSECTP CLL RTR RAR AND [7 DCA I NDX1 /FIRST COMES 15-BIT ADDRESS TAD BSECTP AND [7400 DCA I NDX1 TAD I NDX0 DCA I NDX1 /THEN RELATIVE BLOCK NUMBER TAD I NDX0 DCA I NDX1 /THEN LENGTH ISZ NDX0 /SKIP OVER NEXT OVERLAY COUNT ISZ TMP0 JMP SETSLP TAD (LHDR /PTR TO TOP DCA BSECTP /OF TABLE CLA CMA /SET FLG DCA P2FLG /FOR SUBR ADVOVR JMP I .+1 PASS2 PAGE DO8S, 0 /DO 8 SECTIONS TAD CZFLG /ANY 8 MODE SZA CLA /COMMONS ? JMS FIT8S /GO FIT IT TAD F1FLG /ANY 8 MODE SNA CLA /FIELD 1 ? JMP .+3 /NO STA JMS FIT8S TAD S8FLG /ANY GEN 8 MODE SNA CLA /SECTIONS ? JMP I DO8S /NO ALL DONE TAD [7770 /THIS WILL DCA OVRFLO /INHIBIT FLD1 OVER FLOW ERR CLA IAC JMS FIT8S JMP I DO8S /FIT 8 MODE SECTIONS FIT8S, 0 TAD [7770 DCA STYPE /-8M0DE SECT TYPE (7-11) TAD SYMTM3 /SEARCH GST FOR DCA GPTR /8 MODE SECTNS F8SECT, JMS I [GETTYP JMP I FIT8S /ALL DONE TAD STYPE TAD I GPTR SZA CLA /8 SECTION ? JMP F8SECT /NO JMS I [SETBGX TAD I BPT2 TAD (177 /ROUND SECTION LENGTH AND (7600 /TO A PAGE BOUNDARY DCA I BPT2 JMS I (FIT /NOW FIT IT TAD OVRFLO /SEE IF FLD1 TAD A1 /IS OVR FLOWED **** SPA SNA CLA /? JMP F8SECT /DO ANOTHER TOOBIG, JMS I [RTNOS8 CORMSG /PRINT ERROR & GO AWAY STYPE, 0 FIT, 0 /FIT SECTION JMS I [SETBGX /SET BPTR TO POINT TO GST WD5 TAD I BPT2 AND [7400 CLL RAL TAD I BPTR RTL RTL /GET LENGTH OF SEGMENT IN BLOCKS DCA BLKSIZ TAD I BPT2 CLL TAD A1+1 DCA TMP5 TAD A1+1 DCA I BPT2 TAD TMP5 DCA A1+1 /SET BPTR = A1 RAL /WHILE SETTING A1 = A1 + BPTR TAD I BPTR TAD A1 DCA TMP5 TAD TMP5 AND [7770 SZA CLA /IF NEW ADDRESS IS > 77777, JMP TOOBIG /THE THING WILL NEVER FIT TAD A1 DCA I BPTR TAD TMP5 DCA A1 JMP I FIT /RETURN LEVLUP, 0 /LEVEL = MAX (LEVEL, OVRSIZ); OVRSIZ=0 TAD I [OVRSIZ TAD LNONUM DCA I NDX7 /RECORD THE SIZE OF THIS OVERLAY TAD I [OVRSIZ+1 /FOR THE SYMBOL MAP PRINTOUT DCA I NDX7 TAD [OVRSIZ JMS I [SETEPT TAD I [LVPTR JMS I [SETBPT JMS MAXCOM DCA I EPT2 DCA I EPTR JMP I LEVLUP MAXCOM, 0 /BPTR = MAX (EPTR, BPTR) TAD I EPTR CIA CLL TAD I BPTR SZA CLA /CHECK HIGH-ORDER WORDS FIRST JMP .+4 /THEY DIFFER TAD I EPT2 CIA CLL TAD I BPT2 /USE LOW ORDER WORDS IF HIGH ORDERS ARE = SZL CLA /IS EPTR > BPTR? JMP I MAXCOM /NO - EXIT TAD I EPTR DCA I BPTR TAD I EPT2 DCA I BPT2 /YES - BPTR=EPTR JMP I MAXCOM GETLEN, 0 CDF 0 /OR CDF 20 TAD I NDX1 /LEN OF ENTRY CDF 10 SNA /=0 MEANS LENGTH HAS ALREADY JMP I GETLEN /BEEN COMPUTED. NE 0 MEANS DCA TMP0 /ENTRY POINT IS THE 1ST IN A NEW MODULE TAD RLEN /UPDATE REL TAD RBLK /BLOCK AND DCA RBLK /LENGTH OF TAD TMP0 /NEW MODULE DCA RLEN JMP I GETLEN GETEXT, 0 /LOOK FOR GST JMS I [GETTYP /EXTERN JMP I (DOCORE /END OF GST TAD I GPTR /TYPE WD TO AC AND [17 /B8-B11 RTR CLL /2=EXTERN SZA CLA /GOT ONE? JMP .-6 /NO, RETRY JMP I GETEXT PAGE LB0BUF= . /START OF PROGRAM START, ISZ XSTRT /IF CHAINED TO CIF CDF 10 CLL STA RAL AND I (7643 /AND OUT THE /L SWITCH DCA I (7643 JMP I .+1 XSTRT, PASS0 /THIS SUBROUTINE SHOULD RESIDE IN THE /FIELD 0 I/O BUFFER SINCE IT /EXECUTES ONLY ONCE /SUBROUTINE TO DETERMINE CORE SIZE / /THIS WORKS ON ANY PDP-8 FAMILY COMPUTER. /THE VALUE,FROM 1 TO 10(OCTAL) OF THE 1ST NON-EXISTENT /MEMORY FLD IS RETURNED IN THE AC. / /NOTE--THIS ROUTN MUST BE PLACED IN FLD 0 / CORE, 0 TAD (6203 RDF DCA CORTN CDF 0 TAD I (7777 AND COR70 SNA JMP CORELP CLL RTR RAR JMP CORTN CORELP, CDF 0 /NEEDED FOR PDP-8L TAD TRYFLD /GET FLD TO TST CLL RTL RAL AND COR70 /MASK USEFUL BITS TAD CORELP DCA .+1 /SET UP CDF TO FLD 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 7400 /HACK FOR PDP-8,.NO-OP TAD .-1 /GUARD AGAINST WRAP AROUND TAD CORLOC+1 /TAD 1400 SZA CLA JMP .+5 /NON EXISTENT FLD EXIT TAD COR70-6 /RESTORE CONTENS DESTROYED DCA I CORLOC ISZ TRYFLD /TRY NXT HIGHER FLD JMP CORELP TAD TRYFLD TAD (-1 CORTN, 0 JMP I CORE CORLOC, COR70+2 /ADR TO TST IN EACH FLD 1400 /7000+7400+1400=0 TRYFLD, 1 /CURRENT FLD TO TST PAGE *6600 DATCHG, 0 /FIND THE MONTH/YEAR CLL RTR /THIS CODE FINDS THE MONTH RAR /BY CALCULATING THE ADDRESS AND (777 /OF THE CORRECT MONTH CLL RTR /IN THE TABLE OF MONTHS RTR AND (36 TAD (MONTHS-3 /HAVE THE ADDRESS OF MONTH-1 DCA NDX2 /SAVE IT IN FIELD 0, PAGE 0 CDF 0 /CHANGE DATA FIELD TO 0 TAD I NDX2 /GET FIRST 2 CHARS. OF MONTH CDF 10 /CHANGE DATA FIELD TO 1 DCA I (LDATE+2 /INSERT INTO THE TEXT LINE CDF 0 /CHANGE DATA FIELD TO 0 TAD I NDX2 /GET LAST 2 CHARS. OF MONTH CDF 10 /CHANGE DATA FIELD TO 1 DCA I (LDATE+3 /INSERT INTO THE TEXT LINE TAD I (OSDATE /GET THE DATE--FIND THE YEAR AND (7 /GET THE YEAR OFFSET BITS DCA I (YRTEMP /STORE THEM AWAY CDF 0 /CHANGE DATA FIELD TO 0 TAD I (7777 /GET THE DATE EXTENSION BITS CDF 10 /CHANGE DATA FIELD TO 1 AND (600 /MASK TO GET BITS 3 AND 4 CLL RTR /ROTATE TO GET THEM INTO RTR /BIT POSITIONS 7 AND 8 TAD (106 /GET THE NEW BASE YEAR TAD I (YRTEMP /ADD THE YEAR OFFSET BITS CIF 10 /CHANGE THE DATA FIELD TO 1 JMP I DATCHG /HAVE THE YEAR GETDAT, 0 TAD I (YRTEMP /GET THE YEAR AND (7700 /MASK AND ROTATE CLL RTR /TO GET THE FIRST RTR /DIGIT (IN SIXBIT) RTR TAD (5500 /STICK A HYPHEN IN FRONT DCA I (LDATE+4 /PUT IN THE TEXT LINE TAD I (YRTEMP /GET THE YEAR AGAIN AND (77 /MASK AND ROTATE TO CLL RTL /GET THE SECOND DIGIT RTL /(IN SIXBIT) RTL TAD (40 /STICK A SPACE AFTER IT CIF 10 /CHANGE INSTRUCTION FIELD TO 1 JMP I GETDAT MONTHS, 5512;0116 /-JAN 5506;0502 /-FEB 5515;0122 /-MAR 5501;2022 /-APR 5515;0131 /-MAY 5512;2516 /-JUN 5512;2514 /-JUL 5501;2507 /-AUG 5523;0520 /-SEP 5517;0324 /-OCT 5516;1726 /-NOV 5504;0503 /-DEC PAGE FIELD 1 /PAGE 0 FLD1 TAGS FOR PASS0 /(PASS 0 LIVES WITH THE USR RESIDENT) NMCTS= 20 MODCNT= 21 LVLCNT= 22 OVRCNT= 23 PTRULS= 24 MXFLD= 25 *2000 /START OF GLOBAL SYMBOL TABLE /BUCKET COMES FIRST, INTERNAL /SYMBOLS AND FIELD 1 CONSTANTS ARE /HERE ALSO. GST RUNS FROM /SYMTBL TO OVLTBL-1 BUCKET, AAAAAA;0;0;0;EEEEEE;0 /A,B,C,D,E,F 0;0;0;0;0;0 /G-L 0;0;0;0;0;0 /M-R 0;0;0;0;0;0 /S-X 0;0 /Y,Z 0;0;0;0;0 /UNUSED BUCKETS MUST BE 0 0 /SPACE (FOR BLANK COMMON) 0;0 POUND /POUND SIGN FOR INTERNAL SYMBOLS, ALL ARE OF THE FORM (POUND XXXXX) TRPSYM, TEXT '#YTRAP' 0 /TRAP VECTOR LEVSYM, TEXT '#YLVL0' 0 /OVERLAY LEVEL SWPSYM, TEXT '#SWAP' 0;0 SASYM, TEXT '#MAIN' 0;0 /STARTING ADDRESS /TITLE LINE FOR LOADER MAP TLINE, TEXT 'LOADER V' *.-1 LXX, VERNUM&70^7+VERNUM+6060 /VERNUM IN SIXBIT PATCH&77^100+40 /PATCH LEVEL LDATE, TEXT ' NO-DA -TE ' STLINE, TEXT 'SYMBOL VALUE LVL OVLY' HLINE, TEXT '= 1ST FREE LOCATION' OTLINE, TEXT 'LVL OVLY LENGTH' SMAPU, ZBLOCK 3 /SYMMAP UNIT, LENGTH, ST BLK # LIMGU, ZBLOCK 3 /LDR IMG " OVRSIZ, 0;0 LVPTR, OVRSIZ SYMX, 1;SYMTBL-2 /SYSTEM SYMBOL TABLE AAAAAA, 0 TEXT /ARGERR/ *.-1 1;0 JARGER EEEEEE, 0 TEXT /EXIT/ 1;0 JEXIT POUND, .+7 TEXT /#ARGER/ *.-1 1;0 JARGER .+7 TEXT /#BAK/ 1;0 JBAK .+7 TEXT /#DATE/ 1;0 JDATE .+7 TEXT /#DEF/ 1;0 JDEF .+7 TEXT /#DISMS/ *.-1 1;0 JDISMS .+7 TEXT /#ENDF/ 1;0 JENDF .+7 TEXT /#EOFSW/ *.-1 1;0 JEOFSW .+7 TEXT /#EXIT/ 1;0 JEXIT .+7 TEXT /#HANG/ 1;0 JHANG .+7 TEXT /#IDLE/ 1;0 JIDLE .+7 TEXT /#INT/ 1;0 JINT .+7 TEXT /#RDAO/ 1;0 JRDAO .+7 TEXT /#READO/ *.-1 1;0 JREADO .+7 TEXT /#RENDO/ *.-1 1;0 JRENDO .+7 TEXT /#RETRN/ *.-1 1;0 JRETRN .+7 TEXT /#REW/ 1;0 JREW .+7 TEXT /#RSVO/ 1;0 JRSVO .+7 TEXT /#RUO/ 1;0 JRUO .+7 TEXT /#SWAP/ 1;0 JSWAP .+7 TEXT /#T812/ 1;0 JT812 .+7 TEXT /#UE/ 0 1;0 JUERR .+7 TEXT /#WDAO/ 1;0 JWDAO .+7 TEXT /#WRITO/ *.-1 1;0 JWRITO 0 /LAST ONE TEXT /#WUO/ 1;0 JWUO SYMTBL, 0 /START OF GST /PASS0- THIS IS THE BEGINNING OF PASS0 PASS0, JMP .+4 /NORMAL ENTRY PT DCA CDSW /CHAINED TO ENTRY PT - NO DECODE 1ST TIME TAD (7616 DCA PTRIO TAD (-10 DCA LVLCNT /SET LEVEL AND OVERLAY COUNTERS DCA OVRCNT CIF 0 JMS I (CORE /DETERMINE CORE SIZE DCA MXFLD JMS I (CORMOV CDF 0 0-1 CDF 0 LB0BUF-1 /MOVE LOWER FIELD 0 TO A SAFE PLACE -2000 CDF 0 TAD I (OSJSWD /GET JOB STATUS WORD AND (376 /CLEAR DESIRED FLAGS TAD (3403 /SET NO RESTART, USR AND CD AREAS CLEAR DCA I (OSJSWD /AS WELL AS BATCH FLAG CDF 10 TAD I (OSDATE SNA JMP NODATE CLL RTR /ROTATE AND MASK TO GET THE DAY RAR AND (37 JMS MAKSXB /CONVERT TO SIXBIT DCA I (LDATE+1 /PUT THE DAY INTO THE TEXT LINE TAD I (OSDATE /GET THE DATE---FIND MONTH CIF 0 /CHANGE DATA FIELD TO 0 JMS I (DATCHG /FIND THE MONTH/YEAR JMS MAKSXB /CONVERT THE YEAR TO SIXBIT DCA YRTEMP /STORE IT AWAY CIF 0 /CHANGE INSTRUC. FIELD TO 0 JMS I (GETDAT /PRINT THE YEAR DCA I (LDATE+5 /PUT REST OF YEAR IN TEXT LINE /SET UP OTHER POINTERS TO MODULE TABLES NODATE, TAD (-NUMMOD DCA I (MCTTBL TAD (MCTTBL+1 DCA NMCTS /INITIALIZE MODULE CT TBL PTR TAD (MODTBL+2 DCA PTRULS /INITIALIZE MODULE TBL PTR DCA MODCNT DCA I (MODTBL /CLEAR LIBRARY UNIT DCA I NMCTS /CLEAR FOR 1ST LEVEL MODULE COUNTS CDSW, JMP I (RALFLP /ZEROED IF CHAINED TO JMP I (DECO MAKSXB, 0 DCA TMP0 DCA TMP1 TAD TMP0 TAD (-12 ISZ TMP1 SMA JMP .-3 /SUBTRACT 10 IN A LOOP TAD (5772 /AS GOOD A NUMBER AS ANY DCA TMP0 TAD TMP1 CLL RTL RTL RTL /GET THE TENS DIGIT INTO POSITION TAD TMP0 JMP I MAKSXB YRTEMP, 0 PAGE /DECODE COMMAND DECODER INPUT RALFLP, JMS I (200 5 /COMMAND DECODE 2214 /.RL DEFAULT EXTENSION TAD (7616 DCA PTRIO TAD I (OS8SWS+1 AND (40 CDF 0 SZA CLA /IS /S SWITCH ON? DCA I (SVMAIN+LB0BUF /CLEAR (RELOCATED) SVMAIN DECO, CDF 10 /FOR FULL SYMBOL MAP LISTING TAD I (7600 /CHK FOR LOADER IMAGE FILE SNA /OUTPUT FILE? JMP SM /NO AND (0017 /MUST BE AN "MS" DEV TAD (OS8DCB-1 DCA TMP0 TAD I TMP0 SPA CLA /IS IT? JMP .+4 /YES SM1, TAD (DEVERR /NO,ERR JMS I (ERORR JMP RALFLP TAD I P7604 SNA TAD (1404 /.LD DCA I P7604 /INTO EXTENSION IF NONE SPECIFIED JMS I (CORMOV /MOVE LOADER IMAGE FILE NAME CDF 10 7600-1 CDF 0 /INTO FIELD 0 LDRNAM+LB0BUF-1 -5 SM, TAD I (7605 /CHK FOR SYM MAP FILE SNA JMP SM2 /NONE AND (17 TAD (OS8DCB-1 DCA TMP0 TAD I TMP0 RAL /LOOK AT "READ ONLY" BIT IN DCB SPA CLA JMP SM1 /ERROR - NO GOOD FOR OUTPUT TAD I (7611 SNA TAD (1423 /.LS DEFAULT MAP EXTENSION DCA I (7611 JMS I (CORMOV /MOVE SYMMAP FILE NAME INTO FIELD 0 CDF 10 P7604, 7605-1 CDF 0 LDRNAM+LB0BUF+4 -5 /COLLECT INPUT FILES SM2, TAD I (OS8SWS CLL RAR SZL CLA / IS /L SWITCH ON? JMP LIBRAR /YES - THIS IS A LIBRARY FILE FILELP, TAD I PTRIO SNA JMP FINLIN /NO MORE INPUT FILES DCA TMP0 TAD TMP0 AND (17 ISZ PTRULS DCA I PTRULS /STORE UNIT NUMBER TAD TMP0 AND (7760 CLL RTR RTR TAD (7400 CIA ISZ PTRULS DCA I PTRULS /STORE LENGTH TAD I PTRIO ISZ PTRULS DCA I PTRULS /STORE STARTING BLOCK NUMBER ISZ MODCNT JMP FILELP /CONTINUE FINLIN, JMS I (CORDSW /CHECK C AND O SWITCHES TAD I (OS8SWS AND (40 SZA CLA /IF THE /G SWITCH IS ON JMP I (EOPAS0 /ITS THE END TAD I (OS8SWS-1 SPA CLA /IF AN ALTMODE TERMINATED THE LINE, JMP I (EOPAS0 /DITTO TAD (-MCTTBL-1 TAD NMCTS SZA CLA /ARE WE STILL IN THE MAIN SECTION? JMS I (UPDMOD /NO - UPDATE OVERLAY & MODULE COUNTS JMP RALFLP LIBRAR, TAD I PTRIO AND (17 DCA I (MODTBL /STORE LIBRARY PARAMETERS TAD I PTRIO /NEGLECTING LENGTH, WHICH WILL DCA I (MODTBL+2 /BE FILLED IN LATER TAD I PTRIO SNA CLA JMP FINLIN /ONLY ONE FILE ALLOWED ON THE LINE TAD (MIERR JMP SM1+1 /OTHERWISE ITS MIXED INPUT PAGE /UPDMOD- UPDATE MODULE COUNT TBL UPDMOD,0 CLL TAD MODCNT /UPDATE -NUM OF TAD I (MCTTBL /UNUSED MODULES DCA I (MCTTBL SZL JMP MAXRLF /MAX NUMBER EXCEEDED ISZ OVRCNT /BUMP OVERLAY NUMBER SKPCLA, SKP CLA JMP MAXOVL /MORE THAN 16 OVERLAYS IN A LEVEL TAD MODCNT /UPDATE +NUM OF TAD I NMCTS /MODULES IN LAST LEVEL SNA /**** JMP I UPDMOD DCA I NMCTS ISZ NMCTS /ADV PTR TO NXT LOC DCA I NMCTS /ZERO THE NXT LOC IN PREPARATION DCA MODCNT /CLR CNT FOR NXT LEVEL JMP I UPDMOD /CORDSW- LOOK FOR SWS C AND O CORDSW, 0 TAD I (OS8SWS+1 AND (10 SNA CLA /CHECK FOR /U SWITCH JMP CHKCSW CDF 0 TAD SKPCLA /INHIBIT LEVEL CHECKING DCA I (TSTTRP CDF 10 CHKCSW, TAD I (OS8SWS RTL SPA CLA JMP I (RALFLP TAD I (OS8SWS+1 RTL SMA CLA JMP I CORDSW /O-SWITCH JMS UPDMOD ISZ NMCTS /ADV PTR FOR NXT GUY DCA I NMCTS /CLR FOR NXT LEVEL MOD CNT TAD (-21 DCA OVRCNT ISZ LVLCNT /BUMP LEVEL COUNTER JMP I (RALFLP TAD (MXLERR JMP MAXRLF+1 /TOO MANY LEVELS MAXRLF, TAD (MXRERR JMS ERORR CDF CIF 0 JMP I (7605 MAXOVL, TAD (MXOERR JMP MAXRLF+1 /ERORR- PRINTS OUT ERROR MESSAGES OF A / BUFR LOCATED IN FLD1 / ENTER WITN ADR OF BUFR IN AC / ERORR, 0 DCA BFADR CDF 10 /CALL TTYHAN JMS I (CORMOV CDF 0 LB0BUF-1 /MOVE LOWER FIELD 0 BACK CDF 0 /SO WE CAN USE THE MESSAGE HANDLER 0-1 -2000 CIF 0 JMS I (TTYHAN CDF 10 BFADR, 0 JMP I ERORR MIERR, TEXT /MIXED INPUT/ DEVERR, TEXT /BAD OUTPUT DEVICE/ MXRERR, TEXT /TOO MANY RALF FILES/ MXLERR, TEXT /TOO MANY LEVELS/ MXOERR, TEXT /TOO MANY OVERLAYS/ PAGE /PASS1, PASS2 INITIALIZATION EOPAS0, JMS I (UPDMOD /BUMP COUNTS FOR LAST LINE OF INPUT ISZ NMCTS DCA I NMCTS /PUT IN A DOUBLE ZERO AT THE END JMS I (CORMOV CDF 0 LB0BUF-1 CDF 0 0-1 /MOVE LOWER FIELD 0 BACK INTO PLACE -2000 TAD I (MODTBL SZA CLA /USER-SPECIFIED LIBRARY? JMP RDLIBH /YES CLA IAC JMS I (200 2 /LOOKUP LIBRY 0 JMP NOLIB /FORLIB.RL NOT FOUND TAD .-3 /GET STARTING BLOCK DCA I (MODTBL+2 CLA IAC DCA I (MODTBL /STORE UNIT AND BLOCK # RDLIBH, STL RTR DCA I (MODTBL+1 /JUST TO BE CAREFUL CIF 0 JMS I (IOHAN /READ BLOCK 0 OF THE LIBRARY CATALOG MODTBL 0210 PLB, RALFBF 0 STA TAD I PLB SNA CLA /IS IT AN HONEST - TO - GOD LIBRARY? JMP .+4 /YES NOLIB, DCA I (MODTBL DCA I (MODTBL+2 DCA I (RALFBF+3 /ZERO COUNT WORD IN BUFFER TAD I (RALFBF+3 DCA I (MODTBL+1 /STORE LENGTH OF CATALOGUE TAD (LHDR-1 DCA NDX0 TAD (-400 DCA TMP0 DCA I NDX0 /0 OUT ISZ TMP0 /LDR HDR JMP .-2 /GET PAGE 0 /PASS1 INITIALIZATION CONTINUED TAD I (MCTTBL /UNUSED DCA TMP2 /MODULES TAD (MCTTBL+2 /GET NUMBER OF OVERLAYS DCA NDX0 / IN EACH LEVEL TAD (QUSRLV+4 /WHERE THE DCA TMP0 /CNTS GO IN JMP BY0 /LDR HDR BLK LOP0, ISZ I TMP0 /INCREMENT NUMBER OF OVERLAYS IN THIS LEVEL TAD I NDX0 SZA CLA /END OF LEVEL? JMP LOP0 /NO TAD (4 /THIS LEVEL TAD TMP0 DCA TMP0 BY0, DCA I TMP0 /RESET CNT TAD I NDX0 /0,0 ENDS SZA CLA /MOD CNT TBL JMP LOP0 /DO MORE PTR TO TAD I (MODTBL+1 /GET LENGTH OF LIBRARY CATALOG DCA TMP4 /BLOCKS TAD TMP2 /CHK FOR MAX SZA CLA /NUM OF RALFS 0=MOD TBL IS FULL TAD I (MODTBL /CHK FOR NO CDF DCA I (LIBRSW /LIBRARY AND SET SWITCH ACCORDINGLY TAD TMP2 /-NUM LEFT DCA I (MLEFT /OF RALF MODS TAD (SYMTBL-1 /PTR TO TOP DCA I (NDX4 /OF GST TAD I (OSJSWD AND (7377 /KILL "BATCH PROTECTED" FLAG DCA I (OSJSWD AC7776 /IS THERE TAD MXFLD /GREATER THAN 12K OF CORE SPA SNA CLA /? JMP LS16K /NO TAD (200^12!30 /SET TXT I/O DCA I (TXTBLK-2 /BUFFS UP IN FLD 3 TAD (-5000 /-WDCNT (12 DCA I (TXTWDS /BLKS) TAD (6231 /CDF 30 DCA I (RDTCDF LS16K, TAD (7700 /USR IS NOT DCA I (USR /IN CORE CDF 10 JMP I (INIBFS LIBRY, 0617;2214;1102;2214 /FORLIB.RL PAGE /THIS IS THE INITIAL BINARY BUFFER TABLE R= LDBUFS-BUFTAB BUFTAB, .+4+R; 0; 0; 3200 /03200-05177 B8KPT, .+4+R; 0; 0; 5200 /05200-07177 .+4+R; 0; 0; 0020 /20000-21777 B12KPT, .+4+R; 0; 0; 2020 /22000-23777 B16KPT, .+4+R; 0; 0; 4020 /24000-25777 .+4+R; 0; 0; 0040 /40000-41777 B20KPT, .+4+R; 0; 0; 2040 /42000-43777 .+4+R; 0; 0; 4040 /44000-45777 .+4+R; 0; 0; 0050 /5000-51777 0; 0; 0; 2050 /52000-53777 INIBFS, TAD MXFLD TAD (JMP STBPTR-1 DCA .+1 HLT /DISPATCH ON NUMBER OF FIELDS STBPTR, DCA B8KPT DCA B12KPT DCA B16KPT DCA B20KPT NOP NOP /NOT SET UP TO USE MORE THAN 24K NOP JMS I (CORMOV CDF 10 BUFTAB-1 /MOVE THE BINARY BUFFER TABLE CDF 10 LDBUFS-1 /INTO A SAFE PLACE -50 CDF 0 TAD LVLCNT /SET -NUM OF TAD (11 /LEVELS CIA DCA I (NLVL TAD (-5 /NUM OF LIBR DCA TMP2 /BLKS FOR 8K CLA CMA TAD MXFLD SNA CLA /GREATER THAN 8K CORE? JMP TO8K /NO SET LIBR ARGS DCA I (LBARG+1 TAD (200^12!20 /12 BLKS FLD2 DCA I (LBARG TAD (6221 /CDF 20 DCA I (LBFLD TAD (6221 DCA I (GETLEN+1 TAD (-12 DCA TMP2 TO8K, TAD TMP2 /WILL LIBR TAD TMP4 /BE CORE SMA SZA CLA /RESIDENT? DCA I (RESFLG /NO TAD (SYMTBL-1 DCA I (NDX0 CDF 10 TAD (ESDPG-1 /ENTER DEFAULT DCA NDX0 /VALUES FOR TAD (-200 /ESD REF PAGE DCA TMP0 /IT SAVES TAD (SYMTBL+5 /PROBLEMS WITH DCA I NDX0 /EXTERNS ISZ TMP0 JMP .-3 CLA STL RTL DCA I (LHDR /STORE LOADER IMAGE CODE IN HEADER TAD (VERNUM DCA I (QVERNO /STORE LOADER VERSION NUMBER CIF 0 JMP I (STPAS1 PAGE /CORMOV- A CORE MOVE FOR A CHUNK OF CORE IN / ANY FLD TO ANY FLD. / / CALL JMS CORMOV / CDF Z1 /Z1=FROM FLD / ADDR1 /ADDR OF (1ST LOC-1) / CDF Z2 /Z2=TO FLD / ADDR2 /ADDR OF (1ST LOC-1) / -N /-OCT NUM OF WDS TO MOV / CORMOV, 0 CLA CMA TAD CORMOV DCA NDX0 TAD I NDX0 DCA TOCDF-2 TAD I NDX0 DCA NDX1 TAD I NDX0 DCA TOCDF TAD I NDX0 DCA NDX2 TAD I NDX0 DCA TMP0 0 TAD I NDX1 TOCDF, 0 DCA I NDX2 ISZ TMP0 JMP TOCDF-2 CDF 10 JMP I NDX0 /RTN $$$$$ |
Added src/os8/uni/LANGUAGE/FORTRAN4/PASS2.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 | /3 OS/8 FORTRAN (PASS TWO) / / VERSION 4A PT 16-MAY-77 / / OS/8 FORTRAN COMPILER - PASS 2 / / BY: HANK MAURER / UPDATED BY: R. LARY + M. HURLEY / / /COPYRIGHT (C) 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. / / / VERSON=4 /SEE F4.PA FOR LIST OF MAINTENANCE RELEASE CHANGES -S.R. /ALSO, ADDED SAFETY CDF 0 TO BUMP ROUTINE TO FIX BUG /MASSAGED LINK IN THAT AREA TO GET ROOM /ALSO, / FIXED BUG RE DN ERROR PRINTING WRONG LINE NUMBER / / /CHANGES FOR OS/8 V3D AND OS/78 BY P.T. /.PATCH LEVEL FOR PASS2 IS IN LOCATION 327 IFNDEF OVERLY <OVERLY=0> IFNZRO OVERLY <NOPUNCH> *2 /V3C TEM, 1 /V3C LINENO, 1 /LINE NUMBER VERS, -VERSON /VERSION NUMBER ERRPTR, 5001 /POINTER TO THE ERROR LIST FILDEV, 0 /THIS IS THE FILE DESCRIPTOR FILBLK, 0 /FOR RALF X10, COMREG-1 /INTER PASS COM REGION X11, 0 X12, 0 X13, 0 X14, 0 X15, 0 X16, 0 X17, 0 /AUTO INDEX REGISTERS ENTRY, 0 /THINGS USED BY SYMBOL /TABLE FIDDLER OENTRY, 0 BUCKET, 0 TYPE, 0 TEMP, 0 /GENERAL TEMPS TEMP2, 0 ARG1, 0 /ARGS AND TYPES BASE1, 0 TYPE1, 0 ARG2, 0 BASE2, 0 TYPE2, 0 TMPCNT, 1 /TEMP COUNT TMPMAX, 0 /MAX TEMP COUNT LITNUM, 0 /LITERAL DISPLACEMENT TMPBLK=2 OUBUF=4400 COMREG=4600 STACK1=4700 OVRLAY=5000 NPOVLY=700 XRBUFR=6600 STACK=7000 /STACK-5 CAN'T BE 0 INBUF=7200 NPPAS3=1600 ARG, 0 /TEMP FOR CODE AC, 0 /AC FOR MULTIPLY ROUTINE XR, 0 /XR CHAR FOR OADDR MQ, 0 /MQ FOR MULTIPLY ROUTINE XRNUM, 0 /TEMP USED IN XR STUFF WHATAC, 0 /POINTER TO VAR WHATBS, 0 /JUST STORED FREEXR, 0 /NUMBER OF FREE /INDEX REG DIMPTR, 0 /POINTER TO DIM INFO /AFTER GETSS NARGS, 0 /ARG COUNT FOR SS VAR /COMPILE GLABEL, 1 /GENERATED LABEL COUNTER STKLVL, STACK /STACK LEVEL (CHANGED /BY DO) COMMA, 254 /, PLUS, 253 /+ IFLABL, 0 /HOLDS LABEL FOR LOG IF DOTEMP, 7000 /DO LOOP TEMP COUNTER BINARY, 0 /BINARY IO=1, FORMATTED=0 INPUT, 0 /INPUT=1 OUTPUT=0 FOR IO STMTS PROGNM, 0 /POINTER TO PROG/FUNC NAME FUNCTN, 0 /0=MAIN, 1=FUNC, -2=SUBR ARGLST, 0 /POINTER TO ARG LIST DATASW, 0 /=1 IF THIS IS A DATA STMT GCTEMP, 0 /TEMP USED BY GENCAL EXTLIT, 0 /EXTERNAL LITERALS LIST ELCNT, 0 /AND COUNT IOLOOP, 0 /IO LOOP SWITCH ARGIO, 0 /ARG IO SWITCH F1LNAM, 0617;2224;2216;2415 /FILE NAME FORTRN.TM DEVH, 7607 /DEVICE HANDLER ADDRESS ACSWIT, 0 /IS NON ZERO IF CALLING AN ARG IOSTMT, 0 /SET 1 IF IN IO STMT /(FOR IMPLIED LOOPS) FMODE, 1 /1 IF IN F OR D MODE (0 IF E) ASFSWT, 0 /1 IF ASF PROLOG, -1 IF /ASF END, 0 OTHER JSRLBL, 0 /LABEL NUMBER FOR CALLS TO ARGS DPUSED, 0 /=1 IF DP HARDWARE USED QM4, -4 Q260, 260 QTTYOU, TTYOUT QERMSG, ERMSG QNEXT, NEXT QNEXTM, NEXT-2 QUCODE, UCODE QCODE, CODE QINWOR, INWORD QONUMB, ONUMBR QSAVEA, SAVEAC Q6M3, Q5, 5 QGENCO, GENCOD QM6, -6 QOPCOD, OPCOD QOPCDE, OPCODE QOADDR, OADDR Q17, 17 QTTYMS, TTYMSG QXRTBL, XRTABL QCHKXR, CHEKXR QGENSF, GENSTF QGENSE, GENSTE QOSNUM, OSNUM QCRLF, CRLF QOTAB, OTAB QOUTSY, OUTSYM QGARG, GARG Q20, 20 Q40, 40 QOUTNA, OUTNAM QLITRL, LITRL Q200, 200 Q255, 255 Q3, 3 QOLABE, OLABEL QGETSS, GETSS Q256, 256 QSAVAC, SAVACT QSKPIR, SKPIRL QGENCA, GENCAL QLOADA, LOADA QMUL12, MUL12 QGARGS, GARGS QOINS, OINS QOCHAR, OCHAR QNUMBR, NUMBRO QXRBUF, XRBUFR QTTYP2, TTYP2C QTTCRL, TTCRLF QM63, -63 Q7605, 7605 RELCD, 0 QLABEL, NLABEL P0F1, 5274 /101-2605 P0F2, VERROR / OUTPUT UTILTIY ROUTINES PAGE OCNT, CRLF, 0 /OUTPUT CR LF TAD (215 JMS I QOCHAR TAD (212 JMS I QOCHAR TAD (200 KRS TAD (-203 SNA CLA KSF /CHECK FOR ^C JMP I CRLF JMP I (7605 NCHAR, OSNUM, 0 /PRINT STMT NUMBER IAC /SKIP POINTER WORD DCA NAMPTR TAD (6211 /ALWAYS IN FIELD 1 DCA NAMCDF TAD OSNUM /SAVE ENTRY POINT DCA OUTNAM TAD (243 /GET FIRST CHAR (ALWAYS #) JMP L6201 /GO PRINT NAME TTCHAR, OUTSYM, 0 /PRINT OPCODE DCA NAMPTR /SAVE POINTER TO STUFF TAD L6201 /ALWAYS FIELD 0 DCA NAMCDF TAD OUTSYM /SAVE ENTRY DCA OUTNAM JMP NAMCDF /PRINT REST ONUMT, OUTNAM, 0 /OUTPUT NAME DCA NAMPTR /SAVE ADDRESS OF NAME RDF /GET FIELD OF NAME TAD L6201 DCA NAMCDF /SAVE AS CDF TAD I NAMPTR /GET FIRST CHAR (ALREADY ASCII) ISZ NAMPTR /SKIP OVER TYPE AND DIM PTR ISZ NAMPTR L6201, CDF JMS I QOCHAR /OUTPUT CHAR ISZ NAMPTR NAMCDF, 0 TAD I NAMPTR /GET NEXT TWO CHARS CDF SNA /IS NAME DONE ? JMP I OUTNAM /YES DCA NCHAR /SAVE TWO CHARS TAD NCHAR RTR /GET UPPER CHAR RTR RTR TAD (240 AND (77 TAD (240 JMS I QOCHAR /OUTPUT IT TAD NCHAR /NOW DO LOWER AND (77 SNA JMP I OUTNAM /NAME DONE TAD (240 AND (77 TAD (240 JMP L6201+1 /GO AND OUTPUT IT ONUMBR, 0 /OUTPUT OCTAL NUMBER DCA ONUMT /SAVE TEMPORARILY TAD QM4 /4 DIGITS DCA OCNT OLOOP, TAD ONUMT CLL RTL RAL DCA ONUMT TAD ONUMT RAL AND (7 TAD Q260 JMS I QOCHAR ISZ OCNT JMP OLOOP JMP I ONUMBR TTYP2C, 0 /PRINT 2 CHARS ON THE TTY DCA TTCHAR TAD TTCHAR RTR RTR RTR JMS CONVRT TAD TTCHAR JMS CONVRT JMP I TTYP2C NAMPTR, CONVRT, 6401 /CONVERT TO ASCII AND (77 SZA TAD (240 AND (77 TAD (240 JMS I QTTYOUT JMP I CONVRT TTCRLF, 0 TAD (215 JMS I QTTYOUT TAD (212 JMS I QTTYOUT JMP I TTCRLF TTYMSG, 0 /PRINT 2 CHAR ERROR MESSAGE CDF TAD I TTYMSG ISZ TTYMSG /PRINT ERROR MESSAGE JMS I QERMSG FATAL, JMP I QNEXT /FATAL ERROR MESSAGE TAD I FATAL JMS I QERMSG JMP I Q7605 /RETURN TO PS8 DP2C1, TEXT '.+2,1' NEG, JMS I QUCODE /NEGATE CODE NEGTBL-1 JMP I QNEXT PAGE / OPCODE JUMP TABLE TAD TEMP2 SKP /CODE ALREADY READ NEXT, JMS I QINWORD /GET NEXT INPUT WORD TAD (XPUSH /INDEX INTO JUMP TABLE DCA TEMP2 CDF 10 TAD I TEMP2 CDF 0 DCA TEMP2 /GET JUMP ADDRESS JMP I TEMP2 /GO THERE /OPTIMIZING RELATIONAL CODE FOR OS/8 F4 /COMPLIMENTS OF R.L. LE, STL RTL /2 LT, TAD QM4 /GENERATE -4 FOR LT, -2 FOR LE JMP GE+1 /GO TO COMMON RELATIONAL CODE GT, STL RTL GE, IAC /GENERATE 1 FOR GE, 3 FOR GT DCA RELCD /ALL THIS FUNNY STUFF IS BECAUSE SOME JMS I QCODE /OF THE RELATIONAL SKELETONS OPTIMIZE BY LETABL-6;5 /PERFORMING THE RELATIONAL ON THE NEGATIVE TAD RELCD /OF THE FAC - WHEN THIS HAPPENS SPECIAL SPA /CODE IN THE SKELETON DOES AN "ISZ RELCD", CIA /CHANGING ABS(RELCD) TO ITS OPPOSITE RELATIONAL JMP RELGEN /E.G. GE(1) TO LE(2), LE(-2) TO GE(-1) EQ, CLA IAC /SINCE EQ AND NE ARE SIGN-INDEPENDENT, NE, DCA RELCD /WE DON'T NEED THAT KLUDGE BUT FOR COMPATIBILITY JMS I QCODE /WITH RTPS THE OS/8 FORTRAN SYSTEM FUNCTION EQTABL-6;5 /"#CEQ" WORKS THE WRONG WAY - IT PRODUCES CLA IAC /A 1.0 IF THE COMPLEX AC WAS (0.,0.) AND RELCD /AND A 0.0 OTHERWISE - SO WE HAVE TO REVERSE SZA CLA /THE SENSE OF COMPLEX .EQ. AND .NE. RELATIONS. RELGM1, TAD Q5 RELGEN, DCA RELCD /STORE "FINAL" RELCD JMS I QINWORD /GENTLY PROBE AHEAD IN THE INPUT DCA TEMP2 TAD TEMP2 TAD (XPUSH-XLOGIF SNA CLA /IF THIS WAS THE TOP RELATION OF A LOGICAL IF, JMP LIFOPT /WE'RE IN A POSITION TO OPTIMIZE TAD RELCD /OTHERWISE OUTPUT A CALL TO THE CLL RAL /ROUTINE CORRESPONDING TO THE RELATIONAL TAD (LTRNE DCA .+3 CLA IAC JMS I (OJSR /GENERATE A JSA #XX 0 JMP I QNEXTM2 /PROCESS THE WHATCHIMACALLIT LIFOPT, TAD TYPE1 /SEE IF WE SHOULD GENERATE A "STARTF" FIRST AND Q17 /ONLY WORRY ABOUT D.P. TAD QM4 /SINCE THE ROUTINE #CEQ DOES A STARTF DCA FMODE /FMODE=0 ONLY IF ARGS WERE D.P. JMS I QGENSF /GENERATE STARTF IF NECESSARY JMP I .+1 LIFBGN+1 /GO TO LOGICAL IF PROCESSOR EQV, JMS I QCODE /.EQV. LOGICAL OPERATOR EQVTBL-6;0 JMP RELGM1 / PASS TWO OUTPUT ROUTINE OCHAR, 0 /OUTPUT A CHAR TO THE /RALF INPUT FILE AND (377 DCA OUTEMP /SAVE CHAR ISZ OUJUMP /BUMP THREE WAY SWITCH OUJUMP, JMP . JMP CHAR1 JMP CHAR2 TAD OUTEMP /HIGH FOUR BITS GO INTO CLL RTL /THE HIGH ORDER BITS OF THE RTL /FIRST WORD OF THE TWO WORD PAIR AND (7400 /SEE NOTE * BELOW TAD I OUPOLD /COMBINE WITH OTHER BITS DCA I OUPOLD TAD OUTEMP /THE OTHER FOUR BITS OF THIS CHAR CLL RTR /GO INTO THE HIGH ORDER FOUR RTR /BITS OF THE SECOND /WORD OF THE PAIR RAR AND (7400 TAD I OUPTR DCA I OUPTR TAD OUJMP /RESET 3 WAY BRANCH DCA OUJUMP ISZ OUPTR /BUMP BUFFER POINTER ISZ OUWDCT /AND DOUBLE WORD COUNTER JMP I OCHAR /BUFFER NOT FULL JMS OUDUMP /DUMP IT JMP I OCHAR CHAR2, TAD OUPTR /SAVE FIRST WORD POINTER DCA OUPOLD ISZ OUPTR /GO TO SECOND WORD CHAR1, TAD OUTEMP /STORE CHAR 1 OR 2 DCA I OUPTR JMP I OCHAR OUTEMP, OUDUMP, 0 /BUMP THE DUFFER TAD OSIZE /ANY ROOM LEFT ? SNA JMP OUERR IAC DCA OSIZE /YES, ITS OK JMS I DEVH /WRITE 4200 /CONTROL WORD OUBUF /BUFFER POINTER OBLOCK, 0 /BLOCK NUMBER JMP OUERR /ERROR ISZ OBLOCK /INCREMENT BLOCK NUMBER ISZ FILSIZ /AND FILE SIZE TAD OBLOCK-1 /SET BUFFER POINTER DCA OUPTR TAD (-200 /SET DOUBLE WORD COUNT DCA OUWDCT JMP I OUDUMP OUERR, JMS I (FATAL /FATAL OUTPUT ERROR 1706 / * THE PONY EXPRESS STARTED IN 1860 AND ONLY RAN / FOR 19 MONTHS WHILE LOSING $200,000. OUPOLD, 0 OUPTR, OUBUF OUJMP, JMP OUJUMP OUWDCT, -200 OSIZE, 0 DD1, TEXT '1' PAGE / READ FROM FORTRN.TM INWORD, 0 /READ A WORD FROM INPUT FILE ISZ INBCNT /ANYTHING LEFT IN BUFFER ? JMP NOREAD /YES ISZ INRCNT /ANYTHING LEFT IN FILE? SKP JMP I (END /NO, END OF PROG JMS I DEVH /READ NEXT BLOCK X200, 0200 INBUF INBLOK, 0 JMP INERR /INPUT ERROR ISZ INBLOK /BUMP BLOCK NUMBER TAD (-400 /RESET COUNTER DCA INBCNT TAD INBLOK-1 /RESET POINTER DCA INBPTR NOREAD, TAD I INBPTR /GET WORD FROM BUFFER ISZ INBPTR /BUMP BUFFER POINTER JMP I INWORD INERR, JMS I (FATAL /FATAL INPUT ERROR 1105 INBCNT, -1 /FORCE READ FIRST TIME INBPTR, 0 INRCNT, 0 / CODE UTILITIES GETSS, 0 /GET POINTER TO DIM INFO CDF 10 IAC DCA DIMPTR /ADDR OF TYPE WORD TAD I DIMPTR ISZ DIMPTR /MOVE TO DIM/EQUIV POINTER AND X200 /EQUIV INFO ? SNA CLA JMP .+3 /NONE TAD I DIMPTR /SKIP EQUIV INFO DCA DIMPTR TAD I DIMPTR /ADDRESS OF DIM INFO JMP I GETSS NUMBRO, 0 /OUTPUT 15 BIT OCTAL NUMBER TAD AC /IS HIGH DIGIT 0 ? SNA JMP .+3 /YES, PRINT 4 DIGITS ONLY TAD Q260 /MAKE IT ASCII JMS I QOCHAR /PUT IT TAD MQ /NOW LOW FOUR DIGITS JMS I QONUMBR JMP I NUMBRO UCODE, 0 /GEN CODE FOR UNARY OPERATORS JMS I QSAVEAC /SAVE AC IF NEEDED JMS GARG JMP OTERR /OPERATOR/TYPE ERROR TAD ARG1 /IS ARG IN AC ? SNA CLA TAD Q5 /YES, USE SECOND HALF OF TABLE TAD TYPE1 TAD I UCODE /PLUS TABLE ADDRESS DCA USKEL CDF 10 TAD I USKEL /ADDR OF SKELETON SNA JMP OTERR /0 MEANS BAD /OPERATOR/TYPE COMBO DCA USKEL /SAVE SKELETON ADDR JMS I QGENCOD /GO DO THE CODE USKEL, 0 DCA I X16 /RESULT IN AC ISZ X16 /BUMP STACK POINTER ISZ X16 /TYPE IS ALREADY THERE ISZ UCODE /FIX RET ADDR JMP I UCODE GARG, 0 /GET ONE ARG CLL CMA RTL /BACK UP ONE ENTRY TAD X16 DCA X16 TAD X16 /USABLE POINTER DCA X15 TAD I X15 /GET OPERAND DCA ARG1 TAD I X15 DCA TYPE1 TAD I X15 DCA BASE1 TAD TYPE1 /CHECK TYPE TAD QM6 SMA CLA JMP I GARG /TAKE ERROR EXIT ISZ ARG2 /MAKE SURE ARG2 ISN'T ZERO JMS I (MPTRA1 /MOVE THE POINTER IF /THERE IS ONE ISZ GARG JMP I GARG TTYOUT, 0 /OUTPUT TO THE TTY TLS TSF JMP .-1 CLA KSF JMP I TTYOUT /NO KEYBOARD FLAG KRB AND (177 /ACCEPT PARITY ASCII TAD (-3 /^C ? SNA JMP I Q7605 /YES, BACK TO PS8 TAD (3-17 /^O ? SZA CLA JMP I TTYOUT /NO, RETURN DCA TTYOUT+1 /KILL OUTPUT STUFF DCA TTYOUT+2 DCA TTYOUT+3 JMP I TTYOUT /RETURN LTRNE, TEXT '#NE' TEXT '#GE' TEXT '#LE' TEXT '#GT' TEXT '#LT' TEXT '#EQ' PAGE / SOME TEXT P2, TEXT '+2' XVAL, TEXT '#VAL' DP4, TEXT '.+4' FADD, TEXT 'FADD' FLDA, TEXT 'FLDA' FSUB, TEXT 'FSUB' / SAVE AC ROUTINES SAVACT, 0 /SAVE TOP OF STACK IF /NECESSARY TAD SAVACT /SAVE RETURN ADDR DCA SAVEAC CLL CMA RAL JMP SAVEAC+2 /BACK UP ONLY ONE ENTRY SAVEAC, 0 /STORE AC IF NEEDED TAD (-5 /LOOK AT STACK TWO DOWN TAD X16 DCA SATEMP TAD I SATEMP /IF 0, RESULT WAS LEFT IN AC SZA CLA JMP I SAVEAC /NO, NO STORE NEEDED TAD TMPCNT /STORE TEMP NUMBER DCA I SATEMP ISZ SATEMP /MOVE TO TYPE WORD TAD I SATEMP /GET TYPE JMS SAVE /GO DO ACTUAL STORE JMP I SAVEAC SAVE, 0 /SAVE AC DCA ACSTOR /THIS IS THE TYPE TAD ACSTOR /IS IT COMPLEX OR DOUBLE? TAD QM4 SNA JMP NOC /ITS DOUBLE IAC SZA CLA JMP NOCORD /NO JMS I QGENCOD /STARTE; FLDA #CAC SEGCAC-1 NOC, JMS ACSTOR /%FSTA #TMP+XXXX JMS TMPBMP /THIS USE TWO TEMPS JMP I SAVE NOCORD, JMS ACSTOR /%FSTA #TMP+XXXX JMP I SAVE SATEMP, ACSTOR, 0 /GENERATES FSTA TEMP+XXXX JMS I QOPCOD /OUTPUT %FSTA %TEMP+XXXX FSTA JMS I QOADDR TMPCNT /TMPCNT CONTAINS THE /ARG NUMBER JMS TMPBMP /BUMP TEMPORARY NUMBER JMP I ACSTOR TMPBMP, 0 /ROUTINE TO BUMP TEMPORARIES TAD TMPCNT /BIGGER THAN MAX? CIA CLL TAD TMPMAX SZL CLA JMP .+3 /GO BUMP TEMP CNT TAD TMPCNT /NEW TEMP MAX DCA TMPMAX ISZ TMPCNT /INCR TEMP COUNT JMP I TMPBMP / PUSH ARG ONTO STACK PUSH, JMS SAVEAC /GO SAVE AC IF NEEDED JMS I QINWORD /GET ADDR OF NEW VAR DCA TEMP /SAVE IT TAD TEMP /PUSH IT DCA I X16 ISZ TEMP /GO TO TYPE CDF 10 TAD I TEMP /GET TYPE CDF AND Q17 /PUSH TYPE DCA I X16 /ONTO STACK CKPDL, DCA I X16 /ZERO BASE WORD TAD X16 /IS STACK FULL ? CIA CLL TAD (STACK+177 SZL CLA JMP I QNEXT /NO, OK TAD STKLVL /RESET STACK LEVEL DCA X16 JMS I QTTYMSG /PRINT MESSAGE 2004 DPUSH, JMS I QINWORD /GET THE VAR NAME PTR DCA I X16 /PUSH IT JMS I QINWORD /NOW GET THE DISPLACEMENT JMP CKPDL-1 /GO CHECK FOR OVERFLOW STARTF, TEXT 'STARTF' / ARITHMETIC IF ARTHIF, JMS I QUCODE /GET ARG INTO AC AIFTBL-1 JMS I QGENSF /DO ALL TRANSFERS IN FMODE TAD (JLT /FIRST OPCODE DCA AJUMP AIFLUP, JMS I QINWORD /GET NEXT INPUT DCA TEMP2 /SAVE IT IN CASE ITS NOT LABEL TAD TEMP2 CLL TAD (XPUSH-XLAST /IS IT A LABEL ? SNL CLA JMP I QNEXTM2 /NO, PROCEED JMS I QOPCDE AJUMP, 0 /OUTPUT CORRECT JUMP TAD TEMP2 CDF 10 JMS I QOSNUM /NOW THE LABEL JMS I QCRLF ISZ AJUMP /MOVE TO NEXT OPCODE ISZ AJUMP JMP AIFLUP DOT, TEXT '.' DP8, TEXT '.+10' PAGE / PICK UP TOP TWO ARGS GARGS, 0 /GET TOP 2 ARGS FROM STACK TAD X16 TAD QM6 /BACK TWO OPERANDS DCA X15 TAD X15 DCA X16 /AND OFFICIALLY POP THE STACK TAD I X15 /GET FIRST ARG DCA ARG1 TAD I X15 /AND TYPE DCA TYPE1 TAD I X15 DCA BASE1 /AND FIRST BASE (IN /CASE OF SS) TAD I X15 /NOW SECOND ARG DCA ARG2 TAD I X15 DCA TYPE2 TAD I X15 DCA BASE2 TAD TYPE1 /TYPES MUST BE LT 6 TAD QM6 SMA CLA JMP I GARGS /RETURN BAD TAD TYPE2 TAD QM6 SPA CLA ISZ GARGS /FIX RETURN JMS MPTRA1 /GET ARG1 POINTER IF NEEDED TAD ARG2 /IS ARG2 A POINTER TAD (-61 SZA CLA JMP I GARGS /NO, RETURN TAD ARG1 /IS ARG1 IN THE AC ? SZA CLA JMP .+5 /NO TAD TMPCNT /YES, STORE THE AC DCA ARG1 TAD TYPE1 /GET TYPE JMS I (SAVE TAD BASE2 /MOVE POINTER FROM TEMP /TO BASE+3 DCA ARG2 JMS I QGENCOD MPTR3-1 TAD (62 /ARG IS NOW POINTED TO /BY BASE+3 DCA ARG2 JMP I GARGS MPTRA1, 0 /MOVE ARG1 POINTER TO BASE TAD ARG1 TAD (-61 SZA CLA JMP I MPTRA1 TAD ARG2 SZA CLA JMP .+5 TAD TMPCNT DCA ARG2 TAD TYPE2 /GET THE TYPE JMS I (SAVE TAD BASE1 DCA ARG1 JMS I QGENCOD MPTR0-1 TAD (61 DCA ARG1 /SET ARG1 TO IND0 JMP I MPTRA1 / BINARY OPERATORS CODE, 0 /GENERATE CODE FOR /BINARY OPERATORS JMS GARGS /GET OPERANDS JMP OTERR /BAD TYPE OPERATOR COMBO TAD TYPE1 /INDEX INTO TYPE CHECK TABLE CLL RTL TAD TYPE1 TAD TYPE2 CLL RAL TAD (TYPMIX-14 /POINTER TO CORRECT ENTRY DCA SKEL CDF 10 TAD I SKEL /RESULTING TYPE SNA JMP TYPERR /THIS MIX IS ILLEGAL DCA TYPE1 /SAVE RESULT TYPE ISZ SKEL /GET INDEX INTO /SKELETON TABLE TAD I SKEL CDF TAD I CODE /PLUS BASE GIVES ADDR /OF M,AC CASE DCA SKEL CDF 10 TAD I SKEL /IS THIS TYPE OPER /COMBO LEGAL ? SNA CLA JMP OTERR /NO ISZ CODE /POINTS TO RESULTING TYPE TAD ARG2 SZA CLA ISZ SKEL /SECOND ARG IS IN MEMORY TAD ARG1 SNA CLA /SKIP ON M,M CASE ISZ SKEL /MOVE TO AC,M CASE TAD I SKEL /PICK UP POINTER TO SKELETON DCA SKEL JMS I QGENCOD /GO DO THE CODE SKEL, 0 DCA I X16 /RESULT IS IN THE AC TAD I CODE SNA /IS TYPE SAME AS ARGS ? TAD TYPE1 /YES DCA I X16 /STORE IT DCA I X16 /ZERO BASE WORD TAD I CODE /IS TYPE SAME AS ARGS ? SZA DCA FMODE /NO, WE'RE NOW IN FMODE JMP I CODE TYPERR, JMS BUMP /PUT FALSE VALUE ONTO STACK JMS I QTTYMSG /OUTPUT ERROR 1524 OTERR, JMS BUMP /PUT FALSE VALUE ONTO STACK JMS I QTTYMSG 1724 XDPP6, TEXT '#DPT+6' XFIX, TEXT '#FIX' PAGE / CODE GENERATOR (FROM SKELETONS) GENCOD, 0 /CODE GENERATOR ROUTINE CDF TAD X14 DCA TEMP14 /FIX COMPLEX FUNCTION BUG TAD I GENCOD /GET SKELETON ADDRESS ISZ GENCOD MPOPUP, DCA X14 /HERE ON MACRO END DCA MRETN CODLUP, CDF 10 /STUFF IS IN FIELD 1 TAD I X14 /GET OPCODE CDF SNA JMP ENDM /IS IT END OF A MACRO ? SPA JMP MACRO /ITS A MACRO REFERENCE DCA .+2 /SAVE OPCODE JMS I QOPCOD /OUTPUT IT 0 CDF 10 TAD I X14 /ADDRESS ? CDF SNA JMP NOADDR /NO OPERAND FOR THIS INSTR SPA JMP DOADDR /ADDRESS IS AN OPERAND DCA TEMP JMS I QOTAB /ADDRESS IS A SPECIFIC TAD TEMP JMS I QOUTSYM NOADDR, JMS I QCRLF JMP CODLUP /DO NEXT LINE DOADDR, IAC /IS IT ARG1 ? SZA CLA JMP ITSA2 /NO, ITS ARG2 JMS I QOADDR /OUTPUT ARG1 ADDRESS FIELD ARG1 JMP CODLUP ITSA2, JMS I QOADDR /OUTPUT ARG2 ADDRESS ARG2 /FIELD JMP CODLUP MACRO, TAD Q5 /CODES BETWEEN -1 AND -5 ARE SPECIAL SPA JMP .+4 /NOT ONE OF THEM TAD (JMP MJTBL DCA .+1 HLT /GO TO PROPER ROUTINE DCA MSTART /SAVE START OF MACRO TAD X14 /SAVE RETURN ADDRESS DCA MRETN TAD MSTART /GO DO MACRO DCA X14 JMP CODLUP ENDM, TAD MRETN /WAS THIS A MACRO ? SZA JMP MPOPUP /YES - GET OUT OF IT TAD TEMP14 DCA X14 /RESTORE X14 FOR FUNCAL JMP I GENCOD /AND EXIT LOADA1, JMS I (LOADA /GENERATE LOAD ARG1 /IF NECESSARY JMP CODLUP LOADA2, JMS I (LOADA /GENERATE LOAD ARG2 /IF NECESSARY JMP CODLUP DOSTE, JMS I QGENSE /STARTE IF IN F MODE JMP CODLUP SGNNEG, ISZ RELCD /CHANGE SIGN OF RELATIONAL OPERATOR JMP CODLUP MSTART=TEMP MRETN, 0 /MACRO RETURN ADDRESS TEMP14, 0 MJTBL, JMP SGNNEG /-5 - NEGATE RELATIONAL SIGN JMP LOADA2 /-4 - LOAD ARG 2 JMP LOADA1 /-3 - LOAD ARG 1 JMP DOSTE /-2 - START E MODE JMS I QGENSF /-1 - START F MODE JMP CODLUP XSET, TEXT 'SETX' ZEROC1, TEXT '0,1' / GOTO'S AND ASSIGN CGOTO, JMS GTSTUF /LOOK AT INDEX JMS I QGENCOD /OUTPUT COMPUTED GOTO CODE CGTCOD-1 JMS I QINWORD /GET COUNT CIA DCA TEMP2 CGTLUP, JMS JAGEN ISZ TEMP2 JMP CGTLUP JMP I QNEXT GOTO, JMS I QGENSF /ALL TRANSFERS IN F MODE JMS JAGEN JMP I QNEXT JAGEN, 0 JMS I QOPCDE /OUTPUT JA'S JA JMS I QINWORD /GET THE LABEL CDF 10 JMS I QOSNUM /OUTPUT IT AS THE ADDRESS JMS I QCRLF JMP I JAGEN GTSTUF, 0 JMS I QGARG /GET THE ARG JMP GTTYPE CLL CMA RTL /CHECK THE TYPE TAD TYPE1 SMA CLA JMP GTTYPE /NOT INTEGER OR REAL TAD ARG1 /IS IT IN THE AC ? SNA CLA JMP I GTSTUF /YES ALREADY JMS I QGENCOD GI-1 /LOAD THE INDEX JMP I GTSTUF GTTYPE, JMS I QTTYMSG /GOTO TYPE ERROR 0726 JAC, TEXT 'JAC' FSTA, TEXT 'FSTA' FNEG, TEXT 'FNEG' PAGE / ADDRESS FIELD OUTPUT OADDR, 0 /OUTPUT ADDRESS FIELD TAD I OADDR /GET ADDRESS OF PARAMETERS DCA ARG ISZ OADDR TAD I ARG /GET VALUE OF ARG CLL TAD (-52 /IS IT A TEMP REFNCE SNL JMP TMPREF /YES, 1-51 TAD (52-61 /IS IT AN ARRAY REFERENCE ? SZL JMP SSREF /YES, 52-60 IS XR1-XR7 SNA JMP IND0 /INDIRECT THROUGH 0 TAD (61-7000 /CHECK FOR DO TEMP SZL JMP DOTMP TAD (7000-62 SNA JMP IND3 /INDIRECT THROUGH 3 TAD (63 DCA TEMP CDF 10 TAD I TEMP /IS THIS AN ARG ? AND Q20 CDF SZA CLA JMP INDARG /YES, REF IT INDIRECTLY JMS I QOTAB CDF 10 TAD I TEMP /LOOK AT TYPE WORD AND (50 /IS IT LIT OR STMT NO.? SNA JMP OUTA /NO, JUST OUTPUT ADDRESS AND Q40 SNA CLA JMP OUTSN /OUTPUT STMT NUMBER JMP OUTLIT /OUTPUT LITERAL OUTA, TAD PROGNM /IS THIS THE FUNCTION NAME ? CIA TAD TEMP SNA CLA JMP FUNNAM /YES, REFERENCE #VAL INSTEAD OUTA2, CLA CMA /SIMPLE LOCAL VARIABLE REFNCE TAD TEMP /ADDRESS OF VAR JMS I QOUTNAM /INTO ADDR FIELD JMS I QCRLF JMP I OADDR /END OF ADDRESS OUTLIT, ISZ TEMP /MOVE TO LITERAL NUMBER TAD I TEMP DCA TEMP /DISPLACEMENT FROM %LITRL CDF TAD QLITRL /OUTPUT #LIT+ JMS I QOUTSYM TAD TEMP /DISPLACEMENT JMS I QONUMBR JMP OADRET-1 FUNNAM, TAD (XVAL /#VAL JMS I QOUTSYM JMP OADRET-1 SSREF, TAD (270 /MAKE IT AN ASCII DIGIT DCA XR ISZ ARG /POINT TO THE BASE WORD TAD I ARG /GET THE ADDR OF THE BASE DCA ARG CDF 10 TAD ARG IAC /GO TO TYPE OF BASE VAR DCA TEMP2 TAD I TEMP2 /IS IT AN ARG TO THE SUBR ? AND Q20 SNA CLA JMP NOTARG /NO, NO INDIRECT STUFF CDF JMS SIT TAD ARG /VAR NAME CDF 10 JMS I QOUTNAM TAD COMMA JMS I QOCHAR TAD XR /XR NUMBER JMS I QOCHAR JMS I QCRLF OADRET, JMP I OADDR IND3, TAD (XBASP3-XBASE /INDIRECT THRU #BASE+3 IND0, TAD (XBASE /INDIRECT THRU #BASE DCA TEMP JMS SIT TAD TEMP JMP FUNNAM+1 OUTSN, CLA CMA /OUTPUT STMT NUMBER TAD TEMP JMS I QOSNUM /OUTPUT THE NUMBER TAD (P2 /+2 (HACK FOR FORMAT) JMP FUNNAM+1 INDARG, JMS SIT /INDIRECT INDICATOR CDF 10 JMP OUTA2 /OUTPUT ARG NAME SIT, 0 TAD (245 /% (INDIRECT) JMS I QOCHAR JMS I QOTAB JMP I SIT CEQ, TEXT '#CEQ' XBAC1P, TEXT '#BASE,1+' XUE, TEXT '#UE' PAGE / ADDRESS FIELD OUTPUT NOTARG, TAD I TEMP2 /GET TYPE WORD DCA TEMP /SAVE IT TAD TEMP ISZ TEMP2 AND Q200 /EQUIVALENCED ? SNA CLA JMP .+3 TAD I TEMP2 /SKIP EQUIV INFO BLOCK DCA TEMP2 CLL CML RTL TAD I TEMP2 /ADDRESS OF MAGIC NUMBER DCA TEMP2 TAD I TEMP2 /MAGIC NUMBER ITSELF DCA TEMP2 CDF JMS I QOTAB /TAB TAD ARG /OUTPUT VARIABLE MINUS CONST JMS VMC TAD COMMA JMS I QOCHAR TAD XR /N JMS I QOCHAR JMS I QCRLF /END OF LINE JMP OADRET DOTMP, DCA TEMP /ADDRESS RELATIVE TO %DOTMP JMS I QOTAB TAD (DOTMPN /OUTPUT #DOTMP JMS I QOUTSYM JMP PLUSN /GO OUTPUT +XXXX TMPREF, CLA TAD I ARG /BUMP TEMPS BACK CORRECTLY (?) DCA TMPCNT JMS I QOTAB /TAB CLA CMA TAD I ARG /GET NUMBER DCA TEMP /INTO TEMP IFNZRO TMPBLK-2 <XXXXXX> CLL STA RAL /V3C -2 (-TMPBLK) /V3C LINK SET TAD TEMP /V3C (SAVES A LITERAL) SNL /V3C DCA TEMP /YES, SAVE ALTERED DISPLACEMENT SNL CLA /V3C TAD (TEMPN2-TEMPN /USE %TEMPX TAD (TEMPN /USE %TEMP JMS I QOUTSYM PLUSN, TAD PLUS /PLUS CONSTANT JMS I QOCHAR TAD TEMP /DISPLACEMENT TIMES THREE CLL RAL TAD TEMP JMS I QONUMBR /OUT IT JMS I QCRLF JMP OADRET / UTILITIES VMC, 0 /OUTPUT VARIABLE MINUS CONST CDF 10 JMS I QOUTNAM /PUT VAR NAME TAD Q255 /- JMS I QOCHAR TAD TEMP /THIS CONTAINS THE TYPE JMS SKPIRL /SKIP ON I,R OR L TAD Q3 /USE SIX WORDS PER ENTRY TAD Q3 /REAL, INTEGER, OR /LOGICAL 3 WORDS DCA MQ TAD TEMP2 JMS MUL12 /DO MULTIPLY JMS I QNUMBRO /OUTPUT 15 BIT NUMBER JMP I VMC SC, SKPIRL, 0 /SKIP ON TYPE I R OR L AND Q17 /ISOLATE TYPE CODE TAD QM4 /IS IT DOUBLE ? SZA IAC /NO, IS IT COMPLEX ? SZA CLA ISZ SKPIRL /NEITHER, SKIP JMP I SKPIRL /RETURN MUL12, 0 /12 BIT MULTIPLY DCA OPRND TAD (-15 DCA SC JMP STMUL M12LUP, TAD AC SNL JMP .+3 CLL TAD OPRND RAR STMUL, DCA AC TAD MQ RAR DCA MQ ISZ SC JMP M12LUP JMP I MUL12 OPRND, BUMP, 0 /PUT FALSE ENTRY ONTO STACK CDF 0 /V3C IMPORTANT PROTECTION DCA I X16 ISZ X16 ISZ X16 /THIS PREVENTS UNDER /FLOWING THE STACK JMP I BUMP /AFTER SOME ERRORS EXTERN, TEXT 'EXTERN' CADD, TEXT '#CAD' CNEG, TEXT '#CNG' CMUL, TEXT '#CML' JLE, TEXT 'JLE' ORG, TEXT 'ORG' STARTE, TEXT 'STARTE' XDPTMP, TEXT '#DPT' PAGE / RANDOM CODE GENERATORS ERROR, JMS I QINWORD /GET ERROR CODE JMS I QERMSG /PRINT IT JMP I QNEXT EOSTMT, TAD DATASW /WAS THIS A DATA STMT ? SNA CLA JMP OPTMYZ /NO DCA DATASW /KILL SWITCH JMS I QOPCDE ORG /ORIGIN BACK TO THE PROGRAM TAD GLABEL JMS I QOLABEL JMS I QCRLF ISZ GLABEL /BUMP LABEL GENERATOR OPTMYZ, CLA /CHANGED TO CLA IAC IF /O JMS I QXRTBL /CLEAR TABLE OR RESET FLAGS ISZ LINENO /BUMP LINE NUM TAD LINENO /DISPLAY IN MQ 7421 /FOR COOLNESS CLA /FOR NON-EAE FOLKS TAD STKLVL /RESET STACK LEVEL DCA X16 JMS IFEND /LOOK FOR END OF LOGICAL IF JMS I (ASFEND /END OF A.S.F. DEFINITION ? DEBUG, JMP I QNEXT /OVERLAYED IF NO /N SWITCH JMS I QOPCDE /OUTPUT LDX NNNN,0 LDX TAD LINENO /THIS IS THE CURRENT ISN JMS I QONUMBR TAD COMMA JMS I QOCHAR TAD Q260 JMS I QOCHAR JMS I QCRLF JMP I QNEXT IFEND, 0 /OUTPUT IF END LABEL IF TAD IFLABL /WAS THIS END OF LOG IF SNA JMP I IFEND /OUTPUT DEBUG STUFF JMS I QLABEL /OUPTUT THE LABEL JMS I QGENSF /ALL LOGICAL IFS MUST /END IN FMODE DCA WHATAC /CAN'T DEPEND ON /AC HERE JMS I QXRTBL /OR XR'S EITHER DCA IFLABL /KILL THE SWITCH JMP I IFEND OPCOD, 0 /TAB OPCODE DCA WHATAC /AC HAS JUST BEEN /MODIFIED JMS I QOTAB TAD I OPCOD ISZ OPCOD JMS I QOUTSYM JMP I OPCOD DIV, JMS I QSAVACT /IF SECOND OPERAND IN AC, SAVE IT JMS I QCODE /DIVIDE DIVTBL-6;0 CLA CMA /WERE BOTH VARS INTEGER? TAD TYPE1 SZA CLA JMP I QNEXT /NO JMS I QGENCOD A0FN-1 /ALN 0;FNORM JMP I QNEXT LIFBGN, DCA RELCD /ENTER HERE IF LAST OPCODE NOT A RELATIONAL JMS I QGARG /ENTER HERE FROM RELATIONAL OPTIMIZER JMP NOTLOG TAD TYPE1 /MUST BE LOGICAL TAD (-5 SZA CLA JMP NOTLOG TAD ARG1 /IS IT IN AC ? SNA CLA JMP .+3 JMS I QGENCOD GI-1 JMS I QINWORD /IS IT IF(...)GOTO XX ? DCA TEMP2 TAD TEMP2 TAD (XPUSH-XGOTO SNA CLA JMP IFGOTO /YES, TREAT AS SPECIAL CASE TAD GLABEL /SET IF LABEL DCA IFLABL TAD RELCD CIA TAD Q5 /GENERATE THE OPPOSITE JUMP JMS RELJMP /AROUND THE TARGET OF THE IF TAD GLABEL JMS I QOLABEL ISZ GLABEL /INCREMENT LABEL GENERATOR JMS I QCRLF JMP I QNEXTM2 IFGOTO, TAD RELCD JMS RELJMP /GENERATE TRUE RELATIONAL JUMP IF "IF()GOTO" JMS I QINWORD /GET THE LABEL CDF 10 JMS I QOSNUM JMS I QCRLF JMP I QNEXT NOTLOG, JMS I QTTYMSG 1411 RELJMP, 0 CLL RAL TAD (JNE DCA .+2 JMS I QOPCDE 0 JMP I RELJMP FMUL, TEXT 'FMUL' FDIV, TEXT 'FDIV' CAC, TEXT '#CAC' LITRL, TEXT '#LIT+' TEMPN, TEXT '#TMP' PAGE / DO LOOP COMPILER DOBEGN, JMS I QSAVACT /FOR EXPR IN LOOP PARAMS TAD X16 /SET NEW STACK LEVEL DCA STKLVL JMS I QGARGS /GET LIMIT AND STEP JMP DPERR /ERROR IN DO PARMS JMS DOPARM /DO PARAMETER STUF FOR LIMIT ARG1 JMS DOPARM ARG2 /AND THEN FOR STEP TAD ARG1 /REPLACE ALTERRED STACK /ENTRIES DCA I X16 ISZ X16 /REST OF ARG1 OK TAD GLABEL /SAVE LOOP LABEL DCA I X16 TAD ARG2 DCA I X16 ISZ X16 ISZ X16 JMS I QCRLF /CRLF BEFORE LABL TAD GLABEL JMS I QLABEL /OUPTUT LOOP LABEL ISZ GLABEL /INCR LABEL GENERATOR DCA WHATAC /FORGET AC AND JMS I QXRTBL /XR'S AT DO BEGIN JMP I QNEXT DOSTOR, JMS I QGARGS /LOOK AT INDEX AND JMP DPERR /INITIAL VALUE CLL CMA RTL /MUST BE INTEGER OR TAD TYPE1 /REAL (L=1 AC=-3) SZL CLA /SKIP IF >2 CLL CMA RTL /L=1 AC=-3 TAD TYPE2 SZL CLA /L=0 IS BAD JMP I (STORE+2 /DO STORE IF OK DPERR, JMS I QTTYMSG /ERROR IN LIMITS 0420 /DP DOFINI, JMS I QXRTBL /DON'T OPTIMIZE XR USAGE /IN SUCCESSIVE IMPLIED DO LOOPS TAD IOSTMT /INSIDE IO STMT ? SNA CLA JMS IFEND /IF NOT, END IF FIRST JMS I QINWORD /GET THE INDEX DCA ARG1 TAD ARG1 /GET THE TYPE WORD ADR IAC DCA TYPE1 CDF 10 TAD I TYPE1 CDF AND Q17 DCA TYPE1 /TYPE OF INDEX VAR TAD QM6 TAD STKLVL /BACK UP THE STACK DCA X16 TAD X16 /RESET THE STACK LEVEL DCA STKLVL TAD I X16 /GET THE FINAL VALUE DCA DOARG ISZ X16 TAD I X16 /GET THE LOOP LABEL DCA DARG TAD I X16 /GET THE STEP DCA ARG2 TAD I X16 /WHICH DO FIN CODE ? CLL CML RAL TAD TYPE1 TAD QM6 SNA CLA TAD (DOFIN1-DOFIN0 /INDEX=I, STEP=R TAD (DOFIN0-1 /ALL OTHER CASES DCA .+2 JMS I QGENCOD /DO FINISH CODE 0 JMS I QOPCOD /SUBTRACT UPPER LIMIT FSUB JMS I QOADDR DOARG JMS I QOPCDE /NOW THE JLT %%LOOP JLE TAD DARG /OUTPUT LABEL JMS I QOLABEL JMS I QCRLF TAD STKLVL /FIX X16 INCASE MULTIPLE DO ENDER DCA X16 JMP I QNEXT DOARG, DOPARM, 0 /SUBR FOR DO PARAMETERS TAD I DOPARM ISZ DOPARM /GET THE PARM POINTER DCA DARG CLL CML RTL /GET ADDR OF TYPE WORD TAD DARG DCA TYPE CLL CMA RTL /CHECK TYPE TAD I TYPE SMA CLA JMP DPERR /NOT I OR R TAD I DARG SNA JMP STRTMP /ARG ALREADY IN AC TAD QM63 /IS IT ARRAY REF? SPA CLA JMP SVLIMT /YES, SAVE LIMIT TAD I DARG /REGET SYM ADDR DCA X10 /ADR OF TYPE WORD CDF 10 TAD I X10 /MAYBE ITS A LIT? CDF AND Q40 SZA CLA JMP I DOPARM /YES, ITS LITERAL /WE'RE ALWAYS IN F MODE HERE /SINCE THE LAST THING /WAS A DO STORE SVLIMT, JMS I QOPCOD /OTHERWISE LOAD IT FLDA JMS I QOADDR DARG, 0 STRTMP, TAD DOTEMP /SET ARG TO NEXT DO TEMP DCA I DARG JMS I QOPCOD /GENERATE STORE FSTA ISZ DOTEMP /BUMP DO TEMP TAD DARG DCA .+2 JMS I QOADDR /DO TEMP ADDRESS FIELD 0 JMP I DOPARM PAGE / SUBSCRIPT REFERENCE COMPILER ARGS, JMS I QINWORD /COMPILE ARGUMENT LIST CMA DCA NARGS /NUMBER OF ARGS TAD NARGS /GET ADDRESS OF SUBSCRIPTED VAR CLL RAL TAD NARGS /ENTRY ON THE STACK TAD X16 DCA X15 TAD X15 /SAVE POINTER TO START /OF THIS ENTRY DCA X14 /FOR POSSIBLE FUTURE USE ISZ NARGS /NOW ITS THE 2'S COMPLEMENT NOP TAD I X15 /FETCH SS VARIABLE DCA BASE1 TAD I X15 /ITS TYPE DCA TYPE1 TAD BASE1 /STORE BASE WORD DCA I X15 TAD BASE1 /GET ADDR OF TYPE WORD IAC DCA TEMP CDF 10 /GET TYPE WORD CLL CML RTR /TEST DIM BIT AND I TEMP SNA CLA JMP TRYCAL /SOME KIND OF CALL TAD BASE1 /NOW GET ADDRESS OF DIM INFO JMS I QGETSS DCA ARG1 /RETURNS WITH FIELD SET TAD I ARG1 /CORRECT NUMBER OF DIMENSIONS? TAD NARGS CDF SZA CLA JMP DIMERR /NO ISZ ARG1 /SKIP TOTAL SIZE ISZ ARG1 /SKIP MAGIC NUMBER ISZ ARG1 /AND ASSOCIATED LITERAL DCA XRNUM /START WITH XR 1 TAD (-10 /SEVEN XRS DCA XRCNT /COUNT FOR SEARCH DCA FREEXR /ZERO FREE XR INDICATOR XRCHEK, CDF ISZ XRCNT /ANY MORE XR EXPRS TO TEST ? SKP /YES, GO CHECK THEM JMP COMPSS /NO, MUST COMPILE /XR ERPRESSION ISZ XRNUM /BUMP XR NUMBER TAD XRNUM CLL RTL /TIMES 16 CLL RTL TAD (XRBUFR-1 /PLUS BASE (-1) DCA X13 TAD I X13 /LOOK AT THE SPA /INDICATOR JMP .+3 /-1=USED BY THIS STMT SZA CLA /IF ZERO GO TO /MTXR (EVENTUALLY) TAD FREEXR /ANY FREE BEFORE THIS ONE ? SZA CLA JMP NOTMT /YES, ALREADY FOUND ONE TAD XRNUM /THIS WILL BE DCA FREEXR /THE XR WE USE JMP XRCHEK /GO LOOK AT NEXT NOTMT, TAD X13 /SAVE FLAG ADDRESS DCA XRFLAG /IN CASE WE NEED IT LATER TAD I X13 /POINTER TO THE DIM INFO DCA TEMP2 CDF 10 TAD I TEMP2 /SAME NUMBER OF DIMS ? TAD NARGS SZA CLA JMP XRCHEK /NO, THIS XR WONT DO TAD NARGS /SET COUNTER DCA DCNT TAD ARG1 /POINTER TO DIM FACTORS DCA X12 ISZ TEMP2 /SKIP THREE WORDS ISZ TEMP2 ISZ TEMP2 DCHEK, ISZ DCNT /ANY MORE ? SKP JMP SSCHEK /DIMS OK, CHECK SS ISZ TEMP2 /GET TO NEXT DIM TAD I TEMP2 /ARE THEY EQUAL ? CIA TAD I X12 SZA CLA JMP XRCHEK /NO, GO TRY NEXT ONE JMP DCHEK SSCHEK, TAD NARGS /COUNT AGAIN CDF DCA DCNT CLL CMA RAL /-2 TAD X16 /ADDR OF START OF TOP /SS ON STACK JMP .+3 SSC2, CLL CMA RTL /-3 TAD XTMP /BACK UP TO NEXT LOWER SS DCA XTMP /LINK IS ALWAYS ZERO HERE TAD I XTMP /GET NEXT SS (WORKING /RIGHT TO LEFT) TAD (-61 /IS IT A VAR OR LITERAL? SNL CLA JMP XRCHEK /WE'RE JUST /LOOKING FOR AN EMPTY TAD I XTMP /RE GET SS POINTER CIA TAD I X13 /ARE THEY THE SAME ? SZA CLA JMP XRCHEK /NO ISZ DCNT JMP SSC2 /KEEP CHECKING TAD XRNUM /THEY MATCH, STICK IN /THE XR NUMBER TAD (51 DCA I X14 CLL CML RTL TAD X14 /PURGE SS FROM STACK DCA X16 CLA CMA /SET FLAG TO /'USED BY THIS STMT' DCA I XRFLAG JMP I QNEXT DCNT, 0 XRFLAG, 0 XTMP, 0 PAGE / SUBSCRIPT REFERENCE COMPILER COMPSS, TAD FREEXR /GET XR EXPR AREA CLL RTL /BY MULTIPLYING /THE NUMBER CLL RTL /BY 16 TAD (XRBUFR /AND ADDING THE /BASE ADDRESS DCA XREPTR /THIS IS IT CLA CMA /SET USED BY THIS /STMT FLAG DCA I XREPTR ISZ XREPTR CLL CMA RTL /STORE THE DIB POINTER TAD ARG1 DCA I XREPTR TAD NARGS /GET ADDR OF POINTER TO LAST CMA /DIMENSION FACTOR TAD ARG1 DCA ARG1 /SINCE WE USE THEM IN /REVERSE ORDER JMS I QSAVEAC /STORE AC IF NEEDED /FOLLOWING INSTRUCTION REMOVED FOR OPTOMIZATION / JMS I QGENSF /ALL SUBSCRIPTS AR I OR R TAD (FLDA /LOAD FIRST SS SKP CSSLUP, TAD (FADD /ADD ALL SUBSEQUENT ONES DCA OPC CLL CMA RTL /BACK UP STACK BY ONE ENTRY TAD X16 DCA X16 TAD X16 /GET A WORKING POINTER DCA X15 TAD I X15 /GET THE NEXT SUBSCRIPT DCA ARG2 CLL CMA RAL /MUST BE INTEGER TAD I X15 SMA CLA JMP DIMERR TAD I X15 DCA BASE2 TAD ARG2 /STORE THE SS INTO THE /XR EXPR ISZ XREPTR /INCREMENT FIRST DCA I XREPTR TAD ARG2 /IS ARG2 THE AC (ONLY /POSSIBLE IF SNA CLA /ITS THE RIGHTMOST /SUBSCRIPT) JMP NLODSS /YES, DON'T LOAD IT JMS I QOPCOD /OUTPUT LOAD OR ADD OPC, 0 /THIS LOCATION TELLS /THE STORY JMS I QOADDR /FOLLOWED BY THE OPERAND ARG2 /POINTED TO BY ARG2 NLODSS, ISZ NARGS /ANY MORE SUBSCRIPTS ? JMP MORESS /YES, GO COMPILE THEM TAD FREEXR /ANY FREE INDEX REG? SZA CLA JMP ASGNXR /YES, GO USE IT TAD (61 /ITS A SPECIAL POINTER ENTRY DCA I X14 ISZ X14 TAD TMPCNT /SAVE TEMP NUMBER DCA I X14 /BEFORE WE BLOW X14 JMS I (GENPTR /GENERATE POINTER TO THE ARG JMS I QGENCOD /BACK TO FMODE SF-1 JMS I (ACSTOR /GENERATE STORE AC JMP I QNEXT DIMERR, JMS I QTTYMSG /SS NOT OF CORRECT NUMBER 2323 XRCNT, 0 TRYCAL, TAD ASFSWT /ASF DEFINITION SMA SZA CLA JMP DEFASF /YES, GO OUTPUT PROLOG TAD I TEMP /IS IT A FUNCTION OR AN ARG? CDF AND (1420 SNA JMP DIMERR /NO, SOME KIND OF ERROR AND Q20 DCA ACSWIT /SAVE THE AC SWITCH JMP FUNCAL /STANDARD FUNCTION CALL MORESS, JMS I QGENSF /MUST USE SINGLE PRECISION FOR MULTIPLY JMS I QOPCOD /MULTIPLY BY DIM FACTOR FMUL CDF 10 TAD I ARG1 /PICK UP FACTOR ADDRESS CDF DCA ARG2 CLA CMA TAD ARG1 /MOVE BACK ONE DCA ARG1 JMS I QOADDR /OUTPUT MULTIPLY ADDRESS ARG2 JMP CSSLUP /LOOP ON NEXT SS ASGNXR, JMS I QOPCDE /OUTPUT ATX N ATX TAD FREEXR /GET NUMBER OF FREE XR TAD Q260 JMS I QOCHAR JMS I QCRLF TAD FREEXR TAD (51 /COMPUTE PROPER NUMBER DCA I X14 /PUT IT INTO TOP OF STACK JMP I QNEXT XREPTR, 0 / RANDOM TEXT OTAB, 0 TAD (211 JMS I QOCHAR JMP I OTAB FCLA, TEXT 'FCLA' STARTD, TEXT 'STARTD' TEMPN2, TEXT '#TMPX' CSUB, TEXT '#CSB' CDIV, TEXT '#CDV' PAGE / GENERAL CALL GENERATOR GENCAL, 0 /GENERATE A CALL; ALL ARGS ON STACK /X15 POINTS TO START OF STACK INFO /NARGS IS NEG NUMBER OF ARGS /FUNCTION NAME IS FIRST ON STACK TAD I GENCAL /GET FUN NAME SWITCH DCA FNSWIT TAD X15 /NEW STACK VALUE DCA X16 TAD X15 /WORKING POINTER DCA ARG2 TAD NARGS /WORKING COUNTER SNA JMP OUTJSR /NO ARGS, PUT JSR DCA TYPE2 CHKPTR, ISZ ARG2 /MOVE TO NUMBER TAD ARG2 IAC /ADDR OF TYPE WORD DCA BASE2 TAD I BASE2 /GET TYPE DCA TYPE1 /TYPE OF ARG FOR GENPTR ISZ BASE2 /POINT TO BASE WORD TAD I BASE2 DCA BASE1 /FOR GENPTR TAD I ARG2 /GET ARG NUMBER CLL TAD (-52 /IS IT INDEXED ? SNL JMP NOTINX /NO, ITS A TEMP TAD (52-61 /IS IT INDIRECT ? SZL JMP INXR /NO, ITS IN AN XR SNA JMP INTMP /POINTER IN A TEMP TAD (62 /GET TO TYPE WORD DCA GCTEMP CDF 10 TAD I GCTEMP /IS IT AN ARG CDF AND (1020 /ARG OR EXTERNAL ? SNA JMP NOTINX+1 /NEITHER AND Q20 SZA CLA JMP ARGARG /ARG SQUARED JMP EXTARG /EXTERNAL ARG NOTINX, CLA ISZ ARG2 /BUMP POINTER ISZ ARG2 ISZ TYPE2 /INCR COUNT JMP CHKPTR OUTJSR, TAD JSRLBL /DOES IT GET A LABEL ? SNA JMP .+3 /NO JMS I QLABEL /OUPTUT THE LABEL+COMMA DCA JSRLBL /KILL SWITCH TAD X16 /ADDR OF POINTER TO FUN NAME DCA TEMP FNSWIT, 0 /REAARANGED** JMP I (IOFUN /IO FUNCTION CALL JMS I QOPCDE /OUTPUT THE JSR JSR TAD I TEMP /NOW THE SUBR NAME CDF 10 JMS I QOUTNAM JMS I QCRLF TAD NARGS /ANY ARGS ? SNA CLA JMP I GENCAL /NO, END OF CALL JMS I QOPCDE /JUMP AROUND THE ARGS JA TAD Q256 JMS I QOCHAR /. TAD PLUS JMS I QOCHAR /+ CLL CLA CMA RAL /-2 TAD NARGS /-N-2 CLL CMA RAL /2*N+2 JMS I QONUMBR IOONLY, JMS I QCRLF TAD X16 /WORKING POINTER DCA X15 PTRLST, TAD I X15 /GET NEXT ARG SZA JMP SARG /SIMPLE ARG CLL CML RTL TAD X15 /ADDR OF GENERATED /LABEL NUMBER DCA TEMP TAD I TEMP /OUTPUT #GXXXX (THE /GENERATED LABEL) JMS I QLABEL /OUPTUT THE LABEL JMS I QGENCOD JADP2-1 /GENERATE A DUMMY JA JMP BARGLP SARG, DCA ARG2 /STORE THE ARG NUMBER JMS I QOPCOD /OUTPUT JA ARG JA JMS I QOADDR /NOW ADDRESS FIELD ARG2 BARGLP, ISZ X15 /BUMP POINTER ISZ X15 ISZ NARGS /BUMP COUNT JMP PTRLST JMP I GENCAL INTMP, TAD I BASE2 /GET TEMP NUMBER DCA ARG1 /THAT PTR IS STORED IN JMS I QGENCOD /PICK UP POINTER LDASTD-1 STRPTR, JMS I QOPCDE /NOW STORE THE POINTER FSTA TAD GLABEL /OUTPUT THE LABEL JMS I QOLABEL JMS I QCRLF TAD GLABEL /SAVE THE LABEL NUMBER DCA I BASE2 DCA I ARG2 /ZERO ARG NUMBER ISZ GLABEL /INCREMENT LABEL NUMBER JMS I QGENCOD /BACK TO F MODE SF-1 JMP NOTINX /CONTINUE LOOP NLABEL, 0 JMS I QOLABEL TAD COMMA JMS I QOCHAR JMP I NLABEL PAGE / GENERATE SUBROUTINE CALL FUNCAL, JMS I QSAVEAC /SAVE NEXT TO LAST IF NEEDED JMS I QSAVACT /SAVE LAST IF NEEDED JMS I QGENSF /ALL CALLS DONE IN F MODE DCA I X14 /RESULT RETURNED IN AC TAD ACSWIT /IS THE SUBR AN ARG ? SNA CLA JMP MAKCAL /NO, ITS EASIER JMS I QOPCOD /GET THE JSR TO THE SUBR FLDA JMS I QOADDR BASE1 /BY GETTING THE VALUE /OF THE ARG JMS I QGENCOD /STARTD SD-1 JMS I QOPCDE /STORE IT AHEAD FSTA TAD GLABEL /INTO THE JSR ISZ GLABEL DCA JSRLBL /SET THE SWITCH TAD JSRLBL JMS I QOLABEL JMS I QCRLF JMS I QGENCOD /STARTF SF-1 MAKCAL, ISZ BASE1 /MOVE TO TYPE WORD CDF 10 TAD I BASE1 /GET TYPE OF FUNCTION CDF JMS I QSKPIRL /WHAT MODE WILL WE LEAVE IN? DCA FMODE /PROBABLY E JMS I QGENCAL /GO GENERATE THE CALL SKP 0 /THIS IS A FREE LOCATION JMP I QNEXT ARGARG, JMS I QOPCDE /%FLDA FLDA TAD I ARG2 /POINTER CDF 10 JMS I QOUTNAM JMS I QCRLF JMS I QGENCOD /%SD SD-1 CDF 10 CLL CML RTR /IS IT AN ARRAY ? AND I GCTEMP CDF SNA CLA JMP STRPTR /GO STORE THE POINTER TAD I ARG2 /GET THE LITERAL NUMBER JMS I QGETSS TAD Q3 DCA GCTEMP TAD I GCTEMP DCA OLABEL /SAVE IT CDF JMS I QOPCDE /%FADD LITERAL FADD TAD QLITRL JMS I QOUTSYM TAD OLABEL /XXXX JMS I QONUMBR JMS I QCRLF JMP STRPTR /GO STORE THE POINTER INXR, TAD (270 /MAKE AN ASCII CHAR DCA XR JMS I QOPCDE /XTA XTA TAD XR JMS I QOCHAR /N JMS I QCRLF TAD BASE1 /FIND ADDR OF MAGIC /NUMBER LITERAL JMS I QGETSS CDF TAD Q3 DCA ARG1 JMS I (GENPTR /GENERATE THE POINTER JMP STRPTR /GO STORE THE POINTER EXTARG, TAD I ARG2 /MAKE AN ENTRY IN THE EXT CDF 10 /LITERAL LIST DCA I X17 TAD DOTEMP /USE DO TEMPS FOR THIS DCA I X17 CDF TAD DOTEMP /SINCE OADDR CAN HANDLE THEM DCA I ARG2 ISZ DOTEMP /BUMP COUNT ISZ ELCNT /ALSO EXT LIT COUNT JMP NOTINX /BACK TO PROCESSING ARGS / UTILITY ROUTINES OLABEL, 0 /OUTPUT #GXXXX FOR GEN'D LABELS DCA TEMP TAD (243 JMS I QOCHAR TAD (307 JMS I QOCHAR TAD TEMP JMS I QONUMBR JMP I OLABEL OPCODE, 0 /TAD OPCODE TAB DCA WHATAC /THIS INSTRUCTION ZAPS AC JMS I QOTAB TAD I OPCODE ISZ OPCODE JMS I QOUTSYM JMS I QOTAB JMP I OPCODE M1C2, TEXT '-1,2' GENSTE, 0 /GENERATE STARTE IF IN /F MODE TAD FMODE /LOOK AT THE SWITCH SNA CLA JMP I GENSTE /ALREADY IN E MODE DCA FMODE /CLEAR THE SWITCH JMS I QOPCOD /GENERATE THE STARTE STARTE JMS I QCRLF /CAN'T USE GENCOD FOR THAT JMP I GENSTE D0, TEXT '0' DOTMPN, TEXT '#DOTMP' PAGE / OPCODES AND OTHER TEXT XBASE, TEXT '#BASE' XBASP3, TEXT '#BASE+3' DP3C0, TEXT '.+3,0' JXN, TEXT 'JXN' ALN, TEXT 'ALN' ATX, TEXT 'ATX' XTA, TEXT 'XTA' LDX, TEXT 'LDX' XREW, TEXT '#REW' XENDF, TEXT '#ENDF' XBAK, TEXT '#BAK' XEXIT, TEXT '#EXIT' XRTN, TEXT '#RTN' JNE, TEXT 'JNE' TEXT 'JGE' TEXT 'JLE' TEXT 'JGT' JLT, TEXT 'JLT' /MUST BE IN THIS ORDER!! TEXT 'JEQ' JA, TEXT 'JA' JSR, TEXT 'JSR' JSA, TEXT 'JSA' /MUST BE IN THIS ORDER! TRAP3, TEXT 'TRAP3' / POINTER GENERATOR GENPTR, 0 /GENERATE A POINTER JMS I QOPCOD /MULTIPLY BY 3. OR 6. FMUL TAD TYPE1 /D OR C ? JMS I QSKPIRL /SKIP ON I, R, OR L TAD Q6M3 TAD (THREE DCA TEMP /POINTER TO CORRECT LITERAL JMS I QOADDR TEMP JMS I QGENCOD /ALN 0; STARTD A0SD-1 JMS I QOPCDE /FADD THE BASE LITERAL FADD ISZ BASE1 /GET ADDR OF TYPE WORD CDF 10 TAD I BASE1 /GET TYPE WORD AND Q20 SNA CLA JMP NIARG /NOT AN ARG CMA TAD BASE1 JMS I QOUTNAM /IF AN ARG, THE LITERAL /IS THE ARG JMP OSF NIARG, CDF TAD QLITRL /OTHERWISE ITS IN THE /LITERAL BLOCK JMS I QOUTSYM CDF 10 TAD I ARG1 /LITERAL NUMBER CDF JMS I QONUMBR OSF, JMS I QCRLF JMP I GENPTR / MORE RANDOM CODE GENERATORS STOP, JMS I QGENCOD /CALL EXIT STPCOD-1 JMP I QNEXT FORMAT, JMS I QINWORD /NUMBER OF WORDS OF TEXT CMA DCA TEMP JMS I QOPCDE /JA AROUND THE STUFF JA TAD Q256 JMS I QOCHAR /. TAD PLUS JMS I QOCHAR CLL CMA RAL /.+2+NWORDS TAD TEMP CMA JMP .+3 FMTLUP, JMS I QOTAB /TA JMS I QINWORD /GET NEXT WORD JMS I QONUMBR /OUTPUT IT JMS I QCRLF ISZ TEMP JMP FMTLUP JMP I QNEXT DFRTTM, 0 /ROUTINE TO DELETE "SYS:FORTRN.TM" CLA IAC CIF 10 JMS I Q200 4 FTRNTM 0 NOP JMP I DFRTTM EQUDOT, TEXT '=.' XPAUSE, TEXT '#PAUSE' PAGE /REWIND, ENDFILE, BACKSPACE REWIND, TAD (XREW-XENDF ENDFIL, TAD (XENDF-XBAK BAKSPC, TAD (XBAK DCA REBSUB JMS I QUCODE AIFTBL-1 /GET UNIT INTO FAC JMS I QGENSF /FORCE F MODE CLA STL RTL JMS I (OJSR REBSUB, 0 JMP I QNEXT / DATA STATEMENT STUFF DATAST, TAD X16 /SAVE STACK DCA DSTACK TAD DATASW /MULTIPLE DATA STMT ? SZA CLA JMP FIXDAT-2 /YES, DON'T OUTPUT LABEL ISZ DATASW /SET DATA SWITCH JMS I QOTAB /DEFINE ORIGIN SYMBOL TAD GLABEL JMS I QOLABEL TAD (EQUDOT /#GXXXX=. JMS I QOUTSYM JMS I QCRLF CLA CMA /SET VAR TO NONE LEFT DCA NUMELM FIXDAT, TAD QXRBUFR /USE XR BUFFER FOR DATA BUFFER DCA DATPTR CMA DCA RCOUNT /SET REPETITION COUNT TO 1 JMP I QNEXT DREPTC, JMS I QINWORD /GET REPETITION COUNT CIA DCA RCOUNT JMP I QNEXT DATELM, JMS I QINWORD /GET SIZE OF ELEMENT CIA DCA TEMP JMS I QINWORD /GET ELEMENT DCA I DATPTR ISZ DATPTR /INTO DATA BUFFER ISZ TEMP JMP .-4 JMP I QNEXT ENDELM, TAD QXRBUFR /SETUP POINTER DCA TEMP MORELM, ISZ NUMELM /ANY MORE FOR THIS VAR? JMP SAMVAR /YES TAD DSTACK /CHECK FOR MISMATCH CIA TAD X16 SNA CLA JMP DLERR /OOOPS ISZ DSTACK /GET TO NEXT VAR JMS I QOPCDE /%ORG VAR ORG TAD I DSTACK /GET VAR DCA TEMP2 TAD TEMP2 ISZ DSTACK /MOVE TO THE DISPLACEMENT CDF 10 /OUTPUT VAR JMS I QOUTNAM CMA DCA NUMELM /ASSUME UNDIMENSIONED CDF 10 ISZ TEMP2 /MOVE TO TYPE WORD TAD I TEMP2 /GET TYPE JMS I QSKPIRL /SKIP ON I R L CLL CMA RTL /YES TAD (-3 DCA ELMSIZ /NUMBER OF WORDS PER ELEMENT CLL CML RTR AND I TEMP2 CDF SNA CLA JMP GOTSIZ /NOT DIMENSIONED CLA IAC /IF DISP = 7777 , WHOLE ARRAY TAD I DSTACK /LOOK AT DISPLACEMENT SZA CLA JMP GOTSIZ+1 /ONLY ONE ELEMENT OF THE ARRAY CMA TAD TEMP2 /GET TOTAL SIZE JMS I QGETSS IAC DCA TEMP2 TAD I TEMP2 CIA /THIS IS THE NUMBER OF ELEMENTS DCA NUMELM CDF GOTSIZ, DCA I DSTACK /ZERO DISPLACEMENT TAD PLUS /OUTPUT +XXXX JMS I QOCHAR TAD ELMSIZ /MULTIPLY DISP BY 3 OR 6 CIA DCA MQ TAD I DSTACK /GET DISP JMS I QMUL12 JMS I QNUMBRO /OUTPUT THE ORG ALTERATION JMS I QCRLF ISZ DSTACK /MOVE TO NEXT ENTRY SAMVAR, TAD ELMSIZ /GET SET TO PICK UP AN ELEMENT DCA NARGS JMS I QOTAB JMP .+3 /SKIP ; FIRST TIME ELMLUP, TAD (273 /SEMICOLON JMS I QOCHAR TAD I TEMP /GET A WORD FROM THE BUFFER ISZ TEMP JMS I QONUMBR ISZ NARGS /ONE DATA LIST ELEMENT MUST FILL JMP ELMLUP /ONE VARIABLE LIST ELEMENT JMS I QCRLF /I.E. ONE ARRAY ELEMENT TAD DATPTR /IS THIS DATA ELEMENT EXHAUSTED? CIA CLL TAD TEMP SNL CLA JMP MORELM /MORE LEFT ISZ RCOUNT /REPEAT ? JMP ENDELM /YES JMP FIXDAT /NO, BACK FOR MORE DATA DLERR, JMS I QTTYMSG /DATA LIST ERROR 0414 ELMSIZ=ARG1 NUMELM=TYPE1 DSTACK=BASE1 DATPTR=ARG2 RCOUNT=TYPE2 PAGE / END STATEMENT PROCESSING END, TAD FUNCTN /WHAT WAS IT ? SZA CLA JMP .+3 /SUBR, RETURN TAD (STPCOD-1 /MAIN PROG, CALL EXIT DCA .+2 JMS I QGENCOD RTNCOD-1 TAD DOTEMP /ANY DO TEMPS ? TAD M7000 SPA SNA JMP .+3 /NO JMS OTMPS /OUTPUT THEM XDOTMP, DOTMPN CLA TAD TMPMAX /ANY EXTRA TEMPS ? TAD (-TMPBLK SPA SNA JMP .+4 IAC /OUTPUT THEM + 1 JMS OTMPS TEMPN2 CLA TAD ELCNT /ANY EXTERNAL LITERALS? SNA JMP END2 /NO CIA DCA ELCNT TAD EXTLIT /PICK UP THE POINTER DCA X17 ELLOOP, CDF 10 TAD I X17 /GET SYMBOL NAME DCA TEMP TAD I X17 /AND DO TEMP NUMBER CDF TAD (-7000 /MINUS BASE DCA TEMP2 JMS I QOPCDE /ORIGIN ORG TAD XDOTMP /OUTPUT #DOTMP JMS I QOUTSYM TAD PLUS /+ JMS I QOCHAR TAD TEMP2 /DISP CLL CML RAL /*2+1 TAD TEMP2 /*3+1 JMS I QONUMBR JMS I QCRLF JMS I QOPCDE /NOW OUTPUT JSR NAME JSR TAD TEMP CDF 10 JMS I QOUTNAM JMS I QCRLF ISZ ELCNT JMP ELLOOP END2, TAD (232 /^Z JMS I QOCHAR JMS I (OUDUMP /DUMP BUFFER CIF 10 JMS I (7700 /GET USR 10 CIF 10 CLA IAC JMS I Q200 /CLOSE OUTPUT FILE 4 F1LNAM FILSIZ, 0 JMP OUERR /BADDDDIE TAD FILSIZ /FIX INPUT LIST CLL RTL RTL JMP FINAL ERMSG, 0 /PRINT ERROR MESSAGE ON THE TTY DCA TEMP /SAVE THE CODE TAD QM4 /BACK UP THE ERROR TAD ERRPTR /POINTER DCA X10 CDF 10 DCA I X10 /ZERO END OF LIST TAD TEMP /NOW STICK IN THE CODE DCA I X10 TAD X10 /SAVE THE NEW POINTER DCA ERRPTR TAD LINENO /NOW THE LINE NUMBER DCA I X10 CDF TAD TEMP /PRINT ERROR CODE JMS I QTTYP2C JMS I QTTYP2C /NOW SOME SPACES TAD QTTYOUT /FUDGE THE OUTPUT /ROUTINE POINTER DCA QOCHAR /SO THAT ONUMBR GOES TO /THE TTY TAD LINENO /PRINT THE LINE NUMBER JMS I QONUMBR TAD (OCHAR /FIXUP OUTPUT POINTER DCA QOCHAR JMS I QTTCRLF JMS I QGENCOD /TRAP IF ERROR EXECUTED ERCODE-1 JMP I ERMSG M7000, OTMPS, -7000 /OUTPUT TEMP BLOCK DCA TEMP /SAVE SIZE TAD I OTMPS ISZ OTMPS JMS I QOUTSYM /OUTPUT NAME TAD COMMA JMS I QOCHAR JMS I QOPCDE /ORG ORG TAD Q256 /. JMS I QOCHAR TAD PLUS JMS I QOCHAR TAD TEMP CLL RAL TAD TEMP /SIZE TIMES THREE JMS I QONUMBR JMS I QCRLF JMP I OTMPS PAGE / CHAIN TO RALF / PASS2O VERSION 4A PT 16-MAY-77 /CHANGES FOR OS/8 V3D AND OS/78 BY P.T. /FIXED THE Q OPTION /PATCH LEVEL IS IN LOCATION 26131 IFZERO OVERLY < /ANOTHER SCORE FOR PAL8 *OVRLAY NOPUNCH> IFNZRO OVERLY < /TO TAKE THE LEAD FIELD 2 ENPUNCH *OVRLAY> /LATE IN THE FINAL QUARTER GORALF, TAD FILDEV /GET SIZE AND DEVICE WORD DCA I (7617 /PUT IT AWAY ISZ (7617 /BUMP POINTER TAD FILBLK /GET ORIGIN OF FIE DCA I (7617 /STORE IT ISZ (7617 DCA I (7617 /ZERO END OF LIST TAD I RALFSV CDF 0 SPA CLA /WAS /A SPECIFIED? JMP I (7605 /YES - GET OUT CLA IAC CHNLKP, CIF 10 JMS I Q200 2 /LOOKUP RALF.SV RALFNM RALFSV, 7643 JMP I (7605 TAD (6 /** DCA CHNLKP+2 JMP CHNLKP RALFNM, 2201;1406;0000;2326 /RALF.SV PASS3N, 2001;2323;6300;2326 /PASS3.SV ADD, JMS I QCODE /GENERATE CODE FOR ADD ADDTBL-6;0 JMP I QNEXT / EXP OPERATOR ETYPE, 0 EXP, JMS I QSAVACT /SAVE AC IF ITS SECOND ARG JMS I QGARGS /GET THE TWO ARGS JMP I (OTERR /TYPE/OPERATOR ERROR TAD TYPE1 /GET PLACE IN TABLE CLL RTL TAD TYPE1 /TYPE1 TIMES TEN TAD TYPE2 /** CLL RAL TAD (EXPTBL-15 /POINTER TO ENTRY MINUS ONE DCA X10 CDF 10 TAD I X10 /GET RESULTING TYPE SNA JMP I (OTERR /BAD IF THIS WORD IS ZERO DCA ETYPE /SAVE THE TYPE TAD I X10 /GET THE SUBR NAME CDF DCA I (ESUBR+2 /PUT IT INTO ITS PLACE TAD TYPE1 /GET INTO CORRECT MODE JMS SETMOD TAD ARG1 /IS ARG 1 ALREADY IN THE AC SNA CLA JMP .+5 /YES, SKIP THE LOAD JMS I QOPCOD /OTHERWISE LOAD IT FLDA JMS I QOADDR ARG1 JMS I QOINS /FSTA #BASE FSTA;XBASE TAD TYPE2 /SET MODE FOR ARG 2 JMS SETMOD JMS I QOPCOD /NOW LOAD IT FLDA JMS I QOADDR ARG2 JMS I QOINS /EXTERN FOR THE SUBR EXTERN;ESUBR JMS I QOINS /JSA TO THE SUBR JSA;ESUBR DCA I X16 /RESULT IS THE AC TAD ETYPE /WITH THIS AS THE TYPE DCA I X16 DCA I X16 TAD ETYPE /SET FMODE CORRECTLY JMS I QSKPIRL SKP CLA IAC /RETURNED IN F MODE DCA FMODE JMP I QNEXT SETMOD, /SET MODE TO CORRESPOND /TO THE ARG VOVER, VERSON /VERSION NUMBER FOR OVERLAY JMS I QSKPIRL /SKIP IF WE WANT F MODE JMP .+3 /SET TO E MODE JMS I QGENSF /SET TO F MODE JMP I SETMOD JMS I QGENSE JMP I SETMOD FINAL, CIA IAC DCA FILDEV /SAVE RALF INPUT SPEC CMA DCA I X7746 /DON'T SAVE CORE ARROUND CHAIN JMS I (DFRTTM /DELETE FORTRN.TM CDF 10 TAD I Q7605 /IS THERE A LISTING FILE? SNA CLA JMP GORALF /NO, JUST CHAIN TO RALF CIF 10 CDF CLA IAC JMS I Q200 /FIND PASS 3 2 PASS3N PAS3SV, 0 JMP I Q7605 TAD PAS3SV-1 /MOVE BLOCK TO CHAIN COMMAND IAC /SKIP OVER CORE CONTROL BLOCK DCA X7746 JMS I DEVH /READ IN PASS 3 NPPAS3 SPASS3, 400 X7746, 7746 JMP I Q7605 JMP I SPASS3 /GO DO PASS 3 PAGE / I/O OPEN AND CLOSE STRTIO, 0 /ROUTINE FOR STARTING IO STMT ISZ IOSTMT /SET IOSTMT SWITCH /(INCASE OF IMPLIED LOOPS) JMS I QSAVEAC /SAVE AC JMS I QSAVACT /IF NECESSARY TAD I STRTIO /GET NUMBER OF ARGS DCA NARGS /SAVE IT ISZ STRTIO /MOVE TOHE NME TAD NARGS /BACKUP STACK BY THIS MUCH TAD NARGS /THREE OR SIX TAD NARGS TAD X16 DCA X15 TAD X15 DCA TEMP /FUNCTION NAME GOES HERE JMS I QOPCDE /EXTERN FOR SUBR EXTERN TAD I STRTIO /GET SUBROUTINE NAME JMS I QOUTSYM /OUTPUT IT JMS I QCRLF TAD I STRTIO /PUT NAME DCA I TEMP /ONTO STACK JMS I QGENSF /ALL CALLS IN F MODE JMS I QGENCAL /GENERATE THE CALL NOP JMP I QNEXT /NOTHING FOR R CLOSE FMTRD1, IAC /START FORMATTED READ DCA INPUT /SET INPUT = 1 DCA BINARY /AND BINARY = 0 JMS STRTIO /GO MAKE THE CALL -2;XREADO FMTWR1, DCA INPUT /SET SWITCHES DCA BINARY JMS STRTIO -2;XWRITO BINRD1, CLA IAC DCA BINARY CLA IAC DCA INPUT JMS STRTIO -1;XRUO BINWR1, DCA INPUT CLA IAC DCA BINARY JMS STRTIO -1;XWUO WCLOSE, CLA STL RTL /TRAP3 HERE TOO** JMS OJSR /OUTPUT TRAP3 #WUC XWUC DCA IOSTMT /KILL IO SWITCH JMP I QNEXT OJSR, 0 /OUTPUT EXTERN THEN JSR OR TRAP3 CLL RAL /AC ON ENTRY IS 0 (JSR), 1 (JSA) OR 2 (TRAP3). TAD (JSR DCA OJSROP JMS I QOPCDE /FIRST EXTERN EXTERN TAD I OJSR JMS I QOUTSYM JMS I QCRLF JMS I QOPCDE /THEN JSR OJSROP, 0 TAD I OJSR ISZ OJSR JMS I QOUTSYM JMS I QCRLF JMP I OJSR XWUC, TEXT '#RENDO' /** XREADO, TEXT '#READO' XWRITO, TEXT '#WRITO' XRUO, TEXT '#RUO' XWUO, TEXT '#WUO' RDRTNE, TEXT /#RSVO/ RDDRTN, TEXT /#RFDV/ FTRNTM, 0617;2224;2216;2415 /FORTRN.TM DNA, JMS I QCODE /AND CODE ANDTBL-6;0 JMP I QNEXT PURGE, JMS I QGARG /LOOK AT THE TOP OF STACK JMP I (IOTYPE /BAD TYPE TAD ARG1 /IT MUST BE A SCALAR REFNCE CLL TAD QM63 SNL CLA JMP I (IOTYPE /BAD TYPE JMP I QNEXT PAUZE, JMS I QUCODE /GET ARG INTO FAC AIFTBL-1 JMS I QGENCOD /OUTPUT JSR PAZCOD-1 JMP I QNEXT PAGE /DIRECT ACCESS I/O DARD1, CLA IAC /SET SWITCHES DCA INPUT CLA IAC DCA BINARY /SAME AS UNFORMATTED JMS I (STRTIO /GENERATE CALL -2;XRDAO DAWR1, DCA INPUT /SAME AS UNFORMATTED WRITE OPEN CLA IAC DCA BINARY JMS I (STRTIO /CALL -2;XWDAO DEFFIL, TAD XDFARG /FAKE A CALL DCA I (STRTIO /TO SKIP THE ISZ IOSTMT JMP I (STRTIO+2 XDFARG, .+1 -4;XDEF XDEF, TEXT '#DEF' XRDAO, TEXT '#RDAO' XWDAO, TEXT '#WDAO' / RANDOM UNFITTING STUFF RETURN, JMS I QGENCOD /JA #RTN RTNCOD-1 JMP I QNEXT GENSTF, 0 /GENERATE STARTF IF IN E MODE TAD FMODE /LOOK AT THE SWITCH SZA CLA JMP I GENSTF /ALREADY THERE ISZ FMODE /SET SWITCH JMS I QOPCOD /OUTPUT STARTF STARTF JMS I QCRLF JMP I GENSTF /RETURN NOT, JMS I QUCODE /.NOT. NOTTBL-1 JMP I (RELGM1 SUB, JMS I QCODE /SUBTRACT SUBTBL-6;0 JMP I QNEXT MUL, JMS I QCODE /MULTIPLY MULTBL-6;0 JMP I QNEXT ASFDEF, CLA IAC /SET SWITCH FOR ASF PROLOG DCA ASFSWT JMP I QNEXT OINS, 0 /OUTPUT TAB OPCODE TAB /ADDRESS CRLF DCA WHATAC /ZAPS AC JMS I QOTAB TAD I OINS /GET OPCODE ISZ OINS JMS I QOUTSYM JMS I QOTAB TAD I OINS /GET ADDRESS SZA JMS I QOUTSYM JMS I QCRLF /END LINE ISZ OINS JMP I OINS / CODE GENERATOR FOR STORE STORE, JMS I QGARGS /GET ARGS FOR STORE JMP I (OTERR TAD ARG1 /KILL ANY XR /EXPRS. INVOLVING JMS I QCHKXR /THE VARIABLE BEING STORED TAD ARG2 /IS SECOND ARG IN AC ? SNA CLA TAD Q5 /YES, ADD 5 TO TYPE2 TAD TYPE2 DCA TYPE2 TAD TYPE1 /TYPE1 TIMES TEN CLL RTL TAD TYPE1 CLL RAL TAD TYPE2 /PLUS TYPE2 TAD (STRTBL-13 /PLUS TABLE BASE DCA SSKEL /GIVES ENTRY ADDRESS CDF 10 TAD I SSKEL /POINTER TO SKELETON DCA SSKEL JMS I QGENCOD /GENERATE CODE SSKEL, 0 TAD ASFSWT /IS THIS END OF ASF ? SZA CLA JMP I QNEXT /YES, DON'T DO A STORE TAD TYPE1 /MODE IS THE SAME JMS I QSKPIRL /AS THE VARIABLE STORED IN SKP CLA IAC DCA FMODE JMS I QOPCOD /OUTPUT STORE FSTA JMS I QOADDR /ADDRESS FIELD ARG1 TAD ARG1 /REMEMBER THE AC CIA DCA WHATAC /(REMEMBER THE TAD BASE1 /ALAMO ?) CIA /(WOULD YOU DCA WHATBS /BELIEVE THE MAINE ???) ISZ ARG1 /GO TO TYPE WORD CDF 10 CLL /IF ARG1 IS TAD ARG1 /A SS'D REFNCE TAD QM63 /DON'T SZL CLA /BOTHER CHECKING TAD I ARG1 /LOOK AT SOME BITS CDF AND (3400 /DIM,EXT, OR ASF ? SNA CLA JMP I QNEXT JMS I QTTYMSG /ATTEMPT TO STORE IN 1720 /EXTERNAL OR ASF FLDAP, TEXT 'FLDA%' PAGE /ARITHEMTIC STATEMENT FUNCTIONS (BLAH!) DEFASF, CDF /A.S.F. PROLOG TAD FMODE /SAVE CPU MODE DCA ASFMOD /SINCE WE JUMP ARROUND TAD X14 /SET STACK POINTER TAD (3 /SO THAT ASF NAME STAYS DCA X16 CLA CMA /SET ASF SWITCH DCA ASFSWT TAD TMPMAX /USE UNIQUE TEMPS IAC DCA TMPCNT /FOR ALL ASF'S JMS I QXRTBL /AND FORGET XR'S JMS I QOPCDE /JA AROUND JA TAD GLABEL /SAVE ARROUND LABEL DCA ASFSKP ISZ GLABEL /BUMP LABEL GENERATOR TAD ASFSKP /PUT LABEL AS ADDRESS OF JA JMS I QOLABEL JMS I QCRLF TAD GLABEL /FUNCTIONS XR'S O HERE JMS I QLABEL /OUPTUT THE LABEL JMS I QOINS /#GXXXX, ORG .+10 ORG;DP8 TAD BASE1 /NOW OUTPUT FUNCTION NAME CDF 10 JMS I QOUTNAM TAD COMMA /AS TAG JMS I QOCHAR /OF START OF FUNCTION JMS I QOPCDE /SETX XSET TAD GLABEL /TO THE GENERATED LABEL ISZ GLABEL JMS I QOLABEL JMS I QCRLF JMS I QOINS /LDX 0,1 LDX;ZEROC1 JMS I QGENCOD /STARTD SD-1 /JUST LIKE A SUBROUTINE /ISN'T IT ? JMS I QOINS /FLDA #BASE FLDA;XBASE /GET RETURN JUMP JMS I QOPCDE /STORE IT AHEAD FSTA TAD GLABEL /USING GENERATED LABEL JMS I QOLABEL JMS I QCRLF ASFARG, JMS I QOINS /FLDA% #BASE,1+ FLDAP;XBAC1P /GET ARG POINTER JMS I QOINS /FSTA #BASE+3 FSTA;XBASP3 /SAVE IT TAD I X15 /GET PARAMETER DCA ARG2 TAD I X15 DCA TYPE2 ISZ X15 TAD TYPE2 /IS IT SINGLE OR DOUBLE? JMS I QSKPIRL JMP ASFASE /DOUBLE JMS I QGENCOD /STARTF SF-1 CLA IAC ARGSV, DCA FMODE /SET FMODE APPROPRIATELY JMS I QOINS /FLDA% #BASE+3 FLDAP;XBASP3 /GET THE VALUE JMS I QOPCOD FSTA /AND SAVE IT JMS I QOADDR ARG2 ISZ NARGS /ANY MORE ARGS ? SKP JMP I QNEXT /NO, END OF ASF PROLOG JMS I QGENCOD /STARTD SD-1 JMP ASFARG /NEXT ARG ASFASE, JMS I QGENCOD /STARTE SE-1 JMP ARGSV ASFEND, 0 /HANDLE END OF A.S.F. TAD ASFSWT /IS THIS END OF ASF ? SNA CLA JMP PTCH /V3C NO DCA ASFSWT /CLEAR SWITCH JMS I QOINS /RESET XR'S XSET;ZXR TAD GLABEL /OUTPUT SPACE FOR RETURN ADDR ISZ GLABEL JMS I QLABEL /OUPTUT THE LABEL JMS I QOINS /ORG .+2 ORG;DOTP2 TAD ASFSKP /OUTPUT SKIP ARROUND LABEL JMS I QLABEL /OUPTUT THE LABEL JMS I QCRLF TAD ASFMOD /RESET MODE SWITCH DCA FMODE TAD TMPMAX /UNIQUE TEMPS IAC DCA TEM /V3C MUST BE USED JMS I QXRTBL /AND XR'S LOST PTCH, TAD TEM /V3C DCA TMPCNT /V3C JMP I ASFEND /RETURN ASFMOD, 0 ASFSKP, 0 IOFUN, JMS I QOPCDE /CALLED BY TRAP3,NOT JSR** TRAP3 TAD I TEMP JMS I QOUTSYM /OUTPUT THE IO FUNCTION NAME JMP I (IOONLY /DO SOME OTHER STUFF ESUBR, TEXT '#EXPXX' /THIS WILL BE THE CORRECT NAME PAGE / I/O LIST ELEMENT IOLMNT, JMS I QGARG /GET THE ARG JMP IOTYPE /TYPE ERROR DCA IOLOOP /CLEAR LOOP SWITCH CLL STA RTL /-3 TAD TYPE1 DCA TYPE1 /TYPE1 = 0 IF COMPLEX, 1 IF D.P. TAD ARG1 /ADDR OF TYPE WD CLL IAC DCA ARG2 TAD ARG1 /LOOK AT ARG TAD QM63 SNL CLA JMP NOLOOP /NOT ARRAY OUTPUT CDF 10 CLL CML RTR /IS IT DIMENSIONED ? AND I ARG2 CDF SNA CLA JMP NOLOOP /NO, NO LOOP ISZ IOLOOP /SET SWITCH TAD ARG1 /GET TO SS JMS I QGETSS IAC /TOTAL SIZE WORD DCA BASE1 TAD I ARG2 /IS THIS ARRAY AN ARG ? AND Q20 DCA ARGIO /SET SWITCH TAD I BASE1 /IS IT VARIABLY DIMENSIONED ? SNA JMP I (VDAIO /YES, MUST COMPUTE SIZE DCA BASE2 /SAVE SIZE CDF JMS I QOPCDE /PUT SIZE IN XR 1 LDX TAD Q255 JMS I QOCHAR /- TAD BASE2 JMS I QONUMBR TAD COMMA JMS I QOCHAR TAD (261 JMS I QOCHAR JMS I QCRLF TAD ARGIO /IS IT AN ARG ? SZA CLA JMP I (ARGIOA /YES OLLABL, TAD GLABEL /OUTPUT LABEL JMS I QOLABEL DCA I (XRBUFR+20 /KILL XR1 ENTRY TAD COMMA JMS I QOCHAR NOLOOP, TAD INPUT /INPUT OR OUTPUT ? SNA CLA JMP OUTV /OUTPUT JMS FIXCAL /SET PTR FOR OJSR** JMS I (DUMSUB /NOW THE STORE FSTA TAD ARG1 /KILL ASSOCIATED JMS I QCHKXR /XR EXPRESSIONS CDSFLP, TAD TYPE1 /IS IT C OR D ? CLL RAR SZA CLA JMP ENDLUP /NO, NO STARTE JMS I QGENCOD SF-1 ENDLUP, TAD IOLOOP /IS THERE A LOOP ? SNA CLA JMP I QNEXT /NO, DO NEXT LIST ELEMENT JMS I QOPCDE /YES, OUTPUT JXN JXN TAD GLABEL ISZ GLABEL /OUTPUT LABEL JMS I QLABEL /OUPTUT THE LABEL TAD (261 JMS I QOCHAR TAD PLUS /OUTPUT PLUS (FOR /INCREMENT DUMMY) JMS I QOCHAR JMS I QCRLF JMP I QNEXT /DO NEXT LIST ELEMENT OUTV, TAD TYPE1 /D OR C ? CLL RAR SZA CLA JMP .+3 /NO, NO STARTF NECCESSARY JMS I QGENCOD SE-1 JMS I (DUMSUB /OUTPUT FLDA FLDA JMS FIXCAL JMP CDSFLP /THEN STARTF AND JXN IF ANY FIXCAL, 6401 TAD TYPE1 /IF VARIABLE IS COMPLEX, CIA /OR IF VARIABLE IS DOUBLE AND SZA /I/O IS BINARY, TAD BINARY /GENERATE A JSR #RFDV SNA CLA /ELSE GENERATE A TRAP3 #RSVO JMP BINDIO CLA STL RTL /SET PTR JMS I (OJSR /NOW GO DO IT RDRTNE /HERE'S THE NAME JMP I FIXCAL BINDIO, JMS I (OJSR RDDRTN JMP I FIXCAL IOTYPE, JMS I QTTYMSG /IO TYPE ERROR 1124 DEFLBL, JMS I QCRLF /CRLF BEFORE LABL JMS I QGENSF /ENTER F MODE BEFORE ALL LABELS JMS I QINWORD /GET THE LABEL CDF 10 JMS I QOSNUM /OUTPUT IT TAD COMMA JMS I QOCHAR JMS I QXRTBL /KILL XR TABLE DCA WHATAC /AND AC AT LABEL JMP I QNEXT PAGE / I/O LIST ELEMENT VDAIO, CLL CMA RAL /GET ADDR OF NUMBER OF DIMS TAD BASE1 DCA X10 TAD I X10 /GET DIM COUNT CIA DCA NARGS ISZ X10 /SKIP SIZE ISZ X10 /AND MAGIC NUMBER ISZ X10 /AND LITERAL NUMBER TAD (FLDA /LOAD FIRST DIM SKP GSIZLP, TAD (FMUL /MULTIPLY THE REST DCA OPCIO CDF 10 TAD I X10 /GET THE NEXT DIMENSION DCA TYPE2 CDF JMS I QOPCOD /OUTPUT OPCODE OPCIO, 0 JMS I QOADDR /NOW THE DIMENSION TYPE2 ISZ NARGS JMP GSIZLP /KEEP GOING JMS I QOPCOD /NEGATE THE FAC FNEG JMS I QCRLF JMS I QGENCOD /PUT THE COUNT INTO XR1 ATX1-1 ARGIOA, JMS I QGENCOD /PUT -1 INTO XR 2 LXM1C2-1 JMS I QOPCDE /LOAD THE ARG POINTER - FLDA /CONST DCA I (XRBUFR+40 /KILL XR 2 ENTRY TAD ARG1 CDF 10 JMS I QOUTNAM JMS I QCRLF JMS I QOPCDE /NOW ADD THE MAGIC NUMBER FADD TAD QLITRL /OUTPUT #LIT+XXXX JMS I QOUTSYM CDF 10 ISZ BASE1 ISZ BASE1 TAD I BASE1 CDF JMS I QONUMBR JMS I QCRLF JMS I QOPCDE FSTA /NOW STORE IN #BASE+3 TAD (XBASP3 JMS I QOUTSYM JMS I QCRLF JMS I QGENCOD /STARTF SF-1 JMP I (OLLABL /NOW THE INSIDE OF THE LOOP DUMSUB, 0 /OUTPUT FLDA OR FSTA /WITH SE IF NEEDED TAD I DUMSUB /GET THE OPCODE DCA LDASTA ISZ DUMSUB TAD TYPE1 /MUST WE SE ? CLL RAR /TYPE1 IS 0 IF C, 1 IF D SNA CLA TAD Q3 /MULTIPLIER IS 6 TAD Q3 /OR 3 DCA MQ JMS I QOPCOD /FLDA OR FSTA LDASTA, 0 TAD IOLOOP /IS IT A LOOP ? SNA CLA JMP EZVAR /NO TAD ARGIO /IS IT AN ARG ? SZA CLA JMP IBASP3 /YES, INDIRECT THROUGH #BASE+3 JMS I QOTAB TAD ARG1 CDF 10 /OUTPUT NAME JMS I QOUTNAM TAD (255 /- JMS I QOCHAR TAD BASE2 /NEGATIVE OF SIZE CIA JMS I QMUL12 /TIMES 6 OR 3 JMS I QNUMBRO TAD COMMA /COMMA SEVEN JMS I QOCHAR TAD (261 JMS I QOCHAR JMS I QCRLF JMP I DUMSUB /RETURN EZVAR, JMS I QOADDR /ITS A SCALAR ARG1 JMP I DUMSUB IBASP3, TAD (245 /INDIRECT THROUGH #BASE+3 JMS I QOCHAR JMS I QOTAB TAD (XBPC2P /FLDA% #BASE+3,2+ JMS I QOUTSYM JMS I QCRLF JMP I DUMSUB XBPC2P, TEXT '#BASE+3,2+' OR, JMS I QCODE ORTABL-6;0 JMP I (RELGEN XOR, JMS I QCODE EQVTBL-6;0 JMP I (RELGEN DOTP2, TEXT '.+2' ZXR, TEXT '#XR' PAGE / ASSIGNED GOTO AND ASSIGN AGOTO, JMS GTSTUF /LOOK AT THE ASSIGNED VAR JMS I QGENCOD /GENERATE A JAC AGTCOD-1 JMP I QNEXT ASSIGN, JMS I QGARG /GET THE ASSIGN VAR JMP GTTYPE CLL CMA RTL /MUST BE I OR R TAD TYPE1 SMA CLA JMP GTTYPE /GOTO TYPE ERROR JMS I QGENCOD /GENERATE THE ASSIGN CODE ASNCOD-1 JMS I (JAGEN JMS I QGENCOD /NOW STORE IT ASTOR-1 JMP I QNEXT / OPTIMIZER SUBROUTINES CHEKXR, 0 /KILL XR EXPRS CIA /ASSOCIATED WITH THIS VAR DCA KILVAR /SINCE IT HAS /JUST BEEN CHANGED TAD (-7 /LOOK AT XR 1 THRU 7 DCA TEMP /COUNT TAD (XRBUFR+20 /POINTER DCA TEMP2 KILLUP, TAD I TEMP2 /GET NEXT XR /EXPR. INDICATOR SNA CLA JMP EOKL /NOTHING HERE TAD TEMP2 /GET POINTER DCA X13 /INTO AN XR TAD I X13 /GET ADDR OF DIB DCA DIMPTR /SAVE IT CDF 10 /FIELD OF SYMBOL TABLE TAD I DIMPTR /GET NUMBER OF /DIMENSIONS CMA /COMPLIMENTED DCA NARGS /SAVE IT CDF /BACK TO FIELD OF XRBUFR CHKKIL, ISZ NARGS /CHECK 1 LESS /THAN THE NUMBER SKP /OF DIMENSIONS JMP EOKL TAD I X13 /LOOK AT NEXT /ELEMENT OF EXPR TAD KILVAR /IS IT THE VAR /JUST CHANGED ? SNA CLA DCA I TEMP2 /YES, KILL THIS EXPRESSION JMP CHKKIL /LOOP EOKL, TAD TEMP2 /DO NEXT XR TAD Q20 DCA TEMP2 /BUMP POINTER BY 16 ISZ TEMP JMP KILLUP JMP I CHEKXR /RETURN KILVAR, XRTABL, 0 /CLEAR OR RESET /XR TABLE FLAGS DCA TYPE /0=CLEAR 1=RESET TAD (-7 /DO XR1 THRU 7 DCA TEMP /COUNT TAD (XRBUFR+20 /POINTER DCA TEMP2 XRTLUP, TAD I TEMP2 /GET INDICATOR SNA CLA JMP .+3 /DON'T CHANGE IF ZERO TAD TYPE /OTHERWISE SET TO DCA I TEMP2 /'USED BY /PREVIOUS STMT' TAD TEMP2 /GET TO NEXT ONE TAD Q20 DCA TEMP2 /BUMPING BY 16 ISZ TEMP JMP XRTLUP /LOOP JMP I XRTABL /DONE LOADA, 0 /GENERATE AN FLDA TAD I LOADA /IF NECESSARY DCA LODARG /GET ARG POINTER ISZ LOADA /BUMP RETURN TAD I LODARG /DOES AC MATCH ? TAD WHATAC SZA CLA JMP DOLOAD /NO, MUST LOAD TAD LODARG /GET ADDRESS IAC /OF BASE DCA ARG /IN CASE SS'D TAD I ARG /DOES BASE MATCH? TAD WHATBS SNA CLA JMP I LOADA /OK, DON'T LOAD DOLOAD, JMS I QOPCOD /GENERATE FLDA FLDA JMS I QOADDR /ADDRESS LODARG, 0 JMP I LOADA PAGE / INTER PASS EQUATES BLNKCN=21 ALIST=23 INTLST=60 FPLIST=56 DPLIST=57 CMPLST=61 HOLIST=55 SNLIST=62 ONEI=63 THREE=70 SIX=75 TRUE=102 / START PASS 2 (INTER PASS COMMUNICATION) IFNZRO OVERLY < FIELD 0 NOPUNCH *OVRLAY> IFZERO OVERLY < FIELD 0 ENPUNCH *OVRLAY> START2, JMP I Q7605 /RETURN BUT DON'T SAVE CORE TAD I X10 /PICK UP NEXT FROM PASS 1 DCA X17 TAD X17 /SAVE POINTER TO /EXTERNAL LITERALS DCA EXTLIT TAD I X10 /PASS ONE STACK LEVEL DCA X11 TAD I X10 /TEMP FILE START DCA INBLOK TAD I X10 /AND SIZE CMA DCA INRCNT TAD I X10 /START OF PASS2O.SV DCA PASS2O TAD I X10 /START OF OUTPUT FILE DCA FILBLK /SAVE IT FOR CHAINING TO RALF TAD FILBLK DCA OBLOCK TAD I X10 DCA OSIZE /ALSO MAX SIZE TAD I X10 /PICK UP PROG NAME DCA PROGNM TAD I X10 DCA ARGLST /AND ARG LIST ADDR TAD I X10 /AND /FUNCTION/SUBROUTINE/MAIN SWITCH DCA FUNCTN TAD I X10 /GET DP HARDWARE SWITCH DCA DPUSED TAD I X10 /CHECK FOR CROSSED VERSIONS TAD VERS SZA CLA JMP VERROR /VERSION ERROR STA STL /V3C DCLOOP, TAD X11 /V3C THIS ADD CLEARS THE LINK DCA X11 /V3C TAD X11 TAD (-STACK1 SNL CLA JMP PSN /GO DO STMT NUMBERS TAD I X11 /GET DO LOOP ENDING STMT NUMBER IAC DCA X10 CDF 10 TAD (0416 /DN DO END MISSING JMS NPRNT /GO PRINT THE MESSAGE /AND THE NUMBER CDF CLL CMA RTL JMP DCLOOP /V3C BACK UP 2 PSN, TAD (SNLIST /PROCESS STMT NUMBERS CDF 10 SNCLUP, DCA ENTRY /SAVE NEW ENTRY ADDR TAD I ENTRY /GET ADDR OF NEXT ENTRY SNA JMP SNDONE /NO MORE STMT NUMBERS IAC DCA TEMP /ADDR OF TYPE WORD TAD I TEMP /WAS STMT NUMBER DEFINED? SPA CLA JMP SNDEFN /YES TAD TEMP DCA X10 TAD (2523 /PRINT US MESSAGE JMS NPRNT SNDEFN, TAD (0110 /SET TYPE WORD DCA I TEMP TAD I ENTRY /PROCEED JMP SNCLUP SNDONE, CDF FIXELP, JMS I (TYPRTN NEGSLV /FIX UP NEGATIVE EQUIVALENCE OFFSETS CLL CML RTL /CHECK FOR BLOCK DATA TAD FUNCTN /(FUNCTN=-2) SNA CLA JMP BDSTUF /IT IS JMS I (TYPRTN /DO IMPLICIT TYPING IMPLCT JMS I (TYPRTN /REMOVE SUB ARGS FROM LIST SUBARG JMS I (TYPRTN /EXTERNALS EXTRNL JMP I (PROLG1 /MORE PROLOG BDSTUF, TAD I (BDSWIT /SET UP SWITCH DCA I (PROLG2 TAD (END2 /ALTER END CODE CDF 10 DCA I (XEND CDF 0 DCA NODBUG /NO ISN'S JMP I (HOLDUN /DO SOME STUFF SUBARG, 0 /REMOVE ARGS FROM ST TAD I TYPE AND Q20 /CHECK ARG BIT SNA CLA JMP I SUBARG JMS UNHOOK JMP TFUDGE UNHOOK, 0 TAD I ENTRY DCA I OENTRY TAD BUCKET DCA I ENTRY JMP I UNHOOK VERROR, TAD (2605 /PRINT VE (VERSION ERROR) JMS I QTTYP2C JMS I QTTCRLF JMP I Q7605 PAGE / GENERATE ARGUMENT STORAGE PROLG1, JMS I (INS2 / %JA #ST JA;XST JMS I (INS /#XR, %ORG .+10 XXR;ORG;DP8 JMS I QOPCDE / %TEXT #NAMEXX# TEXTX TAD PLUS JMS I QOCHAR CDF 10 TAD PROGNM JMS I QOUTNAM JMS I (FILL /FILL WITH BLANKS TAD PLUS JMS I QOCHAR ISZ PROGNM JMS I QCRLF JMS I (INS /#RET, %SETX #XR XRET;SETX;XXR JMS I (INS2 / %SETB #BASE SETB;XBASE JMS I (INS2 / %JA .+3 JA XDP3, DP3 JMS I (INS /#BASE, %ORG .+6 XBASE;ORG;DP6 TAD ARGLST /ANY ARGS ? SNA JMP NOARGS /NO, SKIP THIS STUFF DCA X10 /SAVE POINTER TO ARG LIST CDF 10 /HOW MANY ? TAD I ARGLST CIA DCA NARGS /THIS MANY DCA TEMP2 /ARRAY ARG COUNTER ARGLP1, JMS PLSUB1 /OUTPUT DEFS FOR ARRAY /ARGS FIRST SNA CLA /SINCE THEY MUST BE /INDIRECTABLY JMP NOARAY /REFERENCABLE ISZ TEMP2 NOARAY, ISZ NARGS JMP ARGLP1 /PROCESS ENTIRE ARG LIST CDF 10 TAD I ARGLST /GO THRU ARGS AGAIN CIA CLL DCA NARGS TAD ARGLST DCA X10 TAD TEMP2 /HOW MANY ARRAY ARGS ? TAD QM6 SNA JMP NISA /NO INDIRECT LOCS LEFT /FOR SCALARS DCA TEMP2 SZL CLA JMP TOOMNY /TOO MANY ARRAY ARGS (>6) ARGLP2, JMS PLSUB1 /NOW OUTPUT AS MANY INDIRECT SZA CLA /SCALAR ARGS AS POSSIBLE JMP NOSCLR /TO REDUCE THE PROLOG ISZ TEMP2 /ROOM FOR ANY MORE SKP JMP NISA2 /NO, THE REST MUST MOVE VALUES NOSCLR, ISZ NARGS /LOOP SOME MORE JMP ARGLP2 JMS I (PLSUB2 /OUTPUT SOME TRACEBACK STUFF JMP I (MORE /GENERATE SCALAR, /LITERAL AND TEMP STORAGE NISA2, JMS I (PLSUB2 JMP NDLP3 /OUTPUT TRACEBACK /STUFF,THEN REST NISA, JMS I (PLSUB2 /GET PAST THE TRACEBACK STUFF ARGLP3, TAD XM3 /GENERATE ORG .+6 FOR D OR C DCA XNOP JMS PLSUB1 /OUTPUT REMAINING /SCALAR ARG SPACE SZA CLA JMP NDLP3 CDF 10 TAD I TEMP /TURN OFF SUBARG BIT AND (7757 /(THATS THE /SECOND TIME I FIXED THIS) DCA I TEMP NDLP3, ISZ NARGS JMP ARGLP3 CDF JMP I (MORE /GENERATE SCALAR, /LITERAL AND TEMP STORAGE NOARGS, JMS I (PLSUB2 /NO ARGS, OUTPUT TRACEBACK STUFF JMP I (MORE /GENERATE SCALAR, /LITERAL AND TEMP STORAGE PLSUB1, 0 CDF TAD I PLSUB1 /GET THE SKIP DCA PLSKIP ISZ PLSUB1 CDF 10 TAD I X10 /GET THE NEXT ARG IAC DCA TEMP /TYP WORD ADDR CLL CML RTR /2000=DIM BIT AND I TEMP PLSKIP, 0 /ARRAYS OR SCALARS ? JMP I PLSUB1 ISZ PLSUB1 CLA CMA TAD TEMP /DEFINE THIS VAR JMS I QOUTNAM TAD COMMA JMS I QOCHAR CDF 10 TAD I TEMP /LOOK AT THE TYPE CDF JMS I QSKPIRL /SKIP IF NOT C OR D XNOP, NOP /THIS IS CHANGED LATER (MAYBE) TAD XDP3 /.+3 OR .+6 DCA .+3 JMS I (INS2 /ORG FOR THE VALUE ORG;0 JMP I PLSUB1 TOOMNY, TAD P0F1 /TOO MANY ARRAY ARGS JMP I P0F2 XM3, CLL CML RTL PAGE / SCALARS, LITERALS & TEMPS HOLLIT, MORE, JMS I (TYPRTN /OUTPUT SCALARS SCALAR TAD (TEMPS /OUTPUT FIRST FIVE TEMPS JMS I (OUTVAR TAD (LITRL2 JMS I QOUTSYM TAD COMMA /OUTPUT %LITRL, JMS I QOCHAR JMS I (DOLIST INTLST O141, 0141;-3 /OUTPUT INTEGER LITERALS JMS I (DOLIST FPLIST 0142;-3 /OUTPUT FP LITERALS JMS I (DOLIST DPLIST 0144;-6 /DOUBLE LITERALS JMS I (DOLIST CMPLST 0143;-6 /COMPLEX LITERALS JMS I (TYPRTN /OUTPUT DIMENSION FACTORS DFLIT JMS I (ADFLIT /OUTPUT ARG DIM FACTOR LITERALS TAD (HOLIST /OUTPUT HOLLERITH LITERALS DCA ENTRY HOLLUP, CDF 10 TAD I ENTRY SNA JMP HOLDUN DCA ENTRY /SAVE NEW ENTYR TAD ENTRY DCA X10 TAD O141 /SET TYPE INFO DCA I X10 TAD LITNUM DCA I X10 /SAVE LIT DISP CLL CMA RTL /SET UP COUNTER DCA HOLLIT /BY THREES HOLOOP, CDF 10 /OUTPUT LITERAL AS OCTALS TAD I X10 CDF SNA JMP HOFILL /FILL OUT REST DCA ARG TAD ARG AND (77 /IS THIS LAST WORD? SZA CLA JMP .+4 /NO TAD ARG /YES, STICK IN TAD Q40 /BLANK JMP HOFILL+1 /AND OUTPUT IT TAD ARG /OUTPUT CHAR PAIR JMS ONUM ISZ HOLLIT JMP HOLOOP JMP HOLOOP-2 HOFILL, TAD (4040 /FILL WITH BLANKS JMS ONUM ISZ HOLLIT JMP HOFILL JMP HOLLUP /DO NEXT HOLLERITH LITERAL HOLDUN, CDF JMS I (TYPRTN /DO ARRAYS ARRAYS JMS I (TYPRTN /REMOVE COMMON VARS FROM S.T. COMVAR JMS I QOTAB TAD (XLBLE /#LBL=. JMS I QOUTSYM JMS I QCRLF CDF 10 /LOOK AT THE BLANK COMMON LIST TAD I (ONEI+2 /MAKE TRUE=INTEGER ONE DCA I (TRUE+2 TAD I (BLNKCN+1 CDF SNA JMP NOBC /NO BLANK COMMON DCA TYPE /POINTER TO VARIABLE LIST JMS I QOPCOD COMMON JMS I QCRLF CDF 10 BCLOOP, TAD TYPE /PROCESS THIS HUNK OF /BLANK COMMON DCA X10 TAD I X10 SNA JMP NXTBC /EMPTY HUNK CIA /SIZE OF HUNK DCA TEMP TAD I X10 /OUTPUT HUNK JMS I (OUTVAR CDF 10 ISZ TEMP JMP .-4 NXTBC, TAD I TYPE /ADDR OF NEXT HUNK SNA JMP NOBC /THAT WAS THE LAST HUNK DCA TYPE JMP BCLOOP /DO NEXT HUNK NOBC, CDF JMS I (TYPRTN /DO NAMED COMMONS COMNAM JMS I (TYPRTN /NOW EQUIVALENCES EQUIVS JMS INS2 ORG;XLBL /%ORG #LBL JMP I (PROLG2 /COMPLETE PROLOG PAGE / ARGUMENT PICKUP GENERATOR PROLG2, TAD FUNCTN /SECOND PART OF PROLOG SZA CLA JMP DORETN /NOT A MAIN PROG JMS I (INS /#ST, BASE #BASE XST;BASE;XBASE JMS I (INS2 / SETB #BASE SETB;XBASE JMS I (INS2 / SETX #XR SETX;XXR BDSWIT, JMP I (FINIST /GO GET OVERLAY DORETN, JMS I (INS /#RTN, BASE #BASE XRTN;BASE;XBASE TAD ARGLST /ANY ARGS ? SNA JMP JAGOBK /NO DCA X10 /POINTER TO THE LIST CDF 10 TAD I ARGLST /NUMBER OF ARGS CIA DCA NARGS DCA TEMP2 /ZERO ARG COUNTER CDF TAD NARGS /WILL WE RESTORE ANY ? TAD (6 SMA CLA JMP JAGOBK /NO JMS I (INS2 / FLDA #ARGS FLDA;XARGS JMS I (INS2 / FSTA #BASE FSTA;XBASE RSLOOP, CDF 10 TAD I X10 /GET NEXT ARG IAC DCA TEMP /ADDR OF TYPE WORD ISZ TEMP2 /INCR COUNT TAD I TEMP /IS IT A VALUE TRANSMISSION ? AND Q20 CDF SZA CLA JMP NOREST /NO, DON'T RESTORE IT JMS I QOPCDE / %LDX XXXX,1 LDX TAD TEMP2 JMS I QONUMBR TAD (C1 JMS I QOUTSYM JMS I QCRLF JMS I QGENCOD /STARTD SD-1 JMS I (INS2 /GET POINTER TO ARG FLDAI;XBASC1 JMS I (INS2 /AND SAVE IN #BASE+3 FSTA;XBASP3 JMS STFORE /INTO CORRECT MODE JMS I QOPCDE /FLDA VAR FLDA CMA TAD TEMP CDF 10 JMS I QOUTNAM JMS I QCRLF JMS I (INS2 / FSTA% #BASE+3 FSTAI;XBASP3 NOREST, ISZ NARGS JMP RSLOOP JMS I QGENCOD /MAKE SURE WE'RE IN F MODE QSFM1, SF-1 JAGOBK, TAD FUNCTN /WHAT WAS THIS ? SPA CLA JMP NOFVAL /NOT A FUNCTION CDF 10 /GET TYPE TAD I PROGNM AND Q17 TAD (FVAL-1 /PLUS TABLE ADDRESS DCA GVSKEL /GIVES POINTER TO /SKELETON ADDRESS TAD I GVSKEL /GET SKELETON ADDRESS DCA GVSKEL JMS I QGENCOD /PICK UP FUNCTION VALUE GVSKEL, 0 NOFVAL, JMS I (INS2 / JA #GOBAK JA;XGOBAK JMS I (INS /#ST, %STARTD XST;STARTD;0 JMS I QOTAB TAD (210 / %FLDA' 10 JMS I QONUMBR JMS I QCRLF JMS I (INS2 / %FSTA #GOBAK,0 FSTA;XGOBC0 JMP I (MORPLG STFORE, 0 /START F OR E CDF 10 TAD I TEMP /GET TYPE CDF JMS I QSKPIRL /SKIP ON I R OR L TAD (SE-SF /SE TAD QSFM1 /SF DCA .+2 JMS I QGENCOD 0 JMP I STFORE /DON'T FORGET TO /RETURN DUMMY XARGS, TEXT '#ARGS' PAGE / ENTRY AND EXIT CODE MORPLG, JMS I QOTAB TAD Q200 / FLDA' 0 JMS I QONUMBR JMS I QCRLF JMS I (INS2 / %SETX #XR SETX;XXR JMS I (INS2 / %SETB #BASE SETB;XBASE TAD ARGLST /ANY ARGS ? SNA JMP I (ENDPLG /NO, JUST STARTF DCA ARG /SAVE POINTER TO THEM JMS I (INS2 / %LDX 0,1 LDX;ZC1 JMS I (INS2 / %FSTA #BASE FSTA;XBASE JMS I (INS2 / %FSTA #ARGS FSTA;XARGS CDF 10 TAD I ARGLST /NUMBER OF ARGS CIA DCA NARGS GALOOP, CDF JMS I (INS2 / %FLDA I #BASE,1+ FLDAI;XBAC1P DCA TYPE /CLEAR THE SD SWITCH CDF 10 ISZ ARG /GET TO NEXT ARG TAD I ARG /LOOK AT ITS TYPE WORD IAC DCA TEMP CLL CML RTR AND I TEMP /WAS IT DIMENSIONED ? SNA CLA JMP I (TSTABT /NO, SEE IF ITS VALUE CMA TAD TEMP /GET ADDR OF DIM INFO JMS I QGETSS IAC /ADDR OF SIZE DCA TEMP2 TAD I TEMP2 ISZ TEMP2 ISZ TEMP2 SNA CLA JMP OUFSTA+1 /IT HAS A VARIABLE DIMENSION TAD I TEMP2 /GET MAGIC NUMBER LIT DISP DCA TEMP2 CDF JMS I QOPCDE / %FSUB #LIT+XXXX FSUB TAD QLITRL JMS I QOUTSYM TAD TEMP2 JMS I QONUMBR JMS I QCRLF CDF 10 OUFSTA, DCA I ARG /IT ISN'T VARIABLY DIMENSIONED CDF JMS I QOPCDE / %FSTA ARGN FSTA CDF 10 CMA TAD TEMP JMS I QOUTNAM JMS I QCRLF ISZ NARGS SKP JMP I (ENDPLG /END OF PROLOG TAD TYPE /DID WE LEAVE D MODE SNA CLA JMP GALOOP /NO JMS I QGENCOD /YES, OUTPUT AN %SD SD-1 JMP GALOOP FINIST, CDF 10 TAD FUNCTN /WAS THIS A FUNCTION ? SPA SNA CLA JMP .+4 /NO, SKIP THIS TAD I PROGNM /YES, TURN OFF EXT BIT AND (6777 /ALLOWING STORING IN FUN NAME DCA I PROGNM TAD (2200 /CHECK /N /Q AND I (7644 CDF SNA CLA NODBUG, DCA I (DEBUG /IF NOT SET, PUT ISN'S CDF 10 /INTO CODE TAD I (7644 /IS /Q SET ? CDF AND (0200 SZA CLA ISZ I (OPTMYZ /MAKE A CLA IAC FROM A CLA GFNAME, CDF 10 TAD I FNAME /MOVE FILE NAME CDF DCA I NAMEF /INTO PAGE ISZ FNAME ISZ NAMEF ISZ NFCNT JMP GFNAME JMP I (RDOVLY /GO WHERE ? /CALIFORNIA OF COURSE!!!! FNAME, 7601 NAMEF, F1LNAM NFCNT, -4 ONUM, 0 ISZ LITNUM /BUMP LITERAL COUNTER DCA ARG JMS I QOTAB TAD ARG JMS I QONUMBR JMS I QCRLF JMP I ONUM PAGE / ENTRY AND EXIT CODE TSTABT, TAD I TEMP /VALUE TRANSMISSION ? AND Q20 SZA CLA JMP I (OUFSTA /NO CDF JMS I (INS2 / %FSTA #BASE+3 FSTA;XBASP3 JMS I (STFORE /ENTER CORRECT MODE JMS I (INS2 / %FLDA% #BASE+3 FLDAI;XBASP3 ISZ TYPE /SET SWITCH JMP I (OUFSTA-1 ENDPLG, JMS I QGENCOD /%SF SF-1 TAD ARGLST /ANY VARIABLY /DIMENSIONED ARRAYS ? SNA JMP I (FINIST /NO ARGS AT ALL DCA X10 CDF 10 TAD I ARGLST /NUMBER OF ARGS CIA DCA NSARGS VDIMLP, CDF 10 TAD I X10 /GET NEXT ARG SNA JMP NDVDIM /NOT A VARIABLY /DIMENSIONED ARRAY DCA VDTEMP TAD VDTEMP /GET ADDR OF DIMENSION INFO JMS I QGETSS DCA VDTMP2 TAD I VDTMP2 /NUMBER OF DIMENSIONS CIA DCA NARGS ISZ VDTMP2 /MOVE TO MAGIC NUMBER LITERAL ISZ VDTMP2 ISZ VDTMP2 TAD I VDTMP2 /GET IT CDF DCA MNL /SAVE MAGIC NUMBER LITERAL TAD (FLDA /JUST LOAD FIRST DIM DCA MNOPC TAD NARGS /GET ADDRESS CIA /OF THE LAST TAD VDTMP2 /DIMENSION DCA VDTMP2 /FOR THE SIZE GETTER JMP CMPMN3 /SKIP MULTIPLY FIRST TIME CMPMN1, TAD (FMUL /NEXT TIME USE A MULTIPLY DCA MNOPC JMS I QOPCOD /NEXT SUBSCRIPT (ALWAYS (1.0) FADD JMS I QOADDR /NOW ADDRESS (ONEI CMPMN3, ISZ NARGS /ANY MORE SS ? JMP CMPMN2 /YES ISZ VDTEMP /GET TO TYPE CDF 10 TAD I VDTEMP CDF JMS I QSKPIRL /SKIP ON I R L TAD Q6M3 /YES TAD (THREE JMS LDAMUL /3.02 JMS I (INS2 /ALN 0 ALN;D0 JMS I QOPCDE FSTA TAD QLITRL /SAVE IN THE MAGIC /NUMBER LITERAL JMS I QOUTSYM CLA CMA TAD MNL JMS I QONUMBR JMS I QCRLF JMS I (INS2 /FNEG FNEG;0 JMS I (INS2 /ENTER D MODE STARTD;0 JMS I QOPCDE FADDM /NOW MODIFY THE POINTER CMA TAD VDTEMP CDF 10 JMS I QOUTNAM JMS I QCRLF JMS I (INS2 /RETURN TO F MODE STARTF;0 NDVDIM, ISZ NSARGS /ANY MORE ARGS TO CHECK? JMP VDIMLP /YES CDF JMP I (FINIST CMPMN2, CLA CMA /BACK UP THE POINTER TAD VDTMP2 /BY ONE DCA VDTMP2 CDF 10 TAD I VDTMP2 /GET IT CDF JMS LDAMUL /3.02 JMP CMPMN1 /LOOP VDTEMP, 0 VDTMP2, 0 NSARGS, 0 MNL, 0 DP12, TEXT '.+14' LDAMUL, 0 /3.02 DCA MNADR JMS I QOPCOD MNOPC, 0 JMS I QOADDR MNADR JMP I LDAMUL MNADR, 0 PAGE / RANDOM PROLOG STUFF ARRAYS, 0 /OUTPUT ARRAYS TAD I TYPE AND (6220 /IS IT AN ARRAY SNA JMP I ARRAYS AND (4220 /NOT COMMON, EQUIV OR ARG SZA CLA JMP I ARRAYS JMS I (UNHOOK /REMOVE FROM BUCKET TAD ENTRY /OUTPUT VARIABLE JMS I (OUTVAR JMP TFUDGE-1 FILL, 0 /FILL SUB NAME WITH BLANKS CLL CML RTL TAD PROGNM /PROGNM+2 CIA /-PROGNM-2 TAD I XNAMP /1,2,3 TAD QM4 /-3,-2,-1 DCA TEMP JMP .+5 TAD (240 /TWO BLANKS FOR EACH WORD JMS I QOCHAR TAD (240 JMS I QOCHAR ISZ TEMP /MORE ? JMP .-5 /YES JMP I FILL XNAMP, NAMPTR NPRNT, 0 JMS I QTTYP2C JMS I QTTYP2C TAD I X10 /NOW NUMBER JMS I QTTYP2C TAD I X10 JMS I QTTYP2C TAD I X10 JMS I QTTYP2C JMS I QTTCRLF JMP I NPRNT /ROUTINE TO FIX UP NEGATIVE EQUIVALENCE OFFSETS NEGSLV, 0 TAD I TYPE AND Q200 SNA CLA /IS VARIABLE A SLAVE? JMP I NEGSLV /NO TAD TYPE DCA X10 TAD I X10 /GET POINTER TO EQUIV BLOCK DCA X10 CLA IAC TAD I X10 /GET POINTER TO MASTER DCA OLDM /TYPE WORD TAD I X10 /OFFSET FROM MASTER CMA STL TAD I X10 /SUBTRACT FROM SLAVE OFFSET DCA SFUDGE /SAVE IN CASE WE NEED IT TAD I OLDM /IF MASTER IS IN COMMON FORGET THE NEXT TEST: SZL SPA CLA /IF MASTER OFFSET < SLAVE OFFSET THEN JMP I NEGSLV /SLAVE WILL ORIGIN BEFORE MASTER - TAD I TYPE /THEREFORE THE SLAVE MUST BECOME THE MASTER AND (7577 /UNSLAVE THE SLAVE DCA I TYPE ISZ TYPE TAD I TYPE DCA TYPE1 /TYPE1 POINTS TO EQUIV BLOCK CLA IAC TAD TYPE1 DCA X10 /USE AUTO-XR TO CLEAR OFFSETS TAD ENTRY DCA NEWM TAD I OLDM /GET OLD MASTER'S TYPE WD TAD Q200 DCA I OLDM /MAKE IT A SLAVE ISZ OLDM TAD I TYPE1 /GET POINTER TO SLAVE DIMENSION BLOCK DCA I TYPE /PUT IT IN SYMTAB AS BEFITTING A NEW MASTER TAD I OLDM /GET OLD MASTERS DIM PTR DCA I TYPE1 /PUT IT IN EQUIV BLOCK AS BEFITTING A NEW SLAVE TAD TYPE1 /NOW ASSOCIATE THE EQUIV BLOCK DCA I OLDM /WITH THE NEW SLAVE DCA I X10 /AND MAKE BOTH OFFSETS 0 DCA I X10 /("FIXSLV" WILL ADJUST IT - NOTE THE "MASTER" CDF 0 /WD OF THE BLOCK STILL POINTS TO THE OLD MASTER) JMS I (TYPRTN /** RECURSIVE CALL ** - ACTUALLY WE DON'T CARE FIXSLV /SINCE WE AREN'T RETURNING ANYWAY JMP I (FIXELP /TRY AGAIN FROM SCRATCH /ROUTINE TO ADJUST ALL SLAVES OF THE OLD MASTER /TO BE SLAVES OF THE NEW MASTER FIXSLV, 0 /THROUGHOUT TAD I TYPE AND Q200 SNA CLA /IS IT A SLAVE? JMP I FIXSLV /NO ISZ TYPE CLA IAC TAD I TYPE DCA TYPE /TYPE NOW POINTS TO THE EQUIV BLOCK CLA IAC TAD I TYPE /GET PTR TO THIS SLAVES MASTER (+1) CMA TAD OLDM /COMPARE MASTERS SZA CLA JMP I FIXSLV /NOT UNDER SAME MASTER - LEAVE TAD NEWM DCA I TYPE /"MEET THE NEW BOSS..... ISZ TYPE / SAME AS THE OLD BOSS...." TAD I TYPE / (THE WHO) TAD SFUDGE /ADD IN THE DIFFERENCE BETWEEN OLD AND NEW IAC /MASTERS TO THE MASTER OFFSET DCA I TYPE JMP I FIXSLV /THE SLAVE IS NOW -- A SLAVE! OLDM, 0 NEWM, 0 SFUDGE, 0 PAGE / ENTRY AND EXIT CODE PLSUB2, 0 /DUMB SUBR FOR PROLOG CDF JMS INS2 / %ORG #BASE+30 ORG;XBAP30 JMS INS2 / %FNOP FNOP;0 JMS INS2 / %JA #RET JA;XRET JMS INS2 / FNOP FNOP;0 JMS INS /#GOBAK,ORG .+2 XGOBAK;DBLZRO;0 /**TO INSURE IT'S 0 TAD DPUSED /WAS DOUBLE PRECISSION USED ? SNA CLA JMP NDPUSD /NO, NO NEED FOR TEMP JMS INS XDPTMP;ORG;DP12 /#DPT, ORG .+12 JMS INS2 DPCHK;0 NDPUSD, TAD FUNCTN /FUNCTION OR SUBR ? SNA JMP I PLSUB2 /ITS #MAIN, NO #VAL OR #ARGS SPA CLA JMP .+5 /ITS A SUBROUTINE, NO #VAL JMS INS /#VAL, %ORG .+6 XVAL;ORG;DP6 JMS INS /#ARGS, %ORG .+3 XARGS;ORG;DP3 JMP I PLSUB2 INS2, 0 / %OPCOD ADDR TAD INS2 /COMMONIZE RETURNS DCA INS JMP INS3 INS, 0 /TAG, %OPCOD ADDR TAD I INS /GET TAG FIELD ISZ INS JMS I QOUTSYM /OUTPUT IT TAD COMMA JMS I QOCHAR INS3, JMS I QOTAB TAD I INS /GET OPCODE ISZ INS JMS I QOUTSYM TAD I INS /GET ADDR SNA CLA JMP .+4 /NO ADDRESS JMS I QOTAB TAD I INS JMS I QOUTSYM ISZ INS JMS I QCRLF JMP I INS SECT, TEXT 'SECT' XRET, TEXT '#RET' XXR, TEXT '#XR' XGOBAK, TEXT '#GOBAK' XST, TEXT '#ST' XGOBC0, TEXT '#GOBAK,0' XBAP30, TEXT '#BASE+30' FNOP, TEXT 'FNOP' SETX, TEXT 'SETX' SETB, TEXT 'SETB' TEXTX, TEXT 'TEXT' XBASC1, TEXT '#BASE,1' DP3, TEXT '.+3' DP6, TEXT '.+6' ZC1, TEXT '0,1' FLDAI, TEXT 'FLDA%' FSTAI, TEXT 'FSTA%' XLBLE, TEXT '#LBL=.' C1, TEXT ',1' XLBL, TEXT '#LBL' /STACK-5 CAN'T BE 0 DBLZRO, TEXT '0;0' PAGE / SYMBOL TABLE PROCESSING ROUTINES IMPLCT, 0 /DO IMPLICIT TYPING TAD I TYPE AND O100 /WAS IT EXPLICITLY TYPED SZA CLA JMP I IMPLCT /YES TAD BUCKET /IS IT INTEGER ? TAD M317 CLL TAD M006 SNL CLA ISZ I TYPE /TYPE IT REAL ISZ I TYPE /TYP IT INTEGER JMP I IMPLCT O100, DFLIT, 100 /GENERATE FACTORS FOR CALLS CLL CML RTR /DIMENSIONED ? AND I TYPE SNA CLA JMP I DFLIT /NO TAD I TYPE DCA TEMP /SET PROPER WDS/ENTRY FOR VMC TAD ENTRY /GET ADDR OF MAGIC NUMBER JMS I QGETSS TAD (2 DCA TYPE TAD I ENTRY /SAVE LINK DCA DFTEMP TAD BUCKET /FIX NAME DCA I ENTRY TAD I TYPE /GET MAGIC NUMBER DCA TEMP2 ISZ TYPE CDF JMS I (ONUM /OUTPUT A ZERO WORD JMS I QOPCDE JA TAD ENTRY /OUTPUT VAR MINUS CONST JMS I (VMC JMS I QCRLF /END LITERAL CDF 10 TAD LITNUM /SAVE NUMBER IN DIM INFO DCA I TYPE ISZ LITNUM /THEN BY 2 MORE ISZ LITNUM TAD DFTEMP /RESTORE ENTRY DCA I ENTRY JMP I DFLIT M006, DFTEMP, EXTRNL, 6 /DO EXTERNALS TAD I TYPE AND O1000 /IS IT EXT ? SNA CLA JMP I EXTRNL JMS I (UNHOOK /REMOVE THIS SYMBOL TAD PROGNM /IS IT THE PROG NAME ? CIA TAD ENTRY SZA CLA JMP .+5 /NO, OUTPUT EXTERN TAD FUNCTN /IS IT A MAIN PROG ? SNA CLA JMP TFUDGE-1 /YES, NO SECT TAD (SECT-EXTERN /NOT MAIN, OUTPUT SECT TAD XTRN DCA M317 CDF JMS I QOPCDE M317, -317 TAD ENTRY /NOW VAR NAME CDF 10 JMS I QOUTNAM JMS I QCRLF JMP TFUDGE-1 O1000, EQUIVS, 1000 /OUTPUT EQUIVALENCES TAD I TYPE AND Q200 /IS THIS A SLAVE ? SNA CLA JMP I EQUIVS /NO JMS I (UNHOOK /UNHOOK THE ENTRY TAD I TYPE /SAVE THE TYPE WORD DCA TYPE1 ISZ TYPE /POINT TO EQUIVALENCE BLOCK TAD I TYPE DCA X10 CDF JMS I QOPCDE /OUTPUT ORG ORG CDF 10 TAD I X10 /MASTER NAME DCA X11 /SAVE IT TAD X11 JMS I QOUTNAM /OUTPUT IT TAD PLUS /+ JMS I QOCHAR CDF 10 TAD I X11 /MASTER SS JMS SUBRX TAD Q255 /MINUS JMS I QOCHAR CDF 10 TAD TYPE1 /SLAVE SS JMS SUBRX JMS I QCRLF /EOL CDF 10 TAD ENTRY /NOW OUTPUT SLAVE JMS I (OUTVAR JMP TFUDGE-1 XTRN, SUBRX, EXTERN JMS I QSKPIRL /SIZE OF THING TAD Q3 TAD Q3 /TIMES 3 OR 6 DCA MQ TAD I X10 CDF JMS I QMUL12 /MAKE THE PRODUCT JMS I QNUMBRO /OUT WITH IT JMP I SUBRX DPCHK, TEXT 'DPCHK' FADDM, TEXT 'FADDM' PAGE / SYMBOL TABLE PROCESSING ROUTINES BASE, TEXT 'BASE' OUTVAR, 0 /ALLOCATE STORAGE FOR A VARIABLE DCA VARADR RDF /GET FIELD OF VAR TAD X6201 DCA OVFLD1 TAD OVFLD1 DCA OVFLD2 TAD VARADR /OUTPUT NAME, JMS I QOUTNAM TAD COMMA JMS I QOCHAR JMS I QOPCDE /OUTPUT ORG ORG ISZ VARADR /POINT TO TYPE WROD OVFLD1, 0 TAD I VARADR /GET TYPE X6201, CDF JMS I QSKPIRL TAD Q3 /PER ENTRY TAD Q3 /INTEGER, REAL, AND /LOGICAL 3WORDS DCA MQ DCA AC OVFLD2, 0 CLL CML RTR /CHECK DIM BIT AND I VARADR SNA CLA JMP PLSDOT /NOT DIMENSIONED TAD I VARADR /LOOK AT TYPE ISZ VARADR /MOVE TO EQ DIM POINTER AND Q200 /EQUIVALENCED ? SNA CLA JMP .+3 /NO TAD I VARADR /YES, SKIP EQUIV INFO DCA VARADR TAD I VARADR /ADDRESS OF DIM INFO IAC DCA VARADR /ADDRESS OF SIZE TAD I VARADR /GET TOTAL SIZE CDF JMS I QMUL12 PLSDOT, CDF TAD Q256 JMS I QOCHAR TAD PLUS JMS I QOCHAR JMS I QNUMBRO JMS I QCRLF JMP I OUTVAR SCALAR, 0 /OUTPUT SCALARS TAD I TYPE /IS IT A SCALAR ? AND (7630 /COM, DIM, EXT, ASF, /EQV, ARG, COMMONNAME SZA CLA JMP I SCALAR /NO JMS I (UNHOOK /DELETE THIS FROM THE LIST TAD ENTRY /OUTPUT THIS VARIABLE JMS OUTVAR JMP TFUDGE-1 VARADR, DOLIST, 0 /PROCESS A LITERAL LIST TAD I DOLIST /GET LIST START DCA ENTRY ISZ DOLIST TAD I DOLIST DCA TYPE /GET TYPE BITS ISZ DOLIST TAD I DOLIST ISZ DOLIST DCA LSIZE /GET LITERAL SIZE CDF 10 DLLOOP, TAD I ENTRY /GET NEXT ENTRY SNA JMP DLRETN /NO MORE DCA ENTRY TAD ENTRY DCA X10 /ADDRESS OF TYPE WORD TAD TYPE /PUT IN TYPE DCA I X10 TAD X10 /SAVE THIS ADDR DCA X11 TAD LSIZE /SIZE OF LITERAL DCA TEMP LITLUP, CDF JMS I QOTAB CDF 10 TAD I X10 CDF JMS I QONUMBR JMS I QCRLF ISZ TEMP JMP LITLUP CDF 10 TAD LITNUM /SAVE LITERAL NUMBER DCA I X11 TAD LSIZE /INCREMENT LITERAL NUMBER CIA TAD LITNUM DCA LITNUM JMP DLLOOP DLRETN, CDF JMP I DOLIST TEMPS, 243;2000;TMPSIZ;2415;2000 TMPSIZ, 1;TMPBLK+1 LSIZE, COMVAR, 0 /REMOVE COMMON VARS FROM ST TAD I TYPE AND (4400 /ALSO ASF NAMES SNA CLA JMP I COMVAR JMS I (UNHOOK JMP TFUDGE-1 LITRL2, TEXT '#LIT' COMMON, TEXT 'COMMON' PAGE / SYMBOL TABLE PROCESSING ROUTINES TYPRTN, 0 /PROCESS ENTIRE SYMBOL TABLE TAD I TYPRTN /GET ROUTINE ADDRESS DCA ROUTNE ISZ TYPRTN TAD O301 /START WITH 'A' DCA BUCKET TAD M32 /BUCKET COUNT DCA BCNT TYPLP2, TAD BUCKET /GET START OF NEXT LIST TAD ALM301 TYPLUP, DCA OENTRY /SAVE OLD ENTRY ADDRESS CDF 10 TFUDGE, TAD I OENTRY /GET ADDR OF NEXT ENTRY SNA JMP EOL /0 MEANS END OF LIST DCA ENTRY IAC TAD ENTRY /ADDR OF TYPE WORD DCA TYPE JMS I ROUTNE /CALL ROUTINE TAD I OENTRY /CONTINUE DOWN THE LIST JMP TYPLUP EOL, ISZ BUCKET /DO NEXT LETTER ISZ BCNT JMP TYPLP2 CDF JMP I TYPRTN /END OF PASS BCNT=ARG1 COMNAM, 0 /OUTPUT A COMMON BLOCK TAD I TYPE /IS THIS A COMMON BLOCK NAME TAD M111 SZA CLA JMP I COMNAM /NO CDF JMS I QOPCDE COMMON CDF 10 JMS I (UNHOOK /REMOVE THE COMMON /BLOCK FROM S.T. TAD ENTRY JMS I QOUTNAM /OUTPUT NAME JMS I QCRLF ISZ TYPE /GET TO COMMON STUFF POINTER CNLOOP, CDF 10 TAD I TYPE /GET ADDR OF NEXT HUNK /OF COMMON SNA JMP TFUDGE /END OF IT DCA TYPE TAD TYPE /GET A WORKING POINTER DCA X10 TAD I X10 /GET COUNT SNA JMP CNLOOP /NONE IN THIS HUNK CIA DCA TEMP2 TAD I X10 /GET VARIABLE ADDRESS JMS I (OUTVAR /OUTPUT IT CDF 10 ISZ TEMP2 JMP .-4 /DO NEXT ONE FROM THIS HUNK JMP CNLOOP /DO NEXT HUNK O301, 301 M32, -32 ALM301, ALIST-301 M111, -111 ROUTNE, ADFLIT, 0 /OUTPUT ARG DF LITS TAD ARGLST /ANY ARGS SNA JMP I ADFLIT DCA X10 CDF 10 TAD I ARGLST /NUMBER OF ARGS CIA DCA NARGS ADFLUP, CDF 10 TAD I X10 /GET ARG ADDR IAC DCA TEMP /TYPE WORD ADDR TAD I TEMP /GET TYPE INFO DCA TEMP2 CLL CML RTR AND I TEMP /DIMENSIONED ? SNA CLA JMP NDADFL /NO ISZ TEMP /ADDR OF DIM INFO CLL CML RTL TAD I TEMP /ADDR OF MAGIC NUMBER DCA TEMP TAD I TEMP /MAGIC NUMBER DCA MQ /PREPARE TO MULTIPLY ISZ TEMP /ADDR OF LITERAL GOES HERE TAD LITNUM /STICK IN THE ADDRESS IAC DCA I TEMP CDF JMS I (ONUM /OUTPUT A ZERO TAD TEMP2 /LOOK AT TYPE JMS I QSKPIRL /SKIP ON I R L TAD (3 /DOUBLE OR COMPLEX TAD (3 JMS I QMUL12 TAD AC /OUTPUT 2 WORD LITERAL JMS I (ONUM TAD MQ JMS I (ONUM NDADFL, ISZ NARGS JMP ADFLUP JMP I ADFLIT RDOVLY, JMS I (7607 /READ IN OVERLAY NPOVLY OVRLAY PASS2O, 0 JMP I (INERR TAD I (VOVER /CHECK VERSION OF OVERLAY TAD VERS SZA CLA JMP I (VERROR /ERROR, MIXED VERSIONS JMP I (EOSTMT /START PASS2 PROPER PAGE FIELD 1 *5000 0 /THIS IS THE START OF /THE ERROR MESSAGE LIST /WHICH WORKS BACKWARDS /OS/8 F4 COMPILER CODE SKELETONS MAC=-6 NEGSGN=-5 FLDAA2=-4 FLDAA1=-3 ENTERE=-2 ENTERF=-1 CGTCOD, ATX;DD1;STARTD;0;FLDA;DP2C1;STARTF;0 AGTCOD, JAC;0;0 ASNCOD, ENTERF;FLDA;DP3C0;JA;DP4;0 ERCODE, EXTERN;XUE;TRAP3;XUE;0 A0FN, EXTERN;XFIX;JSA;XFIX;0 A0SD, ALN;D0 SD, STARTD;0;0 SE, STARTE;0;0 SF, STARTF;0;0 MPTR0, ENTERF;FLDAA1;FSTA;XBASE;0 MPTR3, ENTERF;FLDAA2;FSTA;XBASP3;0 JADP2, JA;DOT;0 DOFIN0, ENTERF;FLDAA1;FADD;-2 ASTOR, FSTA;-1;0 DOFIN1, ENTERF;FLDAA1;FADD;-2;MAC+A0FN;FSTA;-1;0 LDASTD, FLDAA1;STARTD;0;0 /CHALK UP ONE FOR PAL8 ATX1, ATX;DD1;0 LXM1C2, LDX;M1C2;STARTD;0;0 FVAL, FVI-1;FVI-1;FVC-1;FVD-1;FVI-1 FVI, FLDA;XVAL;0 FVC, STARTE;0;FLDA;XVAL;MAC+PCAC;0 FVD, STARTE;0;FLDA;XVAL;0 RTNCOD, RTNX+MAC;JA;XRTN;0 PAZCOD, ENTERF;EXTERN;XPAUSE;JSR;XPAUSE;0 STPCOD, RTNX+MAC;EXTERN;XEXIT;JSR;XEXIT;0 GIRL1, ENTERF;FLDAA1;ENTERE;0 GIRL2, ENTERF;FLDAA2;ENTERE;0 SEGCAC, GCAC, ENTERE;EXTERN;CAC;FLDA;CAC;0 PCAC, EXTERN;CAC;FSTA;CAC;0 GC1C2, ENTERE;FLDAA1;EXTERN;CAC;FSTA;CAC;FLDAA2;0 GC1, ENTERE;FLDAA1;0 GC2, ENTERE;FLDAA2;0 JSACEQ, EXTERN;CEQ;JSA;CEQ;NEGSGN;0 JSACNG, EXTERN;CNEG;JSA;CNEG;0 JSACAD, EXTERN;CADD;JSA;CADD;0 JSACSB, EXTERN;CSUB;JSA;CSUB;0 JSACML, EXTERN;CMUL;JSA;CMUL;0 JSACDV, EXTERN;CDIV;JSA;CDIV;0 / ADD, SUBTRACT, MULTIPLY, AND DIVIDE SKELETONS ADDTBL, AS-1;AS+2;AS+4 AX-1;AX+2;AX+5 AS-1;AD-1;AS+4 ASC-1;ASC+2;ASC+3 ASD-1;ASD+7;ASD+10 ACS-1;ACS+4;ACS+6 ADS-1;ADS+3;ADS+7 0 FNEG;0 AS, FADD;-1;0 ENTERF;FLDAA1 FADD;-2;0 JSACNG+MAC AX, GC1+MAC;JSACAD+MAC;0 GC1C2+MAC;JSACAD+MAC;0 GC2+MAC;JSACAD+MAC;0 AD, ENTERE;FLDAA1;FADD;-2;0 JSACNG+MAC ASC, GIRL1+MAC;JSACAD+MAC;0 GIRL1+MAC ENTERE;PCAC+MAC;GC2+MAC;JSACAD+MAC;0 FNEG;0 ASD, FSTA;XDPTMP;ENTERF;FLDAA1;ENTERE;FADD;XDPTMP;0 GIRL1+MAC ENTERE;FADD;-2;0 JSACNG+MAC ACS, ENTERE;PCAC+MAC;GC1+MAC;JSACAD+MAC;0 GC1+MAC;PCAC+MAC GIRL2+MAC;JSACAD+MAC;0 FNEG;0 ADS, ENTERE;FADD;-1;0 GIRL2+MAC;FADD;-1;0 FSTA;XDPTMP;GIRL2+MAC;FADD;XDPTMP;0 SUBTBL, AS-3;SS-1;SS+1 AX-2;SX-1;SX+2 AS-3;SDBL-1;SS+1 ASC-2;SSX-1;SSX ASD-3;SSD-1;SSD ACS-2;SCS-1;SCS+1 ADS-3;SDS-1;SDS5-1 0 SS, ENTERF;FLDAA1 FSUB;-2;0 SX, GC1C2+MAC;JSACSB+MAC;0 GC2+MAC;JSACSB+MAC;0 SDBL, ENTERE;FLDAA1;FSUB;-2;0 SSX, GIRL1+MAC ENTERE;PCAC+MAC;GC2+MAC;JSACSB+MAC;0 SSD, GIRL1+MAC ENTERE;FSUB;-2;0 SCS, GC1+MAC;PCAC+MAC GIRL2+MAC;JSACSB+MAC;0 SDS, GIRL2+MAC;FNEG;0;FADD;-1;0 SDS5, FSTA;XDPTMP;GIRL2+MAC;FNEG;0;FADD;XDPTMP;0 MULTBL, M1-1;M1+3-1;M1+5-1 M4-1;M4+3-1;M4+6-1 M1-1;M7-1;M7+2-1 M8-1;M8+3-1;M8+4-1 M11-1;M11+6-1;M11+7-1 M14-1;M14+5-1;M14+7-1 M18+1-1;M18-1;M18+5-1 0 M1, FMUL;-1;0 ENTERF;FLDAA1 FMUL;-2;0 M4, GC1+MAC;JSACML+MAC;0 GC1C2+MAC;JSACML+MAC;0 GC2+MAC;JSACML+MAC;0 M7, ENTERE;FLDAA1;FMUL;-2;0 M8, GIRL1+MAC;JSACML+MAC;0 GIRL1+MAC ENTERE;PCAC+MAC;GC2+MAC;JSACML+MAC;0 M11, FSTA;XDPTMP;GIRL1+MAC;FMUL;XDPTMP;0 GIRL1+MAC ENTERE;FMUL;-2;0 M14, ENTERE;PCAC+MAC;GC1+MAC;JSACML+MAC;0 GC1+MAC;PCAC+MAC GIRL2+MAC;JSACML+MAC;0 M18, GIRL2+MAC ENTERE;FMUL;-1;0 FSTA;XDPTMP;GIRL2+MAC;FMUL;XDPTMP;0 DIVTBL, 1;D2-1;D2+2-1 1;D5-1;D5+3-1 1;D7-1;D7+2-1 1;D9-1;D10-1 1;D12-1;D13-1 1;D14-1;D15-1 1;D16-1;D17-1 0 D2, ENTERF;FLDAA1 FDIV;-2;0 D5, GC1C2+MAC;JSACDV+MAC;0 GC2+MAC;JSACDV+MAC;0 D7, ENTERE;FLDAA1;FDIV;-2;0 D9, GIRL1+MAC D10, ENTERE;PCAC+MAC;GC2+MAC;JSACDV+MAC;0 D12, GIRL1+MAC D13, ENTERE;FDIV;-2;0 D14, GC1+MAC;PCAC+MAC D15, GIRL2+MAC;JSACDV+MAC;0 D16, GIRL2+MAC;FSTA;XDPTMP;FLDAA1;FDIV;XDPTMP;0 D17, FSTA;XDPP6;GIRL2+MAC;FSTA;XDPTMP;FLDA;XDPP6;FDIV;XDPTMP;0 / RELATIONALS AND LOGICALS SKELETON TABLES EQTABL, EQ1-1;EQ2-1;EQ3-1 EQ4-1;EQ5-1;EQ6-1 EQ1-1;EQ7-1;EQ3-1 EQ8-1;EQ9-1;EQ10-1 EQ11-1;EQ12-1;EQ13-1 EQ14-1;EQ15-1;EQ16-1 EQ17-1;EQ18-1;EQ19-1 EQ1-1;EQ2-1;EQ3-1 EQ1, FSUB;-1;0 EQ2, ENTERF;FLDAA1 EQ3, FSUB;-2;0 EQ4, GC1+MAC;JSACEQ+MAC;0 EQ5, GC1C2+MAC;JSACEQ+MAC;0 EQ6, GC2+MAC;JSACEQ+MAC;0 EQ7, ENTERE;MAC+EQ2+1;0 EQ8, GIRL1+MAC;JSACEQ+MAC;0 EQ9, GIRL1+MAC EQ10, ENTERE;PCAC+MAC;GC2+MAC;JSACEQ+MAC;0 EQ11, MAC+ASD-2;0 EQ12, GIRL1+MAC EQ13, MAC+SSD+1;0 EQ15, GIRL2+MAC EQ14, ENTERE;PCAC+MAC;GC1+MAC;JSACEQ+MAC;0 EQ16, GIRL2+MAC;JSACEQ+MAC;0 EQ18, GIRL2+MAC EQ17, MAC+ADS-2;0 EQ19, MAC+SDS5;0 LETABL, LE1-1;LE2-1;LE3-1 0;0;0 LE1-1;LE4-1;LE3-1 0;0;0 LE11-1;LE12-1;LE13-1 0;0;0 LE17-1;LE18-1;LE19-1 0 LE1, FSUB;-1;NEGSGN;0 LE2, ENTERF;FLDAA1 LE3, FSUB;-2;0 LE4, ENTERE;MAC+LE2+1;0 LE11, MAC+ASD-2;0 LE12, GIRL1+MAC LE13, MAC+SSD+1;0 LE18, GIRL2+MAC LE17, MAC+ADS-2;0 LE19, MAC+SDS5;0 ANDTBL, 0;0;0 0;0;0 0;0;0 0;0;0 0;0;0 0;0;0 0;0;0 M1-1;M1+3-1;M1+5-1 ORTABL, 0;0;0 0;0;0 0;0;0 0;0;0 0;0;0 0;0;0 0;0;0 AS-1;AS+2;AS+4 EQVTBL, 0;0;0 0;0;0 0;0;0 0;0;0 0;0;0 0;0;0 0;0;0 EQ1-1;EQ2-1;EQ3-1 /CONVERSION-FOR-STORE-OPERATOR SKELETONS STRTBL, SIIM-1;SIRM-1;SICM-1;SIDM-1;SIIM-1 SIIA-1;SIRA-1;SICA-1;SIDA-1;SIIA-1 SIIM-1;SIIM-1;SRCM-1;SRDM-1;SIIM-1 SIIA-1;SIIA-1;SRCA-1;SRDA-1;SIIA-1 SCIM-1;SCIM-1;SCCM-1;SCDM-1;SCIM-1 SCIA-1;SCIA-1;SCCA-1;SCDA-1;SCIA-1 SDIM-1;SDIM-1;SDCM-1;SDDM-1;SDIM-1 SDIA-1;SDIA-1;SDCA-1;SDDA-1;SDIA-1 SLIM-1;SLIM-1;SLCM-1;SLDM-1;SIIM-1 SLIA-1;SLIA-1;SLCA-1;SLDA-1;SIIA-1 SIIM, ENTERF;FLDAA2 SIIA, 0 SIRM, ENTERF;FLDAA2 SIRA, A0FN+MAC;0 SICM, GC2+MAC;PCAC+MAC SICA, ENTERF;GCAC+1+MAC;A0FN+MAC;0 SRCM, GC2+MAC;PCAC+MAC SRCA, ENTERF;GCAC+1+MAC;0 SCCM=GC2 SCIM, ENTERF;FLDAA2 SCIA, ENTERE;0 SCCA=GCAC SLIM, ENTERF;FLDAA2 SLIA, JSA;LTRNE;0 SLCM, GC2+MAC;ENTERF;SLIA+MAC;0 SLCA, ENTERF;GCAC+1+MAC;SLIA+MAC;0 SIDM, ENTERE;FLDAA2 SIDA, ENTERF;SIRA+MAC;0 SRDM, ENTERE;FLDAA2 SRDA, ENTERF;0 SCDM, ENTERE;FLDAA2 SCDA, FSTA;TEMPN;ENTERF;FLDA;TEMPN;ENTERE;0 SDIM, ENTERF;FLDAA2 SDIA, ENTERE;0 SDCM, ENTERE;FLDAA2;PCAC+MAC SDCA, ENTERF;GCAC+1+MAC;ENTERE;0 SDDM, ENTERE;FLDAA2 SDDA, 0 SLDM, ENTERE;FLDAA2 SLDA, JSA;LTRNE;0 / UNARY MINUS AND .NOT. SKELETONS NEGTBL, NIM-1;NIM-1;NCM-1;NDM-1;0 NIA-1;NIA-1;NCA-1;NIA-1;0 NIM, ENTERF;FLDAA1 NIA, FNEG;0;0 NCM, GC1+MAC;PCAC+MAC;JSACNG+MAC;0 NCA=JSACNG NDM, ENTERE;NIM+1+MAC;0 NOTTBL, 0;0;0;0;NOTM-1 0;0;0;0;NOTA-1 NOTM, ENTERF;FLDAA1 NOTA, 0 / ARITHMETIC IF SKELETONS AIFTBL, GI-1;GI-1;GC-1;GD-1;GI-1 /V3C GI+1;GI+1;GC+1;GD+1;GI+1 /V3C GI, ENTERF;FLDAA1;0 GC, GC1+MAC;0 GD, ENTERE;FLDAA1;0 /OPERATOR DISPATCH TABLE XPUSH, PUSH ADD SUB MUL DIV EXP NOT NEG GE GT LE LT DNA OR EQ NE XOR EQV PAUZE DPUSH BINRD1 FMTRD1 WCLOSE /** DARD1 BINWR1 FMTWR1 WCLOSE DAWR1 DEFFIL ASFDEF ARGS EOSTMT ERROR RETURN REWIND STORE XEND, END DEFLBL DOFINI ARTHIF XLOGIF, LIFBGN DOBEGN ENDFIL STOP ASSIGN BAKSPC FORMAT XGOTO, GOTO CGOTO AGOTO IOLMNT DATELM DREPTC DATAST ENDELM PURGE XLAST, DOSTOR / EXPONENTIATION TABLE (NOT A STANDARD SKELETON TABLE) EXPTBL, 1;1111;2;1122;3;1103;4;1104;0;0 /I**D=D 2;1111;2;1122;3;1103;4;1104;0;0 /R**D=D 3;0311;3;0322;3;0303;0;0;0;0 4;0411;4;0422;0;0;4;0404;0;0 0;0;0;0;0;0;0;0;0 / TYPE MIXING TABLE TYPMIX, 1;6;2;6;3;17;4;22;0;0 2;6;2;6;3;17;4;22;0;0 3;25;3;25;3;11;0;0;0;0 4;30;4;30;0;0;4;14;0;0 0;0;0;0;0;0;0;0;5;33 RTNX, ENTERF;EXTERN;LTRNE;0 $ |
Added src/os8/uni/LANGUAGE/FORTRAN4/PASS2O.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | / OS/8 FORTRAN (PASS TWO OVERLAY) / / VERSION 4A PT 16-MAY-77 / / OS/8 FORTRAN COMPILER - PASS 2 OVERLAY / / BY: HANK MAURER / UPDATED BY: R. LARY + M. HURLEY / / /COPYRIGHT (C) 1974,1975 BY DIGITAL EQUIPMENT CORPORATION / / /THIS FILE IS REQUIRED FOR THE CONDITIONAL ASSEMBLY OF "PASS2.PA" /TO CREATE "PASS2O" / / / Assembly info: / / .PAL PASS2O<PASS2O.PA,PASS2.PA/L / .SAVE SYS:PASS2O.SV;7605=100 / / OVERLY=1 /CONDITIONAL FOR PASS2O ASSEMBLY |
Added src/os8/uni/LANGUAGE/FORTRAN4/PASS3.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 | /3 OS/8 FORTRAN (PASS THREE) / / VERSION 4A PT 16-MAY-77 / / OS/8 FORTRAN IV COMPILER-PASS 3 / / BY: HANK MAURER / UPDATED BY: R. LARY + M. HURLEY / / /COPYRIGHT (C) 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. / / / VERSON=4 / PAGE ZERO STUFF OUDEVH=7000 /PUT OUDEVH AND OUBUF IN DIFFERENT INDEVH=6400 INBUF=6000 OUBUF=5400 /SEGMENTS, STAN KNOWS WHY X10=10 X11=11 X12=12 NCHARS=20 CHAR=21 TEMP=22 FILDEV=6 FILBLK=7 DEV1CE=173 /THROUGH 177 DEVH=23 LINENO=24 SEVCHR=25 /THROUGH 33 / OS/8 V3C MAINTENANCE RELEASE FIXES: /1. EXTENDED RANGE OF PAGE NUMBERS TO 99 /2 INTERCHANGED CR/LF FOR HASSINGER /3 CHANGED VERSION NO. TO 305 /5. ADDED 'I' TO JMP (OFOO3 / / / CHANGES FOR OS/8 V3D AND OS/78 BY P.T. / .CHANGED VERSION NUMBER TO 4A / .PUT IN NEW DATE ALGORITHM / / / In the heading of the pass 3 listing of a Fortran IV / program, four characters are printed after the version / number. The first character is the F4 patch level; the / second character is the Pass 2 patch level; the third / character is the Pass 20 patch level; the forth character / is the Pass 3 patch level. These characters are initially / set to "A" and are updated when a patch is issued to any / to the above programs. This text string is at the label / "header". / /START OF PASS 3 *400 /DON'T LOAD INTO 0-377 SPASS3, CDF 10 TAD I (7666 /GET DATE DCA TEMP TAD I LSTFIL /COPY FILE NAME CDF DCA I FILLST ISZ LSTFIL ISZ FILLST ISZ OFSIZE JMP SPASS3 TAD DEV1CE /FETCH HANDLER FOR OUTPUT FILE CIF 10 JMS I (200 /USR IS IN CORE 1 OH, OUDEVH+1 /TWO PAGE HANDLER IS OK JMP I (OFOO3 CIF 10 TAD DEV1CE /OPEN THE LISTING FILE JMS I (200 3 OB, DEV1CE+1 OS, 0 JMP I (OFOO3 TAD OB /SAVE BLOCK NUMBER DCA OBLOCK TAD OS DCA OSIZE /AND SIZE OF HOLE TAD OH /SAVE HANDLER ADDRESS DCA DEVH TAD (NUMS-1 /SET UP NUMBER POINTER DCA I (NUM TAD TEMP /GET THE DATE--FOR YEAR ROUTINE SNA JMP I (PAJE /NO DATE AND (7 /MASK OUT ALL BUT YEAR OFFSET BITS DCA YRTEMP /INCREMENT FROM THE BASE YEAR DCA TEMP1 /HOLDS THE FIRST DIGIT OF THE YEAR TAD I (7777 /GET THE DATE EXTENSION BITS AND (600 /MASK TO GET THE EXTENSION BITS CLL RTR /ROTATE THEM INTO BIT RTR /POSITIONS 7 AND 8 TAD (106 /ADD IN 70---OLD BASE YEAR TAD YRTEMP /ADD IN THE YEAR OFFSET BITS /TO FIND THE NEW BASE YEAR CONVYR, CLL /FIND THE YEAR IN DECIMAL TAD (-12 /KEEP SUBTRACTING 12 SNL /ALMOST DONE JMP SECDIG /FIND THE SECOND DIGIT OF THE YEAR ISZ TEMP1 /FIND THE FIRST DIGIT OF THE YEAR JMP CONVYR /TRY AGAIN SECDIG, TAD (72 /GET THE SECOND DIGIT OF THE YEAR RTL /AND MAKE IT SIXBIT RTL RTL DCA I (YEAR+1 /PUT IT IN THE PRINT LINE TAD TEMP1 /GET THE FIRST DIGIT TAD (5560 /MAKE IT SIXBIT DCA I (YEAR /PRINT IT TAD TEMP /GET THE DATE--NOW FIND THE MONTH/DAY CLL RTR RAR AND (777 DCA TEMP SIMPLE, TAD TEMP /GET THE DAY AND (37 TAD (DAYS-1 /THIS IS THE LAZY WAY DCA NCHARS TAD I NCHARS DCA I (DAY TAD TEMP /GET THE MONTH CLL RTR RTR AND (36 TAD (MONTHS-3 DCA X10 TAD I X10 DCA I (MONTH TAD I X10 DCA I (MONTH+1 JMP I (PAJE /WE GOT THE DATE LSTFIL, 7605 FILLST, DEV1CE OFSIZE, -5 YRTEMP, 0 TEMP1, 0 PAGE PAJE, JMP I (PRHDR /PRINT THE FIRST HEADING CLL CML RTL /INITIALIZE LINE NUMBER DCA LINENO DCA TABCNT /** RDLUPE, TAD (SEVCHR-1 /SEVEN CHAR BUFFER DCA X10 TAD (-6 DCA NCHARS RDLOOP, JMS I (ICHAR JMP RDACHO /ECHO & IGNORE SHORT LINES TAD (-211 /IS IT A TAB ? SZA CLA JMP NOTAB /NO TAD (-2 DCA TABCNT /SET POINTER TO DO EXTRA SPACES LATER** TAD (240 DCA I X10 /DO A TAB ISZ NCHARS JMP .-3 JMP WHAT /GO LOOK AT THE LINE NOTAB, TAD CHAR DCA I X10 /SAVE THE CHAR ISZ NCHARS JMP RDLOOP WHAT, TAD SEVCHR /IS IT A COMMNET TAD (-303 SNA CLA JMP NOISN /YES, NO INTERNAL STMT NUMBER TAD SEVCHR+5 /IS IT A CONTINUATION ? TAD (-240 SZA CLA JMP NOISN /YES, NO ISN TAD LINENO /NEITHER OF THESE JMS I (ONUMBR /PRINT ISN TAD LINENO /2.01/ PUT LINE NUM 7421 /2.01/ INTO MQ CLA /2.01/ CLA IF NO EAE ISZ LINENO /BUMP LINE NUMBER NOISN, TAD (211 /TAB JMS I (OCHAR TAD (SEVCHR-1 /PRINT FIRST SEVEN DCA X10 TAD (-6 DCA NCHARS TAD I X10 JMS I (OCHAR ISZ NCHARS JMP .-3 TAD TABCNT /SEE IF A TAB WAS 1ST SMA CLA /IF YES,NEED 2 MORE SPACES JMP NOTTAB DCA TABCNT /WAS A TAB TAD (240 JMS I (OCHAR TAD (240 JMS I (OCHAR NOTTAB, JMS I (ICHAR /PRINT REST OF LINE JMP ENDLIN JMS I (OCHAR JMP .-3 ENDLIN, JMS I (CRLF /END LINE JMS I (ERRCHK /CHECK ERROR LIST JMP RDLUPE /DO NEXT LINE TABCNT, 0 HEADER, TEXT ' FORTRAN IV 4CAAA ' *.-1 DAY, 4040 MONTH, 4040;4040 YEAR, TEXT ' PAGE ' *.-1 PAGENO, TEXT 'ONE' ZBLOCK 7 /V3C ROOM FOR LARGE PAGE NUMBERS RDACHO, TAD (211 JMS I (OCHAR JMP I (RDECHO PAGE TEXT " " LOS, TEXT "ONE " NUMS,/ 2427;1740;4040 / 2410;2205;0540 / 0617;2522;4040 / 0611;2605;4040 / 2311;3040;4040 / 2305;2605;1640 / 0511;0710;2440 / 1611;1605;4040 / 2405;1640;4040 / 0514;0526;0516 / 2427;0514;2605 TEXT "TWO@@@@@" TEXT "THREE@@@" TEXT "FOUR@@@@" TEXT "FIVE@@@@" TEXT "SIX@@@@@" TEXT "SEVEN@@@" TEXT "EIGHT@@@" TEXT "NINE@@@@" TEXT "TEN@@@@@" TEXT "ELEVEN@@" TEXT "TWELVE@@" TEXT "THIRTEEN" TEXT "FOURTEEN" TEXT "FIFTEEN@" TEXT "SIXTEEN@" TEXT "SEVENTEEN" TEXT "EIGHTEEN" TEXT "NINETEEN" HIS, TEXT " TWENTY " *.-1 TEXT " THIRTY " *.-1 TEXT " FORTY " *.-1 TEXT " FIFTY " *.-1 TEXT " SIXTY " *.-1 TEXT "SEVENTY " *.-1 TEXT " EIGHTY " *.-1 TEXT " NINETY " *.-1 TEXT "HUNDRED " *.-1 DAYS, 4061;4062;4063;4064;4065;4066;4067;4070;4071 6160;6161;6162;6163;6164;6165;6166;6167;6170;6171 6260;6261;6262;6263;6264;6265;6266;6267;6270;6271 6360;6361 MONTHS, 5512;0116 /-JAN 5506;0502 /-FEB 5515;0122 /-MAR 5501;2022 /-APR 5515;0131 /-MAY 5512;2516 /-JUN 5512;2514 /-JUL 5501;2507 /-AUG 5523;0520 /-SEP 5517;0324 /-OCT 5516;1726 /-NOV 5504;0503 /-DEC IFZERO .&100 <PAGE> ENDX, TAD (-601 /2.02/ CLEAR END OF BUFFER DCA LINENO /2.01/ FOR TV: REASONS TAD X232 /2.01/ OUTPUT ^Z JMS I (OCHAR /2.01/ ISZ LINENO /2.01/ JMP .-3 /2.01/ CIF 10 /CLOSE THE OUTPUT FILE TAD DEV1CE JMS I (200 4 DEV1CE+1 FILSIZ, 0 JMP (OFOO3 CDF 10 /LOOK AT OPTIONS TAD I X7643 CDF M70, SPA CLA JMP I (7605 //A MEANS DON'T CHAIN TO RALF CIF CDF 10 TAD FILDEV /SET UP RALF INPUT LIST DCA I (7617 /FILE SIZE AND DEVICE CODE ISZ (7617 TAD FILBLK /FILE START DCA I (7617 ISZ (7617 /ZERO END OF LIST DCA I (7617 TAD I X7643 /IS IT /F (FULL LIST) ? AND (100 CIF 0 SZA CLA /** JMP LISTIT CIF 10 TAD I (7644 AND (20 /LET /T SWITCH THRU ALSO SNA CLA DCA I (7605 /NO, INHIBIT RALF LISTING LISTIT, CIF 10 CLA IAC CDF JMS I (200 /LOOKUP RALF.SV 2 RALFNM X7643, 7643 JMP (OFOO3 TAD .-3 DCA .+4 CIF 10 /CHAIN TO RALF JMS I (200 6 X232, 232 NCNT, 0 ONUMBR, 0 DCA TEMP /OUTPUT ISN IN OCTAL TAD (-4 DCA NCNT OLOOP, TAD TEMP CLL RTL /ANYONE WHO CAN'T FOLLOW THIS RAL /SHOULDN'T BE A PROGRAMMER DCA TEMP TAD TEMP RAL AND (7 TAD (260 JMS I (OCHAR ISZ NCNT JMP OLOOP JMP I ONUMBR CONVRT, 0 /CONVERT TO ASCII AND PRINT AND (77 SZA TAD (-40 SPA TAD (100 TAD (240 JMS I (OCHAR JMP I CONVRT LINECT, -1 /EJECT FIRST TIME CRLF, PAJE+1 TAD (215 /CR LF JMS I (OCHAR TAD (212 JMS I (OCHAR ISZ LINECT JMP I CRLF TAD (214 JMS I (OCHAR PRHDR, TAD M70 /RESET COUNT DCA LINECT TAD (HEADER /COPY HEADER OUT DCA TEMP OHDR, TAD I TEMP CLL RTR CLL RTR CLL RTR JMS CONVRT TAD I TEMP JMS CONVRT TAD I TEMP /END YET ? ISZ TEMP AND (77 SZA CLA JMP OHDR TAD (215 /V3C SKIP EXTRA LINE AFTER TITLE JMS I (OCHAR TAD (212 /V3C JMS I (OCHAR /FOR CENTRONICS JMP PUTNUM /GET NEW PAGE NUMBER / OS/8 FILE INPUT ROUTINES PAGE ICHAR, 0 /READ CHAR FROM INPUT FILE ISZ INJMP /BUMP THREE WAY UNPACK SWITCH ISZ INCHCT INJMPP, JMP INJMP TAD INEOF /DID LAST READ YEILD END OF FILE ? SNA CLA JMP INGBUF /NO, DO ANOTHER READ GETNEW, JMS INNEWF /OPEN A NEW INPUT FILE JMP I (ENDX /NO FILE TO OPEN INGBUF, TAD INCTR /BUMP RECORD COUNTER CLL IAC SNL DCA INCTR /RESTORE IF IT HASN'T OVERFLOWED SZL ISZ INEOF /SET END OF FILE SWITCH JMS I INHNDL /DO THE READ INCALL, 200 INBUFP, INBUF INREC, 0 JMP INERR /HANDLER ERROR INBREC, ISZ INREC /BUMP RECORD NUMBER TAD (-601 /SET CHAR COUNT DCA INCHCT TAD INJMPP /RESET THREE WAY JUMP SWITCH DCA INJMP TAD INBUFP /RESET BUFFER POINTER DCA INPTR JMP ICHAR+1 /GO AGAIN INERR, ISZ INEOF /EITHER EOF OR BADDIE SMA CLA JMP INBREC /END OF FILE, DO NEXT FILE JMP OFOO3 INJMP, HLT /3 WAY CHARACTER UUPACK SWITCH JMP ICHAR1 JMP ICHAR2 ICHAR3, TAD INJMPP /RESET JUMP SWITCH DCA INJMP TAD I INPTR AND (7400 /COMBINE THE HIGH ORDER BITS CLL RTR /OF THE TWO WORDS RTR TAD INTMP /TO FORM THE THIRD CHAR RTR RTR ISZ INPTR /BUMP WORD POINTER JMP ICHAR1+1 /DO SOME COMMON STUFF ICHAR2, TAD I INPTR /SAVE THE HIGH ORDER BITS AND (7400 DCA INTMP /FOR THE THIRD CHAR ISZ INPTR /GO TO THE SECOND WORD ICHAR1, TAD I INPTR /GET THE LOW 8 BITS AND (377 /AND I MEAN ONLY 8 !! DCA CHAR TAD CHAR TAD (-232 /IS IT ^Z (END OF FILE) SNA JMP GETNEW /YES, LOOK FOR THE NEXT FILE TAD (232-212 SNA JMP ICHAR+1 /IGNORE LINE FEEDS TAD (212-215 SNA JMP I ICHAR /RETURN ON CARRIAGE RETURN IAC SNA CLA JMP ICHAR+1 /IGNORE FORM FEEDS TAD CHAR ISZ ICHAR JMP I ICHAR /RETURN TO THE CALLING WORLD INTMP, 0 INFPTR, 7617 /POINTER TO INPUT FILE LIST INEOF, 1 INCHCT, INNEWF, -1 /FETCH HANDLER FOR NEXT FILE TAD (INDEVH+1 /THIS IS WHERE IT GOES DCA INHNDL CDF 10 TAD I INFPTR /GET NEXT INPUT FILE INFO CDF SNA JMP I INNEWF /NO MORE FILES CIF 10 JMS I INCALL /CALL MONITOR 1 /FETCH HANDLER INHNDL, 0 /ENTRY ADDR GOES HERE JMP OFOO3 CDF 10 TAD I INFPTR /GET LENGTH AND (7760 SZA /A ZERO HERE MEANS >=256 BLOCKS TAD (17 /PUT IN SOME MORE BITS CLL CML RTR RTR DCA INCTR /STORE LENGTH OF FILE ISZ INFPTR TAD I INFPTR /GET STARTING RECORD NUMBER DCA INREC ISZ INFPTR DCA INEOF /CLEAR EOF FLAG ISZ INNEWF CDF JMP I INNEWF INCTR, 0 INPTR, 0 /PUTNUM, TAD (PAGENO-1 /COPY THE NEW NUMBER / DCA X10 / TAD I NUM / ISZ NUM / DCA I X10 / TAD I NUM / ISZ NUM / DCA I X10 / TAD I NUM / ISZ NUM / DCA I X10 / JMP CRLF+1 RDECHO, /KEEP LINES WITH L.T. 6 CHARS OUT OF ISN COLUMN TAD (SEVCHR-1 DCA X12 RDECLP, TAD X12 CIA TAD X10 SNA CLA JMP ENDLIN /ONLY ECHO WHAT YOU READ TAD I X12 JMS I (OCHAR JMP RDECLP PAGE OUDUMP, 0 /BUMP THE DUFFER TAD OSIZE /ANY ROOM LEFT ? IAC SNA JMP OFOO3 DCA OSIZE /YES, ITS OK JMS I DEVH /WRITE 4200 /CONTROL WORD OUBUF /BUFFER POINTER OBLOCK, 0 /BLOCK NUMBER JMP OFOO3 ISZ OBLOCK /INCREMENT BLOCK NUMBER ISZ FILSIZ /AND FILE SIZE TAD OBLOCK-1 /SET BUFFER POINTER DCA OUPTR TAD (-200 /SET DOUBLE WORD COUNT DCA OUWDCT JMP I OUDUMP OCHAR, 0 /OUTPUT A CHAR TO THE RALF INPUT FILE AND (377 DCA OUTEMP /SAVE CHAR KSF /^C TEST JMP NOSTOP KRB AND (177 TAD (-3 SNA CLA JMP I (7605 /YES NOSTOP, ISZ OUJUMP /BUMP 3 WAY SWITCH OUJUMP, JMP . JMP CHAR1 JMP CHAR2 TAD OUTEMP /HIGH FOUR BITS GO INTO CLL RTL /THE HIGH ORDER BITS OF THE RTL /FIRST WORD OF THE TWO WORD PAIR AND (7400 /SEE NOTE * BELOW TAD I OUPOLD /COMBINE WITH OTHER BITS DCA I OUPOLD TAD OUTEMP /THE OTHER FOUR BITS OF THIS CHAR CLL RTR /GO INTO THE HIGH ORDER FOUR RTR /BITS OF THE SECOND WORD OF THE PAIR RAR AND (7400 TAD I OUPTR DCA I OUPTR TAD OUJMP /RESET 3 WAY BRANCH DCA OUJUMP ISZ OUPTR /BUMP BUFFER POINTER ISZ OUWDCT /AND DOUBLE WORD COUNTER JMP I OCHAR /BUFFER NOT FULL JMS OUDUMP /DUMP IT JMP I OCHAR CHAR2, TAD OUPTR /SAVE FIRST WORD POINTER DCA OUPOLD ISZ OUPTR /GO TO SECOND WORD CHAR1, TAD OUTEMP /STORE CHAR 1 OR 2 DCA I OUPTR JMP I OCHAR OUTEMP, 0 OUPOLD, 0 OUPTR, OUBUF OUJMP, JMP OUJUMP OUWDCT, -200 OSIZE, 0 ERRPTR, 5000 ERRCHK, 0 CDF 10 TAD I ERRPTR /ANY ERRORS FOR THIS LINE CDF CMA TAD LINENO SZA CLA JMP I ERRCHK /NO CLL CMA RAL /BACK UP POINTER TAD ERRPTR DCA ERRPTR TAD ERRPTR IAC DCA TEMP CDF 10 TAD I TEMP /GET CODE CDF CIA DCA TEMP /SAVE NEGATIVE TAD (ERRLST-1 DCA X10 FIND, TAD I X10 /LOOK FOR ERROR MESSAGE SZA TAD TEMP SNA CLA JMP .+3 ISZ X10 JMP FIND /SKIP POINTER WORD CLA CMA TAD I X10 DCA X10 /POINTER TO MESSAGE PMLOOP, TAD I X10 /GET TWO CHARS DCA TEMP TAD TEMP RTR RTR RTR JMS CONVRT /PRINT FIRST TAD TEMP JMS CONVRT /PRINT SECOND TAD TEMP AND (77 /END OF MESSAGE ? SZA CLA JMP PMLOOP /NO, LOOP JMS I (CRLF JMP ERRCHK+1 /SEE IF ANY MORE FOR THIS LINE RALFNM, FILENAME RALF.SV PAGE X304, 304 X305, 305 X7605, 7605 OFOO3, TAD X304 /FATAL ERROR IN PASS 3 JMS TTY TAD X305 JMS TTY JMP I X7605 TTY, 0 /PRINT ON TTY TLS TSF JMP .-1 CLA JMP I TTY /ERROR MESSAGES ERRLST, 0724;GT 1124;IT 0504;ED 2227;RW 0317;CO 0530;EX 2123;QS 2114;QL 1106;IF 0417;DO 2316;SN 2404;TD 0204;BD 2224;RT 2204;RD 2324;ST 0314;CL 1517;MO 1017;HO 1515;MM 2323;SS 1720;OP 0123;AS 0401;DA 0410;DH 1514;ML 0405;DE 0223;BS 1424;LT 1105;IE 2010;PH 1513;MK 1724;OT 2004;PD 1524;MT 0726;GV 1411;LI 0420;DP 0414;DL 0101;AA 2306;SF 0406;DF 1111;II 0;SYSERR SYSERR, TEXT 'UNDEFINED ERROR' II, TEXT 'ILLEGAL USE OF IF' GT, TEXT 'BAD GOTO STATEMENT' RW, TEXT 'BAD READ OR WRITE STATEMENT' CO, TEXT 'ARGS IN COMMON OR VAR IN TWO COMMONS OR SYNTAX BAD' IT, TEXT 'BAD IO LIST ELEMENT' EX, TEXT 'BAD EXTERNAL STMT' QS, TEXT 'SYNTAX ERROR IN EQUIVALENCE' QL, TEXT 'VARIABLE IS EQUIVALENCED MORE THAN ONCE' IF, TEXT 'THIS KIND OF STATEMENT NOT LEGAL AFTER LOGICAL IF' DO, TEXT 'BAD SYNTAX IN DO OR IMPLIED DO' SN, TEXT 'NOT LEGAL AS SUBROUTINE NAME' TD, TEXT 'SYNTAX ERROR IN TYPE STATEMENT' BD, TEXT 'DIMENSIONS TOO BIG, OR SYNTAX ERROR IN DIMENSION LIST' ED, TEXT 'ILLEGAL AS DO ENDING STATEMENT' RT, TEXT 'ATTEMPT TO RE-TYPE A VARIABLE' RD, TEXT 'ATTEMPT TO RE-DIMENSION A VARIABLE' ST, TEXT 'INTERNAL COMPILER ABORT NUMBER ONE' CL, TEXT 'ERROR IN COMPLEX LITERAL' MO, TEXT 'OPERAND EXPECTED, NONE PRESENT' HO, TEXT 'HOLLERITH COUNT WRONG, OR MISSING QUOTES' MM, TEXT 'MISMATCHED PARENTHESIS' SS, TEXT 'SUBSCRIPT OR ARGUMENT LIST ERROR' OP, TEXT 'ILLEGAL OPERATOR' AS, TEXT 'ASSIGN ???' DA, TEXT 'DATA STATEMENT ?' DH, TEXT 'HOLLERITH COUNT OR QUOTE ERROR IN DATA STATEMENT' ML, TEXT 'THIS LINE NUMBER IS ALREADY DEFINED' DE, TEXT "WRONG WAY TO END A DO LOOP" BS, TEXT 'ILLEGAL IN BLOCK DATA' LT, TEXT 'LINE TOO BIG' IE, TEXT 'INPUT FILE ERROR, TAKEN AS END STATEMENT' PH, TEXT 'THIS FUNCTION / SUBROUTINE STATEMENT IS UNACCEPTABLE' MK, TEXT 'YOU MISPELED A KEYWURD' OT, TEXT 'ILLEGAL OPERAND TYPE FOR THIS OPERATOR' PD, TEXT 'INTERNAL COMPILER ABORT NUMBER TWO' MT, TEXT "ILLEGAL VARIABLE TYPE MIXING" GV, TEXT 'VARIABLE IN ASSIGNED OR COMPUTED GOTO MUST BE INTEGER OR REAL' LI, TEXT 'EXPRESSION IN LOGICAL IF IS NOT TYPED LOGICAL' DP, TEXT 'DO PARAMETERS MUST BE INTEGER OR REAL' DL, TEXT "YOUR DATA AND VARIABLE LISTS ARE OF DIFFERENT LENGTHS" AA, TEXT 'SUBROUTINES MAY ONLY HAVE SIX ARGUMENTS THAT ARE DIMENSIONED' SF, TEXT 'BAD STATEMENT FUNCTION' DF, TEXT 'BAD DEFINE FILE' PAGEN, 1 PUTNUM, ISZ PAGEN /BUMP PAGE NUMBER TAD PAGEN TAD (-24 /LT 20? SMA CLA JMP OVER19 /YES TAD (-5 /NO JMS MOVE /MOVE IN NUMBER NUM, 0 PAGENO-1 TAD NUM TAD (5 DCA NUM /PT TO NEXT ONE JMP I (CRLF+1 TENS, 0 ONES, 0 KNT, 0 OVER19, DCA TENS /CONVERT TAD PAGEN /PAGE NUMBER TO ONES AND TENS O1, TAD (-12 /DIVIDE BY TEN SPA JMP .+3 ISZ TENS JMP O1 TAD (12 DCA ONES TAD TENS CLL RTL TAD (HIS-10-1 DCA HIP /POINT TO HIGH PART TAD ONES CLL RTL TAD ONES TAD (LOS-5-1 DCA LOP TAD (-4 JMS MOVE HIP, 0 PAGENO-1 TAD (-5 JMS MOVE LOP, 0 PAGENO+4-1 JMP I (CRLF+1 MOVE, 0 DCA KNT TAD I MOVE DCA X11 ISZ MOVE TAD I MOVE DCA X12 ISZ MOVE TAD I X11 DCA I X12 ISZ KNT JMP .-3 JMP I MOVE $ |
Added src/os8/uni/LANGUAGE/FORTRAN4/RALF.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 | / RALF, V62A / / / / / / / // / / / / /COPYRIGHT (C) 1974, 1975, 1977 /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. / / / / / / / RELOCATABLE ASSEMBLER FOR OS/8 FORTRAN IV / / / FPPASM BY HANK MAURER / RALF MODS BY JUD LEONARD / OS/8 FORTRAN MODS BY RICHIE LARY + MARTY HURLEY / NEW DATE ALGORITHUM PUT IN BY ED STEINBERGER / / THE FOLLOWING FORMULA GIVES THE NUM / OF USER SYMBOLS: / -(FREE+200[BASE8])/6[BASE10] / WHERE THE VALUE OF FREE IS FROM THE / RALF SYMBOL MAP / / IFNDEF RALF <RALF=1 /GO RELOCATABLE THEN> / / ASSEMBLE WITH PAL8-V9 WITH W SWITCH / SAVE AS: / .SAVE SYS RALF.SV ;200=2000 / / CHANGES FOR OS/78 AND OS/8 V3D BY P.T. / .CHANGED VERSION NUMBER TO 62 / .RALF NO LONGER GENERATES FAULTY RELOCATABLE IF: / 1.) THE ESD IS LONGER THAN ONE BLOCK, AND / 2.)LIST OUTPUT IS DIRECTED TO A 2-PAGE NON-SYSTEM HANDLER / / FLD0=0 FLD1=10 VNUM=62 PATCH="A /PATCH LEVEL A *3 VERS, VNUM /VERSION NUMBER OLDN3, 0 /TEMP FOR LOOKUP OTEMP, 0 /A COUPLE OF TEMPS THAT OCNT, 0 /DIDNT FIT INTO THEIR PAGE 0 X10, 0 X11, 0 X12, 0 X13, 0 X14, 0 OUTPTR, OUBUF-1 NEXT, FREE-1 CHRPTR, LINE-1 NCHARS, -1 /CHARACTER INPUT STUFF CPTMP, 0 NCTMP, 0 /USED TO SAVE CHAR POSITION LINSIZ, 0 /SIZE OF LINE FOR PRINTING STYPE, /SYMBOL TYPE CODE CHKSUM, 0 /FOR BINARY OUTPUT IFZERO RALF < LOCTR1, 0 /INITIAL LOCN CNTR FOR ABSOLUTE ASM LOCTR2, 200 > IFNZRO RALF < ESDNO, 2 /LAST ESD #. (#MAIN & BLANK COMMON DEFAULT) LOCTR1, 20 /HIGH LOCN CNTR WITH ESD (STARTS IN #MAIN) LOCTR2, 0 DPFLG, 0 > BASER, 4000 /BASE REGISTER SETTING 0 INDXR, 0 /INDEX LOCS: MUST FOLLOW BASER 0 EXPVAL, 0 /EXPRESSION VALUE 0 0 EXPDEF, 0 /=0 IF EXPR IS UNDEFINED EXPSW, 0 /FLAG=1 IF NO EXPR WORD1, 0 /TEMPORARY 2 WORD OPERAND WORD2, 0 FPPADR, 0 /ADDRESS FIELD FOR FPP INDEX INSTR 0 OPCODE, 0 /OPCODE OR PSEUDO-OP POINTER XFLAG, 0 /INDEX FLAG = 1 IF INDEX PRESENT XINCR, 1 /FLAG = 0 IF + LEGAL IN INDEX EXPR BUCKET, 0 /FIRST CHAR OF NAME NAME1, 0 /CHARS 2 AND 3 OF NAME NAME2, 0 /CHARS 4 AND 5 OF NAME NAME3, 0 /CHAR 6 OF NAME AND TYPE LASTOP, 0 /LAST OPERATOR ENCOUNTERRED IN EXPR PASSNO, -1 /PASS NUMBER ASMOF, 0 /SET NEGATIVE WHEN ASSEMBLY OFF PNCHOF, 0 /NON-ZERO TO SUPPRESS BINARY OUTPUT LISTSW, 1 /LIST SWITCH (1 ENABLES LISTING) OUTSWT, 0 /OUT SWITCH, =1 IF LINE ALREADY LISTED REPCNT, 0 /REPEAT COUNTER SCSWT, 0 /SEMICOLON SWITCH RADIX, 0 /RADIX FOR INTEGERS (0 IS OCTAL) LTEMP, -177 /TEMP USED BY LOOKUP EXTMP, 0 /TEMPS USED BY EXPR AND OTHERS EXTMP2, 0 EQUN, 0;0;0;0 /NAME ON LEFT OF EQUAL SIGN /NEXT TWO LOCS USED WITH EQUN BY DMPESD FPPSWT, 0 /1 WHHEN FINDING FPP ADR EXPR FPP2WD, 0 /SET BY EXPR TO FORCE 2 WD FMT FPPWD2, 0 /SET BY FPP2WD.OR.EXPTYP.EQ.0 LITRL, 0 /SET = 1 FOR LITERAL P0LIT, 177 CPLIT, 177 PAGEN, 0 ERRORS, 0 /ERROR COUNT PC, TTYOUT /OUTPUT ROUTINE OUFILE, 7573 /OUTPUT FILE LIST POINTER BFILE, 1 LPAGE1, 1 /INPUT FORMFEED COUNT LPAGE2, 0 /OUTPUT PAGE WITH RESPECT TO ABOVE LINPAG, -1 /LINES/PAGE COUNTER LINKSW, 0 /1 IF LINK GENERATED ON THIS LINE LINKS, /NO OF LINKS GENERATED ABREFS, 0 /NO OF ABSOLUTE REFERENCES ABSOP, 0 /POINTER-SWITCH FOR BINARY OUTPUT USR, 200 /CURRENT CALL ADDRESS FOR USR SYONLY, 0 /=0=LIST ONLY SMAP WHEN LIST FILE /IS SPECIFIED. ITS SET VIA SLASH S /=1=REGULAR NP17, 17 /** NP7700, 7700 OPX, 0 OP, ZBLOCK 6 ACX, 0 AC, ZBLOCK 6 M3, -3 BLINE, LINE-1 / PAGE / / CORE ALLOCATION IN HIGH FIELD 0 / CPLBUF=5100 /ACTUALLY AT 5200 P0LBUF=5200 /AND 5300, 1/2 PAGE EACH IFZERO RALF < INBUF=5400 > IFNZRO RALF < INBUF=6000 /AFTER PASS 1, MOVES TO 5400> OUBUF=6400 LINE=7000 /CURRENT INPUT LINE IN ASCII INDEVH=7200 /TENTATIVE INPUT DEVICE HANDLR ADDR OUDEVH=7400 /TENTATIVE OUTPUT HANDLER ADDR INRECS=2 INCTL=400 OUCTL=4200 / / COLLECT THE NEXT STATEMENT / ISZ .+2 REPLEN, JMP I .+1 REPLST, BEGIN /START AT 6000 IF CHAINED ELSE 6001 NEXTST, CDF FLD0 /JUST PRECAUTION TAD OUTSWT /IF NO OUTPUT FROM THIS LINE, SNA CLA TAD PASSNO /AND LISTING PASS SMA SZA CLA TAD LISTSW /AND LISTING ENABLED SNA CLA /PRINT THIS LINE NOW JMP START /ELSE GET NEXT JMS I [CRLF /PRINT CR/LF TAD (-6 DCA LTEMP /SPACE OVER JMS I [PRINT2 /12 SPACES ISZ LTEMP JMP .-2 JMS I (PRNTLN /THEN PRINT LINE START, JMS I [GETCHR /ANY MORE CHARS ? JMP NOTEG JMS I [ERMSG /EXTRA GARBAGE ON LAST LINE 0507 /*EG* NOTEG, TAD SCSWT /DID LAST LINE END WITH SEMICOLON ? SNA CLA JMP .+5 /NO DCA SCSWT /KILL SC SWITCH ISZ CHRPTR /SKIP OVER SEMICOLON ISZ NCHARS JMP ASMBL /DON'T READ A NEW LINE TAD REPCNT /IS THIS LINE TO BE REPEATED? SPA CLA JMP AGAIN /DO IT NEWLIN, TAD BLINE /RESET POINTER DCA CHRPTR TAD [-200 /LIMIT LINE SIZE DCA MAXLIN DCA OUTSWT /CLEAR OUTPUT SWITCH RDLOOP, JMS I (ICHAR /READ A CHAR TAD (-212 SNA JMP RDLOOP /IGNORE LINE FEEDS TAD (212-215 /END ON CR SNA JMP ENDLIN IAC SNA /FORM FEED? JMP FORMFD TAD (214 /FIX CHAR DCA I CHRPTR /SAVE IT ISZ MAXLIN /TEST FOR LINE TOO LONG JMP RDLOOP /PUT CHAR AWAY AND GET NEXT 1 JMS I (ICHAR /IGNORE ANOTHER CHAR TAD (-215 /UNLESS CR SZA CLA JMP .-3 JMS I [ERMSG /EXCESS LENGTH LINE 1424 /*LT* ENDLIN, TAD CHRPTR /FIND - NUMBER OF CHARS - 1 CMA TAD BLINE DCA NCHARS TAD REPCNT /0 BECOMES 0, CIA /BUT POS REP COUNT DCA REPCNT /ENABLES REPEAT TAD NCHARS /SAVE LENGTH DCA REPLEN TAD LISTSW /SAVE LISTING SWITCH DURING REPEAT DCA REPLST REASM, TAD NCHARS /SAVE SIZE OF LINE FOR PRINT DCA LINSIZ TAD BLINE DCA CHRPTR /SET POINTER ASMBL, TAD ASMOF /ARE WE INSIDE A CONDITIONAL SZA CLA JMP OFFIT /YES, AND THE COND WAS FALSE JMS I [GETCHR /LOOK FOR A CHARACTER JMP NEXTST TAD (-257 /IS IT SLASH ? SNA JMP NOASM /YES, COOL IT TAD [257-240 /IS IT BLANK OR TAB ? SZA CLA /YES, IGNORE JMS I [BACK1 /NO, PUT IT BACK JMP I (LUNAME /ASSEMBLE STMT FORMFD, ISZ LPAGE1 /BUMP FORM FEED COUNT DCA LPAGE2 /CLEAR SUB-PAGE COUNT CLA CMA DCA LINPAG /FORCE EJECT ON CRLF JMP RDLOOP OPENIT, CLA CMA /DECR COUNT, ANOTHER OPEN ANGLE TAD ASMOF DCA ASMOF OFFIT, ISZ NCHARS /MORE TO GO? JMP GETIT /YES NOASM, CLA CMA DCA NCHARS /DONT ASSEMBLE THIS LINE JMP NEXTST /(PREVENTING *EG* MESSAGE) GETIT, TAD I CHRPTR /PICK UP THE CHARACTER TAD (-274 /OPEN ANGLE BRACKET? SNA JMP OPENIT /YES, PUSH ONE LEVEL DOWN CLL RTR SNA CLA ISZ ASMOF /IF CLOSE, CHECK LEVEL JMP OFFIT /TRY FOR NEXT JMP ASMBL /RESUME WORK AGAIN, TAD REPLEN /WE NOW REPEAT THE SAME LINE DCA NCHARS DCA LISTSW /NO LISTING DURRING REPEAT ISZ REPCNT JMP REASM /ASSUMING COUNT STILL OK TAD REPLST /RESTORE LISTING DCA LISTSW JMP NEWLIN /GET NEXT LINE MAXLIN=LTEMP / TXERR, TEXT " ERRORS" TXELN= .-TXERR PAGE / / DIVIDE AC BY 3 / USEFUL IN FPP REFERENCES TO BASE / OVER3, 0 /DIVIDE AC BY THREE DCA EXTMP2 /MQ TAD (-15 /SET SHIFT COUNT DCA LTEMP DIVLUP, CLL /ZERO LINK TAD (-3 /SUBTRACT DIVISOR FROM AC SZL /IF AC>=3 SET LINK TO 1 JMP .+3 /OK, DONT RESTORE TAD (3 /TOO SMALL, RESTORE AC CLL /SET LINK BACK TO 0 DCA EXTMP /SAVE AC TAD EXTMP2 /ROTATE MQ-AC LEFT, PUT LINK IN MQ RAL DCA EXTMP2 /SAVE MQ TAD EXTMP /GET BACK AC RAL /COMPLETE SHIFT ISZ LTEMP /TEST COUNT JMP DIVLUP /KEEP GOING DCA EXTMP /THIS IS REMAINDER TAD EXTMP2 /RETURN QUOTIENT JMP I OVER3 / / INITIALIZE FOR OUTPUT / OUSETP, 0 TAD (OUCTL&3700 /BUFFER SIZE IN DBL WORDS CIA /NEGATE IT (PAL10 BLOWS) DCA OUDWCT TAD NOUBUF DCA OUPTR /INITIALIZE WORD POINTER TAD OUJMPE DCA OUJMP /INITIALIZE 3-WAY CHARACTER SWITCH JMP I OUSETP NOUBUF, OUBUF / / STORE CHARACTERS IN OUTPUT BUFFER / IN PS8 FORMAT (YOU KNOW, 3 CHARS / IN 2 WORDS THE WRONG WAY) / OCHAR, 0 AND (377 DCA OUTEMP TAD OUTINH SZA CLA /IS THERE AN OUTPUT FILE? JMP I OCHAR /NO - EXIT 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 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 2ND WORD FROM LO 4 BITS TAD OUJMPE DCA OUJMP /RESET SWITCH ISZ OUPTR ISZ OUDWCT /BUMP COUNTER EVERY 3 CHARS JMP OUCOMN TAD (OUCTL /LOAD CONTROL WORD FOR A FULL WRITE JMS I (OUTDMP /DUMP THE BUFFER 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, CDF JMP I OCHAR OUTEMP, 0 OUPOLD, 0 OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUTINH, 0 / / MOVE OUTPUT FILE NAME TO FIELD 0 / OFNAME, 0 TAD OUFILE DCA X10 TAD (OUFNAM-1 DCA X11 TAD (-4 DCA LTEMP CDF 10 TAD I X10 CDF 0 DCA I X11 ISZ LTEMP JMP .-5 JMP I OFNAME / / GET OUTPUT DEVICE CHARISTICS / OTYPE, 0 CDF 10 TAD I (7600 AND [17 TAD (DCB-1 DCA OTYPP TAD I OTYPP CDF 0 JMP I OTYPE OTYPP= OFNAME / / BASIC TITLE INFO / TITBUF, IFZERO RALF < TEXT "FLAP V" > IFNZRO RALF < TEXT "RALF V" > *.-1 VMTXT, 0;0;0 TITDAT, ZBLOCK 6 TEXT " PAGE" TITLEN= .-TITBUF PAGE / / PROCESS A STATEMENT / LUNAME, TAD CHRPTR /SAVE CHAR STUFF DCA CPTMP TAD NCHARS DCA NCTMP DCA LINKSW /CLEAR SWITCH JMS I [GETNAM /LOOK FOR NAME IFZERO RALF < JMP I (TRYSTR /COULD BE AN ORG> IFNZRO RALF < JMP I (GETEXP /NOT ONE OF OURS, I GUESS> JMS I [GETCHR /LOOK FOR COMMA JMP JSTONE /ITS JUST ONE SYMBOL TAD (-254 /COMMA TEST SZA JMP TRYEQU /NO COMMA, CHECK FOR EQUAL JMS I [LOOKUP /LOOK UP SYMBOL JMP DEFLBL /ITS UNDEFINED CLL RAR /VERIFY ADDR TYPE SZA CLA JMP MDERR /THAT'S A NO-NO TAD I X10 /CHECK LOCCTR AGAINST OLD DEFINITION CIA TAD LOCTR1 /FIRST UPPERR HALF SZA CLA JMP .+6 TAD I X10 CIA TAD LOCTR2 /THEN LOWER HALF SNA CLA JMP DEFIND MDERR, JMS I [ERMSG /MULTIPLY DEFINED 1504 /*MD* JMP I (ASMBL /FIELD IS OK DEFLBL, ISZ I LTEMP /SET TYPE TO 1 (USER ADDR) TAD LOCTR1 /PUT LOCATION COUNTER DCA I X10 /INTO VALUE TAD LOCTR2 DCA I X10 DEFIND, CDF FLD0 /GO LOOK FOR ANOTHER TAG JMP I (ASMBL TRYEQU, TAD (-21 /CHECK FOR EQUAL SIGN SZA JMP TRYBLK /NO, TRY BLANK TAD NAME1 DCA EQUN /SAVE 6 CHARACTER NAME TAD NAME2 DCA EQUN+1 TAD NAME3 DCA EQUN+2 TAD BUCKET DCA EQUN+3 JMS I [GETCHR /ALLOW BLANK AFTER = JMP EQUERR TAD [-240 SZA CLA JMS I [BACK1 /ANYTHING ELSE GOES BACK JMS I [EXPR /GET VALUE RIGHT OF EQUALS JMP EQUERR /BAD EQU TAD EQUN /RESTORE NAME DCA NAME1 TAD EQUN+1 DCA NAME2 TAD EQUN+2 DCA NAME3 TAD EQUN+3 DCA BUCKET JMS I [LOOKUP /LOOKUP SYMBOL JMP PUTVAL /A NEW SYMBOL CLL RAR SZA CLA JMP EQUERR /TYPE CONFLICT PUTVAL, TAD EXPVAL+1 /SAVE ADDRESS TYPE DCA I X10 TAD EXPVAL+2 DCA I X10 TAD I LTEMP /NOW GET TYPE WORD AND (7740 /ZERO OLD TYPE, PRESERVING FORCE BIT TAD EXPDEF /DEFINED BY RIGHT HAND SIDE DCA I LTEMP /RESTORE WORD CDF FLD0 JMP I [NEXTST /GO GET NEXT STMT EQUERR, JMS I [ERMSG /BAD EQU 0205 /*BE* JMP I [NEXTST TRYBLK, TAD (35 /CHECK FOR BLANK SNA /MATCH BLANK? JMP JSTONE /YES AND [77 JMS I [R6L DCA NAME3 /MAKE MODIFIED NAME OF IT JMS I [GETCHR /MODIFIER MUST BE FOLLOWED BY BLANK JMP I (GETEXP /LOOKS BAD TAD [-240 /GOT IT? SZA CLA JMP I (GETEXP /LET EXPR TELL HIM IF ITS WRONG JSTONE, TAD (33 /USE OUR INTERNAL SYMBOL TABLE JMS I [FIND /IS IT THERE? JMP I (GETEXP /NO, LOOK IN USER'S TAD OPCTBL /CREATE JUMP THRU TABLE DCA OPCJMP /SAVE IT TAD I X10 /PICK UP FIRST WORD OF VALUE DCA OPCODE /ITS AN OPCODE-MAYBE? CDF FLD0 OPCJMP, 0 /JUMP SOMEWHERE OPCTBL, JMP I .-4 PSEUDO /PSEUDO OPS PDP8MR /PDP8 MRI FPPMR /FPPMR FPPS1 /OTHER FPP OPCODES FPPS2 FPPS3 FPPS4 FPPS5 FPMRI /INDIRECT FPP MEM REF FPMRS /SHORT DIRECT MEM REF FPMRL /LONG DIRECT REF PDPOPR /8-MODE OPERATES REPETX, JMS I (ADRGET /EVALUATE REPEAT EXPR CLL CMA RAR /3777 AND EXPVAL+2 DCA REPCNT JMP I [NEXTST PAGE / GETEXP, CDF FLD0 TAD CPTMP /RESTORE CHARACTER POINTER DCA CHRPTR TAD NCTMP /TO JUST AFTER TAG (IF ANY) DCA NCHARS SX, DCA OPCODE JMS I [EXPR /TRY FOR AN EXPRESSION JMP BADEXP /IF NONE, ERROR IFNZRO RALF < JMS RELERR /BOMB IF NOT ABSOLUTE EXP> TAD EXPVAL+2 JMS I [OUTWRD JMP I [NEXTST /GO DO NEXT STMT IFNZRO RALF </IF EXPVAL IS RELOCATABLE, RELERR, 0 /GIVE ERROR MESSAGE TAD EXPVAL+1 /CAUTION: THIS ROUTINE IS /SOMETIMES CALLED WITH NON-ZERO AC AND [7770 /JUST ESD BITS SNA CLA JMP I RELERR /ITS ABSOLUTELY FINE TAD EXPVAL+1 AND [7 /REMOVE ESD DCA EXPVAL+1 JMS I [ERMSG 2205 /*RE* JMP I RELERR > / FPPMR, ISZ FPPSWT /SET FORCE ENABLE JMS FPADR TAD WORD1 /IF WAY OFF BASE, SNA TAD FPPWD2 /OR IF FORCED SNA TAD XFLAG /OR IF INDEXED SZA CLA JMP FORMT1 /USE LONG FORM TAD WORD2 CLL TAD (-600 /COMPLETE OFF-BASE CHECK SZL CLA JMP FORMT1 /USE LONG JMP FORMT2 FPPS2, JMS I (GETADR /COLLECT ADDRESS EXPR JMS IXMES /BUT DISALLOW INDEX JMP F2WD /PUT TWO WORDS OUT / IXMES, 0 TAD XFLAG /NO INDEX ALLOWED SNA CLA JMP I IXMES /HE'S COOL JMS I [ERMSG 1130 /*IX* JMP I IXMES FPMRL, JMS FPADR FORMT1, JMS I (FIXOPC F2WD, TAD FPPADR AND [7 /FIELD BITS TAD OPCODE /IN FIRST WORD FPDMP, IFZERO RALF < JMS I [OUTWRD TAD FPPADR+1 /LOW ADDRESS JMS I [OUTWRD JMP I [NEXTST /NEXT!> IFNZRO RALF < JMP I (OUTREL /DUMP TWO RELOCATABLE> FPMRS, JMS FPADR /COLLECT OPERAND JMS IXMES /ERROR IF INDEX GIVEN TAD WORD1 SZA CLA JMP BADEXP TAD WORD2 CLL TAD (-600 /DOES IT FIT? SNL CLA JMP FORMT2 BADEXP, JMS I [ERMSG 0230 /*BX* TAD OPCODE /BEST GUESS OF THE DESIRED OUTPUT JMS I [OUTWRD JMP I [NEXTST FPMRI, JMS FPADR TAD WORD1 SZA CLA JMP BADEXP /NOT EVEN CLOSE TAD WORD2 CLL TAD (-30 SZL CLA JMP BADEXP /GOTTA BE IN THE FIRST 10 FORMT3, JMS I (FIXOPC FORMT2, TAD WORD2 JMS I (OVER3 /BY 3 FOR BASE ADDRESS TAD [200 FPPS3, TAD OPCODE JMS I [OUTWRD /WHEW! JMP I [NEXTST FPPS1, JMS I (GETADR /GET ADDR, AND INDEX JMS I (FIXOPC /PUT OPCODE TOGETHER TAD FPPADR /GET ADDR EXTENSION AND [7 TAD OPCODE /WITH TOGETHER OPCODE AND (7377 /WITHDRAW ONE BIT JMP FPDMP /PUT IT OUT FPPS5, CLA IAC /DISALLOW INDEX INCR JMS I (GETADR /COLLECT ADDRESS AND INDEX IFNZRO RALF < TAD FPPADR AND [7770 /MUST BE ABSOLUTE SNA CLA JMP .+3 /OK JMS I [ERMSG 2205 /*RE*> TAD XFLAG SZA CLA /ANY INDEX? TAD EXPVAL+2 AND [7 /STRIP OFF ESD BITS TAD OPCODE JMS I [OUTWRD /DUMP THAT TAD FPPADR+1 JMS I [OUTWRD /NOW LOW 12 BITS JMP I [NEXTST / FPADR, 0 JMS I (GETADR /COLLECT ADDRESS AND INDEX TAD BASER+1 CIA STL TAD FPPADR+1 DCA WORD2 /GET ADDRESS RELATIVE TO BASE RAL TAD BASER CIA TAD FPPADR DCA WORD1 JMP I FPADR PAGE / PSEUDO, JMP I OPCODE /DISPATCH TO APPROPRIATE HNDLR / IFZERO RALF < / / ASSEMBLE VARIOUS INSTRUCTION TYPES / PDP8MR, TAD CHRPTR /SAVE POSITION DCA CPTMP TAD NCHARS DCA NCTMP /SAVE COUNT JMS I [GETCHR /LOOK FOR SPACE "I" JMP GETMR /WILL GIVE BX ERROR TAD (-"I /IS IT I? SNA CLA /IF NOT, FORGET IT JMS I [GETCHR /MUST BE FOLLOWED BY SPACE JMP NOTIND TAD [-240 SZA CLA JMP NOTIND /SOMETHING ELSE TAD OPCODE /PUT INDIRECT INTO OPCODE TAD (400 DCA OPCODE GETMR, JMS ADRGET /PICK UP ADDRESS FIELD TAD EXPVAL+2 /CHECK PAGE OF ADDRESS AND [7600 SNA JMP PAGEZ /ITS IN PAGE 0 CIA TAD LOCTR2 /COMPARE WITH CURRENT PAGE AND [7600 SNA CLA JMP THSPAG /OK, ITS THIS PAGE TAD OPCODE /CAN WE USE A LINK ? AND (400 /IS INDIRECT BIT OFF ? SNA CLA JMP I (MAKLNK /YES, GO MAKE LINK JMS I [ERMSG /NOPE, ITS AN ILLEGAL REFERENCE 1122 /*IR* THSPAG, TAD EXPVAL+2 /GET ADDRESS AND [177 /LOWER 7 BITS TAD [200 /PUT IN PAGE BIT SKP PAGEZ, TAD EXPVAL+2 /GET ADDRESS (UPPER 5 BITS ZERO) TAD OPCODE /PLUS OPCODE JMS I [OUTWRD /OUTPUT WORD JMP I [NEXTST NOTIND, TAD CPTMP /RESTORE CHAR POINTER DCA CHRPTR TAD NCTMP DCA NCHARS JMP GETMR /NOT AN INDIRECT> FPPS4, JMS ADRGET /GET INDEX REG EXPRESSION IFZERO RALF < JMS LITERR /CAN'T ALLOW LITERAL> JMS SUBX /GET RELATIVE INDEX VALUE TAD EXPVAL+2 /GET LOWER 3 BITS AND [7 /OF INDEX REG EXPR TAD OPCODE /WITH OPCODE JMS I [OUTWRD /OUT JMP I [NEXTST ADRGET, 0 /GET ADDRESS EXPR AND CHECK TYPE JMS I [EXPR /GET EXPR JMS I [ERMSG /BAD ADDR EXPR 0230 /*BX* JMP I ADRGET IFZERO RALF < LITERR, 0 /GIVE ERROR IF LITERAL TAD LITRL SNA CLA JMP I LITERR JMS I [ERMSG 1114 /*IL* JMP I LITERR > IFNZRO RALF < PDP8MR, JMS ADRGET JMP I (CHCKMR /V.56 > GETADR, 0 /GET ADDR, INDEX DCA XITEMP /SAVE INDEX INCREMENT SWITCH JMS ADRGET /GET ADDR DCA FPPSWT /KILL FPP SWITCH IFZERO RALF < JMS LITERR /DISALLOW LITERALS> TAD EXPDEF /IF EXPR WAS UNDEFINED SNA CLA IAC /OR FORCE BIT WAS SET TAD FPP2WD DCA FPPWD2 /FORCE 2 WORD FORMAT DCA XFLAG /ZERO INDEX SWT TAD EXPVAL+1 /SAVE ADDRESS VALUE DCA FPPADR TAD EXPVAL+2 DCA FPPADR+1 JMS I [GETCHR /LOOK FOR COMMA JMP I GETADR /NO INDEX TAD (-254 SZA CLA JMS I [BACK1 /WILL CAUSE A BX ERROR ISZ XFLAG /SET INDEX SWITCH TAD XITEMP /SET INDEX INCREMENT SWITCH DCA XINCR JMS ADRGET ISZ XINCR /CLEAR INDEX INCREMENT SWITCH IFZERO RALF < JMS LITERR > JMS SUBX /CALCULATE INDEX NO JMP I GETADR XITEMP, SUBX, 0 TAD INDXR+1 /CHECK FOR INDEX IN RANGE STL CIA TAD EXPVAL+2 DCA EXPVAL+2 RAL TAD INDXR CIA TAD EXPVAL+1 SZA CLA JMP BIERR TAD EXPVAL+2 CLL TAD [-10 SZL CLA BIERR, JMS I [ERMSG 0211 /*BI* JMP I SUBX IFNZRO RALF < / / AT END OF PASS, / CLEAR LENGTHS OF ALL SECTIONS / CLRSCT, 0 TAD (PNDL+3 DCA LTEMP /POINT TO USER SYMBOL SPACE CDF FLD1 CSLOOP, TAD I LTEMP /GET TYPE AND [37 /STRIP TO TYPE ONLY TAD (-3 SPA CLA /IS IT COMMON OR SECTION? JMP NOTSCT /NO, PASS IT ISZ LTEMP /BUMP POINTER TO VALUE TAD I LTEMP AND [7770 /SAVE ESD NUMBER DCA I LTEMP ISZ LTEMP DCA I LTEMP /CLEAR LOW ORDER CLA CLL CMA RAL /-2 NOTSCT, TAD (6 /BUMP POINTER TAD LTEMP /TO NEXT SYMBOL DCA LTEMP TAD NEXT /COMPARE END OF SYMBOL TABLE CIA CLL TAD LTEMP SNL CLA JMP CSLOOP /MORE TO GO CDF FLD0 JMP I CLRSCT /THAS ALL> / / IFNZRO RALF < / / ENSURE BOTH SYMBOL AND SUB-EXPR ARE ABSOLUTE / NOREL, 0 TAD WORD1 /IS SYMBOL RELOCATABLE? AND [7770 /TEST ESD BITS SZA CLA STL RAR /IF SO, FORCE ERROR JMS I (RELERR /TEST SUB EXPR JMP I NOREL DPCHKX, CLA CLL CML RAR /SET DPFLG, MODULE NEEDS DCA DPFLG /DP HARDWARE JMP I [NEXTST / SET BASE AND INDEX LOCS INDXX, CLA STL RTL /INDXR MUST JUST FOLLOW BASER BASEX, TAD (BASER-1 /POINT TO VALUE TO BE SET DCA X12 /HOPEFULLY UNUSED XR JMS I (ADRGET /COLLECT EXPRESSION TAD EXPVAL+1 DCA I X12 /HIGH ORDER AND ESD TAD EXPVAL+2 DCA I X12 /LOW ORDER JMP I [NEXTST >/THIS CONDITIONAL SASSEMBLY WAS /EXPANDED TO INCLUDE INDXX ON THIS PAGE. IT IS ALSO /COND. ASSEMBLED ON ANOTHER PAGE FOR FLAP. DELFIL, 0 TAD [7600 DCA OUFILE JMS I [OFNAME CLA IAC CIF 10 JMS I USR 4 OUFNAM 0 NOP JMP I DELFIL PAGE / / PRINT THE CURRENT LINE IF NOT ALREADY DONE / PRNTLN, 0 /PRINT THE LINE TAD OUTSWT /HAS THE LINE BEEN PRINTED YET? SZA CLA JMP I PRNTLN /YES, COOL IT ISZ OUTSWT /SET SWITCH TAD BLINE /POINTER TO LINE DCA X13 DCA CRLF /CLEAR POSITION COUNT JMP PRLTST /IN CASE OF EMPTY LINE PRLNXT, TAD I X13 /GET A CHAR TAD (-211 /WATCH OUT FOR TAB SNA JMP TABIT /CONVERT TO BLANKS TAD (211 /RESTORE ISZ CRLF /BUMP POSITION COUNT JMS I PC /PRINT IT PRLTST, ISZ LINSIZ /CHECK COUNT JMP PRLNXT JMP I PRNTLN TABIT, TAD [240 /REPLACE TAB WITH BLANKS ISZ CRLF JMS I PC TAD CRLF AND [7 SZA CLA JMP TABIT JMP PRLTST / / GO TO NEXT LINE / CRLF, 0 CLA TAD (215 JMS I PC /PRINT A CHAR TAD (212 JMS I PC ISZ LINPAG /FULL PAGE? JMP I CRLF /NO CLA CMA DCA LINPAG / / NEW PAGE, WITH HEADING AND PAGE NO / TAD PASSNO /IF NOT LISTING PASS SMA SZA CLA TAD LISTSW /OR IF NOT LISTING, SNA CLA JMP I CRLF /DO NOT EJECT TAD RFORMF SZA /DON'T F.F. FIRST TIME JMS I PC /TOP OF PAGE TAD (214 DCA RFORMF JMS I (PRTXT /PRINT HEADING TITBUF-1 -TITLEN TAD LPAGE1 /FORM FEED COUNT JMS I (DECOUT TAD LPAGE2 SNA CLA JMP .+5 /NO SUB PAGE IF 0 TAD (255 JMS I PC TAD LPAGE2 JMS I (DECOUT ISZ LPAGE2 TAD (215 /FOR BH JMS I PC TAD (212 JMS I PC TAD (-71 /RESET LINE COUNTER DCA LINPAG JMP CRLF+1 /GIVE ANOTHER CRLF RFORMF, 0 / / PRINT TEXT / PRTXT, 0 TAD I PRTXT DCA X13 ISZ PRTXT TAD I PRTXT DCA PRTTMP ISZ PRTXT TAD I X13 JMS PRINT2 ISZ PRTTMP JMP .-3 JMP I PRTXT PRTTMP= PRNTLN / PRINT2, 0 DCA P2 TAD P2 JMS I [R6R JMS P1 TAD P2 JMS P1 JMP I PRINT2 / P1, 0 AND [77 SNA JMP .+4 /PRINT ZERO AS BLANK TAD (-40 /TEST ABOVE OR BELOW 300 SPA TAD [100 /ABOVE, MAKE 301 TO 337 TAD [240 /IF BELOW, MAKE 240 TO 277 JMS I PC /PRINT IT, WHATEVER IT IS JMP I P1 / TTYOUT, 0 TLS TSF JMP .-1 TTYCLA, JMS I (CKCTC /CHECK FOR ^C - AC CONTAINS DIFFERENCE TAD (-14 /CTRL/O SZA CLA JMP I TTYOUT TAD .+2 DCA TTYOUT+1 JMP I TTYOUT / P2, 0 / IFZERO RALF < TXLNK, TEXT " LINKS" TXLLN= .-TXLNK > IFNZRO RALF < TXABR, TEXT " ABS REFS" TXALN= .-TXABR > PAGE / / GET AND EVALUATE AN EXPRESSION / EXPR, 0 /GET EXPRESSION DCA EXPVAL /ZERO EXPR VALUE DCA EXPVAL+1 DCA EXPVAL+2 CLA IAC DCA EXPDEF /AND TYPE CLA IAC /SET EXPR SWITCH TO NO EXPR DCA EXPSW DCA FPP2WD /SET FORCE SWITCH OFF CLA IAC /SET LASTOP TO + DCA LASTOP IFZERO RALF < JMS I (CHKLIT /GO CHECK FOR LITERAL> JMS I (GETSGN /IGNORE +, BUMP LASTOP IF - SYMBOL, JMS I [GETNAM /NOW PICK UP NAME JMP NOSYM /NONE, TRY OTHER JMS I [LOOKUP /LOOK IT UP JMP UNDEF /A NEW ONE IFZERO RALF < JMP ADR /YES > IFNZRO RALF < CLL RAR SNA JMP ADR SCTN, TAD I LTEMP /GET TYPE AND (40 /FORCE BIT SZA CLA ISZ FPP2WD /SET FORCE EXPR SW TAD I X10 /GET ESD FROM SYMBOL AND [7770 /ESD ONLY DCA WORD1 /INTERNALLY, SYMBOL VAL IS ZERO JMP CLR2 /SO CLEAR WORD 2> NOTDOT, TAD (256-242 /IS IT DBL QUOTE? SZA CLA JMP ENDEXP ISZ NCHARS /IS THERE ANOTHER CHAR? JMP ISQUOT /YES, USE IT ENDEXP, JMS I [BACK1 /PUT IT BACK TAD EXPSW /WAS THERE ANY EXPRESSION AT ALL? SZA CLA JMP BAD /NO, DON'T SKIP IFZERO RALF < TAD LITRL /WAS IT A LITERAL REF? SZA CLA JMS I (CRLIT /YES, STICK IT IN THE POOL> TAD LASTOP /TRAILING OPERATOR? SNA JMP OKEXP /NO, ALL IS FINE CLL RAR /IF PLUS OPERATOR TAD XINCR /AND THATS LEGAL SNA CLA OKEXP, ISZ EXPR /GOOD EXPR, BUMP RETURN BAD, JMS CKCTC CLA JMP I EXPR /AND RETURN / NOSYM, JMS I (NUMBER /LOOK FOR A NUMBER JMP ADREXP /USE NUMBER JMS I [GETCHR /NOT A NUMBER, GET A CHAR JMP ENDEXP+1 /NONE LEFT, END TAD (-256 /IS IT "." ? SZA JMP NOTDOT /NO, TRY FOR QUOTE TAD LOCTR1 /THIS WAS LOC SYMBOL DCA WORD1 /PUT VALUE INTO WORD1,2 TAD LOCTR2 JMP CLR2 /AND USE VALUE ISQUOT, DCA WORD1 TAD I CHRPTR JMP CLR2 CKCTC, 0 CLA KSF /IF NOTHING AT THE KEYBOARD, JMP I CKCTC /RETURN TAD [200 KRS /ELSE, LOOK AT IT TAD (-203 /IS IT CTRL/C? SNA JMP I [7600 /GO TO MOMMA JMP I CKCTC ADR, TAD I LTEMP /CHECK FORCE BIT FOR THIS SYMBOL AND (40 SZA CLA ISZ FPP2WD /AND SET SWITCH IF BIT ON TAD I X10 /GET FIRST WORD OF VALUE ONE, DCA WORD1 /SINGLE WORD SYMBOL, HIGH=0 TAD I X10 /GET REST OF SYMBOL CLR2, DCA WORD2 CDF FLD0 /FIX FIELD ADREXP, DCA EXPSW /KILL FIRST TIME SWITCH TAD LASTOP /PICK UP LAST OPERATOR TAD ADROP /MAKE A JMP I DCA .+1 0 /DO IT ADROP, JMP I . ADRADD ADRSUB ADRMUL ADRDIV ADRAND ADROR ADROR UNDEF, TAD FPPSWT /IS THIS AN FPP ADDR ? SNA CLA JMP .+5 /NO, SKIP AROUND TAD I LTEMP /TURN ON FORCE BIT AND (7737 /FOR THIS SYMBOL TAD (40 DCA I LTEMP DCA EXPDEF /SET TYPE TO UNDEFINED CDF FLD0 /FIX FIELD DCA EXPSW /KILL FIRST TIME SWITCH JMS I [ERMSG 2523 /*US* OPR8R, TAD (OPR8RS-1 /SET POINTER DCA X11 /TO OPERATOR TABLE DCA LASTOP /ZERO LASTOP JMS I [GETCHR /GET CHAR JMP ENDEXP+1 /NONE, DONE DCA EXTMP /SAVE IT FINDOP, ISZ LASTOP TAD I X11 /GET NEXT LIST ENTRY SNA JMP NOOPR /ZERO IS END OF LIST TAD EXTMP /COMPARE SZA CLA JMP FINDOP /LOOP JMP SYMBOL /LOOK FOR OPERAND NOOPR, DCA LASTOP /NO MATCH FOUND JMP ENDEXP /PUT IT BACK PAGE ADRADD, IFNZRO RALF < TAD WORD1 AND [7770 /IF THIS SYMBOL IS RELOCATABLE, SZA CLA /CHECK FOR EXPR VALIDITY JMS I (RELERR > TAD EXPVAL+2 /ADD FOR 15 BIT ADDRESS CLL /ZERO LINK TAD WORD2 /ADD LOW WORDS DCA EXPVAL+2 /SAVE RESULT RAL /PUT CARRY INTO BIT 11 TAD WORD1 /ORDER WORDS JMP ADRASX /LOOK FOR OPERATOR ADRSUB, IFNZRO RALF < TAD WORD1 /IF SYMBOL IS RELOCATABLE AND [7770 /WE MUST COMPARE SECTIONS CIA /IF EQUAL, EXPR BECOMES ABSOLUTE SNA /ELSE, EXPR IS ILLEGAL JMP .+5 /OK, USE EXPVAL ESD JMS I (RELERR /COMPARE: AC DELIBERATELY NON-ZERO TAD EXPVAL+1 AND [7 /IF WORD RELOCATABLE, EXP IS ABS DCA EXPVAL+1 > TAD WORD2 /SUBTR LOW 12 BITS CLL CML CIA TAD EXPVAL+2 DCA EXPVAL+2 /SAVE LOW HALF RAL TAD WORD1 /SUBTRACT HIGH HALF CIA AND [7 /DO NOT SUBTR ESD'S ADRASX, TAD EXPVAL+1 AND (7767 /PREVENT CARRY INTO BIT 8 ADRASY, DCA EXPVAL+1 /SAVE HIGH HALF JMP I (OPR8R /GET OPERATOR /INDXX HERE FOR FLAP IFZERO RALF < / SET BASE AND INDEX LOCS INDXX, CLA STL RTL /INDXR MUST JUST FOLLOW BASER BASEX, TAD (BASER-1 /POINT TO VALUE TO BE SET DCA X12 /HOPEFULLY UNUSED XR JMS I (ADRGET /COLLECT EXPRESSION TAD EXPVAL+1 DCA I X12 /HIGH ORDER AND ESD TAD EXPVAL+2 DCA I X12 /LOW ORDER JMP I [NEXTST > ADRAND, TAD WORD1 /AND AND EXPVAL+1 /HIGH AND [7 /3 BITS DCA EXPVAL+1 /HALF TAD WORD2 /THEN AND EXPVAL+2 /LOW JMP ADRAOX ADROR, TAD WORD1 /OR IS PERFORMED BY CMA /SETTING THE BITS AND EXPVAL+1 /THAT ARE ON IN B AND NOT ON IN A TAD WORD1 /AND THEN SETTING THE BITS AND [7 DCA EXPVAL+1 /THAT ARE ON IN A TAD WORD2 CMA AND EXPVAL+2 TAD WORD2 ADRAOX, DCA EXPVAL+2 IFNZRO RALF < JMS I (NOREL /**> JMP I (OPR8R /GET NEXT OPERATOR / ADRMUL, TAD WORD2 /**RL CODE CIA DCA EXPVAL+1 /MULT BY TAD EXPVAL+2 /REPEATED ADDITIONS ISZ EXPVAL+1 JMP .-2 JMP ADRAOX ADRDIV, DCA WORD1 DCA EXPVAL+1 TAD WORD2 SNA CLA JMP DIVERR TAD EXPVAL+2 CIA CLL TAD WORD2 SZL JMP .+3 /DIVIDE BY ISZ WORD1 /COUNTING SUBTRACTIONS JMP .-4 CLA TAD WORD1 JMP ADRAOX DIVERR, JMS I [ERMSG 0626 /*DV* JMP I (OPR8R /CONTINUE PDPOPR, TAD CHRPTR DCA CPTMP TAD NCHARS DCA NCTMP JMS I [GETNAM /LOOK FOR ANOTHER MICRO-INST JMP TRYEXP /NONE TAD (33 /USE INTERNAL TABLE JMS I [FIND /IS IT THERE ? JMP TRYEXP /NO TAD (-PDPOP /IS IT AN OPERATE ? SZA CLA JMP TRYEXP /NO TAD I X10 /GET VALUE CDF FLD0 DCA EXPVAL+2 PDPOR, TAD EXPVAL+2 CMA /OR THEM TOGETHER AND OPCODE TAD EXPVAL+2 DCA OPCODE JMS I [GETCHR /MORE CHARS ? JMP I (FPPS3 /NO-DONE TAD [-240 /BLANK ? SNA CLA JMP PDPOPR /YES-PROCESS NEXT JMP I (BADEXP TRYEXP, CDF FLD0 TAD CPTMP DCA CHRPTR TAD NCTMP DCA NCHARS ISZ NCTMP SKP JMP I (FPPS3 JMS I [EXPR JMP I (BADEXP JMP PDPOR TXSYM, TEXT " SYMBOLS," TXSLN=.-TXSYM PAGE IFZERO RALF < / / LITERAL THINGS / CHKLIT, 0 /CHECK FOR LITERAL DCA PAGENO /ZERO PAGE NUMBER DCA LITRL JMS I [GETCHR /GET CHARACTER JMP I CHKLIT /NO LITERAL TAD (-250 /CHECK FOR ( SNA ISZ PAGENO /CURRENT PAGE LITERAL SZA /SKIP IF ALREADY ZERO TAD (-63 /CHECK FOR [ SNA ISZ LITRL /SET SWITCH SZA CLA JMS I [BACK1 /PUT BACK NON ([ JMP I CHKLIT / / CREATE A LINK FOR OFF-PAGE REFERENCE / MAKLNK, TAD (THSPAG /PROPER RETURN ADDR DCA CRLIT TAD OPCODE /SET INDIRECT BIT TAD (400 DCA OPCODE CLA IAC DCA PAGENO /SET INDICATOR ISZ LINKS /COUNT ANOTHER LINK GENERATED ISZ LINKSW /SET SWITCH FOR APOSTROPHE OUTPUT JMP NOTP0 CRLIT, 0 /CREATE LITERAL /VALUE:EXPVAL, IN PAGE:PAGENO TAD PAGENO /CHECK FOR PAGE 0 SNA CLA JMP ISP0 /PAGE 0 LITERAL NOTP0, TAD (CPLBUF /SET PTR TO LITERAL BUFFER DCA LITBAS TAD LOCTR2 /CHECK FOR LIT BUFFER FULL AND [100 SNA CLA JMP DOLIT-1 /USE 77 AS LIMIT TAD LOCTR2 AND [177 JMP DOLIT /USE CURRENT ADDR AS LIMIT ISP0, TAD (P0LBUF /USE PAGE 0 LIT BUFFER DCA LITBAS TAD [77 /ASSUME FIRST 64 WORDS USED DOLIT, DCA NWUSED TAD PAGENO /GET POINTER TO TAD [P0LIT /LITERAL BOUNDARY DCA XPAGE TAD I XPAGE /DISPLACEMENT OF LIT BUFR - 1 DCA LITPTR /INTO LITPTR NOTIT, TAD LITPTR /POINTER+SIZE TAD (-177 /SHOULD BE LESS THAN 177 SMA CLA JMP NEWLIT /ENTER NEW LITERAL TAD LITPTR /NOW GET POINTER TAD LITBAS /TO TABLE DCA X11 /FOR COMPARISON ISZ LITPTR /INCREMENT POINTER TAD I X11 /GET WORD OF LITERAL CIA TAD EXPVAL+2 /COMPARE PROTOTYPE SZA CLA JMP NOTIT /NOT IT, SLIDE POINTER AND RETRY LITADR, TAD PAGENO /PAGE 0 ? SZA CLA TAD LOCTR2 /NO, CURRENT PAGE, GET ADDRESS AND [7600 TAD LITPTR /PLUS PAGE DISPLACEMENT DCA EXPVAL+2 /INTO VALUE TAD LOCTR1 RETLIT, DCA EXPVAL+1 JMP I CRLIT NEWLIT, CLA CMA TAD I XPAGE /MOVE LITERAL BOUNDARY DOWN DCA X10 /ADDRESS OF NEW LITERAL TAD NWUSED /CHECK FOR PAGE OVERFULL CIA TAD X10 SMA CLA JMP .+5 /NOT FULL JMS I [ERMSG /*PO* 2017 DCA EXPVAL+2 /ZERO ADDRESS JMP RETLIT TAD X10 DCA I XPAGE TAD I XPAGE /SET UP POINTER FOR MOVE TAD LITBAS DCA X10 TAD EXPVAL+2 /MOVE LITERAL IN DCA I X10 TAD I XPAGE /SET UP LITERAL ADDRESS IAC DCA LITPTR JMP LITADR /RETURN LITERAL ADDRESS LITBAS, 0 NWUSED, 0 LITPTR, 0 PAGENO, 0 XPAGE, 0 PAGE /> / / FIND SYMBOL TABLE ENTRY / FOR THE SYMBOL IN BUCKET AND NAME 1, 2, 3 / SKIP IF FOUND WITH TYPE IN AC / FIND, 0 /SYMBOL TABLE LOOKUP TAD BUCKET /GET BUCKET ADDRESS CDF FLD1 /GO TO FIELD 1 LOOK, DCA OLDN3 /THIS IS PTR OF PREV ENTRY TAD I OLDN3 /THIS IS ADR OF NEXT ENTRY SNA /IF ZERO, THEN JMP I FIND /IT AIN'T HERE DCA X10 /SAVE NEXT NAME PTR TAD NAME1 /COMPARE NAMES CIA CLL TAD I X10 /WORD 1 SZA CLA JMP NOTSAM TAD NAME2 CIA CLL TAD I X10 /WORD2 SZA CLA JMP NOTSAM TAD NAME3 CIA CLL TAD I X10 /COMPARE LAST CHAR AND [7700 /HIGH HALF ONLY SZA CLA JMP NOTSAM ISZ FIND /IF FOUND BUMP RETURN TAD X10 DCA LTEMP /ADDR OF TYPE WORD TAD I LTEMP /GET TYPE INTO AC AND [37 /WITHOUT FORCE BIT JMP I FIND /RETURN NOTSAM, SZL CLA /IS NAME 1,2,3 .LT. ENTRY JMP I FIND /YES, IT ISN'T HERE TAD I OLDN3 /GET ADDR OF LINK INTO AC JMP LOOK /LOOP / / FIND SYMBOL, OR IF NOT THERE, CREATE ENTRY FOR IT / LOOKUP, 0 JMS FIND JMP .+4 SZA ISZ LOOKUP /SKIP RETURN IF DEFINED JMP I LOOKUP /RETURN TYPE CODE TAD I OLDN3 /GET FORWARD LINK TO DCA I NEXT /NEXT ENTRY INTO NEW ENTRY TAD NEXT /PUT FORWARD LINK TO NEW DCA I OLDN3 /ENTRY INTO PREVIOUS ENTRY TAD NAME1 /PUT IN NAME DCA I NEXT TAD NAME2 DCA I NEXT TAD NAME3 DCA I NEXT TAD NEXT /X10=NEXT DCA X10 TAD NEXT /LTEMP=NEXT DCA LTEMP DCA I NEXT /INITIAL VALUE IS ZERO DCA I NEXT TAD NEXT /CHECK FOR TABLE FULL CLL TAD [200 /GONNA OVERFLO PS8? SNL CLA JMP I LOOKUP /NO PROBLEMS, RETURN (NO SKIP) JMS I [ERMSG1 2324 /*ST* / / COLLECT AN INTEGER IN THE CURRENT RADIX / NUMBER, 0 /GET INTEGER NUMBER (NO SIGN) DCA NSWTCH /CLEAR SWITCH DCA NOFLO /CLEAR OVRFLO SW DCA WORD1 /CLEAR 24 BIT NUMBER DCA WORD2 NUMLUP, JMS I (DIGIT JMP NODGT /TOO BAD DCA NUM /YES, SAVE IT TAD WORD1 /SAVE CURRENT VALUE DCA NUM1 /OF NUMBER TAD WORD2 DCA NUM2 JMS SHIFT /SHIFT WORD1,2, LEFT 1 (MULT BY 2) JMS SHIFT /DO IT AGAIN (MULT BY 4) TAD RADIX /LOOK AT RADIX (1=DECIMAL) SNA CLA JMP OCTNUM /ITS OCTAL CLL /DECIMAL, ADD IN NUMBER TAD NUM2 TAD WORD2 /THUS MULTIPLYING BY 5 DCA WORD2 RAL TAD NUM1 TAD WORD1 DCA WORD1 JMP ADDDGT OCTNUM, TAD NUM AND [7770 /CHECK FOR 8 OR 9 SZA CLA ISZ NOFLO /SET ERROR FLAG ADDDGT, JMS SHIFT /SHIFT LEFT 1 AGAIN, THUS TAD WORD2 /MULTIPLYING BY 8 OR 10 CLL /THEN ADD IN NEW DIGIT TAD NUM DCA WORD2 RAL TAD WORD1 DCA WORD1 SZL /BEWARE OF OVERFLO ISZ NOFLO JMP NUMLUP /LOOP NODGT, TAD NSWTCH /WAS THERE A NUMBER SNA CLA ISZ NUMBER /NO, SKIP TAD WORD1 AND [7770 /CHECK FOR MORE THAN 15 BITS SNA TAD NOFLO /OR GROSS OVERFLOW SNA CLA JMP I NUMBER /ALL GREEN JMS I [ERMSG 1605 /*NE* JMP I NUMBER /RETURN NOFLO= LOOKUP /ZERO IF NO ERRORS NUM= FIND NUM1= EXTMP NUM2= EXTMP2 NSWTCH, /ZERO IF NO DIGITS SHIFT, 0 /SHIFT DOUBLE WORD LEFT 1 TAD WORD2 CLL RAL DCA WORD2 TAD WORD1 RAL DCA WORD1 SZL /IF BIT SHIFTED FROM HI WORD, ISZ NOFLO /SET ERROR FLAG JMP I SHIFT PAGE / / BACK UP GETCHR POINTERS, / WE DON'T WANT THIS ONE / BACK1, 0 CLA CMA /BACKUP COUNT TAD NCHARS DCA NCHARS CLA CMA /AND POINTER TAD CHRPTR DCA CHRPTR JMP I BACK1 / / GET NEXT CHAR FROM LINE BUFFER / FOR ASSEMBLY PURPOSES ONLY / SKIP UNLESS END OF LINE (CR, ;, OR /) / GETCHR, 0 JMS GETAC GETSKP, ISZ GETCHR /SKIP RETURN JMP I GETCHR BLANK, JMS GETAC /COME HERE IF BALNK OR TAB TAD (-257 /END OF LINE ON SLASH AFTER BLANK SNA CLA JMP GETCND JMS BACK1 /PUT IT BACK TAD [240 /AND RETURN A SINGLE BLANK JMP GETSKP /SKIP OUT SEMICL, ISZ SCSWT JMS BACK1 /PUT BACK SEMI COLON JMP I GETCHR GETAC, 0 ISZ NCHARS /END OF LINE? JMP .+4 /NO, GET IT GETCND, CLA CMA /YES, RESET IN CASE OF DCA NCHARS /ANOTHER CALL JMP I GETCHR /RETURN END OF LINE TAD I CHRPTR /PICK UP NEXT TAD [-240 /CHECK FOR BLANK SZA TAD (240-211 /OR TAB SNA JMP BLANK /THEY GET SPECIAL HANDLING TAD (211-273 /LOOKOUT FOR SEMICOLON SNA JMP SEMICL /ALSO SPECIAL TAD (273-276 /IGNORE CLOSE ANGLE BRACKET SNA JMP GETAC+1 /GET ANOTHER TAD (276 /ELSE, RESTORE CHAR JMP I GETAC /AND PASS IT BACK / / COLLECT A SYMBOL IN BUCKET, NAME 1,2, & 3 / NO SKIP ON RETURN IF NO SYMBOL / GETNAM, 0 DCA NAME1 /CLEAR SYMBOL SPACE DCA NAME2 DCA NAME3 JMS LETTER /GET A LETTER JMP ISSYM JMS GETCHR /CHECK FOR # JMP I GETNAM /NOPE TAD (-"# SNA CLA JMP ISSYM JMS BACK1 JMP I GETNAM ISSYM, DCA BUCKET ISZ GETNAM /ONE LETTER DOTH A SYMBOL MAKE JMS GNC /FRIENDLY LOCAL SUBR JMS R6L DCA NAME1 JMS GNC TAD NAME1 DCA NAME1 JMS GNC JMS R6L DCA NAME2 JMS GNC TAD NAME2 DCA NAME2 JMS GNC JMS R6L DCA NAME3 JMS GNC /AFTER 6, WE IGNORE SKP CLA GNC, 0 JMS LETTER JMP I GNC /RETTURN LETTER JMS DIGIT JMP I GETNAM /EMPTY HANDED, RETURN TO CALLER TAD (60 JMP I GNC / / IF NEXT CHAR IS A LETTER, RETURN 6 BITS / IF NOT, REPLACE CHAR AND SKIP. / LETTER, 0 JMS GETCHR JMP NLETR /NO LETTER, SKIP TAD (-333 CLL CML TAD (33 SZA SNL /DON'T ALLOW 300 JMP I LETTER JMS BACK1 NLETR, ISZ LETTER JMP I LETTER / / IF NEXT CHAR IS A DIGIT (0-9) RETURN VALUE AND SKIP / DIGIT, 0 JMS GETCHR JMP I DIGIT TAD (-272 CLL TAD (12 SNL JMP NDIGT ISZ DIGIT JMP I DIGIT NDIGT, JMS BACK1 JMP I DIGIT / R6L, 0 CLL RTL RTL RTL JMP I R6L / R6R, 0 RTR RTR RTR AND [77 JMP I R6R PAGE / / BUILD AN INSTRUCTION / FIXOPC, 0 /COMBINE OPCODE PARTS TAD XFLAG /CHECK INDEX SWITCH SNA CLA JMP ZRONDX /IF ZERO, NO INDEX REG CLA CMA TAD LASTOP /IF INDEX, CHECK FOR INCR SNA CLA TAD [100 /YES, PUT + BIT ON TAD OPCODE /COMBINE WITH OPCODE DCA OPCODE TAD EXPVAL+2 /GET INDEX REG. EXPR AND [7 /ONLY 3 BITS CLL RTL /SHIFT INTO POSITION RAL ZRONDX, TAD OPCODE /ADD OPCODE TAD (400 /TURN ON TYPE BIT DCA OPCODE /SAVE OPCODE JMP I FIXOPC /RETURN / OPR8RS, -253 /PLUS -255 /MINUS -252 /STAR (MULTIPLY) ** -257 /SLASH (DIVIDE) -246 /AMPERSAND (AND) -240 /SPACE (OR) -241 /EXCLAMATION (OR) 0 /END OF LIST / / FATAL ERRORS / ERMSG1, 0 /PASS 1 (FATAL) MESSAGES CDF TAD I ERMSG1 /GET CODE DCA .+3 DCA PASSNO JMS ERMSG /DO THE MSG THING 0 IFZERO RALF < RETSYS, > TSF /FINISH TYPING JMP .-1 JMP I [7600 /EXIT TO PS8 / / GENERAL GARBAGE TYPE ERRORS / ERMSG, 0 CDF FLD0 /FIX FIELD CLA /NO MESSAGE ON PASS 1 TAD PASSNO SMA SZA /IF PASS 3, OUTPUT LEADING CRLF JMS I [CRLF SPA CLA JMP MSGDUN TAD (5555 /MINUSES JMS I [PRINT2 TAD I ERMSG /2-CHAR CODE JMS I [PRINT2 /PRINT THE MESSAGE TAD (5555 JMS I [PRINT2 TAD PASSNO SZA CLA JMP .+4 JMS I [PRINT2 PLINE, JMS I (PRNTLN JMS I [CRLF ISZ ERRORS /BUMP COUNT MSGDUN, ISZ ERMSG JMP I ERMSG / / OUTPUT DECIMAL / SUPPRESS LEADING ZEROS / PRINT "NO" INSTEAD OF "0" / DECOUT, 0 SNA /ZERO IS SPECIAL JMP DECNO /NO INSTEAD OF 0 DCA OTEMP DCA OCNT JMS DEC2 /GET THOUSANDS -1750 JMS DEC2 /HUNDREDS -144 JMS DEC2 /TENS -12 TAD OTEMP /UNITS (NO ZERO SUPPRESS HERE) JMS PDIG /PRINT LAST DIGIT JMP I DECOUT /EASY, WHEN YOU KNOW HOW / DECNO, TAD (1617 /NO JMS I [PRINT2 JMP I DECOUT / / LAZY MAN'S DIVISION / DEC2, 0 CDF FLD0 /JUST TO MAKE SURE DEC3, CLA CLL TAD OTEMP SNA JMP DEC4 TAD I DEC2 /SUBTRACT DIVISOR SNL /TOO MUCH? JMP DEC4 /YES, STOP NOW DCA OTEMP /NO, SAVE NEW REMAIN ISZ OCNT /BUMP QUOTIENT JMP DEC3 /DO IT AGAIN DEC4, CLA ISZ DEC2 /SKIP RETURN TAD OCNT /CHECK FOR SIGNIFICANCE SNA JMP I DEC2 /NONE JMS PDIG CLA STL RAR /FORCE SIGNIFICANCE DCA OCNT JMP I DEC2 / TENTH, -111 1463;1463;1463 1463;1463;1463 TEN, 1 PDIG, 0 TAD P260 JMS I PC JMP I PDIG P260, 260 5 / / OCTAL CONVERSION, THE HARD WAY / OCTOUT, 0 DCA OTEMP STL RAR /NO ZERO SUPPRESS DCA OCNT JMS DEC2 -1000 JMS DEC2 -100 JMS DEC2 -10 TAD OTEMP JMS PDIG JMP I OCTOUT PAGE / / OUTPUT ONE WORD / IFNZRO RALF < / / TEXT TYPE CODES: TTABS= 0400 TTORG= 1000 TTREL= 1400 / OUTREL, DCA WRD /HOLD FIRST WORD DCA LINKSW /CLEAR ABSOLUTE REF INDICATOR TAD FPPADR /GET ESD CODE RTR RTR /RIGHT IN AC AND [177 /STRIP TO ESD ONLY SNA /CHECK FOR ABSOLUTE JMP PUTABS DCA FPPADR /SAVE ESD TAD PASSNO /CHECK FOR PASS 2 SZA CLA JMP PRNTRL /IF NOT, TREAT NORMALLY DCA ABSOP CLA STL RTL JMS I (FULCHK /ENSURE 3 WORDS LEFT TAD FPPADR /GET ESD AGAIN TAD (TTREL /INSERT CONTROL CODE DCA I OUTPTR TAD WRD /FIRST DATUM DCA I OUTPTR TAD FPPADR+1 DCA I OUTPTR JMS I (FULCHK /IS IT FULL? JMS BMPLOC /TWO WORDS OUT JMS BMPLOC /SO LOCCTR +2 JMP I [NEXTST PUTABS, ISZ ABREFS /COUNT IT ISZ LINKSW /SET FLAG PRNTRL, TAD WRD /GET FIRST WORD JMS OUTWRD TAD FPPADR+1 JMS OUTWRD JMP I [NEXTST > / OUTWRD, 0 /OUTPUT ROUTINE DCA WRD /SAVE WORD IFZERO RALF < TAD LOCTR2 /GET LOW 12 BITS OF LOCATION JMS I [R6L AND [37 /GET PAGE NUMBER (WITHIN FIELD) DCA OTEMP /SAVE PAGE NUMBER TAD OTEMP SZA CLA /POINTER TO LITERAL POINTER IAC TAD [P0LIT DCA OWTEMP TAD LOCTR2 /GET CURRENT ADDRESS DISPLACEMENT AND [177 CIA /COMPARE WITH LITERAL BOUNDARY TAD I OWTEMP SMA CLA JMP .+3 /NO PAGE OVER FLOW JMS I [ERMSG 2017 /*PO*> TAD PASSNO /CHECK PASS SZA JMP PRNTST /ITS NOT PASS 2 IFZERO RALF < TAD WRD /NOW OUTPUT WORD JMS I [R6R JMS OOCHAR TAD WRD AND [77 JMS OOCHAR > IFNZRO RALF < TAD ABSOP /CHECK FOR ALREADY IN ABS OUTPUT SZA CLA JMP INABS /NO PROBLEM CLA IAC JMS I (FULCHK TAD (TTABS /SET ABS CONTROL CODE DCA I OUTPTR TAD OUTPTR /SAVE POINTER FOR FUTRUE REF DCA ABSOP INABS, ISZ I ABSOP /BUMP COUNT TAD WRD DCA I OUTPTR JMS I (FULCHK /GOOD!> PRNTST, SMA SZA CLA TAD LISTSW /IS LIST ON ? SNA CLA JMP ENDOUT /NO, DONT PRINT JMS I [CRLF /NEW LINE TAD LOCTR1 /PRINT LOCATION COUNTER AND [7 JMS I (PDIG TAD LOCTR2 /NEXT FOUR DIGITS JMS I [OCTOUT TAD [240 JMS I PC TAD WRD /NOW WORD JMS I [OCTOUT TAD LINKSW /LINK GENERATED ON THIS LINE? SZA CLA TAD (4700 /IF SO, GIVE APOSTROPHE SPACE JMS I [PRINT2 DCA LINKSW /CLEAR SW JMS I (PRNTLN /PRINT LINE IF NECESSARY ENDOUT, JMS BMPLOC /BUMP LOC CNTR JMP I OUTWRD /RETURN / WRD, BMPLOC, 0 ISZ LOCTR2 /BUMP LOW ORDER JMP I BMPLOC CLA IAC TAD LOCTR1 AND (7767 /STOP CARRY INTO BIT 8 DCA LOCTR1 JMP I BMPLOC IFZERO RALF < / / PUNCH CONTROL / NOPNCX, CLA IAC ENPNCX, DCA PNCHOF JMP I [NEXTST / / OUTPUT AN ORIGIN / PUTORG, 0 TAD PASSNO /CHECK FOR PASS 2 SZA CLA JMP I PUTORG /ELSE FORGET IT TAD LOCTR2 /OUTPUT FIRST CHAR JMS I [R6R TAD [100 JMS OOCHAR /OUTPUT CHAR TAD LOCTR2 /NOW LOWER HALF OF ORIGIN AND [77 JMS OOCHAR JMP I PUTORG OWTEMP, CHAROO, 0 OOCHAR, 0 /OUTPUT CHAR AND COMPUTE CHKSUM DCA CHAROO TAD PNCHOF /PUNCHING? SZA CLA JMP I OOCHAR /NOPE TAD CHAROO TAD CHKSUM DCA CHKSUM TAD CHAROO JMS I [OCHAR JMP I OOCHAR > / / BEGIN NEXT PASS / WITH APPROPRIATE THINGS RESET / TO DEFAULT VALUES / RESET, JMS I (IOPEN /RE-SELECT FIRST INPUT FILE TAD USR /EITHER 200 OR 7700 SPA CLA /IS USR IN CORE? JMP .+6 /NO CIF 10 /YES, DISMISS IT JMS I USR 11 /USROUT TAD [7700 DCA USR /ITS GONE IFNZRO RALF < CLA STL RTL /COUNTING FROM 2, DCA ESDNO /RESET ESD COUNT JMS I (CLRSCT /ZERO ALL SECTION LENGTHS> DCA ASMOF /ZERO CONDITIONAL SWITCH DCA SCSWT /ZERO SEMICOLON SWITCH TAD SYONLY /IF NOT SYM MAP ONLY DCA LISTSW /FORCE LIST ENABLE CLA IAC DCA LPAGE1 DCA LPAGE2 CLA CMA DCA LINPAG IFZERO RALF < TAD [177 DCA P0LIT /RESET LITERAL BUFFER POINTERS TAD [177 DCA CPLIT TAD [200 > DCA LOCTR2 /LOCATION COUNTER IFNZRO RALF < TAD (20 > DCA LOCTR1 CLL CML RAR /4000 DCA BASER /SET BASE BEYOND BELIEF DCA INDXR DCA INDXR+1 DCA RADIX /RESET DEFAULT OCTAL DCA ERRORS /ZERO ERROR COUNT DCA LINKS ISZ PASSNO /BUMP PASS NUMBER JMP I (NEWLIN JMP I (NEWLIN /DO NEXT PASS PAGE / / END OF A PASS / ENDX, IFZERO RALF < DCA PNCHOF /RE-ENABLE PUNCH> IFNZRO RALF < JMS I (BORG /SET MAX LEN OF CURRENT SECT> TAD PASSNO SMA CLA /WHAT PASS WAS THIS? JMP EOP2 /NOT THE FIRST IFNZRO RALF < TAD (INBUF-400 DCA I (INBUFP /MOVE INPUT BUFFER OVER DMPESD> TAD BFILE SNA CLA JMP START3 /NO BINARY, START PASS 3 IFZERO RALF < TAD [200 /START BIN OUT WITH L/T JMS I [OCHAR JMP I (RESET > IFNZRO RALF < JMP I (DMPESD /OUTPUT EXT SYM TABLE> / EOP2, IFZERO RALF < CLA IAC /DUMP CURRENT PAGE LITERALS JMS I (DMPLIT JMS I (DMPLIT /THEN DUMP PAGE 0 LITERALS> TAD PASSNO SMA SZA CLA JMP EOP3 /YES, PRINT SYMBOL TABLE IFZERO RALF < TAD CHKSUM /OUTPUT CHECKSUM JMS I [R6R JMS I [OCHAR TAD CHKSUM AND [77 JMS I [OCHAR /LOWER HALF TAD [200 /TRAILER CHAR JMS I [OCHAR > IFNZRO RALF < DCA I OUTPTR /SET OUTPUT END INDICATOR> JMS I (OCLOSE /CLOSE THE BINARY FILE START3, DCA PASSNO /SKIP PASS TWO JMS I (OOPEN /OPEN LISTING FILE IFZERO RALF < JMP NOP3 /NO LISTING, GIVE INFO ON TTY> IFNZRO RALF < JMP I (RETSYS > TAD [OCHAR /CHANGE PRINT ROUTINE DCA PC JMP I (RESET /NO,RESET EVERYTHING / / END OF LAST PASS / GIVE SOME STATISTICS / EOP3, CLA CMA DCA LINPAG JMS I [CRLF NOP3, JMS I (7607 /READ IN OVERLAY 0100 OVERLY, OVBUFR 40 /USE SYS SCRATCH BLK JMP I (7605 JMP I OVERLY CHCKMR, 0 TAD OPCODE /BE SURE ALL REFS ARE AND [200 /ARE ON SAME PG SZA CLA TAD LOCTR2 AND [7600 CIA TAD EXPVAL+2 AND [7600 SZA CLA ADRERR, JMS I [ERMSG 0201 /**BA** TAD EXPVAL+2 AND [177 TAD OPCODE JMS I [OUTWRD JMP I [NEXTST IOERR, TAD INOP /REMOVE JMS PRNTLN DCA PLINE JMS I [ERMSG1 1117 /**IO** INOP, NOP PAGE IFZERO RALF < / ORG THINGS FOR ABSOLUTE ASSEMBLIES / TRYSTR, JMS I [GETCHR JMP I [NEXTST /WHAT CAN YOU DO? TAD (-252 /IS IT AN ORG SZA CLA JMP I (GETEXP /NO, SOME FUNNY EXPR, MAYBE ORGX, JMS I (ADRGET TAD LOCTR1 /CHECK FOR NEW FIELD CIA TAD EXPVAL+1 SNA CLA JMP SAMFLD /NOT A DIFFERENT FIELD CLA IAC JMS DMPLIT /DUMP CURRENT PAGE LITERALS JMS DMPLIT /DUMP PAGE 0 LITERALS TAD EXPVAL+1 AND [7 DCA LOCTR1 TAD PNCHOF /PUNCHING ENABLED? SNA TAD PASSNO /PASS 2? SZA CLA JMP SAMPAG /NO, DON'T OUTPUT CHANGE FIELD TAD LOCTR1 /NEW FIELD BITS RTL CLL RAL TAD (300 /TURN ON THE LEFT TWO BITS JMS I [OCHAR /PUT IT OUT (NOT IN CHECK SUM) JMP SAMPAG /DO THE SAME FOR CURRENT PAGE SAMFLD, TAD LOCTR2 AND [7600 /CHECK FOR SAME PAGE DCA LTEMP TAD EXPVAL+2 AND [7600 CIA TAD LTEMP SNA CLA JMP SAMPAG /PAGE IS THE SAME CLA IAC JMS DMPLIT /DUMP CURRENT PAGE LITERALS SAMPAG, TAD EXPVAL+2 DCA LOCTR2 JMS I (PUTORG JMP I [NEXTST /DONE PAGEX, TAD LOCTR2 /ADVANCE TO NEXT PAGE CLL TAD [177 AND [7600 DCA EXPVAL+2 RAL TAD LOCTR1 DCA EXPVAL+1 JMP ORGX+1 /DO ORG THINGS DMPLIT, 0 DCA PAGEN /SAVE PAGE INDICATOR TAD OUTSWT /SAVE OUTPUT SWITCH DCA SWTOUT ISZ OUTSWT /DONT PRINT LINE WITH LITERALS TAD PAGEN TAD [P0LIT /GET BOUNDARY POINTER DCA LTEMP TAD PAGEN /WHICH LITERAL BUFFER ? SNA CLA TAD (P0LBUF-CPLBUF /PAGE 0 BUFFER TAD (CPLBUF /CURRENT PAGE BUFFER TAD I LTEMP /PLUS PAGE ADDRESS DCA X10 /GIVES START OF LITERALS -1 TAD PAGEN SZA CLA TAD LOCTR2 /UPPER FIVE BITS OF ADDRESS AND [7600 TAD I LTEMP /PLUS LOWER SEVEN IAC /PLUS ONE DCA LOCTR2 /GIVES LOCATION COUNTER TAD LOCTR2 AND [177 /ANYTHING TO DUMP? SNA CLA JMP DMPFIN /NO TAD PASSNO SMA SZA CLA JMS I [CRLF /ONLY IF PASS 3 JMS I (PUTORG TAD [177 /STORE SPURIOUS LITERAL BOUNDARY DCA I LTEMP /TO PREVENT FALLACIOUS *PO* MESSAGES LITLUP, TAD I X10 /NO, GET NEXT LITERAL JMS I [OUTWRD /OUTPUT WORD AND BUMP LC TAD X10 /DONE? IAC AND [77 SZA CLA JMP LITLUP /LOOP DMPFIN, TAD SWTOUT /RESTORE OUTPUT SWITCH DCA OUTSWT JMP I DMPLIT /ALL DONE SWTOUT, 0 > EXPON, TAD LASTOP DCA TMP DCA LASTOP JMS I (GETSGN /GET SIGN OF EXPONENT TAD RADIX DCA OTEMP ISZ RADIX /SET RADIX TO DECIMAL JMS I (NUMBER /GET EXPONENT NOP TAD OTEMP DCA RADIX /RESTORE RADIX TAD TMP CLL RAR TAD LASTOP RAR /LASTOP TO LINK, DCA LASTOP /TMP TO SIGN OF LASTOP TAD WORD2 SZL CIA /PUT SIGN ON EXP JMP I (OVER TMP, 0 IFZERO RALF < PAGE / > IFNZRO RALF < / / IF ALL CONDITIONS ARE RIGHT, CALL THE LOADER / RETSYS, JMS I (DELFIL /THIS LOCATION USED BY INIT CODE /MAY BE ZEROED BY IT. USED TO DELETE F4 OUTPUT FILE WHEN CHAINING /FROM COMPILER + OUTPUT DEV IS NOT SYS CDF 10 TAD (7604 /POINT TO 2ND OUT FILE THING DCA X11 TAD (7611 /POINTER TO 3RD DCA X10 TAD (-5 /LENGTH OF SUCH THINGS DCA LTEMP TAD I X10 /MOVE 3RD TO 2ND DCA I X11 /FOR LOADER MAP FILE ISZ LTEMP JMP .-3 TAD I [7600 /WAS THERE A FIRST OUT FILE AND NP17 /(BINARY OUT)* DCA LTEMP TAD OUTBLK /GET FILE LENGTH AND (377 CLL RTL RTL CIA TAD LTEMP /COMBINE UNIT AND LEN DCA I X10 /FOR FIRST INPUT FILE TO LOADER TAD PASBLK /STARTING BLOCK DCA I X10 DCA I X10 /THAT'S THE END OF INPUT CDF 0 TAD ERRORS /IF NO ERRORS SNA CLA ISZ CHNSW /SHOULD WE CHAIN? JMP I (7605 /NO!!! ISZ I (7746 /** CIF 10 JMS I USR 6 /CHAIN LDRBLK, 0 /FIRST BLOCK OF LOADER / PASBLK, 0 /FIRST BLOCK OF FILE PASSED CHNSW, 0 /-1 TO ENABLE CHAIN LOADER / / OUTPUT A BLOCK OF BINARY / OUTBLK, 0 /AT END OF PASS2, BECOMES /LENGTH OF BINARY FILE TAD (OUCTL /DEV HNDLR CONTROL WORD JMS I (OUTDMP /CALL THE HANDLER TAD MOUBUF DCA OUTPTR /RESET BUFFER POINTER DCA ABSOP /FORCE NEW ABS OUTPUT CONTROL JMP I OUTBLK MOUBUF, OUBUF-1 / TYPCOD, 2500 /UNDEFINED 0000 /ADDRESS 3000 /XTERNAL 0300 /COMMON 2300 /SECTION -1 /? -1 /? 7000 /8-M0DE SECTION 3200 /8-MODE PAGE0 COMMON SECTION 0600 /8-MODE FIELD1 SECTION BORG, 0 CDF FLD0 TAD LOCTR1 RTR RTR AND [177 TAD (ESDBUF-1 /POINT INTO ESD TABLE DCA LTEMP TAD I LTEMP TAD (4 /ADDRESS VALUE DCA LTEMP CDF FLD1 TAD LOCTR1 AND [7 /GET ADDR BITS ONLY DCA BOTMP /SAVE EM TAD I LTEMP /OLD HIGH VALUE BITS AND [7 CIA TAD BOTMP /COMPARE THEM SPA JMP BOXIT /NO UPDATE REQUIRED SNA CLA JMP BOCHKL /NO DIFFERENCE YET TAD LOCTR1 DCA I LTEMP /RESET TO NEW HIGH ISZ LTEMP JMP BOSETL /SKIP OVER TEST BOCHKL, ISZ LTEMP /POINT TO LO-ORDER TAD I LTEMP CIA CLL TAD LOCTR2 /COMPARE LOW ORDERS SNL CLA JMP BOXIT /NO REPLACE BOSETL, TAD LOCTR2 DCA I LTEMP BOXIT, CLA CDF FLD0 JMP I BORG /WHEW! BOTMP= EXTMP PAGE NEWESD, 0 TAD ESDNO TAD (-177 /CHECK LIMIT SPA CLA JMP .+3 JMS I [ERMSG1 /TOO MANY 3023 /*XS* ISZ ESDNO /BUMP COUNT TAD PASSNO /DON'T CHANGE TABLE AFTER PASS 1 SMA CLA JMP I NEWESD TAD ESDNO TAD (ESDBUF-1 /INDEX BUFFER DCA ESDTMP CDF FLD1 TAD I OLDN3 /GET POINTER TO THIS SYMBOL CDF FLD0 DCA I ESDTMP TAD ESDTMP TAD [200 DCA ESDTMP /NOW ADDRESS CHAR TABLE TAD BUCKET DCA I ESDTMP JMP I NEWESD ESDTMP= EXTMP / / RELOCATION CONTROL PSEUDO-OPS / ENTRX, JMS I [GETNAM /NAME OF ENTRY POINT JMP ESDERR JMS I [LOOKUP /FIND IT JMP QENT /UNDEFINED CLL RAR /MUST BE USER ADDR TYPE SNA CLA TAD I X10 /LOOK AT ESD AND [7770 SZA CLA /IS IT RELOCATABLE? JMP OKENT /YES QENT, JMS I [ERMSG /NO MESSAGE ON PASS 1 1105 /*IE* OKENT, JMS NEWESD /CREATE AN ENTRY FOR IT JMP I [NEXTST / EXTRNX, CLA STL RTL DCA STYPE /EXTERNS ARE TYPE 2 JMS I [GETNAM JMP ESDERR JMS I [LOOKUP JMS CRESD /IF UNDEFINED, DEFINE IT CLL RTR /IF DEFINED, CHECK LEGALITY SZA CLA ESDERR, JMS I [ERMSG 0523 /*ES* JMP I [NEXTST / CLA IAC /FIELD1 SECT=11 IAC /COMMZ SECT=10 SECT8X, TAD [7 JMP COMMX+1 SECTX, CLA IAC COMMX, TAD (COMMN /GET DESIRED CODE DCA STYPE /FOR SECTION TYPE JMS I [GETNAM DCA BUCKET /IF NO NAME, BLANK COMMON JMS I [LOOKUP JMP NEWSCT /UNDEFINED CIA /OLD FRIEND TAD STYPE /SAME? SNA CLA JMP SETSCT /YUP, DO IT JMP ESDERR / CRESD, 0 JMS NEWESD /CREATE NEW ESD ENTRY CDF FLD1 TAD I LTEMP /SET TYPE CODE AND [7700 TAD STYPE DCA I LTEMP ISZ LTEMP TAD ESDNO CLL RTL /ESD NO TO SYMBOL VLAUE RTL DCA I LTEMP CDF FLD0 JMP I CRESD / NEWSCT, JMS CRESD /CREATE AN ESD SETSCT, JMS I (BORG /ADJUST LOC CTR'S CDF FLD1 TAD I X10 /GET NEW LOC CTR VALUE DCA LOCTR1 TAD I X10 DCA LOCTR2 /LOW LOC CTR CDF FLD0 JMP PUTORG / ORGX, JMS I (ADRGET /GET ORG EXPR JMS I (BORG TAD EXPVAL+1 AND [7770 /DOES IT HAVE AN ESD? SNA CLA TAD LOCTR1 /IF NOT, KEEP CURRENT ESD AND [7770 TAD EXPVAL+1 DCA LOCTR1 /RESET PC TAD EXPVAL+2 DCA LOCTR2 PUTORG, TAD PASSNO /OUTPUT ON PASS 2 ONLY SZA CLA JMP I [NEXTST DCA ABSOP /CLEAR ABS OUTPUT SW CLA STL RTL JMS I (FULCHK /ROOM FOR MORE? TAD LOCTR1 RTR RTR /GET ESD AND [177 TAD (TTORG DCA I OUTPTR TAD LOCTR1 AND [7 /FIELD BITS DCA I OUTPTR TAD LOCTR2 /ADDRESS DCA I OUTPTR JMS I (FULCHK JMP I [NEXTST PAGE /> / / VARIOUS PSEUDO-OP HANDLERS / LSTONX, TAD SYONLY /ENABLE LISTING UNLESS SYM MAP ONLY LSTOFX, DCA LISTSW JMP I [NEXTST / DECX, CLA IAC OCTALX, DCA RADIX JMP I [NEXTST / TEXTX, JMS I [GETCHR /GET DELIMITER JMP I [NEXTST /NULL STMT CIA DCA EXTMP /SAVE - DELIM LOOP6B, JMS GETCHT /GET HIG ORDER CHAR JMP I [NEXTST JMS I [R6L /SHIFT IT UP DCA LTEMP /SAVE HALF JMS GETCHT /GET LOWER CHAR JMP OUTTXT /GO PUT LAST TAD LTEMP /PUT 2 CHARS TOGETHER JMS I [OUTWRD /OUTPUT WORD JMP LOOP6B /LOOP OUTTXT, TAD LTEMP /PUT OUT HALF WORD JMS I [OUTWRD /OR ZERO WORD JMP I [NEXTST GETCHT, 0 /GET CHAR FOR TEXT STMT ISZ NCHARS /BUMP COUNT SKP JMP I GETCHT /END OF TEXT TAD I CHRPTR /GET CHAR DCA BUCKET /SAVE IT TAD BUCKET /IS IT THE DELIM ? TAD EXTMP SNA CLA JMP I GETCHT /YES, RETURN NO SKIP ISZ GETCHT /BUMP RETURN TAD BUCKET /GET CHAR AND [77 /LOW 6 BITS JMP I GETCHT /RETURN / / CONDITIONAL ASSEMBLY HANDLERS / IFNZRX, CLA CMA IFZROX, JMS GETCON /GET CONDITION EXPR TAD EXPVAL+1 /HIGH ORDER AND [7 SNA TAD EXPVAL+2 /LOW ORDER SWTCH, SNA CLA JMP TRUE /PRESENT CONDITION OF ASMOF IS OK FALSE, TAD ASMOF /GOTTA REVERSE IT CMA DCA ASMOF /THAT DOES IT TRUE, CDF FLD0 JMS I [GETCHR JMP BADCND /FORGOT THE ANGLE TAD [-240 /IGNORE BLANK, IF ANY SNA JMP TRUE /TRY AGAIN TAD (240-274 SNA CLA JMP I (ASMBL /GO FROM HERE JMS I [BACK1 /LET SOMEONE ELSE WORRY ABOUT IT JMP BADCND / GETCON, 0 DCA ASMOF /SET INITIAL TRUTH JMS I [EXPR /COLLECT EXPR JMP OKCND /BAD MAY MEAN GOOD BADCND, JMS I [ERMSG /BUT GOOD MEANS BAD 1103 /*IC* DCA ASMOF /ENABLE ASSEMBLY JMP I (ASMBL OKCND, TAD EXPSW /WAS THERE AN EXPR, AT LEAST? SNA CLA JMP I GETCON /YES JMP BADCND / IFNEGX, CLA CMA IFPOSX, JMS GETCON CLA CLL IAC RTL /4 AND EXPVAL+1 /SIGN OF EXPR JMP SWTCH /GO FROM THERE / IFNDFX, CLA CMA IFREFX, DCA ASMOF JMS I [GETNAM /GET SYMBOL NAME JMP BADCND /GOTTA GIVE SOMETHING JMS I [FIND /IS IT KNOWN TO US? JMP FALSE /NOT REFERENCED YET SNA CLA /SKIP IF DEFINED DCA ASMOF /ELSE ASSEMBLE JMP TRUE IFSWX, CLA CMA IFNSWX, DCA ASMOF TAD (7642 /ADDRESS OF OPTION WORDS DCA WORD2 /A TEMP JMS I (LETTER /ALLOW LETTER JMP .+4 /AC BETWEEN 1 AND 32 JMS I (DIGIT /OR NUMBER JMP BADCND /ALL ELSE IS BAD TAD (33 /MAKE 0 = Z+1 ISZ WORD2 /BUMP POINTER TAD (-14 /IS IT IN THIS WORD? SMA SZA JMP .-3 /NO, POINT TO NEXT CIA CMA STL /BIT COUNT AWAY FROM LINK DCA WORD1 RAL /SHIFT ISZ WORD1 /COUNT JMP .-2 CDF 10 /OPTIONS FIELD AND I WORD2 /GET SELECTED BIT JMP SWTCH /AND TEST IT / ZBLKX, JMS I (ADRGET /EVALUATE EXPR TAD EXPVAL+2 CIA DCA ZBCNT /HOLD COUNT TAD LISTSW /SAVE LISTSWITCH DCA ZBTMP JMS I [OUTWRD /PUT A WORD DCA LISTSW /NO LIST AFTER FIRST ISZ ZBCNT /COUNT THEM JMP .-3 /MORE TAD ZBTMP /RESTORE DCA LISTSW /LISTING JMP I [NEXTST ZBCNT= EXTMP ZBTMP= EXTMP2 PAGE PTP=20 DCB=7760 INFLD=INCTL&70 /GET FIELD OF INPUT BUFFER OUFLD=OUCTL&70 /DITTO OUTPUT BUFFER IN7400, 7400 NINCTL, INCTL+1 NINREC, INRECS IOPEN, 0 TAD (7617 DCA INFPTR /RESET FILE POINTER JMS INNEWF /FETCH NEW HNDLR, ETC /WHILE USR IS STILL IN CORE CLA CMA DCA INCHCT /FORCE A READ ON NEXT CHAR JMP I IOPEN ICHAR, 0 IN7600, 7600 INCHAR, CDF INFLD ISZ INJMP /BUMP THREE-WAY UNPACK SWITCH ISZ INCHCT INJMPP, JMP INJMP TAD INEOF SZA CLA /DID LAST READ GIVE EOF ? GETNEW, JMS INNEWF /OPEN A NEW INPUT FILE TAD INCTR CLL TAD NINREC SNL DCA INCTR /RESTORE INCR IF NOT OVERFLOWED SZL /IS THIS THE LAST READ? ISZ INEOF /YES - SET END-OF-FILE FLAG CLL CML CMA RTR /MAKE CONTROL WORD RTR /FROM THE AMOUNT OF THE OVERFLOW RTR /(IF ANY) AND THE STANDARD CNTRL WD TAD NINCTL DCA INCTLW CDF JMS I INHNDL /CALL THE DEVICE HANDLER INCTLW, 0 INBUFP, INBUF INREC, 0 JMP INERRX /SOME KIND OF HANDLER ERROR INBREC, TAD INREC TAD NINREC 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 /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 PROCESSING JMP I [IOERR /BADDIE, GIVE ERROR MESSAGE INJMP, HLT /THIS IS THE 3 WAY CHARACTER SWITCH JMP ICHAR1 JMP ICHAR2 TAD INJMPP DCA INJMP TAD I INPTR AND IN7400 CLL RTR RTR /COMBINE HIGH-ORDER FOUR BITS OF TAD INCTLW RTR /THE 2 WORD TO FORM THE 3RD CHAR RTR ISZ INPTR JMP INCOMN ICHAR2, TAD I INPTR AND IN7400 DCA INCTLW /SAVE THE HI ORDER BITS FOR THE 3RD ISZ INPTR /BUMP THE WORD POINTER ICHAR1, TAD I INPTR INCOMN, AND (377 TAD (-232 SNA /IS THE CHARACTER A ^Z? JMP GETNEW /YES - GET A NEW FILE TAD (232 /RESTORE THE CHARACTER CDF JMP I ICHAR /AND RETURN INFPTR, 7617 INEOF, 1 /PARAMETERS ARE SET UP SO THAT INCHCT, /IOPEN IS UNNECESSARY. INNEWF, -1 TAD NINDEV DCA INHNDL /INITIALIZE HANDLER ADDRESS CDF 10 TAD I INFPTR /GET NEXT CD INPUT FILE ENTRY CDF SNA /ANY MORE? JMP I (ENDX /NO MORE INPUT CIF 10 JMS I USR 1 /ASSIGN, FETCH HANDLER INHNDL, 0 JMP I [IOERR /HUH? CDF 10 TAD I INFPTR AND (7760 /GET LENGTH PART OF WORD SZA /LENGTH OF 0 MEANS LENGTH GE 256 TAD [17 /ADD HIGH ORDER BITS CLL CML RTR RTR DCA INCTR /STORE LENGTH OF FILE ISZ INFPTR TAD I INFPTR CDF DCA INREC /STARTING RECORD NUMBER OF FILE ISZ INFPTR DCA INEOF /ZERO END-OF-FILE FLAG JMP I INNEWF INCTR, 0 INPTR, 0 OUFNAM, 0;0;0;0 /OUTPUT FILE NAME NINDEV, INDEVH PAGE OOPEN, 0 TAD OUFILE /INCR OUTPUT FILE POINTER TAD (5 DCA OUFILE CDF 10 TAD I OUFILE /GET DEVICE CODE, LEN DCA OUELEN /HOLD IT A MO JMS I (OFNAME /GET FILE NAME INTO FIELD 0 TAD OUELEN /CHECK FOR NULL FILE SNA CLA JMP ONOFIL /INHIBIT OUTPUT JMS GETUSR /LOAD USR IF NOT ALREADY IN TAD OUNAME /RESET ENTER CALL DCA OUBLK TAD NOUDEV DCA OUHNDL TAD OUELEN /THE UNIT CIF 10 JMS I USR 1 /ASSIGN, FETCH HANDLER OUHNDL, 0 /OUTPUT DEVICE HANDLER ENTRY JMP I [IOERR /HUH? TAD OUELEN /UNIT AGAIN CIF 10 JMS I USR 3 /ENTER OUTPUT FILE OUBLK, OUFNAM /REPLACED WITH STARTING BLOCK OUELEN, 0 /REPLACED WITH LENGTH OF HOLE JMP I [IOERR /YOU BLEW IT!!! DCA OUCCNT DCA I (OUTINH /ZERO OUTPUT INHIBIT FLAG JMS I (OUSETP ISZ OOPEN JMP I OOPEN ONOFIL, ISZ I (OUTINH JMP I OOPEN OUTDMP, 0 DCA OUCTLW /STORE THE CONTROL WORD TAD OUCCNT SNA ISZ OUCTLW TAD OUBLK DCA OUREC /COMPUTE STARTING BLOCK TAD OUCTLW JMS I [R6L AND [17 /COMPUTE THE NUMBER OF RECORDS TAD OUCCNT /UPDATE SIZE OF FILE DCA OUCCNT TAD OUCCNT CLL CML TAD OUELEN SNL SZA CLA /EXCEED GIVEN LENGTH ? JMP I [IOERR /YES - ERROR CDF JMS I OUHNDL OUCTLW, 0 LOUBUF, OUBUF OUREC, 0 JMP I [IOERR JMP I OUTDMP OCLOSE, 0 JMS GETUSR /ENSURE USR IN CORE IFNZRO RALF < TAD PASSNO SZA CLA JMP .+6 TAD (377 JMS I (FULCHK /DUMP LAST BLOCK TAD OUCCNT /SAVE FILE LENGTH DCA I (OUTBLK /FOR CHAIN JMP NODUMP > 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 FILLLP, JMS I [OCHAR JMS I (OTYPE /GET TYPE OF OUTPUT DEVICE SPA CLA TAD [100 TAD [77 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 TAD (4000+OUFLD /PUT IN FIELD AND WRITE BITS JMS OUTDMP NODUMP, CIF CDF 10 TAD I OUFILE CDF JMS I USR 4 /CLOSE THE OUTPUT FILE OUNAME, OUFNAM /POINTER TO OUTPUT FILE NAME OUCCNT, 0 JMP I [IOERR /ERROR WHILE CLOSING - BAD!! JMP I OCLOSE /ALL DONE NOUDEV, OUDEVH / / LOAD USR IF NOT IN CORE ALREADY / GETUSR, 0 TAD USR /CURRENT CALL ADDR SMA CLA JMP I GETUSR /WE GOT IT CIF 10 JMS I USR /THE ANSWERING SERVICE 10 /CALLS THE SR TAD [200 DCA USR /RESET THE CALL ADDRESS JMP I GETUSR /JES FINE PAGE FULCHK, 0 IFNZRO RALF < / / IF THE RELOCATABLE BINARY OUTPUT / BLOCK IS FULL (WITHIN THE CONTENTS OF THE AC) / FILL THE REST WITH NOP CODES AND OUTPUT THE / BLOCK. / TAD OUTPTR TAD KOUBUF SPA CLA JMP I FULCHK FULLUP, TAD OUTPTR TAD KOUBUF SMA CLA JMP .+4 CLA IAC DCA I OUTPTR JMP FULLUP JMS I (OUTBLK JMP I FULCHK KOUBUF, -OUBUF-377 > / / / GET SIGN CHARACTER IF ANY / BUMP LASTOP IF MINUS / GETSGN, 0 JMS I [GETCHR JMP I GETSGN TAD (-255 /MINUS? SNA ISZ LASTOP SZA CLL CMA RAR /IF IT WAS PLUS, BECOMES 0 SZA CLA /SKIP IF PLUS OR MINUS JMS I [BACK1 /OTHERWISE PUT IT BACK JMP I GETSGN / AS PER RICHIE LARY / / SINGLE AND DOUBLE PRECISION / FLOATING POINT INPUT / / EX, TAD M3 FX, TAD M3 DCA DESW /STORE LENGTH TAD (-7 JMS CLEAR /CLEAR FAC+OP DCA LASTOP JMS GETSGN /GET SIGN STA /CLA CMA DCA DPSW /SET NO DP GETD, DCA DCNT JMS I (DIGIT /GET A DIGIT JMP LOOKP /NO DCA OTEMP /SAVE IT JMS I (FMPTEN /MULT FAC*10 JMS CLEAR TAD OTEMP SZA JMS I (FAD /ADD DIGIT TO FAC IF NOT= 0 TAD DPSW CMA TAD DCNT /BUMP IF FP SEEN JMP GETD LOOKP, JMS I [GETCHR JMP OVER /DONE TAD (-256 SNA JMP DECPT TAD (256-304 CLL RAR SNA CLA JMP I (EXPON /E OR D DEXERR, JMS I [ERMSG 0620 /FP JMP NOTNEG DECPT, ISZ DPSW JMP DEXERR /2 PERIODS JMP GETD / OVER, TAD DCNT /EXPON COMES HERE W EXP IN AC SNA JMP NOSCAL /NO SCALING NEEDE CLL SMA CIA CML /SIGN IN LINK,MAGNITUDE IN AC DCA DCNT /AS A COUNT SNL TAD (TENTH-TEN /OFFSET KLUDGE DCA OTEMP SCALUP, TAD OTEMP JMS I (FMPTEN /MULT BY 10.0 OR 0.1 ISZ DCNT JMP SCALUP NOSCAL, JMS CLEAR STL RAR DCA OP+5 /ROUNDING CONSTANT JMS I (ADD TAD AC SZA CLA JMS I (NORM /WATCH IT! DCA AC+5 TAD LASTOP SNA CLA /SIGN -? JMP NOTNEG /NO TAD (AC+5 JMS I (SETUP ACNGLP, RAL TAD I P /NEGATE FAC CLL CIA DCA I P STA TAD P DCA P ISZ CT JMP ACNGLP NOTNEG, JMS CLEAR /SET UP X10 TAD I X10 JMS I [OUTWRD ISZ DESW /OUTPUT # JMP .-3 JMP I [NEXTST CLEAR, 0 /AC MAY NOT BE 0 TAD (-7 DCA CT TAD (OPX-1 DCA X10 DCA I X10 ISZ CT JMP .-2 JMP I CLEAR DCNT=FULCHK DPSW=NCTMP DESW=OPCODE PAGE OVBUFR=. FAD, 0 /FLOATING ADD DIGIT IN AC DCA OP TAD (13 DCA OPX ALNLP, TAD OPX CIA TAD ACX SNA /ALIGNED? JMP GOADD /YES SMA CLA TAD (OPX-ACX JMS RSHFT /NO-SHIFT 1 OF THEM RIGHT 1 JMP ALNLP /TRY AGAIN GOADD, JMS ADD /ADD FRACTIONS JMS NORM /NORMALIZE RESULT JMP I FAD /RETURN / RSHFT, 0 /SHIFT RIGHT TAD (ACX /DEFAULT IS FAC JMS SETUP ISZ I P /BUMP EXPONENT RSLP, ISZ P TAD I P RAR DCA I P ISZ CT JMP RSLP JMP I RSHFT / ADD, 0 /ADD TO FAC TAD (OP+5 DCA PP2 TAD (AC+5 JMS SETUP ADDLP, RAL /CARRY TAD I PP2 TAD I P DCA I P /ADD ONE WORD STA TAD P /COMPLEMENT LINK DCA P STA TAD PP2 /COMPLEMENT LINK DCA PP2 ISZ CT JMP ADDLP JMP I ADD NORM, 0 /NORMALIZE FAC TAD AC SPA CLA /CHECK FOR OVERNORMALIZATION JMS RSHFT /AND CORRECT NORMLP, STL RTR AND AC SZA CLA /NORMALIZED? JMP I NORM /YES TAD (AC+5 JMS SETUP LSLP, TAD I P RAL /LEFT SHIFT DCA I P /FAC 1 BIT STA CML /COMPLEMENT LINK TAD P DCA P ISZ CT JMP LSLP STA TAD ACX /BUMP EXP DCA ACX /DOWN 1 JMP NORMLP FMPTEN, 0 /FLTG MULTIPLY BY 10.0 OR .1 TAD (TEN JMS SETUP TAD AC SNA CLA /AC=0 MEANS RESULT=0 JMP I FMPTEN TAD I P TAD ACX /FUDGE FAC DCA ACX /EXPONENT TAD (MUX DCA X11 TAD (ACX DCA SETUP TAD (OPX DCA X10 DCA MUX /CLEAR MULT TEMP EXP MPLP1, ISZ SETUP TAD I SETUP /MOVE FAC DCA I X10 /TO OP DCA I SETUP /CLEAR FAC ISZ P TAD I P /MOVE MULTIPLIER DCA I X11 /TO MULT TEMP ISZ CT JMP MPLP1 / MPLP2, TAD (MUX-ACX JMS RSHFT /SHIFT MULT TEMP RIGHT 1 SZL JMS ADD /ADD IF LOW ORDER BIT WAS 1 JMS RSHFT /SHIFT FAC RIGHT TAD MU+5 SZA CLA /12 SUCCESSIVE 0 BITS JMP MPLP2 /IN MULTIPLIER MEANS DONE JMS NORM JMP I FMPTEN / SETUP, 0 /COMMON CODE DCA P TAD (-6 DCA CT CLL JMP I SETUP / MUX, 0 /MULT TEMP MU, ZBLOCK 6 CT=CPTMP P=EXTMP PP2=PAGEN PAGE IFNZRO RALF < ESDBUF, PNDL+6 /ESD ENTRY FOR SECTION #MAIN PNDL /DITTO FOR BLANK COMMON ZBLOCK 376 /FILL TO 400 LOCS / / BEGIN OF PASS 2: / DUMP EXTERNAL SYMBOL DICTIONARY / DURING PASSES 2 AND 3, THIS IS INPUT BUFFER / DMPESD, CLA CLL CMA RAL /-2 DCA EXTMP2 /PASS CONTROL TAD (3 /RALF OUTPUT IDENTIFIER DCA I OUTPTR TAD VERS DCA I OUTPTR /THIS MAKES 6-WORD ENTRIES TAD DPFLG /4000=NEED DP HARDWARE DCA I OUTPTR /EXACTLY FILL A BLOCK DCA I OUTPTR ESDSCN, TAD (ESDBUF-1 DCA X10 /POINT TO POINTERS TAD (ESDBUF+177 DCA X12 /POINT TO INITAIL CHARS TAD ESDNO CIA DCA EXTMP ESDLUP, TAD (-3 DCA LTEMP /NAME LENGTH COUNT TAD (EQUN-1 /WHERE WE'LL KEEP THE NAME DCA X13 TAD I X10 /GET POINTER DCA X11 TAD I X12 /GET FIRST CHAR SNA /BLANK BECOMES # TAD (43 ESDNLP, JMS I [R6L DCA EQUN+2 CDF FLD1 TAD I X11 /GET NEXT PAIR FROM SYMBOL TABLE DCA EQUN+3 /HOLD IT CDF FLD0 TAD EQUN+3 JMS I [R6R /GET LEFT CHAR TAD EQUN+2 /COMBINE THEM DCA I X13 TAD EQUN+3 /GET RIGHT HALF OF PAIR AND [77 ISZ LTEMP JMP ESDNLP AND [37 /DROP FORCE BIT FROM TYPE DCA EQUN+3 CDF FLD1 TAD I X11 /HIGH VALUE DCA EQUN+4 TAD I X11 /LOW VALUE DCA EQUN+5 CDF FLD0 TAD EXTMP2 /WHAT PASS IS THIS? RAR /LINK 0 IF FIRST, 1 IF SECOND SNL CLA JMP NOENTS /FIRST, ENTRYS NOT OUTPUT TAD EQUN+3 /OUTPUT ENTRIES ONLY ON 2ND CLL RAR SNA CLA SNL JMP ESDLND /NO GO JMP ESDOUT /YES, PUT IT NOENTS, TAD EQUN+3 /EXT, COMM, OR SCTN CLL RAR SNA /SKIP IF OK JMP ESDLND /UNDEFINED OR ENTRY RAR SNA CLA JMP ESDOUT /IF EXTERN, DO IT TAD EQUN+4 /IF SECTION, CHECK AND [7 /THAT LENGTH SNA /IS NON-ZERO TAD EQUN+5 SNA CLA JMP ESDLND /ZERO LEN JUST GETS IN THE WAY ESDOUT, TAD (EQUN-1 DCA X13 TAD (-6 DCA LTEMP TAD I X13 /GET OUTPUT WORD DCA I OUTPTR ISZ LTEMP JMP .-3 /6-WORD ENTRIES TAD OUTPTR TAD OUTBUF SPA CLA JMP ESDLND /NOT END OF BLOCK YET JMS I (OUTBLK TAD (3 DCA I OUTPTR DCA I OUTPTR DCA I OUTPTR DCA I OUTPTR ESDLND, ISZ EXTMP /GO THRU ESD LIST JMP ESDLUP ISZ EXTMP2 /WHOLE LIST TWO PASSES JMP ESDSCN TAD (-6 /THEN STORE END-OF-ESD DCA LTEMP DCA I OUTPTR ISZ LTEMP JMP .-2 TAD (377 /FORCE BLOCK OUTPUT JMS I (FULCHK CDF FLD1 /THEN DEFAULT ORG TAD I (LMAIN /IF MAIN LEN .NE. 0 AND [7 SNA TAD I (LMAIN+1 CDF FLD0 SNA CLA JMP I (RESET /FIRST SECTION WILL GET IT TAD (TTORG+1 /ORG TO ZERO OF MAIN DCA I OUTPTR DCA I OUTPTR DCA I OUTPTR JMP I (RESET OUTBUF, 1001 PAGE /> / / INITIALIZATION CODE / BEGIN, JMP CHNIN /IF ENTERED BY CHAIN GCMND, CIF 10 /IF ENTERED BY .R, ETC JMS I USR /USR IS LEFT OVER 5 /DECODE IFZERO RALF < 620 /DEFAULT EXT = .FP> IFNZRO RALF < 2201 /DEFAULT EXT = .RA> DCA I (RETSYS /NO NEED FOR IT IF NOT CHAINED CHNIN, JMS I (7607 4100 /TEMP WRITE OUT OVERLAY 6600 /NOW AT 6600 40 /TO SYS SCRATCH BLK 40 JMP I (7605 /ERROR CDF 10 IFNZRO RALF < TAD I [7600 /BIN FILE UNIT AND NP17 SNA /IS THERE ONE? JMP DEFBIN /NO, SET DEFAULT TAD (7757 /POINT TO DEV CTRL WORD DCA WORD1 TAD I WORD1 SPA CLA JMP OKBIN /FILE-STRUCTURED, OK CDF 0 JMS I (PRTXT /TYPE MESSAGE TXBBIN-1 -TXBLN JMS I [CRLF JMP GCMND /TRY AGAIN / DEFBIN, CLA IAC /DEFAULT BIN UNIT IS SYS DCA I [7600 /SET UNIT TAD [7600 DCA X10 /SET POINTER TAD (0617 /FO DCA I X10 TAD (2224 /RT DCA I X10 TAD (2216 /RN DCA I X10 /FORTRN. DCA I X10 CDF 0 JMP I (NOEXT /NOW, OPEN THE FILE> OKBIN, CDF 0 /HAVE TO GO TO ANOTHER PAGE JMP I (NOKBIN /ONLY SO MANY PATCHES TO A PAGE GBIN, CDF 10 TAD I (7644 AND (20 SNA CLA ISZ SYONLY /=NO SLASH T CDF 0 JMS I (NEW /**SEE IF NEED 2 PG HANDLER 7600 JMS I (OOPEN DCA BFILE IFNZRO RALF < TAD R41 /L OR G SWITCH** CDF 10 AND I (7643 /TEST /L OR /G SWITCH CDF 0 SNA CLA /** JMP KCHN /KILL CHAIN, IT'S SET CIF 10 CLA IAC /UNIT IS SYS JMS I USR 2 /LOOKUP LBLK, LDRNAM /LOADER.SV R41, 41 /** JMP KCHN /NO FIND, NO CALL TAD LBLK /STARTING BLOCK DCA I (LDRBLK /FOR CHAIN TAD I (OUBLK /OUTPUT STARTING BLOCK DCA I (PASBLK /SAVED FOR CHAIN TO LOADER CLA CMA /ENABLE CHAIN KCHN, DCA I (CHNSW /OR KILL IT, WHATEVER> JMS I (INCHK /NOW CHECK INPUT DEVICES FOR 2 PG HANDLERS JMS I (INNEWF /GET INPUT HANDLER CLA CMA DCA I (INCHCT /SET INITIAL COUNT TAD NP7700 DCA USR /FROM NOW ON, USE THE HIGH CALL JMS I (NEW 7605 /CHECK LIST DEV TOO** CDF 10 TAD I (7611 /LST FILE EXT SNA TAD (1423 /LS DEFAULT DCA I (7611 TAD I (7666 /GET DATE DCA WORD1 / / MOVE SYMBOL TABLE TO ITS PROPER LOCATION / TAD (1777 DCA X10 /LOADED ADDRESS OF SYMBOL TABLE CLA CMA DCA X11 /WE MOVE IT TO ASSEMBLED ADDRESS TAD (-FREE /LENGTH OF SYMBOL TABLE DCA WORD2 /SET COUNT TAD I X10 DCA I X11 /THIS SAVES SWAPS OF USR ISZ WORD2 JMP .-3 CDF 0 JMP I (GDATE /CHECK FOR FPP PRESENCE** PAGE / / PUT THE DATE INTO THE PAGE HEADING / GDATE, TAD (1000 DCA I (7746 /SET NO-RESTART BIT /PUT VERNUM IN TITLE LINE TAD VMSG DCA I (VMTXT TAD VMSG+1 /PATCH LEVEL DCA I (VMTXT+1 DCA OCNT /CLEAR OCNT TAD WORD1 /RE-GET DATE SNA JMP I (NEWLIN /GOLLY, AND ALL THIS CODE WASTED AND (370 CLL RTR RAR TAD (-12 SPA JMP .+3 ISZ OCNT JMP .-4 TAD (72 /60+12 DCA OTEMP TAD (TITDAT-1 DCA X11 TAD OCNT JMS I (R6L SZA TAD (6000 TAD OTEMP DCA I X11 TAD WORD1 AND (7400 /MONTH JMS I (R6L TAD (MONTHS-3 DCA X10 TAD I X10 DCA I X11 TAD I X10 DCA I X11 DCA OCNT TAD WORD1 AND [7 DCA OTEMP TAD I (7777 AND (600 RTR CLL RTR TAD OTEMP TAD (106 TAD (-12 SPA JMP .+3 ISZ OCNT JMP .-4 TAD (72 DCA OTEMP TAD (5560 TAD OCNT DCA I 11 TAD OTEMP JMS I (R6L TAD (40 DCA I X11 JMP I (NEWLIN VMSG, VNUM&70^10+VNUM&707+6060 PATCH&77^100+40 IFNZRO RALF < LDRNAM, TEXT "LOAD@@SV" TXBBIN, TEXT "BIN OUT DEV NOT FILE-STRUCTURED" TXBLN= .-TXBBIN > MONTHS, TEXT "-JAN-FEB-MAR-APR-MAY-JUN-JUL-AUG-SEP-OCT-NOV-DEC" PAGE /PAGE FOR NEW CODE REQUIRED FOR OS/8 FORTRAN NEW, 0 TAD NT2 /CHECK IF ALREADY CHECKED SZA CLA JMP NEWDON TAD I NEW /NO. GET THE DEV TO CHECK DCA NTEMP CDF 10 TAD I NTEMP /GET DEV.NUM AND [17 DCA NT1 /INCHK NEEDS TO KNOW TOO TAD NT1 SNA /IF 0,THEN NO DEVICE JMP NEWDON DCA NTEMP CLA CMA TAD I (37 /GET PTR TO DEV TBL TAD NTEMP DCA NTEMP /PTS TO ENTRY IN DEV TBL TAD I NTEMP CDF 0 SMA CLA JMP FIX /NOT A 2 PG HANDLER TAD (6377 /FIX ALL LOCATIONS THAT REFER TO /THE BUFFER VARIABLES. /THE CHANGES ARE: /OUBUF=6000,LINE=6400,INDEVH=6600,OUDEVH=7200 /INRECS=1,INCTL=200 DCA I (BLINE TAD (6000 DCA I (NOUBUF IFNZRO RALF < TAD (5777 DCA I (MOUBUF > /FLAP DOESN'T USE ALL THE RALF LOCNS TAD (6601 DCA I (NINDEV TAD (201 DCA I (NINCTL JMS TPNSH /TWO-PAGE NON-SYSTEM HANDLER DCA I (NINREC TAD (6000 DCA I (LOUBUF TAD (7201 DCA I (NOUDEV TAD (5777 DCA I (OUTPTR TAD (6377 DCA I (CHRPTR IFNZRO RALF < TAD (1401 DCA I (KOUBUF > TAD (7201 FIX, DCA NT2 /SET SO IF DID 2 PGS., DONT DO IT AGAIN NEWDON, ISZ NEW /GET CORRECT ADDR JMP I NEW NTEMP, 0 NT1, 0 /DEV. NUM. NT2, 0 /0 IF NO 2PG HANDLERS YET INCHK, 0 /CHECK THE INPUT DEVICES JMS NEW INLOC, 7617 TAD INLOC DCA NEXTIN ANOTH, TAD NT1 SNA CLA /SKIP IF FILE USED JMP I INCHK TAD NT2 SZA CLA /SKIP IF STILL 1 PAGE HANDLERS JMP I INCHK TAD NP2 TAD NEXTIN DCA NEXTIN /INCREMENT TO PT TO NEXT INPUT FILR JMS NEW NEXTIN, 0 JMP ANOTH NP2, 2 NOKBIN, CDF 10 /BELONGS WITH INIT CODE TAD I [7600 AND NP17 TAD (7646 DCA WORD1 /CREATE POINTER INTO DEV TBL TAD I WORD1 CDF 0 TAD (-7607 SNA CLA /IF ITS SYS, NO PROBLEMS DCA I (RETSYS /SO CAN ZERO CALL TO DELETE ROUTINE CDF 10 TAD I (7604 SZA JMP FEND /AN EXT WAS SPECIFIED IFZERO RALF < TAD (0216 /.BN DEFAULT FOR FLAP JMP FEND > IFNZRO RALF < NOEXT, CDF 10 TAD I (7643 /CHECK IF L OR G SPEC AND L41 SNA CLA TAD (0610 /NO-NEEDS RL EXT TAD (1404 > /YES-NEEDS LD FEND, DCA I (7604 CDF 0 JMP I (GBIN L41, 41 TPNSH, 0 TAD (1401 /CHANGE OUTPUT BUFFER DCA I (OUTBUF IAC JMP I TPNSH / PAGE LDADR, RELOC OVBUFR TAD ERRORS /ERROR COUNT JMS I (DECOUT JMS I (PRTXT /"ERRORS" TXERR-1 -TXELN JMS I [CRLF IFZERO RALF < TAD PASSNO /IF NOT LISTING PASS SPA SNA CLA /ERROR COUNT IS ENUF JMP I (RETSYS > TAD NEXT TAD (-FREE+1 /DON'T COUNT BASIC SYMBOLS CLL RAR /DIVIDE JMS I (OVER3 /BY 6 JMS I (DECOUT JMS I (PRTXT /"SYMBOLS, " TXSYM-1 -TXSLN IFZERO RALF < TAD LINKS JMS I (DECOUT JMS I (PRTXT /"LINKS" TXLNK-1 -TXLLN > IFNZRO RALF < TAD ABREFS JMS I (DECOUT JMS I (PRTXT /"ABS REFS" TXABR-1 -TXALN > JMS I [CRLF TAD (-33 /27 BUCKETS DCA LTEMP DCA BUCKET CLA CMA DCA OPCODE /SYMBOLS PER LINE COUNTER STPRNT, TAD BUCKET DCA EXTMP /BUCKET START ADDRESS LUPBKT, CDF FLD1 TAD I EXTMP /WAS THAT LAST SYMBOL ? SNA JMP NXTBKT /YES, GO GET NEXT BUCKET DCA EXTMP /SAVE LINK ADDR TAD EXTMP DCA X14 /SET UP POINTER FOR NAME ISZ OPCODE /IS LINE FULL? JMP .+4 /NO TAD (-4 DCA OPCODE JMS I [CRLF TAD BUCKET SNA /WATCH FOR # TAD (43 JMS I [PRINT2 /PRINT BUCKET (FIRST) CHAR CDF FLD1 TAD I X14 /SYMBOL JMS I [PRINT2 /PRINT 2 AND 3 CDF FLD1 TAD I X14 JMS I [PRINT2 /PRINT 4 AND 5 CDF FLD1 TAD I X14 IFNZRO RALF < DCA OTEMP /HOLD TAD OTEMP > AND [7700 /PRINT 6 AND BLANK JMS I [PRINT2 IFNZRO RALF < TAD OTEMP /GET TYPE AND [17 TAD (TYPCOD /POINT TO TABLE DCA OTEMP TAD I OTEMP /GET TYPE INDICATOR JMS I [PRINT2 > CDF FLD1 TAD I X14 /PRINT FIRST DIGIT AND [7 JMS I (PDIG /FIELD DIGIT CDF FLD1 TAD I X14 /LOW 12 BITS JMS I [OCTOUT JMS I [PRINT2 /TWO BLANKS JMP LUPBKT NXTBKT, ISZ BUCKET /NEXT BUCKET CHAR CDF FLD0 ISZ LTEMP /INCREMENT COUNT JMP STPRNT JMS I [CRLF /DO FINAL CRLF** TAD (214 /DO NOT PAGEJ JMS I PC /THAT WOULD GIVE A HEADING JMS I (OCLOSE JMP I (RETSYS /FINISH IT OFF PAGE RELOC / PAGE 0 LITERALS FIELD 1 *10000 / / SYMBOL TABLE IS IN FIELD ONE. / EACH ENTRY HAS THE FOLLOWING FORMAT / / 0: POINTER TO NEXT ENTRY IN BUCKET, 0 IF LAST / 1: 2ND AND 3RD CHARS OF SYMBOL / 2: 4TH AND 5TH / 3: 6TH AND TYPE CODE / 4: ESD # AND HIGH-ORDER VALUE / 5: LOW-ORDER VALUE / USER=1 XTERN=2 COMMN=3 SECTN=4 PSUDO=5 PDPMR=6 FPPMRF=7 FPPSF1=10 /JXN, TRAP FPPSF2=11 /JA, SETB, SETX FPPSF3=12 /CLA, EXIT, NEG, NOP, NORM, /PAUS, JAC, STARTD, STARTF FPPSF4=13 /ALN, ATX, XTA FPPSF5=14 /ADDX, LDX FPPMRI=15 /% FPPMRS=16 /' FPPMRL=17 /# PDPOP=20 / / THE FOLLOWING CODE TRICKS THE LOADER INTO PUTTING / THE SYMBOL TABLE AT 2000, WHERE THE USR IS NOT, / THUS SAVING SOME SWAPPING AT LOAD AND INITIALIZE. / IT IS MOVED TO THE ASSEMBLED ADDRESS AFTER WE'RE / DONE WITH THE USR, AND BEFORE THE FIRST PASS BEGINS / *12000 NOPUNCH *10000 ENPUNCH / / BUCKETS FOR USER-DEFINED SYMBOLS / AND PDP8 OPERATES AND IOTS / PNDL ZBLOCK 33 / / BUCKETS FOR INTERNALLY DEFINED SYMBOLS / AL BL CL DL EL FL GL HL IL JL KL LL ML NL OL PL QL RL SL TL UL VL WL XL YL ZL AL, .+5 /ADDR 0404;2200 FPPSF2 0 .+5 /ADDX 0404;3000 FPPSF5 0110 .+5 /ALN 1416;0 FPPSF4 0010 IFZERO RALF < .+5 /AND 1604;0 PDPMR AND 0 > IFNZRO RALF < .+5 /AND . 1604;0 PDPMR 200 .+5 /AND% 1604;0 PDPMR+500 600 .+5 /ANDZ 1604;3200 PDPMR 0 .+5 /ANDZ% 1604;3200 PDPMR+500 400 > 0 /ATX 2430;0 FPPSF4 0020 BL, 0 /BASE 0123;0500 PSUDO BASEX CL, .+5 /CDF 0406;0 PDPOP CDF .+5 /CIA 1101;0 PDPOP CIA .+5 /CIF 1106;0 PDPOP CIF .+5 /CLA 1401;0 PDPOP CLA .+5 /CLL 1414;0 PDPOP CLL .+5 /CMA 1501;0 PDPOP CMA IFZERO RALF < 0 > IFNZRO RALF < .+5 > 1514;0 /CML PDPOP CML IFNZRO RALF < .+5 /COMMON 1715;1517 PSUDO+1600 COMMX 0 /COMMZ (8-MODE COMM SECT) 1715;1532 PSUDO SECT8X-1 > DL, IFZERO RALF < .+5 /DCA 0301;0 PDPMR DCA 0 > IFNZRO RALF < .+5 /DCA . 0301;0 PDPMR 3200 .+5 /DCA% 0301;0 PDPMR+500 3600 .+5 /DCAZ 0301;3200 PDPMR DCA 0 .+5 /DCAZ% 0301;3200 PDPMR+500 DCA I 0 > IFZERO RALF < 0 > /DECIMAL IFNZRO RALF < .+5 > 0503;1115 PSUDO+0100 DECX IFNZRO RALF < 0 /DPCHK 2003;1013 PSUDO DPCHKX > EL, .+5 /E 0;0 PSUDO EX .+5 /END 1604;0 PSUDO ENDX IFZERO RALF < 0 /ENPUNCH 1620;2516 PSUDO+0300 ENPNCX > IFNZRO RALF < .+5 /ENTRY 1624;2231 PSUDO ENTRX 0 /EXTERN 3024;0522 PSUDO+1600 EXTRNX > FL, .+5 /F 0;0 PSUDO FX .+5 /FADD 0104;0400 FPPMRF 1000 .+5 /FADD# 0104;0400 FPPMRL+300 1000 .+5 /FADD% 0104;0400 FPPMRI+500 1000 .+5 /FADD' 0104;0400 FPPMRS+700 1000 .+5 /FADDM 0104;0415 FPPMRF 5000 .+5 /FADDM# 0104;0415 FPPMRL+300 5000 .+5 /FADDM% 0104;0415 FPPMRI+500 5000 .+5 /FADDM' 0104;0415 FPPMRS+700 5000 .+5 /FCLA 0314;0100 FPPSF3 0002 .+5 /FDIV 0411;2600 FPPMRF 3000 .+5 /FDIV# 0411;2600 FPPMRL+300 3000 .+5 /FDIV% 0411;2600 FPPMRI+500 3000 .+5 /FDIV' 0411;2600 FPPMRI+700 3000 .+5 /FEXIT 0530;1124 FPPSF3 0 IFNZRO RALF < .+5 /FIELD1 (8-MODE FIELD1 SECT) 1105;1404 PSUDO+6100 SECT8X-2 > .+5 /FLDA 1404;0100 FPPMRF 0000 .+5 /FLDA# 1404;0100 FPPMRL+300 0000 .+5 /FLDA% 1404;0100 FPPMRI+500 0000 .+5 /FLDA' 1404;0100 FPPMRS+700 0000 .+5 /FMUL 1525;1400 FPPMRF 4000 .+5 /FMUL# 1525;1400 FPPMRL+300 4000 .+5 /FMUL% 1525;1400 FPPMRI+500 4000 .+5 /FMUL' 1525;1400 FPPMRS+700 4000 .+5 /FMULM 1525;1415 FPPMRF 7000 .+5 /FMULM# 1525;1415 FPPMRL+300 7000 .+5 /FMULM% 1525;1415 FPPMRI+500 7000 .+5 /FMULM' 1525;1415 FPPMRS+700 7000 .+5 /FNEG 1605;0700 FPPSF3 0003 .+5 /FNOP 1617;2000 FPPSF3 0040 .+5 /FNORM 1617;2215 FPPSF3 0004 .+5 /FPAUSE 2001;2523 FPPSF3+0500 0001 .+5 /FPCOM 2003;1715 PDPOP 6553 .+5 /FPHLT 2010;1424 PDPOP 6554 .+5 /FPICL 2011;0314 PDPOP 6552 .+5 /FPINT 2011;1624 PDPOP 6551 .+5 /FPIST 2011;2324 PDPOP 6557 .+5 /FPRST 2022;2324 PDPOP 6556 .+5 /FPST 2023;2400 PDPOP 6555 .+5 /FSTA 2324;0100 FPPMRF 6000 .+5 /FSTA# 2324;0100 FPPMRL+300 6000 .+5 /FSTA% 2324;0100 FPPMRI+500 6000 .+5 /FSTA' 2324;0100 FPPMRS+700 6000 .+5 /FSUB 2325;0200 FPPMRF 2000 .+5 /FSUB# 2325;0200 FPPMRL+300 2000 .+5 /FSUB% 2325;0200 FPPMRI+500 2000 0 /FSUB' 2325;0200 FPPMRS+700 2000 GL= 0 /AINT NONE HL, 0 /HLT 1424;0 PDPOP HLT IL, .+5 /IAC 0103;0 PDPOP IAC .+5 /IFFLAP 0606;1401 PSUDO+2000 IFZERO RALF <TRUE> IFNZRO RALF <FALSE> .+5 /IFNDEF 0616;0405 PSUDO+0600 IFNDFX .+5 /IFNEG 0616;0507 PSUDO IFNEGX .+5 /IFNSW 0616;2327 PSUDO IFNSWX .+5 /IFNZRO 0616;3222 PSUDO+1700 IFNZRX .+5 /IFPOS 0620;1723 PSUDO IFPOSX .+5 /IFRALF 0622;0114 PSUDO+0600 IFNZRO RALF <TRUE> IFZERO RALF <FALSE> .+5 /IFREF 0622;0506 PSUDO IFREFX .+5 /IFSW 0623;2700 PSUDO IFSWX .+5 /IFZERO 0632;0522 PSUDO+1700 IFZROX .+5 1604;0530 PSUDO INDXX .+5 /IOF 1706;0 PDPOP IOF .+5 /ION 1716;0 PDPOP ION IFZERO RALF < 0 /ISZ 2332;0 PDPMR ISZ 0 > IFNZRO RALF < .+5 /ISZ . 2332;0 PDPMR ISZ .&7600 .+5 /ISZ% 2332;0 PDPMR+500 ISZ I .&7600 .+5 /ISZZ 2332;3200 PDPMR ISZ 0 0 /ISZZ% 2332;3200 PDPMR+500 ISZ I 0 > JL, .+5 /JA 0100;0 FPPSF2 1030 .+5 /JAC 0103;0 FPPSF3 0007 .+5 /JAL 0114;0 FPPSF2 1070 .+5 /JEQ 0521;0 FPPSF2 1000 .+5 /JGE 0705;0 FPPSF2 1010 .+5 /JGT 0724;0 FPPSF2 1060 .+5 /JLE 1405;0 FPPSF2 1020 .+5 /JLT 1424;0 FPPSF2 1050 IFZERO RALF < .+5 /JMP 1520;0 PDPMR JMP 0 .+5 /JMS 1523;0 PDPMR JMS 0 > IFNZRO RALF < .+5 /JMP . 1520;0 PDPMR JMP .&7600 .+5 /JMP% 1520;0 PDPMR+500 JMP I .&7600 .+5 /JMPZ 1520;3200 PDPMR JMP 0 .+5 /JMPZ% 1520;3200 PDPMR+500 JMP I 0 .+5 /JMS . 1523;0 PDPMR JMS .&7600 .+5 /JMS% 1523;0 PDPMR+500 JMS I .&7600 .+5 /JMSZ 1523;3200 PDPMR JMS 0 .+5 /JMSZ% 1523;3200 PDPMR+500 JMS I 0 > .+5 /JNE 1605;0 FPPSF2 1040 .+5 /JSA 2301;0 FPPSF2 1120 .+5 /JSR 2322;0 FPPSF2 1130 0 /JXN 3016;0 FPPSF1 2000 KL, .+5 /KCC 0303;0 PDPOP KCC .+5 /KRB 2202;0 PDPOP KRB .+5 /KRS 2223;0 PDPOP KRS 0 /KSF 2306;0 PDPOP KSF LL, .+5 /LAS 0123;0 PDPOP LAS .+5 /LDX 0430;0 FPPSF5 0100 .+5 /LISTOFF 1123;2417 PSUDO+0600 LSTOFX 0 /LISTON 1123;2417 PSUDO+1600 LSTONX ML= 0 /NO LIST NL, IFZERO RALF < .+5 > IFNZRO RALF < 0 > 1720;0 /NOP PDPOP NOP IFZERO RALF < 0 /NOPUNCH 1720;2516 PSUDO+0300 NOPNCX > OL, .+5 /OCTAL 0324;0114 PSUDO OCTALX .+5 /ORG 2207;0 PSUDO ORGX 0 /OSR 2322;0 PDPOP OSR IFZERO RALF < PL, 0 /PAGE 0107;0500 PSUDO PAGEX > IFNZRO RALF <PL=0 > QL= 0 /WHAT DID YOU EXPECT? RL, .+5 /RAL 0114;0 PDPOP RAL .+5 /RAR 0122;0 PDPOP RAR .+5 /RDF 0406;0 PDPOP RDF .+5 /REPEAT 0520;0501 PSUDO+2400 REPETX .+5 /RIB 1102;0 PDPOP RIB .+5 /RIF 1106;0 PDPOP RIF .+5 /RMF 1506;0 PDPOP RMF .+5 /RTL 2414;0 PDPOP RTL 0 /RTR 2422;0 PDPOP RTR SL, .+5 /S 0;0 PSUDO SX IFNZRO RALF < .+5 /SECT 0503;2400 PSUDO SECTX .+5 /8 MODE SECT 0503;2470 PSUDO SECT8X > .+5 /SETB 0524;0200 FPPSF2 1110 .+5 /SETX 0524;3000 FPPSF2 1100 .+5 /SKP 1320;0 PDPOP SKP .+5 /SMA 1501;0 PDPOP SMA .+5 /SNA 1601;0 PDPOP SNA .+5 /SNL 1614;0 PDPOP SNL .+5 /SPA 2001;0 PDPOP SPA .+5 /STARTD 2401;2224 FPPSF3+0400 0006 .+5 /STARTE 2401;2224 FPPSF3+0500 0050 .+5 /STARTF 2401;2224 FPPSF3+0600 0005 .+5 /STL 2414;0 PDPOP STL .+5 /SZA 3201;0 PDPOP SZA 0 /SZL 3214;0 PDPOP SZL TL, IFZERO RALF < .+5 /TAD 0104;0 PDPMR TAD 0 > IFNZRO RALF < .+5 /TAD . 0104;0 PDPMR TAD .&7600 .+5 /TAD% 0104;0 PDPMR+500 TAD I .&7600 .+5 /TADZ 0104;3200 PDPMR TAD 0 .+5 /TADZ% 0104;3200 PDPMR+500 TAD I 0 > .+5 /TCF 0306;0 PDPOP TCF .+5 /TEXT 0530;2400 PSUDO TEXTX .+5 /TLS 1423;0 PDPOP TLS .+5 /TPC 2003;0 PDPOP TPC .+5 /TRAP3 2201;2063 FPPSF1 3000 .+5 /TRAP4 2201;2064 FPPSF1 4000 .+5 /TRAP5 2201;2065 FPPSF1 5000 .+5 /TRAP6 2201;2066 FPPSF1 6000 .+5 /TRAP7 2201;2067 FPPSF1 7000 0 /TSF 2306;0 PDPOP TSF UL= 0 VL= 0 WL= 0 XL, 0 /XTA 2401;0 FPPSF4 0030 YL= 0 ZL, 0 /ZBLOCK 0214;1703 PSUDO+1300 ZBLKX IFZERO RALF < PNDL=0 > IFNZRO RALF < PNDL, .+6 /BLANK COMMON 0;0 3 /CODE FOR COMMON 40;0 /ESD #2, LEN=0 0 /#MAIN 1501;1116 4 /CODE FOR SECTION LMAIN, 20;0 /ESD #1, LEN=0> FREE, END, END /NICE WHEN FLAP ASSEMBLES $ |
Added src/os8/uni/LANGUAGE/FORTRAN4/RTL.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 | /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) // // 18-DEC-2018 LHN - edited the changes in FPAT.PA into // this source file. This didn't change // the version number. // /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 // // FPAT patch // // IAC AND FPAT1 // // 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 // // FPAT patch // *2742 FPAT1, 7770 // 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 (6220 // CIF 20-2 FPAT patch so TDSET works. 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 // // FPAT patch // //TDSET, 0 // DCA I (7721 // TAD I (7721 // DCA I (7727 // TAD I (7721 // IAC // DCA I (7642 // JMP I TDSET // TEM=CHAND // L7=CLSERR+1 // TDSET, 0 //SUBROUTINE TO RELOCATE ALL CIF/CDF'S DCA TEM //TO FIELDS 1-7 IN SYSTEM HANDLER 1ST TAD L7635 //PAGE 07635 AND ABOVE. DCA P1 // JMP LOOP // L7635, 7635 // L1570, 1570 // L7710, 7710 // // 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 // // FPAT patch // // *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/uni/LANGUAGE/FORTRAN4/RTS.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 | /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/uni/README.md.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | # OS/8 Combined (Unified) Kit This subtree builds the OS/8 Combined Kit from source into a variety of distribution media images. It is signifcant because it is the latest, greatest, official distribution of OS/8. The kit is described in Software Product Description (S.P.D. 4.4.5) which can be found starting at page 21 of the October-November 1980 PDP-8 Digital Software News AA-K629A-BA. The SPD defines the minimum hardware requirement as: PDP-8/A, /E, or /M with 12K words of memory or DECStation 88/80, /90, /92, or /97, with RK8J or RL8A disk. (However I know this system will run on a single TD8E DECtape system. And it should run fine on PDP-8/i hardware, and with a little fiddling with old device drivers should support RF08 disk.) The OS/8 Combined Kit Information Guide (order number AA-J016B-TA) describes the kit in an overview section as follows: As the name implies, the kit is a combination of OS/8 software products. It includes the software and documentation contained in the following kits: o OS/8, Version 3D, Operating System (described in Software Product Description (S.P.D. 4.1.11) o OS/8, Version 3D, Extension (S.P.D. 4.5.8) o OS/8, Version 3D, Device Extensions for RL01, RX02, and KT8A (S.P.D. 4.12.0) o OS/8, Version 3D, FORTRAN IV (S.P.D. 4.10.7) In addition, the kit's modules have been updated with the binary patches described in the OS/8 Device Extensions User's Guide and in the issues of the Digital Software News (through June 1979). It details documentation appropriate to the kit as follows: OS/8 COMBINED KIT INFORMATION GUIDE - AA-J016B-TA Describes the kit's contents and how to get the system on line. OS/8 COMBINED KIT - V3D SPD 4.4.2 Describes the OS/8 Combined Kit, its options, licenses, support category and other pertinent information. OS/8 DEVICE EXTENSION RELEASE NOTES - AA-H565A-TA Contains supplemental information on the features of the OS/8 Device Extensions Kit not discussed in the DEVICE EXTENSIONS USER'S GUIDE. OS/8 DEVICE EXTENSIONS USER'S GUIDE - AA-D319A-TA Describes the RL01 and RX02 disks, their bootstrap procedures, and the software support for the KT8A (128K) Memory Management option. OS/8 ERROR MESSAGES - AA-H610A-TA Describes the error messages generated by the OS/8 Monitor and its system programs. OS/8 FORTRAN IV SOFTWARE SUPPORT MANUAL - DEC-S8-LFSSA-A-D Describes internal features of OS/8 FORTRAN IV that may be useful to the advanced user. OS/8 LANGUAGE REFERENCE MANUAL - AA-H609A-TA Describes the languages supported by OS/8: BASIC, FORTRAN IV, PAL8, FORTRAN II, FLAP/RALF, and SABR. OS/8 MARK SENSE BATCH USER'S MANUAL - DEC-S8-OBUGA-A-D Describes the use and operation of the Mark Sense Batch (MSBATCH) OS/8 system program. It includes step-by-step procedures for preparing programs for submission to MSBATCH. OS/8 SOFTWARE SUPPORT MANUAL - DEC-S8-OSSMB-A-D Describes internal system features that may be useful to the advanced user. OS/8 SYSTEM GENERATION NOTES - AA-H606A-TA Describes PDP-8/E bootstrap procedures for LINCtape, DECtape (TC08 and TD8E), and disk (DF32, RF08, RK08, RK8E, and RX01), as well as procedures for building the system from paper tape and DECassette (TA8E). OS/8 SYSTEM REFERENCE MANUAL - AA-H607A-TA Describes the OS/8 system conventions, keyboard commands and utility programs. OS/8 TECO REFERENCE MANUAL - AA-H608A-TA Describes the Text Editing and Correcting program for OS/8 users. OS/8 V3D SYSTEM RELEASE NOTES - DEC-S8-OSRNA-B-D Describes the differences between version V3D of OS/8 and previous versions, as well as corrections to known software problems. TECO POCKET GUIDE - AV-D530A-TK Contains a guick-reference summary of OS/8 TECO commands. ### <a id="license"></a>License Copyright © 2020 by Bill Cattey. Licensed under the terms of [the SIMH license][sl]. |
Added src/os8/uni/README.md~.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | # OS/8 Combined (Unified) Kit This subtree builds the OS/8 Combined Kit from source into a variety of distribution media images. The kit is described in Software Product Description (S.P.D. 4.4.5) which can be found starting at page 21 of the October-November 1980 PDP-8 Digital Software News AA-K629A-BA. As detailed below, this is the latest, greatest official distribution of OS/8. The SPD defines the minimum hardware requirement as: PDP-8/A, /E, or /M with 12K words of memory or DECStation 88/80, /90, /92, or /97, with RK8J or RL8A disk. (However I know this system will run on a single TD8E DECtape system. And it should run fine on PDP-8/i hardware, and with a little fiddling with old device drivers should support RF08 disk.) The OS/8 Combined Kit Information Guide (order number AA-J016B-TA) describes the kit in an overview section as follows: As the name implies, the kit is a combination of OS/8 software products. It includes the software and documentation contained in the following kits: o OS/8, Version 3D, Operating System (described in Software Product Description (S.P.D. 4.1.11) o OS/8, Version 3D, Extension (S.P.D. 4.5.8) o OS/8, Version 3D, Device Extensions for RL01, RX02, and KT8A (S.P.D. 4.12.0) o OS/8, Version 3D, FORTRAN IV (S.P.D. 4.10.7) In addition, the kit's modules have been updated with the binary patches described in the OS/8 Device Extensions User's Guide and in the issues of the Digital Software News (through June 1979). It details documentation appropriate to the kit as follows: OS/8 COMBINED KIT INFORMATION GUIDE - AA-J016B-TA Describes the kit's contents and how to get the system on line. OS/8 COMBINED KIT - V3D SPD 4.4.2 Describes the OS/8 Combined Kit, its options, licenses, support category and other pertinent information. OS/8 DEVICE EXTENSION RELEASE NOTES - AA-H565A-TA Contains supplemental information on the features of the OS/8 Device Extensions Kit not discussed in the DEVICE EXTENSIONS USER'S GUIDE. OS/8 DEVICE EXTENSIONS USER'S GUIDE - AA-D319A-TA Describes the RL01 and RX02 disks, their bootstrap procedures, and the software support for the KT8A (128K) Memory Management option. OS/8 ERROR MESSAGES - AA-H610A-TA Describes the error messages generated by the OS/8 Monitor and its system programs. OS/8 FORTRAN IV SOFTWARE SUPPORT MANUAL - DEC-S8-LFSSA-A-D Describes internal features of OS/8 FORTRAN IV that may be useful to the advanced user. OS/8 LANGUAGE REFERENCE MANUAL - AA-H609A-TA Describes the languages supported by OS/8: BASIC, FORTRAN IV, PAL8, FORTRAN II, FLAP/RALF, and SABR. OS/8 MARK SENSE BATCH USER'S MANUAL - DEC-S8-OBUGA-A-D Describes the use and operation of the Mark Sense Batch (MSBATCH) OS/8 system program. It includes step-by-step procedures for preparing programs for submission to MSBATCH. OS/8 SOFTWARE SUPPORT MANUAL - DEC-S8-OSSMB-A-D Describes internal system features that may be useful to the advanced user. OS/8 SYSTEM GENERATION NOTES - AA-H606A-TA Describes PDP-8/E bootstrap procedures for LINCtape, DECtape (TC08 and TD8E), and disk (DF32, RF08, RK08, RK8E, and RX01), as well as procedures for building the system from paper tape and DECassette (TA8E). OS/8 SYSTEM REFERENCE MANUAL - AA-H607A-TA Describes the OS/8 system conventions, keyboard commands and utility programs. OS/8 TECO REFERENCE MANUAL - AA-H608A-TA Describes the Text Editing and Correcting program for OS/8 users. OS/8 V3D SYSTEM RELEASE NOTES - DEC-S8-OSRNA-B-D Describes the differences between version V3D of OS/8 and previous versions, as well as corrections to known software problems. TECO POCKET GUIDE - AV-D530A-TK Contains a guick-reference summary of OS/8 TECO commands. |
Added src/os8/uni/SYSTEM/BATCH.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 | /7 CONCISE OS8 BATCH PROCESSOR 7-JUN-1978 / / / / / / / / / /COPYRIGHT (C) 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. / / / / / / / / / / /EF,RL,SR /ABSTRACT--- /BATCH IS THE INITIALIZING PROGRAM FOR THE OS/8 BATCH /PROCESSING MONITOR. TO SET UP A BATCH RUN, TYPE / .R BATCH /BATCH WILL CALL THE COMMAND DECODER TO OBTAIN ITS /PARAMETERS AND INPUT FILE LOCATION. VERSON= 10 / BATCH SWITCHES: /C BATCH FROM CARDS /E IGNORE KMON, CD, AND CCL ERRORS /H HUSH (SUPPRESSES $JOB, #END, AND ECHOING) /P BATCH FROM PAPER TAPE /Q QUIET - NO BATCH LOG /T FORCE BATCH LOG TO TELETYPE /U UNATTENDED /6 USE 026 CARD CODES (ONLY IF /C) /MAINTENANCE RELEASE CHANGES BY S.R. ON 1-AUG-75: /1. CHANGED VERSION NUMBER TO 6 /2. INCORPORATED V5A PATCH SEQ # 1 APR-75 DSN / ALLOWS BATCH TO PASS ALTMODE TO KBM /3. INCORPORATED V5B PATCH SEQ #2 17-JULY-75 WSN / SLOWS BATCH DOWN WHEN READING FROM CARDS /4. ALLOW BATCH TO IGNORE NULLS FROM BATCH STREAM / (PATCH TO BE PUBLISHED IN DSN.) /5. SET BATCH SO THAT IT RESTORES OLD SOFTWARE CORESIZE / UPON NORMAL TERMINATION. /CHANGES BY S.R. ON 3-FEB-77: /1. ADDED HUSH SWITCH (/H) /2. SAVED REST OF 7777 AROUND BATCH /3. FIXED BUG CONCERNING MANUAL HELP NEEDED /4. ALLOWED CORE IMAGE TO BE PRESERVED AFTER BATCH TERMINATION /8-DEC-77 CHANGES: /1. PUT IN SYMBIONT SUPPORT /2. LENGTHENED LPT WAIT LOOP (FOR LA180'S) /3. MADE /T MUCHO OVERRIDE LPT TEST /4. BATCH LPT LOG CONVERTS L.C. TO U.C. / TO INHIBIT CONVERSION, PATCH LOC 6400 FROM A -40 TO A 0 /5. DON''T RESTORE EXTENDED DATE BITS IN 07777 /6. MORE FIXES TO MANUAL INTERVENTION REQUIRED MESSAGE BUG /7. BATCH OUTPUT ROUTINE IGNORES NULLS /SYSTEM DEPENDENT PARAMETERS AMFLAG=17 /ALTMODE FLAG FOR KBM CDREC=51 /COMMAND DECODER KMREC=7 /KEYBOARD MONITOR BUFFER=3000 JSW=7746 /JOB STATUS WORD DCB=7760 /DEVICE CONTROL BLOCK MTWO=CLA CLL CMA RAL MTHREE=CLA CLL CMA RTL SYSTEM=7607 MPARAM=7643 /******************************************** KEYMON=403 BEGLN=1000 PRINT=200 XGLINE=1200 BATCH=35 /REFERS TO KEYBOARD MONITOR!!!!!!! BCHGO=46 /THEY MUST!!!!! BE CORRECT!!!!!! CBATCH=4571 /CONTENTS OF LOC "BATCH" IN KEYBOARD MONITOR /******************************************* CDOVER=326 CDBEGLN=1200 /CD BUFFER AREA ANALYZ=202 /CD ANALYSIS TYPE=1367 /ERROR OUTPUT ROUTINE CGLINE=1002 TT=21 /THESE REFER TO CD ASSEMBLY***VOLATILE*** DVICE=43 /IF CD OR MAIN OS/8 ASSEMBLY CHANGES, DEFALT=42 /V3D NOT NEEDED LKUPSW=245 /V3D IF CONTENTS=0, IN SPECIAL MODE OUTSW=41 /THESE VALUES MUST BE ALTERED ALSO. NAMECT=31 DEV1=33 RESTRT=676 /******************************************** ORIGIN=5400 PSKF=6661 /LE8 IOT'S PCLS=6666 RCRA=6632 /CARD READER IOT'S RCSE=6672 RCSD=6671 RCSF=6631 RCRD=6674 /***************************** BOSCCL=07777 /BATCH USES CERTAIN SYSTEM WORDS AS FLAGS AND STATUS /INDICATORS. THEY ARE: /LOC. 07777. THIS IS USED AS THE BATCH IN PROGRESS FLAG. /BIT 1 IS BATCH IN PROGRESS. (BIP) =1 MEANS BATCH IS ON /BITS 6-8 HOLD THE FIELD WHERE BATCH IS SITTING /BIT 10 IS USED BY BAT: TO SIGNAL IT HAS READ A DOLLAR SIGN /BIT 11 IS USED BY THE COMMAND DECODER TO SIGNAL BATCH NOT THERE /THE JOB STATUS WORD USES BIT 3 AS AN INDICATOR AS TO /WHETHER THE BATCH MONITOR IS CURRENTLY IN CORE. =1 MEANS /THAT THE BATCH SYSTEM NEED NOT BE RE-READ. /BOSSW IS A FLAG WORD INTERNAL TO THE BATCH MONITOR. /IT IS SET UP DURING BATCH INITIALIZATION. /BIT 0: 1 IF USE OF PTR IS PROHOBITED DURING RUN /BIT 1: 1 IF LPT OR TTY LISTINGS ARE TO BE SPOOLED /BIT 2: 1 IF KMON AND CD ERRORS ARE NON-FATAL /BIT 10: 1 IF LP08 IS OUTPUT DEVICE /BIT 11: 1 IF OPERATOR IS NOT PRESENT /IF SYS IS INPUT, LOCATIONS 7774 AND 7775 IN THE TOP FIELD /ARE USED AS POINTERS TO THE CORRECT DATA BLOCK ON THE /SYSTEM DEVICE. THE BUFFER IS RE-READ WHENEVER THE /BATCH MONITOR MUST BE RE-READ. SPLNUM= 7776 /SPOOL SEQUENCE NUMBER SYCNT= 7775 /CHARACTER COUNT IN BUFFER SYBLKN= 7774 /SYSTEM DEVICE BLOCK NUMBER /IF SPOOLING IS USED, LOC. N7776 IS USED TO HOLD THE /XX IN 'BTCHXX.TM'. /BATCH INITIALIZER PAGE 0 *0 VERSON CIF 30 JMP .-1 *16 XR1, 0 XR2, 0 TEMP, 0 TEMP2, 0 COUNT, 0 BOSCTL, 1101 /CONTROL WORD TO READ/WRITE BOS CDFTOP, 0 TOPCDF, HLT /CDF TO TOP FIELD JMP I CDFTOP T1, 0 T2, 0 PAGE START, SKP JMP BCHAIN /IF CHAINED TO JMS I (GETCOR /DETERMINE CORE SIZE; PUT IN 7777 BATASK, CIF 10 JMS I [200 5 0211 /.BI ASSUMED EXT SKP BCHAIN, JMS I (GETCOR DCA I [BOSSW CDF 10 TAD I [MPARAM+1 AND (4 /GET /V SWITCH SNA CLA /IS IT ON? JMP .+3 /NO JMS I [MESSG VERMSG /PRINT BATCH VERSION NUMBER CDF 10 TAD I (7620 DCA T1 /GET STARTING BLOCK TAD I (7617 SNA JMP NOTSYS /NO FILE - BATCH FROM PTR OR CDR AND [17 TAD (MPARAM+3 /POINT INTO HANDLER TABLE DCA T2 TAD I T2 CLL TAD [200 /IS THE DEVICE SYS OR CORESIDENT WITH SYS? SNL CLA JMP I (INDERR /NO TAD I T2 /GET DEVICE HANDLER ENTRY POINT CDF 0 DCA I (SYSINH /STORE AS BATCH INPUT HANDLER JMS CDFTOP TAD T1 DCA I (SYBLKN TAD (-601 DCA I (SYCNT /SET UP PARAMETERS FOR INPUT FILE CDF 0 TAD (SYSIN-1 JMP STODEV /INPUT DEV = SYS NOTSYS, TAD I (MPARAM RTL /GET C FLAG IN SIGN BIT SMA CLA JMP NOTCDR JMS I (CHANGE /SET 026/029 CARD CODE TAD (CDR-1 JMP STODEV /INPUT DEV = CDR NOTCDR, TAD I [MPARAM+1 AND (400 CDF 0 SNA CLA JMP BATASK /NO INPUT SPECIFIED STL RAR DCA I [BOSSW /PTR INPUT FLAG TAD (PTR-1 STODEV, JMS I (MVINSB /MOVE THE PROPER ROUTINE INTO THE BATCH MONITOR CDF 10 TAD I [MPARAM+1 CDF 0 AND (210 /GET /Q AND /U SWITCHES CLL RTL RTL RAL / /Q INTO LINK SZA CLA ISZ I [BOSSW /SET UNATTENDED BIT IF /U SPECIFIED SNL JMP .+3 /NO /Q TAD (NULOUT-TTYOUT /EIGHTY-SIX THE BATCH LOG JMP NOLPT/SET LPT MODE SO $MSG WILL ECHO CDF 10 TAD I [MPARAM+1 CDF 0 AND (20 /CHECK /T SWITCH CLL CIA SZL CLA JMS I (LPTTST /OTHERWISE, CHECK OUT FOR LINE PRINTER NOLPT, TAD (TTYOUT-BOSLPT /NO LPT TAD (BOSLPT /HE HAS A LPT DCA I (OUTPUT /SET OUTPUT DEVICE TO TTY OR LPT OR NULOUT TAD I (OUTPUT TAD (-BOSLPT SNA CLA STL RTL TAD I [BOSSW DCA I [BOSSW /AND SET FLAG CDF 10 TAD I [7600 CDF 0 SNA JMP I (CONT /NO SPOOLING AND [17 DCA T1 TAD T1 TAD (DCB-1 DCA T2 CDF 10 TAD I T2 CDF 0 JMP I (SPCONT PAGE SPCONT, SMA CLA JMP BADSPL TAD T1 DCA I (SPLDEV STL RTR TAD I [BOSSW DCA I [BOSSW CONT, JMS I (EOPTN /CHECK FOR /E SWITCH TAD (BATPTR /SET POINTER TO BATCH.SV DCA FILPTR CLA IAC /DO LOOKUP ON SYS CIF 10 JMS I [200 K2, 2 FILPTR, BATPTR 0 /WHO CARES ABOUT THE LENGTH? JMP NOBACH /BATCH FILE NOT FOUND TAD I K7777 /PUT IN FIELD OF BOS AND (70 TAD (CDF 0 DCA CDFBOS TAD (201 JMS I [SYS /READ AND ALTER KEYBOARD MON. BUFFER KMREC /GET RECORD # OF BOS JMS I [VERTST /GET VERSION OF MONITOR TAD (EOINIT AND (7400 CLL RTL RTL RAL TAD K2 TAD FILPTR DCA BOSREC /WE WILL RE-WRITE BOS LATER TAD BOSREC /ALTER KEYBOARD MONITOR DCA I (BUFFER+BATCH+3 /RECORD # TAD CDFBOS AND (70 /ALTER CONTROL WORD TAD BOSCTL DCA I (BUFFER+BATCH+1 TAD BOSREC-1 DCA I (BUFFER+BATCH+2 CLA CLL CML RTL TAD CDFBOS DCA I (BCHGO+BUFFER /JMP TO CORRECT FIELD TAD (BOS /START ADD. OF MONITOR DCA I (BCHGO+BUFFER+2 /ENTRY POINT TAD (4200 /RE-WRITE KEYBD. MON. JMS I [SYS BUFFER KMREC TAD (201 /READ IN COMMAND DECODER JMS I [SYS BUFFER /AND INSERT BOS RECORD CDREC TAD CDFBOS /NOW FILL IN THE COMMAND DECODER DCA I (TT+BUFFER TAD (CDBOS DCA I (DVICE+BUFFER /ALLOW CD TO CHECK BATCH VALIDITY TAD I (CDBOS CIA /STORE COMPLEMENT ALSO DCA I (OUTSW+BUFFER CLL CML RTL /CREATE CIF CDF BATCH TAD CDFBOS DCA I (NAMECT+BUFFER TAD (CDBOS DCA I (DEV1+BUFFER TAD (4200 JMS I [SYS /RE WRITE CD. BUFFER CDREC JMS I (SETH /SET HUSH IF /H SPECIFIED CLA CLL CML RAR TAD BOSCTL JMS I [SYS /INPUT POINTERS SET UP. ORIGIN&7400 BOSREC, HLT CLA CLL CML RTR /BATCH IN PROGRESS JMS I [INCOR K7777, 7777 CLA STL RAR /4000 DCA I (DOLFLG /SET FOR INITIAL $JOB JMS I (MOVE /PUT IMAGE OF BOS INTO HIGH CORE ORIGIN-7600 ORIGIN CDFBOS, HLT ORIGIN TAD (0160 /SET SPOOL FILENAME TO BTCHA0 JMS CDFTOP DCA I (SPLNUM BATRET, CIF CDF 0 JMP I [7605 NOBACH, JMS I [MESSG /BATCH.SV NOT THERE NBATCH JMP BATRET BADSPL, JMS I [MESSG SPLERR JMP I (BATASK INDERR, JMS I [MESSG NODEV JMP I (BATASK PAGE MESSG, 0 /MESSAGE PRINTING ROUTINE CLA CDF 0 JMS I [CRLF /GENERATE CARRIAGE RET., LINE FEED TAD I MESSG /ADDRESS OF ERROR MESSAGE ISZ MESSG /POINT TO RETURN DCA TEMP MCONT, TAD I TEMP /GET TEXT CHARACTERS IN AC CLL RTR RTR RTR JMS PCHAR /PUNCH IT TAD I TEMP JMS PCHAR /SECOND OF TWO. ISZ TEMP /NEXT TEXT WORD JMP MCONT /CONTINUE PCHAR, 0 /ROUTINE TO UNPACK AND PRINT TEXT AND [77 SNA /0 TERMINATES THE LIST JMP MSGXIT /UNCLEAN RETURN, BUT WHO CARES? TAD (-37 /SEPARATE DIGITS FROM ALPHAS SNA JMP PCRLF /_ IS SPECIAL CHAR SPA TAD (100 /MAKE IT ALPHABETIC TAD (237 JMS I (TTYOUT JMP I PCHAR MSGXIT, TSF JMP MSGXIT JMP I MESSG PCRLF, JMS I [CRLF JMP I PCHAR LZERO=0 GETCOR, 0 /ONCE ONLY ROUTINE TO DETERMINE CORE SIZE TAD I (BOSCCL /GET CORE-SIZE WORD RTL /PUT BATCH IN-PROGRESS BIT IN LINK SZL CLA /ARE WE RUNNING BATCH FROM A BATCH JOB? JMP AAA /YES, DON'T TOUCH ORIGINAL CORE SIZE TAD I (BOSCCL /NO, GET OLD SOFTWARE CORE SIZE AND (7177 /BUT DON'T SAVE EXTENDED DATE BITS DCA I (OLDCOR /SAVE CURRENT SOFTWARE CORE SIZE AAA, TAD I (BOSCCL /GET BATCH CTL WD AND (70 /IT MIGHT ALREADY CONTAIN THE ANSWER SZA JMP STOCOR TAD [7607 DCA LZERO CHUG, CDF 10 TAD K DCA I (LZERO K10, 10 TAD LZERO CIA TAD [7607 SZA CLA JMP DUN TAD I (LZERO NOP CIA TAD K SZA CLA JMP DUN TAD [10 TAD CHUG DCA CHUG ISZ K JMP CHUG-2 CLA CMA DUN, CIF CDF 0 TAD K TAD K10 CLL RTL /STORE HIGHEST FIELD # INTO 7777 RAL STOCOR, DCA INCOR TAD INCOR TAD (-10 /TEST FOR AT LEAST 12 K SPA SNA JMP NOCORE TAD (-60 /LIMIT TO FIELD 6, SO AS NOT SNA CLA /TO DISTURB ROM IN F. 7 TAD (-10 TAD INCOR DCA INCOR TAD INCOR TAD (CDF DCA TOPCDF TAD I (BOSCCL AND (7707 /V3D TAD INCOR DCA I (BOSCCL TAD INCOR TAD (201 DCA I (SYCNTL TAD TOPCDF DCA I (BOSCDF JMP I GETCOR NOCORE, CLA JMS I [MESSG COR8 JMP I [7600 K, -10 INCOR, 0 /INCLUSIVE OR ROUTINE. USE THE DCA TEMP /FOLLOWING: TAD I INCOR /A .OR. B= .NOT. A .AND. B +A DCA TEMP2 TAD TEMP CMA AND I TEMP2 TAD TEMP DCA I TEMP2 ISZ INCOR JMP I INCOR PAGE PTR, 0 /HI SPEED READER HANDLER RDF /** MOVED TO 5400 IN BATCH FIELD ** TAD PCDIF0 DCA PTRRET JMS I PTRDOL /CHECK FOR $ INSERTION JMP PTRISZ /YES DCA PTIMER JMS I TCTRLC RFC PTM2, RSF JMP PTMER TAD PTR200 /FORCE PARITY ON RRB PTRISZ, ISZ PTR PTRRET, HLT JMP I PTR PCDIF0, CDF CIF 0 TCTRLC, CTRLC PTMER, AND I 0 AND I 0 ISZ PTIMER JMP PTM2 /TIMES OUT IN 16 MS. JMP PTRRET PTIMER, 0 PTR200, 200 PTRDOL, GETDOL /SYS PERFORMS I/O TO SYSTEM DEVICE. THE CALLING SEQUENCE /CONFORMS TO THAT OF THE STANDARD OS/8 CALL SEQUENCE, EXCEPT /THAT WE HAVE ONE ERROR RETURN FROM THE ROUTINE, NOT A LOT /OF SEPARATE ERROR RETURNS. SYS, 0 DCA SYCTL /AC HAD CONTROL WORD TAD I SYS DCA SYBUFF /BUFFER FOR TRANSFER ISZ SYS TAD I SYS DCA SYREC /RECORD OF TRANSFER ISZ SYS CIF 0 JMS I (SYSTEM SYCTL, HLT SYBUFF, HLT SYREC, HLT SKP CLA JMP I SYS JMS I (PRMESG SERMSG JMP I (BATRET BATPTR, FILENAME BATCH.SV CHANGE, 0 /ROUTINE TO ALTER CARD TABLE CDF 10 TAD I (MPARAM+2 CDF 0 AND (10 /GET /6 SWITCH SZA CLA /IF IT IS SPECIFIED, TAD (C026-C029 /USE DEC 026 CARD CODES, TAD (C029 /OTHERWISE USE DEC 029 CODES DCA XR1 /ADDDRESS OF CORRECT LIST TAD (CLST-1 DCA XR2 /THE LOCS. THAT GET ALTERED TAD [-15 DCA COUNT /13 ENTRIES. TAD I XR2 DCA CHPTR TAD I XR1 DCA I CHPTR /ALTER TABLE IN MONITOR. ISZ COUNT JMP .-5 JMP I CHANGE CHPTR, 0 CLST, CDT+5 /ADDRESSES OF CARD CONVERSION LOCS. CDT+6 CDT+7 CDT+15 CDT+16 CDT+17 CDT+25 CDT+26 CDT+27 CDT+30 CDT+35 CDT+36 CDT+37 C026=.-1 7735 /CODES FOR 026 CARDS 4076 0774;3314;1002;0305;3204;1273;3606;1341;3716;1175 3401 C029=.-1 3203;4007;3502;7514;0577;3637;0104;1211;3374;0641;7316;3410 1376 SETH, 0 /SET HUSH CDF 10 TAD I (MPARAM /LOOK AT A-L SWITCHES AND (20 /IN PARTICULAR, LOOK AT /H BIT CDF 0 DCA I (HUSH /SAVE THIS BIT JMP I SETH PAGE BILEN= 0 /INITIALIZE MAX INPUT ROUTINE LENGTH SYSIN, 0 /INPUT FROM SYSTEM DEVICE RDF /** MOVED INTO 5400 IN BATCH FIELD ** TAD SYCDIF DCA SYSRET SYSIN4, JMS I SYSDOL /CHECK FOR $ INSERTION JMP SYSISZ /YES TAD BLOK /RE-READ BUFFER? SZA CLA JMP SYGETC /NO. STILL THERE TAD I PSYBLKN DCA BLOK TAD I PSYCNT IOSYS, DCA SYCHCN /RESTORE CHARACTER COUNT CIF 0 JMS I SYSINH /READ THE BLOCK SYCNTL, 0 BTBUF, ORIGIN-400 BLOK, 0 JMP I PSYIERR TAD BTBUF /SET BUFFER POINTER. DCA WPTR /NOW DETERMINE FROM COUNT WHICH WORD TAD SYS601 /WAS INTERRUPTED. WHEN AC GOES NEG., TAD SYCHCN /WE ARE AT PROPER 2 WORD GROUP. GWDLP, TAD SYSM3 /THEN WE FORM A JMP TO CORRECT WORD SPA JMP GEWD ISZ WPTR /SKIP 2 WORDS ISZ WPTR JMP GWDLP GEWD, TAD SYS3 /FORM A JMP CHARX, X=1,2,3 TAD JMPDOT DCA JMPCH /SET UNPACK SWITCH SYGETC, ISZ JMPCH /NORMAL CHAR. FETCH ISZ SYCHCN /NEED NEW BLOCK? JMPDOT, JMP JMPCH /NO ISZ BLOK /YES. NEXT BLOCK TAD SYM601 JMP IOSYS /READ IT. JMPCH, JMP JMPCH /3 WAY SWITCH JMP ICHAR1 /FIRST OF 3 JMP ICHAR2 /SECOND TAD JMPDOT DCA JMPCH /RESET 3 WAY SWITCH JMS I PCTRLC TAD I WPTR /NOTE THAT WE CAN'T DESTROY WPTR BY AND SY7400 /BY DOING ISZ'S UNTIL THE 3RD CHAR. CLL RTR /THAT IS BECAUSE IF WE ARE BROKEN RTR /UP, WE CAN ONLY POINT TO THE 2 WORD DCA SYTEMP /GROUP AS A WHOLE. ISZ WPTR TAD I WPTR AND SY7400 CLL RTL RTL RAL TAD SYTEMP ISZ WPTR /BUMP TO NEXT GROUP JMP CHCOM ICHAR2, CLA IAC ICHAR1, TAD WPTR DCA SYTEMP /THIRD CHAR NEEDS WPTR! TAD I SYTEMP CHCOM, AND SYS177 DCA SYTEMP TAD SYCHCN DCA I PSYCNT TAD BLOK DCA I PSYBLKN TAD SYTEMP /CHECK FOR ^Z / SNA /V3C / JMP SYSISZ /RETURN NULL AS NULL TAD SYSM32 SZA JMP CHOUT /NOPE. OK TAD SYEXT /^Z. DISABLE INPUT DCA SYSIN4 SYEXT, JMP SYSRET CHOUT, TAD SYS232 SYSISZ, ISZ SYSIN SYSRET, HLT /CDF CIF RETURN FIELD JMP I SYSIN SYCHCN, 0 WPTR, 0 SYSCHR, SYTEMP, 0 PSYBLK, SYBLKN PSYCNT, SYCNT SYSINH, 0 /GETS ADDRESS OF INPUT HANDLER (7607 OR CO-RES) PSYIER, SYIERR SYS601, 601 SYM601, -601 SYSM3, -3 SYS3, 3 PCTRLC, CTRLC SY7400, 7400 SYS177, 177 SYSM32, -32 SYS232, 232 SYCDIF, CDF CIF 0 SYSDOL, GETDOL IFZERO .-SYSIN-BILEN&4000 <BILEN=.+1-SYSIN> PAGE /CARD READER HANDLER. BUFFERS AN ENTIRE CARD IN THE LINE BUFFER. /ON END OF CARD, WE CAST OUT EXTRANEOUS SPACES IN THE BUFFER CDR, 0 RDF TAD CCDIF0 DCA CDRRET JMS I CDRDOL /CHECK FOR $ INSERTION JMP CDRISZ /YES ISZ CHCNT /STILL CHARACTERS IN BUFFER? JMP GETCH /YES. NEWCRD, TAD PLNBUF DCA CDRPTR /NO. READ A NEW CARD CSLCT, JMS I CCTRLC RCSE /SELECT A CARD JMP CSLCT RDNEXC, DCA CTIMER RDCOLM, RCSF /WAIT FOR DATA JMP EOC /AND CHECK FOR END OF CARD RCRA CLL RAR /TRANSLATE INTERNAL INTO ASCII TAD PCDT DCA CTEMP TAD I CTEMP SZL /LEFT OR RIGHT? JMP .+4 RTR;RTR;RTR AND CDR77 TAD CDR240 ISZ CDRPTR DCA I CDRPTR ISZ CHCNT /CAN'T SKIP EOC, RCSD /CARD DONE? JMP TIME /NO - CHECK TIMEOUT TAD CHCNT /GET REAL NUMBER OF CHARACTERS CMA DCA CHCNT CHKSPC, TAD I CDRPTR TAD CDM240 SNA CLA JMP SPCIG ISZ CDRPTR CDCR, TAD CDR215 /INSERT END OF LINE MARKER DCA I CDRPTR TAD PLNBUF DCA CDRPTR GETCH, ISZ CDRPTR TAD I CDRPTR CDRISZ, ISZ CDR CDXIT, RCRD /CLEAR CARD DONE FLAG CDRRET, HLT JMP I CDR SPCIG, CLA CMA /BACK UP ONE CHAR TAD CDRPTR DCA CDRPTR ISZ CHCNT /IF SKIP, IT'S A BLANK LINE JMP CHKSPC JMP CDCR TIME, AND I 0 /CHECK TIME OUT - FIRST DELAY A WHILE TAD CDM240 /V3C DCA TIME /TIME OUT A LOT ISZ TIME JMP .-1 ISZ CTIMER JMP RDCOLM DCA CHCNT JMP NEWCRD /CARD HUNG - WAIT FOR READER READY CCDIF0, CDF CIF 0 CHCNT, -1 PLNBUF, LINBUF-1 CCTRLC, CTRLC PCDT, CDT CDR77, 77 CDR240, 240 CDM240, -240 CDR215, 215 CDRPTR, 0 CTEMP, 0 CTIMER, 0 CDRDOL, GETDOL IFZERO .-CDR-BILEN&4000 <BILEN=.+1-CDR> LPTTST, 0 /SKIP IF BATCH-TYPE LINE PRINTER AVAILABLE TAD (240 PCLS /PRINT AN INNOCUOUS BLANK CLA / AND I 0 / AND I 0 /FLAG COMES UP IN UNDER 10 MICROSECONDS / AND I 0 / AND I 0 / AND I 0 / AND I 0 /(ACTUALLY, FOR AN LA180 IT TAKES A BIT LONGER) / AND I 0 ISZ WAIT JMP .-1 /WAIT A LOT PSKF /WELL? JMP I LPTTST /NO WAY! CLA IAC /DON'T BE FOOLED - COULD STILL BE AN ANALEX 6654 /LOAD ANALEX BUFFER SNA CLA JMP ANALEX /IF IOT CLEARED AC, ITS AN ANALEX TAD (215 PCLS /CLEAR LINE BUFFER BY PRINTING CR PSKF JMP .-1 CLA ISZ LPTTST JMP I LPTTST /TAKE SKIP RETURN ANALEX, 6652 /CLEAR FLAGS 6662 /CLEAR BUFFER JMP I LPTTST /TAKE NO LPT RETURN WAIT, 0 PAGE NBATCH, TEXT /BATCH.SV NOT FOUND ON SYS:/ COR8, TEXT /INSUFFICIENT MEMORY FOR BATCH RUN/ BADMON, TEXT /WRONG OS8 MONITOR/ NODEV, TEXT /DEV NOT IMPLEMENTED_/ SPLERR, TEXT /ILLEGAL SPOOL DEVICE_/ VERMSG, TEXT /BATCH / *.-1 VERSON+2660 /"VN" TEXT /B_/ VERTST, 0 TAD I (BUFFER+BATCH /SHOULD BE 4562 IN V3 TAD (-CBATCH SNA CLA JMP I VERTST JMS I [MESSG BADMON JMP I [7600 MVINSB, 0 DCA XR1 /ADDR OF INPUT ROUTINE TAD (BATIN-1 /ADDR OF PLACE IN BATCH MONITOR DCA XR2 TAD (-BILEN DCA BMVCNT TAD I XR1 DCA I XR2 ISZ BMVCNT JMP .-3 /MOVE ROUTINE UP JMP I MVINSB BMVCNT, 0 EOPTN, 0 /CHECK FOR /E OPTION CDF 10 TAD I (MPARAM CDF 0 AND (200 /ISOLATE E SWITCH SNA CLA JMP I EOPTN /NOT ON TAD (1000 JMS I (INCOR /OR 1000 INTO BOSSW BOSSW JMP I EOPTN EOINIT=. PAGE FIELD 0 /DUMP PAGE 0 LITERALS HERE *ORIGIN /THIS CODE ACTUALLY EXECUTES IN TOP FIELD! BATIN, ZBLOCK BILEN /BATCH INPUT ROUTINE GOES HERE END, TAD I (HUSH SZA CLA JMP BKILL /SUPPRESS #END WHEN HUSHED JMS I (PRMESG EOBMSG BKILL, CDF 10 STA TAD I (7700 /V3D DCA I (7700 /ALLOWS CORE IMAGE TO BE PRESERVED ACROSS BATCH JMP I (MORKIL SETJSW, 0 /ROUTINE TO SET JOB TAD (7377 /STATUS WORD TO INDICATE THAT CDF 0 /BATCH IS STILL IN CORE AND I (JSW TAD (400 DCA I (JSW JMS I (CDFRST /RESTORE TRUE DATA FIELD JMP I SETJSW PAGE /THIS IS THE ACTUAL BATCH MONITOR. THIS ENTRY IS FOR THE /INTERFACE WITH THE KEYBOARD MONITOR. BATVFY, 2214 /** THIS LOCATION IS VERIFIED BY BAT: ** BOS, CDF 0 /SEE IF CD FOUND AN ERROR TAD I (BOSCCL /IF BIT 11 SET, IT DID. CLL RAR CLA TAD I (BOSCCL /RESTORE IT. AND M2 /ERASE IT DCA I (BOSCCL JMS I (CDFRST /RESTORE DATA FIELD SZL CLA JMP CDERR JMS I (KMLINK /LINK I/O OF BOS AND K.M. BOSSB, TAD OUTPUT DCA BOUTDV /SET MESSAGES JMS I (GLINE /READ LINE OF INPUT TAD HUSH SZA CLA JMP BOSRE /DON'T ECHO LINES WHEN HUSHED TAD I (LINBUF TAD (-"$ SNA CLA TAD I (LINBUF+1 TAD (-"J /DON'T ECHO $JOB CARD HERE SNA CLA TAD I (LINBUF+2 TAD (-"O SZA CLA JMS I (ECHO /BUT ECHO ANY OTHER LINE BOSRE, TAD I (LINBUF /ENTER HERE FROM CD IF KM COMMAND SEEN DCA I (BNAM /GET THE FIRST CHAR ON THE LINE TAD DOLFLG /DO WE NEED $? SMA CLA JMP I (NXPRG /NO. LOOK FOR . OR / TAD I (BNAM /SEE IF WE HAVE IT TAD (-"$ SZA CLA JMP BOSSB /NOT YET. JMP I (KMDOLR /SEE IF IT'S $JOB CDERR, JMS I (PRMESG CDEMSG JMP BOS /HERE TO ECHO $JOB CARD DOLECH, TAD HUSH SZA CLA JMP HUSH2 /DON'T ECHO $JOB WHEN HUSHED TAD (214 JMS OUTCHR TAD I (BOSSW CLL RTR /ECHO A PAGE OF $JOBS TO LPT ONLY SNL CLA /IS LPT OUTPUT? JMP DOLEC2 TAD (-36 /YES DCA DOLFLG TAD (212 JMS OUTCHR /SPACE DOWN TO MIDDLE OF PAGE ISZ DOLFLG JMP .-3 /REPLACE NEXT THREE LOCS IF CENTRONIX PRINTER: JMS I (ECHO /216 JMS I (ECHO /TAD .-1 JMS I (ECHO /JMS OUTCHR /PRINT LARGE CHARS JMS I (ECHO DOLEC2, TAD (214 JMS OUTCHR JMS I (ECHOT /PUT $JOB TO TTY IF NEEDED JMS I (CRLF HUSH2, DCA DOLFLG JMP BOSSB GETDOL, 0 /ROUTINE TO PUT BACK ANY $ READ BY BAT: CDF 0 TAD I (BOSCCL /GET BATCH CONTROL WORD CLL RTR SZL CLA /TEST BIT 10 JMP GOTDOL /ITS ON - MUST PUT IN A $ JMS I (CDFRST /NO - SET DF TO THIS FIELD ISZ GETDOL JMP I GETDOL /TAKE SKIP RETURJ GOTDOL, CLL STA RTL /7775 AND I (BOSCCL DCA I (BOSCCL /REMOVE THE BIT TAD ("$ JMP I GETDOL /TAKE NON-SKIP RETURN WITH $ IN AC GETCOM, JMS I (MOVE -112 /PUT BUFFER INTO KEYBOARD MON. LINBUF+1 CDF 0 BEGLN TAD I (AMODE /V3C GET BATCH ALTMODE FLAG SZA CLA STL RAL /SET KBM ALTMODE FLAG IF NECESSARY CIF CDF 0 DCA I (AMFLAG /IT'S IN FIELD 0 JMP I .+1 /AND GO PROCESS IT KEYMON+1 M2, -2 OUTCHR, 0 JMS I BOUTDV JMP I OUTCHR BOUTDV, TTYOUT OUTPUT, 0 DOLFLG, 0 /$ SLEW FLAG - NEGATIVE IF SLEW HUSH, 0 /NON-0 MEANS HUSHED (/H) PAGE BOSSW, 0 /BATCH STATUS FLAG. MSG, 0 TAD I (DOLFLG /IF $JOB SLEW SET, DON'T PAUSE SPA CLA JMP I MSG TAD BOSSW /NO ECHO IF TTY IS OUTPUT CLL RTR SZL CLA JMS I (ECHOT TAD BOSSW /IS OPERATOR AVAILABLE? CLL RAR SZL CLA JMP I MSG /NO. CONTINUE TAD (207 JMS I (TTYOUT KCC /WAIT A WHILE JMS I (TTY JMP I MSG TESTB, 0 /TEST ROUTINE. TEST LIST AGAINST BNAM TAD I TESTB DCA PRMESG /# ELEMENTS IN LIST TSTB2, ISZ TESTB /POINT TO ELEMENT TAD I TESTB ISZ TESTB TAD I (BNAM /TEST IT SNA CLA JMP TSBOVR /A MATCH ISZ PRMESG JMP TSTB2 ISZ TESTB JMP I TESTB /NO MATCH TSBOVR, TAD I TESTB DCA TESTB JMP I TESTB OLDCOR, 0 /V3C HOLDS OLD SOFTWARE CORE SIZE WORD /MUST HAVE ADDRESS .GT. 6000 PRMESG, 0 /MESSAGE PRINTER DCA TESTB /SET FOR NO SKIP ON ISZ TAD I PRMESG /INDEX INTO MESSAGE LIST DCA PRTEMP JMS I (CRLF TAD ("# /BATCH ERROR SIGNAL JMS I (OUTCHR PRMSG2, TAD I PRTEMP CLL RTR;RTR;RTR JMS PNCH TAD I PRTEMP JMS PNCH ISZ PRTEMP JMP PRMSG2 /CYCLE UNTIL A 0 PNCH, 0 AND (77 SNA JMP PRTTY /COULD BE OPTIMIZED TAD (240 AND (77 TAD (240 JMS I (OUTCHR JMP I PNCH PRTTY, JMS I (CRLF ISZ TESTB /PUT IT ON TTY, TOO CLA CLL CML RTL /+2 SKIPPED IF SECOND TIME THROUGH AND BOSSW /SEE IF LP08 IS OUTPUT SNA JMP PRMOUT /ALREADY ON TTY AND TESTB /CALL WITH AC=1 MEANS NO TTY OUTPUT SZA CLA JMP PRMOUT TAD (TTYOUT DCA I (BOUTDV /SET TTY CLA CMA /SET TESTB TO SKIP JMP PRMESG+1 PRMOUT, TAD I (OUTPUT /RESTORE OUTPUT DCA I (BOUTDV ISZ PRMESG /SKIP ARGUMENT JMP I PRMESG KMLINK, 0 /LINK BATCH AND KEYBOARD I/O. RIF TAD BCDIF0 /SETUP A JUMP IN KEYBOARD. DCA KMLST TAD KMLST /AND ANOTHER FOR PRINT ROUTINE DCA KMLST2 JMS I (MOVE /PUT NEW CODE INTO KEYBOARD -3 KMLST CDF 0 PRINT+1 /THIS IS OUTPUT LINK JMS I (MOVE /NOW INPUT LINK. -3 KMLST2 CDF 0 XGLINE+1 JMP I KMLINK /** NEXT 3 WORDS LOAD INTO "PRINT+1" IN KEYBOARD MONITOR ** KMLST, CIF CDF 0 /ALTERED AT RUN-TIME PRINT+3&177+5600 /ALLOWS TALKING THRU BATCH BOSPRT /** NEXT 3 WORDS LOAD INTO "XGLINE+1" IN KEYBOARD MONITOR ** KMLST2, CIF CDF 0 XGLINE+3&177+5600 /"JMP I .+1" BOS BCDIF0, CIF CDF 0 PRTEMP, 0 NXPRG, JMS TESTB /SEE IF WE HAVE . OR / -4 -".;GETCOM -"/;BOSSB -"$;KMDOLR -"*;BOSSB /ERRONEOUS CD CARD. JMP I (KJOB PAGE GLINE, 0 /LINE COLLECTION ROUTINE TAD (LINBUF-1 DCA GLPTR GET, JMS I (BATIN /GO TO SPECIFIED INPUT DEVICE JMP EOF /TIME-OUT OR FATAL DCA BNAM JMS I (TESTB /TEST FOR SPECIAL CHARS. -5 -215;CARROT -212;GET /IGNORE LINE FEEDS. -214;GET /IGNORE FORM FEEDS -337;BKAROW /CD DOESN'T LIKE _, ONLY < -200;GET /IGNORE BLANKS (NULLS) V3C TAD BNAM SKP BKAROW, TAD ("< ISZ GLPTR DCA I GLPTR TAD GLPTR TAD (-LINBUF-110 /OVERFLOW BUFFER? SPA CLA JMP GET /NOT YET. CARROT, TAD I GLPTR /GET LAST CHAR INPUT TAD (-244 /$? SZA CLA JMP NALTMD /NO TAD I GLPTR /GET $ SKP NALTMD, ISZ GLPTR /BUMP TO NEXT CHAR IF NO ALTMODE DCA AMODE /STORE ALTMODE FLAG DCA I GLPTR /CLEAR END CHAR IN BUFFER TAD I (LINBUF SNA CLA /WAS LINE NULL? JMP GLINE+1 /YES - IGNORE JMP I GLINE EOF, KCC /HANG ON INPUT ACTION JMS I (PRMESG /INDICATE FAILURE INPMSG JMS I (TTY /WAIT FOR INPUT JMP GET /AND RETURN AMODE, 0 GLPTR, 0 /DOLRD INTERPRETS $ CARDS DOLRD, 0 TAD (LINBUF /GET THE NAME OF THE $ COMMAND DCA BLPTR DCA BNAM GWRD2, ISZ BLPTR TAD I BLPTR SNA JMP NOCMD /FUNNY..NOTHING THERE! TAD (-240 /IGNORE LEADING SPACES SNA JMP GWRD2 TAD (-240 /NOT A SPACE. TAKE WHATEVER IT IS. AND (77 CLL RTL;RTL;RTL DCA BNAM /KEYBOARD MON. WILL EXAMINE IT. ISZ BLPTR TAD I BLPTR AND (77 TAD BNAM DCA BNAM NOCMD, TAD BNAM SNA CLA JMP I (KJOB JMS I (TESTB /TEST IT -3 -0516;END /$END CARD -1523;MSGST /$MSG CARD IMAGE -1217;JOB /$JOB CARD DLCRUD, ISZ DOLRD /$CRUD JOB, TAD I DOLRD DCA DOLRD JMP I DOLRD MSGST, JMS I (MSG /PRINT MESSAGE JMP DLCRUD /TREAT LIKE CRUD CDOLLR, JMS DOLRD CDKBD /$JOB CDGET /$OTHER KMDOLR, JMS DOLRD DOLECH /$JOB BOSSB /$OTHER BLPTR, 0 BNAM, 0 /HERE FROM CD WHEN DONE TO ANALYZE CD AREA CDRENT, CDF 0 TAD I (LKUPSW /GET THE DEFAULT EXTENSION JMS I (CDFRST /SET CURRENT DF JMS I (CDSCN /SCAN CD LINE KCC TCF /CLEAR FLAGS JUST LIKE CD WOULD CDF CIF 0 JMP I (CDOVER+3 /RESUME CD AT TERMINATION CODE PAGE LCONV, -40 /PATCH TO 0 TO ALLOW OUTPUTTING LC TO LPT CDT, 0021;2223;2425;2627;3031;3203;4007;3502 2017;6364;6566;6770;7172;7514;0577;3637 1552;5354;5556;5760;6162;0104;1211;3374 0641;4243;4445;4647;5051;7316;3410;1376 TTYOUT, 0 /TESTS AC FOR FORM FEED TAD (-214 SNA JMP TFORM /GENERATE LINE FEEDS TAD (214 JMS TTYPE JMP I TTYOUT TFORM, TAD (-4 DCA TCOUNT TAD (212 JMS TTYPE ISZ TCOUNT JMP .-3 JMP I TTYOUT TCOUNT, 0 NULOUT, 0 CLA /DEEP-SIX THE CHARACTER JMS I (CTRLC JMP I NULOUT TTYPE, 0 /TELETYPE OUTPUT STUFF TLS TSF JMP .-1 X200, CLA JMS I (CTRLC JMP I TTYPE BOSPRT, JMS ERHDR /PRINT MESSAGE CIF CDF 0 JMP I (PRINT+10 CDFRST, 0 BOSCDF, HLT JMP I CDFRST ERHDR, 0 /ERROR HEADER ROUTINE DCA CDFRST /SAVE CHARACTER TAD I (DOLFLG /FIRST ENTRY? SZA CLA JMP .+3 /NO. TAD ("# /ERROR PROMPT JMS I (OUTCHR TAD I (BOSSW /GET BATCH FLAGS WORD CMA AND (1000 /SET $ SLEW FLAG NEGATIVE IF NO /E, STL RTL /NON-ZERO IN ANY CASE DCA I (DOLFLG TAD CDFRST JMS I (OUTCHR JMP I ERHDR CRLF, 0 TAD (215 JMS I (OUTCHR TAD (212 JMS I (OUTCHR JMP I CRLF BOSLPT, 0 /BATCH LINE PRINTER ROUTINE DCA BOSTMP TAD BOSTMP AND (177 TAD (40 AND X200 SZA CLA TAD LCONV /CONVERT LOWER CASE TO UPPER CASE TAD BOSTMP PCLS CLA JMS I (CTRLC PSKF JMP .-2 JMP I BOSLPT MORKIL, CDF 0 TAD I (BOSCCL AND (600 /GET (POSSIBLY NEW) EXTENDED DATE BITS JMS CDFRST TAD I (OLDCOR CIF CDF 0 DCA I (BOSCCL /RESTORE WORD JMP I (7605 BOSTMP, 0 PAGE /ERROR MESSAGES CDEMSG, TEXT /MONITOR OVERLAYED/ INPMSG, TEXT /INPUT FAILURE/ BADMSG, TEXT /BAD LINE. JOB ABORTED/ SERMSG, TEXT /SYS ERROR/ LINBUF, ZBLOCK 113 PAGE BATABT, JMS I (CDFRST /THIS CODE IS HERE FOR CCL! TAD I (BOSSW /GET BATCH SWITCHES CMA AND (1000 /IF /E FLAG IS UP CCL ERRORS ARE NON-FATAL, CLL RTL JMP CDKILX /OTHERWISE WE SHOULD ABORT BATCH ON THEM CDGET, JMS I (GLINE /READ INPUT TAD I (HUSH SNA CLA /DON'T ECHO CD LINES IF HUSHED JMS I (ECHO TAD (LINBUF-1 DCA CDGPTR TAD I (DOLFLG /$JOB FLAG UP? SPA CLA JMP CDKBD /SLEW UNTIL $JOB ISZ CDGPTR TAD I CDGPTR DCA I (BNAM JMS I (TESTB /TEST PROMPT CHAR. -4 -"*;CDLINE /* IS OK -"/;CDGET /REMARK -"$;CDOLLR -".;CDKBD /RECALL KEYBOARD MON. KJOB, JMS I (PRMESG BADMSG /ILLEGAL CHARACTER CDKILL, STL CLA RAR /4000 CDKILX, DCA I (DOLFLG /ABORT TO NEXT $JOB JMS I (SETJSW /MARK BATCH IN CORE CIF CDF 0 JMP I .+1 7605 /RESTART. CDKBD, CIF 0 JMS I (SYSTEM 1000 0 KMREC SYIERR, SKP CLA JMP .+4 JMS I (PRMESG SERMSG HLT JMS I (SETJSW /MARK BATCH IN CORE JMS I (KMLINK /LINK TO NEW KEYBOARD TAD (BOSRE /WE WANT TO RETAIN OLD LINE CIF CDF 0 DCA I (BCHGO+2 JMP I (BEGLN+1 CDGPTR, 0 CDLINE, JMS I (MOVE /PUT LINE INTO CD -112 LINBUF+1 CDF 0 CDBEGLN TAD I (AMODE CDF 10 SZA CLA /CHECK WHETHER ALTMODE TERMINATED LINE STL RAR /IT DID - SET CD ALTMODE FLAG DCA I (MPARAM-1 CIF CDF 0 JMP I .+1 ANALYZ DEVKIL, JMS I (PRMESG PTRMSG JMP CDKILL HLPMSG, TEXT /MANUAL HELP NEEDED/ PTRMSG, TEXT /ILLEGAL INPUT DEVICE/ EOBMSG, TEXT /END BATCH/ SPLMSG, TEXT /SPOOL TO FILE / *.-1 BCHFIL, TEXT /BTCHA0/ PAGE /SUBROUTINE TO ANALYZE CD AREA - ENTER FROM ANY FIELD /WITH DEFAULT EXTENSION IN AC CDSCN, 0 TAD (-5200 SZA TAD (5200 /THIS MAY INTRODUCE A BUG WHILE FIXING ONE - STAN - DCA EXT /SAVE EXTENSION RDF TAD (CDF CIF 0 DCA CDSCRT /SAVE RETURN FIELD TAD (7600 DCA CDTEMP /LOOK AT CD AREA MTHREE DCA CDCNT CDSCAN, JMS I (CDFRST TAD I (BOSSW CLL RTL CDF 10 SZL CLA /IS SPOOLING ENABLED TAD I CDTEMP /AND IS THERE AN OUTPUT? AND (17 SNA JMP NCKSPL /NO - DON'T LOOK TAD (DCB-1 /CHECK FILE OR NON-FILE STATUS DCA CDTMP2 TAD I CDTMP2 /SPOOL NON-FILE DEVICES SPA CLA JMP NCKSPL /FILE STRUCTURED OUTPUT TAD I CDTEMP AND (7760 TAD SPLDEV /RESET CD AREA DCA I CDTEMP ISZ CDTEMP /POINT TO FILENAME AREA JMS I (CDFRST TAD I (SPLNUM AND (11 CIA TAD (11 SNA CLA TAD (66 IAC TAD I (SPLNUM DCA I (BCHFIL+2 JMS I (MOVE -4 BCHFIL CDF 10 CDTEMP, 0 /76XX JMS I (PRMESG /PRINT FILENAME SPLMSG TAD I (BCHFIL+2 /SET NEW FILENAME DCA I (SPLNUM CLA CMA NCKSPL, TAD CDTEMP TAD (5 DCA CDTEMP TAD EXT SNA CLA JMP CDSCRT /YES - LOOK NO MORE ISZ CDCNT JMP CDSCAN /KEEP LOOKING CDX1, TAD (-11 /SCAN INPUT AREA DCA CDCNT TAD (7617 DCA CDPTR /PICK UP MANUAL INPUTS. INPSCN, CDF 10 TAD I CDPTR SNA /ANY INPUTS? JMP CDSCRT /3 GUESSES! AND (17 TAD (DCB-1 /GET DEVICE IDENTIFIER DCA CDTMP2 TAD I CDTMP2 AND (770 JMS I (CDFRST SNA JMP RBELL /TELETYPE INPUT - CHECK OPERATOR TAD (-10 SZA CLA JMP CDX3 /OK INPUT DEVICE TAD I (BOSSW SPA CLA /PTR: INPUT - IS BATCH FROM PTR? JMP I (DEVKIL /YES - ILLEGAL RBELL, TAD I (BOSSW /OPERATOR AVAILABLE? CLL RAR SZL CLA JMP I (DEVKIL /NO. ABORT THE JOB TAD (207 JMS I (TTYOUT JMS I (PRMESG HLPMSG /MANUAL INTERVENTION REQUIRED. JMS I (CRLF JMP CDSCRT CDX3, CLA CLL CML RTL TAD CDPTR DCA CDPTR ISZ CDCNT JMP INPSCN CDSCRT, HLT JMP I CDSCN /RETURN TO CALLER SPLDEV, 0 /GETS SPOOL DEVICE # EXT, 0 CDPTR, 0 CDCNT, 0 CDTMP2, 0 PAGE /THIS ROUTINE IS NOT REFERENCED FROM BATCH- /IT PROVIDES A WAY FOR A USER TO OUTPUT MESSAGES /TO THE BATCH LOG DEVICE BATOUT, 0 /CALLABLE FROM ANY FIELD DCA CTRLC /WITH CHARACTER IN AC RDF TAD CDCF0 /GET CDF CIF TO CALLING FIELD DCA BATORT JMS I (CDFRST /CDF TO CURRENT FIELD TAD CTRLC SZA JMS I (OUTCHR /OUTPUT THE CHARACTER BATORT, HLT JMP I BATOUT /ENTER HERE FROM COMMAND DECODER WHEN CD CALLED CDBOS, RIF /FILL IN CIF CDF N TAD CDCF0 /TO LINK CD AND BOS DCA CDLST1 TAD CDLST1 DCA CDLST2 TAD CDLST2 DCA CDLST3 JMS MOVE CM3, -3 CDLST1 CDF 0 TYPE+1 /LINK ERROR PRINTOUT TO BOS JMS MOVE -3 CDLST2 MCDF0, CDF 0 CGLINE /LINK INPUT TO BOS JMS MOVE -3 CDLST3 CDF 0 CDOVER /EXIT FROM LINE ANALYSIS CDCF0, CIF CDF 0 JMP I .+1 RESTRT+1 /START UP CD /** THESE 3 WORDS LOAD INTO "TYPE+1" IN THE COMMAND DECODER ** CDLST1, CIF CDF 0 TYPE+3&177+5600 /"JMP I .+1" CDPRT /** THESE 3 WORDS LOAD INTO "CGLINE" IN THE COMMAND DECODER ** CDLST2, CIF CDF 0 CGLINE+2&177+5600 /"JMP I .+1" CDGET /RETURN TO CDGET AFTER ZEROING CD AREA /** THESE 3 WORDS LOAD INTO "CDOVER" IN THE COMMAND DECODER ** CDLST3, CIF CDF 0 CDOVER+2&177+5600 /"JMP I .+1" CDRENT CTRLC, 0 /CHECK FOR ^C KRS AND (177 TAD CM3 SNA CLA KSF JMP I CTRLC JMP I .+1 BKILL ECHOT, 0 /ECHOES LINE ON TTY TAD (TTYOUT /SET TTY AS OUTPUT DCA I (BOUTDV JMS ECHO /ECHO IT JMS I (CRLF TAD I (OUTPUT DCA I (BOUTDV /RESET OUTPUT JMP I ECHOT TTY, 0 KSF JMP .-1 JMS CTRLC KCC JMP I TTY ECHO, 0 /ECHO INPUT LINE TAD (LINBUF-1 DCA EPTR ECHO2, ISZ EPTR TAD I EPTR SNA JMP ECO3 JMS I (OUTCHR JMP ECHO2 ECO3, TAD I (AMODE /NEED $ PRINTED? SZA JMS I (OUTCHR /YES JMS I (CRLF JMP I ECHO MOVE, 0 RDF TAD MCDF0 DCA MVIPUT TAD I MOVE DCA MVTMP /COUNT ISZ MOVE CLA CMA TAD I MOVE DCA MVPT1 /INPUT STUFF ISZ MOVE TAD I MOVE DCA MVOPUT /OUTPUT FIELD ISZ MOVE CLA CMA TAD I MOVE DCA MVPT2 ISZ MOVE MVIPUT, HLT ISZ MVPT1 TAD I MVPT1 MVOPUT, HLT ISZ MVPT2 DCA I MVPT2 ISZ MVTMP JMP MVIPUT JMS I (CDFRST JMP I MOVE MVTMP= CTRLC MVPT1, 0 MVPT2, 0 EPTR, 0 CDPRT, JMS I (ERHDR CIF CDF 0 /LINK BACK TO CD JMP I .+1 TYPE+10 PAGE FIELD 0 *200 $$$$$$$$$$ |
Added src/os8/uni/SYSTEM/BUILD.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 | /33 OS/8 V3D BUILD / / / / / / / / / /COPYRIGHT (C) 1971,1972,1973,1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / /ABSTRACT-- /BUILD IS THE SYSTEM CONFIGURATOR FOR THE OS/8 PROGRAMMING /SYSTEM. WITH BUILD, THE DEVICES WITHIN A PARTICULAR /SYSTEM CAN BE RAPIDLY AND EASILY CHANGED. BUILD ALSO /PROVIDES THE FACILITY FOR CREATING AN INITIAL OS/8 SYSTEM /FROM BINARY PAPER TAPES OR CASSETTES. /V3 CHANGES /0. MADE BUILD SUPPORTABLE /1. ADDED VE COMMAND (CURRENT VERSION # IS 3X WHERE X IS PATCH LEVEL) /2. FIXED PROBLEM WITH Z'S AND 9'S IN FILENAMES /3. CHANGED LENGTH OF DF32 /4. FIXED PROBLEM WITH RK8 BOOTSTRAP RECORD. /5. ON LOAD, NULL EXTENSION FIRST SEARCHES FOR .BN /6. CR TO $ DOESN'T GIVE ERROR /7. FIXED BUG WITH BUILDING ROM SYS /8. RUBOUTS TO BOL GIVE $ /9. ^U RETYPES $ /10. ASSUME DSK: IF NO DEV GIVEN WITH LOAD /11. NO DOT IS PRINTED IF NO EXTENSION /12. ^O STUFF NEW /13. ALLOW PARITY ^C /14. ADDED EXAMINE COMMAND /15. FIXED BUG RE ACCESSING USR TABLE VIA POINTER /16. CLEANED UP MOVE ROUTINE /17. CLEANED UP NUMBER TOO BIG CHECKER /18. OVERFLOW ERROR MESSAGE CHANGED TO 'BAD ORIGIN' /19. DON'T ALLOW NAMES OVER 6 CHARS TO SPILL INTO EXTENSION; / DON'T ALLOW MULTIPLE EXTENSIONS /20. INCREASED NUMBER OF ALLOWABLE ENTRY PTS/HANDLER TO 16 (DEC) /21. CLEANED UP SYMBOL PRINT ROUTINE /22. GOT NAMES IN TABLE TO LINE UP. /23. INSERT GRPNAME <CR> INSERTS FIRST HANDLER /24. INSERT GRP,DEV1,DEV2,DEV3,... /25. INSERT GRP,DEV1-5,... /26. SAME FOR DELETE AND REPLACE /27. COUNT DEVICES AND SLOTS ONLY ON BOOT /28. FIXED BUG RE SYS RF08=4023 /29. GENERAL SUPPORT OF 2-PAGE SYS HANDLERS /30. ADDED QL COMMAND /31. SETS SA=00200, JSW=0 /32. UNLOAD UNLOADS AND DELETES /33. ADDED DSK COMMAND /34. BUILD COMMAND /35. PRINT TELLS YOU ABOUT DSK /36. TOOK OUT LOC DEPENDENT CHECK FOR SYSTEM HANDLERS /37. INSERT ALLOWS SETTING # OF PLATTERS /38. HANDLER HEADER LOADS DIRECTLY INTO DESCRIPTOR TABLE /39. USES EXTRA CORE IF AVAILABLE (ALSO CHECKS SOFTWARE CORE SIZE) /40. STOPS ECHOING ON INPUT LINE OVERFLOW /41. *'S SYSTEM DEVICE /42. REMEMBERS SYS ACROSS A BOOT /43. 'Y' INSTEAD OF 'YE' /44. BO CHECKS DCB IN CORE TO SEE IF NEED REWRITE MONITOR /45. ALLOW UNLOADING ENTRY POINT NAMES /46. CTL COMMAND /47. EACH COMMAND HAS ITS OWN MAXIMUM INPUT LINE SIZE /48. ADDED CORE COMMAND /49. FIXED ^U TO WRITE ZERO DIRECT MSG BUG /50. HIT CONTINUE AFTER 'SYS ERR' TO RETRY /51. PRESERVED DATE ACROSS BOOT /52. MULTIPLE LOADS AND UNLOADS /53. LOAD FROM SCRATCH USES INTERNAL ACTIVE HANDLERS /54. CASSETTE SUPPORT /55. SETS CORE CONTROL BLOCK /CHANGES SINCE FIELD RELEASE /A 'NO ROOM' DOESN'T PRINT 'BAD LOAD' /B NO. OF ENTRY POINTS NOW CORRECTLY CHECKED FOR /C FIXED BUG RE BUILDING TD8E FROM TD8E /D BOOT CMD DISABLES BUILD CMD /E JSW SET TO 1 BEFORE CHAINING TO ABSLDR /F P CMD BUG FIXED /G ALTER BUG FIXED /H LENGTH OF INPUT LINE SYMBOLIC /I SOFCOR STUFF OPTIMIZED /J QL DOESN'T PRINT SPACE BETWEEN SYS'S GRP:NAME /K FIXED BUG IN 32K /L PAPER TAPE PUTS HLT IN 7600 /THINGS TO DO: /? DIES IF DATA OCCURS BEFORE *0 /? BOOT.ZE, .NZ CMD? /? GET 2-PAGE BIT OF CURRENT SYSTEM /CHANGES FOR MAINTENANCE RELEASE V3C: / 7-AUG-75 /1. CHANGED VERSION NUMBER TO V5 /2. INCORPORATED PATCH SEQ #1 (DSN APRIL 1975) / ZERO LOCATION SOFSET WHILE BUILDING /3. INCORPORATED PATCH SEQ #2 (DSN NOV. 1974) / DISMISS USR AFTER ?NAME ERROR /4. INCORPORATED PATCH SEQ #3 (DSN MARCH 1975) / DECREASE SYSTEM SIZE BY 5 (FOR ABSLDR) WHEN BUILDING FROM PAPER TAPE /5. INCORPORATED PATCH SEQ #4 (DSN APRIL 1975) / ADDED 'SIZE' COMMAND TO BUILD /6. FIXED BUG WHICH CAUSES SYSXY.RS NOT FOUND TO BE PRINTED / ON BOOTXY.RS COMMAND /CHANGES FOR V3D: / 1-MAY-77 /1. FIXED PROBLEM WITH CASSETTE BUILD (JSW WAS SET WRONG) /2. ALLOWED SAVING OF HIGH-ORDER DATE BITS /BUILD PAGE 0 *1 HLT /SAFETY HALT AND PATCH SPACE SAV1, 0 SAV2, 0 /SAVES GROUP NAME /POINTER TO BATCH ROUTINE (GROSS BUT NEEDED THE ROOM) BATT, BATTST /AGAIN GROSS BUT WHAT CAN I SAY? *10 /AUTO INDEX REGISTERS XR1, 0 /GENERAL PURPOSE REGISTERS XR2, 0 XR3, 0 XR4, 0 /USED TO BUILD IMAGE TABLES XR5, 0 LXR, 0 GNMXR, 0 L600, 600 *20 COUNT, 0 /GENERAL COUNTER LOCATION CHAR, 0 /CHARACTER BUFFER TEMP, 0 /TEMPORARIES TMP1, 0 BUFFER=5400 BINARY=6000 DEVBUF=0400 /FIRST HANDLER AT 10400 /FOR REASONS TOO LONG TO GO INTO HERE, /BUT WHICH HAVE TO DO WITH CURIOUS /PROPERTIES OF THE NUMBER 0, /HANDLERS CAN'T START AT 0. /THEY COULD HAVE STARTED AT 200. SOFSET=7747 /SYSTEM OFFSET. (CURRENTLY =0) PG7600=BUFFER /RECORD 0 (IMAGES OF BOTH 7600'S) LDRCTL=4113 /CHECK OS/8 ASSEMBLY NAME1, 0 /NAME1-4 HOLDS FILE AND DEVICE NAMES NAME2, 0 NAME3, 0 NAME4, 0 TABLMT, DSCTAB /HIGH CORE END OF DESCRIPTORS /FIRST FREE LOCATION SIZE, 0 HNDPTR, DEVBUF /POINTS TO FIRST FREE LOCATION IN HANDLER TABLE BLDSAV=76 /**** WILL DESTROY PREVIOUS FILES /START OF 40 BLOCK TO SAVE BUILD IN HDRSIZ=10 /NUMBER OF ITEMS IN A DESCRIPTOR DSCPTR, DSCTAB /ALWAYS POINTS TO BEGIN OF CURRENT DESCRIPTOR SLOT, 0 DSKG1, 0 /NAME OF 'DSK' DSKG2, 0 DSKP1, 0 DSKP2, 0 NEWPAG, 0 OLDPAG, 0 NEWCOR, 0 /NEW CORE MAX SAVDAT, 0 /REMEMBERS DATE ACROSS A BOOT DATEWD=7666 FLAG2, 1 /0 IF PREVIOUS SYSTEM HAD A 2-PAGE HANDLER /SAMSYS, 1 /0 IF DIDN'T SPECIFY NEW SYS BLOK66=0 SYSDCB, 0 SA=7744 JSW=7746 /BOOTDV, 0 /HANDLER ADDRESS OF DEVICE WE'RE BOOTSTRAPPING TO SAVHID, 0 /HIGH-ORDER DATE (BITS 3-4) /BEGLIN: 72 CHAR LINE BUFFER /NEW BUILD CORE ALLOCATION: /0000-5177 BUILD (ABSLD MUST BE ABOVE 4177) /5400-5777 DEVICE HANDLER FOR LOAD /5200-5377 PAPER TAPE/INIT/LINE BUFFER /6000-6377 INPUT BUFFER FOR LOAD (TEMP LOC OF USR) /6400-7577 DESCRIPTOR TABLE (DSCTAB) /BINARY MUST FOLLOW BUFFER /FIELD 1: HANDLERS (0400-7577) /10000-10377 BLOK66 BUFFER *200 SKP CLA /ENTRY FROM 'R BUILD' HLT /CHAIN ENTRY ADDRESS TAD I [7600 /SEE IF SYSTEM ALREADY EXISTS CIA TAD [4207 SZA CLA /IF NOT, BUILD SYSTEM FROM PAPER TAPE CLA IAC /NOTE FACT THAT OS/8 AINT AROUND DCA I [RETSW JMS I (CORE DCA I (AMTCOR /FIGURE OUT HOW MUCH CORE WE HAVE JMS I (GOOD /DO SOME INITIALIZATION; IT'LL DO YA GOOD TAD (BATLS-1 /SET POINTER FOR BATCH OVERLAY JMS I (BATTST /GO CHECK FOR CALL FROM BATCH CONFIG, CDF 0 DCA I (ECHOFLG /ALLOW TYPING JMS I [CRLF DOLR, TAD ["$ /OUTPUT A $ BECAUSE I'M JEWISH JMS I [TTYOUT DCA I [SWAPER /USE CURRENT HANDLER, NO SWAP ON ^C. TAD [-LNLNGT JMS I [GTEXT /READ TTY LINE JMP DOLR JMS I [GNAME /INTERPRET THE COMMAND TAD NAME1 SNA JMP CONFIG DCA CHAR /ENABLE TEST TO WORK JMS I [TEST /LOOK FOR THE COMMAND IN LIST -1417;LOAD /LOAD DEVICE HANDLER BINARY -2205;REPLACE /REPLACE IN SYSTEM -1601;NAME /ALTER PERMANENT NAME -0114;ALTER /CHANGE DEVICE HANDLER LOCATION -2022;PRINT /SYSTEM STATUS -2331;SYSTEM /SPECIFY SYSTEM DEVICE -0217;BOOT /BOOTSTRAP THE NEW SYSTEM -2516;UNLOAD /DELETE INACTIVE HANDLER -0405;DELETE /DELETE ACTIVE HANDLER -1116;INSERT /INSERT HANDLER IN SYSTEM -2605;VERS /TYPE VERSION # -0530;EXAMINE /EXAMINE LOCATION -2114;QLIST /QUICK LIST -0423;DSK /DSK -0317;KORE /CORE -0403;DCBCM /DCB -0324;CTLCM /CTL -2311;SIZCM /SIZE -0516;END /END COMMAND FOR BATCH BD, -0225;BUILD /BUILD 0 /MUST TERMINATE LIST WITH 0 JMP I [WHAT /DIDN'T FIND COMMAND /NEW HEADER BLOCK: / DEVICE GROUPNAME / DEVICE PERMANENT NAME / DCB (R/W,TYPE,MAX # OF PLATTERS) / 1/2 PAGE, SYSTEM BIT, CORES BIT, REL ENTRY PT / MUST BE 0 / SIZE OF 1 PLATTER CORSIZ, GETCHA, 0 TAD DSCPTR TAD I GETCHA ISZ GETCHA DCA GETEM TAD I GETEM JMP I GETCHA /GOTCHA SUBROUTINE MOVED FOR ROOM PUT=JMS I [GOTCHA GET=JMS I [GETCHA BATTST, 0 /SUBROUTINE TO SEE IF CALLED FROM BATCH DCA XR1 /POINTER TO OVERLAY CODE IN FIELD 2 TAD I [7777 /GET THE BATCH SWITCH (JMP BATBK IF IN BATCH) RAL /BIT 1 SMA CLA /IF NO BATCH MAY NOT HAVE FIELD 2 JMP I BATTST /NOT CALLED FROM BATCH BATBK, CIF 20 /NOW TO FIELD 2 JMS I (BATSET /GO DO SOME OVERLAYS JMP I BATTST /RETURN TO CALLER GETEM, /POINTS INTO DSCTAB RELCOR, 0 CLA IAC DCA CORSIZ /MAKE RE-USABLE TAD [7400 DCA CORX /MAKE ROUTINE REUSABLE ON 32K MACHINE COR0, CDF 0 TAD CORSIZ RTL RAL AND COR70 TAD COREX DCA .+1 COR1, CDF /N TAD I CORLOC COR2, NOP DCA COR1 TAD COR2 DCA I CORLOC COR70, 70 TAD I CORLOC CORX, 7400 TAD CORX TAD CORV SZA CLA JMP COREX TAD COR1 DCA I CORLOC ISZ CORSIZ JMP COR0 COREX, CDF 0 STA TAD CORSIZ JMP I RELCOR /LEAVE WITH HIGHEST EXISTENT BANK CORLOC, CORX CORV, 1400 PAGE /GET GETS DESCRIPTOR ITEM FROM CURRENT DESCRIPTOR /OP /PUT PUTS DESCRIPTOR ITEM IN AC BACK IN SPECIFIED ITEM /OP IN CURRENT DESCRIPTOR /ITEMS: /ACTIVE BIT 0=1 MEANS ENTRY POINT HAS BEEN INSERTED (IS ACTIVE) /PERM1 PERMANENT NAME (FIRST 2 CHARS) /PERM2 2ND 2 CHARS /TWOPAG BIT 0=1 MEANS 2-PAGE HANDLER, BIT 4 IGNORED, BITS 5-11 RELATIVE ENTRY POINT /PAGRES BITS 7-11 GIVE PAGE OF START OF HANDLER WHEN ROTATED 6 RT /GRPNM1 GROUP NAME (DEVICE NAME) FIRST 2 CHARS /GRPNM2 2ND 2 CHARS /DEVSIZ GIVES SIZE OF 1 PLATTER /PLATNUM # OF PLATTERS IN BITS 2-4 /DSKBIT BIT 1 IS FLAG FOR 'DSK' (USED TEMPORARILY BY BUILD) /MAXPLT MAXIMUM NUMBER OF PLATTERS ALLOWED (IN BITS 9-11) /DCB D.C.B. BIT 0: FILESTRUCTURED, BITS 3-8 DEVICE TYPE / BITS 9-11 MAX NO. OF PLATTERS /CORES BIT 2 MEANS ENTRY PT IS CORESIDENT WITH SYS HANDLER /SYSBIT BIT 1 IS A 1 IF THE DEVICE HAS NAME 'SYS' AND IS A SYS DEVICE /IF FIRST ENTRY OF A DESCRIPTOR IS GE 7600, THEN THIS /ENTRY IS A BOOTSTRAP ENTRY. /IT STARTS WITH THE NEGATIVE OF THE NUMBER OF WORDS IN THE /BOOTSTRAP (FOR THE PRECEDING DEVICE), FOLLOWED BY THAT MANY WORDS GRPNM1=0 GRPNM2=1 PRMNM1=2 PRMNM2=3 DCB=4 MAXPLT=4 DVTYPE=4 TWOPAG=5 /BIT 0 SYSBIT=5 /BIT 1 ACTIVE=6 ENTPT=5 PAGRES=6 PLATNUM=6 DEVSIZ=7 DSKBIT=6 /BIT 1 CORES=5 /BIT 2 /READ A LINE OF TEXT RETURN 1 IS ^U RETURN GTEXT, 0 /ROUTINE TO COLLECT TTY INPUT TAD (-BEGLIN /AC IS NON-ZERO DCA ENDLIN DCA I (RUBFLG /INITIALIZE RUBOUT TO \ TAD (BEGLIN-1 RDTX, DCA LXR /BUFFER ADD. TO INDEX RDTXT, JMS I [TTYIN /READ BLOODY TELETYPE TAD CHAR DCA NAME1 /SETUP FOR TEST AGAIN JMS I [TEST -377;RBOUT /RUBOUT LFMOD, -212;LFEED /LINE FEED..ECHO CURRENT COMMAND -215;CARRET /LINE TERMINATOR -233;ALTMOD /ALT MODE IN SEVERAL FLAVORS -375;ALTMOD -376;ALTMOD -200;RDTXT /IGNORE BLANKS -217;RDTXT /AS WELL AS ^O -203;CTRLC /BACK TO CURRENT SYSTEM -225;CTRLU /CTRLU 0 /IF NOT ONE OF THESE, PUT IN BUFFER TAD LXR TAD ENDLIN SNA CLA JMP RDTXT /LINE OVERFLOW, STOP ECHOING JMS I [PRNT /PRINT THE CHARACTER TAD CHAR DCA I LXR /AND PUT IN LINE BUFFER JMP RDTXT /NO PROBLEMS YET RBOUT, TAD LXR /IS THERE TEXT TO RUB OUT? TAD [1-BEGLIN SNA CLA JMP RBCR /NO..SO DON'T DO ANYTHING TAD ["\ /YES..ECHO BACKSLASH? ISZ I (RUBFLG /IF = -1, NO JMS I [TTYOUT CLA CMA /IGNORE CONSECUTIVE RUBOUTS DCA I (RUBFLG TAD LXR DCA TMP1 TAD I TMP1 JMS I [TTYOUT /ECHO LAST CHAR XRBACK, CLA CMA TAD LXR /MOVE INDEX BACK ONE JMP RDTX CARRET, JMS I [CRLF /GENERATE 215,212 CAR1, DCA I LXR DCA I LXR /GUARD AGAINS CMD <CR> TAD [BEGLIN-1 DCA GNMXR /SETUP FOR GNAME ROUTINE ISZ GTEXT /TAKE NORMAL RETURN JMP I GTEXT LFEED, DCA I LXR /A 0 TO MARK END TAD [BEGLIN-1 DCA LXR JMS I [CRLF TAD ["$ JMS I [TTYOUT ECHO, TAD I LXR SNA /DONE ECHOING? JMP XRBACK /YES..REPOSITION LXR JMS I [TTYOUT JMP ECHO ALTMOD, TAD ["$ /ALT MODE ECHOES AS $ JMS I [TTYOUT JMP CAR1 CTRLU, TAD ["^ JMS I [TTYOUT /GENERATE ^U TAD NAME1 TAD [100 JMS I [TTYOUT RBCR, JMS I [CRLF JMP I GTEXT /TAKE ERROR RETURN GETCHR=JMS I [GETC BAKCHR=JMS I [BAKC ENDLIN, GETNUM, 0 /PICKS UP NUMBER FROM LINE BUFF /DELIM CHAR PUT IN 'CHAR' /PRINTS ERROR MESSAGE IF GT 4095 /IF NO NUMBER, TAKES RETURN 1 /IF NUMBER, TAKES RET 2 WITH # IN 'SIZE' DCA SIZE DCA GOTSW /HAVEN'T FOUND ANY DIGITS YET JMP NCHAR ROT, DCA TMP1 ISZ GOTSW /FOUND A DIGIT TAD SIZE AND [7000 SZA CLA JMP I [BADARG /NUMBER .GT. 4095 TAD SIZE CLL RTL RAL /BUILD UP THE DIGIT TAD TMP1 DCA SIZE NCHAR, GETCHR SNA /0 ENDS THE LINE JMP NUMOUT TAD [-240 /IGNORE SPACES SNA JMP NCHAR TAD (-30 /TEST LIMITS CLL TAD [10 /MUST BE BETWEEN 0 AND 7 SZL JMP ROT TAD (260 /RESTORE CHAR NUMOUT, DCA CHAR /SAVE AWAY THIS DELIMETER TAD GOTSW /DID WE GET ANY DIGITS? SZA CLA /? ISZ GETNUM /YES JMP I GETNUM /NO, RETURN GETC, 0 /GET THE NEXT CHARACTER, ADVANCE SCAN PAST IT TAD I GNMXR JMP I GETC GOTSW, /1 MEANS GOT A DIGIT BAKC, 0 /BACK UP SCAN TO THE CHARACTER JUST LOOKED AT STA TAD GNMXR DCA GNMXR JMP I BAKC PAGE INIT=JMS I [INI ADVDSC=JMS I [DSCADV ADVBOT=JMS I [BOTADV / JMS PRMNAM /SEARCH TABLE FOR A PERMANENT NAME /GIVEN IN NAME1-NAME2 /POINT TO DESCRIPTOR FOR THIS NAME / JMS ACTNAM /SAME BUT PERMANENT NAME MUST BE ACTIVE / JMS BIGNAM /SEARCHES FOR PERM & GRP NAME (GRP NAME IN SAV1,SAV2) / JMS GRPNAM /SAME BUT SEARCH FOR GROUP NAME CHKNAM, 0 INIT CHKLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR ADVBOT /ADVANCE OVER ANY BOOTSTRAP JMP NFOUND /NO MORE- ERROR GET NM1, GRPNM1 /GET GROUP OR PERMANENT NAME CIA TAD NAME1 SZA CLA /DO FIRST WORDS MATCH? JMP CHKLUP /NO, TRY AGAIN GET NM2, GRPNM2 /GET 2ND WORD CIA TAD NAME2 SZA CLA /2ND WORD MATCH? JMP CHKLUP /NO TAD BIGFLG SNA CLA /WANT BOTH GROUP AND PERM NAME? JMP NOBIG /NO GET /YES GRPNM1 CIA TAD SAV1 SZA CLA JMP CHKLUP GET GRPNM2 CIA TAD SAV2 SZA CLA JMP CHKLUP NOBIG, TAD ACTSW /FOUND MATCH SNA CLA /MUST HANDLER BE ACTIVE? JMP I CHKNAM /NO, RETURN GET /YES ACTIVE SMA CLA /IS IT ACTIVE? JMP CHKLUP /NO, TRY AGAIN JMP I CHKNAM /YES, RETURN GRPNAM, 0 TAD (GRPNM1 /WANT TO SEARCH FOR GROUP NAME DCA NM1 TAD (GRPNM2 DCA NM2 DCA ACTSW /NEED NOT BE ACTIVE DCA BIGFLG JMS CHKNAM /GO SEARCH JMP I GRPNAM ACTSW, 0 /1 MEANS HANDLER MUST BE ACTIVE PRMNAM, 0 DCA ACTSW /AC MAY BE NON ZERO (TO MEAN ACTIVE ONLY) TAD (PRMNM1 /WANT TO SEARCH FOR PERMANENT NAME DCA NM1 TAD (PRMNM2 DCA NM2 DCA BIGFLG JMS CHKNAM /GO SEARCH JMP I PRMNAM BADLOD, JMS I [CRLF JMS I [PRWD TEXT /?BAD LOAD/ DCA I TABLMT /RESTORE SENTINEL 0 JMP I [CONFIG BIGNAM, 0 DCA ACTSW TAD (PRMNM1 DCA NM1 TAD (PRMNM2 DCA NM2 CLA IAC DCA BIGFLG JMS CHKNAM JMP I BIGNAM /SOMETIMES CHKNAM CAME FROM DSKASK INSTEAD OF GETSYS **** BIGFLG, 0 /SET TO 1 TO CHECK GROUP & PERMANENT NAME NFOUND, JMS I [PRNAME JMS I [PRWD TEXT / NOT FOUND/ JMP I [CONFIG NOROOM, JMS I [PRWD TEXT /?NO ROOM/ DCA I TABLMT /RESTORE SENTINEL 0 JMP I [CONFIG VERS, JMS I [PRWD TEXT /BUILD V7A/ JMP I [CONFIG /BUILD CORE CONTROL BLOCK / ***** CAUTION IF BUILD GROWS FROM FIELD 2 BLDCCB, -3 /3 SEGMENTS 6203 /FIELD 0 0200 /200 IS S.A. 0000 /JSW 0000 1020 /20000-21777 0000 /10000-17577 3710 0000 /00000-07577 3700 /GOES INTO WORDS 200-377 OF BLOCK 37 PAGE /LOAD A 1- OR 2-PAGE HANDLER INTO BUFFER /USE IT TO ABSLD SETUP, 0 TAD [NAME1 DCA FILPTR /POINT TO FILENAME AREA TAD (BUFFER+1 /LOAD 2 PAGE HANDLER INTO 'BUFFER' DCA DRIVER /SET UP ASSIGN DEVICE HANDLER JMS I [GNAME /GET DEVICE NAME TAD NAME1 SNA CLA JMP I SETUP /NO ARG ISZ SETUP TAD I (RETSW SZA CLA JMP I (BLDLOD /WHEN LOADING STANDALONE, USE INTERNAL HANDLERS TAD CHAR TAD [-": SZA CLA JMP I (SETDSK /USE 'DSK ' IF NO DEVICE GIVEN TAD NAME1 DCA DVNM1 TAD NAME2 DCA DVNM1+1 /LOOKUP DEVICE NAME GETU, JMS I (GETUSR CIF 10 JMS I [200 /FETCH HANDLER 1 SUBLUP, DVNM1, 0 LODTMP, DVNUM, 0 /NAME GOES IN HERE DRIVER, 0 JMP I (KICKM /NO DEVICE. RELEASE MONITOR TAD CHAR SZA CLA JMS I [GNAME /PICK UP FILE NAME TAD DVNM1+1 /DEVICE NUMBER JMS I (DTYPE /SEE IF FILE STRUCTURED TAD NAME1 /IF FILE STRUCTURED WITH NO NAME SNA CLA /IT IS AN ERROR JMP I (NMER /V3C TAD NAME4 /SAVE ORIGINAL EXTENSION DCA TEMP TAD NAME4 SNA /IF NULL TAD (0216 /TRY .BN FIRST TRYAGN, DCA NAME4 TAD DVNUM /GET DEVICE NUMBER CIF 10 JMS I [200 /DO LOOKUP OF FILENAME 2 FILPTR, NAME1 0 JMP LDEXT /DIDN'T FIND FILE. DO SOMETHING CIF 10 JMS I [200 /KICK OUT MONITOR 11 TAD DRIVER LOADIN, DCA I [DVICE /ENTRY POINT OF HANDLER JMS I (IOPEN /IF HERE, IT WILL FIT JMP I SETUP LOAD, JMS SETUP /SET UP FOR INPUT JMP I [NODEV /NO LOAD DEVICE STA CLL RAL /-2 DO A HANDLER LOAD CIF CDF 20 /OFF TO FIELD 2 JMS I (LDABS JMP I [BADLOD /BAD TAD I TABLMT /SEE IF HEADER INFORMATION IS OK SMA JMP I [BADLOD TAD (20 /ALLOW 16 HANDLERS/BINARY SPA CLA JMP I [BADINP /TOO MANY TAD I TABLMT DCA LODTMP /# OF LOOPS TO EXECUTE TAD TABLMT TAD [PAGRES+1 /POINT TO FIRST 'PAGRES' WORD DCA HDPTR /GO THERE FOR DESCRIPTORS TAD HNDPTR JMS I [ROTL DCA TEMP /PAGE OF RESIDENCE PGLUP, TAD TEMP DCA I HDPTR /INSERT PAGE OF RESIDENCE TAD HDPTR TAD [HDRSIZ DCA HDPTR ISZ LODTMP JMP PGLUP TAD [2-HDRSIZ TAD HDPTR DCA HDPTR /POINT TO AFTER DESCRIPTORS TAD HDPTR CIA TAD I (NEWLIM SNA CLA /AT END? JMP I (OK /YES TAD I HDPTR /NO, MAYBE A BOOTSTRAP RECORD CLL TAD [200 SNL CLA JMP I [BADLOD /NO TAD I HDPTR /MAYBE CIA IAC /OVER COUNT TAD HDPTR CIA TAD I (NEWLIM SZA CLA JMP I [BADLOD /NO JMP I (OK HDPTR, 0 /POINTS INTO NEW HEADER /DESCRIPTOR TABLE DESCRIPTION: /'TABLMT' ALWAYS POINTS TO FIRST FREE LOCATION /'DSCPTR' ALWAYS POINTS TO BEGIN OF CURRENT HEADER BLOCK /ITEMS ARE OF 3 FORMS: /(A) GROUP COUNT: IN RANGE -1 TO -20 (IGNORED AND HAS NO MEANING) / IT IS THERE FOR COMPATIBILITY WITH OLD BUILD /(B) HEADER BLOCK STARTS WITH NUMBER IN RANGE 0-7577 / CONSISTS OF 'HDRSIZ' CONSECUTIVE WORDS / DESCRIBED ELSEWHERE /(C) BOOTSTRAP BLOCK: STARTS WITH NUMBER IN RANGE 7600-7757 / THIS IS THE NEGATIVE OF THE NUMBER OF WORDS TO FOLLOW /NON-SYSTEM HEADER INFO: / - NUMBER OF ENTRY POINTS /FOR EACH ENTRY POINT: /0,1 GROUP NAME /2,3 ENTRY POINT NAME (PERMANENT NAME) /4 R/W FILE-STR, DEVICE TYPE, MAX # OF PLATTERS /5 1/2 PAGE, REL ENTRY PT, SYSBIT, CORES /6* PAGE OF HANDLER, ACTIVE BIT, # OF PLATS, DSKBIT /7 SIZE OF DEVICE /* SUPPLIED BY BUILD LDEXT, TAD TEMP /DIDN'T FIND FILE SZA CLA JMP I (KICKM /NO RESORT ISZ TEMP JMP TRYAGN /TRY NULL EXTENSION PAGE REPLACE,JMS I (DEL /DELETE PERMANENT NAME SPECIFIED NEXT TAD CHAR TAD MEQ SZA CLA /AFTER ALL DELETIONS, MUST FIND A "=" JMP I [SYNTAX /IF NOT, WARN THE GUY JMS INS /IF FOUND IT, NOW PERFORM INSERTIONS JMP I [CONFIG /THE GUY HAS BEEN HUMORED INSERT, JMS INS TSTEOL, TAD CHAR /THERE SHOULDN'T BE ANYTHING AFTER EOC SNA CLA JMP I [CONFIG /THERE WASN'T JMP I [SYNTAX /WARN BLOKE ABOUT EXTRA STUFF DELETE, JMS I (DEL /DELETE PERMANENT NAMES SPECIFIED JMP TSTEOL SYSTEM, JMS INS /SYS IS SAME AS INSERT GET SYSBIT RTL SPA SZL CLA /BUT SYSBIT OR CORES SHOULD BE ON JMP TSTEOL /JUST TO HUMOR IT'S NAME TWOSYS, JMS I [PRWD /AND FOR COMPATIBILITY REASONS TEXT /?SYS/ JMP I [CONFIG INS, 0 TAD (STL RAR DCA I (ACTION /SET 'ACTION' FOR INSERTIONS JMS I [TSTNAM /LOOK FOR A NAME JMS I [GRPNAM /GET GROUP NAME JMS SAVNAM JMS I [TEST MEQ, -"=;ACT -",;INSNAM -":;INSNAM 4000;ACT 0 INSNAM, JMS I [TSTNAM /GRAB A NAME INSGN, JMS I [BIGNAM /GET PERMANENT NAME WITH SPECIFIED GROUP NAME GET GRPNM1 CIA TAD SAV1 SZA CLA JMP I [NFOUND /MAKE SURE PERMANENT NAME FOUND GET /HAS GROUP NAME PREVIOUSLY SPECIFIED GRPNM2 CIA TAD SAV2 SZA CLA JMP I [NFOUND ACT, JMS I (SETACT /SET ACTIVE BIT COM, JMS I [TEST -"-;HYPH -",;INSNAM -"=;INPLAT 0 JMP I INS INPLAT, JMS I [GETNUM /AN "=" JMP I [SYNTAX TAD SIZE SNA CLA JMP I [BADARG /=0 ILLEGAL GET MAXPLT AND [7 /GET MAXIMUM # OF PLATTERS ALLOWED SNA IAC /0 MEANT 1 CMA CLL TAD SIZE /COMPARE WITH USER'S REQUEST SZL CLA /IS HIS REQUEST OKAY? JMP BADPLT /REQUEST-SHMEST. TOO MANY PLATTERS TAD SIZE JMS I [ROTR DCA SIZE GET PLATNUM AND (6177 TAD SIZE /STORE AWAY HIS STATED NUMBER OF PLATTERS PUT /FOR FUTURE USE BY 'BOOT' PLATNUM JMP COM /REJOIN PROCESSING BADPLT, JMS I [PRWD TEXT /?PLAT/ JMP I [CONFIG SAVNAM, 0 TAD NAME1 DCA SAV1 /SAVE GROUP NAME TAD NAME2 DCA SAV2 JMP I SAVNAM HYPH, TAD NAME2 AND [77 CIA DCA DETEM GETCHR AND [77 TAD DETEM /GET CHAR AFTER HYPEN SNA CLA /REACHED IT YET? JMP IGET /YES, WELL TRY FOR MORE STUFF BAKCHR /NO, PUT IT BACK FOR FUTURE USE ISZ NAME2 /FORM NEXT SEQUENTIAL NAME JMP INSGN /GO INSERT IT /DO WE REALLY HAVE TO START SEARCH AT CURRENT DESCR? DETEM, 0 IGET, GETCHR DCA CHAR JMP COM NODEV, JMS I [PRWD TEXT /?DEVICE/ JMP I [CONFIG PAGE INTEM, SETACT, 0 GET ACTIVE /GET ACTIVATION BIT RAL ACTION, STL RAR /ACTIVATE IT (SET TO 'CLL RAR' TO DEACT) PUT ACTIVE /RESTORE JMP I SETACT DEL, 0 TAD (CLL RAR DCA ACTION DELNAM, JMS I [TSTNAM /PARSE OFF A NAME DELGN, JMS I [ACTNAM /FIND IT AS AN ACTIVE PERMANENT NAME JMS SETACT /DEACTIVATE IT GET PLATNUM AND [6177 /SET # OF PLATTERS TO 0 PUT PLATNUM DCOM, JMS I [TEST -"-;DHYPH -",;DELNAM 0 JMP I DEL DHYPH, TAD NAME2 AND [77 CIA DCA INTEM GETCHR AND [77 TAD INTEM SNA CLA /REACHED FINAL NAME? JMP DGET /YES BAKCHR /NO, PUT FINAL LETTER BACK ISZ NAME2 /YES, BUMP TO NEXT NAME L0423, 423 JMP DELGN /DELETE NEXT ONE IN SUCCESSION DGET, GETCHR DCA CHAR JMP DCOM TTYIN, 0 /TTY INPUT ROUTINE KSF JMP .-1 KRB SNA /LOW LEVEL BLANK IGNORE JMP TTYIN+1 AND [177 /HANDLE PARITY TAD [200 DCA CHAR JMP I TTYIN /DSK=ACTIVE PERMANENT NAME /DSK=GROUPNAME:PERMANENT NAME /DSK=<CR> MEANS NO DSK SPECIFIED, USE 'SYS' /JUST REMEMBERS NAME (NOTHING ELSE) DSK, JMS I [GNAME /GET A NAME TAD NAME1 SNA CLA JMP NODSK TAD CHAR SNA JMP NOCOL TAD [-": SZA CLA /IS IT FOLLOWED BY A ":"? JMP I [SYNTAX /NO, ASSUME HE'S GIVING AN ACTIVE PERMANENT NAME /THIS IS FOR COMPATIBILITY WITH OLD BUILD / JMS I [GRPNAM /YES, ITS A GROUP NAME TAD NAME1 /SAVE IT DCA DSKG1 TAD NAME2 DCA DSKG2 JMS I [TSTNAM /GET PERMANENT NAME PN, TAD NAME1 DCA DSKP1 /DON'T WORRY NOW IF IT'S AROUND TAD NAME2 DCA DSKP2 TAD CHAR SZA CLA JMP I [SYNTAX JMP I [CONFIG NODSK, DCA DSKG1 /FIRST WORD 0 MEANS NONE SPECIFIED JMP I [CONFIG NOCOL, JMS I [ACTNAM /IT MUST BE AN ACTIVE HANDLER GET GRPNM1 DCA DSKG1 GET GRPNM2 DCA DSKG2 JMP PN SETDSK, TAD L0423 /DS DCA I (DVNM1 TAD (1300 /K DCA I (DVNM1+1 JMP I (GETU KICKM, CIF 10 /RELEASE MONITOR AND RELOAD JMS I [200 /OUR DEVICES 11 JMP I [NFOUND GETUSR, 0 CIF 10 JMS I [7700 /LOCK IN MONITOR 10 CIF 10 /RESET RESIDENT HANDLER TABLE JMS I [200 13 JMP I GETUSR / CODE FOR USING INTERNAL HANDLERS ON STANDALONE LOAD: BLDLOD, DCA I (FILPTR /LOAD DEV JMS I [ACTNAM /MUST BE ACTIVE JMS I [GETPG DCA HNDLOK /LOCATION OF HANDLER TAD [-400 JMS I [MOVE CDF 10 HNDLOK, HLT CDF 0 PBUFFER,BUFFER GET DCB DCA BLDCB GET ENTPT AND [177 TAD PBUFFER /GET ENTRY POINT OF HANDLER JMP I (LOADIN BLDCB, 0 /CONTAINS DCB OF CURRENT LOAD HANDLER PAGE GETPG, 0 GET PAGRES JMS I [ROTR AND [7600 JMP I GETPG /FORMAT: NAME OLDNAME=NEWNAME NAME, JMS TSTNAM /SEE IF ARGUMENT SUPPLIED /SEARCH PERMANENT TABLES JMS I [ACTNAM /GET ACTIVE PERMANENT NAME DESCRIPTOR TAD CHAR TAD MEQL /CHECK FOR = SZA CLA JMP I [BADARG JMS TSTNAM /GET NEW DEVICE NAME TAD NAME1 /REPLACE THE NAME PUT PRMNM1 TAD NAME2 PUT PRMNM2 JMP I [CONFIG EXAMINE,CLA IAC ALTER, DCA XSWTCH JMS I [TSTNAM /ALTER ALLOWS MODS TO A PARTICULAR JMS I [GRPNAM /HANDLER'S ACTUAL CODE. /LOOK AT DEVICE TYPE ENTRY JMS GETPG /GET PAGE OF RESIDENCE DCA PAGAD /SAVE IT. JMS I [GETNUM /GET RELATIVE LOC TO ALTER JMP I [SYNTAX /NO NUMBER GET P2PAG, TWOPAG /IS THIS A 2-PAGE HANDLER? SPA CLA TAD [7600 TAD [7600 /ALLOW 200 OR 400 MAXIMUM CLL TAD SIZE /IS THE # TO ALTER TOO LARGE? SZL CLA JMP I [BADARG /I GUESS IT IS TAD SIZE TAD PAGAD /GET ABSOLUTE LOCATION DCA PAGAD TAD XSWTCH SZA CLA /EXAMINE OR ALTER? JMP EXAM /EXAMINE TAD CHAR /ALTER SZA CLA /CR? JMP GETVAL /NO JMS EXAMSB /YES, GIVE GUY OLD VALUE FIRST ODTL, TAD ["/ /ODT LIKE JMS I [TTYOUT TAD [-100 JMS I [GTEXT JMP ODTL GETVAL, JMS I [GETNUM /GET NEW CONTENTS JMP I (TSTEOL /NO NUMBER TAD SIZE CDF 10 DCA I PAGAD /REPLACE THAT LOC. JMP I [CONFIG /AND GET OUT PAGAD, 0 /ALTER GROUPNAME,LOC=NEWVALUE /ALTER GROUPNAME,LOC /EXAMINE GROUPNAME,LOC /SIZE ACTNAM /SIZE ACTNAM=VALUE /DCB ACTNAM /DCB ACTNAM=VALUE /CTL ACTNAM /CTL ACTNAM=VALUE SIZCM, TAD (3 /SIZE COMMAND V3C DCBCM, TAD [-1 /EXAMINE DCB WORD CTLCM, TAD P2PAG /EXAMINE CONTROL WORD DCA PUTAT TAD PUTAT DCA LOOKAT JMS I [TSTNAM /GET A NAME JMS I [ACTNAM /IT MUST BE ACTIVE JMS I [TEST MEQL, -"=;INPDCB 4000;EXAMDCB 0 JMP I [SYNTAX INPDCB, JMS I [GETNUM JMP I [CONFIG /IGNORE = NOTHING TAD SIZE PUT XSWTCH, /0 MEANS ALTER, 1 MEANS EXAMINE PUTAT, DCB JMP I [CONFIG /THE USER LIVES DANGEROUSLY EXAMDCB,GET LOOKAT, DCB JMS PUTNUM TAD ["/ JMS I [TTYOUT TAD [-100 JMS I [GTEXT JMP EXAMDCB JMP INPDCB /NOW PARSE OFF THE REPLY EXAM, JMS EXAMSB JMP I [CONFIG EXAMSB, 0 CDF 10 TAD I PAGAD /GET CURRENT CONTENTS CDF 0 JMS PUTNUM /PRINT IT JMP I EXAMSB PUTNUM, 0 /PRINT AN OCTAL NUMBER DCA PTM TAD [-4 /4 DIGITS DCA PKNT PLOOP, TAD PTM RTL RTL AND [7 TAD (60 JMS I [TTYOUT TAD PTM RTL RAL DCA PTM ISZ PKNT JMP PLOOP JMP I PUTNUM PTM, 0 PKNT, TSTNAM, 0 JMS I [GNAME /COLLECT NAME TAD NAME1 /IF NO NAME FOUND, GIVE ERROR SZA CLA JMP I TSTNAM NAMERR, JMS I [PRWD TEXT /?NAME/ JMP I [CONFIG PAGE /PRINT FUNCTION TYPES OUT THE STATUS OF BUILD ON COMMAND /AN * BESIDE A DEVICE INDICATES THAT IT IS CURRENTLY MARKED /FOR INSERTION IN THE SYSTEM BEING BUILT. TTY240, PRINT, STA DCA OLDPAG /SET ILLEGAL OLD PAGE INIT ISZ I (LINEUP /MAKE THINGS LINE UP PRLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR ADVBOT /ADVANCE PAST A BOOTSTRAP (IF ANY) JMP DONE /ALL DONE JMS I [GETPG /GET PAGE OF NEW HANDLER DCA NEWPAG TAD NEWPAG CIA TAD OLDPAG /COMPARE WITH LAST HANDLER'S PAGE SNA CLA /SAME? JMP PRTPER /YES JMS I [CRLF /NO, GO TO NEXT LINE TAD NEWPAG DCA OLDPAG JMS PGNAME TAD TTY240 JMS I [TTYOUT PRTPER, GET /GET ACTIVE BIT ACTIVE SPA CLA /IS IT ACTIVE? TAD ("*-STA /YES, PRINT * TAD TTY240 /NO, PRINT SPACE JMS I [TTYOUT JMS PNAME /PRINT PERMANENT NAME JMP PRLUP PGNAME, 0 GET GRPNM1 JMS I (PRINTE /PRINT GROUP NAME GET GRPNM2 JMS I (PRINTE TAD (": JMS I [TTYOUT JMP I PGNAME DONE, DCA I (LINEUP /NO MORE LINE-UP TAD DSKG1 SNA CLA JMP TELCOR JMS I [CRLF /TELL GUY ABOUT 'DSK' JMS I [CRLF JMS I [PRWD TEXT /DSK=/ TAD DSKG1 JMS I (PRINTE TAD DSKG2 JMS I (PRINTE TAD (": JMS I [TTYOUT TAD DSKP1 JMS I (PRINTE TAD DSKP2 JMS I (PRINTE TELCOR, TAD NEWCOR SNA JMP I [CONFIG /NO SPECIFIED CORE LIMIT JMS I [ROTL TAD (6000 DCA CORMSG+3 JMS I [CRLF JMS I [PRWD CORMSG, TEXT /CORE= / JMP I [CONFIG /QUICK PRINT QLIST, INIT QLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR ADVBOT /ADVANCE OVER ANY BOOTSTRAP IF NECESSARY JMP DONE /GO AWAY WHEN NO MORE GET ACTIVE /GET ACTIVE BIT SMA CLA /IS IT ACTIVE? JMP QLUP /NO, IGNORE IT GET /YES SYSBIT RAL SPA CLA /IS IT 'SYS'? JMS PGNAME /YES, PRINT GROUP NAME TOO JMS PNAME /NO, PRINT PERMANENT NAME ONLY JMP QLUP DT, PNAME, 0 GET PRMNM1 JMS I (PRINTE GET PRMNM2 JMS I (PRINTE TAD TTY240 JMS I [TTYOUT JMP I PNAME DCBTBL=7760 WHAT, JMS I [PRNAME JMS I [PRWD TEXT /?/ /FOR WHEN A COMMAND ERROR OCCURS JMP I [CONFIG DTYPE, 0 /RETURNS TYPE OF OUTPUT TAD (DCBTBL-1 DCA DT /ENTRY AC HAD DEVICE # CDF 10 TAD I DT /IF FILE DEVICE, LINK=0 CDF 0 CMA RAL /ALSO, IF FILE AC=0 ON EXIT CLA RAL JMP I DTYPE WRITCC, 0 TAD [-6 /PUT IN DATA BREAK FILLERS JMS I [MOVE CDF 0 K7750 CDF 0 PG7600+200+150 TAD (4200 JMS I [SYS /WRITE NEW CCB BLDCCB-200 37 JMP I WRITCC PAGE TOOMANY,JMS I [PRWD TEXT /?HANDLERS/ JMP I [CONFIG GOTCHA, 0 DCA I (GOTEM TAD I GOTCHA TAD DSCPTR ISZ GOTCHA DCA GETEMP TAD I (GOTEM DCA I GETEMP JMP I GOTCHA GETEMP, 0 /TEMP FOR GOTCHA TEST, 0 /TEST CHAR AGAINST ARGUMENTS TAD I TEST /PICK UP ARGUMENT FROM LIST SNA /0 TERMINATES JMP I TEST TAD CHAR /SEE IF THEY COMPARE = AND (3777 /COMPARE ONLY LOW ORDER, THUS ALLOWING '4000' TO MEAN '0' SNA CLA JMP TSTOVR /THEY DO..DISPATCH TO TABLE ISZ TEST ISZ TEST JMP TEST+1 /THEY DON'T. KEEP GOING TSTOVR, ISZ TEST TAD I TEST DCA TEMP JMP I TEMP K7750, 7750 /DATA BREAK FILLERS 7751 7752 7753 7754 7755 SYS, 0 /SAVES A FEW WORDS IN SYSTEM CALLS DCA SYCTL /SAVE FUNCTION WORD TAD I SYS DCA SYBUF /BUFFER BEING USED ISZ SYS TAD I SYS DCA SYREC /RECORD # ISZ SYS /THERE IS NO ERROR RETURN /IF SWAPER SET AND BOOTDV SET, USE SPECIAL BOOT HANDLER HERE GO, JMS I SYSENT SYCTL, 0 SYBUF, 0 SYREC, 0 SKP CLA JMP I SYS JMS I [PRWD TEXT /SYS ERR/ HLT /IF USER IS DARING, HIT CONTINUE TO RETRY JMP GO SYSENT, 7607 /***************** / / SYS HANDLER IS 2-PAGES LONG IF LOCATION 7612 IS A 3 / /****************** CLRTBL, 0 TAD [BEGLIN DCA XR1 TAD [-200 /ZERO OUT 5200-5377 DCA TMP1 DCA I XR1 ISZ TMP1 JMP .-2 JMP I CLRTBL /FOR HANDLER ONLY ORGLIM, 0 /THIS ROUTINE MAKES CERTAIN THAT DCA CLRTBL /THE ORIGIN FOR LDABS IS WITHIN TAD CLRTBL /THE BOUNDS SPECIFIED BY SIZE TAD [7600 /AND THE CONTENTS OF HNDPTR SPA JMP BADORG /ORIGIN BELOW 200 CIA TAD [400 /IS ORIGIN WITHIN UPPER BOUND? SPA CLA JMP BADORG TAD CLRTBL TAD [7600 /NOW GIVE BACK RELATIVE BUFFER TAD HNDPTR /ADDRESS IN FIELD 1 DCA CLRTBL TAD CLRTBL AND [7600 TAD [200 SNA CLA JMP I (NOROOM /CAN'T 'ORIGIN' INTO PAGE 7600 TAD CLRTBL CIF CDF 20 /CALLED FROM FIELD 2 JMP I ORGLIM BADORG, JMS I [PRWD TEXT /?ORIGIN/ JMP I (OVROUT /SOMEWHERE TEST IF HE GAVE US A 2-PAGE BUT REQ A 1-PAGE / PG7600_0 / BLOK66_66 / IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L RECZRO, 0 /READS FIELD 1 CODE, EVEN FOR 12K TD8E TAD [200 JMS I [SYS /READ RECORD 0 PG7600 0 /THAT NORMALLY CONTAINS FIELD 1 TAD (210 JMS I [SYS /READ RECORD 66 BLOK66 66 TAD FLAG2 /DID PREVIOUS SYSTEM HAVE A 2-PAGE HANDLER? SZA CLA TAD [-200 /NO JMS I [MOVE /YES CDF 0 PG7600 CDF 10 BLOK66 JMP I RECZRO NOTNUF, JMS I [PRWD TEXT /?CORE/ JMP I [CONFIG PAGE UNLOAD, JMS I [TSTNAM /PULL OFF A NAME JMS I [GRPNAM /IT HAD BETTER BE A GROUP NAME JMS I [TEST -":;UNLPRM 4000;UNLGRP 0 JMP I [SYNTAX UNLPRM, JMS I (SAVNAM /UNLOAD PARTICULAR HANDLER UNLNAM, JMS I [TSTNAM JMS I [BIGNAM TAD DSCPTR /DELETE A SINGLE DESCRIPTOR DCA SAVPTR /DON(T DELETE HANDLER TAD DSCPTR /OR BOOTSTRAP TAD [HDRSIZ /NO RELOCATION NECESSARY DCA LSTPTR TAD TABLMT JMP NOMOR UNLGRP, JMS I [GETPG /GET PAGE OF RESIDENCE DCA TOMOV /START OF HANDLER GET TWOPAG /IS IT A 1- OR 2- PAGE HANDLER? SPA CLA TAD [200 /2 PAGE TAD [200 /1 PAGE DCA UNSIZE TAD TOMOV /DELETE HANDLER AND MOVE ALL FOLLOWING DOWN TAD UNSIZE DCA FROMOV /GET FIRST LOCATION AFTER HANDLER TAD HNDPTR /GET NEXT FREE LOCATION FOR HANDLER CIA TAD FROMOV /GET NUMBER OF LOCS TO MOVE JMS I [MOVE CDF 10 FROMOV, 0 CDF 10 TOMOV, 0 /UPDATE POINTERS; SEARCH DESCRIPTORS TAD UNSIZE /FOR REFS TO MOVED HANDLERS AND DECREASE CIA /THOSE REFS BY -UNSIZE TAD HNDPTR DCA HNDPTR /FREES SOME BUFFER SPACE TAD TABLMT DCA OLDTOP /REMEMBER ORIGINAL TOP OF STACK STA /BACK UP OVER GROUP COUNT TAD DSCPTR DCA SAVPTR /REMEMBER THIS LOCATION TAD UNSIZE JMS I [ROTL CIA DCA UNSIZE TAD DSCPTR TAD [HDRSIZ DCA LSTPTR /'LSTPTR' POINTS TO FIRST DESCRIPTOR BEING MOVED /COMPRESS THE DESCRIPTORS ABOVE THIS ONE ADV, ADVDSC /ADVANCE TO NEXT DESCRIPTOR JMP BADV /ENCOUNTERED A BOOTSTRAP RECORD JMP NOMORE /NO MORE, THROUGH GT, JMS I [GETPG /GET PAGE OF THIS DESCRIPTOR CLL CIA TAD TOMOV /COMPARE WITH PAGE OF DELETED HANDLER SNA CLA JMP SAMPAG /THEY'RE THE SAME SZL /THEY'RE NOT THE SAME. WHICH IS HIGHER? JMP ADV /IT WAS BELOW HANDLER. NO SWEAT. GET /IT WAS ABOVE HANDLER, HAVE TO ACCOUNT FOR THIS PAGRES /POINT TO NEW HANDLER LOCATION TAD UNSIZE PUT PAGRES JMP ADV /CONTINUE SAMPAG, TAD [HDRSIZ TAD DSCPTR DCA LSTPTR /NOTE LOCATION OF NEXT DESCRIPTOR JMP ADV /ADVANCE PAST BOOTSTRAP OR DELETE IT AS NECESSARY BADV, TAD DSCPTR CIA TAD LSTPTR SZA CLA /IS THIS BOOT PART OF GROUP BEING UNLOADED? JMP BDV /NO TAD I DSCPTR /YES CIA IAC TAD DSCPTR DCA LSTPTR /SET 'LSTPTR' TO BEGIN OF NEXT DESCRIPTOR BDV, ADVBOT /ADVANCE OVER BOOTSTRAP JMP NOMORE /DONE JMP GT /GO ON TO NEXT DESCRIPTOR /ALL DESCRIPTORS FOR THE SAME HANDLER ARE CONSECUTIVE /MOVE DOWN DESCRIPTORS NOMORE, TAD OLDTOP NOMOR, CIA TAD LSTPTR /MINUS # OF WORDS TO MOVE JMS I [MOVE CDF 0 LSTPTR, 0 /FIRST DESCRIPTOR NOT CONSIDERED CDF 0 SAVPTR, 0 /POINTS TO INITIAL DESCRIPTOR BEING DELETED TAD LSTPTR CIA TAD SAVPTR /GET NUMBER OF WORDS DELETED TAD TABLMT DCA TABLMT /UPDATE TABLMT DCA I TABLMT /MUST HAVE 0 AT TABLE END SO DON'T THINK IT'S A BOOTSTRAP JMS I [COMMA JMP UNLNAM OLDTOP, /ORIGINAL TOP OF DESCRIPTORS INI, 0 TAD (DSCTAB-HDRSIZ DCA DSCPTR JMP I INI INIT=JMS I [INI /RETURN TO CONFIG IF EOL, OR BACK IN-LINE IF COMMA UNSIZE, COMMA, 0 TAD CHAR SNA JMP I [CONFIG TAD (-", SNA CLA JMP I COMMA JMP I [SYNTAX BOOTQ, SZA CLA /MAY BE OVERLAID JMP SAMEE DCA I (DRECT /DON'T TOUCH DIRECTORY IF DIDN'T COPY SYS SAMF, JMS I [SYSWP JMP I (BOOT4 SAMEE, JMS I (SYSCPY /OR IF OLD DEV=NEW DEV JMP SAMF PAGE LOCSYS, 0 TAD (2331 /"SY" DCA NAME1 TAD (2300 /"S " DCA NAME2 DCA NAME3 /V3C DCA NAME4 JMS I [ACTNAM /LOOK UP 'SYS' JMP I LOCSYS NOSLOT, JMS I [PRWD TEXT /?SLOTS/ JMP I [CONFIG GOOD, 0 TAD [4207 /RESTORE 7600 TO NORMAL DCA I [7600 TAD [5000 DCA I [7601 TAD (CDF CIF DCA I [SA /SET SA=00200 TAD [200 DCA I (SA+1 DCA I (JSW /SET JOB STATUS WORD=0 STA DCA I (DRECT CLL STA RTL /-3 TAD I [7612 /FUDGE FOR 12K TD8E DCA FLAG2 /SET FLAG2=0 IF PREV SYSTEM WAS 2 PAGE JMP I GOOD PACK, ISZ PROTECT /OK TO PACK IT? JMP PACKOK /YES STA DCA PROTECT /INHIBIT OTHER PACKS ALSO JMP GNAME2 PACKOK, ISZ SWIT /PACK LEFT OR RIGHT JMP RIGHT TAD CHAR AND [77 JMS I [ROTL /ROTATE 6 LEFT DCA I TEMP /STORE THE CHARACTER JMP GNAME2 RIGHT, CLA CMA /RESET FLIP FLOP DCA SWIT TAD CHAR AND [77 TAD I TEMP DCA I TEMP ISZ TEMP /POINT TO NEXT WORD JMP GNAME2 PROTECT,0 /-1 MEANS DON'T ACCEPT CHAR, IGNORE IT SWIT, 0 ACTNAM, 0 /THEY MUST BE ACTIVE CLA IAC JMS I (PRMNAM JMP I ACTNAM DOT, CLA CMA DCA SWIT TAD (-3 /NOW ALLOW ONLY A 2-CHAR EXTENSION DCA PROTECT TAD (NAME4 DCA TEMP ISZ DOTCNT /HAD WE SEEN A DOT BEFORE? JMP SYNTAX /YES JMP GNAME2 /NO DOTCNT, -1 /-1 MEANS HAVEN'T SEEN A DOT EOL, DCA CHAR JMP I GNAME GNAME, 0 /COLLECT A WORD IN NAME1-NAME4 /LEAVE DELIMITING CHAR IN 'CHAR' CDF 0 TAD [-7 /MAX 6 CHARACTERS DCA PROTECT DCA NAME1 /FIRST CLEAR OUT COLLECTION AREA DCA NAME2 DCA NAME3 DCA NAME4 CLA CMA DCA SWIT /L-R PACKING SWITCH STA DCA DOTCNT /ALLOW ONLY ONE DOT PER NAME TAD (NAME1 DCA TEMP GNAME2, GETCHR SNA /A 0 ENDS THE SEARCH JMP EOL DCA CHAR TAD CHAR TAD (-"A /GET ONLY A-Z OR 0-9 CLL TAD ("A-"Z-1 SNL CLA /IS IT A-Z? JMP PACK /YES..PACK IT AWAY TAD CHAR TAD (-"0 CLL TAD ("0-"9-1 SNL CLA JMP PACK /FOUND 0-9 JMS I [TEST /TEST FOR DELIMITING CHARS -".;DOT /ADVANCE POINTERS 0 JMP I GNAME SYNTAX, JMS I [PRWD TEXT /?SYNTAX/ JMP I [CONFIG DSKBAD, JMS I [PRWD TEXT /?DSK/ JMP I [CONFIG SRES=BEGLIN+60 /RESIDENCY TABLE SDCB=BEGLIN+100 /DCB SHND=BEGLIN+120 /SLOT ASSSIGNED? SNAME=BEGLIN+140/NAME SBUFF=BEGLIN+160/ADDRESS OF HANDLER / SYSTEM TABLES: /THOSE IN USR: /PDNT PERMANENT DEVICE NAME TABLE (SNAME) / POINTED TO BY LOCATION 10036 IN USR / CONTAIN HASH CODE OF DEVICE NAME / ADD TWO WORDS OF NAME TOGETHER AND TURN ON BIT 0 / IF SECOND WORD WAS NON-ZERO / AN ENTRY OF 0 MEANS THERE IS NO DEVICE FOR THAT ENTRY /DHIT DEVICE HANDLER INFORMATION TABLE (SHND) / POINTED TO BY LOCATION 10037 IN USR / BIT 0 =1 IF THIS IS A TWO-PAGE HANDLER / BITS 1-4 RELATIVE BLOCK LOCATION OF HANDLER ON SYSTEM DEVICE / (BLOCK SLOT). ADD 15 TO GET ACTUAL BLOCK #. / BITS 5-11 RELATIVE ENTRY POINT OF HANDLER /DHRT DEVICE HANDLER RESIDENCY TABLE (SRES) / IN LOCATIONS 17647-17665 / ACTUAL ENTRY POINT OF HANDLER / WE ONLY CARE ABOUT IT IF THE HANDLER IS RESIDENT. / OTHERWISE IT'S ZERO. / THE SYSTEM HANDLER AND ALL HANDLERS CORESIDENT WITH / IT ARE ALWAYS RESIDENT IN CORE AND HAVE THIS ENTRY NON-0. /DCWT DEVICE CONTROL WORD TABLE (SDCB) / RESIDES IN LOCATIONS 17760-17776 / BIT 0 1 IF DEVICE IS FILE STRUCTURED / BIT 1 1 IF THE DEVICE IS READ ONLY / BIT 2 1 IF THE DEVICE IS WRITE-ONLY / BITS 3-8 PHYSICAL DEVICE TYPE / BITS 9-11 DIRECTORY BLOCK # (WE SET TO 0) /PRE-ASSIGNED DEVICE TYPES /0 TELETYPE /1 HIGH SPEED PAPER TAPE READER /2 HIGH SPEED PAPER TAPE PUNCH /3 CARD READER /4 LINE PRINTER (ANY TYPE) /5 RK8 DISK /6 RF08 (1 PLATTER) /7 RF08 (2 PLATTERS) /10 RF08 (3 PLATTERS) /11 RF08 (4 PLATTERS) /12 DF32 (1 PLATTER) /13 DF32 (2 PLATTERS) /14 DF32 (3 PLATTERS) /15 DF32 (4 PLATTERS) /16 TC08 DECTAPE /17 LINCTAPE /20 TM8E MAGTAPE /21 TD8E DECTAPE (12K OR ROM) /22 BAT: /23 RK8E DISK /27 TU60 CASSETTES /30 VR12 (PDP-12 SCOPE) PAGE BOOT2A, TAD (15 DCA SLOT /START ASSIGNING AT BLOCK SLOT 16 (16-25) TAD (-17 /ALLOW 16 ACTIVE HANDLERS NOT COUNTING DSK DCA COUNT JMS I (CLRTBL /CLEAR OUT IN-CORE TABLES TAD (SHND+1 /ASSIGN SLOTS, COUNT ACTIVE HANDLERS DCA XR1 /XR1 POINTS TO SLOT TABLE (DHIT) TAD (SDCB+1 DCA XR2 /XR2 POINTS TO DCB TABLE TAD (SNAME+1 DCA XR3 /XR3 POINTS TO PERMANENT DEVICE NAME TABLE TAD (SBUFF+1 DCA XR4 /XR4 POINTS TO HANDLER BUFFER ADDRESSES TAD (SRES+1 DCA XR5 /XR5 POINTS TO RESIDENCY TABLE CLA IAC /?? DCA OLDPAG /SET 'OLDPAG' TO A RIDICULOUS VALUE INIT SLTLUP, ADVDSC /GO TO NEXT DESCRIPTOR ADVBOT /ADVANCING OVER ANY BOOTSTRAPS JMP BOOT2X /ALL DONE CREATING INTERNAL COPIES OF TABLES GET ACTIVE SMA CLA /IS IT ACTIVE? JMP INACT /NO ISZ COUNT /YES, UPDATE COUNT JMP ACTIV JMP I (TOOMANY /TOO MANY ACTIVE HANDLERS BOOT2X,/ TAD I (SNAME /SEE IF SYS WAS SPECIFIED / DCA SAMSYS /0 IF DIDN'T SPECIFY NEW SYS / TAD SAMSYS / SZA CLA / JMP CHKDSK / CDF 10 / TAD I (7760 /DIDN'T SPECIFY SYS SO USE CURRENT SYS / CDF 0 / DCA I (SDCB / TAD (7607 / DCA I (SRES /CHKDSK, TAD DSKG1 /WAS DSK SPECIFIED? / SZA CLA / JMP I (BOOT3 /YES, ALREADY SET UP / TAD I (SDCB / DCA I (SDCB+1 / TAD (7607 / DCA I (SRES+1 / DCA I (SBUFF+1 JMP I (BOOT3 CHKRES, 0 JMS I [GETPG /GET PAGE OF RESIDENCE DCA NEWPAG TAD NEWPAG TAD OLDPAG SNA CLA /SAME OR PREVIOUS PAGE? JMP I CHKRES /YES, SAME PAGE ISZ CHKRES GET /NO, A NEW PAGE, NEEDS NEW SLOT, ETC. CORES RTL /GET CORES BIT SPA CLA /IS THIS ALLOWED TO START A NEW GROUP? JMP I (TWOSYS /NO, IT MAY ONLY BE CORESIDENT WITH SOMETHING EARLIER TAD NEWPAG /YES CIA DCA OLDPAG /GOT NEW 'OLDPAG' JMP I CHKRES ACTIV, JMS CHKRES JMP SAMPG GET SYSBIT RAL SPA CLA /IS IT A 'SYS' HANDLER? JMP I (SETSY /YES JMS I (GETSLOT /NO JMS I (SETSLT /SET BLOCK SLOT DCA I XR1 TAD NEWPAG HNDLOC, DCA I XR4 /STORE AWAY ADDRESS OF HANDLER (OR 0 IF PREVIOUSLY USED) JMS I (GETDCB DCA I XR2 /SET DCB GET /HASH CODE NAME PRMNM2 DCA TEMP /SAVE 2ND WORD GET PRMNM1 TAD TEMP /ADD 2 WORDS DCA TMP1 /SAVE SUM TAD TEMP SNA CLA /WAS 2ND WORD 0? JMP NO4C /YES TAD TMP1 /NO, FORCE BIT 0 ON RAL STL RAR DCA TMP1 NO4C, TAD TMP1 /TAKE CODED NAME DCA I XR3 /SET PERMANENT NAME TABLE GET CORES RTL /GET CORESIDENT BIT SMA CLA /IS IT RESIDENT? JMP NORE /NO GET /YES ENTPT /GET RELATIVE ENTRY POINT AND [177 TAD [7600 /CORESIDENT ENTRY POINTS TO SYS MUST BE ON PAGE 7600 NORE, DCA I XR5 /SET RESIDENCY TABLE INACT, GET /BUT MAYBE IT'S 'DSK' DSKBIT RTL SNL CLA /IS IT DSK? JMP SLTLUP /NO, IT'S TO BE IGNORED JMS I (SLOTDSK /YES ASSIGN 'DSK''S LOCATION SLOT GET /GET RID OF DSK BIT DSKBIT RTL CLL RTR PUT DSKBIT JMP SLTLUP /REITERATE SAMPG, TAD SLOT /ALREADY HAVE SLOT JMS I (SETSLT DCA I XR1 JMP HNDLOC GOTEM, CORE, 0 TAD I [7777 AND [70 CLL RTR RAR SNA JMS I (RELCOR JMP I CORE PAGE / STEPS IN BOOTSTRAPPING: /1. ASSIGN DSK, IF SPECIFIED, MAKE SURE NFS [BOOT2] /2. ASSIGN SLOTS [BOOT2A] /3. GIVE ERROR IF TOO MANY ACTIVE OR TOO MANY SLOTS [BOOT2A] /4. BUILD INTERNAL COPIES OF DCB, SLOT, NAME, RES [BOOT2A] /5. ALSO BUILD HANDLER ADDRESS TABLE, CONTAINS [BOOT2A] / HANDLER ADDRESS IF NOT PREVIOUSLY WRITTEN OUT /6. COMPARE DCB'S OF NEW AND OLD SYSTEM, IF DIFF, [BOOT3] / COPY SYSTEM OVER. LEAVE NEW SYSTEM HANDLER / IN CORE /7. ASK GUY ABOUT NEW DIRECTORY [BOOT4] /8. READ IN USR, UPDATE ITS TABLES, WRITE OUT USR [BOOTC] / NAME TABLE, DHIT (SLOT, 2-PAGE,ENTPT) /9. READ IN CURRENT PAGE 7600 IMAGES [BOOT5] / SET UP AS FOLLOWS: / PG7600/L: BOOT / PG7600/H: 07600 IMAGE / BLOK66/L: 17600 IMAGE / BLOK66/U: 27600 IMAGE / THIS IS ACCOMPLISHED VIA: / PG7600_0 / BLOK66_66 / IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L /10. MOVE DCB AND RESIDENCY TABLES INTO 17600 IMAGE [BOOT6] /11. MOVE BOOTSTRAP INTO PAGE 7600 IMAGES (2 PLACES) [BOOT7] /12. WRITE OUT HANDLERS [BOOT8] /13. ZERO DIRECTORY IF REQUESTED [BOOTD] /14. PUT SYS, DATA BREAK, CORE LIM IN 07600 IMAGE [BOOTE] /15. WRITE 7600 IMAGES BACK OUT ONTO TAPE [BOOTF] / IF NEW SYS IS 1-PAGE, PG7600/L_BLOK66/L / 0_PG7600 / 66_BLOK66 /16. READ BACK PAGE 7600 IMAGES. MOVE IN FIELD 1 STUFF / EXCEPT FOR CD AREA, RESTORE TODAY'S DATE, / BRANCH TO 7600 GETSLOT,0 ISZ SLOT /USE NEXT SLOT TAD SLOT TAD (-26 SNA CLA JMP I (NOSLOT TAD SLOT JMP I GETSLOT BOOT, ISZ I (RETSW /***? CLA IAC DCA I (BD /DISABLE 'BUILD' CMD /SEE IF ARGUMENT WAS GIVEN; TREAT IT AS BOOT DEVICE, /SAVE HANDLER ADDRESS (MUST BE AN ACTIVE HANDLER) JMS I (LOCSYS /IN CASE DSK=SYS / JMS I [GETNUM / NOP / TAD SIZE / DCA BOOTDV /CHECK THAT # IS GT 7600 BOOT2, TAD DSKG1 /FIND OUT ABOUT 'DSK' SNA JMP GOTD /DSK=SYS DCA SAV1 TAD DSKG2 DCA SAV2 TAD DSKP1 DCA NAME1 TAD DSKP2 DCA NAME2 JMS I [BIGNAM /FIND IT IN TABLES GOTD, GET DCB SMA CLA /IS IT FILE-STRUCTURED? JMP I (DSKBAD /NO GET /YES DSKBIT RTL STL RTR /TURN ON BIT 1 PUT DSKBIT JMP I (BOOT2A GETDCB, 0 GET PLATNUM JMS I [ROTL AND [7 /GET # OF PLATTERS SNA IAC /0 MEANS 1 TAD [-1 /SUBTRACT 1 CLL RTL RAL /TIMES 10 DCA TMP1 GET DCB AND [7770 /MASK OFF USEFUL INFO TAD TMP1 JMP I GETDCB SLOTDSK,0 JMS I (CHKRES JMP SMPG TAD NEWPAG DCA I (SBUFF+1 JMS GETSLOT JMS SETSLT B, DCA I (SHND+1 JMS GETDCB DCA I (SDCB+1 TAD (5723 /'DSK' HASHED DCA I (SNAME+1 GET SYSBIT RTL /SYSBIT TO L, CORES BIT TO AC0 SNL SMA CLA /IS IT EITHER SYS OR CORESIDENT WITH SYS? JMP NORE2 /NO, SO IT'S NOT CORE-RESIDENT GET /YES, RESIDENT AT ALL TIMES IN 07600 ENTPT AND [177 TAD [7600 NORE2, DCA I (SRES+1 JMP I SLOTDSK SETSY, TAD NEWPAG DCA I (SBUFF / JMS SETSLT /NO BLOCK SLOT DCA I (SHND JMS GETDCB DCA I (SDCB /SET DCB TAD I (SNAME SZA CLA JMP I (TWOSYS TAD (4631 /HASH CODING FOR 'SYS' DCA I (SNAME /CHECK THAT NAME IS 'SYS' TAD [7607 DCA I (SRES /CHECK REL ENTRY PT IS 7 JMP I (INACT SMPG, TAD SLOT JMS SETSLT JMP B SETSLT, 0 SNA JMP .+3 TAD [-15 JMS I [ROTR DCA TMP1 GET / CORES / RTL / SPA SZL CLA / JMP I SETSLT /SYS &CORES HANDLERS GET 0 ENTRY (UNFORTUNATELY) GET ENTPT AND (4177 TAD TMP1 JMP I SETSLT PAGE USRBLK=13 /BLOCK OF USR ON SYSTEM DEVICE USRNPT=36 /POINTS TO USR PTR TO PERMANENT DEVICE NAME TABLE USRHPT=37 /POINTS TO USR PTR TO DEVICE HANDLER INFORMATION TABLE BOOTC, TAD [200 /READ FIRST BLOCK OF USR JMS I [SYS BUFFER /INTO BUFFER USRBLK TAD I [BUFFER+USRNPT /GET POINTER TO NAME TABLE TAD [BUFFER-400 /ADD IN OFFSET FOR RELOCATION DCA T1AD /ASSUME BOTH TABLES OCCUR IN THE SECOND TAD I [BUFFER+USRHPT /BLOCK OF THE USR TAD [BUFFER-400 DCA T2AD /GET POINTER TO DHIT TAD [400 /READ BLOCKS 2 AND 3 OF USR JMS I [SYS /INTO BUFFER,BINARY BUFFER USRBLK+1 TAD [-17 JMS I [MOVE /MOVE IN PERMANENT DEVICE NAME TABLE CDF 0 SNAME CDF 0 T1AD, HLT / TAD SAMSYS /WAS SYS SPECIFIED? / SZA CLA / JMP CHKD2 /YES / TAD I T2AD /NO, USE CURRENT SYS INFO / DCA I (SHND /CHKD2, TAD DSKG1 / SZA CLA /WAS DSK SPECIFIED? / JMP MVSHND /YES / TAD I T2AD /MAKE SAME AS SYS / DCA I (SHND+1 MVSHND, TAD [-17 /NOW PUT IN SLOT WORDS (DHIT) JMS I [MOVE CDF 0 SHND CDF 0 TMP2, T2AD, HLT TAD [4400 /RE-WRITE USR JMS I [SYS L5400, BUFFER USRBLK+1 JMP I [BOOT5 IFNZRO BUFFER-5400 <ERRRR,XX> BOOTD, TAD DRECT /WANT NEW DIRECTORY? SNACLA, SNA CLA JMP BOOTE TAD L5400 /YEP. WRITE ONE JMS I [SYS DPROPR 1 BOOTE, TAD NEWCOR CLL RAL RTL TAD SAVHID /V3D SET NEW H.O. DATE WORD DCA I [7777 /SET UP NEW CORE LIMIT TAD SYSLOC /MOVE IN FRESH COPY OF SYS HANDLER TAD [7 DCA SYSL2 TAD [7607-7743-1 JMS I [MOVE CDF 10 SYSL2, HLT CDF 0 7607 TAD [-200 /PUT SYS HANDLER INTO REC 0 BUFF. ??? JMS I [MOVE CDF 0 7600 CDF 0 PG7600+200 /RESIDENT F0 CODE JMS I (WRITCC /WRITE CCB AND DATA BREAK FILLERS TAD [200 TAD SYSLOC /MOVE IN COPY OF 27600 AGAIN DCA SYSL3 TAD [-200 JMS I [MOVE CDF 10 SYSL3, HLT CDF 10 BLOK66+200 JMP I (BOOTF DRECT, -1 /1 MEANS WRITE A ZERO DIRECTORY /0 MEANS DON'T TOUCH DIRECTORY /-1 MEANS ASK GUY FOR OPTION /SEE IF NEW SYSTEM HAS SAME DCB AS CURRENT SYSTEM /THIS MAY WELL CAUSE EXTRA I/O WHEN GOING FROM RF08=K TO RF08=M BOOT3, CDF 10 TAD I (DATEWD DCA SAVDAT /SAVE TODAY'S DATE FOR FUTURE REFERENCE TAD I (DCBTBL /GET DCB OF CURRENT SYSTEM CDF 0 AND [7770 DCA TMP2 JMS I (PATCH /V3D TAD SAVLOC /DON'T COPY IF DID 'BUILD' SNA CLA /WAS THE 'BU' COMMAND USED? TAD [-10 /NO, USE 'SZA CLA' TAD SNACLA /YES, USE 'SNA CLA' DCA I (BOOTQ JMS SETUPSYS TAD SYSDCB CIA TAD TMP2 JMP I (BOOTQ /NOTE: THIS PROCEDURE DOESN'T COPY BOOTSTRAP IF NEW DEV=OLD DEV. / THEREFORE YOU CAN'T CHANGE BOOTSTRAPS / CHECK ON AFFECT FOR TD8E/ROM INTERACTION SETUPSYS,0 DCA SAVLOC TAD SAVLOC DCA I (SAVLC JMS I (LOCSYS JMS I [GETPG /GET PAGE OF SYS HANDLER DCA SYSLOC /PAGE OF START OF NEW SYSTEM HANDLER JMS I (GETDCB DCA SYSDCB JMS I (GETLEN GET TWOPAG DCA I (SYSSIZ TAD I (SYSSIZ SMA CLA /IS IT 1- OR 2-PAGES? JMP ONEPG /GUESS WHAT THIS MEANS [HINT LOOK AT LABEL] STA TAD I (AMTCOR SNA CLA JMP I (NOTNUF /WE CAN'T RUN IN 8 K ONEPG, TAD [-400 JMS I [MOVE CDF 10 SYSLOC, HLT /MOVE SYSTEM HANDLER CDF 10 SAVLOC, 0 /TO 10000-10377 JMP I SETUPSYS PAGE FIRST, 0 /SUBROUTINE FOR LDABS IN FIELD 2 TAD KLUD DCA NEWLIM CIF CDF 20 JMP I FIRST /0: LOADING OS/8 /-2: LOADING HEADER OF HANDLER /-1: LOADING HANDLER HND, CDF 20 /DATA FIELD 2 TAD I (ORIGIN DCA KLUD TAD TABLMT CIF CDF 20 /BACK TO FIELD 2 JMP I (ORI KLUD, 0 NEWLIM, 0 /NEW END OF DESCRIPTORS OK, STA /NOW USE ORIGIN TO TELL US HOW BIG A CDF 20 TAD I (ORIGIN /HANDLER WAS LOADED CDF 00 /BACK TO OUR FIELD AND [7600 TAD [200 /REMEMBER THAT ORIGIN IS ONE GREATER DCA HNDPTR /THAN ACTUAL LAST LOCATION. /BETTER TO USE 2-PAGE BIT TAD NEWLIM DCA TABLMT /SET NEW TABLE TOP DCA I TABLMT /NEED 0 AT END JMS I [COMMA JMP I (LOAD NMER, CIF 10 /V3C JMS I [200 /DISMISS USR FROM CORE 11 JMP I (NAMERR IOPEN, 0 /PREPARE TO READ INPUT CLA CMA DCA I (CHCNT TAD I (JMPX /RESTORE SWITCH DCA I (JMPGET TAD I (FILPTR /RESULTS OF LOOKUP DCA I (RECNO DCA I (REOF TAD (CDF 0 CDF 20 /OFF TO FIELD 2 DCA I (XFIELD /SETUP LDABS FOR FIELD 0 CDF 00 /BACK TO FIELD 0 JMP I IOPEN PAGE /BLOCK 0 OF DEVICE CONTAINS INITIAL IMAGE /OF 17600 FOLLOWED BY 07600 /17600-17646 CD AREA INITIALLY CONTAINS BOOTSTRAP /17647-17665 RESIDENCY TABLE /17666 DATE /17667-17677 PART OF OS/8 KBM /17700-17740 PART OF OS/8 USR /17741-17757 USER DEVICE NAME TABLE/ODT /17760-17776 CONTROL WORD TABLE (DCB) /17777 UNUSED /07600-07606 PART OF OS/8 CODE /07607-07743 SYSTEM HANDLER /07744-07745 STARTING ADDRESS /07746 JOB STATUS WORD (JSW) /07747 MUST BE 0 (SOFSET) /07750-07755 DATA BREAK LOCATIONS RESERVED FOR HARDWARE /07756-07775 KBM AND ODT /07776 MUST BE 0 (SBLOCK) /07777 SOFTWARE CORE SIZE, BATCH FLAGS /IF SYSTEM HANDLER IS TWO PAGES LONG, THEN WE HAVE INSTEAD: /BLOCK 66 (LOWER) CONTAINS 17600 IMAGE /BLOCK 66 (UPPER) CONTAINS 27600 IMAGE (MUST END WITH 4 ZERO'S) /BLOCK 0 (LOWER) CONTAINS BOOTSTRAP /BLOCK 0 (UPPER) CONTAINS 07600 IMAGE *4000 DSCADV, 0 /ADVANCE TO NEXT DESCRIPTOR /RETURN 2 MEANS NO MORE /RETURN 1 MEANS NOW AT BOOTSTRAP BLOCK /RETURN 3 OTHERWISE TAD DSCPTR TAD [HDRSIZ DCA DSCPTR JMS I (SKPCRD /SKIP A POSSIBLE GROUP COUNT TAD I DSCPTR CLL TAD [200 SZL CLA JMP I DSCADV /TAKE RETURN1 UPON REACHING BOOTSTRAP RECORD ISZ DSCADV TAD I DSCPTR SZA CLA ISZ DSCADV /TAKE RETURN 2 IF ADVANCED TO END JMP I DSCADV /RETURN 1 MEANS NO MORE DESCRIPTORS BOTADV, 0 TAD I DSCPTR CIA IAC /COUNT IS ONE MORE TAD DSCPTR DCA DSCPTR /POINT TO BEGIN OF NEXT DESCRIPTOR JMS I (SKPCRD TAD I DSCPTR CLL TAD [200 SZL CLA JMP BOTADV+1 /WIERD CASE OF CONSECUTIVE BOOTSTRAPS TAD I DSCPTR SZA CLA ISZ BOTADV /TAKE RETURN1 IF ADVANCED TO END JMP I BOTADV /WIERD CASES CAN OCCUR IF GUY DELETES ALL ENTRY POINTS IN A GROUP SEPARATELY /DESCRIPTOR ENTRIES: /FIRST WORD: / 0 MEANS END OF TABLE / -1 TO -20 MEANS GROUP COUNT (NOT NECESSARILY ACCURATE) / -21 TO -400 APPROX MEANS BOOTSTRAP RECORD COUNT / OTHER MEANS DESCRIPTOR SYSCPY, 0 /COPY OS/8 SYSTEM STA TAD I (AMTCOR SZA CLA TAD [10 /GT 8K DCA CORBIT TAD CORBIT SZA CLA JMP COP2 JMS I [SYSWP /SWAP IN NEW SYS HANDLER TAD (7410 JMS I [SYS /SAVE PART OF BUILD TO MAKE A BIG BUFFER 400 /SAVE 400- 27 /SAVE IN BLOCK 27 JMS I [SYSWP /GET BACK ORIGINAL HANDLER COP2, TAD [4210 JMS COPY /COPY BLOCK 0 0 TAD (5610 JMS COPY /COPY 7-15 7 TAD [4210 JMS COPY /COPY 26 26 TAD (7410 JMS COPY /COPY 51-66 51 TAD [4210 JMS COPY /COPY 67 67 TAD CORBIT SZA CLA JMP COP3 JMS I [SYSWP /GET BACK NEW HANDLER FOR A MOMENT TAD (3410 /RESTORE CORE WE SAVED JMS I [SYS 400 27 JMS I [SYSWP /RESTORE ORIGINAL SYS HANDLER COP3, JMP I SYSCPY COPY, 0 TAD CORBIT DCA TMP1 TAD I COPY DCA COPREC /ARG 1 CONTAINS FIRST BLOCK TO COPY TAD COPREC DCA CPREC2 /MAKE TWO COPIES STL RAR /CONVERT 'WRITE' TO READ TAD TMP1 JMS I [SYS /READ FROM ORIGINAL DEVICE 400 COPREC, HLT JMS I [SYSWP TAD TMP1 JMS I [SYS /WRITE ON NEW DEVICE 400 CPREC2, HLT JMS I [SYSWP /LEAVE WITH ORIGINAL SYSTEM HANDLER STILL IN SYSTEM JMP I COPY /FALL THROUGH RECORD NUMBER CORBIT, GETLEN, 0 GET /GET LENGTH OF DEVICE PLATNUM JMS I [ROTL /GET NUMBER OF PLATTERS AND [7 SNA IAC /0 MEANS 1 CIA DCA COUNT GET DEVSIZ DCA TMP1 SIZLUP, TAD TMP1 SNA STA /4096 BECOMES 4095 ISZ COUNT JMP SIZLUP CIA TAD [70 /LEAVE ROOM FOR OS/8 DCA DLENGTH JMP I GETLEN DPROPR, -1 /INITIAL EMPTY DIRECTORY MFREE 0 0 -1 0 /1 EMPTY FILE DLENGT, 0 BADARG, JMS I [PRWD TEXT /?ARG/ JMP I [CONFIG PAGE /WANT TO COPY /SYS 0 /KBM 7-12 /USR 13-15 /ENTER 26 /CD 51-53 /SAVE,DATE 54-55 /ERR 56 /CHAIN 57 /ODT 60-63 /CCL 64,65,67 /SYS 66 /EXTRA (DON'T WANT TO COPY): /HANDLERS 16-25 /SCRATCH 27-50 /NEW ALGORITHM: /SET FIELD 2 IF 12K OR MORE AND SKIP *'ED ITEMS /1. MOVE NEW SYS HANDLER TO 0,200 /2.* SAVE 34 PAGES STARTING AT 10400 IN BLOCK 27 OF NEW DEVICE /3. COPY BLOCKS 7-15 /4. COPY BLOCK 26 /5. COPY BLOCKS 51-66 /6. COPY BLOCK 67 /7.* RESTORE 34 PAGES /THE FOLLOWING ROUTINES AND VARIABLES MUST BE ABOVE THE LOCATIONS /IN WHICH OS/8 AND CD LOAD INTO, BECAUSE THEY ARE CALLED BY LDABS. /FURTHERMORE, NONE OF THESE ROUTINES MAY USE PAGE 0 LITERALS /OR MAY USE ANY PAGE 0 TEMPORARIES, EXCEPT THAT SOME MAY USE /PAGE ZERO TEMPORARIES IF THE STORE INTO THEM FIRST /(EXCEPT THOSE COMMENTED OTHERWISE, WHICH MUST PRESERVE /THE NEW PAGE 0 AT ALL COSTS, UNTIL IT IS WRITTEN OUT /LDABS /ICHAR /BADINP /OVER /ASSEMB /CTCTST /PRWD /CTRLC /OVROUT /ROTL /PRINTE /TTYOUT /ROTR /PWORD /ECHOFL /LINEUP /CRLF /PRNT /RUBFLG /MOVE /SYSWP /AMTCOR SYDCB=7760 /LOCATION OF SYS,DSK DCB WORDS BOOT5, JMS I (RECZRO BOOT6, TAD [-17 JMS I [MOVE /PUT RESIDENT FIELD 1 TABLES INTO CDF 0 SDCB /FIXED SPOTS CDF 10 BLOK66+160 TAD [-17 JMS I [MOVE CDF 0 SRES CDF 10 BLOK66+47 /COULD SET USER DEVICE NAMES HERE IF DESIRED BOOT7, JMS I (LOCSYS / TAD SAMSYS / SZA CLA /SAME SYSTEM? / JMP BOOT8 /YES BLOOK, ADVDSC /SEARCH FOR BOOTSTRAP JMP FNDBOT /FOUND BOOTSTRAP RECORD AMONGST DESCRIPTORS HLT /IT WASN'T THERE! JMP BLOOK /KEEP LOOKING FNDBOT, TAD DSCPTR IAC /POINT TO BOOTSTRAP DCA FROMBO TAD I DSCPTR /LENGTH OF BOOTSTRAP /CHECK THAT'S IT'S LE 47 LOCS IF 1-PAGE SYSTEM JMS I [MOVE CDF 0 FROMBO, HLT CDF 0 PG7600 TAD [-47 /MOVE FIRST 47 LOCS INTO CD AREA IN 17600 IMAGE JMS I [MOVE CDF 0 PG7600 CDF 10 BLOK66 BOOT8, TAD (-16 DCA COUNT TAD (SBUFF DCA XR1 TAD (SHND DCA XR2 DVLOOP, TAD I XR1 SNA JMP NOHN DCA DVBUF /LOCATION OF HANDLER TAD I XR2 JMS I [ROTL AND [17 SNA JMP CN /NO BLOCK SLOT TAD L15 /CONVERT TO ACTUAL BLOCK # DCA DVREC TAD [4210 JMS I [SYS DVBUF, HLT DVREC, HLT CN, ISZ COUNT JMP DVLOOP JMP I (BOOTD NOHN, ISZ XR2 JMP CN SYSSIZ, 0 /MINUS MEANS 2-PAGE SYS HANDLER CTRLC, KCC /CLEAR ^C FLAG TAD I (SWAPER /DO WE HAVE TO SWITCH? SZA CLA JMS I (SYSWP /YES. INSERT OLD HANDLER JMP END /GO CHECK BATCH BEFORE RETURNING KORE, JMS I [GETNUM L15, 15 /NOTHING MEANS 0 TAD SIZE AND [7770 SZA CLA JMP I [BADARG /MUST BE BETWEEN 0 AND 7 JMS I (RELCOR /FIND REAL AMOUNT OF CORE CMA TAD SIZE SMA CLA JMP I (NOTNUF /MUST BE .LE. REAL AMT OF CORE TAD CHAR SZA CLA JMP I [SYNTAX TAD SIZE DCA NEWCOR JMP I [CONFIG / IF NEW SYS IS 1-PAGE, PG7600/L_BLOK66/L / 0_PG7600 / 66_BLOK66 BOOTF, TAD SYSSIZ SMA CLA /IS NEW SYS TWO PAGES? TAD [-200 /NO JMS I [MOVE /YES, NULL MOVE CDF 10 BLOK66 CDF 0 PG7600 TAD [4200 JMS I [SYS PG7600 0 TAD [4210 JMS I [SYS BLOK66 66 BOOTG, NOP / JMS I (RECZRO /SIMULATE BOOTSTRAP TAD [-131 /MOVE UP FIELD 1 CODE JMS I [MOVE CDF 10 BLOK66+47 CDF 10 7600+47 TAD SAVDAT CDF 10 DCA I (DATEWD CDF 0 JMS I [PRWD TEXT /SYS BUILT/ /MUST DO SOME CLEAN UP IF BATCH IS RUNNING /ALL OVERLAYED CODE MUST BE RESET IN CASE USER WANTS /TO REUSE THIS COPY OF BUILD. END, JMS I BATT /JUMP TO BATCH TEST ROUTINE FOR CLEAN UP JMP I [7600 /OTHERWISE GO HOME WITH NEW SYSTEM /THIS IS FROM BATCH PAGE /MOVE MOVES CORE AROUND (CALLABLE FROM ANY FIELD) / TAD (-# OF LOCS TO MOVE / JMS MOVE / CDF FROM FIELD / FROM BUFFER LOCATION START / CDF 'TO' FILED / TO BUFFER /MUSTN'T DESTROY OS/8 LOCS, NO PAGE 0 TEMPS! MOVE, 0 DCA MVCT RDF TAD (CIF CDF DCA MOVRET TAD I MOVE /GET CDF FROM-FLD DCA MVCDF2 ISZ MOVE /POINT TO FROM-BUF TAD I MOVE /GET LOC TO MOVE DCA MVTM1 ISZ MOVE /POINT TO TO-CDF TAD I MOVE DCA MVDF /GET CDF TO FIELD OF DESTINATION ISZ MOVE /POINT TO TARGET AREA TAD I MOVE DCA MVTM2 ISZ MOVE /POINT TO RETURN TAD MVCT SNA CLA JMP MOVRET /NOTHING TO MOVE MVCDF2, CDF 0 /GETS ALTERED TO PICK UP F1 TAD I MVTM1 MVDF, HLT DCA I MVTM2 ISZ MVTM1 /BUMP POINTERS TO AREAS ISZ MVTM2 MV20, 20 ISZ MVCT JMP MVCDF2 MOVRET, HLT /RETURN TO CALLING FIELD JMP I MOVE CTCTST, 0 TAD MV7600 /ALLOW FOR PARITY KRS TAD (-7603 SNA CLA KSF JMP I CTCTST JMP I (CTRLC MVCT, 0 ASSEMB, 0 /ASSEMBLE TWO 6 BIT WORDS CDF 20 TAD I LWD1 JMS I PROTL TAD I LWD2 CDF 00 JMP I ASSEMB LWD1, WD1 LWD2, WD2 PROTL, ROTL BOOT4, TAD I (DRECT SMA CLA JMP I (BOOTC /HE'S SPECIFIED ABOUT DIRECTORY ZERO JMS I [PRWD /YES, NO NEED TO COPY SYSTEM TEXT /WRITE ZERO DIRECT?/ TAD [-10 /DON'T WANT TO DESTROY PRECIOUS TABLES JMS I [GTEXT /GET REPLY JMP BOOT4 JMS I [GNAME TAD NAME1 AND [7700 TAD (-3100 SNA CLA CLA IAC /Y DCA I (DRECT /NO; COULD HAVE SAVED LOCATION BUT I FEEL SAFER THIS WAY JMP I (BOOTC MVTM1, ROTL, 0 CLL RTL RTL RTL JMP I ROTL MVTM2, ROTR, 0 CLL RTR RTR RTR JMP I ROTR TTYOUT, 0 /YOU GUESSED IT DCA TM TAD ECHOFL SZA CLA /ARE WE ECHOING? JMP I TTYOUT /NO TAD TM /YES TLS TSF JMP .-1 MV7600, 7600 /CLA JMS I (CTCTST /TEST FOR ^C. JMP I TTYOUT TM, SKPCRD, 0 TAD I DSCPTR CLL TAD MV20 /A GROUP COUNT MUST BE IN THE RANGE -1 TO -20 SNL CLA JMP I SKPCRD ISZ DSCPTR /IT'S A DARN GROUP COUNT, GO PAST IT JMP SKPCRD+1 /WIERD CASE OF CONSECUTIVE GROUP COUNTS ECHOFL, 0 /1 MEANS NOT ECHOING, SAW ^O PATCH, 0 TAD I [7777 /V3D AND L600 DCA SAVHID /SAVE HIGH ORDER DATE BITS JMP I PATCH PAGE PRNAME, 0 /ROUTINE TO PRINT NAME1-NAME4 TAD (NAME1 DCA TEMP CLL STA RTL /-3 DCA COUNT PRNM2, TAD I TEMP JMS PRINTE /TYPE OUT CHARS ISZ TEMP ISZ COUNT /EXHAUSTED ALL? JMP PRNM2 TAD I TEMP SNA CLA JMP I PRNAME /NO . IF NO EXTENSION TAD (". /PRINT '.' JMS I (TTYOUT TAD I TEMP JMS PRINTE JMP I PRNAME PRINTE, 0 DCA CHTMP2 TAD CHTMP2 /EXTRACT LEFT HAND SIDE JMS I (ROTR JMS PWORD TAD CHTMP2 JMS PWORD JMP I PRINTE PWORD, 0 AND (77 SNA /IF NULL, GET OUT JMP NULL DCA PRTM TAD (200 KRS TAD (-217 /^O SNA CLA /STOP ECHOING? KSF /MAYBE SKP /NO JMP CTO /YES TAD PRTM TAD (240 AND (77 PRSPAC, TAD (240 JMS I (TTYOUT JMP I PWORD NULL, TAD LINEUP SNA CLA /PRINT SPACE? JMP I PRINTE /NO JMP PRSPAC /YES PRWD, 0 CLA PRWD2, TAD I PRWD JMS PRINTE TAD I PRWD ISZ PRWD AND (77 SZA CLA JMP PRWD2 JMP I PRWD /LEAVE IF LAST WORD ENDED WITH 00 CHTMP2, 0 CTO, KCC TAD ("^ JMS I (TTYOUT TAD ("O JMS I (TTYOUT JMS CRLF CLA IAC DCA I (ECHOFL JMP I PWORD LINEUP, 0 /NON-ZERO MEANS PRINT NULLS AS SPACES OVER, JMS I (ASSEMB /EXTENSION OF LDABS. CIA CDF 20 /OFF TO FIELD 2 TAD I LCKSUM /CHECKSUM OK? CDF 00 /BACK TO OUR FIELD SZA CLA JMP BADINP /SOORY ABOUT THAT CLA IAC JMP OVROUT /SKIP ERROR EXIT BADINP, JMS PRWD TEXT /?BAD INPUT/ JMS CRLF OVROUT, CDF 20 TAD I (LDABS CDF 00 DCA OTEMP JMP I OTEMP OTEMP, 0 LCKSUM, CKSUM PRTM, 0 CRLF, 0 TAD (215 DCA NAME1 JMS PRNT TAD (212 JMS I (TTYOUT JMP I CRLF PRNT, 0 /CHARACTER PRINT ROUTINE TAD ("\ /IF NOT RUBOUT, AND IF RUBOUT WAS ISZ RUBFLG /LAST, ECHO \. SKP CLA JMS I (TTYOUT TAD NAME1 JMS I (TTYOUT JMP I PRNT RUBFLG, 0 /RUBOUT FLAG PAGE /ASSUMES NEW PROPOSED SYSTEM HANDLER IS IN 10000-10377 /CAN'T DESTROY OS/8, IE. CAN'T USE PG 0 TEMPS SYSWP, 0 /ROUTINE TO MOVE SYS HANDLER AROUND ISZ SWAPER /DIDDLE SWAP INDICATOR CLA CMA /-1 MEANS NEW HANDLER IS IN DCA SWAPER STA TAD AMTCOR SNA CLA /DO WE HAVE 8K? JMP SWAPLW /YES, DON'T SWAP WITH FIELD 2 TAD L7600 /NO, CAN'T HURT TO SWAP FIELD 2 DCA OUT TAD SAVLC TAD P200 DCA IN TAD (4-200 DCA STEMP /SWAP ENTIRE PAGE (EXCEPT LAST 4 LOCATIONS) SWAP3, CDF 10 /SWAP 27600 & 2ND PAGE OF HANDLER TAD I IN DCA SYSQ CDF 20 TAD I OUT CDF 10 DCA I IN TAD SYSQ CDF 20 DCA I OUT ISZ IN L7400, 7400 /NOP ISZ OUT L7600, 7600 ISZ STEMP JMP SWAP3 SWAPLW, CDF 0 TAD (7607 DCA OUT /7607 ALWAYS TARGET DESTINATION TAD SAVLC TAD (7 DCA IN TAD (7607-7743-1/ONLY 7607-7743 GETS MOVED DCA STEMP SWAP2, CDF 10 TAD I IN DCA SYSQ /TEMP STORE CDF 0 TAD I OUT CDF 10 DCA I IN TAD SYSQ CDF 0 DCA I OUT ISZ IN ISZ OUT ISZ STEMP JMP SWAP2 DCA I (SOFSET /V3C JMP I SYSWP AMTCOR, 1 /HIGHEST CORE BANK SAVLC, 0 /MUST BE ABOVE 3577 CHTMP, IN, 0 /POINTS TO HANDLER AREA AT ONE NAMED SYS OUT, 0 /POINTS TO 7607 HANDLER SWAPER, 0 /-1 MEANS NEW HANDLER IN /MUST BE ABOVE OS/8, NO PAGE 0 LITERALS STEMP, ICHAR, 0 JMS I (CTCTST ISZ JMPGET /POINT TO CORRECT CHAR ISZ CHCNT /NEED WE READ? JMPX, JMP JMPGET /NOT YET TAD REOF /YES. DID LAST YIELD EOF? SZA CLA JMP I (BADINP /SOMETHING IS WRONG. RDIN, JMS I DVICE P200, 0200 /READ INTO FIELD 0 BINBUF, BINARY RECNO, 0 JMP RERROR /READ ERROR RECNO2, ISZ RECNO /POINT TO NEXT RECORD TAD (-601 DCA CHCNT /NEW CHARACTER COUNT TAD BINBUF DCA CHPTR TAD JMPX DCA JMPGET /RESET JUMP SWITCH JMP ICHAR+1 SYSQ, JMPGET, JMP . /IF WE GET CAUGHT HERE, WE KNOW IT JMP CHAR1 /ASSEMBLE FIRST CHAR JMP CHAR2 /SECOND CHAR TAD JMPX /THIRD CHAR HERE DCA JMPGET /RESET SWITCH TAD I CHPTR AND L7400 CLL RTR RTR TAD CHTMP /ADD IN THE LAST TEMP STORE RTR RTR ISZ CHPTR /TO NEXT CHAR JMP GCHCOM CHAR2, TAD I CHPTR AND L7400 DCA CHTMP /SAVE FOR THIRD CHAR ISZ CHPTR CHAR1, TAD I CHPTR GCHCOM, AND (377 ISZ ICHAR /PASS UP ERROR RET JMP TO20 /RETURN RERROR, SPA CLA /FATAL, OR EOF? JMP IOERR /FATAL ISZ REOF /END OF FILE JMP RECNO2 /BACK TO MAINSTREAM IOERR, JMS I (PRWD TEXT \?I/O\ TO20, CIF CDF 20 /BACK TO FIELD 2 JMP I ICHAR REOF, 0 CHCNT, 0 CHPTR, 0 DVICE, 0 RETSW, 0 /0 MEANS RAN FROM 0S/8, 1 MEANS RNA STANDALONE PAGE LNLNGT=103 BEGLIN, ZBLOCK LNLNGT SBLOCK=7776 /?? /CTCFAK, .+1 /^C MUST NOT RETURN TO ANY SYSTEM. / JMP I CTCFAK /CTCFAK MARKS OUR PLACE DURING / /SYSGEN, AND ^C WILL RETURN TO THAT PLACE. /*** THIS STUFF GOES AWAY ON A BOOT BUILD, CDF 10 TAD I [7200 /HAS SPECIAL CODE BEEN OVERLAID BY HANDLERS? CDF 0 TAD [-1234 SZA CLA JMP I (NOROOM /YES, TOO BAD / TAD (5601 / DCA I [7600 / TAD (CTCFAK+1 / DCA I (7601 TAD [6600 /SAVE OLD SYSTEM HANDLER IN 16600 JMS I (SETUPSYS / JMS CTCFAK RDOS8, JMS I [PRWD TEXT \LOAD OS/8: \ JMS RD JMP RDOS8 CIF CDF 10 JMS I (WROS8 JMS I (SYSWP / JMS CTCFAK RDCD, JMS I [CRLF JMS I [PRWD TEXT /LOAD CD: / DCA DVER JMS RD JMP RDCD CIF CDF 10 JMS I (WRCD TAD I (RETSW SNA CLA /NOT IF FROM SCRATCH JMS I (SYSWP /GET OLD HANDLER IF ANY BACK IN JMP I [CONFIG RD, 0 TAD [-40 JMS I [GTEXT JMP I RD JMS I (SETUP DVER, JMP I (NODEV JMS I (SYSWP /PUT IN NEW HANDLER CIF CDF 10 JMS I (SAVE JMS I (SYSWP CIF CDF 20 /OFF TO PAGE 2 JMS I [LDABS /PAST HERE PAGE 0 IS GONE JMP I RD JMS I (SYSWP ISZ RD JMP I RD PAGE *6400 DSCTAB, ZBLOCK 1200 /RELIC: *7600 0 /ONLY LOADED FROM PAPER TAPE. *7777 0 /SET SOFTWARE CORE SIZE TO 'UNKNOWN' FIELD 1 *0 0 /FORCE ABSLDR TO LOAD THIS PAGE *400 / ZBLOCK 5400 0 *6600 RELOC BINARY BINPUN, CDF 10 CLA TAD (-400 CIF 0 JMS I (MOVE CDF 10 6600 CDF 0 BINARY /MOVE ONESELF DOWN CIF CDF 0 JMP I (LDR /EXECUTE IN FIELD 0 LDR, JMS LEDER /PUNCH 72 FRAMES OF 200 DCA CHECK /0 CHECKSUM TAD (102 JMS CKSUMM JMS PNCH STARTB, JMS I (CRLF TAD ("* JMS I (TTYOUT TAD (-100 JMS I (GTEXT JMP STARTB JMS I (GETNUM JMP I (OVERB TAD SIZE AND (7770 SZA CLA JMP STARTB TAD SIZE CLL RTL RAL DCA FLD JMS I (GETNUM /GET LOWER LIMIT JMP STARTB TAD SIZE DCA LIM1 JMS I (GETNUM /GET UPPER LIMIT JMP STARTB TAD SIZE DCA LIM2 TAD LIM2 CMA TAD LIM1 DCA COUNT2 TAD FLD TAD (300 JMS PNCH TAD FLD TAD (CDF 0 DCA BUFLD TAD LIM1 JMS I (ROTR AND (77 TAD (100 JMS CKSUMM TAD LIM1 AND (77 JMS CKSUMM BUFLD, HLT TAD I LIM1 JMS I (ROTR AND (77 JMS CKSUMM TAD I LIM1 AND (77 JMS CKSUMM ISZ LIM1 ISZ COUNT2 JMP BUFLD CIF CDF 0 JMP STARTB LEDER, 0 /PUNCH LEADER/TRAILER TAD (-200 DCA COUNT2 TAD (200 JMS PNCH ISZ COUNT2 JMP .-3 JMP I LEDER PNCH, 0 PLS PSF JMP .-1 CLA JMP I PNCH FLD, 0 LIM1, 0 LIM2, 0 COUNT2, 0 CHECK, 0 CKSUMM, 0 DCA CK1 TAD CK1 TAD CHECK DCA CHECK TAD CK1 JMS PNCH JMP I CKSUMM CK1, 0 PAGE OVERB, TAD Q300 JMS I QPNCH /FIELD 0 TAD Q176 JMS I QCKSUM JMS I QCKSUM /*7600 TAD Q74 JMS I QCKSUM STL CLA RTL JMS I QCKSUM /HALT TAD Q177 TAD Q77 JMS I QCKSUM /*7777 JMS I QCKSUM JMS I QCKSUM /*0000 TAD Q102 JMS I QCKSUM JMS I QCKSUM TAD I QCHECK JMS I QROTR AND Q77 JMS I QPNCH TAD I QCHECK AND Q77 JMS I QPNCH JMS I QLEDER HLT JMP .-1 /ALL DONE Q300, 300 QPNCH, PNCH Q176, 176 QCKSUM, CKSUMM Q74, 74 Q177, 177 Q77, 77 Q102, 102 QCHECK, CHECK QROTR, ROTR QLEDER, LEDER PAGE RELOC DIRLOC=1400 /FROM OS/8 ASSEMBLY READ=JMS I (7607 WRITE=READ MFREE=70 ERR=JMS I (WRERR *7200 1234 /MAGIC NUMBER WHICH IF NOT HERE, MEANS HANDLERS OVERLAID WROS8, 0 CIF 0 TAD Z7600 JMS I (MOVE /SAVE CURRENT 7600 CDF 0 7600 CDF 0 7000 /IN 07000 TAD (-7 /MOVE 6600 TO 7600 CIF 0 JMS I (MOVE CDF 0 6600 CDF 0 7600 TAD (-34 /FINISH MOVING FIELD 0 CIF 0 JMS I (MOVE CDF 0 6744 CDF 0 7744 CDF 0 TAD (6 /V3D DEV EXT LENGTH OF ABSLDR TAD I (DLENGTH /FILL IN INITIAL LENGTH CDF 10 DCA I (DIRLOC+14 /OS8 HAS INITIAL DIRECTORY CIF 0;WRITE;4200;7400;0;ERR /INITIAL REC.0 CIF 0;WRITE;4200;7400;66;ERR /ALSO WRITE RECORD 66 CIF 0;WRITE;4210;DIRLOC;1;ERR /INITIAL DIRECTORY CIF 0;WRITE;5000;0;7;ERR /KBM CIF 0;WRITE;4610;0;13;ERR /USR CIF CDF 20 /OFF IN FIELD 2 JMP I (BAK WHER, CDF 0 /RETURN FROM RELOCATED ROUTINES. TAD I (RETSW CDF 10 SNA CLA /SCRATCH BUILD? JMP I (RES76 /NO TAD Z7600 /YES /MOVE 17600 UP THERE CIF 0 JMS I (MOVE CDF 0 7400 CDF 10 Z7600, 7600 JMS I (RESTORE CIF CDF 0 JMP I WROS8 /RELATIONSHIP BEWTWEEN OS/8 CORE IMAGE AND BLOCKS ON SYSTEM DEVICE: /ITEM CORE LOC BLOCKS /KBM 0000-1777 7-12 /OVERLAYS 2000-3577 54-57 /INIT DIR DIRLOC- 1 /ABSLDR CCB LDRCTL- 70 /INIT BLOCK 0 7400-7777 0 /USR 10000-11377 13-15 /ABSLDR 12000-14377 71-75 /ENTER 13400-13577 26 /EXT MEM SAVE & ODT 64 /SYS 06600-06606 PART OF 07600 /SYS 06744-06777 " WRCD, 0 CIF 0;WRITE;4600;0;51;ERR /CD CIF 0;WRITE;5011;0;60;ERR /ODT /THE NEXT ROUTINE IS TO FINISH LOADING BLOCK 64 OF THE /SYSTEM DEVICE THAT HAD BEEN RESERVED. THE FIRST PART /WAS WRITTEN WITH OS8 AND NOW THE OTHER PART MUST BE /WRITTEN ON THAT SAME BLOCK FROM CD. CIF 0;READ;210;0;64;ERR /GET PART OF ODT WRITTEN /MOVE LOCATIONS 11600-11663 TO 10000-10063 CIF 0 TAD (-64 JMS I (MOVE CDF 10 1600 CDF 10 0000 CIF 0;WRITE;4210;0;64;ERR /END OF ROUTINE TO LOAD BLOCK 64 JMS I (RESTORE JMS I (CASIT CIF CDF 0 JMP I WRCD PAGE READ=JMS I (7607 ERR=JMS WRERR /SPECIAL CODE TO CHAIN TO ABSLDR, TO READ IN MCPIP JMS I (7700 10 /LOCK USR IN CORE TAD R7600 /ZERO CD AREA DCA CDPTR TAD (-47 DCA CDKNT DCA I CDPTR ISZ CDPTR ISZ CDKNT JMP .-3 STL CLA RAR /ALTMODE DCA I (7642 JMS I (200 12 /INQUIRE 4503 /ENCODE CSA0 CDN, 0 0 HLT TAD CDN /TAKE DEVICE NUMBER DCA I (7617 /STORE DEVICE NUMBER OF CASSETTE ISZ I (7620 /V3C FORCE BLOCK 1 CLA IAC CDF 0 /V3D DCA I (7746 /SET JSW SO CHAIN DOESN'T DO USROUT CDF 10 JMS I (200 /CHAIN TO ABSLDR 6 70 RESTORE,0 CIF 0;READ;3701;0;BLDSAV;ERR CIF 0;READ;3510;0;BLDSAV+20;ERR /RESTORE BUILD JMP I RESTORE WRITE=JMS I (7607 ERR=JMS WRERR SAVE, 0 CDF 0 DCA I (SOFSET DCA I (SBLOCK DCA I (DRECT /HAVE TO KEEP DIRECTORY LATER CDF 10 CIF 0;WRITE;7701;0;BLDSAV;ERR CIF 0;WRITE;7510;0;BLDSAV+20;ERR JMS CASIT CIF CDF 0 JMP I SAVE RES76, TAD I (Z7600 CIF 0 JMS I (MOVE CDF 0 7000 /RESTORE OLD PAGE 7600 CDF 0 7600 JMP I (Z7600 WRERR, 0 /WRITE ERROR HLT CLA /HIT CONTINUE TO RETRY TAD WRERR TAD (-6 DCA WRERR /POINT BACK TO CIF OF CALL JMP I WRERR /RETRY /RELATIONSHIP BETWEEN CD CORE IMAGE AND BLOCKS ON SYSTEM DEVICE: /ITEM CORE LOC BLOCKS /CD 00000-01377 51-63 /ODT 10000-11777 60-63 CSA, 0 /CASSETTE HANDLER ENTRY PT CDPTR, 0 CDKNT, CASIT, 0 CDF 0 TAD I (RECNO SNA CLA IAC /IF BLOCK 0, CHANGE TO 1 DCA I (RECNO TAD I PRETSW SNA CLA /BUILDING FROM SCRATCH? JMP I CASIT /NO TAD I (BLDCB /YES, GET DCB OF LOAD HANDLER AND L770 TAD M270 /CASSETTE DEVICE CODE=27 SZA CLA JMP I CASIT /NOT A CASSETTE TAD I (DVICE DCA CSA /GET HANDLER ENTRY POINT CDF 10 CIF 0 JMS I CSA 3 /SKIP TO NEXT FILE L770, 770 M270, -270 R7600, 7600 /IGNORE ERRORS CIF 0 JMS I CSA 100 /DUMMY READ A PAGE BINARY /TO SKIP HEADER PRETSW, RETSW SKP CLA /WANT AN ERROR HLT /A GOOD READ IS BAD! JMP I CASIT /INITIALIZATION CODE FOR BATCH OPERATION FIELD 2 *10 BATXR1, 0 /INDEX REG. 1 FOR BATCH BATXR2, 0 /INDEX REG. 2 FOR BATCH *200 BATSET, 0 TAD I (XR1 /GET THE OVERLAY POINTER SZA /IF ZERO USE OLD VALUE /THIS SAVES ME SOME FIELD 0 SPACE DCA BATXR1 /SAVE THE POINTER TAD I [7777 /NOW GET THE BATCH FIELD CDF 20 /TO FIELD 2 AND (0070 /NOW GET THE FIELD BITS TAD (CIF /MAKE A CIF FOR OVERLAY DCA CBATI /SAVE IN INPUT ROUTINE TAD CBATI /ALSO OUTPUT DCA CBATO /OVERLAY BATMOV, TAD I BATXR1 /GET NEXT STORAGE ADDRESS SNA /IF ZERO ALL DONE (SECOND TIME THRU) JMP BATDON /RETURN TO CALLER DCA BATXR2 /OTHERWISE SAVE POINTER TO TARGET CODE BATLUP, TAD I BATXR1 /GET A PATCH WORD SNA /ZERO MEANS END OF THIS PATCH JMP BATMOV /GO GET ANOTHER POINTER OR MAYBE ALL DONE CDF 0 /BACK TO FIELD ZERO DCA I BATXR2 /NOW CODE IS BATCHABLE CDF 20 /BACK TO FIELD 2 JMP BATLUP /DO IT ALL AGAIN BATDON, CIF CDF 0 /RETURN TO CALLER JMP I BATSET /BYE BATLS, TTYIN /POINTER TO MOVE DATA CBATI=. /SET CIF BATCH RELOC TTYIN+1 /RELOCATABLE CODE CIF JMS I BATINI /JUMP TO GET INPUT FROM BATCH HLT /BAD ERROR SKP /SKIP OVER POINTER BATINI, 5400 /POINTER TO BATCH INPUT ROUTINE 0 /TERMINATOR TTYOUT+5 /NOW FOR OUTPUT RELOC CBATO=. /SET FOR CIF BATCH RELOC TTYOUT+6 /POINTER TO MOVE DATA CIF /CIF BATCH JMS I .+1 /GO SEND DATA TO BATCH 7400 /POINTER TO BATCH OUTPUT PROCESSOR 0 /TERMINATOR LFMOD /POINTER TO LINE FEED MOD RELOC LFMOD+1 /RLOCATE THE CODE RDTXT /IGNORE LINE FEEDS 0 /TERMINATOR BATTST+1 /POINTER TO MODIFY BATCH TEST RELOC BATTST+2 /RELOCATE THE CODE JMP BATBK /JUMP AROUND THE BATCH SWITCH TEST /WITH A NEW SYSTEM THE TEST IS ILLOGICAL /WHICH IS THE CASE IF A BOOT IS REQUESTED 0 /TERMINATOR RELOC 0 /FINAL OVERLAY TERMINATOR /NOW COMES THE RESET CODE TO PUT THINGS BACK / THE WAY THEY WERE TO BEGIN WITH. TTYIN /POINTER TO MOVE DATA RELOC TTYIN+1 /RELOCATABLE CODE KSF /SKIP ON FLAG JMP .-1 KRB /READ A CHAR SNA /LOW LEVEL BLANK IGNORE JMP TTYIN+1 /GO GET ANOTHER 0 /OVERLAY TERMINATOR TTYOUT+5 /NOW FOR OUTPUT RELOC TTYOUT+6 /RELOCATE AGAIN TLS /PRINT THE CHAR TSF /DONE? JMP .-1 /NO. 0 /OVERLAY TERMINATOR LFMOD /POINTER TO LINE FEED MOD RELOC LFMOD+1 /RELOCATE ONE MORE TIME LFEED /LINE FEED..ECHO CURRENT COMMAND 0 /TERMINATOR BATTST+1 /POINTER TO BATCH TEST RELOC BATTST+2 /RELOCATE THE CODE TAD I [7777 /RESET THE CODE TO ORIGINAL STATE 0 /OVERLAY TERMINATOR RELOC 0 /FINAL OVERLAY TERMINATOR PAGE /LDABS DOES A REAL LIVE ABSLOAD IF AC=0 /IF AC=-2 THEN IT IS LOADING A HANDLER, THIS IS DONE AS FOLLOWS: /SEARCH FOR *0 /THEN LOAD CONSEC WORDS INTO DESCRIPTOR TABLE /AT NEXT ORIGIN, LOAD WORDS INTO HANDLER AREA (ALLOW ORIGINS) /CAN'T USE PAGE 0 LITERALS IN CASE LOADING OS/8 LDABS, 0 DCA LODTST /-2 IF HANDLER, 0 IF OS8 LDABS2, TAD JMPNXT DCA TSTO0 DCA CKSUM /CLEAR CHECKSUM JMS I (ICHA /GET A BUFFER CHAR JMP LDAB /NO INPUT FOUND SNA JMP .-3 /IGNORE BLANKS TAD (-200 SZA CLA /IS IT LEADER? JMP BADIN /WASN'T 200..PROBABLY NOT BINARY LEADER, JMS I (ICHA JMP LDAB /STRANGE....ALL LEADER!!! SNA JMP LDABS2 /START OVER.BLANKS AFTER LEADER TAD (-200 /IS IT STILL LEADER? SNA JMP LEADER /YES NEWWD, SMA /IS IT < 200? JMP FIELDW /NO.TEST FOR FIELD SEETING TAD (200 /RESTORE CHARACTER DCA WD1 JMS I (ICHA JMP BADIN /EOF BETWEEN WORDS. HOW NICE! DCA WD2 JMS I (ICHA JMP BADIN TAD (-200 /200 FINISHES US UP SNA JMP OVE DCA WD JMS I (ASSEM /ASSEMBLE LAST WORD READ SZL /IS IT AN ORIGIN? JMP ORGTST /YES XFIELD, HLT /GETS CDF N DCA I ORIGIN /STORE THIS WORD CDF20, CDF 20 ISZ ORIGIN /SHOULD NEVER SKIP, BUT... LD7, 7 TAD ORIGIN TAD (200 /GIVE ERROR IF ORIGIN ADVANCES TO 7600 SZA CLA JMP .+3 /SKIP AROUND ERROR CIF CDF 0 /ERROR IN FIELD 0 JMP I (NOROOM NEXT, TAD WD1 TAD WD2 /MAKE UP CHECKSUM TAD CKSUM DCA CKSUM TAD WD JMP NEWWD ORGTST, DCA ORGX /TEST FOR ORIGIN TAD LODTST /GET POINTER TO PROPER ORIGIN SNA CLA JMP .+3 CIF CDF 0 /JUMP TO HANDLER TEST JMP I (HND TAD ORGX /OS/8 - USE REAL ORIGIN ORI, DCA ORIGIN /BUFFER AREA TAD LODTST /HANDLER LOAD? SNA CLA JMP NEXT /NOPE TAD ORGX /DON'T START LOAD UNTIL *0 IS FOUND SZA CLA TSTO0, JMP NEXT DCA .-1 /FOUND *0..DO THE LOAD ISZ LODTST /YES. BUMP LODTST TO LOAD HANDLER NEXT JMP NEXT TAD XFIELD TAD (-CDF 0 SZA CLA JMP .+3 /JUMP AROUND IF NOT FIRST TIME CIF CDF 0 /SUBROUTINE IN FIELD 0 JMS I [FIRST /FIRST TIME THROUGH /DO THIS BETTER; ALSO MAKE SURE HANDLER DOESN(T HAVE A FILED PSEUDO TAD (CDF 10 DCA XFIELD /AT THIS POINT, WE START CLA CMA /LOADING THE HANDLER INTO THE DCA LODTST /AREA SPECIFIED BY HNDORG+1 /CHECK 'ORIGIN' TO SEE IF HEADER WAS RIGHT SIZE /ALSO ELSEWHERE, CAN CHECK ORIGIN WHEN BUMPING TO SEE /IF WE HIT ANY MAGIC LOCATIONS TAD ORGX /SEE IF LEGAL RE ORIGIN CIF CDF 0 /OFF ON FIELD 0 JMS I (ORGLIM DCA ORIGIN /ACTUAL FIELD 1 ORIGIN / TAD SNACLA /LOADING FIELD 1..TEST ORIGINS / DCA JMPRE JMPNXT, JMP NEXT FIELDW, TAD (-100 /LESS THAN 300 FAILS SPA JMP BADIN DCA WD1 TAD WD1 AND LD7 SZA CLA JMP BADIN /DISECT WORD TO CATCH GARBAGE TAD LODTST /IF LOADING HANDLER, IGNORE FIELD SZA CLA JMP FIELD2 TAD WD1 AND (70 /EXTRACT FIELD SETTING TAD [CDF 0 DCA XFIELD FIELD2, JMS I (ICHA JMP BADIN TAD (7600 SZA JMP NEWWD OVE, CIF CDF 0 /ROUTINE IN FIELD 0 JMP I [OVER LDAB, CIF CDF 0 /BACK TO FIELD 0 JMP I LDABS /RETURN FROM SUBROUTINE BADIN, CIF CDF 0 /BACK TO FIELD 0 JMP I [BADINP /BAD INPUT ORGX, 0 ORIGIN, 0 WD1, 0 WD2, 0 WD, 0 CKSUM, 0 LODTST, 0 PAGE ICHA, 0 /ICHAR CALL ROUTINE FOR FIELD 0 CIF CDF 0 /OFF TO FIELD 0 JMS I (ICHAR /JUMP TO ICHAR JMP I ICHA /ERROR RETURN ISZ ICHA /GOOD RETURN JMP I ICHA /RETURN TO CALLER ASSEM, 0 /ASSEMBLE A WORD /THIS CODE APPEARS IN FIELD 0 ALSO TAD I (WD1 /GET WORD 1 CLL RTL /NOW DO THE ROTATE RTL;RTL TAD I (WD2 /NOW FOR THE SECOND PART JMP I ASSEM /BACK TO CALLER PAGE WRITEX=JMS I (7607 /OFF TO WRITE TO DEV. ERROR=JMS ERRX /ERROR SUBROUTINE BAK, CIF 0;WRITEX;4111;3400;26;ERROR /ENTER OVERLAY CIF 0;WRITEX;4701;2000;54;ERROR /SAVE, DATE, MON ERROR, CHAIN OVERLAYS TAD Q200 CDF 0 TAD I QLD DCA I QLD CDF 20 CIF 0;WRITEX;4101;LDRCTL;70;ERROR /ABSLDR CORE CONTROL BLOCK TAD (-114 CIF 0 JMS I (MOVE CDF 0 4264 CDF 0 3464 CIF 0;WRITEX;4200;3400;64;ERROR CIF 0;WRITEX;5210;2000;71;ERROR /ABSLDR CIF CDF 10 /BACK TO FIELD 1 JMP I (WHER QLD, LDRCTL+5 Q200, 200 ERRX, 0 /WRITE ERROR HLT CLA /HIT CONTINUE TO RETRY TAD ERRX TAD (-6 /BACK TO TRY AGAIN DCA ERRX /AGAIN JMP I ERRX /RETRY FIELD 0 *200 $ |
Added src/os8/uni/SYSTEM/CCL.BI.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | $JOB ASSEMBLE AND LINK CCL.MA .MAC OUT:CCLPS<IN:CCLPS.MA .MAC OUT:CCLTBL<IN:CCLTBL.MA .MAC OUT:CCLCDX<IN:CCLCDX.MA .MAC OUT:CCLSIZ<IN:CCLSIZ.MA .MAC OUT:CCLCOR<IN:CCLCOR.MA .MAC OUT:CCLCD<IN:CCLCD.MA .MAC OUT:CCLTAB<IN:CCLTAB.MA .MAC OUT:CCLDRV<IN:CCLDRV.MA .MAC OUT:CCLAT<IN:CCLAT.MA .MAC OUT:CCLSEM<IN:CCLSEM.MA .MAC OUT:CCLDAT<IN:CCLDAT.MA .MAC OUT:CCLSB2<IN:CCLSB2.MA .MAC OUT:CCLREM<IN:CCLREM.MA .MAC OUT:CCLMSG<IN:CCLMSG.MA .MAC OUT:CCLRUN<IN:CCLRUN.MA .MAC OUT:CCLSUB<IN:CCLSUB.MA .MAC OUT:CCL<IN:CCL.MA .LINK OUT:CCL<OUT:CCL,OUT:CCLTBL,OUT:CCLAT,OUT:CCLMSG$ *OUT:CCLTAB,OUT:CCLDRV,OUT:CCLPS,OUT:CCLSIZ/F /*OUT:CCLSEM *=0/N/9 *=1000/N *=1400/N *=2000/N *=2400/N *=3000/N *=3400/N *=4000/N *=4400/N/O *OUT:CCLDAT,OUT:CCLCOR/C *OUT:CCLSUB/C *OUT:CCLSB2/C *OUT:CCLCDX */O *OUT:CCLCD/C *OUT:CCLRUN,OUT:CCLREM *$ .DEL OUT:CCL???.RB .COPY OUT:CCL.SV<DSK:CCL.SV .DEL CCL.SV /CHAIN TO RESORC COMPILE AND LINK .SUB RESORC.BI $END |
Added src/os8/uni/SYSTEM/CCL.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 | /5 MACREL VERSION OF CCL FOR OS/8 V3D / / / / / / / / / /COPYRIGHT (C) 1974,1975,1976,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. / / / / / / / / / / MIFILE=7617 .GLOBAL OUTLIM,OUTSW,COLSET,FNAME1 .GLOBAL LPTDEV,TTYDEV,DMPDEV,NULDEV,PTPDEV,TVDEV .GLOBAL EXSUB,BLK,IOERR .GLOBAL LOOK .GLOBAL SETLPT,SETPTP,SETTTY,YFORT,YF4,YLOAD,YLOADER .GLOBAL DEFILE .GLOBAL YAT,ZOW,BATCH,FLAG,RDMON,REGO,REMD,CHAIN .GLOBAL DECODE,SCAN,LBEGIN .GLOBAL DEFALT,MOVE,TWAIT,NAMPTR BEGLN==1000 XFERV==70 /LOCATION INSIDE USR WHICH IS FREE .EXTERNAL SWAPER / .EXTERNAL SEMI .EXTERNAL MONFIX .EXTERNAL TABLES .EXTERNAL AT,CCLBLC,PTBL,SAVL,LEAVE,VERTN,NOCCL .EXTERNAL SETDEV,RECALL .EXTERNAL CD,CCER1,REMEM,ARLOC .EXTERNAL PRMESG,PRINT,CCSUB .GLOBAL YCCL XR2=15 XR=16 AMFLAG=17 T=20 DELIM=32 DEFALT=33 /POINTS TO DEFAULT EXTENSION LIST PTR=36 BATSPL=7200 /JMS HERE TO PERFORM SPOOLING WITH DEFAULT EXT IN AC SOFSET=7747 /CCL STARTING ADDRESS: 12000 /STARTING ADDRESS: 12001 /CHAIN STARTING ADDRESS:12002 / JOB STATUS WORD = 2003 /************************************************** / / SAVING CCL / / .LOAD CCL / .SAVE SYS CCL;12001=2103 / .R CCL / /************************************************** OV=1375 MSOVL2=55 CCLTAB="H /MUST BE UPDATED IF TABLES CHANGE CCLNUM="3 CCLVER="A /CCL VERSION # /*** NOTE: VERSION E OF CCL WAS FOR IN-HOUSE USE ONLY. /USE OF SEMICOLONS WITH CCL VERSION I OR LATER /REQUIRES BATCH VERSION 7 OR LATER. /USE OF BASIC COMMAND REQUIRES V3D BASIC OR LATER /MEMORY ALLOCATION: /0 0000-0777 KBM /0 1000-1777 COMMAND LINE [EACH @ FILE RESTRICTED TO 1 BLOCK] /0 2000-2777 LINE BUFFER EXTENSION /0 3000-3177 PRE-EXTENSION @ BUFFER /0 3200-3577 @ BUFFER /0 4000-4377 REM-LINES /0 4400-4777 INPUT HANDLER FOR CD / ALSO, SEMICOLON BUFFER /0 5000-5777 LONGWORD TABLE /0 6000-7277 MORE TABLES /0 7300-7577 SWITCH POINTER TABLE / CHANGES SINCE FIELD RELEASE VERSION: /1. RECURSIVE 'U' BUG FIXED /2. INTERNAL STRUCTURE OF CCL KEYWORD TABLE CHANGED /3. BUG RE REWRITING BLOCK CONTAINING PTR TO CORRECT FORTRAN FIXED /4. .SV PARTS OF FILENAMES REMOVED FROM TABLE TO SAVE SPACE /5. COMPARE PASSES ALTMODE /6. TTY BECAME DEFAULT FOR COMPAR, DIRECT, AND MAP /7. BUG RE PASSING DEFAULT * FIXED /8. .LS FORM OF .CREF COMMAND REMOVED /9. BUG CONCERNING PROCESSOR SWITCHES FIXED /10. CCL SWITCH ALLOWED AFTER =N OPTION /11. BUG RE 'BAD SWITCH OPTION' MESSAGE FIXED /12. EXTRA SPACES NOW ALLOWED BEFORE CCL ARGUMENT /13. 'DOES NOT EXIST' MESSAGE NOW SPELLED CORRECTLY /14. 'BAD CCL SWITCH' MESSAGE ADDED /15. CCL EDIT # CHANGED TO CCL VERSION # /16. .EX CHAINS TO BCOMP NOT BASIC FOR .BA FILES /17. MUNG PTR: NOW WORKS /18. FIXED BUG RE MUNG <CR> /19. FIXED BUG RE CD FOR FILE > 2047 BLKS /20. FIXED BUG RE MAKE PTR: /VERSION B FIXES: /21. ALLOWED 'EDIT' TO COPY FILE EXTENSION /22. FIXED BUG RE .CCL ON WRITE-LOCKED DEVICE /23. FIXED DATE PROBLEM /24. ALLOWED FF AND VT IN AN INDIRECT FILE TO BE IGNORED /VERSION C FIXES: /25. FIXED BUG RE SPACES AND SLASHES IN MUNG TEXT ARGUMENT /26. ALLOWED EDIT COMMAND TO USE SAME OUT DEVICE / AS IN DEVICE (IF NONE SPECIFIED) /27. ADDED MORE SYNTAX CHECKING TO ZERO COMMAND /VERSION D CHANGES: /28. ALLOWED EDIT A<B COMMAND TO REMEMBER ONLY UP TO '<' . /VERSION E CHANGES: (IN-HOUSE ONLY VERSION) /29. WARNING MSG IF SQUISH SYS: UNDER BATCH /30. ADDED SOME NOTES ON HOW TO ALLOW = AS WELL AS < /31. ADDED HOOKS FOR ; TO BE READY FOR V4 /32. FIX BUG RE CMD STARTING WITH SPACES /CHANGES FOR MAINTENANCE RELEASE (OS/8 V3C): /33. FIXED BUG ABOUT @ NOT FOLLOWED BY FILESPEC /34. INCORPORATED ALL PREVIOUS EDITS /35. ALLOWED ' TO TERMINATE AN INDIRECT REQUEST (AND BE IGNORED) /36. FIXED BUG ABOUT EDIT DEV1:_DEV2:FOO LOSING DEV1: /37. CORRECTED SPELLING OF SUPERSEDING /38. ADDED .LD EXTENSION TO EXECUTE TABLES [USES FRTS] /VERSION G CHANGES: /39. FIXED BUG WITH HELP COMMAND /40. FIXED BUG CONCERNING EDIT DEV:_FILE /VERSION H CHANGES: /41. ADDED MAC AND LINK COMMANDS /42. ADDED MACREL AND LINKER INTO COMPILE/LOAD/EXECUTE COMMANDS /43. ALLOWED UX COMMANDS TO CONTAIN KBM COMMANDS /44. ALLOWED PASSING A KBM COMMAND TO CCL ON CHAINING /45. ALLOWED @ AT BEGINNING OF LINE /46. MOVED MOST OF 'DETCOR' TO FIELD 0 /47. WAIT ROUTINE NOW GIVES UP IF TTY FLAG ISN'T UP WITHIN 0.1 SEC /48. ALLOWED EXEC .BI TO USE BATCH /49. TENTATIVELY ADDED SEMICOLON STUFF /50. PUT BACK WARNING MESSAGE IF TRY TO SQUISH UNDER BATCH /VERSION I CHANGES: /51. FIRMED UP SEMICOLON STUFF /VERSION J CHANGES: /52. DEFAULT DEVICE FOR COMPIL, PAL, ETC. IS NOW LOGICAL DSK: NOT SYS: /53. -L, -S, AND -P SWITCHES NOW SET OUTPUT NAME TO CURRENT INPUT NAME /VERSION K CHANGES: /54. DATE NOW HANDLES DATE/78 ALGORITHM /55. TOOK OUT 'TCF' WHICH WAS CAUSING BATCH TO HANG /VERSION 1A CHANGES: /56. FIXED BUG RE NULL INDIRECT CMD FILE /57. FIXED BUG TO NOW ALLOW DATE WITH ARGS IN INIT.CM /58. PRINT "OS78" FOR VERSION NAME IF APPLICABLE /59. ADDED -N AND -D AND REWROTE LOGIC A BIT /60. HELP COMMAND NOW USES HELP.SV /61. SET COMMAND NOW USES SET.SV /62. 'CORE' BECOMES 'MEMORY' IN 3 MSGS AND 1 CMD /63. ADDED BASIC COMMAND (CHAINS TO BASIC.SV WITH Q SWITCH) /64. ALLOWED FOR TERMINATE COMMAND (OS78 REPLACES BACKSPACE) /65. ADDED DUPLICATE COMMAND (USES RXCOPY) /V1B CHANGES: /66. MODIFIED FORMAT OF MAIN TABLE /67. GIVE ERROR MESSAGE IF NO FILENAME IS GIVEN WITH INDIRECT / FILE (EVEN IF NON-FS) /68. PRINT KBM VERSION # /69. ADDED TERMINATE COMMAND /V1F CHANGE: /70. DUPL CALLS RXCOPY IN SPECIAL MODE /V1G CHANGES: /71. SOURCE CODE IS NOW MACREL /72 LINKER OVERLAYS ADDED /73. = ALLOWED IN ADDITION TO _ AND < (IF NOT FOLLOWED BY A DIGIT) /74. /C:NNNN ALLOWED FOR NUMERIC ARGUMENT IN ADDITION TO = /75. HOOKS FOR MULTIPLE CHARACTER SWITCHES ADDED /76. SWITCHES MAY NO LONGER BE EMBEDDED IN A FILENAME /77. KNOWN BUG IF SAY MAKE # /78 A+B IS IDENTICAL TO A-NB,B /79. KNOWN BUG THAT /A-L USES A /80. TEMPORARILY REMOVED SEMICOLON STUFF / FORMAT OF CCL TABLE /ENTRY PURPOSE / TABLE WIDTH=7 (BUT VARIES) /0 FLAG WORD /BIT MEANING IF ON /0 PERFORM CD (IF 0, OMIT ENTRIES 1-6) /1 DON'T PERMIT SPOOLING /2 ALLOW .LS, .NB, .MP SWITCHES /3 ADD _ TO END OF COMMAND STRING /4 SET OUTPUT EXTENSION = INPUT EXTENSION (IF BIT 2 ON) /6-8 SPECIFIES AUTOMATIC INPUT REMEMBERING (REM LINE MINUS 1) / 0 MEANS NONE. 7 RESERVED FOR SPECIAL USE. /10 CAUSE -L, ETC. TO GO TO 2ND OUTPUT FILE & COPIES NAME /11 WANT DEFAULT ALTMODE (COMPL IF AMFLAG=1) /1 PTR TO DEFAULT EXTENSION LIST FOR INPUT FILES. / IF PTS TO 0, NONE. IF PTS TO 5200, USE SPECIAL MODE. /2-4 DEFAULT SWITCHES TO BE OR'ED INTO THOSE / EXPLICITLY GIVEN. /5 ADDRESS OF SUBROUTINE TO BE CALLED / AFTER C.D. HAS BEEN DONE. 0 IF NONE. /6 PTR TO FILENAME OF PROGRAM / TO BE CHAINED TO. 0 IF NONE. / FIELD 0 /1000-1777 LINE BUFFER /2000-2777 LINE BUFFER EXTENSION /4000-4377 REM-LINES /4400-4777 HANDLER /5000-5577 BUFFER /6000-7577 MORE CCL (7 PAGES) REST=5000 .ASECT CCL *2000 .JSW 2103 .VERSION CCLNUM&77^100+<CCLVER&77> 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/uni/SYSTEM/CCLAT.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | / / / /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/uni/SYSTEM/CCLCD.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 | / / / /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 <DEVICE,NAME> 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+<STARNM&177> 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/uni/SYSTEM/CCLCDX.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | / / / /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 (<TAD NUM>-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/uni/SYSTEM/CCLCOR.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | / / / /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/uni/SYSTEM/CCLDAT.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | / / / /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/uni/SYSTEM/CCLDRV.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | /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/uni/SYSTEM/CCLMSG.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | / / / /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/uni/SYSTEM/CCLPS.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | / / / /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/uni/SYSTEM/CCLREM.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 | / / / /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/uni/SYSTEM/CCLRUN.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | / / / /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/uni/SYSTEM/CCLSB2.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 | / / / /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/uni/SYSTEM/CCLSEM.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | / / / /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/uni/SYSTEM/CCLSIZ.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | / / / /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/uni/SYSTEM/CCLSUB.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 | / / / /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 <ALTMODE>"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 <CR> 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+<CCLVER&77> *.+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/uni/SYSTEM/CCLTAB.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 | / / / /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/uni/SYSTEM/CCLTBL.MA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 | / / / /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=<XX-1>%12.;7643+YY;ZZ=XX-<YY^12.> QQ=1 .REPT 12.-ZZ&17 QQ=QQ^2 .ENDR ;QQ> .IF NBL SWITCH[2]< XX="SWITCH[2]&77;YY=<XX-1>%12.;7643+YY;ZZ=XX-<YY^12.> 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 <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/uni/SYSTEM/CD.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 | 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 <DEVICE,NAME> 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 <BATCHX,ZQWE> *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/uni/SYSTEM/LCSYS.BI.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | $JOB TO MAKE OS/8 ACCEPT LOWERCASE INPUT /REPLACES THE 'LINEFEED ECHO' OPTION, SO /SHOULD ONLY BE USED ON VIDEO TERMINALS. .R FUTIL 11.233/ IF C-1344 1207 11.263/ IF C-2020 1034 11.264/ IF C-5267 5344 11.344/ IF C-4565 1354 11.345/ IF C-3413 7500 11.346/ IF C-1103 1353 11.347/ IF C-4423 1352 11.350/ IF C-1164 3034 11.351/ IF C-3017 5270 11.352/ IF C-1417 0340 11.353/ IF C-7450 7740 11.354/ IF C-5324 7440 COMMENT: END OF KBM PATCH 53.50/ IF C-5366 5207 53.156/ IF C-2024 1025 53.157/ IF C-5362 1220 53.160/ IF C-1102 7500 53.161/ IF C-4466 1367 53.162/ IF C-3024 1370 53.163/ IF C-1025 3025 53.164/ IF C-4466 1025 53.165/ IF C-5755 4466 53.166/ IF C-4312 5755 53.167/ IF C-3415 7740 53.170/ IF C-1101 0340 COMMENT: END OF CD PATCH WRITE END EXIT $END OF JOB TO INSTALL LC PATCH |
Added src/os8/uni/SYSTEM/OS8.PA.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 | /12 OS8 MONITOR SYSTEM OS8 VERS. 3F / / / / / / / / / /COPYRIGHT (C) 1970,1971,1972,1973,1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / /13-APRIL-1977 RL/EF/HJ/SR /THIS VERSION OF OS/8 IS THE BATCH OPERATING SYSTEM /AS WELL AS THE STANDARD KEYBOARD SYSTEM. THIS SYSTEM /IS EXTERNALLY COMPATIBLE WITH ALL PREVIOUS OS/8-PS/8 /USER PROGRAMS. HOWEVER, INTERNALLY THE SYSTEMS ARE /QUITE DIFFERENT. THE MARCH 1972 OS/8 WILL NOT RUN BATCH. /THIS VERSION IS COMPATIBLE WITH CCL. / SYMBOLIC REFERENCES TO VARIOUS OVERLAYS: MEOVLY=26 /DIRECTORY OVERFLOW OVERLAY FOR "ENTER" MCDREC=51 /COMMAND DECODER MSOVLY=54 /"SAVE W. ARGS" OVERLAY MSOVL2=55 /SECOND PART OF SAVE W. ARGS MERRTN=56 /MONITOR ERROR ROUTINE MRUNRC=57 /"CHAIN" OVERLAY ODTREC=60 /SYSTEM ODT MFREE=70 /BEGINNING OF FILE STORAGE CCB=7400 CSOVLY=400 RSOVL1=1400 RSOVL2=2000 EXOVLY=64 /EXTENDED MEMORY OVERLAY LXM=6200 /EXTENDED MEMORY LOAD INSTRUCTION VERSNO=3 PATCHLEV="T /V3 CHANGES: /1. CCL SUPPORT /2. FIXED KILLER CLOSE BUG /3. ADDED VERSION NUMBER /4. ^U, RO TO BOL, AND LF ALL PRINT '.' AGAIN /5. CALL TO USR WITH CODE OF 0 GIVES ERROR /6. MONITOR ERROR MESSAGES NOW GIVE EXPLANATION /7. ENTER NOW MOVES 7 FILES TO MAKE ROOM INSTEAD OF HALF SEGMENT /8. DIRECTORY VERIFICATION HAS IMPROVED /V3 FIXES TO ABSLDR: /1. ALLOWED PARITY ^C /2. PUT IN SELF-STARTING STUFF /3. FIXED CCB BUG FOR 17600 /FIXES TO FIELD RELEASE /1. ABSLDR CHECKS PAGE 0 LITERALS /2. FIXED BUG RE MONITOR ERROR MESSAGES /3. ADDITIONAL INFO FIX /4. BATCH FIX /FIXES FOR MAINTENANCE RELEASE: /1. CHANGED VERSION NUMBER OF MONITOR TO V3M /2. INCORPORATED PATCH RE LOC 13121 AFTER MONITOR ERROR / [SEQ #1, DSN APRIL 1975] /3. ALLOW CHAIN TO WORK ON FULL FIELD SAVES / [SEQ #2, DSN JUNE 1975] /4. ALLOW ABSLDR/I TO WORK ON FULL FIELD CORE IMAGES / [SEQ #1, DSN OCTOBER 1975] /5. ADDED INTERNAL VERSION NUMBER TO ABSLDR AT LOCATION 2200 / MAINT. RELEASE VERSION # IS V4 /6. SET INITIAL ABSLDR DATE TO 1-NOVEMBER-1975 /V3D AND OS/78 CHANGES: /1. ACCEPT DEC STANDARD DATE FORMAT FOR INPUT (DD-MMM-YY) /2. CHANGED VERSION NUMBER TO V3Q /3. ADDED DATE/78 CHANGES /4. FIXED BUG ABOUT WAITING FOR TTY FLAG & BATCH /5. ADDED STUFF FOR LINKER [USES SOFSET] /6. CHANGED ABSLDR DATE TO 1-JUNE-77 /7. DISALLOW RUN OF PROGRAM WITH BIT 4 OF JSW ON [OS/78 ONLY] /8. ASSIGNED RESIDENT BITS FOR SCOPE AND OS/78 /9. ALLOW @ IN KBM COMMAND /10. COULD RUN INIT.CM ON SYSTEM START-UP /11. CHANGED BAD CORE IMAGE MSG TO CORE IMAGE ERR /12. CHANGED ABSLDR/I SO THAT IT SETS UP JSW AND SA /V3F CHANGES: /1. ADDED MONITOR SUPPORT FOR KT8A / A. R,RUN, GET COMMANDS NOW LOAD 128K / B. SAVE COMMAND CAN SAVE UP TO 128K /2. ADDED HIGROUND SUPPORT /3. ABSLDR ALSO UPDATED TO SUPPORT 128K /11-Nov-2018 LHN - edited OS8 for patch 35.2.1 in DSN April-May 1979 / This converts version "S" to version "T" / - Changed absldr write code to write 5 blocks, was 4 / /KEYBOARD MONITOR FOR OS/8 SYSTEM - UNCOMMENTED AT PRESENT FIELD 0 MTHREE=CLA CLL CMA RTL *200 PRINT, JMP I HNDL /MUST BE AT 200 FOR BATCH JMP .+3 /****GETS CIF CDF N FOR BATCH***** TSF /****GETS JMP I .+1****** JMP .-1 /*GETS BOSPRT***** TLS CLA TAD [7000 DCA PRINT+1 JMP I PRINT GETNAM, 0 /ROUTINE TO ACESS TTY INPUT DCA NM1 /FIRST OFF,INITIALIZE DCA NM2 /SET UP SYMBOLS FOR STORING NAME DCA NM3 DCA NM4 TAD TNM1 DCA PN CLA CMA DCA PRDSW GTNMX, DCA NMCT TAD I LXR /LOCATE FIRST CHARACTER TAD M240 /IS IT A SPACE? SNA /IF SO TEST NEXT CHARACTER JMP .-3 TAD [240 /WE'VE GOT FIRST CHARACTER SKP GTNMLP, TAD I LXR /GET ANOTHER CHARACTER DCA TMP TAD TMP TAD M256 /IS IT A PERIOD? SNA JMP PERIOD /IF SO, PROCESS IT TAD [-2 CLL TAD M12 SNL CLA /IS IT GT ASCII CHARACTER (#9)? JMP NINSRT /IF NO, INSERT IN NAME TAD M301 TAD TMP CLL CML TAD [-32 SNL CLA /IS IT GT ASCII(Z),IF SO JMP EONAME /END OF NAME NINSRT, TAD NMCT /CHECK FOR MAXIMUM CHARS TAD [-6 SMA CLA JMP GTNMLP /IF MAXIMUM SAVE NO MORE TAD NMCT /SET UP POINTER TO STORE CHARACTER CLL RAR TAD PN DCA TEMP1 /HERE IS POINTER TO NM1,NM2,ETC. TAD TMP AND [77 /ISOLATE SIX BITS FOR STORAGE SZL JMP .+4 /NO MORE ROOM RTL RTL RTL TAD I TEMP1 /OR IT IN AND STORE DCA I TEMP1 ISZ NMCT JMP GTNMLP PERIOD, ISZ PRDSW JMP EONAME ISZ PN TAD N4 JMP GTNMX EONAME, TAD NMCT SZA CLA ISZ GETNAM JMP I GETNAM HNDL, 4000 /ROUTINE TO RELOAD NON-SYS HANDLER FOR SAVE ROUTINE JMS I [SHNDLR 0200 /READ TWO PAGES 1000 /INTO 1000 LDBLK, 0 /SET UP BY SAVE ROUTINE JMP KMONER JMP I HNDL PRINTQ, JMS PRMESG TEXT /?/ 0 KMER3, JMS I [PRMESG TEXT /NO/ TNM1, NM1 M240, -240 *325 PRINLP, JMS PRWD ISZ PRMESG SKP IFNZRO .-330 <CCLTRB,ERRR> PRMESG, 0 /ERROR MESSAGE PRINTING ROUTINE CLA TAD I PRMESG SZA JMP PRINLP TSF JMP .-1 JMP I ERRET /RETURN TO MONITOR PRWD, 0 DCA TMP TAD TMP RTR RTR RTR JMS PCHAR TAD TMP JMS PCHAR JMP I PRWD PCHAR, 0 AND [77 SNA JMP I PCHAR TAD [240 AND [77 TAD [240 JMS I PCH JMP I PCHAR M12, -12 M256, -256 M301, -301 N4, 4 *367 SAVE12, JMS I [SHNDLR /RELOAD AND RETURN TO MONITOR FROM SAVE 0610 0 MONTOR JMP KMONER CLA CMA CDF 10 DCA I [7700 JMP I [7605 *400 KMNTRY, JMP I GDEVNO /V3 0 /FREE LOCATION ! PCRLF, JMS I [CRLF IFNZRO .-403 <BTCHER,XXXX> KEYMON, JMS I GLINE TAD [BEGLN-1 /ADDRESS REFERENCED BY INIT DCA LXR JMS I GNAME /V3D JMP I [PRINTQ XXX=[PRINTQ /NEED LITERAL IN SAME PLACE NOP /V3D ALLOW @ IN NAME JMS I [SRCH -123; ASSIGN -2301; SAVE -2225; RUN -705; GET -2200; R -2324; START -1704; ODT -0405; DEAS IFNZRO .-431 <SEECCL,ZZZ> -0401; DATE 0 JMP I .+1 CCLSW, PRQMRK /MODIFIED FOR CCL TO 'GETCCL' IFNZRO CCLSW-435 <SEECCL,ZZ> ASSIGN, TAD [12 JMS GDEVNO TAD [UDNAME-1 DCA TM1 JMS I GNAME JMP ASGN2+1 /NO USER DEV. DO A DEASSIGN TAD NM2 /SEE IF WE HASH IT SNA JMP ASGN2 /DON'T HASH..ONLY 1 OR 2 CHARS TAD NM1 RAL /LINK BECOMES 4000 IF NECESSARY CLA CML RAR TAD NM2 ASGN2, TAD NM1 JMP I [ASDONE R, DCA I [GETSW TAD P6203 JMS I [RESET ISZ RUNSW TAD [SHNDLR DCA HANDAD CLA IAC JMP RGETPG GDEVNO, KMINIT DCA ASNM1-1 JMS I [MINCOR JMS I GNAME JMP I [KMER4 TAD NM1 DCA ASNM1 TAD NM2 DCA ASNM1+1 TAD HNDLAD DCA HANDAD CIF 10 JMS I SYSTEM 1 ASNM1, 0;0 HANDAD, KMINIT JMP I [KMER1 TAD ASNM1+1 JMP I GDEVNO GET, TAD [SKP RUN, DCA I [GETSW TAD P6203 JMS I [RESET DCA RUNSW CLA IAC JMS GDEVNO RGETPG, JMS RSCOMN JMS I [MINCOR TAD SENTER CIF 10 JMS I SYSTEM 2 PGNAME, NM1 MOVBUF /USED AS POINTER TO FIELD 1 SR JMP I [KMER2 JMP I [RLOADR RSCOMN, 0 DCA SENTER TAD HANDAD DCA DEVHND JMS I GNAME JMP I [KMER4 TAD NM4 SNA TAD [2326 DCA NM4 JMP I RSCOMN SAVE, TAD [SAVE12 /CHANGE ERROR RETURN ADDRESS AS WE WILL DESTROY CORE DCA ERRET TAD I [JSBITS JMS I [RESET CIF 10 /MOVE THE LINE BUFFER TO 1600 DURING JMS I PGNAME+1 /A SAVE, AS HANDLER WIPES IT OUT TAD LXR /LET'S MOVE THE REGISTER AROUND TAD [SVLNBF-BEGLN DCA LXR TAD [1001 DCA HNDLAD CLA IAC JMS GDEVNO JMS RSCOMN JMP I [SAVE2 HNDLAD, /REPLACED WITH 1001 BY SAVE WRCTLB, 7001 /WRITE OVERLAY AND CCB JMS I [SHNDLR 4600 6200 MTEMP+6 JMP KMONER JMP I WRCTLB *573 /LOADS SYSTEM ODT OVER THE MONITOR ODT, JMS I PGTOUT JMS I [SHNDLR 1001 0 ODTREC /LOCATION 600 IN ODT IS A HLT (ERROR RETURN) *600 START, DCA TEMP1 DCA TEMP2 TAD I LXR /V3 SZA /V3 JMP I [STRTX /V3 TAD I [JFIELD DCA I [MSTCDF TAD I [JSBITS AND [1000 SZA CLA JMP I [KMER3 TAD I [JSBITS JMS I [RESET /RESET ONLY IF NO START ADR SPECIFIED TAD I [JSTART STCOMN, DCA I [MSTADR TSF JMP .-1 /WAIT FOR PRINTER TO FINISH JMS I PGTOUT TAD I [JSBITS SPA CLA JMP I [MSTCDF TAD [SHNDLR DCA I [MREAD-1 TAD [1000 DCA I [MREAD+1 DCA I [MREAD+2 TAD [MTEMP+4 DCA I [MREAD+3 TAD FUDJMP DCA I [MSWITC JMP I [MREAD MINCOR, 0 CIF 10 JMS I SYSTEM 10 CDF 10 DCA I [OLDT9 /ZERO OUT "DIRECTORY IN CORE" KEY CDF 0 TAD [200 DCA SYSTEM JMP I MINCOR RLOADR, RUN1, TAD I [PGNAME DCA FILE JMS I DEVHND 0101 CCB FILE, 0 /READ IN THE HEADER BLOCK JMP KMONER /ERROR WHILE READING HEADER BLOCK TAD I [CCB JMS I [CCBTST /TEST FOR VALID CORE CONTROL TAD I [CCB+3 /V3D RAL /V3D JMS I KRCHK /V3D CAN'T RUN SYSTEM CUSP UNDER OS78 or OS278 TAD I [CCB+1 DCA I [MSTCDF TAD I [CCB+2 DCA I [MSTADR /MOVE THE STARTING ADDRESS INTO UPPER CORE TAD I [CCB+1 DCA I [JFIELD TAD I [CCB+2 DCA I [JSTART TAD I [CCB+3 /SET UP THE JOB INFORMATION AREA JMS I [RESET /AND CLEAR INFORMATION ABOUT "RUN" HANDLER TAD FUDJMP DCA I [MSWITC /SET MSWITC TO INHIBIT LOADING 7400 GETSW, SKP /SKP FOR GET, NOP FOR RUN JMP RUN2 TAD P6203 DCA I [MSTCDF TAD [7600 DCA I [MSTADR /IF A GET, SET STARTING ADDRESS TO RETURN /TO MONITOR RUN2, TAD I RUNVI //TAD EXTMP LHN patch 35.2.1 CLL CMA RAL /POINT TO LAST DOUBLEWORD IN CCB TAD TCCB4 /CCB4=CCB+4 DCA TM1 /TM1 POINTS TO SEG. ADDRESS TAD I TM1 /STORE ADDRES TO READ POSSIBLE OVERLAY DCA I [MREAD+2 ISZ TM1 /POINT TO SEGMENT CONTROL WORD TAD DEVHND /IF THE HANDLER IS IN 7600, OR TAD [200 /IF THE SEGMENT DOES NOT LOAD OVER CLA RAL /7000, NO OVERLAY IS NEEDED. ALSO IF TAD I TM1 /THE SEGMENT IS IN FIELDS 1-7. AND [77 RUN5A, SZA CLA JMP I [RUN6 //JMP I RUNVI /NO PROBLEMS.. READ STUFF IN //LHN patch 35.2.1 TAD I [MREAD+2 /SEE IF WE OVERLAY 7000 CLL CML RAR TAD I TM1 /ADD IN CONTROL WORD TAD [300 SPA /IF NEGATIVE, 7000 IS NOT OVERLAYED JMP RUN5A TAD [7600 /GETS 0, 100, 200, OR 300 SMA /IF POSITIVE READ 3 PAGE OVERLAY ISZ I [PGNAME+1 /POINT TO NEXT TO LAST RECORD TAD [300 DCA RDCNT TAD I [PGNAME+1 CMA /GET RECORD TO READ OVERLAY FROM TAD FILE DCA R7000 JMS I DEVHND /READ OVERLAY FROM THE FILE INTO PAGES RDCNT, 0 /BEFORE CCB 6200 /THEN WRITE THE WHOLE MESS OUT R7000, 0 JMP KMER1 /NOT AVAILABLE JMS I [WRCTLB /WRITE OUT THE OVERLAY+CCB DCA .-1 /BUT ONLY ONCE!! ISZ RUNSW DCA I [MSWITC /ENABLE READ OF OVERLAY TAD RDCNT /SEE IF THIS SEG IS EXHAUSTED CIA TAD I TM1 SPA SNA ISZ I RUNVI //ISZ EXTMP /ARE WE DONE ALL SEGMENTS? //LHN patch 35.2.1 SKP /NOT YET. LOOP UNTIL DONE JMP I [MSWITC RUN5, DCA I TM1 /SAVE ALTERED CONTROL WORD JMP RUN2 /ASDONE, CDF 10 / DCA I TM1 /THIS COULD BE OPTIMIZED / CDF 0 / JMP I [KEYMON KMER1, JMS I [PRNAME /DEVICE NOT AVAILABLE JMS I [PRMESG TEXT / NOT AVAIL/ TCCB4, 7404 /CCB+4 RUNVI, R7400 //RUN6 LHN patch 35.2.1 *1000 /MUST BE AT 1000 FOR BATCH BEGLN, 0 /LINE BUFFER COULD BECOME "@ "I "N "I "T KMINIT, CDF 10 /INITIALIZATION - DESTROYED BY LINE BUFFER ISZ I [7700 /LOC 17700=7777 IF I/O MONITOR IS KNOWN JMP .+3 /TO BE IN CORE, SO SET UP TAD [200 /THE INITIAL POINTER FOR CALLS TO THE MONITOR DCA SYSTEM /ACCORDINGLY CDF 0 TAD I LXR DCA I X1 ISZ TEMP2 JMP .-3 CDF 10 TAD MVFROM DCA I PDBUF ISZ .-2 ISZ PDBUF ISZ MVCNT JMP .-5 CDF 0 TAD I PDBUF+1 /SEE IF BATCH IS SET RAL /IF YES, GO TO PAGE 0 TO CONTINUE SMA CLA /IF IT ISN'T, CONTINUE NORMALLY JMP INTGO /NORMAL KEYBOARD SYSTEM DCA I RTWTPT /DON'T WAIT ON TTY FLAG IF BATCH IS RUNNING TAD I [JSBITS /IS BOS IN PLACE? AND DCBF SNA CLA JMP BATCH /NO. GO READ IT IN. JMP BCHGO /YES. START IT UP. INTGO, TAD [200 KRS TAD M203 SNA CLA /IS THERE A ^C IN THE READER BUFFER KSF /WITH THE FLAG ON? JMP I ERRET /NO - PRINT CRLF AND PERIOD JMP CLR /V3D /CCLADR, GETCCL /V3D DIDN'T SEEM TO BE USED RTWTPT, RUNTWT DCBF, 400 /START PMSRST, SHNDLR&177+4200 /JMS SHNDLR 0300 7000 MTEMP+6 HLT /CONTAINS SECOND COPY OF OS/78 BIT CDF CIF 0 TCF /END MVCNT, MOVBUF-MVT3-1 PDBUF, MOVBUF MVFROM, NOPUNCH *7626 ENPUNCH MOVBUF, 7777 /USED IN BATCH SETUP TAD I MVT1 /MOVE THE LINE BUFFER FROM 1000 DCA I MVT2 /TO 1655 ISZ MVT1 ISZ MVT2 ISZ MVT3 JMP .-5 CIF CDF 0 JMP I MOVBUF MVT1, BEGLN MVT2, SVLNBF MVT3, -111 *1077 /V3D INIT, CDF 10 /V3D (INITIALIZATION) TAD DCBF DCA I ROT /RESTORE LOC 7677 TO '400' CDF 0 DCA KMINIT /END LINE WITH 0 TLS JMP I CRLF /FAKE OUT KBM AS IF USER TYPED @INIT CLR, KCC JMP I .+1 CTRLC TX212, 212 *1112 ENPUNCH DIGTLP, TAD I LXR STRTX, TAD (-270 CLL TAD [10 DCA TMP1 /V3 SNL JMP EONUM /V3 ISZ DIGFLG JMS ROT JMS ROT JMS ROT TAD TEMP2 TAD TMP1 DCA TEMP2 JMP DIGTLP EONUM, TAD TEMP1 AND [7 CLL RTL RAL TAD KM6203 DCA I [MSTCDF TAD TEMP2 JMP I .+1 STCOMN ROT, 7677 /V3D NEEDED FOR INIT TAD TEMP2 CLL RAL DCA TEMP2 TAD TEMP1 RAL DCA TEMP1 JMP I ROT DEAS, TAD [UDNAME-1 DCA X1 TAD [-17 DCA TM1 CDF 10 DCA I X1 ISZ TM1 JMP .-2 KM6203, CDF CIF 0 JMP I [KEYMON ASDONE, CDF 10 /V3 DCA I TM1 /V3 JMP KM6203 /V3 CRLF, KEYMON+1 /V3D NEEDED FOR INIT TAD [215 DCA NM1 JMS I (PRNT TAD TX212 JMS I PCH JMP I CRLF M203, -203 PAGE /NOTE: XR=AMFLAG ! *1200 /TELETYPE INPUT ROUTINE XGLINE, KEYMON+1 /MUST BE AT 1200 FOR BATCH & CCL TAD [". JMS I PCH DCA RBFLAG TAD [BEGLN-1 CHLM1, DCA LXR DCA AMFLAG /ZERO ALTMODE FLAG CHLOOP, KSF JMP CHLOOP TAD [200 KRS DCA NM1 KCC JMS SRCH -225;CTRLU -215;CARRET -377;RUBOUT -375;ALTMOD /THIS AREA GETS MODIFIED BY SET -376;ALTMOD -233;ALTMOD -212;LFEED -200;CHLOOP -217;CHLOOP /IGNORE ^O -203;CTRLC /MUST BE JUST BEFORE 0 /MUST BE HERE FOR CCL 0 JMS PRNT CINSRT, TAD NM1 DCA I LXR TAD LXR TAD [-BEGLN-110 SPA CLA JMP CHLOOP CARRET, JMS I [CRLF TAD LXR TAD [1-BEGLN SNA CLA JMP XGLINE+1 DCA I LXR DCA I LXR JMP I XGLINE /THIS PAGE GETS MODIFIED BY SET COMMANDS (FOR REAL SCOPE RUBOUTS) /**** BEWARE! *** PRNT, 0 ISZ RBFLAG JMP .+3 TAD ["\ JMS I PCH DCA RBFLAG TAD NM1 JMS I PCH JMP I PRNT CTRLC, CTRLU, TAD ["^ JMS I PCH TAD NM1 TAD [100 CLRLIN, JMS I PCH RBSPCL, JMS I [CRLF JMP XGLINE+1 ALTMOD, TAD ["$ DCA NM1 JMS PRNT ISZ AMFLAG /NOTE ALTMODE JMP CARRET+1 RUBOUT, TAD LXR TAD [1-BEGLN SNA CLA JMP RBSPCL TAD ["\ /MUST BE HERE ISZ RBFLAG JMS I PCH CLA CMA DCA RBFLAG TAD LXR DCA TEMP1 TAD I TEMP1 JMS I PCH LBCKUP, CLA CMA TAD LXR JMP CHLM1 SRCH, 0 TAD I SRCH ISZ SRCH SNA JMP I SRCH TAD NM1 SNA CLA JMP SFND ISZ SRCH JMP SRCH+1 SFND, TAD I SRCH DCA TEMP1 JMP I TEMP1 LFEED, JMS I [CRLF DCA I LXR TAD [". JMS I PCH TAD [BEGLN-1 DCA XR TAD I XR SNA JMP LBCKUP JMS I PCH JMP .-4 PRQMRK, JMS I [PRNAME JMP I [PRINTQ IFNZRO PRQMRK-1357 <SEECCL,ZZXX> ZBLOCK 1 /A FREE LOCATION! IFNZRO .-1362 <FIXCCL,ERRRR> GETCCL, TAD [6003 JMS I [RESET TAD [67 /CCL OVERLAY BLOCK IS BLOCK 67 *** DCA OV JMP DATE2 DATE, TAD TMP SNA CLA JMP I [CCLSW-1 /USED TO BE JMP GETCCL DATE2, JMS I [SHNDLR /READ IN DATE OVERLAY 0201 0400 OV, MSOVL2 JMP KMONER JMP I [600 PAGE *1400 SAVE2, TAD I LXR SNA /ARE THERE ANY ARGS? JMP SAVE2A /NO ... USE CCB JMS I [SHNDLR /READ IN ARG OVERLAY 0201 CSOVLY MSOVLY JMP KMONER JMP I CCBTST /GO TO IT SAVE2A, JMS I [SHNDLR 0201 400 MTEMP+10 JMP KMONER SAVE3, TAD [603 DCA XR DCA LXR /INITIALIZE FOR GT32K I.D. TAD I [600 JMS I [CCBTST JMS I [SHNDLR 0101 400 MSOVL2 JMP KMONER JMP I GETOUT SAV2X, JMS I PGTOUT TAD I [600 /UPDATE THE SEGMENT COUNT BY CLL RAL /FIRST,MAKING SURE 4000 BIT IS SET STL RAR CIA TAD MERTST /SUBTRACT # OF GT32K SEGS THIS ALLOW US TO BYPASS... DCA EXTMP /SAVE COUNT FOR GT32K TAD EXTMP CLL RAL /WE WANT TO BUMP COUNTER TWICE FOR EVERY SEG TAD [603 /ADD POINTER TO INITIAL SEGMENT DCA XR TAD EXTMP CIA DCA EXTMP JMP I RCHK KMER4, JMS I [PRMESG TEXT /TOO FEW ARGS/ CCBTST, SAVE1A&177+400 /EXAMINE COUNT WORD OF CCB FOR VALIDITY /ASCII AND BINARY FILES USUALLY FAIL THIS TEST CLL RAL /INSURES 4000 BIT IS SET--128K INDICATOR STL RAR DCA EXTMP LXM /INITIALIZE EXTENDED MEMORY TAD EXTMP CMA AND [7740 SNA CLA JMP I CCBTST /IT WAS VALID CIERR, TAD [7605 DCA ERRET /RELOAD MONITOR ON THIS ERROR JMS I [PRMESG /IT WASN'T - TELL THE USER TEXT /CORE IMAGE ERR/ GETOUT, SAVE3A&177+400 /SUBROUTINE TO KICK MONITOR OUT IF NECESSARY TAD I [JSBITS RAR CLA TAD SYSTEM SZL SPA CLA /IS THE SYSTEM IN CORE AND SHOULD IT BE? JMP I GETOUT CIF 10 /YES AND NO - KICK IT OUT JMS I SYSTEM 11 /BYE BYE TAD [7700 DCA SYSTEM JMP I GETOUT KMER2, JMS PRNAME JMS I [PRMESG TEXT / NOT FOUND/ PRNAME, 4000 TAD NM1 JMS I [PRWD TAD NM2 JMS I [PRWD TAD NM3 JMS I [PRWD TAD NM4 SNA CLA JMP I PRNAME TAD [256 JMS I [PCHAR TAD NM4 JMS I [PRWD JMP I PRNAME RESET, 0 DCA I [JSBITS /MARK AREAS FOR I/O OPTOMIZATION JMS I [MINCOR CIF 10 JMS I SYSTEM 13 /RESET DEVICE HANDLERS AND OUTPUT FILES JMP I RESET RCHK, XLOD&177+400 AND I XTADR /V3D AND [200 /CAN'T ALLOW BOTH OS78 BIT AND SYSTEM CUSP BIT SZA CLA JMP CIERR /V3D CAN'T FALL INTO KMER3 /BECAUSE HAVE TO RELOAD KBM TO RESET 'PGNAME' TAD EXTMP DCA I RR7400 /SET UP SEGMENT COUNT FOR RUN LOAD JMP I RCHK RR7400, R7400 SVXER, JMS I [PRMESG TEXT /SAVE ERR/ XTADR, OS78 PAGE *1600 RUN6, TAD I TM1 /STORE CONTROL WORD FOR LAST SEG. DCA I [MREAD+1 TAD RUNSW /IS THIS R OR RUN? SNA CLA JMS I [WRCTLB /RUN TAD I RFILE /V3D FOR LINKER DCA I RCTL /V3D SAVE BLOCK NUMBER IN 'SOFSET' TAD I RFILE RUN7, IAC DCA RUNFIL /STORE STARTING BLOCK NUMBER RUN7A, TAD DEVHND DCA I [MREAD-1 TAD DEVHND DCA RUNHND /STORE DEVICE HANDLER ENTRY IN THIS PAGE TAD I ADR1 DCA I ADR2 ISZ ADCNT JMP .-3 JMP I .+1 RUN8&177+7400 ADCNT, RUN8&177+7600 RFILE, FILE CHK32, 0 /PROTECTS MONITOR FROM GREATER THAN 32K FIELD 0 LOAD TAD I RCTL1 AND T76A /ISOLATE CDEB BITS FOR FUTURE USE DCA CDE TAD I RCTL1 AND [7700 /LOAD EVERY FIELD INTO FIELD 1 TAD [10 /WE'LL BUMP IT UP FROM THERE---LATER DCA I RCTL1 JMP I CHK32 T76A, 76 RCTL1, RCTL&177+7400 MOVUP, 0 /SUBROUTINE TO MOVE UP PROGRAM CODE AND T3700 /CALCULATE THE NUMBER OF LOCS RAL TAD T177 CIA DCA COUNT /STORE IT HERE TAD CDE /PREPARE FOR CDF TO PROPER BANK & FIELD CLL RTR SZL SVLNBF, / /NEXT 111 LOCATIONS DESTROYED BY THE LINE BUFFER DURING A SAVE / TAD TX20 CLL RTL TAD T6201 /STORE IT IN EXTEND DCA EXTEND TAD I RADR1 /INITIALIZE THE INDEX REGS TAD SPTST DCA ADR1 TAD ADR1 DCA ADR2 TAD [7000 /SET EXTENDED MEMORY0 LXM BACK, CDF 10 /MAKE THE MOVE TAD I ADR1 EXTEND, 0 DCA I ADR2 ISZ COUNT JMP BACK CDF 0 TAD SPTST DCA I HF2 TAD I RCTL1 JMP I MOVUP T177, 177 T3700, 3700 T6201, 6201 CDE, 0 TX20, 20 HF2, HF3&177+7400 COUNT, 0 RADR1, RADR&177+7400 PAGE *1710 RUN8, ISZ R7400 /IS THIS THE LAST PARAMETER PAIR? JMP RUN9 /NO - KEEP LOADING TAD RUNFIL DCA I RMRD3 /MOVE THE RECORD NUMBER INTO THE FINAL READ TSF RUNTWT, JMP .-1 /WAIT FOR THE TELETYPE TO DIE DOWN (RF08 IS FAST!) JMP I .+1 MREAD /READ THE LAST SEGMENT AND START UP RUN9, TAD I RUNADR DCA RADR /SET UP THE LOADING ADDRESS OF THE CURRENT SEGMENT ISZ RUNADR TAD I RUNADR DCA RCTL /AND THE READ CONTROL WORD TAD RCTL AND TS7 /TEST FOR GREATER THAN 32K SNA DCA HF3 SZA CLA JMS I CH32 JMS I RUNHND RCTL, SOFSET /V3D THESE ARE STORED INTO ONLY AFTER MOVING RADR, OS78 /V3D RUNFIL, 0 JMP RERR /INPUT ERROR READING THE PROGRAM TAD RCTL ISZ HF3 /IF GREATER THAN 32K JMP .+2 JMS I MOVUPT /LOAD HIGHER FIELDS JMS ROTAT /GET THE BLOCK LENGTH OF THIS SEGMENT TAD RUNFIL DCA RUNFIL /UPDATE THE BLOCK NUMBER FROM IT ISZ RUNADR JMP RUN8 /BACK FOR ANOTHER ONE HF3, -1 CH32, CHK32 MOVUPT, MOVUP RERR, CIF 10 JMS I RU7700 TS7, 7 0 /TOTALLY MEANINGLESS RUNADR, CCB+4 R7400, 7400 RMRD3, MREAD+3 RU7700, 7700 RUNHND, 0 IFNZRO ROTAT-SVLNBF-111&4000 <ERROR> *1765 /MUST BE AT TOP OF PAGE ROTAT, 0 CLL RTR RTR RTR AND RU37 SNA TAD RU37 IAC CLL RAR JMP I ROTAT RU37, 37 PAGE /OVERLAY TO KEYBOARD MONITOR FOR "SAVE" WITH ARGUMENTS *2000 /GOES INTO 400 SAVE1A, TAD [1603 DCA X1 DCA TM1 CDF 10 DCA I [OLDT9 S6203, CIF CDF 0 TAD (SGETOUT-RSOVL2 /POINTER TO NEW GETOUT DCA PGTOUT /LIKEWISE "GETOUT" JMS I [SHNDLR 0210 1400 MTEMP+10 /READ IN CONTROL BLOCK JMP KMONER JMS I (LXRBAK-RSOVL1 /RESET LXR TO LOOK AT FIRST CHAR JMS I (LXRBAK-RSOVL1 DCA DASHFG SNUMLP, JMS SGTNUM JMP SDLOOK /NO NUMBER - GET DELIMETER TAD I LXR TAD (-"- SNA CLA JMP SVDASH JMS I (LXRBAK-RSOVL1 TAD DASHFG SNA CLA /WAS THERE A LOWER LIMIT? JMS DASHSB /NO - SET LOWER LIMIT TO UPPER LIMIT TAD TEMP1 CIA CLL CML TAD OLD1 SZA CLA /ARE THE FIELDS THE SAME? JMP KMER5 /NO - ERROR TAD TEMP2 AND [7600 TAD [200 DCA TEMP2 TAD TEMP2 CIA TAD OLD2 SZL CLA /IS UPPER LIMIT > LOWER LIMIT? JMP KMER5 /NO - ERROR CDF 10 TAD OLD1 DCA I X1 TAD OLD2 DCA I X1 TAD TEMP2 DCA I X1 /CREATE A TRIPLET(FIELD, LOW LIMIT, HIGH LIMIT) /IN THE TABLE IN FIELD 1 ISZ TM1 /BUMP ENTRY COUNT SDLOOK, CDF 0 TAD I LXR SNA JMP I (SVEND-RSOVL1 TAD (-", SNA JMP SNUMLP-1 TAD [",-"; SNA JMP SSTADR TAD [";-"= SNA CLA JMP I (SSBITS-RSOVL1 KMER5, JMS I [PRMESG TEXT /BAD ARGS/ SVDASH, TAD DASHFG SZA CLA JMP KMER5 ISZ DASHFG JMS DASHSB JMP SNUMLP SSTADR, JMS SGTNUM JMP KMER5 /NULL STARTING ADR - ERROR TAD TEMP1 /TRANSFORM FOR CDF --"37" TO "174"-128K AND [7757 /ISOLATE '17' BITS TAD (-10 SMA TAD [-17 TAD (10 TAD TEMP1 CLL RTL TAD S6203 CDF 10 DCA I (1601 /STORE AWAY STARTING FIELD TAD TEMP2 DCA I (1602 /AND STARTING ADDRESS JMP SDLOOK DASHSB, 0 TAD TEMP1 AND (37 /ISOLATE FIELD( & BANK) DCA OLD1 TAD TEMP2 AND [7600 DCA OLD2 JMP I DASHSB DASHFG, 0 OLD1, 0 OLD2, 0 SGTNUM, 0 /GET A NUMBER ROUTINE DCA DIGFLG /CLEAR DIGIT COLLECTED FLAG DCA TEMP1 DCA TEMP2 JMS I (STARTX-RSOVL1 JMP .+4 TAD (20 SNA CLA JMP .-4 JMS I (LXRBAK-RSOVL1 /SHOVE INDEX BACK TAD DIGFLG /IS DIGIT PRESENT? SZA CLA ISZ SGTNUM JMP I SGTNUM PAGE *2200 /LOADS INTO 600 SSBITS, JMS I (SGTNUM-RSOVL1 JMP I (KMER5-RSOVL1 TAD TEMP2 CDF 10 DCA I [1603 JMP I (SDLOOK-RSOVL1 SVEND, JMS I [SHNDLR 0101 0400 MSOVL2 /READ IN SECOND PART OF OVERLAY JMP KMONER TAD TM1 SNA JMP I (MOVECB-RSOVL2 CIA CDF 10 DCA I [1600 /NOW SORT THE ENTRIES IN THE SEGMENT TABLE ON /DECREASING FIELD AND INCREASING ADDRESS /WITHIN THE FIELD. TAD [1603 DCA P1 CLA IAC TAD I [1600 SNA JMP SORTED /RIDICULOUS TO SORT ONE ITEM DCA TEMP1 OUTRLP, TAD (3 TAD P1 DCA P2 TAD TEMP1 DCA TEMP2 INERLP, TAD P1 DCA LXR TAD P2 DCA X1 TAD I LXR CIA CLL TAD I X1 SNA CLA JMP TIE /FIELDS ARE EQUAL - SORT ON ADDRESS IN FIELD SZL JMP SWITCH /WRONG ORDER - SWITCH 'EM TIENTY, TAD P2 TAD (3 DCA P2 /INDEX TO NEXT ENTRY SWNTRY, ISZ TEMP2 JMP INERLP TAD P1 TAD (3 DCA P1 /ELEMENT IS IN PLACE - GO TO NEXT POSITION ISZ TEMP1 JMP OUTRLP JMP SORTED /SORT COMPLETE - CHECK FOR CONSISTENCY TIE, TAD I LXR CIA CLL TAD I X1 SZL CLA /TEST FOR ADRESSES IN ASCENDING ORDER JMP TIENTY /YES - DONT HAVE TO SWAP SWITCH, JMS SWSUBR JMS SWSUBR JMS SWSUBR CLA CLL CMA RTL TAD P1 DCA P1 /RESET FIRST POINTER JMP SWNTRY /AND DONT BUMP 2D POINTER, AS WE HAVE JUST BUMPED IT SWSUBR, 0 ISZ P1 ISZ P2 TAD I P1 DCA TM1 TAD I P2 DCA I P1 TAD TM1 DCA I P2 JMP I SWSUBR P1, 0 P2, 0 STARTX, 0 TAD I LXR /ANYTHING LEFT? SNA JMP I STARTX /NO.. TAKE EMPTY RETURN SKP ADGTLP, TAD I LXR TAD (-270 CLL /SEE IF THIS IS A DIGIT TAD [10 SNL JMP AONUM /NO.. GET OUT DCA TMP1 ISZ DIGFLG JMS ROT2 JMS ROT2 JMS ROT2 TAD TEMP2 TAD TMP1 DCA TEMP2 JMP ADGTLP /KEEP LOOKING AONUM, ISZ STARTX JMP I STARTX ROT2, 0 TAD TEMP2 CLL RAL /WE NEED THIS BECAUSE THE HANDLER DCA TEMP2 /WIPED THE FIRST COPY (MAYBE!!!) TAD TEMP1 RAL DCA TEMP1 JMP I ROT2 LXRBAK, 0 CLA CMA TAD LXR DCA LXR JMP I LXRBAK SORTED, TAD I [1600 IAC SNA JMP I (MERGED-RSOVL2 DCA TEMP1 TAD [1603 DCA X1 TAD (1606 DCA LXR JMP I [MRGLP-RSOVL2 PAGE *2400 /LOADS INTO 400 ON TOP OF SAVE1A /NOW CHECK THE SORTED FILE FOR CONSISTENCY /OVERLAPPING SEGMENTS ARE ERRORS, /ABUTTING SEGMENTS ARE TO BE CONDENSED IN /THE INTERESTS OF SPEED MRGLP, TAD I LXR CIA TAD I X1 SZA CLA JMP NOCMPR /DIFFERENT FIELDS - INCOMPARABLE ISZ X1 TAD I X1 CIA CLL TAD I LXR SNA CLA JMP BUTTNG /UPPER LIMIT(2)=LOWER LIMIT(1) - ABUTTING SEGMENTS SZL CLA JMP NXTONE /UPPER LIM(2)<LOWER LIM(1) - NORMAL CASE CDF 0 /UPPER LIM(2) > LOWER LIM(1) - ERROR JMS I [PRMESG TEXT /BAD ARGS/ BUTTNG, CLA CMA TAD X1 DCA X1 TAD I LXR DCA I X1 /SET UPPER LIM(2) = UPPER LIM(1) TAD X1 TAD (-1777 SZA CLA JMP .-5 /AND COMPRESS OUT THE LOWER ENTRY ISZ I [1600 /DECREMENT THE ENTRY COUNT (CAN'T OVERFLOW) JMP I (SORTED-RSOVL1 /START OVER FROM BEGINNING NOCMPR, ISZ X1 ISZ X1 ISZ LXR NXTONE, ISZ LXR ISZ TEMP1 JMP MRGLP /NOW ALL THAT REMAINS IS TO TRANSFORM OUR TRIPLETS /INTO THE FORMAT WHICH THE RUN LOADER EXPECTS; I.E. /DEVICE-HANDLER ARGUMENTS MERGED, CDF 0 /LOAD IN MERGED OVERLAY JMS I [SHNDLR 0100 0600 64 JMP KMONER JMP I (MERGEX MOVECB, TAD (-1777 DCA MERTST JMP MERGED CBMOVE, CDF 10 /FINAL CODE TO MOVE NEW CONTROL BLOCK TAD I LXR /INTO PAGE 600 OF FIELD 0 CDF 0 DCA I X1 ISZ TEMP1 JMP CBMOVE JMP I (SAVE3 /EXIT TO SAVE PROCESSOR SAVE3A, ISZ XR TAD I XR /GET THE I/O CONTROL WORD OF THIS SEGMENT DCA ADR2 /CAUTION AUTO-INDEX TEST FOR GREATER THAN 32K TAD ADR2 AND [7 /ARE THERE ANY BANK BITS? SZA CLA JMP XTAT /NO- PROCEED AS NORMAL TAD SPTST /ONLY WANT TO ISOLATE FIRST FIELD SNA CLA /BELOW 32K JMP XTAT TAD CLENGT /SET UP FIRST FIELD I.D. DCA LXR /CAUTION AUTO-INDEX-SAVE BLOCK OFFSET TAD EXTMP /SAVE NUMBER OF SEGS LEFT DCA MERTST /... NEGATIVE OF # LEFT DCA SPTST /SET I.D. "SET" FLAG XTAT, TAD ADR2 JMS I PROTAT /EXTRACT THE LENGTH FROM IT TAD CLENGT DCA CLENGT /UPDATE THE LENGTH OF THE FILE ISZ EXTMP JMP SAVE3A /LOOP FOR ALL SEGMENTS OF THE FILE TAD CLENGT /USE THIS LENGTH WHEN ENTERING THE FILE CLL RTL RTL TAD SENTER CIF 10 JMS I SYSTEM 3 /ENTER SFILE, NM1 0 /LENGHT UNIMPORTANT JMP I (SVXER /SAVERR CODE REPEATED CIF CDF 10 TAD I [DVHREC CDF 0 DCA I [LDBLK TAD SENTER JMS I SYSTEM 4 /CLOSE NM1 /NAME FOR "CLOSE" CLENGT, 1 /CLOSING LENGTH JMP I (SVXER JMP I (SAV2X XLOD, JMS I [SHNDLR 0201 1200 64 JMP KMONER JMP I (SAVXX /JMP T0 1400 SGETOUT,0 /REPLACES "GETOUT" WHICH WE'VE STORED OVER TAD I [JSBITS RAL /ONLY PERFORMS THOSE FUNCTIONS THAT "SAVE" NEEDS SPA CLA JMP I SGETOUT CIF 10 JMS I SYSTEM 11 DECIMB, JMP I SGETOUT /DECIMB ONLY CALLED BY NEXT PAGE /PART OF NEXT PAGE'S ROUTINE: TAD NM2 /ALL NEW FOR V3D TAD NM4 /ONLY ALLOW 2 CHARS FOR MM SNA CLA ISZ DECIMB TAD NM1 RTR RTR JMP I DECIMB PROTAT, ROTAT *2600 /DATE PROCESSOR - LOADS IN 400, RUNS IN 600 DATEXX, JMS DECIM NUM2, DCA NUM2 TAD NUM2 TAD M40 SMA CLA JMP BADNUM /DAY > 31 JMS I GNAME L30, 30 /NOTHING FOUND WILL GIVE ERROR LATER / DCA NUM1 /NUM1 IS INITIALLY 0 NEWLUP, ISZ MONPTR ISZ NUM1 TAD I MONPTR ISZ MONPTR SMA JMP BADNUM /SYMBOLIC MONTH NOT FOUND TAD NM1 SNA CLA /SKIP IF FIRST 2 LETTERS DON'T MATCH TAD NM2 TAD I MONPTR SZA CLA JMP NEWLUP /SECOND 2 LETTERS DON'T MATCH /*** TEST DELIMETER HERE TAD NUM1 CLL RTL RTL RAL TAD NUM2 RTL RAL DCA NUM2 DCA DDELIM /MAKE END-OF-LINE THE DELIMITER JMS DECIM TAD (-106 /SCALE DOWN TO RANGE 1970-1999 SPA JMP BADNUM /DIDN'T MAKE THE RANGE DCA NUM1 TAD NUM1 AND L30 /ISOLATE EXTENSION DATE BITS CLL RTL RTL DCA TM1 TAD I (BIPCCL AND L7177 /STORE THEM INTO BITS RESERVED FOR THIS PURPOSE TAD TM1 TSLUP, DCA I (BIPCCL TAD NUM1 AND [7 TAD NUM2 /COMBINE WITH MONTH AND DAY CDF 10 DCA I (MDATE /STORE IN SYSTEM DATE CELL TSF /7605 SETS THE DF JMS L7177 /TIME OUT A BIT JMP I [7605 /IN CASE RUNNING UNDER BATCH L7177, 7177 /JMS IS LONGER THAN JMP ISZ DDELIM /DDELIM IS 0 AT END JMS TSLUP /WAIT FOR TELETYPE TO DIE DOWN (RF08) JMP I [7605 /RETURN TO MONITOR DDELIM, -"- /WOULD LIKE TO BRANCH TO CCLSW-1 IF DATE ENDED WITH ALTMODE CNV, 0 AND [77 SNA JMP NUL TAD (-60 SPA JMP BADNUM JMP I CNV NUL, TAD TM1 JMP GODE DECIM, 0 JMS I GNAME M40, -40 /NOTHING THERE (LOGIC WILL CAUSE ERROR LATER) TAD TMP TAD DDELIM /COMPARE AGAINST DESIRED DELIMETER SNA CLA /DASH OR NULL JMS I (DECIMB-2400+400 JMP BADNUM /DELIMETER BAD RTR JMS CNV DCA TM1 TAD TM1 CLL RTL TAD TM1 RAL DCA TEMP2 TAD NM1 JMS CNV TAD TEMP2 GODE, SZA JMP I DECIM BADNUM, CLA /CRAP IN AC TAD [7605 DCA ERRET JMS I [PRMESG TEXT /BAD DATE/ NUM1, 0 /MONTH NUMBER (MUST BE 0 INITIALLY) MONS, -1201 /JAN -1600 -0605 /FEB -0200 -1501 /MAR -2200 -0120 /APR -2200 -1501 /MAY -3100 -1225 /JUN -1600 -1225 /JUL -1400 -0125 /AUG -0700 -2305 /SEP -2000 -1703 /OCT -2400 -1617 /NOV -2600 -0405 /DEC -0300 MONPTR, MONS-2600+600-1 /RELOCATES TO PAGE 600 /MUST BE POSITIVE PAGE *3000 /MONITOR ERROR PROCESSOR - LOADS INTO 11400 DLYLPX, AND I 0 D7600, 7600 TAD MERRNO CLL RAL ISZ I (ZERO-1400 ISZ I (ZERO-1400 /V3C ISZ I (ZERO-1400 JMP DLYLPX /WAIT FOR TELEPRINTER (WITHOUT CDF'S) SNA JMP USRERR CLL RAL RTL RTL TAD (6040 DCA I (MERTYP-1400 MERCMN, TAD (MERRXR-1400 JMS EPRINT TAD I (FPUTX RTR RAR AND (7 TAD (60 JMS MERPCH CLA CLL CMA RAL TAD I (MONITO RAL DCA T1 TAD (-4 DCA T2 MEROLP, TAD T1 RTL RAL DCA T1 TAD T1 AND (7 TAD (60 JMS MERPCH ISZ T2 JMP MEROLP TAD MERRNO CLL RAL SNA JMP NOEXPL /NO EXPLANATION FOR USER ERRORS CLL RAR TAD (EXPLTBL-1401 /PRINT EXPLANATION DCA T1 /GET ADDRESS INTO MESSAGE TABLE TAD (240 JMS MERPCH TAD ("( JMS MERPCH TAD I T1 /GET ADDRESS OF MESSAGE JMS EPRINT TAD (") JMS MERPCH TAD MERRNO NOEXPL, TAD (3773 SPA CLA CLA CMA DCA I (7700 DCA OLDT9 CLA CLL CML RAR DCA MERRNO CDF 0 TAD I (JSBITS AND (6777 TAD (1000 DCA I (JSBITS /SET THE CURRENT JOB UNSTARTABLE CDF CIF 0 JMP I D7600 USRERR, CLA CLL JMS I (FGET TAD (4060 DCA I (UERTYP-1400 TAD (UERRXR-MERRXR JMP MERCMN MERPCH, 0 TLS TSF JMP .-1 CLA JMP I MERPCH ZERO, 0 EPRINT, 0 DCA T2 EPRLUP, TAD I T2 RTR RTR RTR JMS EPR TAD I T2 JMS EPR ISZ T2 JMP EPRLUP EPR, 0 AND (77 SNA JMP I EPRINT TAD (240 AND (77 TAD (240 JMS MERPCH JMP I EPR PAGE *3200 /LOADS INTO 1600 MERRXR, TEXT \MONITOR ERROR 0 AT \ MERTYP=MERRXR+7 UERRXR, TEXT \USER ERROR 0 AT \ UERTYP=UERRXR+5 EXPLTBL,MON1-1400 MON2-1400 MON3-1400 MON4-1400 MON5-1400 MON6-1400 MON7-1400 MON1, TEXT \CLOSE ERROR\ MON2, TEXT \DIRECTORY I/O ERROR\ MON3, TEXT \DEVICE HANDLER NOT IN CORE\ MON4, TEXT \ILLEGAL USR CALL\ MON5, TEXT \I/O ERROR ON SYS:\ MON6, TEXT \DIRECTORY OVERFLOW\ MON7, TEXT \RESERVED\ /EXECUTION TIME LOADER FOR MONITOR "CHAIN" COMMAND *3400 /EXECUTES IN FIELD 0 IN PAGE 7400 MCHNX, DCA MCHREC /STORE STARTING RECORD # TAD MCHREC DCA I (SOFSET /V3D SAVE STARTING ADDRESS CIF 10 JMS I (200 13 /RESET ALL DEVICE ASSIGNMENTS 0 /BUT DON'T CLEAR OUTPUT FILES CIF 10 JMS I (200 11 /KICK MONITOR OUT AND RESTORE CORE IF NECESSARY JMS MCHRD /PARAMETERS PRESET TO READ CONTROL BLOCK INT0 7200 TAD I (7200 /TEST FOR SAVE FILE! CMA /TEST FOR VALID CCB AND (7740 SZA CLA JMP CHERR TAD I (7201 DCA I (MSTCDF /TRANSFER INFORMATION FROM CONTROL BLOCK CLA IAC TAD I (7202 DCA I (MSTADR /TO PAGE 7600 TAD I (7203 TAD (1000 DCA I (JSBITS TAD (7204 DCA MCHT1 TAD MCHFJM DCA I (MSWITC TAD (TCF DCA I (MSTCDF+1 MCHN1, ISZ I (7200 JMP MCHN2 TAD I MCHT1 DCA I (MREAD+2 ISZ MCHT1 TAD I MCHT1 DCA I (MREAD+1 TAD MCHREC DCA I (MREAD+3 TAD (SHNDLR DCA I (MREAD-1 JMP I (MREAD MCHN2, TAD I MCHT1 DCA MCHADR /SET UP COMMAND TO READ NEXT SEGMENT ISZ MCHT1 TAD I MCHT1 DCA MCHCTL JMS MCHRD /READ IT ISZ MCHT1 JMP MCHN1 /LOOP ON NUMBER OF SEGMENTS MCHRD, 0 JMS I (SHNDLR MCHCTL, 0101 /1 RECORD INTO FIELD 0 STARTING FORWARDS MCHADR, 7200 MCHREC, 0 JMP CHERR /CHAIN ERROR TAD MCHCTL MCHBMP, CLL RTR RTR RTR AND (37 SNA /V3C TAD (40 /0 MEANS FULL 4K READ IAC CLL RAR TAD MCHREC DCA MCHREC JMP I MCHRD MCHT1, 0 MCHFJM, MSTCDF&177+5200 /"JMP MSTCDF" CHERR, ISZ CHERR1 JMP CHERR /LET TTY DIE DOWN ISZ CHERR2 JMP CHERR CHTADC, TAD CHARS SNA JMP I (7600 /DONE..BACK TO MONITOR TLS TSF JMP .-1 CLA ISZ CHTADC /NEXT LETTER JMP CHTADC CHERR1, 0 CHERR2, -6 CHARS, "C;"H;"A;"I;"N;" ;"E;"R;"R;215;212;0 PAGE *3600 RELOC 1400 SAVXX, TAD I SXFLE /STORES SFILE DCA SWFILE JMS I PHNDL /LOAD IN NON SYS HANDLER JMS SWRITE /WRITE OUT CCB TAD MERTST /MINUS THE # OF SEGS OF LT32K CODE DCA I [600 TAD LXR /# OF BLOCKS OF GT 32K SEGS SNA /LXR IS ZERO IF ALL SEGS ARE ABOVE 32K JMP OVR32 TAD I SXFLE /LXR--- COMPENSATES FOR CCB DCA SWFILE SAVE4, TAD I XR DCA SADR CLA CLL CML RAR TAD I XR DCA SCTL SAVE5, TAD SADR RAL SZL SPA CLA /DOES THIS SEGMENT START BELOW 2000? JMP SAVE8 /NO - NOTHING TO WORRY ABOUT TAD SCTL AND T76 SZA CLA /FIELD 0? JMP SAVE8 /NO - SAVE AS IS SAVE6, JMS LOADF0 /LOAD THE FIELD 0 SAVE AREA OVER THE I/O MONITOR SAVE7, CLA CMA TAD SCTL CLL RAL TAD SADR RAL SZL SPA CLA /CHECK WHETHER UPPER LIMIT IS ABOVE 2000 JMP SAVE7A /IT IS - MUST MAKE 2 WRITES TAD SCTL /TOTALLY CONTAINED IN 0-1777 TAD [10 /CHANGE FIELD 0 TO FIELD 1 AND CONTINUE JMP SAVE8A SAVE7A, TAD SCTL /WRITE IN 2 PARTS - DCA TM1 TAD SADR CIA /FIRST PART FROM FIELD 1, EVERYTHING BELOW 2000 TAD [2020 CLL CML RAR DCA SCTL JMS SWRITE CLA CLL CML RTR DCA SADR TAD SCTL /SECOND PART FROM FIELD 0, EVERYTHING ABOVE 2000 AND [3700 CIA TAD TM1 SMA /FULL FIELD SAVE IN F0 MAKES THIS + TAD [4000 /COMPENSATE FOR THAT CASE SAVE8A, DCA SCTL SAVE8, JMS SWRITE ISZ I [600 JMP SAVE4 STA /LXR BECOMES ONE BECAUSE OF CCB TAD LXR /NUMBER OF BLOCKS OF GT32K SEGS SNA CLA JMP I [SAVE12 OVR32, TAD I SXFLE /RESET FILE TO INITIAL BLOCK IAC /COMPENSATE FOR CCB DCA SWFILE TAD [603 /RESET CCB POINTER DCA ADR1 TAD [7000 LXM SAVE4B, TAD I ADR1 /IDENTICAL TO SAVE4 CODE DCA SADR CLA CLL CML RAR TAD I ADR1 DCA SCTL DCA ADR2 /SET UP TO MOVE GREATER THAN 32K CODE DOWN DCA X1 /DITTO DCA SXFLE /INTIALIZE FOR COUNTER TAD SCTL /SET UP CDF FOR MOVE AND T76 /ISOLATE BANK AND FIELD CLL RTR /ADJUST MENT SZL TAD T20 CLL RTL TAD FDC0 DCA .+1 XFSP, 0 /START OF MOVE LOOP TAD I ADR2 CDF 70 /PUT THEM IN FIELD SEVEN DCA I X1 /IT SEEMS LIKE A GOOD FIELD ISZ SXFLE JMP .-5 FDC0, CDF 0 /LOOP IS OFFICIALLY OVER TAD SCTL /ADJUST SWRITE CONTROL WORD AND [7700 TAD [70 /TO FIELD SEVEN DCA SCTL JMS SWRITE ISZ EXTMP /IS THAT ALL THE SEGMENTS?? JMP SAVE4B /NO ---CONTINUE JMP I [SAVE12 /TIME TO EXIT LOADF0, 0 /ISZ F0OVLY /HAS THE FIELD 0 OVERLAY BEEN LOADED BEFORE? /JMP I LOADF0 /EVIDENTLY JMS I [SHNDLR 1010 F0OVLY, 0 /WILL BE 0 IF WE EXECUTE THIS CODE, OF COURSE MTEMP+4 JMP KMONER JMP I LOADF0 SWRITE, 0 JMS I DEVHND SCTL, 4101 SADR, 600 SWFILE, 0 JMP KMONER TAD SCTL CLL RTR RTR RTR AND RO37 SNA TAD RO37 IAC CLL RAR TAD SWFILE DCA SWFILE /BUMP RECORD NUMBER JMP I SWRITE RO37, 37 T76, 76 T20, 20 PHNDL, HNDL SXFLE, SFILE&177+400 RELOC PAGE *4000 /SYSTEM GENERATOR - WRITES STUFF OUT USING SHNDLR WRITE=JMS I SYSHND JMS SYSSWP /SWAP SYSTEM DEVICE HANDLER INTO 7600 WRITE; 4200; 7400; 0; JMP BERR /BOOTSTRAP TAD RBFLAG SZA CLA JMP .+6 WRITE; 4210; DCOUNT; 01; JMP BERR /DIRECTORY WRITE; 5001; 0000; 07; JMP BERR /KEYBOARD MONITOR WRITE; 4610; 0000; MONTOR; JMP BERR /USR WRITE; 4111; 3400; MEOVLY; JMP BERR /"ENTER" OVERLAY WRITE; 4701; 2000; MSOVLY; JMP BERR /SAVE OVERLAY, /ERROR ROUTINE AND "CHAIN" TAD RBFLAG SZA CLA JMP .+13 WRITE; 4101; LDRCTL; MFREE; JMP BERR /ABSLDR CONTROL BLOCK WRITE; 5210; 2000;MFREE+1; JMP BERR /ABSLDR JMS I (4200 /OUTPUT THE DEVICE HANDLERS JMP BERR JMS SYSSWP /SWAP BACK PAGE 7600 CLA CMA HLT CLA JMP I .+1 BERR, 7600 JMS SYSSWP HLT JMP .-1 W6600, 6600 W7600, 7600 SYSSWP, 0 TAD W6600 DCA SYTM1 TAD W7600 DCA SYTM2 SWAPLP, TAD I SYTM1 DCA TMSY TAD I SYTM2 DCA I SYTM1 TAD TMSY DCA I SYTM2 ISZ SYTM1 ISZ SYTM2 JMP SWAPLP JMP I SYSSWP /CONTROL BLOCK FOR ABSOLUTE LOADER LDRCTL, 7777 /ONE CONTIGUOUS LOAD 6213 /STARTING ADDRESS IN FIELD 1 2000 /STARTING LOCATION=12000 6003 /DOES NOT LOAD OVER EITHER MONITOR AREA /ALSO DOES NOT USE THESE AREAS AT COMMAND TIME - TRUE /ONLY FOR FIRST CALL TO COMMAND DECODER 2000 /FIRST(AND ONLY) SEGMENT STARTS AT 2000 1210 /IN FIELD 1 AND IS 10 PAGES LONG IFNZRO LDRCTL-4113 <BLDER,XQX> SYTM1, 0 SYTM2, 0 TMSY, 0 SYSHND, 7607 PAGE *4264 RELOC 664 MERGEX, CDF 10 TAD MERTST SZA CLA JMP MOVEC TAD [1603 /LOADS INTO 600--MERGED--CODE DCA LXR TAD [1603 DCA X1 TAD I [1603 AND T1777 TAD T6000 DCA I [1603 /INITIALIZE STATUS BITS TO NO OVERLOADS TAD I [1600 DCA TEMP1 MERGLP, TAD I LXR AND TX37 CLL RTR /TRANSFORM 'ABCDE' TO 'CDEBA0' RTR SZL /TEST FOR 'B' BANK TAD [400 CLL RAR SZL /TEST FOR 'A' BANK TAD [100 CLL RTR RTR RAR DCA TEMP2 TAD I LXR AND [7400 DCA TMP1 TAD TMP1 DCA I X1 /STORE ADDRESS TAD TMP1 CIA TAD I LXR /FORM UPPER LIM - LOWER LIM CLL RAR TAD TEMP2 /ADD IN FIELD DCA I X1 TAD TMP1 CLL RAL SZL SPA CLA /IS THE LOWER LIMIT < 2000? JMP NXTSEG /NO TAD TEMP2 RAR SZA CLA /YES- IS THE FIELD 0 OR 1? JMP NXTSEG /NO SNL IAC CMA CML RTR AND I [1603 /AND OUT THE PROPER OVERLOAD BIT DCA I [1603 NXTSEG, ISZ TEMP1 JMP MERGLP TAD I T1605 /TEST FIRST SEGMENT FOR GREATER THAN 32K AND [7 SNA CLA /IF GREATER THAN 32K SET JMP MOVEC TAD I [1600 /THE 4000 BIT OF THE FIRST WORD OF THE CCB TO ZERO RAL CLL RAR DCA I [1600 /REMOVED LXM PUT IT IN MOVE UP CODE MOVEC, TAD T1577 DCA LXR TAD T577 DCA X1 TAD [7600 DCA TEMP1 DCA MERTST /SET MOVE I.D. TO ZERO JMP I MVECB /RETURN TIME MVECB, CBMOVE&177+400 T1605, 1605 T1777, 1777 T6000, 6000 T1577, 1577 T577, 577 TX37, 37 RELOC PAGE *7400 NOPUNCH *7600 ENPUNCH /UPPER PAGE OF FIELD 1 - CHOCK FULL OF GOODIES /LIKE THOUSANDS OF TABLES AND THE MONITOR CALL LOCATION MOFILE, ZBLOCK 17 /OUTPUT FILE TABLE - 7600-7616 (3 ENTRIES MAX) /5 WORDS PER ENTRY - DEVICE # AND FILE NAME MIFILE, ZBLOCK 24 /INPUT FILE TABLE - 7617-7642 (10 ENTRIES MAX) /2 WORDS PER ENTRY - DEVICE # AND RECORD # /LAST WORD IN TABLE CONTAINS TERMINATION INDICATOR /(0 FOR CR, 1 FOR ALTMODE) AND HIGH ORDER /PART OF NUMERICAL ARGUMENT MPARAM, ZBLOCK 4 /PARAMETER TABLE - 7643-7646 /FIRST 3 WORDS - MASK OF SWITCHES(A-Z,0-9). /FOURTH WORD - CONTAINS THE LOW ORDER BITS OF /THE NUMERICAL ARGUMENT /TABLE OF DEVICE HANDLERS PRESENTLY IN CORE DVHNDL, 7607;7607;0;0;0;0;0 0;0;0;0;0;0;0;0 MDATE, 0 /HOLDS THE CURRENT DATE- 4 BIT MONTH, /5 BIT DAY, 3 BIT YEAR FROM 1970 MGET, CIF 0 JMS SHNDLR /INST FIELD IS 0 1000 /READ 4 RECORDS INTO FIELD 0 0 /LOCATIONS 0-1777 7 /KEYBOARD MONITOR FOLLOWS DIRECTORY PJSBTS, JSBITS /SERVES AS A HALT (WATCH IT!) SCDCIF, CDF CIF 0 JMP I .+1 KMNTRY /V3D GETS CHANGED TO INIT MCALL1, 0 DCA MARG1 /SAVE AC AS IT MAY CONTAIN AN ARGUMENT RDF /GET CALLING FIELD TAD SCDCIF DCA SMCIF CDF 0 TAD I PJSBTS RAR CDF 10 SZL CLA /DOES JOB USE LOCS 10000-11777? JMP MONRD /NO - DONT SAVE THEM CIF 0 JMS SHNDLR 5010 0 MTEMP HLT MONRD, CIF 0 JMS SHNDLR 610 0 MONTOR SCOPE, HLT /BIT 4 IS A 1 IF CONSOLE IS A SCOPE JMP MSTART /START THE MONITOR UP IN PAGE 0 MRETRN, CIF 0 JMS SHNDLR 1010 /READ 10 RECS INTO FIELD 1 0 MTEMP /TEMP REGION ON SYS HLT /SYS HAS PROBLEMS SMCIF, 0 JMP I MCALL1 MARG1, 0 /TABLE OF USER DEVICE NAMES /ALSO USED BY SYSTEM ODT UDNAME, 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0 DCB, ZBLOCK 17 /DEVICE CONTROL BLOCK - SET IN "CONFIG" /******************************************************** / MAP OF SYSTEM DEVICE AS OF 2/21/73 /******************************************************** / * 256 WORD RECORDS * /******************************************************** / RECORDS CONTENTS / ------- -------- / 0 MONITOR BOOTSTRAP / 1- 6 SYSTEM DIRECTORIES / 7-12 KEYBOARD MONITOR / 13-15 I/O MONITOR(CALLABLE MONITOR) / 16-25 DEVICE HANDLER RECORDS / 26 MONITOR "ENTER" OVERLAY / 27-50 MONITOR SCRATCH AREA FOR SAVING CORE / 51-53 COMMAND DECODER / 54-55 "SAVE WITH ARGUMENTS" AND "DATE" OVERLAYS / 56 MONITOR ERROR ROUTINE / 57 "CHAIN" PROCESSOR / 60-63 SYSTEM ODT / 64 RESERVED FOR EXPANSION /65 CCL REMINISCENSES / 66 USED BY TWO-PAGE SYS HANDLER / 67 USED BY CCL (CCL OVERLAY) / 70-END FILE STORAGE SHNDLR=7607 /ENTRY POINT TO SYSTEMS HANDLER *6600 NOPUNCH *7600 ENPUNCH /SYSTEM HANDLER AND FIELD 0 UPPER PAGE /INCLUDES BOOTSTRAP AND PART OF MONITOR CALL ROUTINE DVHORG=16 /DEVICE HANDLER RECORDS MTEMP=27 MONTOR=13 JMS SHNDLR 5000 /SAVE MONITOR CORE - WRITE 5 RECORDS FROM FIELD 0 0 /(LOCATIONS 0-1777) MTEMP+4 7602 /TROUBLE WITH SYSTEM DEVICE CDF CIF 10 JMP MGET /NOW GO READ IN THE KEYBOARD MONITOR *6744 /INFORMATION ABOUT CURRENT JOB NOPUNCH *7744 ENPUNCH JFIELD, 6203 /A CDF CIF N INSTRUCTION TO START THE JOB JSTART, 7600 /THE STARTING ADDRESS JSBITS, 1000 /VARIOUS STATUS BITS - USED FOR OPTIMIZATION /BIT 4000 - JOB DID NOT LOAD INTO 00000-01777 /BIT 2000 - JOB DID NOT LOAD INTO 10000-11777 /BIT 1000 - JOB IS NOT RESTARTABLE /BIT 400 - DOESN'T DESTROY BATCH MONITOR /BIT 2 - JOB DOES NOT USE LOCS 00000-01777 /BIT 1 - JOB DOES NOT USE LOCS 10000-11777 SOFSET, 0 /FOR FUTURE(AND MAYBE PRESENT) USE /DATA BREAK FILLERS FOR SYSTEM BOOTSTRAP 7750 7751 7752 7753 7754 7755 /MONITOR PATCH TO HELP BLEEP LOADER 0 /ADDRESS OF HANDLER FOR DEVICE USED MREAD, HLT 0 0 0 HLT MSWITC, JMP .+6 /ZEROED IF PG 7000 (HANDLER) MUST BE READ OVER JMS SHNDLR 0300 7000 /THIS AREA MODIFIED BY ODT MTEMP+6 OS78, HLT /BIT 4 IS A 1 IF OS/78 IS RUNNING MSTCDF, CDF CIF 0 TCF /EXIT WITH A CLEAR CONSCIENCE(ALSO A CLEAR FLAG) JMP I .+1 MSTADR, 0 SBLOCK, 0 BIPCCL, 0 /MORE STATUS BITS. /BIT 1: 1=> BATCH IS IN PROGRESS /BITS 6-8: FIELD OF BATCH MONITOR /HIGHEST CORE FIELD USED BY OS/8 /OR 0 TO MEAN OS/8 MAY USE ALL OF CORE *0 VERSNO /OS/8 VERSION NUMBER CIF 30 JMP .-1 /HIGROUND SUPPORT KMONER, CLA TAD [7605 DCA ERRET JMS I [PRMESG TEXT /?ERROR/ /THE FOLLOWING REGISTERS ARE SET TO VITAL INITIAL VALUES. TO ALTER /THESE VALUES IS TO BRING DISASTER DOWN UPON YOUR HEAD! LXR, PMSRST-1 X1, MSWITC /THESE TWO ARE USED AT INITIALIZATION. ADR1, RUN8-1 ADR2, RUN8&177+7377 /USED DURING R, AND RUN COMMANDS XR, AMFLAG, 0 /1 MEANS SAW ALTMODE /MUST NOT MOVE FOR CCL AND BATCH *20 RBFLAG, 0 /MUST BE AT LOCATION 20 TEMP2, -7 SYSTEM, 7700 PCH, PRINT GLINE, XGLINE GNAME, GETNAM DEVHND, 7607 FUDJMP, MSTCDF&177+5200 P6203, 6203 TMP, PATCHLEV /MONITOR PATCH LEVEL MUST BE AT LOC 31 FOR CCL PGTOUT, GETOUT ERRET, PCRLF /MUST BE AT 33 FOR CCL /THE FOLLOWING LOCS. ARE TEMPORARIES. HOWEVER, THERE IS NOW /VITAL ONCE ONLY CODE TO HELP THE BATCH PROCESSOR. THIS CODE IS /READ IN EVERY TIME THE KEYBOARD MONITOR IS RE-READ. NM1, 203 /THIS MUST BE A 203! BATCH, /ENTRY TO READ NEW BATCH MONITOR NM2, JMS I [7607 /THE BATCH INITIALIZER ALTERS SOME VALUES NM3, 610 /IN THIS LIST...THIS ONE********** NM4, 0 /THIS ONE*****GETS ADDRESS OF BOS. TEMP1, 13 /******GETS RECORD OF BOS***** TM1, SKP CLA /ERROR. DON'T RUN BATCH TMP1, JMP BCHGO NMCT, DCA I KM1 /CLEAR BATCH FLAG. PN, JMP KMONER PRDSW, KM1, 7777 BCHGO, RUNSW, CIF CDF 0 DIGFLG, JMP I .+1 SENTER, KMINIT /GETS ENTRY POINT (BOS) KRCHK, RCHK EXTMP, 0 MERTST, 0 SPTST, -1 /-1 USED IN RUN CODE FIELD 1 /FIELD 1 /OS/8 MONITOR - MONITOR ROUTINES /THIS MONITOR IS CALLED INTO CORE BY A JMS 7700 IN FIELD 1 /IT REPLACES CORE FROM 200-1777 /AND INTERPRETS THE WORDS AFTER THE JMS AS A MONITOR FUNCTION /MONITOR FUNCTIONS ARE ASSIGN,LOOKUP,ENTER,ETC. MAXCMD=13 *200 MONITO, 0 /MONITOR SUBROUTINE DCA MACARG /STORE AC ARG DCA USERFG /SET FLAG TO INDICATE WE WERE CALLED DIRECTLY RDF /GET CALLING FIELD TAD [CDF CIF 0 DCA FGETX MRENTR, TAD FGETX DCA FPUTX /FOR LOADING AND STORING CALLING SEQUENCE JMS FGET /GET FIRST ARGUMENT[AND SET DATA FIELD 1) ISZ MONITO CLL TAD [-MAXCMD-1 SZL JMP MERROR TAD JMPMAX DCA .+1 /BRANCH TO APPROPRIATE ROUTINE WITH LINK ON FGET, 0 /MUST PRESERVE LINK TAD MONITO JMS FGETW JMP I FGET /MONITOR COMMAND DISPATCH TABLE MUST BE JAMMED BEFORE 'FPUT' MERROR MASSIGN MLOOKUP MENTER MCLOSE MCD MCHAIN MERR MESCAP MESCPR MASGN MRSETP, MRESET FPUT, 0 /MUST FOLLOW LAST ADDRESS IN JUMP TABLE FPUTX, 0 DCA I MONITO CDF CIF 10 JMPMAX, JMP I FPUT MEOERR, ISZ MERRNO MIOERR, ISZ MERRNO MERROR, ISZ MERRNO ISZ MERRNO ISZ MERRNO ISZ MERRNO MERR, CLA CIF 0 JMS I [SHNDLR 0210 1400 MERRTN HLT JMP I .-3 MCD, CLA CLL CML RAR JMS CDSWAP /SWAP OUT CORE IF NECESSARY JMS FGET DCA T1 CIF 0 JMS I [SHNDLR 0601 0 MCDREC JMP MIOERR TAD FPUTX CDF CIF 0 JMS I [200 DCA FPUTX TAD FPUTX DCA FGETX JMS CDSWAP /RESTORE THE SWAPPED CORE IF NECESSARY STL /LINK MUST BE ON AT MRESET JMP I MRSETP /AFTER CD, RESET DEVICE AREA MCHAIN, JMS FGET DCA T1 /BUFFER THE ARGUMENT CIF 0 JMS I [SHNDLR 0101 7400 MRUNRC JMP MIOERR TAD T1 /LOAD THE BUFFERED ARGUMENT CDF CIF 0 JMP I .-5 MLNOTF, CLA ISZ MONITO MNEXT, TAD USERFG MESCAP, CLL RAR TAD MONITO DCA I [7700 TAD FPUTX DCA I [SMCIF CLA IAC CML CDF 0 AND I [JSBITS CDF 10 RAR SZL SPA CLA /RESTORE CORE IF USERFG=1 AND JSW[11]=0 JMP I [SMCIF JMP I [MRETRN MESCPR, CLL CML JMP MESCAP+1 FGETW, 0 DCA FPUT FGETX, HLT TAD I FPUT CDF CIF 10 JMP I FGETW CDSWAP, 0 TAD ME1000 /FORM READ OR WRITE OPERATION DCA MCDCTL CDF 0 TAD I [JSBITS CDF 10 RTR SZL CLA /IS IT NECESSARY TO SAVE CORE? JMP I CDSWAP /NO CIF 0 JMS I [SHNDLR MCDCTL, 0 0 MTEMP+4 JMP MIOERR JMP I CDSWAP EOVFLO, CIF 0 JMS I [SHNDLR 0111 ME1000, 1000 /ENTER OVERLAY LOADS OVER ENTER (NATCH) MEOVLY JMP MIOERR JMP I ME1000 *400 /ASSIGN PROCESSOR - TRANSLATE DEVICE NAME INTO DEVICE NUMBER /(IF NECESSARY),GET DEVICE HANDLER INTO CORE(IF NECESSARY) /AND ADJUST TABLES(IF NECESSARY). IS THIS REALLY NECESSARY? MASGN, CLA IAC MASSIGN, DCA ASFLAG TAD MACARG SZA /IS DEVICE NUMERIC OR SYMBOLIC? JMP DFOUND /NUMERIC JMS I [FGET /GET HIGH ORDER 2 CHARS OF NAME ISZ I [MONITO SNA JMP I [MRTRN+1 /FIRST WORD OF NAME MUST BE NON-ZERO DCA NAME JMS I [FGET SNA /IS NAME >2 CHARACTERS LONG? JMP NOHASH /NO - DON'T HASH TAD NAME RAL CLL CML RAR /FORCE SIGN BIT OF HASH NAME ON DCA NAME NOHASH, TAD [UDNAME-1 /SEARCH USER NAME TABLE FIRST DSRCH, DCA XR TAD [-17 DCA T2 DSRCLP, TAD I XR CIA TAD NAME SNA CLA JMP DSFND ISZ T2 JMP DSRCLP TAD XR SMA CLA /WHICH TABLE DID WE JUST SEARCH? JMP I [MRTRN+1 /SYSTEM TABLE - ERROR TAD [SDNAME-1 JMP DSRCH /GO SEARCH SYSTEM TABLE DSFND, TAD T2 TAD [20 JMS I [FPUT /PUT NUMBER INTO CALLING SEQUENCE JMS I [FGET /GET IT BACK IN AC, BUMPING POINTER ISZ I [MONITO DFOUND, JMS I [MCKDEV /DETERMINE ITS VALIDITY (NON-ZERONESS) /AND FORM POINTERS SNA /IS THE DEVICE HANDLER IN CORE? TAD I T2 SNA /DOES A HANDLER EXIST FOR THE DEVICE? JMP I [MLNOTF /NO - SAME AS THE DEVICE NOT EXISTING CMA RAL /GET THE COMPLEMENT OF THE HIGH ORDER BIT INTO THE LINK SNL CLA /TWO PAGE HANDLER?(IF HANDLER IS IN CORE, /THIS TEST IS RANDOM BUT WE DON'T CARE) TAD [100 /YES - FORCE A TWO-PAGE READ TAD [100 DCA DVHCTL TAD T1 DCA T7 /SAVE T1 AS WE WILL DESTROY IT LATER TAD I T1 TAD ASFLAG SZA CLA /DOES HE ACTUALLY WANT US TO LOAD THE SILLY THING? JMP AFINIS /NO - HE MUST HAVE TASTE. JMS I [FGET /FETCH PAGE IN WHICH HANDLER IS TO BE LOADED RAR /GET THE LINK, WHICH HAS BEEN UNTOUCHED SINCE WE /PUT THE "TWO PAGE HANDLER" FLAG INTO IT SNL SMA /IF THIS HANDLER IS TWO-PAGE, IS HE ALLOWING IT TO BE? JMP I [MLNOTF /NO - GIVE AN ERROR RETURN RAL /YES - ROTATE BACK AND [7600 /MAKE IT LEGAL DCA DVHLOC JMS GETREC DCA DVHREC CIF 0 JMS I [SHNDLR DVHCTL, 0 /READ ONE OR TWO PAGES INTO FIELD 0 DVHLOC, 0 DVHREC, 0 JMP I [MIOERR /SYSTEM DEVICE ERROR /NOW GO THROUGH THE TABLE OF AVAILABE HANDLERS TAD [-17 /AND MARK OFF THOSE WHICH ARE NOW IN CORE DCA T4 DVHCLP, TAD T4 JMS I [MCKDEV /LOW ORDER BITS OF T4 GO THROUGH 1-17 CMA TAD DVHLOC CLL CML RAR TAD DVHCTL /IF A HANDLER ENTRY POINT IS WITHIN 200 WORDS OF THE SMA CLA /LOADING ADDRESS (400 FOR A TWO-PAGE HANDLER) DCA I T1 /MARK IT AS WIPED JMS GETREC CIA TAD DVHREC SZA CLA JMP NOTINC TAD I T2 AND [177 TAD DVHLOC DCA I T1 NOTINC, ISZ T4 JMP DVHCLP AFINIS, TAD I T7 JMP I [MRTRN /STORE HANDLER ADDRESS AND EXIT GETREC, 0 TAD I T2 /GET RECORD OF DEVICE HANDLER CLL RTL RTL RTL /EXTRACT THE RECORD NUMBER AND [17 TAD [DVHORG-1 /ADD THE BASE OF DEVICE HANDLER STORAGE JMP I GETREC MCKDEV, 0 /MUST PRESERVE LINK AND [17 SNA JMP I [MERROR /DEVICE 0 IS ILLEGAL DCA NAME TAD NAME TAD [SDVHND-1 /FORM POINTER INTO HANDLER IMAGE TABLE DCA T2 TAD NAME TAD [DVHNDL-1 DCA T1 TAD NAME TAD [DCB-1 DCA T8 /FORM POINTER TO DCB ENTRY FOR DEVICE TAD I T1 JMP I MCKDEV IFNZRO .-564 <REASSEMBLE CONFIG> SDNAME, ZBLOCK 17 /SYSTEM DNAME TABLE - SET UP BY "CONFIG" IFZERO .+200&1000 <*600> /LOOKUP PROCESSOR - GETS THE STARTING BLOCK OF AN INPUT FILE /ON A SPECIFIED DEVICE.SKIPS IF FILE WAS FOUND OR DEVICE /IS NOT FILE ORIENTED MLOOKUP,CLL /SET RDCAT MODE TO INPUT JMS MRDCAT JMP ERETRN /NON-FILE STRUCTURED DEVICE JMS MDSRCH /SEARCH THE DIRECTORY FOR THE FILE JMP MRTRN+1 /NOT FOUND - TAKE ERROR RETURN LRETRN, TAD T5 CIA TAD I [DORG /CONVERT T5 TO A RECORD NUMBER ERETRN, JMS I [FPUT ISZ I [MONITO TAD T6 CIA /STORE FILE LENGTH AS A NEGATIVE NUMBER MRTRN, JMS I [FPUT /THIS CODE IS JUMPED TO BY SEVERAL ROUTINES MRTRN2, ISZ I [MONITO JMP I [MLNOTF MRDCAT, 0 SZA JMP MRDREN /NOT THE FIRST SEGMENT - DON'T SET UP POINTERS DCA T5 /ZERO STARTING BLOCK NUMBER DCA T6 /ZERO FILE LENGTH TAD MACARG /GET DEVICE NUMBER FROM AC JMS I [MCKDEV /CHECK LEGALITY AND FORM POINTERS SNA JMP I [MERROR+1 /DEVICE HANDLER IS NOT IN CORE - ERROR DCA T9 /ADDRESS OF DEVICE HANDLER JMS I [FGET DCA T4 /STORE THE POINTER TO THE FILE NAME IN T4 SNL CML RAR RTR /FORM A MASK OF 2000 OR 1000 DEPENDING ON LINK AND I T8 SZA CLA /TEST FOR READ-ONLY(L=1) OR WRITE-ONLY(L=0) JMP MRTRN+1 /FAILED THE TEST - ERROR RETURN TAD I T8 SMA CLA JMP I MRDCAT /DEVICE IS NOT FILE-ORIENTED ISZ MRDCAT CLA IAC MRDREN, DCA MCATRC /STORE SEGMENT NUMBER TAD T9 /USE LOW ORDER BITS AND [177 /OF DEVICE HANDLER ENTRY POINT CLL RTL /AND THE REQUESTED SEGMENT NUMBER RAL /TO FORM A "UNIQUE" KEY TAD MCATRC /FOR THIS SEGMENT OF THIS DIRECTORY /(THE UNIQUENESS DEPENDS ON EACH HANDLER HAVING A DIFFERENT /STARTING OFFSET IN ITS PAGE) CIA TAD OLDT9 /COMPARE KEY AGAINST KEY OF CURRENT SEGMENT SNA /ARE THEY THE SAME? JMP INLRDY /YES - DON'T READ SEGMENT, ITS IN CORE CIA TAD OLDT9 DCA OLDT9 /STORE THE KEY OF THE NEW IN-CORE SEGMENT CLA CLL CML RAR /CHANGE WRITE TO READ JMS MWRCAT INLRDY, TAD I [DCOUNT CML CMA RAL SZL SPA JMP JMPME2 CMA CML RAR /NEW V3 DIRECTORY VERIFYER DCA NFILES /FIRST WORD IN CATALOG = -# OF FILES IN CATALOG TAD [DPROPR-1 DCA XR /SET XR TO POINT TO FIRST FILE ENTRY JMP I MRDCAT /RETURN TO BUMPED ADDRESS MDSRCH, 0 FSRCLP, TAD I XR SNA CLA /EMPTY SPACES HAVE A ONE WORD ZERO DIRECTORY ENTRY JMP SKPMTF /SO SKIP THE 4 WORD COMPARE ON THEM CLA CMA TAD XR DCA XR TAD [-4 DCA T6 TAD T4 DCA T7 SRCWDL, TAD T7 JMS I [FGETW CIA TAD I XR SZA CLA /COMPARE ENTRY AGAINST ARGUMENT(8 CHARACTERS) JMP NXTFIL ISZ T7 ISZ T6 JMP SRCWDL JMS BUMPXR /SKIP GARBAGE WORDS TAD I XR SNA JMP SKPMTF+1 /UNCLOSED OUTPUT FILES DONT COUNT CIA DCA T6 /STORE FILE LENGTH ISZ MDSRCH JMP I MDSRCH NXTFIL, TAD T6 IAC JMS BUMPXR /SKIP REST OF NAME AND GARBAGE WORDS SKPMTF, TAD I XR /GET LENGTH OF THIS ENTRY TAD T5 DCA T5 /ADD TO BLOCK STARTING ADDRESS ISZ NFILES JMP FSRCLP DCA T5 /RE-INITIALIZE BLOCK NUMBER FOR NEXT SEGMENT TAD I [DLINK /DIRECTORY EXHAUSTED - ANY MORE? SZA JMP MRDREN JMP I MDSRCH BUMPXR, 0 /ROUTINE TO SKIP (DWASTE+AC) WORDS TAD I [DWASTE CIA /DWASTE IS NEGATIVE AND SO IS AC TAD XR DCA XR JMP I BUMPXR MWRCAT, 0 TAD [4210 DCA CATCTL CIF 0 JMS I T9 CATCTL, 4210 /WRITE 2 RECORDS FROM FIELD 1 1400 MCATRC, 1 JMPME2, JMP I [MERROR+2 /CANNOT REWRITE CATALOG JMP I MWRCAT IFNZRO .-772 <REASSEMBLE CONFIG> /USED TO BE 766 SDVHND, ZBLOCK 17 /DEVICE HANDLER INFORMATION TABLE - SET BY CONFIG IFZERO 1000&. <*1000> /ENTER PROCESSOR FOR MONITOR /FIND A HOLE IN THE DIRECTORY LARGE ENOUGH TO ACCOMODATE THE FILE /AND STICK IT IN. MAKE A NOTE THAT WE DID SO FOR THE /"CLOSE" PROCESSOR. MENTER, DCA EPASS /SET UP FOR PASS 1 JMS I [MRDCAT /READ CATALOG AND SET UP NFILES AND XR JMP I [ERETRN /NON-FILE-STRUCTURED DEVICE JMS I [CONSOL DCA T2 /INTIIALIZE STARTING BLOCK NUMBER COUNTER TAD [DPROPR-1 DCA XR /RESTORE XR (CONSOLIDATOR DESTROYED IT) TAD MACARG CLL RTR RTR AND [377 /GET REQUESTED LENGTH FROM AC BITS 0-7 CIA DCA T3 /T3=REQUESTED LENGTH. IF T3=0, MEANS RETURN /LARGEST EMPTY SPACE ON TAPE. IF T3<>0, MEANS RETURN /SMALLEST BLOCK OF LENGTH =>T3. TAD I T8 /GET FCB ENTRY AND [7 SZA CLA /ANY ACTIVE TENTATIVE FILES ON THIS DEVICE? JMP I [MRTRN+1 /YES - TAKE ERROR RETURN MELOOP, TAD I XR SNA CLA JMP MEMPTY /EMPTY SPACE - LOOK AT LENGTH MTHREE /OCCUPIED - IGNORE JMS I [BUMPXR TAD I XR MELEND, TAD T2 DCA T2 /UPDATE T2 TO STARTING BLOCK # OF NEXT ENTRY ISZ NFILES JMP MELOOP /GO TO NEXT ENTRY /DIRECTORY BLOCK EXHAUSTED TAD EPASS SZA CLA /WHAT PASS ARE WE IN? JMP EFINUP /SECOND PASS - THIS IS FOR KEEPS TAD I [DLINK /FIRST PASS SZA /ANY MORE SEGMENTS? JMP I [MRDREN /YES - CONTINUE /DONE - SEE IF OUR BEST IS GOOD ENOUGH. TAD T4 JMS I [FGETW SZA CLA /CHECK THAT FIRST WORD OF NAME IS NON-ZERO TAD T6 SNA CLA /AND THAT WE FOUND WHAT WE WANTED JMP I [MRTRN2 /OTHERWISE GIVE ERROR RETURN TAD ASFLAG /GET NUMBER OF BEST SEGMENT ISZ EPASS /AND RESTART THE ALGORITHM IN PASS 2 JMP I [MRDREN /(TAKES LESS SPACE THAN SAVING XR AND NAME) /EVERYTHING IS SET UP - PERFORM THE ACTUAL ENTRY OPERATION EFINUP, TAD XR DCA T1 TAD [-4 JMS I [BUMPXR TAD I [DWASTE CIA TAD XR /CATALOG MUST HAVE ROOM FOR ONE MORE FILE TAD [-1772 /AFTER THIS FILE IS ENTERED SMA CLA /WILL NEW ADDITION OVERFLOW CATALOG? JMP I [EOVFLO /YUP - CALL OVERLAY TO EXTEND DIRECTORY MELP2, TAD I T1 /MOVE REST OF CATALOG UP DCA I XR /TO CREATE SPACE FOR NEW ENTRY CLA CMA TAD T1 DCA T1 CLA CMA CLL RAL TAD XR DCA XR TAD T1 CIA CLL CML TAD NAME SZA CLA /HAVE WE PUSHED UP EVERYTHING? JMP MELP2 /NO, KEEP PUSHING TAD [-4 DCA T1 /NOW MOVE THE USERS FILE NAME TAD NAME DCA XR TAD T4 JMS I [FGETW /[IN THE USERS FIELD, OF COURSE) DCA I XR ISZ T4 ISZ T1 /INTO THE EMPTY SPACE JUST CREATED JMP .-5 TAD I [MDATE /PUT DATE OF CREATION INTO FILE NAME DCA I XR /THIS WILL BE DESTROYED IF DWASTE=0 IAC /ADJUST XR BUMP BECAUSE OF DATE STORE JMS I [BUMPXR DCA I XR /GIVE THE NEWLY ENTERED FILE A LENGTH OF 0 TAD XR /PUT A POINTER TO THE LENGTH WORD OF THE DCA I [DFLAG /NEW ENTRY INTO THE DIRECTORY HEADER CLA CMA TAD I [DCOUNT DCA I [DCOUNT /INCREASE THE FILE COUNT BY 1 TAD I T8 TAD ASFLAG DCA I T8 /SIGNAL AN OPEN OUTPUT FILE ON THIS DEVICE JMS I [MWRCAT /WRITE THE ALTERED CATALOG BACK OUT JMP I [LRETRN /STORE ARGS BACK JUST LIKE "LOOKUP" MEMPTY, TAD I XR CIA CLL DCA T1 /SAVE LENGTH OF CURRENT ENTRY TAD T3 TAD T6 CLA /LINK NOW EQUALS BEST LENGTH>=DESIRED LENGTH TAD T3 SNA CML /IF DESIRED LENGTH=0 WE ALWAYS WANT MAXIMUM TAD T1 CLA CML /LINK IS NOW ON IF DESIRED LENGTH IS NOT IN BETWEEN /BEST LENGTH AND CURRENT LENGTH TAD T1 CIA TAD T6 SZL SNA CLA /TAKE EITHER MIN OR MAX OF BEST AND CURRENT LENGTHS, /DEPENDING ON WHETHER LINK IS ON OR OFF JMP MNOCHG /MIN(MAX)=BEST - NOTHING TO DO TAD T1 DCA T6 /MAKE CURRENT ENTRY NEW "BEST" CLA CLL CMA RAL TAD XR DCA NAME /REMEMBER CATALOG LOCATION TAD I [MCATRC DCA ASFLAG /ALSO DIRECTORY SEGMENT NUMBER TAD T2 DCA T5 /AND STARTING BLOCK NUMBER MNOCHG, TAD T1 CIA JMP MELEND /GO UPDATE THE BLOCK NUMBER /CLOSE PROCESSOR - CLOSES AN OUTPUT FILE WHICH WAS OPENED /BY THE "ENTER" CALL -- ARGUMENTS ARE THE DEVICE NUMBER AND THE /CLOSING LENGTH OF THE FILE. PERFORMS A DIRECTORY CLEANUP AFTER /CLOSING THE FILE. IF AN ENTRY ALREADY EXISTS WITH THE NEW FILE'S /NAME IT IS DELETED. (CLOSE MAY BE USED AS A "DELETE" COMMAND /ONLY IF NO OUTPUT FILE WAS ENTERED). AN ERROR RETURN IS /GIVEN IF THE CLOSING LENGTH IS TOO BIG OR IF THERE WAS NEITHER /AN ACTIVE TENTATIVE FILE OR AN OLD FILE TO DELETE. MCLOSE, JMS I [MRDCAT /GET THE CATALOG JMP CRETRN /NON-FILE STRUCTURED DEVICE - RETURN NORMALLY CLA IAC /GET THE NEXT WORD IN THE CALLING SEQUENCE JMS I [FGET DCA T1 /GET CLOSING LENGTH AND STORE IT AWAY JMS I [MDSRCH /SEARCH FOR THE OLD COPY JMP NODLET /NO OLD COPY MTHREE TAD I [DWASTE JMS SQUISH /SQUISH OUT 3+#WASTE WORDS OF THE OLD COPY DCA I XR2 /AND MAKE THE OTHER TWO INTO AN EMPTY TAD T6 /FILE ENTRY WITH THE SAME LENGTH CIA DCA I XR2 /AS THE OLD COPY TAD I T8 AND [7 SNA /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE JMP EOCLOS /NO - FINISH UP AND GET OUT CIA /GET THE SEGMENT NUMBER WE WANT TAD I [MCATRC SNA CLA JMP .+3 JMS CONSOL JMS I [MWRCAT /NO - WRITE OUT THE ONE WE SQUISHED TAD I [DFLAG /GET LOCATION OF TENTATIVE FILE CIA CLL TAD XR2 SZL CLA /IS THE ENTRY TO BE CLOSED ABOVE THE ONE JMP .+3 /WE JUST DELETED? MTHREE /YES - MOVE THE POINTER DOWN TAD I [DWASTE /TO COMPENSATE FOR THE SQUISHING TAD I [DFLAG /THE POINTER WILL NOW POINT DCA I [DFLAG /TO THE LENGTH WORD. /(THIS WAS WASTED WORK UNLESS THE CORRECT SEGMENT IS IN CORE) NODLET, TAD I T8 AND [7 SNA /IS THERE AN OPEN OUTPUT FILE ON THIS DEVICE? JMP I [MRTRN+1 /WHAT DID HE CALL US FOR? - ERROR JMS I [MRDCAT /YES - READ IN THE CORRECT SEGMENT TAD I [DFLAG DCA T4 /T4 POINTS TO THE LENGTH OF THE TENTATIVE ENTRY TAD T1 CIA /IF T1=0, NEW ENTRY WILL BE DELETED AUTOMATICALLY DCA I T4 /DURING CONSOLIDATION ISZ T4 ISZ T4 CLL CML TAD T1 TAD I T4 /SUBTRACT CLOSING LENGTH FROM FREE BLOCK ADJACENT TO ENTRY SNL SZA JMP I [MERROR+3 /THIS CREEP HAS GONE AND DESTROYED HIS TAPE DCA I T4 EOCLOS, JMS CONSOL /CONSOLIDATE THE DIRECTORY TAD [7770 AND I T8 DCA I T8 SKP CRETRN, TAD [7600 /DO A WRITE OF 0 PAGES. (MAGTAPE) JMS I [MWRCAT ISZ I [MONITO JMP I [MRTRN2 /CONSOLIDATOR - CHECKS FOR ENTRIES OF LENGTH 0 AND DELETES THEM. /ALSO CHECKS FOR ADJACENT FREE AREAS AND COMBINES THEM. CONSOL, 0 TAD [DPROPR-1 DCA XR TAD I [DCOUNT DCA T7 /T7 = FILE COUNT CONLP, TAD I XR SNA CLA /EMPTY FILE? JMP CONMTF /YES - GO CHECK FOR NULL AND 2 IN A ROW MTHREE JMS I [BUMPXR /GET PAST THE GARBAGE WORDS TAD I XR /GET COUNT SZA CLA /WOULD THIS HAPPEN TO BE A NULL FILE? JMP CONLPT /NAH, GO TO NEXT ONE TAD [-5 /YEAH, REMOVE IT ENTIRELY TAD I [DWASTE /INCLUDING THE WASTE WORDS SQCOMN, JMS SQUISH ISZ I [DCOUNT /BUMP DOWN FILE COUNT IN DIRECTORY ISZ NFILES /AS WELL AS THE TEMPORARY ONE IN PAGE 0 NOP /V3 RL INSISTS JMP CONSOL+1 /REPEAT ENTIRE CONSOLIDATION - THIS DELETION MAY /HAVE BROUGHT TWO FREE ENTRIES TOGEHER / THE ABOVE NOP FIXES THE KILLER CLOSE BUG CONLPT, ISZ T7 JMP CONLP /MORE FILES - KEEP PLUGGING JMP I CONSOL /RETURN FROM CONSOLIDATOR CONMTF, TAD I XR /IS THIS FREE ENTRY NULL? SNA JMP SQTRIV /YES - SQUASHITLIKEABUG DCA T2 /NO - SAVE LENGTH TAD XR DCA SQUISH /SAVE POSITION OF LENGTH WORD ISZ T7 /WAS IT THE LAST FILE? SKP /NO, THEN THERE IS ONE AFTER IT(GOOD THINKING!) JMP I CONSOL /YES - RETURN FROM CONSOLIDATOR TAD I XR SZA CLA /TWO EMPTIES IN A ROW? JMP CONLP+3 /NO - SLIP BACK INTO LOOP TAD I XR TAD T2 /YES - COMBINE LENGTHS DCA I SQUISH /STORE BACK IN FIRST LENGTH WORD AND SQUISH SECOND ENTRY SQTRIV, CLA CMA CLL RAL JMP SQCOMN /SQUISH OUT 2 WORDS MRESET, TAD [-17 DCA T3 MRSETL, TAD T3 JMS I [MCKDEV /LINK MUST BE ON AT THIS POINT TAD [200 SZL CLA /ZERO ALL DEVICE HANDLER SLOTS THAT AREN'T RESIDENT DCA I T1 JMS I [FGET SZA CLA TAD [7 CMA STL AND I T8 DCA I T8 /DELETE THE "FILE CURRENTLY OPEN" FLAG IF ASKED ISZ T3 JMP MRSETL JMP I [MNEXT /SUBR TO COLLAPSE DIRECTORY AFTER A POINT SQUISH, 0 TAD XR DCA XR1 CLA CLL CMA RAL TAD XR1 DCA XR2 /SET UP XR2 FOR CHANGING SQUISHED ENTRY SQLOOP, TAD I XR DCA I XR1 /MOVE DOWN ONE WORD TAD XR TAD [-1777 SZA CLA /AT END YET? JMP SQLOOP /NO, KEEP GOING JMP I SQUISH *1400 /INITIAL DIRECTORY FOR MONITOR /DEFINES OS/8 ABSOLUTE LOADER (ABSLDR.SV) DCOUNT, -2 /TWO ENTRIES DORG, MFREE /FILE STORAGE STARTS AT BLOCK "MFREE" DLINK, 0 /THIS IS THE ONLY DIRECTORY RECORD DFLAG, 0 /THERE ARE NO OPEN OUTPUT FILES ON THIS DEVICE DWASTE, -1 /# OF WASTED WORDS PER ENTRY DPROPR, 0102 /AB 2314 /SL 0422 /DR 2326 /.SV 3017 /V3D ENCODING FOR 1-JUN-77 -6 /SIX BLOCKS LONG( 1 BLOCK = 256 WORDS) 0 /EMPTY SPACE -1 /OVERLAYED BY DEVICE DEPENDENT PART WITH LENGTH IFNZRO .-1415 <CNFER,QQQ> *3400 /"ENTER" OVERLAY TO USR - RUNS IN 11000 JMP .+3 MSEGLM, -7 /# DIRECT. SEGS NEWLEN, -10 MEOVLP, TAD I [DLINK SNA CLA JMP MELAST /LAST SEGMENT - MUST CREATE A NEW ONE ISZ I [DCOUNT /BUMP ENTRY COUNT DOWN JMS I [MWRCAT /WRITE OUT THIS SEGMENT JMS MSKIPF /FIND END OF SHORTENED DIRECTORY DCA MEFCNT /PREPARE TO TRANSFER LAST ENTRY TAD (MEOVLS-1 DCA XR1 /INTO NEXT DIRECTORY SEGMENT TAD I XR DCA I XR1 ISZ MEFCNT /THROUGH A BUFFER AT LOC 11200 TAD XR CIA TAD T1 /T1 WAS SET UP BY "ENTER" SZA CLA JMP .-7 TAD I T1 /GET LENGTH OF MOVED ENTRY DCA MEOCNT TAD I [DLINK JMS I [MRDCAT /READ NEXT SEGMENT JMS I [CONSOL /MAKE SURE IT IS AT ITS SMALLEST TAD I [DORG TAD MEOCNT DCA I [DORG /BUMP FILE ORIGIN DOWN JMS MSKIPF /FIND LAST LOC IN NEW SEGMENT MELP3, TAD XR DCA METMP1 TAD XR TAD MEFCNT DCA METMP2 /PREPARE TO PUSH ALL ENTRIES UP TAD I METMP1 DCA I METMP2 /DO THE PUSHING STA TAD XR DCA XR TAD XR TAD (-DWASTE SZA CLA /ARE WE THROUGH? JMP MELP3 /NO TAD (MEOVLS-1 DCA XR /PREPARE TO MOVE THE SAVED ENTRY INTO THE CLA CMA /NEW SEGMENT TAD I [DCOUNT DCA I [DCOUNT /INCREASE ENTRY COUNT OF NEW SEGMENT TAD MEFCNT CIA MECOMN, DCA MEFCNT /STORE NUMBER OF WORDS TO MOVE TAD [DWASTE DCA XR1 TAD I XR DCA I XR1 ISZ MEFCNT JMP .-3 /MOVE THE ENTRY IN JMS MSKIPF TAD XR DCA T1 /T1=LAST LOC IN SEGMENT TAD I [DWASTE CIA TAD XR TAD [-1772 SMA CLA /HAVE WE MADE THIS SEGMENT TOO BIG? JMP MEOVLP /YES - LOOP UNTIL WE GET IT RIGHT JMS I [MWRCAT /WRITE OUT NEW SEGMENT JMP MEOXIT /READ IN ENTER AND CONTINUE MWRONG, IAC MELAST, TAD NEWLEN DCA METMP1 /LENGTH OF NEW SEGMENT TAD METMP1 CIA TAD I [DCOUNT SMA /WERE THERE "NEWLEN+1" JMP MWRONG /NO - SET OUR SIGHTS LOWER DCA I [DCOUNT /ADJUST LENGTH OF OLD SEGMENT JMS MSKIPF /FIND BOUNDARY LOC BETWEEN SEGMENTS TAD I [MCATRC IAC DCA I [DLINK /LINK THE OLD LAST SEGMENT TO TAD I [DLINK /THE NEWLY CREATED ONE TAD MSEGLM SMA CLA JMP I (MEOERR /PROVIDED THAT THERE IS ROOM FOR ANOTHER JMS I [MWRCAT /WRITE OUT THE NEXT-TO-LAST SEGMENT ISZ I [MCATRC /BUMP RECORD NUMBER FOR NEXT WRITE ISZ OLDT9 /LIKEWISE BUMP DIRECTORY KEY TAD METMP1 DCA I [DCOUNT TAD MEOCNT CIA TAD I [DORG DCA I [DORG /SET UP PARAMETERS OF THE NEW SEGMENT DCA I [DLINK /MARK IT AS THE NEW LAST SEGMENT TAD XR TAD [-1777 /SET UP COUNT OF WORDS TO SLIDE DOWN JMP MECOMN /USE COMMON CODE TO SLIDE WORDS AND EXIT MSKIPF, 0 /SUBR TO FIND LAST LOC USED IN A SEGMENT /ALSO FINDS NUMBER OF BLOCKS USED BY SEGMENT TAD I [DCOUNT DCA MNOFIL TAD [DWASTE DCA XR DCA MEOCNT /INITIALIZE POINTER(XR) AND COUNT(MEOCNT) MSKPLP, TAD I XR SNA CLA JMP MEOMTY MTHREE TAD I [DWASTE /BUMP POINTER TO LENGTH WORD OF FILE ENTRY CIA TAD XR DCA XR MEOMTY, TAD I XR TAD MEOCNT DCA MEOCNT ISZ MNOFIL JMP MSKPLP JMP I MSKIPF MEOCNT, 0 MEFCNT, 0 METMP1, 0 METMP2, 0 MNOFIL, 0 MEOVLS=1200 /DESTROYS PART OF "CLOSE" OP FOR BUFFER PAGE EJECT ABSLDR /ABSOLUTE LOADER FOR OS/8 - VERSION 4A *2000 CTLBLK=3400 BUFFER=CTLBLK RXM=6230 /KT8A INSTRUCTION LXM=6200 /KT8A INSTRUCTION XVALU=70 /XCODE XFIELD=20 ORIGIN=21 B1=22 B2=23 B3=24 C1=25 C2=26 C3=27 WD=30 WD1=31 WD2=32 FILPTR=33 PG7400=34 LSTFLD=35 LOADXR=11 ABSLDR, JMS I (CTINIT JMS I (CTINIT JMP CALLCD JMP NOCD NEXTCD, JMS I (NEXFIL CALLCD, JMS I [200 5 /COMMAND DECODE 0216 /ASSUMED EXTENSION IS .BN NOCD, TAD [6001 CDF 0 DCA I [JSBITS /SET JSBITS TO SAVE CD AREA NEXT TIME CDF 10 TAD I [MPARAM+1 AND [100 SZA CLA /IS /R SWITCH ON? JMS I (CTINIT /YES - RE-INITIALIZE LOADER TABLES LD7400, 7400 TAD (MIFILE DCA FILPTR JMS I (SETADR /GET THE STARTING ADDRESS IF IT APPEARS ON THE LINE NEWFIL, TAD (7001 DCA HANDLR TAD I FILPTR AND [7760 SZA /LENGTH OF 256 BLOCKS IMPLIES AT LEAST 256 TAD [17 CLL CML RTR RTR DCA RCDCNT TAD I FILPTR ISZ FILPTR SNA JMP NEXTCD /FILE POINTER = 0 MEANS NO MORE INPUT FILES JMS I [200 1 /ASSIGN HANDLR, 7001 /LOAD INTO 7000 IF NOT ALREADY LOADED JMP I (IOERR TAD I FILPTR DCA RECNO ISZ FILPTR CLA CMA DCA CHCNT DCA REOF TAD I [MPARAM /TEST FOR /I AND (10 SNA CLA JMP I (LOADER /I IS NOT ON ISZ OFLG /IS /I ALLOWED? JMP I (OERR /NO! JMP I (SLASHO GETCH, 0 /GET-NEXT-INPUT-CHARACTER ROUTINE TAD [200 KRS TAD (-203 SNA CLA KSF SKP JMP I (MGET ISZ JMPGET ISZ CHCNT JMPX, JMP JMPGET TAD REOF SZA CLA JMP I GETCH /EOF REACHED BEFORE LOGICAL END - ERROR CIF 0 JMS I HANDLR 0210 /READ 2 RECORDS INTO FIELD 1 PBUFFR, BUFFER RECNO, 0 JMP RERROR ISZ RECNO ISZ RCDCNT SKP ISZ REOF TAD (-601 DCA CHCNT TAD PBUFFR DCA CHPTR TAD JMPX DCA JMPGET JMP GETCH+1 JMPGET, JMP . JMP CHAR1 JMP CHAR2 CHAR3, TAD JMPX DCA JMPGET TAD I CHPTR AND LD7400 CLL RTR RTR TAD CHTMP RTR RTR ISZ CHPTR JMP GCHCOM CHAR2, TAD I CHPTR AND LD7400 DCA CHTMP ISZ CHPTR CHAR1, TAD I CHPTR GCHCOM, AND (377 ISZ GETCH JMP I GETCH RERROR, SPA CLA JMP I (IOERR /AN ACTUAL READ ERROR - AMAZING! ISZ REOF JMP RECNO+2 REOF, 0 CHCNT, 0 CHPTR, 0 CHTMP, 0 RCDCNT, 0 OFLG, -1 /SWITCH FOR /O OPTION PAGE *2200 PUTWD, 6602 /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/uni/SYSTEM/UCSYS.BI.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | $JOB TO MAKE OS/8 REJECT LOWERCASE INPUT /RE-INSTALLS THE 'LINEFEED ECHO' OPTION. .R FUTIL 11.233/ IF C-1207 1344 11.263/ IF C-1034 2020 11.264/ IF C-5344 5267 11.344/ IF C-1354 4565 11.345/ IF C-7500 3413 11.346/ IF C-1353 1103 11.347/ IF C-1352 4423 11.350/ IF C-3034 1164 11.351/ IF C-5270 3017 11.352/ IF C-0340 1417 11.353/ IF C-7740 7450 11.354/ IF C-7440 5324 COMMENT: END OF KBM PATCH 53.50/ IF C-5207 5366 53.156/ IF C-1025 2024 53.157/ IF C-1220 5362 53.160/ IF C-7500 1102 53.161/ IF C-1367 4466 53.162/ IF C-1370 3024 53.163/ IF C-3025 1025 53.164/ IF C-1025 4466 53.165/ IF C-4466 5755 53.166/ IF C-5755 4312 53.167/ IF C-7740 3415 53.170/ IF C-0340 1101 COMMENT: END OF CD PATCH WRITE END EXIT $END OF JOB TO INSTALL UC PATCH |
Changes to src/os8/v3f/UCSYS.BI.
︙ | ︙ |
Changes to tools/diff-os8.
︙ | ︙ | |||
13 14 15 16 17 18 19 | echo "fail.rklz not found." exit -1 fi lz4 -dq last.rklz last.rk05 lz4 -dq fail.rklz fail.rk05 | < | < < < < < < < < | | | 13 14 15 16 17 18 19 20 21 22 23 | echo "fail.rklz not found." exit -1 fi lz4 -dq last.rklz last.rk05 lz4 -dq fail.rklz fail.rk05 ../../tools/os8xplode --rk fail.rk05 --rk last.rk05 diff -q last.0 fail.0 diff -q last.1 fail.1 |
Added tools/os8-cmp.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 | #!/usr/bin/env python3 # -*- coding: utf-8 -*- ######################################################################## # Compare the files on two OS/8 media images by extracting # their contents and running diff -q. # Based on code from os8-cp # # See USAGE message below for details. # # Copyright © 2018-2020 by Bill Cattey and Warren Young # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT # OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the names of the authors above # shall not be used in advertising or otherwise to promote the sale, # use or other dealings in this Software without prior written # authorization from those authors. ######################################################################## # Bring in just the basics so we can bring in our local modules import os import sys sys.path.insert (0, os.path.dirname (__file__) + '/../lib') sys.path.insert (0, os.getcwd () + '/lib') # Our local modules from pidp8i import * from simh import * # Other global Python modules import glob import subprocess import string import re #### GLOBALS AND CONSTANTS ############################################# progmsg = True DEBUG = False VERBOSE = False QUIET = False SYSTEM = False FORCE = False # Default RK05 system image to attach if no sys specified. _default_sys_image = "v3d.rk05" _default_sys_path = dirs.os8mo + _default_sys_image _default_att_spec = {"simh_name": "rk", "unit": "0", "image": _default_sys_path} # _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) # Regex for parsing an action file att string into a sys device. Note # reuse of regex string from above. _dev_actfile_regex_str = _dev_arg_regex_str[1:] # strip - _dev_actfile_re = re.compile (_dev_actfile_regex_str) # Map of SIMH device names to OS/8 device name prefixes. _os8_from_simh_dev = {"rk" : "RK", "td" : "DTA", "dt" : "DTA", "rx" : "RX"} _os8_partitions = {"RK": ["A", "B"]} # OS/8 file name matching regex _os8_file_re = re.compile("(\S+):(\S+)?") # PIP option flags we support and pass thru. PIP has other options we # do not try to map to our program functionality. The key bit is the # _pip_option_info dict. The various transforms below it prevent both # redundant code up here and repeated recomputation below. _pip_option_info = { 'a': 'ASCII', 'b': 'binary', 'i': 'image', 'y': 'yank system head', 'z': 'zero device' } _valid_pip_options = sorted(_pip_option_info.keys()) _arg_to_option = dict(zip( [ '-' + opt for opt in _valid_pip_options ], _valid_pip_options )) _option_to_pip = dict(zip( _valid_pip_options, [ '/' + opt.upper() for opt in _valid_pip_options ] )) # Matches if the string begins with a dollar sign, and has at least # one slash, returning the string between the dollar sign and the # first slash in group 1 and the rest in group 2. # No whitespace in the string. _expandable_re = re.compile ("^\$([^/\s]+)/(\S*)$") #### abort_prog ######################################################## # Print err_string and exit with -1 return status. def abort_prog (err_str): print("Abort: " + err_str) sys.exit(-1) #### parse_attach ###################################################### # Parser for OS/8 attach spec. def parse_attach (action_plan, match, imagename): if match.group(2) == None or match.group(2) == "": abort_prog ("Need unit number for: " + match.group(1) + ".") image_spec = {} image_spec["simh_name"] = match.group(1) image_spec["unit"] = match.group(2) image_spec["image"] = imagename if image_spec["simh_name"] not in _os8_from_simh_dev: print ("Unsupported device: " + image_spec["simh_name"]) return image_spec["os8_name"] = _os8_from_simh_dev[image_spec["simh_name"]] image_spec["devices"] = [] if image_spec["os8_name"] in _os8_partitions: image_spec["part_count"] = len (_os8_partitions[image_spec["os8_name"]]) for partition in _os8_partitions[image_spec["os8_name"]]: image_spec["devices"].append(image_spec["os8_name"] + partition + image_spec["unit"] + ":") else: image_spec["part_count"] = 1 image_spec["devices"].append(image_spec["os8_name"] + image_spec["unit"] + ":") # image_spec = [match.group(1), match.group(2), imagename] if match.group(3) == 's': if action_plan ["sys"] != None: print("Already specified system device. Ignoring sys mount of: " + imagename) else: action_plan["sys"] = image_spec else: action_plan["mount"].append(image_spec) #### path_expand ####################################################### # Originally developed in os8script.py, but useful here too. # # Simple minded variable substitution in a path. # A path beginning with a dollar sign parses the characters between # the dollar sign and the first slash seen becomes a name to # expand with a couple local names: $home and the anchor directories # defined in lib/pidp8i/dirs.py. # We abort if the path expansion fails. def path_expand (path): m = re.match(_expandable_re, path) if m == None: return path var = m.group(1) val = getattr (dirs, var, None) if val != None: return os.path.join(val,m.group(2)) else: abort_prog ("{$" + var + "} is not a valid path expansion in " + path) #### is_directory ###################################################### # # Returns True if the passed path looks like a directory. # # This is used at a level where we may still be unsure whether the given # path refers to something on the OS/8 or the host side, so we first # determine whether the path looks like an OS/8 or host-side path. If # it looks like an OS/8 path, we consider it a "directory" if it names a # device name, lacking a file name part after it. Otherwise, we use the # local OS's "is a directory" path check. def is_directory(path): if DEBUG: "is_directory (" + path + ")" m = re.match(_os8_file_re, path) if m != None: if DEBUG: print("OS/8 Match: DEV: " + m.group(1) + ", File: " + str(m.group(2))) if m.group(2) == None or m.group(2) == "": return True # Just a device so yes it's a directory. else: return False if has_os8_wildcards(path): if DEBUG: print("Has wildcards.") return False return os.path.isdir(path) #### file_list_from_expect ############################################# # Given a block of text output by the Python Expect module used by class # simh, parse it with the assumption that it contains OS/8 DIR output. def file_list_from_expect(before): file_list = [] lines = before.split("\r") for line in lines[1:]: # First line is our command. Skip it. line = line.strip() if line == "": continue m = re.match("(\S+)\s*\.(\S+)", line) if m == None: continue # if DEBUG: print("file_list_from_expect: group 1: " + m.group(1) + ", group 2: " + m.group(2)) fname = m.group(1) + "." + m.group(2) file_list.append(fname) return file_list #### parse_args ######################################################## # # The source and destination file specifications are interpreted as in # the USAGE message below. (Look for "colon".) TERSE_USAGE = 'usage: ' + os.path.basename (__file__) + \ " [-dhvqyf] [-<dev><unit>[s] image1] [-<dev><unit>[s] image2] [[-y]\n" + \ """ <dev> is one of rk, td, dt, rx, corresponding to SIMH PDP-8 devices <unit> must be a valid unit number for the device in both SIMH and the booted OS/8 system. A unit number is required. Following the unit with an "s" names the system device to boot. The system image file must exist, and contain a working boot image. Only one designated system device is allowed. Example: """ + \ os.path.basename (__file__) + " -rk0s os8v3d-patched.rk05 -dt0 master.tu56 " USAGE = TERSE_USAGE + """ To see more detailed documentation specify -v -h """ VERBOSE_USAGE = TERSE_USAGE + """ This program compares two OS/8 media image files by attaching them to the SIMH PDP-8 simulater, and booting OS/8. The s suffix on one image spec. selects that image as the boot device. If no s suffis is present, the default v3d.rk05 image is booted. A directory listing for each image is obtained, and the files are extracted into a POSIX directory. If the image has multiple partitions, each partition is extracted into a subdirectory. FIXME: Some sensible approach to trying to compare a .tu56 and a .rk05 image. Normally an existing extraction will not be overwritten. Give -f to force overwrite of existing extraction. The -y option indicates the system area should also be extracted into a file named SYSTEM.SY. Give -d to run in debug mode. Give -h -v to print this message. Give -v to enable verbose status reporting. """ ##### parse_args ################################################################ # Determine which images to mount and where. # Set any bit-wise arguments seen. def parse_args (): global DEBUG global VERBOSE global QUIET global SYSTEM global FORCE action_plan = {} action_plan["sys"] = None action_plan["mount"] = [] action_plan["copy"] = [] idx = 1 numargs = len(sys.argv) filespec_seen = 0 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 = [] while idx < numargs: image_idx = 1 arg = sys.argv[idx] # First the simple bit set options if arg == "-d": DEBUG = True elif arg == "-h": if VERBOSE: print(VERBOSE_USAGE) else: print(USAGE) sys.exit(0) elif arg == "-q": QUIET = True elif arg == "-v": VERBOSE = 1 elif arg == "-f": FORCE = True elif arg == "-y": SYSTEM = True # Not a simple bit set option. else: # Parser for OS/8 attach spec. m = re.match(_dev_arg_re, arg) if m != None: if idx + 1 == numargs: # Need filename, but no args left. abort_prog ("No image file name.") idx +=1 parse_attach (action_plan, m, sys.argv[idx]) idx +=1 # Bottom of the while loop. Increment. return action_plan #### find_or_mkdir ##################################################### # If the dirname doesn't exist, make it and return False # If it does, return True def find_or_mkdir (dirname): if os.path.isdir (dirname): return True if VERBOSE or DEBUG: print("Creating directory " + dirname) # Make the directory here. os.mkdir (dirname) return False #### extract ########################################################## # Extract all files from given device to the given directory # using SIMH object, s. def extract (s, device, directory): pip_option = "/I" if VERBOSE or DEBUG: print("Extracting " + device + " into " + directory) # This will be a "from" type of copy with a source of *.*. # Use DIRECT to create list of files. # We attach destination to ptp. We've already done POSIX globing. # Use OS/8 Direct to enumerate our input files. if DEBUG: print("Calling OS/8 DIRECT on : " + device) s.os8_cmd ("DIR " + device + "/F=1", "\d+\s+FREE BLOCKS", debug=DEBUG) # Now harvest direct output. One file per line. Ignore blank lines. # Maybe parse the FREE BLOCKS Output. # Done when we see a dot. files = file_list_from_expect(s._child.before.decode()) # Confirm return to monitor after call to DIR command. s.os8_cfm_monitor ("os8_cmp=: extract: Return to monitor after DIR failed.") for filename in files: if VERBOSE or DEBUG: print("Calling os8_pip_from: copy from: " + \ "{" + device + "}{" + filename + "}" + \ " to: " + directory + ", mode: " + pip_option) s.os8_pip_from(device + filename, directory, "/I", debug=DEBUG) # System head extract goes here. #### compare ########################################################### # Call diff -q on the leftdir and rightdir def compare (left, right): compare_args = ["diff", "-q", left, right] compare_str = "diff -q " + left + " " + right if VERBOSE or DEBUG: print ("Calling compare: " + str(compare_args)) subprocess.call (compare_args, cwd = ".") #### main ############################################################## def main (): action_plan = parse_args() if action_plan == None: abort_prog ("No action plan was parsed.") if DEBUG: print(str(action_plan)) # Create the SIMH child instance and tell it where to send log output try: s = simh (dirs.build, True) except (RuntimeError) as e: print("Could not start simulator: " + e.message + '!') exit (1) # s.set_logfile (os.fdopen (sys.stdout.fileno (), 'wb', 0)) s.set_logfile (open ("logfile.txt", 'wb')) if VERBOSE: s.verbose = True # Perform sys attach att_spec = action_plan["sys"] if att_spec == None: att_spec = _default_att_spec simh_boot_dev = att_spec["simh_name"] + att_spec["unit"] # Compose simh dev from name and unit. imagename = att_spec["image"] if not os.path.exists (imagename): abort_prog ("Requested boot image file: " + imagename + " not found.") if VERBOSE or DEBUG: print("Attaching " + simh_boot_dev + " to " + imagename) s.simh_cmd ("att " + simh_boot_dev + " " + imagename, debug=DEBUG) # Attach other mounts # Create the directories that will catch the extraction. # If the directory already exists abort. for att_spec in action_plan["mount"]: simh_dev = att_spec["simh_name"] + att_spec["unit"] # Compose simh dev from name and unit. imagename = att_spec["image"] if os.path.exists (imagename) == False: abort_prog ("Required image " + imagename + " not found.") if VERBOSE or DEBUG: print("Attaching " + simh_dev + " to " + imagename) s.simh_cmd ("att " + simh_dev + " " + imagename, debug=DEBUG) # From here on in, if we only had one mount spec, # Compare against the system device, by adding it as a "mount" in action plan. if len(action_plan["mount"]) < 2: action_plan["mount"].insert(0, action_plan["sys"]) # Boot. if VERBOSE or DEBUG: print("Booting " + simh_boot_dev + "...") # Confirm successful boot into OS/8. Note we call simh_cmd with _os8_replies! reply = s.simh_cmd ("boot " + simh_boot_dev, s._os8_replies_rex, debug=DEBUG) s.os8_test_result (reply, "Monitor Prompt", "os8-cp") # Perform file extraction from all partitions of all attached images. for att_spec in action_plan["mount"]: for i in range(att_spec["part_count"]): os8dev = att_spec["devices"][i] suffix = os8dev[:-1] att_dir = os.path.basename(att_spec["image"]) + "_" + suffix found = find_or_mkdir (att_dir) if found: print ("Existing extraction found: " + att_dir) if FORCE: if VERBOSE: print ("Overwrite forced.") extract (s, os8dev, att_dir) else: print ("Existing dir not found.") extract (s, os8dev, att_dir) # Detach all mounts and then sys. s.esc_to_simh() for att_spec in action_plan["mount"]: simh_dev = att_spec["simh_name"] + att_spec["unit"] # Compose simh dev from name and unit. if VERBOSE or DEBUG: print("Detaching " + simh_dev) s.simh_cmd ("det " + simh_dev, debug=DEBUG) if VERBOSE or DEBUG: print("Detaching " + simh_boot_dev) s.simh_cmd ("det " + simh_boot_dev, debug=DEBUG) # Perform compare # Currently hard coded to work only first 2 Attached filesystems. left_spec = action_plan["mount"][0] right_spec = action_plan["mount"][1] # For now, we can't cope with comparing different devices # To fix this: # Confirm that the two devices have comparable partition names/counts. # Decide on a mapping between partitions of different counts. if left_spec["part_count"] != right_spec["part_count"]: abort_prog ("Can only compare devices with same number of partitions.\n\t" \ + left_dev + " with " + str (left_partcount) + " != " \ + right_dev + " with " + str (right_partcount)) # From here, be guided by left partition count. for i in range(left_spec["part_count"]): left_suffix = left_spec["devices"][i][:-1] left_dir = os.path.basename(left_spec["image"]) + "_" + left_suffix right_suffix = right_spec["devices"][i][:-1] right_dir = os.path.basename(right_spec["image"]) + "_" + right_suffix if VERBOSE: print ("Compare: " + left_dir + " and " + right_dir) compare (left_dir, right_dir) # And shut down the simulator. # Shutting down the simulator exits the program. # So we do it last. if VERBOSE or DEBUG: print("Quitting simh.") s._child.sendline("quit") if __name__ == "__main__": main() |
Added tools/os8-cmp.in.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 | #!/usr/bin/env @PYCMD@ # -*- coding: utf-8 -*- ######################################################################## # Compare the files on two OS/8 media images by extracting # their contents and running diff -q. # Based on code from os8-cp # # See USAGE message below for details. # # Copyright © 2018-2020 by Bill Cattey and Warren Young # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT # OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE # OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the names of the authors above # shall not be used in advertising or otherwise to promote the sale, # use or other dealings in this Software without prior written # authorization from those authors. ######################################################################## # Bring in just the basics so we can bring in our local modules import os import sys sys.path.insert (0, os.path.dirname (__file__) + '/../lib') sys.path.insert (0, os.getcwd () + '/lib') # Our local modules from pidp8i import * from simh import * # Other global Python modules import glob import subprocess import string import re #### GLOBALS AND CONSTANTS ############################################# progmsg = True DEBUG = False VERBOSE = False QUIET = False SYSTEM = False FORCE = False # Default RK05 system image to attach if no sys specified. _default_sys_image = "@OS8_BOOT_DISK@" _default_sys_path = dirs.os8mo + _default_sys_image _default_att_spec = {"simh_name": "rk", "unit": "0", "image": _default_sys_path} # _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) # Regex for parsing an action file att string into a sys device. Note # reuse of regex string from above. _dev_actfile_regex_str = _dev_arg_regex_str[1:] # strip - _dev_actfile_re = re.compile (_dev_actfile_regex_str) # Map of SIMH device names to OS/8 device name prefixes. _os8_from_simh_dev = {"rk" : "RK", "td" : "DTA", "dt" : "DTA", "rx" : "RX"} _os8_partitions = {"RK": ["A", "B"]} # OS/8 file name matching regex _os8_file_re = re.compile("(\S+):(\S+)?") # PIP option flags we support and pass thru. PIP has other options we # do not try to map to our program functionality. The key bit is the # _pip_option_info dict. The various transforms below it prevent both # redundant code up here and repeated recomputation below. _pip_option_info = { 'a': 'ASCII', 'b': 'binary', 'i': 'image', 'y': 'yank system head', 'z': 'zero device' } _valid_pip_options = sorted(_pip_option_info.keys()) _arg_to_option = dict(zip( [ '-' + opt for opt in _valid_pip_options ], _valid_pip_options )) _option_to_pip = dict(zip( _valid_pip_options, [ '/' + opt.upper() for opt in _valid_pip_options ] )) # Matches if the string begins with a dollar sign, and has at least # one slash, returning the string between the dollar sign and the # first slash in group 1 and the rest in group 2. # No whitespace in the string. _expandable_re = re.compile ("^\$([^/\s]+)/(\S*)$") #### abort_prog ######################################################## # Print err_string and exit with -1 return status. def abort_prog (err_str): print("Abort: " + err_str) sys.exit(-1) #### parse_attach ###################################################### # Parser for OS/8 attach spec. def parse_attach (action_plan, match, imagename): if match.group(2) == None or match.group(2) == "": abort_prog ("Need unit number for: " + match.group(1) + ".") image_spec = {} image_spec["simh_name"] = match.group(1) image_spec["unit"] = match.group(2) image_spec["image"] = imagename if image_spec["simh_name"] not in _os8_from_simh_dev: print ("Unsupported device: " + image_spec["simh_name"]) return image_spec["os8_name"] = _os8_from_simh_dev[image_spec["simh_name"]] image_spec["devices"] = [] if image_spec["os8_name"] in _os8_partitions: image_spec["part_count"] = len (_os8_partitions[image_spec["os8_name"]]) for partition in _os8_partitions[image_spec["os8_name"]]: image_spec["devices"].append(image_spec["os8_name"] + partition + image_spec["unit"] + ":") else: image_spec["part_count"] = 1 image_spec["devices"].append(image_spec["os8_name"] + image_spec["unit"] + ":") # image_spec = [match.group(1), match.group(2), imagename] if match.group(3) == 's': if action_plan ["sys"] != None: print("Already specified system device. Ignoring sys mount of: " + imagename) else: action_plan["sys"] = image_spec else: action_plan["mount"].append(image_spec) #### path_expand ####################################################### # Originally developed in os8script.py, but useful here too. # # Simple minded variable substitution in a path. # A path beginning with a dollar sign parses the characters between # the dollar sign and the first slash seen becomes a name to # expand with a couple local names: $home and the anchor directories # defined in lib/pidp8i/dirs.py. # We abort if the path expansion fails. def path_expand (path): m = re.match(_expandable_re, path) if m == None: return path var = m.group(1) val = getattr (dirs, var, None) if val != None: return os.path.join(val,m.group(2)) else: abort_prog ("{$" + var + "} is not a valid path expansion in " + path) #### is_directory ###################################################### # # Returns True if the passed path looks like a directory. # # This is used at a level where we may still be unsure whether the given # path refers to something on the OS/8 or the host side, so we first # determine whether the path looks like an OS/8 or host-side path. If # it looks like an OS/8 path, we consider it a "directory" if it names a # device name, lacking a file name part after it. Otherwise, we use the # local OS's "is a directory" path check. def is_directory(path): if DEBUG: "is_directory (" + path + ")" m = re.match(_os8_file_re, path) if m != None: if DEBUG: print("OS/8 Match: DEV: " + m.group(1) + ", File: " + str(m.group(2))) if m.group(2) == None or m.group(2) == "": return True # Just a device so yes it's a directory. else: return False if has_os8_wildcards(path): if DEBUG: print("Has wildcards.") return False return os.path.isdir(path) #### file_list_from_expect ############################################# # Given a block of text output by the Python Expect module used by class # simh, parse it with the assumption that it contains OS/8 DIR output. def file_list_from_expect(before): file_list = [] lines = before.split("\r") for line in lines[1:]: # First line is our command. Skip it. line = line.strip() if line == "": continue m = re.match("(\S+)\s*\.(\S+)", line) if m == None: continue # if DEBUG: print("file_list_from_expect: group 1: " + m.group(1) + ", group 2: " + m.group(2)) fname = m.group(1) + "." + m.group(2) file_list.append(fname) return file_list #### parse_args ######################################################## # # The source and destination file specifications are interpreted as in # the USAGE message below. (Look for "colon".) TERSE_USAGE = 'usage: ' + os.path.basename (__file__) + \ " [-dhvqyf] [-<dev><unit>[s] image1] [-<dev><unit>[s] image2] [[-y]\n" + \ """ <dev> is one of rk, td, dt, rx, corresponding to SIMH PDP-8 devices <unit> must be a valid unit number for the device in both SIMH and the booted OS/8 system. A unit number is required. Following the unit with an "s" names the system device to boot. The system image file must exist, and contain a working boot image. Only one designated system device is allowed. Example: """ + \ os.path.basename (__file__) + " -rk0s os8v3d-patched.rk05 -dt0 master.tu56 " USAGE = TERSE_USAGE + """ To see more detailed documentation specify -v -h """ VERBOSE_USAGE = TERSE_USAGE + """ This program compares two OS/8 media image files by attaching them to the SIMH PDP-8 simulater, and booting OS/8. The s suffix on one image spec. selects that image as the boot device. If no s suffis is present, the default v3d.rk05 image is booted. A directory listing for each image is obtained, and the files are extracted into a POSIX directory. If the image has multiple partitions, each partition is extracted into a subdirectory. FIXME: Some sensible approach to trying to compare a .tu56 and a .rk05 image. Normally an existing extraction will not be overwritten. Give -f to force overwrite of existing extraction. The -y option indicates the system area should also be extracted into a file named SYSTEM.SY. Give -d to run in debug mode. Give -h -v to print this message. Give -v to enable verbose status reporting. """ ##### parse_args ################################################################ # Determine which images to mount and where. # Set any bit-wise arguments seen. def parse_args (): global DEBUG global VERBOSE global QUIET global SYSTEM global FORCE action_plan = {} action_plan["sys"] = None action_plan["mount"] = [] action_plan["copy"] = [] idx = 1 numargs = len(sys.argv) filespec_seen = 0 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 = [] while idx < numargs: image_idx = 1 arg = sys.argv[idx] # First the simple bit set options if arg == "-d": DEBUG = True elif arg == "-h": if VERBOSE: print(VERBOSE_USAGE) else: print(USAGE) sys.exit(0) elif arg == "-q": QUIET = True elif arg == "-v": VERBOSE = 1 elif arg == "-f": FORCE = True elif arg == "-y": SYSTEM = True # Not a simple bit set option. else: # Parser for OS/8 attach spec. m = re.match(_dev_arg_re, arg) if m != None: if idx + 1 == numargs: # Need filename, but no args left. abort_prog ("No image file name.") idx +=1 parse_attach (action_plan, m, sys.argv[idx]) idx +=1 # Bottom of the while loop. Increment. return action_plan #### find_or_mkdir ##################################################### # If the dirname doesn't exist, make it and return False # If it does, return True def find_or_mkdir (dirname): if os.path.isdir (dirname): return True if VERBOSE or DEBUG: print("Creating directory " + dirname) # Make the directory here. os.mkdir (dirname) return False #### extract ########################################################## # Extract all files from given device to the given directory # using SIMH object, s. def extract (s, device, directory): pip_option = "/I" if VERBOSE or DEBUG: print("Extracting " + device + " into " + directory) # This will be a "from" type of copy with a source of *.*. # Use DIRECT to create list of files. # We attach destination to ptp. We've already done POSIX globing. # Use OS/8 Direct to enumerate our input files. if DEBUG: print("Calling OS/8 DIRECT on : " + device) s.os8_cmd ("DIR " + device + "/F=1", "\d+\s+FREE BLOCKS", debug=DEBUG) # Now harvest direct output. One file per line. Ignore blank lines. # Maybe parse the FREE BLOCKS Output. # Done when we see a dot. files = file_list_from_expect(s._child.before.decode()) # Confirm return to monitor after call to DIR command. s.os8_cfm_monitor ("os8_cmp=: extract: Return to monitor after DIR failed.") for filename in files: if VERBOSE or DEBUG: print("Calling os8_pip_from: copy from: " + \ "{" + device + "}{" + filename + "}" + \ " to: " + directory + ", mode: " + pip_option) s.os8_pip_from(device + filename, directory, "/I", debug=DEBUG) # System head extract goes here. #### compare ########################################################### # Call diff -q on the leftdir and rightdir def compare (left, right): compare_args = ["diff", "-q", left, right] compare_str = "diff -q " + left + " " + right if VERBOSE or DEBUG: print ("Calling compare: " + str(compare_args)) subprocess.call (compare_args, cwd = ".") #### main ############################################################## def main (): action_plan = parse_args() if action_plan == None: abort_prog ("No action plan was parsed.") if DEBUG: print(str(action_plan)) # Create the SIMH child instance and tell it where to send log output try: s = simh (dirs.build, True) except (RuntimeError) as e: print("Could not start simulator: " + e.message + '!') exit (1) # s.set_logfile (os.fdopen (sys.stdout.fileno (), 'wb', 0)) s.set_logfile (open ("logfile.txt", 'wb')) if VERBOSE: s.verbose = True # Perform sys attach att_spec = action_plan["sys"] if att_spec == None: att_spec = _default_att_spec simh_boot_dev = att_spec["simh_name"] + att_spec["unit"] # Compose simh dev from name and unit. imagename = att_spec["image"] if not os.path.exists (imagename): abort_prog ("Requested boot image file: " + imagename + " not found.") if VERBOSE or DEBUG: print("Attaching " + simh_boot_dev + " to " + imagename) s.simh_cmd ("att " + simh_boot_dev + " " + imagename, debug=DEBUG) # Attach other mounts # Create the directories that will catch the extraction. # If the directory already exists abort. for att_spec in action_plan["mount"]: simh_dev = att_spec["simh_name"] + att_spec["unit"] # Compose simh dev from name and unit. imagename = att_spec["image"] if os.path.exists (imagename) == False: abort_prog ("Required image " + imagename + " not found.") if VERBOSE or DEBUG: print("Attaching " + simh_dev + " to " + imagename) s.simh_cmd ("att " + simh_dev + " " + imagename, debug=DEBUG) # From here on in, if we only had one mount spec, # Compare against the system device, by adding it as a "mount" in action plan. if len(action_plan["mount"]) < 2: action_plan["mount"].insert(0, action_plan["sys"]) # Boot. if VERBOSE or DEBUG: print("Booting " + simh_boot_dev + "...") # Confirm successful boot into OS/8. Note we call simh_cmd with _os8_replies! reply = s.simh_cmd ("boot " + simh_boot_dev, s._os8_replies_rex, debug=DEBUG) s.os8_test_result (reply, "Monitor Prompt", "os8-cp") # Perform file extraction from all partitions of all attached images. for att_spec in action_plan["mount"]: for i in range(att_spec["part_count"]): os8dev = att_spec["devices"][i] suffix = os8dev[:-1] att_dir = os.path.basename(att_spec["image"]) + "_" + suffix found = find_or_mkdir (att_dir) if found: print ("Existing extraction found: " + att_dir) if FORCE: if VERBOSE: print ("Overwrite forced.") extract (s, os8dev, att_dir) else: print ("Existing dir not found.") extract (s, os8dev, att_dir) # Detach all mounts and then sys. s.esc_to_simh() for att_spec in action_plan["mount"]: simh_dev = att_spec["simh_name"] + att_spec["unit"] # Compose simh dev from name and unit. if VERBOSE or DEBUG: print("Detaching " + simh_dev) s.simh_cmd ("det " + simh_dev, debug=DEBUG) if VERBOSE or DEBUG: print("Detaching " + simh_boot_dev) s.simh_cmd ("det " + simh_boot_dev, debug=DEBUG) # Perform compare # Currently hard coded to work only first 2 Attached filesystems. left_spec = action_plan["mount"][0] right_spec = action_plan["mount"][1] # For now, we can't cope with comparing different devices # To fix this: # Confirm that the two devices have comparable partition names/counts. # Decide on a mapping between partitions of different counts. if left_spec["part_count"] != right_spec["part_count"]: abort_prog ("Can only compare devices with same number of partitions.\n\t" \ + left_dev + " with " + str (left_partcount) + " != " \ + right_dev + " with " + str (right_partcount)) # From here, be guided by left partition count. for i in range(left_spec["part_count"]): left_suffix = left_spec["devices"][i][:-1] left_dir = os.path.basename(left_spec["image"]) + "_" + left_suffix right_suffix = right_spec["devices"][i][:-1] right_dir = os.path.basename(right_spec["image"]) + "_" + right_suffix if VERBOSE: print ("Compare: " + left_dir + " and " + right_dir) compare (left_dir, right_dir) # And shut down the simulator. # Shutting down the simulator exits the program. # So we do it last. if VERBOSE or DEBUG: print("Quitting simh.") s._child.sendline("quit") if __name__ == "__main__": main() |
Added tools/os8xplode.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 | #!/usr/bin/perl # # Copyright © 2015-2020 by Vincent Slygstad and William Cattey # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS LISTED ABOVE BE LIABLE # FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF # CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the names of the authors above # shall not be used in advertising or otherwise to promote the sale, use # or other dealings in this Software without prior written authorization # from those authors. # # Every pair of 8 bit bytes forms a 12 bit word. # There are 0400 words in each OS/8 block. $bsize = 0400 * 2; # # The original date algorithm was 3 bits, added to 1970. # Later, two more bits were added, so years go thru 1999. # Dates in the future are interpreted as dates in the # previous 8 years. # First, get the right epoch. ($_, $_, $_, $dy, $mo, $i) = localtime(time); #$i = ($i + 1900) & 037; $i = ($i - 70) & 037; $cyear = $i & 07; $epoch = 1970 + ($i&030); $i += 1970; @month = ("0", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC", "13", "14", "15"); print "y2k: pretending today is $dy-$month[$mo+1]-$i\n"; # # Convert OS/8 date word to time_t. # 05370 => 1010 11111 000 => 10/31/70. # Should we try to also set the time of day? # Would it be more efficient to know the # seconds in a (short) year and the number # of seconds in each month since the epoch? sub cvtdate { local($os8) = @_; local($mo, $dy, $yr); local($tm, $td, $ty, $days); local($t) = time; $os8 = 0410 if $os8 == 0; # Aim for Jan 1, $epoch ($mo, $dy, $yr) = (($os8>>8)-1, ($os8>>3)&037, $os8&7); $yr += $epoch - 1900; # Some OS/8 dates are nonsense. Make a close guess. if ($mo < 0) { $mo += 12; $yr -= 1; } elsif ($mo > 11) { $mo -= 12; $yr += 1; } $dy = 1 unless $dy; while (1) { # Convert the estimate, $t, to local time. ($_, $_, $_, $td, $tm, $ty) = localtime($t); # Estimate the difference in days. $days = ($ty-$yr)*365 + ($tm-$mo)*30 + $td-$dy; # Return if on the right day. return $t unless $days; # Kludge prevents cycling on the missing leap day # Dates like 2/29/93, 2/30/93, 2/31/93, etc. # Also dates like 4/31/xx, etc. return $t + 24*60*60 if $days == -1; return $t + 48*60*60 if $days == -2; return $t + 72*60*60 if $days == -3; # Adjust $t. $t -= $days * 22*60*60; } } # # Convert sixbit to 7 bit ASCII. sub sixbit { local($word) = @_; local($byte1, $byte2) = ($word >> 6, $word & 077); $byte1 += 0140 if $byte1 < 040; $byte2 += 0140 if $byte2 < 040; return ($byte1, $byte2); } sub ofile { local($f, $first, $last, $total, $ctime) = @_; local($mask, $eof, $chr1, $chr2, $chr3); local(@buf); open(OUTPUT, ">$f") || die "$f: $!"; binmode(OUTPUT); $mask = 0377; $chr1 = "binary"; $mask = 0177 if $f =~ /[.]BI$/i; # BATCH Input $mask = 0177 if $f =~ /[.]FC$/i; # FOCAL Source $mask = 0177 if $f =~ /[.]FT$/i; # FORTRAN Source $mask = 0177 if $f =~ /[.]HL$/i; # HELP $mask = 0177 if $f =~ /[.]LS$/i; # Listing $mask = 0177 if $f =~ /[.]MA$/i; # MACRO Source $mask = 0177 if $f =~ /[.]PA$/i; # PAL Source $mask = 0177 if $f =~ /[.]PS$/i; # Pascal Source? $mask = 0177 if $f =~ /[.]RA$/i; # RALF Source $mask = 0177 if $f =~ /[.]SB$/i; # SABR Source $mask = 0177 if $f =~ /[.]TE$/i; # TECO File $mask = 0177 if $f =~ /[.]TX$/i; # Text File $mask = 0177 if $f =~ /[.]WU$/i; # Write Up $chr1 = "text" if $mask != 0377; printf XML "<file name='$f' start=0%o end=0%o mode=$chr1>", $first, $last; seek(INPUT, $bsize*($fsbase+$first), 0) || die "seek($dsk): $!"; $eof = 0; for ($i = $first; $i <= $last; $i++) { # Read a block last if $first >= $total || $last >= $total; # Don't read past EOF. read(INPUT, $buf, $bsize) || die "read($dsk $f), $i, $total, $last: $!"; @buf = unpack("S512", $buf); # Repack the bits amd write the block. while (@buf && !$eof) { $chr1 = shift @buf; $chr2 = shift @buf; $chr3 = (($chr2 >> 8) & 017) | (($chr1 >> 4) & 0360); if ((($chr1 & $mask) == 032) && ($mask == 0177)) { $eof = 1; next; } print OUTPUT pack("C", $chr1 & $mask); if ((($chr2 & $mask) == 032) && ($mask == 0177)) { $eof = 1; next; } print OUTPUT pack("C", $chr2 & $mask); if ((($chr3 & $mask) == 032) && ($mask == 0177)) { $eof = 1; next; } print OUTPUT pack("C", $chr3 & $mask); } # Mark the block used die "Block $i was used for both $blocks[$i] and $f\n" if defined $blocks[$i]; $blocks[$i] = $f; } close(OUTPUT) || die "close($f): $!"; # Set the creation time on the output file. utime($ctime, $ctime, $f) || die "utime($f): $!"; # Now update the XML print XML "</file>\n"; } # # An OS/8 filesystem contains a boot block, a directory, # an optional system head, and a file data area. sub os8fs { local($fs, $fsbase, $fslen, $total) = @_; # Note the start of a new file system. printf XML "<os8fs name='$fs' base=0%o size=0%o>\n", $fsbase, $fslen; @blocks = (); # Keep things tidier by creating a directory to contain our files. mkdir($fs) unless -d $fs; die "mkdir($fs): $!" unless -d $fs; $fs .= "/"; # Walk the directory, in blocks 1-6. Note whether it # is a system # device image, or not. print XML "<directory>\n"; $sys = $cos = 1; # Have not ruled out a system device. for ($link = 1; $link; ) { # Read a directory segment seek(INPUT, $bsize*($fsbase+$link), 0) || die "seek($dsk): $!"; read(INPUT, $buf, $bsize) || die "read($dsk): $!"; @blk = unpack("S512", $buf); $nent = shift @blk; $sblk = shift @blk; # If it has files in the system area, it's not a system device. $sys = 0 if $sblk < 070; # Not a system image $cos = 0 if $sblk < 0140; # Not a COS image $nent = 010000 - $nent; $link = shift @blk; $tent = shift @blk; $aiw = shift @blk; $aiw = 010000 - $aiw unless $aiw == 0; for (; $nent; $nent--) { # Examine a directory entry. $chr1 = shift @blk; if ($chr1 != 0) { $chr3 = shift @blk; $chr5 = shift @blk; $ext1 = shift @blk; if ($aiw) { # BUGBUG: If more than one additional word, which is date? for ($i = 0; $i < $aiw; $i++) { $datew = shift @blk; } } else { $datew = 0; } $flen = shift @blk; $flen = 010000 - $flen if $flen; # Create the file. ($chr1, $chr2) = sixbit($chr1); ($chr3, $chr4) = sixbit($chr3); ($chr5, $chr6) = sixbit($chr5); ($ext1, $ext2) = sixbit($ext1); $fname = pack("C6", $chr1, $chr2, $chr3, $chr4, $chr5, $chr6); $fname =~ s/[\@\`]*$//; $ext = pack("C2", $ext1, $ext2); $ext =~ s/[\@\`]*$//; $fname =~ s/ *$//g; $ext =~ s/ *$//g; if ($flen == 0) { # Tentative file $ext .= ".tent" if $flen == 0; $i = shift @blk; die "$dsk: Tentative file not followed by empty space!" if $i; $flen = 010000 - shift @blk; $nent--; } $fname =~ s/$/./ unless $ext eq ""; } else { $flen = shift @blk; $flen = 010000 - $flen if $flen; $fname = "."; $ext = "$sblk"; } &ofile("$fs$fname$ext", $sblk, $sblk+$flen-1, $total, &cvtdate($datew)); $sblk += $flen; } } print XML "</directory>\n"; # N.B. Avoid the use of two character extensions # for non-directory file names, as they may clash # with actual file names. # Emit the boot loader. &ofile("$fs.boot", 0, 0, $ctime); # Emit the directory. &ofile("$fs.dir", 1, 6+$cos, $ctime); # We are done unless it is the image of a system device. return unless $sys; # BUGBUG: It's a system device, either COS or OS/8. if ($cos) { # Emit the Keyboard Monitor, blocks 010-013. &ofile("$fs.kmon", 010, 013, $ctime); # Emit the Editor Overlay, blocks 010-013. &ofile("$fs.eovr", 014, 017, $ctime); # Emit the Editor, blocks 010-013. &ofile("$fs.edit", 020, 033, $ctime); # Emit the Run Time System Loader, blocks 010-013. &ofile("$fs.rtsl", 034, 037, $ctime); # Emit the Edit Buffer, blocks 010-013. &ofile("$fs.ebuf", 040, 057, $ctime); # Emit the Run Time System, blocks 010-013. &ofile("$fs.rts", 060, 067, $ctime); # Emit the Compiler Overlays, blocks 010-013. &ofile("$fs.covr", 070, 077, $ctime); # Emit the Binary Scratch area, blocks 010-013. &ofile("$fs.bscr", 0100, 0137, $ctime); } else { # Emit the Keyboard Monitor, blocks 07-012. &ofile("$fs.kmon", 007, 012, $ctime); # Emit the User Service Routine, blocks 013-015. &ofile("$fs.usr", 013, 015, $ctime); # Emit the Device Handlers, blocks 016-025. &ofile("$fs.dhand", 016, 025, $ctime); # Emit the Enter Processor, block 026. &ofile("$fs.ent", 026, 026, $ctime); # Emit the Scratch Blocks, blocks 027-050. &ofile("$fs.sblks", 027, 050, $ctime); # Emit the Command Decoder, blocks 051-053. &ofile("$fs.cdec", 051, 053, $ctime); # Emit the Save and Date Overlays, blocks 054-055. &ofile("$fs.sdate", 054, 055, $ctime); # Emit the Monitor Error Routine, block 056. &ofile("$fs.merr", 056, 056, $ctime); # Emit the USE CHAIN Processor, block 057. &ofile("$fs.chain", 057, 057, $ctime); # Emit the System ODT Routine, blocks 060-063. &ofile("$fs.sodt", 060, 063, $ctime); # Emit the reserved block, blocks 064. &ofile("$fs.rsvd", 064, 064, $ctime); # Emit the CCL Reminiscences, block 065. &ofile("$fs.cclr", 065, 065, $ctime); # Emit the 12K TD8E code, block 066. &ofile("$fs.td8e", 066, 066, $ctime); # Emit the CCL Overlay, block 067. &ofile("$fs.cclo", 067, 067, $ctime); } # Check all the blocks were accounted for. for ($i = 0; $i < $fslen; $i++) { warn "$dsk: Block $i not accounted for!\n" unless defined $blocks[$i]; } printf XML "</os8fs>\n"; } # # Most large devices have more than one file-system. How # can we detect this and infer the correct size of each # file-system? Inspection of the PIP DEVLEN table suggests # That all the devices are chopped up into equal size segments. # # For example, the disk image I'm debugging with is 014540 # blocks long, and contains two file systems, each 06260 # blocks long. # # Top level. Iterate over the arguments, which are supposed to be # disk images. $type = "dsk"; foreach $f (@ARGV) { if ($f eq "--rk") { $type = "rk05"; next; } open(INPUT, $f) || die "$f: $!"; binmode(INPUT); $dsk = $f; $f =~ s/.${type}$//; # We found an image, let's start the XML. open(XML, ">$f.xml") || die "$f.xml: $!"; # Verify an integral number of blocks. ($_, $_, $_, $_, $_, $_, $_, $b, $_, $_, $ctime) = stat(INPUT); die "$dsk: Not an integral number of blocks!\n" if $b % $bsize; $blocks = $b / $bsize; @b = (); printf XML "<image name='$dsk' size=0%o>\n", $blocks; # Later this should be table driven, and do more conversions. if ($type eq "rk05") { $fslen = 3248; } else { $fslen = $blocks; } $total = $blocks; $part = 0; for ($fsbase = 0; $fsbase < $blocks; $fsbase += $fslen) { &os8fs("$f.$part", $fsbase, $fslen, $total); $total -= $fslen; $part++; } $type = "dsk"; # Reset to dsk device default. printf XML "</image>\n", $blocks; } |
Deleted tools/test-os8-send-file.in.
|
| < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < |