PiDP-8/I Software

Check-in [15eca39699]
Log In

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: 15eca39699347b14ff3fcac4836ca05e07037d0c
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
Unified Diff Ignore Whitespace Patch
Changes to Makefile.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
# 
# 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 \
	@srcdir@/bin/txt2os8.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 \
	@srcdir@/tools/test-os8-send-file.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_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

































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







>











>


<

















<











|
>
>














>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
492
493
494
495
496
497
498
499
500
	@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}  ; \
	    ! test -e $${src}c || \
		@INSTALL@ -m 644 -g @INSTGRP@ -D $${src}c $${dest}c ; \
	  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)







<
<







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
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 bin/teco-pi-demo.in
make-template bin/txt2os8.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







|
|







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
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 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 tools/test-os8-send-file.in
make-template Makefile.in
foreach f [concat [glob "$builddir/bin/*"] [glob "$builddir/tools/*"]] {
    exec chmod +x $f
}







>








<




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
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
  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.send_cmd ("att " + simh_boot_dev + " " + imagename)

  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.send_cmd ("att " + simh_dev + " " + imagename)

  if VERBOSE or DEBUG: print("Booting " + simh_boot_dev + "...")

  s.send_cmd ("boot " + simh_boot_dev)


  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_send_cmd ('\\.', "ZERO " + os8name)
    else:
      os8name = os8dev + att_spec[1] + ":"
      if VERBOSE or DEBUG:
        print("Initializing directory of " + os8name + " in " + \
            imagename)
      s.os8_send_cmd ('\\.', "ZERO " + os8name)

  # 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]







|

















|


>
|
>









|





|







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
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
    # "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)
    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_send_cmd ('\\.', "DIR " + source + "/F=1")
        # 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())


        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)
      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)
    elif copy_type == "within":
      if VERBOSE or DEBUG:
        print("Call COPY of: " + source + " to " + destination)
      s.os8_send_cmd ('\\.', "COPY " + destination + "< " + source)
    else:
      abort_prog ("Unrecognized copy type: " + copy_type)  # Should never happen.
      
  # Detach all mounts and then sys.
  s.back_to_cmd ('\\.')
  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.send_cmd ("det " + simh_dev)
  if VERBOSE or DEBUG:
    print("Detaching " + simh_boot_dev)
  s.send_cmd ("det " + simh_boot_dev)

  # And shut down the simulator.
  if VERBOSE or DEBUG:
    print("Quitting simh.")
  s.send_cmd ('quit')

if __name__ == "__main__": main()







|








|



|

>
>





|




|



|




|




|


|




|


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
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.send_cmd ("detach all")

  s.quit ()
  if VERBOSE: print("Done!")

  
if __name__ == "__main__":
    main()







|

|





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
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
from simh   import *


#### main ##############################################################

def main ():
  # Check for command line flags
  benchmark = len (sys.argv) > 1 and sys.argv[1] == '-b'






  # 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 + "...")
  s.send_cmd ("att rk0 " + rk)

  s.send_cmd ("boot rk0")


  # Start TECO8 in the simulator under OS/8

  s.os8_send_cmd ('\\.', "R TECO")


  # 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







|
>
>
>
>
>















|
>
|
>


>
|
>







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
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
  ]

  # 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_cmd ('\\*', 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:
      # Explicitly shift back from OS/8 context to SIMH command context.
      # We cannot rely on class simh to do this automatically because it
      # expects to see a . prompt from the prior command, but we're
      # still in TECO here, so we must be explicit.
      s.os8_send_ctrl ('e')

      # Ask the simulator what IPS rate we ran that benchmark at.

      s.send_cmd ('show clocks')
      line = s.read_tail ('Execution Rate:')
      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.send_cmd ('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")
  else:
    # 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.
    time.sleep (0.02)       # FIXME: simulator chokes on 'cont' without this
    s.os8_send_ctrl ('e')   # same justification as above
    s.send_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:
    #







|


















<
<
<
<
<
<

>
|
|





|






|



<
<
|







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
180


181
182
183
184
185
    # 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_cmd ('cont')


    s.spin ()


if __name__ == "__main__":
    main()







|
>
>





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.
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
#!/usr/bin/env @PYCMD@
# -*- coding: utf-8 -*-
########################################################################
# Create a tu56 or rk05 image and fill it with ASCII files, i.e.  source code.
#
# It is intended to be be called manually when we have a POSIX
# directory full of ASCII files we want to bulk-copy into SIMH.
#
# The argument is taken both as the name of the image to create
# and the list of files to copy in.
#
# For now, it takes all input and produces all output in the
# current working directory.
#
# IMPORTANT:  Currently all input files are mindlessly passed through
# txt2ptp which transforms POSIX ASCII files to OS/8 ASCII files.
# It WILL mutilate non-ASCII files.
#
# This program is based on the old cc8-tu56-update program, last
# shipped by this project in release v20171222.
#
# Copyright © 2017-2019 by Warren Young and Bill 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.
########################################################################

# Bring in just the basics so we can bring in our local modules
import os
import sys
import argparse

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


#### GLOBALS AND CONSTANTS #############################################

progmsg = True


#### main ##############################################################

def main ():
  global progmsg

  # Set up the arg parser and use it to parse the command line.
  parser = argparse.ArgumentParser()
  parser.add_argument("name",
                      help="Create an OS/8 image from a list of ASCII files.")
  group = parser.add_mutually_exclusive_group(required=True)
  group.add_argument("--tu56", "-t", action="store_true")
  group.add_argument("--rk05a", "-ra", action="store_true")
  group.add_argument("--rk05b", "-rb", action="store_true")

  args = parser.parse_args()
  
  print "Filename: " + args.name
  if args.tu56:
    sdev = "dt0"
    os8dev = "DTA0:"
    imagename = args.name + ".tu56"
    stat_str = "DECtape"

  if args.rk05a:
    sdev = "rk1"
    os8dev = "RKA1:"
    imagename = args.name + ".rk05"
    stat_str = "partition A of"
    
  if args.rk05b:
    sdev = "rk1"
    os8dev = "RKB1:"
    imagename = args.name + ".rk05"
    stat_str = "partition B of"
  
  listname = args.name + ".list"

  # 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))

  # Attach a clean version of the image to the simulator
  if os.path.exists (imagename):
    print "Overwriting old " + stat_str + " image " + imagename

  s.send_cmd ("att " + sdev + " " + imagename)

  # Find and boot the bootable OS/8 disk.  Use the "patched" version
  # because that is what "make run" uses; we use that command to
  # inspect this script's work.
  rk = os.path.join (dirs.os8mo, 'os8v3d-patched.rk05')
  if not os.path.isfile (rk):
    print "Could not find " + rk + "; OS/8 media not yet built?"
    exit (1)
  print "Booting " + rk + "..."
  s.send_cmd ("att rk0 " + rk)
  s.send_cmd ("boot rk0")

  s.os8_send_cmd ('\\.', "ZERO " + os8dev)

  manifest = open (listname, "r")

  for line in manifest:
    src = line.strip()
    if src == "": continue
    if src[0] == '#': continue      # Allow commenting out files

    dest = src.upper ()
    s.os8_send_file (src, os8dev + dest)

  # Exit simulator nicely so that image detaches cleanly
  s.back_to_cmd ('\\.')
  s.send_cmd ("det " + sdev)
  s.send_cmd ('quit')


if __name__ == "__main__": main()
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<














































































































































































































































































































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
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

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 + "..."
    s.send_cmd ("att rk0 " + rk)

    s.send_cmd ("boot rk0")

This shows one of the most-used methods, `simh.send_cmd`, which sends a
line of text along with a carriage return to the spawned child program,
which again is `pidp8i-sim`.


## Driving SIMH and OS/8

After the simulator starts up, we want to wait for an OS/8 “`.`” prompt
and then send the first OS/8 command to start our demo. We use the
`simh.os8_send_cmd` method for that:

    s.os8_send_cmd ('\\.', "R TECO")

This method differs from `send_cmd` in a couple of key ways.

First, it waits for a configurable prompt character — sent as the first
parameter — before sending the command.  This is critical when driving
OS/8 because OS/8 lacks a keyboard input buffer, so if you send text to
it too early, all or part of your input is likely to be lost, so your
command won't work.

Second, because OS/8 can only accept so many characters of input per

second, `os8_send_cmd` inserts a small delay between each input
character to prevent character losses.




(See the commentary for `simh._kbd_delay` if you want to know how that
delay value was calculated.)

The bulk of `teco-pi-demo` consists of more calls to `simh.os8_send_cmd`
and `simh.send_cmd`. Read the script if you want more examples.

**IMPORTANT:** The “`\\.`” syntax for specifying the OS/8 `.` command
prompt is tricky. If you pass just `'.'` here instead, Python's
[regular expression][re] matching engine will interpret it to mean
that it should match *any* character as the prompt, almost certainly
breaking your script's state machine, since it is likely to cause the
call to return too early. If you instead pass `'\.'`, Python's string
parser will take the backslash as escaping the period and again pass
just a single period character to the regex engine, giving the same
result. You must specify it exactly as shown above to escape the
backslash so that Python will send an escaped period to the regex
engine, which in turn is necessary to cause the regex engine to treat
it as a literal period rather than the "any character" wildcard.

Much the same is true when your script needs to await the common
<code>*</code> prompt character: you must pass it like so:

    s.os8_send_cmd ('\\*', 'COMMAND')

[re]: https://en.wikipedia.org/wiki/Regular_expression



## Escaping OS/8 to SIMH









Sometimes you need to escape from OS/8 back to SIMH with a
<kbd>Ctrl-E</kbd> keystroke so that you can send more SIMH commands

after OS/8 starts up. This accomplishes that:







    s.os8_send_ctrl ('e')





























While out in the SIMH context, you *could* continue to call the

`simh.os8_*` methods, but since SIMH can accept input as fast as your

program can give it, it is best to use methods like `simh.send_cmd`


which don't insert artificial delays.  For many programs, this



difference won't matter, but it results in a major speed improvement in




a program like `os8-run` which sends many SIMH and OS/8 commands
back-to-back!























## 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.





### 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.









### Continuing

The way `teco-pi-demo` does it is to send a `cont` command to SIMH.

The problem with this method is that it sometimes hangs the simulator.
The solution is to insert a small delay *before* escaping to the SIMH
context. I'm not sure why this is sometimes necessary. My best guess is
required to give OS/8 time to settle into an interruptible state before
escaping to SIMH, so that on "continue," we re-enter OS/8 in a sane
state.




You can usually avoid the need for that delay by waiting for an OS/8

command prompt before escaping to SIMH, since that is a reliable
indicator that OS/8 is in such an interruptible state.

You don't see these anomalies when using OS/8 interactively because
humans aren't fast enough to type commands at OS/8 fast enough to cause
the problem.  That is doubtless why this bug still exists in OS/8
in 2017.




### Re-Entering

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.os8_restart` method to
avoid the need for a delay *or* a reboot.  It re-calls OS/8's entry
point from SIMH context, which we've found through much testing is
entirely reliable, as compared to sending a SIMH `cont` command without




having delayed before escaping to SIMH context.


`os8-run` uses this option extensively.


## Sending Escape Characters





Several OS/8 programs expect an <kbd>Escape</kbd> (a.k.a. `ALTMODE`)


keystroke to do things. Examples are `TECO` and `FRTS`. There isn't a








specific method to do this because we can do that in terms of one we've
just described:



    s.os8_send_ctrl ('[')






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.


























## But There's More!

The above introduced you to most of the functionality of `class simh`
used by `teco-pi-demo`, but there's more to the class than that,
primarily because the `os8-run` script's needs are broader.  Rather than
just recapitulate the class documentation here, please read through [the
class's source code][ssc], paying particular attention to the method






comments. It's a pretty simple class, making it a quick read.





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
[dsc]: https://tangentsoft.com/pidp8i/file/lib/pidp8i/dirs.py



## <a id="license" name="credits"></a>Credits and License

Written by and copyright © 2017-2019 by Warren Young. Licensed under the
terms of [the SIMH license][sl].

[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



















|
>
|
|
<
<
<

|
|
|
<
<
<

<
|
<

<
<
<
<
|
|
<
>
|
|
>

>
>
|
|

|
|

<
<
|
<
|
|
<
<
<
<
<
<
|
<
<
|
<




>
|
>
>
>
>

>
>
>
>
|
|
>
|
>
>
>

>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

>
>
>
>
|
>
|
>
|
>
>
|
>
>
>
|
>
>
>
>
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







>
>
>









>
>

>
>
>
>
>


|

<
<
<
<
<
<
>
>
>

<
>
|
<
|
<
<
|
<
>
>


|


|
|
|
|
>
>
>
>
|
>




|

>
>
>
>
|
>
>
|
>
>
>
>
>
>
>
>
|
|
>

>
|
>
>

>
>
>
|
|
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>





|
<
<
|
>
>
>
>
>
>
|
>
>
>
>









|
|
>




|
|


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
88
89
90
91
92
93
94
95
96
* 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` with either a 3 argument form that produces a listing file,
or a 2 argument form that does not.
* 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.







|
<







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
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
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`

As explained above in the [Execution contexts](#contexts) section, we
can't just issue a SIMH `continue` command because we need some output
from OS/8 running within SIMH to re-synchronize Python expect to.


After trying several different things that did not work, the least
disruptive action is to send `CTRL/C` and a newline with some keyboard
delays. The `resume` command does this.

However, because the context switches are well-defined, the `resume`
command is completely optional in scripts.  Instead `os8-run`, when it
detects the need to return to OS/8 from SIMH command level, will issue
a `resume` command to force a context switch. 


### <a id="restart-comm"></a>`restart` — Restart OS/8.

`restart`

Equivalent to the SIMH command line of \"`go 7600`\".


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 does re-initilaize some state so it is more disruptive
than the `CTRL/C` resume documented above.


### <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.







|
|
|
>

<
<
|
|
<
<
<
<






|
>








|
|







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
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
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.

Run `PAL8` with either a 3 argument form that produces a listing file,
or a 2 argument form that does not.

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 parsing
of errors when no listing file is created.  This decision is currently
under review, and the `pal8` command may go away in a subsequent version
of `os8-run`.  For now, two forms of the `pal8` command are supported with
an unreasonable number of limitations:

`pal8` _os8-bn-spec_ `<` _os8-pa-spec_ options_spec

`pal8` _os8-bn-spec_ `,` _os8-ls-spec_ `<` _os8-pa-spec_ options_spec

Note that the parser for this wrapper for `PAL8` is quite
conservative in what it allows:

* Only valid `PAL8` options are allowed.
* Only two ways to call `PAL8`:
    * two argument form with binary and source or
    * three argument form with binary, listing, and source.
* _os8-bn-spec_ must specify a binary filename ending in `.BN`
* _os8-ls-spec_ must specify a listing filename ending in `.LS`
* _os8-pa-spec_ must specify a source filename ending in `.PA`

The two argument form is needed because calling pal8 with just two arguments
using either the `begin cdprog SYS:PAL8` or `os8 PAL8` constructs hangs the
state machine.  This is because cdprog is expecting to return to the command
decoder `*` prompt, and `os8 ` is expecting a monitor prompt, not multiple
lines of output.  Expect gets lost and the state machine hangs.

The three file name specifiers can include an OS/8 device specification.

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







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



<
<
<





|
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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
1022
1023
1024
1025
1026
1027
1028
1029
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

* Allow passing in of arguments to PAL8.
* 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








<







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
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
# 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")
_pal8_opts = "[B-J-LNOSTW]"

# For the two arg form:
# The full destination spec is in group(1), The full source spec is in group(4).
# The device components, if any, are in group(2) for destination, and
# group(5) for source.
# The file components are in group(3) for destination, and group (6) for source.
# The destination file must either end in ".BN" or have no extension.
# The source must file either end in ".PA" or have no extension.
# The command line arguments, if any, are in group(7)
_two_arg_pal_re = re.compile ("^" + _os8_BN_fspec + "\s*<\s*" + _os8_PA_fspec + "((/" + \
                              _pal8_opts + ")+|\(" + _pal8_opts + "+\))?$")

# For the 3 arg form:
# The full destination spec is in group(1), The full source spec is in group(7).
# The full listing spec is in group(4)
# The device components, if any, are in group(2) for destination, group(5)
# for listing, and group(8) for source.
# The file components are in group(3) for destination, and group(9) for source,
# and group(6) for listing.
# The destination file must either end in ".BN" or have no extension.
# The source must file either end in ".PA" or have no extension.
# The listing must either end in "LS" or have no extension.
# The command line arguments, if any, are in group(10)

_three_arg_pal_re = re.compile ("^" + _os8_BN_fspec + "\s*,\s*" + _os8_LS_fspec + "\s*<\s*" + \
                                _os8_PA_fspec + "((/" + _pal8_opts + ")+|\(" + _pal8_opts + "+\))?$")

# Regular expression for syntax checking inside ABSLDR

# 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.







<

<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
|
<
<


>







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
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
                    "SYSTEM": re.compile("^\S+$"),
                    "DSK"   : re.compile("^(\S+:)?\S+$"),
                    "BUILD" : re.compile("^(\S+(.BN)?)\s+(\S+(.BN)?)$"),
                    "PRINT" : None,
                    "BOOT"  : None,
                    "end"   : None}

_build_replies = ["\\$", "SYS BUILT", "WRITE ZERO DIRECT\\?", "\\?BAD ARG",
                  "\\?BAD INPUT", "\\?BAD LOAD",
                  "\\?BAD ORIGIN", "\\?CORE", "\\?DSK", "\\?HANDLERS",
                  "I/O ERR", "\\?NAME", "NO ROOM", "SYS NOT FOUND",
                  "\\?PLAT", "\\?SYNTAX", "\\?SYS", "SYS ERR",
                  "\S+ NOT FOUND"]

_pal8_replies = ["ERRORS DETECTED: ", "BE\s+\S+", "CF\s+\S+", "DE\s+\S+", "DF\r", "IC\s+\S+", "ID\s+\S+",
                    "IE\s+\S+", "II\s+\S+", "IP\s+\S+", "IZ\s+\S+", "LD\s+\S+", "LG\s+\S+", "PE\s+\S+",
                    "PH\s+\S+", "RD\s+\S+", "SE\s+\S+", "UO\s+\S+", "US\s+\S+", "ZE\s+\S+", "\S+ NOT FOUND"]


# 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"]







<
<
<
<
<
<
<
<
<
<
<







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
325



























326

































327
328
329
330
331
332
333
334
335
336
337
338
339


















340
341
342
343
344
345
346
  return vers_array


class os8script:
  # Contains a simh object, other global state and methods
  # for running OS/8 scripts under simh.
  #### globals and constants ###########################################
  



























  

































  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 = []




















  #### 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







|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>













>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







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
565
566
567
568
569
570
571
572
      rest = m.group(1)
      if rest == None: rest = ""
      
      if rest == end_str: return
  
  
  #### include_command #################################################
  # Call run_system_script 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"








|







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
775
776
777
778
779
780
781
782





783
784
785
786
787
788
789
790
791
792
793
    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]) + ".")

    self.simh.os8_restart()
    return "success"


  #### restart_command #############################################
  # Call the os8_restart in simh to resume OS/8.

  def restart_command (self, line, script_file):





    if self.verbose:
      print("Restarting OS/8 at line " + str(self.line_ct_stack[0]) + ".")

    self.simh.os8_restart()
    return "success"


  #### patch_command ##############################################
  # Read the named patch file and perform its actions.

  def patch_command (self, line, script_file):







>
>
>
>
>



|







>
>
>
>
>



|







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
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
      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 #######################################################
  
  def parse_odt (self, com, 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_send_ctrl('C')
      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_send_ctrl('C')
        return "err"
  
    self.simh.os8_send_line (new_val)
    return "cont"


  #### futil_exit ########################################################
  
  def futil_exit (self, com, line):
    self.simh.os8_send_line(line)
    return "break"


  #### futil_file ########################################################
  
  def futil_file (self, com, 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_send_ctrl('C')
      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_send_ctrl('C')
      return "err"
    if match.group(2).strip() == "LOOKUP FAILED":
      print("Aborting because of FUTIL lookup failure on: " + fname)
      self.simh.os8_send_ctrl('C')
      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, com, line):
    futil_specials = {
      "EXIT": self.futil_exit,
      "FILE": self.futil_file
    }
  
    if line[0].isdigit():
      # Treat the line as ODT
      return self.parse_odt(com, 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](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"
  


    special_commands = {
      "ODT": self.parse_odt,
      "R": None,               # Get next parser.
      "FUTIL": self.parse_futil
    }
  






    inside_a_command = False
    the_command = ""
    the_command_parser = None
    


    # Resume OS/8 if necessary.
    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 (the_command, line)
        if retval == "break":
          inside_a_command = False
          self.simh.os8_send_ctrl('C')
        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 in special_commands:




          if com == "R":
            # Run command is special.  Take arg as the command and run it.

            com = rest


          inside_a_command = True
          the_command = com
          the_command_parser = special_commands[com]
  
        # We carefully separate com and args
        # But don't make much use of that yet.

        if self.verbose and self.debug: print(line)
        self.simh.os8_send_cmd ("\\.", line[1:])  # Skip Prompt.
  


















    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
  

  #### call_pal8 #######################################################
  # Generic call out to PAL8 with error recovery.
  # We rely on the caller to have good specifications for source,
  # binary and optional listing files.
  
  def call_pal8 (self, source, binary, options):
  
    if self.verbose: print("Assembling " + source)
    com_line = binary + "<" + source + options
    self.simh.os8_send_cmd ("\\.", "R PAL8")
    # Did the command successfully run and enter the command decoder?
    reply = self.simh._child.expect (self.simh._cd_rep_compiled)
    if reply != 0:
      print("PAL8 failed to start at line " + str(self.line_ct_stack[0]))
      return "fail"

    self.simh.os8_send_line (com_line)
    err_count = 0
    reply = self.simh._child.expect (_pal8_replies)
    executed_line = self.simh._child.before.decode().strip()
    reply_str = self.simh._child.after.decode().strip()
    if reply == 0:
      self.simh._child.expect("\d+")
      err_count = int(self.simh._child.after.decode().strip())
      reply_str += " " + self.simh._child.after.decode().strip()
    if reply > 0 or err_count > 0:
      print("PAL8 Error: ")
      print("\t*" + executed_line)
      print("\t" + reply_str)
      self.simh.os8_send_ctrl ('c')      # exit PAL8 Just in case.
      # We could do something better than just dying, I expect.
      return "fail"
    # self.simh.os8_send_ctrl ('[')      # exit PAL8
    return "success"


  #### 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)
    self.simh.send_cmd(line)

    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)
    self.simh.send_cmd(detach_comm)

    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,







>
>
>
>



















|






|


















|








|






|




|










|



|
















|







|













|













|
>
>
|

<


|
>
>
>
>
>
>




>
>
|








|


|











|
>
>
>
>
|
<
>
|
>
>
|
|
<
|
<
<
>

<
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
















<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<













|
>








|
>







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
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
    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)
    self.simh.send_cmd(attach_comm)

    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.send_cmd("show " + line)
    retval = self.simh._child.expect(boot_replies)
    if retval == 1:
      print("Attempt to boot non-existent device: " + line)
      return "die"
    reply = self.simh._child.after.decode()
    m = re.match("^(\S+)\s(\S+),\s+(attached to |not attached)(\S+)?,\s+(.+)\r",
        reply)
    if m == None:
      print("Could not determine if device " + line + " is attached; " +
          "got '" + reply + "'")
      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)
    self.simh.send_cmd(boot_comm)


    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

    if self.verbose: print("Line: " + \
       str(self.line_ct_stack[0]) + ": os8_command: " + os8_comm)



    # Resume OS/8 if necessary.
    if self.simh._context == "simh":
      self.resume_command(line, script_file)














    self.simh.os8_send_cmd ("\\.", os8_comm, self.debug)



    return "success"


  #### 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"

    m_2form = re.match (_two_arg_pal_re, line)





    if m_2form != None:







      # Resume OS/8 if necessary.
      if self.simh._context == "simh":
        self.resume_command(line, script_file)










      # Call the 2arg pal8 code that works hard at error analysis.
      if m_2form.group(7) == None:
        options = ""
      else:
        options = m_2form.group(7)



      return self.call_pal8 (m_2form.group(4), m_2form.group(1), options)
    else:
      m_3form = re.match (_three_arg_pal_re, line)
      if m_3form != None:
        # Just run the OS/8 command.
        os8_comm = "pal8 " + line
        if self.verbose:
          print("Line: " + str(self.line_ct_stack[0]) + \
              ": Calling 3-arg pal8 command: " + os8_comm)


        self.simh.os8_send_cmd ("\\.", os8_comm)
      else:








        print("At line " + str(self.line_ct_stack[0]) + \
          ": Unrecognized pal8 form: {" + line + "}.")
        return "fail"
    return "success"


  #### begin_command ###################################################
  
  def begin_command (self, line, script_file):
    if not self.booted:







|
>













|




|

|


|










|
>
>













>



>
>
|

|

>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
>
>
|














|
>
>
>
>
>
|
>
>
>
>

>
>
|
|
|
>
>
>
>
>
>
>
>
>
|
<
<
|
<
|
>
>
>
|
|
|
|
<
<
|
|
|
>
>
|

>
>
>
>
>
>
>
>
|
<
|







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


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
    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:


      # Resume OS/8 if necessary.
      if self.simh._context == "simh":
        self.resume_command(line, script_file)

      return sub_commands[m.group(1)](m.group(3), script_file)
  
  
  #### run_build_build #################################################
  # ***CAUTION***
  # When you do this you are instructing BUILD to
  # OVERWRITE the system area.  If you do this to your
  # running RK05 pack by mistake, you WILL make a mess
  # and need to re-run mkos8 to re-make it.
  
  def run_build_build (self, os8_spec, cd_spec):
    self.simh.os8_send_cmd ("\\$", "BUILD", debug=True)
    self.simh.os8_send_cmd ("LOAD OS/8: ", os8_spec, debug=True)
    self.simh.os8_send_cmd ("LOAD CD: ", cd_spec, debug=True)
    return "success"


  #### build_subcomm ###################################################
  
  def build_subcomm (self, old_line, script_file):
    # A race condition results if we send ^C when we are already at
    # Monitor level.  So need_exit gets set to False, when we know
    # we have already exited build, and are at the monitor prompt.
    need_exit = True
    os8_comm = "RU " + old_line
    if self.verbose:
      print("Line " + str(self.line_ct_stack[0]) + ": " + os8_comm)
    prompt_str = "\n\\$$"


    if self.debug:

      print("sending to simh: " + os8_comm)
      print(" and expecting prompt: '\\n\\\\$$'")
    self.simh.os8_send_cmd ("\\.", os8_comm)

    self.simh._child.expect(prompt_str)

    

    for line in script_file:
      # if self.debug:
      #  print("line: " + line)
      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 build_sub not in _build_comm_regs:
        print("Unrecognized BUILD command at line " + \
            str(self.line_ct_stack[0]) + ": " + build_sub)
        continue
  

      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.")



          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.")



          return "fail"
        


        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 level unless need_exit == False.
        if need_exit:
          self.simh.os8_send_ctrl ('c')

        return "success"
        

      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 + \







>
>
|

|




<
<
<
<
<
<
|
<
|
<
<
<
|
|
<


<
<
<
<



|
>
>
|
>
|
|
|
>
|
>
|
>

<
<













>




|
>




>
>
>





>
>
>


>
>





|
|
|
|


>







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
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
                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)
          if self.debug:
            print("sending to simh: BUILD")
          self.simh.os8_send_line ("BUILD")

          build_build_replies = ["LOAD OS/8: "]
          build_build_replies.extend(_build_replies)
          
          if self.debug:
            print("expecting: " + str(build_build_replies))
          reply = self.simh._child.expect(build_build_replies)
          if self.debug:
            print("reply: " + str(reply))
            print("before: " + self.simh._child.before.decode().strip())
            print("after: " + self.simh._child.after.decode().strip())
          if reply != 0:
            print("No prompt for LOAD OS/8 in BUILD command within BUILD at line " + \
              str(self.line_ct_stack[0]) + ".")
            print("Instead got: {" + self.simh._child.after.decode() + "}.")
            print("Exiting BUILD.")
            return "die"
          if self.debug:
            print("sending to simh: " + kbm_arg)
          self.simh.os8_send_line (kbm_arg)

          build_build_replies = ["LOAD CD: "]
          build_build_replies.extend(_build_replies)
          
          if self.debug:
            print("expecting: " + str(build_build_replies))
          reply = self.simh._child.expect(build_build_replies)
          if self.debug:
            print("reply: " + str(reply))
            print("before: " + self.simh._child.before.decode().strip())
            print("after: " + self.simh._child.after.decode().strip())
          if reply != 0:
            print("No prompt for LOAD CD in BUILD command within BUILD at line " + \
              str(self.line_ct_stack[0]) + ".")
            print("Instead got: {" + self.simh._child.after.decode() + "}.")
            print("Exiting BUILD.")
            return "die"
          if self.debug:
            print("sending to simh: " + cd_arg)

          self.simh.os8_send_line (cd_arg)

          # Done with BUILD command dialog within BUILD.SV
          # Get that BUILD.SV prompt.
          if self.debug:
            print("Expecting prompt: '\\n\\\\$$'")
          self.simh._child.expect(prompt_str)
          if self.debug:
            print("Resume BUILD.SV command loop.")
          continue


      comm = build_sub + " " + rest
      if self.verbose:
        print("Line " + str(self.line_ct_stack[0]) + ": BUILD-> " + comm)






      if self.debug:
        print("sending to simh: " + comm)
      self.simh.os8_send_line (comm)
      if self.debug:

        print("expecting: " + str(_build_replies))
      reply = self.simh._child.expect(_build_replies)





      if self.debug:


        print("reply: " + str(reply))
        print("before: " + self.simh._child.before.decode().strip())





        print("after: " + self.simh._child.after.decode().strip())
      if reply > 3:

        print("BUILD error at line " + str(self.line_ct_stack[0]) + \
          " with command " + self.simh._child.before.decode().strip())
        print("\t" + self.simh._child.after.decode().strip())
        self.simh.os8_send_ctrl ('c')
      # Special case "BOOT" sub-command: May ask, "WRITE ZERO DIRECT?"
      if build_sub == "BOOT":
        if reply == 2:
          if self.debug:
            print("Boot received \"WRITE ZERO DIRECT?\"")
            print("sending to simh: Y")
          self.simh.os8_send_line("Y")
          if self.debug:
            print("Expecting \"SYS BUILT\"")
          reply = self.simh._child.expect("SYS BUILT")
          if self.debug:
            print("ZeroDir: reply: " + str(reply))
            print("before: " + self.simh._child.before.decode().strip())
            print("after: " + self.simh._child.after.decode().strip())
          need_exit = False
        elif reply == 0:
          reply = self.simh._child.expect("SYS BUILT")
          if self.debug:
            print("$: reply: " + str(reply))
            print("before: " + self.simh._child.before.decode().strip())
            print("after: " + self.simh._child.after.decode().strip())
          need_exit = False
        elif reply == 1:

          reply = self.simh._child.expect("\\.")
          if self.debug:
            print("SysBuilt: reply: " + str(reply))
            print("before: " + self.simh._child.before.decode().strip())
            print("after: " + self.simh._child.after.decode().strip())
    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)
    self.simh.os8_send_cmd ("\\.", os8_comm)









    



    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":







<
<
<

<
<
|
<
<
|
|
<
<
<
<


<
|

<
<
<

<
<
|
<
<
|
|
<
<
<
<


<
|

<
<
>
|
|
|
|
<
<
<




>



>

>
>
>
>
|
<
<
|
>
|
|
>
>
>
>
>
|
>
>
|
|
>
>
>
>
>
|
<
>


<
<
<
<
<
|
<
|
<
|
|
|
<
<
<
<
<
|
|
<
<
<
<
<
<
>
|
|
<
<
<



|
>









|
>
>
>
>
>
>
>
>
>
|
>
>
>







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


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
        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]) + ".")


        self.simh.os8_send_ctrl ('[')

        return retval
  
      # We could do some basic OS/8 command decoder synax checking here.
      comm = line
      if self.verbose:
        print("Line: " + str(self.line_ct_stack[0]) + ": * " + line)

      self.simh.os8_send_cmd ("\\*", line)


































    print("Warning end of file encountered at line " + \
        str(self.line_ct_stack[0]) + \
        " with no end of cdprog command block.")


    self.simh.os8_send_ctrl ('[')


    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)
  
     
  #### Data Structures ################################################
  #
  # The make procedures use helper procedures
  # to confirm that the relevant input image file exists and
  # to perform the file copies.
  #
  # A data structure called "image copyin"
  #    describes the image file pathname relative to an implied root,
  #    provides a message string when the action is run,
  #    names a default destination device for whole image content copies,
  #    offers an optional array of specific file copy actions.
  #
  # FUTURE: Parse source path for ".tu56" vs. ".rk05" for more general use.
  # Currently all code assumes a copyin comes from a DECtape image.
  #
  # Example: We Install all files for ADVENT, the Adventure game:
  #
  # advent_copyin = ['RKB0:', 'subsys/advent.tu56',  "Installing ADVENT...", None]
  #
  # A DECtape device is chosen for attachment in SIMH and
  # a 'COPY *.*' command is filled in with the Destination device, and the chosen DECtape.
  #
  # A data structer called "file copyin"
  #     provides override destination to allow renames or varied destinations.
  #     names individual files within a copyin to use
  #
  # Example:  To copy the C compiler we want all .SV files on SYS
  #           but everything else to RKB0:
  #           (Note the useful /V option to invert the match.)
  #
  # cc8_sv_file_copyin   = ['SYS:', '*.SV']
  # cc8_rest_file_copyin = ['RKB0:', '*.SV/V']
  #
  # A 'COPY' command is filled in with the override destination and
  # The file spec is used with the chosen dectape instead of "*.*"
  #
  
  #### copyin_pair #####################################################
  # Copy two images into two destinations with two messages
  #
  # Assumes our context is "in simh".
  # Assumes dt0 and dt1 are free.
  # Assumes rk0 is the boot device
  # Detaches dt0 and dt1 after using them.
  # copyin0 mounts on dt0.  copyin1 mounts on dt1.
  # Either copyin or both can be None
  
  def copyin_pair (s, copyin0, copyin1, debug):
    if debug:
      if copyin0:
        print("Copying: " + copyin0[1] + " to: " + copyin0[0] + "from dt0")
      else:
        print("copyin0 is empty.")

      if copyin1:
        print("Copying: " + copyin1[1] + " to: " + copyin1[0] + "from dt1")
      else:
        print("copyin1 is empty.")
      
    if not copyin0 and not copyin1: return   # Nothing to do.
  
    # The order of events here is a bit funky because we want
    # to use both DECtape drives but also
    # switch between SIMH and OS/8 as infrequently as possible.
  
    if copyin0: self.simh.send_cmd ("attach -r dt0 " + dirs.os8mi + copyin0[1])
    if copyin1: self.simh.send_cmd ("attach -r dt1 " + dirs.os8mi + copyin1[1])
  
    self.simh.os8_restart()
  
    if copyin0:
      if self.verbose: print(copyin0[2])
      if copyin0[3]:                    # We have specific files to do.
        for file_copyin in copyin0[3]:
          self.simh.os8_send_cmd ("\\.", "COPY " + file_copyin[0] + "<DTA0:" + file_copyin[1])
      else:
        self.simh.os8_send_cmd ("\\.", "COPY " + copyin0[0] + "<DTA0:*.*")
  
    if copyin1:
      if self.verbose: print(copyin1[2])
      if copyin1[3]:                    # We have specific files to do.
        for file_copyin in copyin1[3]:
          self.simh.os8_send_cmd ("\\.", "COPY " + file_copyin[0] + "<DTA1:" + file_copyin[1])
      else:
        self.simh.os8_send_cmd ("\\.", "COPY " + copyin1[0] + "<DTA1:*.*")
  
    self.simh.back_to_cmd("\\.")
  
    if copyin0: self.simh.send_cmd ("detach dt0")
    if copyin1: self.simh.send_cmd ("detach dt1")
  
  
  #### do_all_copyins ##################################################
  
  def do_all_copyins (s, copyins, debug):
    pair_idx = 0
    pair_ct = int(len(copyins) / 2)
    while pair_idx < pair_ct:
      copyin_pair(s, copyins[pair_idx * 2], copyins[pair_idx * 2 + 1], debug)
      pair_idx += 1
    if pair_ct * 2 < len(copyins):
      copyin_pair(s, copyins[len(copyins) - 1], None, debug)
  
  
  







>
>
|
>



<


>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>



>
>
|
>
>














<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
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
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-2019 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








|







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












48

49
50
51
52
53
54
55
import tempfile
import time
import re
import sys

import pidp8i













class simh: 

  # 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.







>
>
>
>
>
>
>
>
>
>
>
>
|
>







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
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
  # 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]

  # Known OS/8 error strings and a flag indicating whether the error
















  # dumps us back out to the OS/8 command monitor or leaves us in the

  # called program.





  _os8_errors = [


    # The date comment tells when each message is observed and validated





    #

















    # OS/8 Handbook 1974 page 1-43/81 Keyboard Monitor Error Messages:
    ["MONITOR ERROR 2 AT \d+ \\(DIRECTORY I/O ERROR\\)", True],   # 2018.02.11
    ["MONITOR ERROR 5 AT \d+ \\(I/O ERROR ON SYS\\)", True],
    ["MONITOR ERROR 6 AT \d+ \\(DIRECTORY I/O ERROR\\)", True],
    ["(\S+) NOT AVAILABLE", False],
    ["(\S+) NOT FOUND", False],                                   # 2018.02.11
    # OS/8 Handbook 1974 page 1-51/89 Command Decoder Error Messages
    ["ILLEGAL SYNTAX", False],                                    # 2018.02.11
    ["(\S+) DOES NOT EXIST", False],
    # ["(\S+) NOT FOUND", False],                                 # See above
    ["TOO MANY FILES", False],
    # OS/8 Handbook 1974 page 1-75/113 CCL Error Messages
    ["BAD DEVICE", False],
    ["BAD EXTENSION", False],
    # OS/8 Handbook 1974 page 1-106/144 PIP Error Messages
    ["ARE YOU SURE", False],
    ["BAD DIRECTORY ON DEVICE #\s?\d+", False],
    ["BAD SYSTEM HEAD", False],
    ["CAN'T OPEN OUTPUT FILE", False],
    ["DEVICE #\d+ NOT A DIRECTORY DEVICE", False],
    ["DIRECTORY ERROR", False],
    ["ERROR DELETING FILE", False],
    ["ILLEGIAL BINARY INPUT, FILE #\d+", False],
    ["INPUT ERROR, FILE #\s?\d+", False],
    ["IO ERROR IN \\(file name\\) --CONTINUING", False],
    ["NO ROOM FOR OUTPUT FILE", False],
    ["NO ROOM IN \\(file name\\) --CONTINUING", False],
    ["OUTPUT ERROR", False],
    ["PREMATURE END OF FILE, FILE #\s?\d+", False],
    ["ZERO SYS?", False],
    # OS/8 Handbook 1974 page 2-81/244: DIRECT Error Messages
    ["BAD INPUT DIRECTORY", False],
    ["DEVICE DOES NOT HAVE A DIRECTORY", False],
    ["ERROR CLOSING FILE", False],
    ["ERROR CLOSING FILE", False],
    ["ERROR READING INPUT DIRECTORY", False],
    ["ILLEGAL \\*", False],
    # OS/8 Handbook 1974 page: 2-109/272: FOTP Error Messages
    ["ERROR ON INPUT DEVICE, SKIPPING \\((\S+)\\)", False],
    ["ERROR ON OUTPUT DEVICE, SKIPPING \\((\S+)\\)", False],
    ["ERROR READING INPUT DIRECTORY", False],
    ["ERROR READING OUTPUT DIRECTORY", False],
    ["ILLEGAL \\?", False],
    ["NO FILES OF THE FORM (\S+)", False],
    ["NO ROOM, SKIPPING \\((\S+)\\)", False],
    ["SYSTEM ERROR-CLOSING FILE", False],
    ["USE PIP FOR NON-FILE STRUCTURED DEVICE", False],
    ["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.







|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
>
|
>
>
>
>
|
|
>
>
|
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>







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
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
    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 what our command context is so our caller does
    # not need to explicitly call back_to_cmd() or sendcontrol ('e').
    # We keep track of the command context and transition automatically.
    self._context = "simh"
    
    # Parse our OS/8 Errors table into actionable chunks

    for error_spec in self._os8_errors:
      self._os8_error_match_strings.append(error_spec[0])
      self._os8_fatal_check.append(error_spec[1])

    # Did command start the command decoder or die with a monitor error?
    self._cd_replies = ['\\*']
    self._cd_replies.extend(self._os8_error_match_strings)

    # Lots of messages. Let's pre-compile their regexps.
    self._cd_rep_compiled = []
    for reply in self._cd_replies:
      self._cd_rep_compiled.append(re.compile(reply.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')


  #### back_to_cmd ######################################################
  # Pause the simulation and return to the SIMH command prompt when the
  # simulated software emits the given prompt string.  Typically used to
  # wait for OS/8 to finish running a command so we can do something
  # down at the SIMH layer instead.

  def back_to_cmd (self, prompt):
    self._child.expect ("\n%s$" % prompt)
    self.os8_kbd_delay ()
    self._child.sendcontrol ('e')
    self._context = "simh"


  #### os8_get_file ####################################################
  # Rough inverse of os8_send_file.
  #
  # Both paths must be given and are used literally.  (Contrast our
  # inverse, where the destinatinon file name is produced from the
  # source if not given.)
  #
  # When this function is called to pull a file sent by our inverse, the
  # conversion should be lossless except for the transforms done by our
  # underlying utility tools, such as the LF -> CR+LF done by txt2ptp
  # but not undone by ptp2txt.
  #
  # Entry context should be inside OS/8.  Exit context is inside OS/8.

  def os8_get_file (self, intname, extname):
    # Attach a blank paper tape to the simulator.
    ptf = tempfile.NamedTemporaryFile (suffix = '.pt', delete = False)
    ptf.close ()
    ptn = ptf.name
    self.back_to_cmd ('\\.')
    self.send_cmd ('attach ptp ' + ptn)

    # Punch internal file to external paper tape image
    self.os8_restart ()
    self.os8_send_cmd ('\\.', 'PUNCH ' + intname);
    self.back_to_cmd ('\\.')        # wait for transfer to finish

    # Convert text file from SIMH paper tape format
    tool = os.path.join (pidp8i.dirs.build, 'bin', 'ptp2txt')
    self.send_cmd ('detach ptp')
    subprocess.call (tool + ' < ' +  ptn + ' > ' + extname, shell = True)

    # Return to OS/8, just because that's where we were on entry, so we
    # should not change that.
    self.os8_restart ()


  #### os8_kbd_delay ###################################################
  # Artificially delay the media generation process to account for the
  # fact that OS/8 lacks a modern multi-character keyboard input buffer.
  # It is unsafe to send text faster than a contemporary terminal could,
  # though we can scale it based on how much faster this host is than a
  # real PDP-8.  See the constants above for the calculation.

  def os8_kbd_delay (self):
    time.sleep (self._os8_kbd_delay)


  #### os8_send_cmd ####################################################
  # Wait for an OS/8 command prompt running within SIMH, then send the
  # given line.
  #
  # The default timeout may seem excessive, but it is based on hard
  # experience: when SIMH is running on a slow host with slow devices
  # (e.g. the byte-by-byte transfer of the TD8E tape controller) a
  # single OS/8 command can take a very long time if it requires a lot
  # of I/O.  If you are calling this for a command that you know for a
  # fact takes less time on all hosts and with all practical device
  # configurations, we encourage you to pass a smaller value.
  #
  # The caller must pass a prompt string because OS/8 has several
  # different prompt types: ., *, $, and #, at least.  Beware in passing
  # these that they're treated as regular expressions, so characters
  # special in Python REs must be escaped.  And then since the RE escape
  # character (\) is also special in Python strings, you must double-
  # escape *it*.  So, '\\$' is a reasonable thing to pass as the prompt
  # value, meaning "look for a literal $ character."
  #
  # This routine requires the caller to ensure that the system is in
  # OS/8 Keyboard Monitor context — that is, ready for another OS/8
  # command — before calling it.  While this routine is able to check
  # whether we're in OS/8 context as a prerequisite, it is not practical
  # for us to return the system to OS/8 context automatically from some
  # other context because that would require us to know the current
  # context in detail, but only the caller has that full knowledge.
  # 
  # Part of the problem is that in order to synchronize this object's
  # internal state machine with the SIMH + OS/8 + running program state,
  # we have to somehow provoke a prompt character from the running
  # program.  How do we do that without knowing the current context?
  # In some contexts, a CR or LF will do it, in others BS, and in others
  # it'll take Ctrl-C.  Then you have a new problem, with is that those
  # same characters aren't harmless: they'll change the very context
  # we're trying to probe!  For instance, a Ctrl-C sent to the OS/8
  # Keyboard Monitor just results in another prompt, but a Ctrl-C sent
  # to a program running *under* OS/8 might kill it.  Or it might be
  # treated as input.  Or it might be ignored entirely.
  #
  # There is no magic sequence we can send to SIMH or OS/8 to return the
  # system to OS/8 Keyboard Monitor context without either changing the
  # context in some way that might break the caller's needed state (e.g.
  # Ctrl-E, go 7600) or lose data (e.g. Ctrl-C) or fail entirely (e.g.
  # Enter.)  It's up to the caller to arrange this.

  def os8_send_cmd (self, prompt, line, debug=False, timeout=60):
    if self._context != 'os8': 
      print("OS/8 is not running. Cannot execute: " + lin)
      return
    if debug:
      print("os8_send_cmd: expecting: " + prompt)
      print("\tLast match before: {" + self._child.before.decode() + "}")
      print("\tLast match after: {" + self._child.after.decode() + "}")
    self._child.expect ("\n%s$" % prompt, timeout = timeout)
    self.os8_send_line (line)


  #### os8_send_ctrl ###################################################
  # Send a control character to OS/8 corresponding to the ASCII letter
  # given.  We precede it with the OS/8 keyboard delay, since we're
  # probably following a call to os8_send_line or os8_send_cmd.

  def os8_send_ctrl (self, char):
    cc = char[0].lower ()
    self.os8_kbd_delay ()
    self._child.sendcontrol (cc)
    
    if cc == 'e': self._context = 'simh'


  #### mk_os8_name # ###################################################
  # Create an OS/8 filename: of the form XXXXXX.YY
  # From a POSIX path.

  def mk_os8_name(self, dev, path):
    bns = os.path.basename (path)
    bns = re.sub("-|:|\(|\)|!", "", bns)
    bns = bns.upper()
    if "." not in bns:
      return dev + bns[:min(6, len(bns))]
    else:
      dot = bns.index('.')
      return dev + bns[:min(6, dot, len(bns))] + "." + bns[dot+1: dot+3]


  #### os8_send_file ###################################################
  # Send a copy of a local text file to OS/8.  The local path may
  # contain directory components, but the remote must not, of course.
  #
  # If the destination file name is not uppercase, it will be so forced.
  #
  # If the destination file name is not given, it is taken as the
  # basename of the source file name.
  #
  # The file is sent via the SIMH paper tape device through PIP in its
  # default ASCII mode, rather than character by character for two reasons:
  #
  # 1. It's faster.  It runs as fast as the simulator can process the
  #    I/O instructions, without any os8_kbd_delay() hooey.
  #
  # 2. It allows lowercase input regardless of the way the simulator is
  #    configured.  ASCII is ASCII.
  #
  # Entry context should be inside OS/8.  Exit context is inside OS/8.

  def os8_send_file (self, source, dest = None):
    # Create path and file names not given
    bns = os.path.basename (source)
    if dest == None: dest = bns
    dest = dest.upper ()

    # Convert text file to SIMH paper tape format
    bdir = pidp8i.dirs.build
    pt   = os.path.join (bdir, 'obj', bns + '.pt')
    tool = os.path.join (bdir, 'bin', 'txt2ptp')
    subprocess.call (tool + ' < ' + source + ' > ' + pt, shell = True)

    # Paper tape created, so attach it read-only and copy it in.  We're
    # relying on txt2ptp to insert the Ctrl-Z EOF marker at the end of
    # the file.
    self.back_to_cmd ('\\.')
    self.send_cmd ('attach -r ptr ' + pt)
    self.os8_restart ()
    self.os8_send_cmd ('\\.', 'R PIP')
    self.os8_send_cmd ('\\*', dest + '<PTR:')
    self._child.expect ('\\^')
    self.os8_send_ctrl ('[')      # finish transfer
    self._child.expect ('\\*')
    self.os8_send_ctrl ('[')      # exit PIP


  #### pip_error_handler ###############################################
  # Common error handler for os8_pip_to and os8_pip_from

  def pip_error_handler(self, caller, reply):
    print("PIP error from inside " + caller + ": ")
    # print("\t" + self._child.before.decode().strip())
    print("\t" + self._child.after.decode().strip())
    
    # Was this error fatal or do we need to clean up?
    # Remember we subtract 1 from reply to get index into error tables.
    if not self._os8_fatal_check[reply - 1]:
      # Non fatal error.  Exit pip to the monitor
      self.os8_send_ctrl ('[')      # exit PIP


  #### os8_pip_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):
    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

    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.back_to_cmd ('\\.')
    self.send_cmd ('attach -r ptr ' + pt)
    self.os8_restart ()
    self.os8_send_cmd ('\\.', 'R PIP')
    # Was the start of PIP successful, or did we get a Monitor error?
    reply = self._child.expect (self._cd_rep_compiled)
    if reply != 0:
      self.pip_error_handler ("os8_pip_to", reply)
      return

    # Has the read-in been successful?
    self.os8_send_line (dest + '<PTR:' + option)
    self._child.expect ('\\^')
    self.os8_send_ctrl ('[')      # finish transfer
    reply = self._child.expect (self._cd_rep_compiled)
    if reply !=0:
      self.pip_error_handler("os8_pip_to", reply)
      if did_conversion:
        os.remove(pt)
      return
    self.os8_send_ctrl ('[')      # exit PIP
    # We could detach ptr and restart OS/8 here, but we don't need to.
    # Do remove the temp file if we created one.
    if did_conversion:
      os.remove (pt)


  #### os8_pip_from ###################################################
  # Fetch a file from OS/8 to a local path using PIP.
  #
  # The OS/8 source filename is synthesized from the basename of the path,
  # upcasing if necessary.
  #
  # 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):
    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.back_to_cmd ('\\.')
    self.send_cmd ('attach ptp ' + path)
    self.os8_restart ()
    
    self.os8_send_cmd ('\\.', 'R PIP')
    # Was the start of PIP successful or did we get a Monitor error?
    reply = self._child.expect (self._cd_rep_compiled)
    if reply != 0:
      self.pip_error_handler ("os8_pip_from", reply)
      return
    
    self.os8_send_line ('PTP:<' + os8name + option)

    reply = self._child.expect (self._cd_rep_compiled)
    if reply !=0:
      self.pip_error_handler ("os8_pip_from", reply)
      # There is an empty PTP file we need to remove.
      os.remove(path)
      return

    self.os8_send_ctrl ('[')      # exit PIP
    self.back_to_cmd ('\\.')
    self.send_cmd ('detach ptp')  # Clean flush of buffers.
    self.os8_restart ()

    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)


  #### os8_send_line ###################################################
  # Core of os8_send_cmd.  Also used by code that needs to send text
  # "blind" to OS/8, without expecting a prompt, as when driving EDIT.

  def os8_send_line (self, line):
    self.os8_send_str (line)
    self._child.send ("\r")


  #### 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._child.send (str[i])
      self.os8_kbd_delay ()


  #### os8_resume #######################################################
  # Resume OS/8.
  #
  # It would be nice if we could just send  the "cont" command
  # and have python expect and OS/8 synch right up.
  # But so far we have not figured out how to do that.
  # To resume OS/8 from SIMH we need to provoke a prompt.
  # Typing a rubout or ^U at a SIMH terminal session does this.
  # But not when SIMH is run under python expect.
  # We don't know why.
  #
  # boot works
  # go 7600 works
  # ^C <pause> \n\r works.
  #
  # The resume command uses the ^C method as the least disruptive
  # to system state.

  def os8_resume (self):
    if self._context == "os8": return   # Already running.
    
    self.send_cmd("cont")   # sets os8 context for us.

    # Now provoke a keyboard monitor prompt.
    self.os8_send_ctrl('c')
    self.os8_kbd_delay()
    self.os8_send_str('\r\n')
  

  #### os8_restart #######################################################
  # Called while in the SIMH command prompt, this restarts OS/8.
  #
  # This one-line function exists to abstract the method we use and to
  # document the reason we do it this way.
  #
  # Currently we do this by calling the OS/8 command entry point, which
  # has the virtue that it forces another . prompt, which keeps the
  # send/expect sequencing simple when switching between OS/8 and SIMH
  # command modes.
  #
  # That is why we don't use "cont" here instead: it requires that the
  # caller always be aware of when the . prompt went out; complicated.
  #
  # Another simple alternative is "boot rk0", which actually benchmarks
  # a smidge faster here.  We choose this method instead because we
  # expect that some of our callers will want to do several different
  # things in a single OS/8 session, which rebooting would screw up.

  def os8_restart (self):
    self.send_cmd ("go 7600")


  #### os8_squish ########################################################
  # Wraps the OS/8 SQUISH command for a given device.

  def os8_squish (self, device):
    self.os8_send_cmd ('\\.', "SQUISH " + device + ":")
    self.os8_kbd_delay ()
    self._child.send ("Y\r");


  #### 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):
    self.back_to_cmd ('\\.')
    self.send_cmd ('de 00200-07577 0')
    self.send_cmd ('de 10000-17577 0')
    self.send_cmd ('de 20000-27577 0')
    self.send_cmd ('de 30000-77777 0')
    self.os8_restart ()


  #### quit ############################################################
  # Quits the simulator and waits for it to exit

  def quit (self):
    self.send_cmd ("q")
    self._child.expect (pexpect.EOF)


  #### 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 ()


  #### send_cmd ########################################################
  # Wait for a SIMH command prompt and then send the given command.
  # If we are not in the simh context send ^e and set context "simh".
  # If we are not in simh context, send ^e set context "simh"
  #    and hope for the best.
  # If we issue a command that enters os8 context, set context "os8".
  # Note exiting out of OS/8 into the SIMH context is a bit of a
  # trap door. Resynchronizing with python expect requires provoking
  # a prompt, and prompts are context specific.
  # Perhaps we should require separate and explicit commands to
  # escape to SIMH. But for now, just be careful to use os8_resume
  # after calling send_cmd.
  
  def send_cmd (self, cmd):
    if self._context == "os8":
      self._child.expect ("\n\\.$")
      self._child.sendcontrol ('e')
      self._context = "simh"
    elif self._context != "simh":
      self._child.sendcontrol ('e')
      self._context = "simh"
      
    self._child.expect ("sim> $")
    self._child.sendline (cmd)
    m = re.match (self._simh_comm_re, cmd)
    if m != None and m.group(1)[:1].upper() in self._enters_os8_context:
      self._context = "os8"


  #### send_line #######################################################
  # Sends the given line "blind", without waiting for a prompt.

  def send_line (self, line):
    self._child.sendline (line)


  #### set_logfile #####################################################

  def set_logfile (self, lf):
    self._child.logfile = lf


  #### 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)







<
<



<
>
|
<
|
|
<
<
<

|
|
|
|
|











<
<
<
<
<
|
<
<
<
<
<
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

<
|
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<

<
<
<
<
<
|
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<









<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







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
771

772
773




774
775
776
777
778
779
780
          "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):
    self.send_cmd ('de all 0')

  





  #### describe_dev_config #############################################
  # We provide an interface to alter SIMH device configurations for
  # specific parameters and specific devices
  #
  # dev configs supported:  rx, tti, tape
  #
  # rx:     RX8E, RX28   RX8E is the simh name for RX01 support.







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
















|
>
|

>
>
>
>







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
814
815
816
817
818
819
820
821
      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()
    self.send_cmd("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.







>






|







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
914

915

916
917
918
919
920
921
922
923
924
925
926
927
928

929
930
931
932
933
934
935
        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] + ")")
            self.send_cmd(det_comm)

        self.send_cmd("set " + from_tape + " disabled")


    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:
      self.send_cmd("set " + to_tape + " enabled")    


    # 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:







|
>
|
>












|
>







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
1002

1003
1004
1005
1006
1007
1008
1009
    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...")
      self.send_cmd("set rx enabled")

      # 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







|
>







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
1028

1029
1030

1031
1032
1033
1034
1035
1036
1037
      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] + ")")
          self.send_cmd(det_comm)


    self.send_cmd("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 + \







|
>

|
>







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
1083

1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099


1100































































































































































































































































































































































































      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

    self.send_cmd("set 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










































































































































































































































































































































































































|
>
















>
>

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
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
57
58
59
60
61
62
63
64
65
# 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.

  os8 SET SYS NO INIT
  
  begin build SYS:BUILD
    DELETE DTA0,DTA1
    INSERT TD8A,DTA0,DTA1
    BOOT
  end build

  configure tape td







>
>
>
>
>
>





<
<







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
156
157
158
159
160
161
162
163
164
165
    PRINT
    BOOT
    end build

end enabled v3d

begin enabled v3f
  # v3f needs device drivers from a V3d Distribution DECtape
  mount dt1 $os8mi/al-4712c-ba-os8-v3d-2.1978.tu56 readonly required

  os8 COPY DSK:<RKB1:OS8.BN,CD.BN

  begin build RKB1:BUILD
    LOAD DTA1:RK8ESY.BN
    LOAD DTA1:RK8ENS.BN
    LOAD DTA1:PT8E.BN
    







<
<
<







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





240

241
242
243
244
245
246
247
    INSERT RK05,RKA2,RKB2
    
    BUILD DSK:OS8.BN DSK:CD.BN
    BOOT
  end build

  # Explicit unmount to avoid possible race condition.





  umount dt1

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







>
>
>
>
>
|
>







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
&COPY
&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
20
21
22
23
24
25
26
27
28
29
30
31
32
    echo "fail.rklz not found."
    exit -1
fi

lz4 -dq last.rklz last.rk05
lz4 -dq fail.rklz fail.rk05

mkdir rka_last rkb_last rka_fail rkb_fail

echo "unpack 1 of 4: last rka"
../../bin/os8-cp -rk0s last.rk05 -i RKA0:*.* rka_last/
echo "unpack 2 of 4: last rkb:"
../../bin/os8-cp -rk0s last.rk05 -i RKB0:*.* rkb_last/
echo "unpack 3 of 4: fail rka"
../../bin/os8-cp -rk0s fail.rk05 -i RKA0:*.* rka_fail/
echo "unpack 4 of 4: fail rkb"
../../bin/os8-cp -rk0s fail.rk05 -i RKB0:*.* rkb_fail/

diff rka_last rka_fail
diff rkb_last rkb_fail







<
|
<
<
<
<
<
<
<
<

|
|
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.
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
#!/usr/bin/env @PYCMD@
# -*- coding: utf-8 -*-
########################################################################
# test-os8-send-file - Repeatedly sends random files through class simh
#   method os8_send_file() and pulls it back through os8_get_file(),
#   then checks that the file is unchanged.
#
# Copyright © 2017-2019 by 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 core modules we need
import filecmp
import os.path
import random
import tempfile


#### gen_file ##########################################################
# Generate a random text file.  In order that the process be lossless
# through the txt2ptp/ptp2txt filters and the SIMH + OS/8 terminal
# handling, we use only printable ASCII plus CR+LF characters.  Returns
# the name of the generated file.

def gen_file ():
    f = tempfile.NamedTemporaryFile (delete = False, suffix = '.tmp')
    for i in range (0, random.randint (10, 4000)):
      if random.randint (0, 10) != 0:
        # Normal case: write some number of printable ASCII characters
        # on this line.
        for j in range (0, random.randint (1, 79)):
          f.write (chr (random.randint (32, 126)))
      # else: Every now and then, just write a blank line

      f.write ('\r\n')

    f.close ()
    return f.name


#### main ##############################################################

def main ():
  # 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 + "..."
  s.send_cmd ("att rk0 " + rk)
  s.send_cmd ("boot rk0")

  # Setup
  random.seed ()

  # Transfer several random files through.  Beware increasing the range
  # too far: max is 99999 due to the file name length limit of OS/8 due
  # to the temporary file naming scheme we use in the loop.
  for i in range (0, 1000):
    # Build another temp file
    ifn = gen_file ()
    of = tempfile.NamedTemporaryFile (suffix = '.out', delete = False)
    of.close ()

    # Send it
    ofn = of.name
    tfn = 'T%05d.TX' % i
    s.os8_send_file (ifn, tfn)
    s.os8_get_file (tfn, ofn)

    # Did it change?
    if filecmp.cmp (ifn, ofn):
      print ifn + ' transferred successfully.'
      s.os8_send_cmd ('\\.', 'DEL ' + tfn)
      os.remove (ifn)
      os.remove (ofn)
    elif os.path.getsize (ofn) == 0:
      print "\nDifferences found: output is empty!\n"
    else:
      print "\nDifferences found:\n--------------------------------"
      os.system ('diff -wu "' + ifn + '" "' + ofn + '"')
      print 'Left ' + tfn + ' inside OS/8.'


if __name__ == "__main__":
    main()
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<