--- /dev/null
+/ INITIAL PROGRAM LOADER
+
+/ LAST EDIT: 06-OCT-1991 05:00:00 CJL
+
+/ MAY BE ASSEMBLED WITH '/F' SWITCH SET.
+
+/ THIS PROGRAM IS USED TO LOAD BINARY PROGRAMS IN .IPL FORMAT DIRECTLY. AN
+/ ERROR-FREE PATH IS ASSUMED BETWEEN THE PDP-8 (OR DECMATE) AND THE DATA SERVER.
+/ SUCH A CONNECTION COULD BE ESTABLISHED BETWEEN THE PDP-8 AND A NEARBY PC USING
+/ A SHORT RS-232 CABLE WITH NULL MODEM. THIS UTILITY IS WRITTEN FOR THE EXPRESS
+/ PURPOSE OF LOADING KERMIT-12 ON PDP-8 SYSTEMS WITHOUT IT. ONCE KERMIT-12 HAS
+/ BEEN LOADED, ITS USE SUPERSEDES THIS PROGRAM ENTIRELY.
+
+/ THERE IS NO FLOW-CONTROL PROTOCOL PER SE BETWEEN SYSTEMS, SINCE THE UTILITY
+/ STORES DATA DIRECTLY INTO PDP-8 MEMORY AND THEREFORE DOESN'T REQUIRE
+/ SYNCHRONIZATION DELAYS. INITIAL SYNCHRONIZATION CAN BE ACCOMPLISHED BY
+/ SENDING A SINGLE CHARACTER FROM THE PDP-8 TO THE SERVER SIDE WHICH STARTS THE
+/ TRANSMISSION. ALTERNATIVELY THE PDP-8 PROGRAM CAN BE STARTED FIRST, THEN THE
+/ SERVER CAN SEND DATA DIRECTLY TO THE PDP-8; THIS ASSUMES THE ABILITY TO START
+/ THE SERVER TRANSMISSION FROM THE SERVER'S END.
+
+/ THIS PROGRAM IS FOR ANY MODEL PDP-8 WITH A KL-STYLE REMOTE LINE SERIAL
+/ INTERFACE OR EQUIVALENT. DEFAULT PARAMETER VALUES ARE CONSISTENT WITH THE
+/ DISTRIBUTION SETTINGS FOR KERMIT-12 ITSELF AND ARE EASILY CHANGED. IT CAN BE
+/ MODIFIED FOR USE ON VARIOUS DECMATE MODELS, BUT WILL BECOME SOMEWHAT LARGER IN
+/ THE PROCESS DUE TO THE MUCH GREATER COMPLEXITY OF THE VARIOUS DECMATE
+/ COMMUNICATIONS INTERFACES UNLESS THE COMPATIBLE PRINTER PORT IS CHOSEN (DEVICE
+/ 32/33).
+
+/ THIS PROGRAM SHOULD ONLY BE USED IF NO OTHER METHOD IS AVAILABLE AS THE
+/ ASSUMPTION OF AN ERROR-FREE CONNECTION IS UNRELIABLE. DISTRIBUTION PATHS SUCH
+/ AS INTERNET FTP OR CONTACTING THE AUTHOR CAN YIELD COMPLETE COPIES OF THE
+/ PROGRAM DISTRIBUTION ON APPROPRIATE MEDIA WHERE APPLICABLE.
+\f/ USAGE:
+
+/ THIS PROGRAM IS RESTRICTED TO A SINGLE-FIELD LOAD ONLY. SEVERAL VARIANT
+/ VERSIONS MUST BE CREATED TO COMPLETELY LOAD KERMIT-12. (AS OF THIS WRITING,
+/ ONLY A FIELD ZERO AND FIELD ONE VERSION NEED BE CREATED. HOWEVER, KERMIT-12
+/ MAY BECOME LARGER!). THE EXAMPLE GIVEN BELOW ILLUSTRATES USAGE FOR FIELD ONE.
+/ REPEATING THE PROCESS WITH THE INTENDED CONTENTS OF ALL OTHER FIELDS WILL
+/ (EVENTUALLY) YIELD AN ENTIRE COPY OF KERMIT-12:
+
+/ .R IPL1 (OR RUN DEV IPL1)
+
+/ [PRESS AN APPROPRIATE KEY (SUCH AS CR) TO START WAITING FOR THE TRANSFER]
+
+/ [THE DATA IS TRANSFERRED FROM THE OTHER SYSTEM AT THIS TIME AND THE PROGRAM
+/ EXITS AUTOMATICALLY TO THE KEYBOARD MONITOR.]
+
+/ .SAVE DEV FIELD1.SV 10000-17577=0
+
+/ CHANGING ALL OF THE ONES IN THE ABOVE EXAMPLE TO ZERO WILL YIELD THE
+/ FIELD-ZERO LOAD FILE FIELD0.SV AS WELL. DEV IS ANY CONVENIENT OS/8 DEVICE
+/ SUCH AS SYS OR DSK. (IT ISN'T CRITICAL SINCE THESE FILES CAN BE DELETED ONCE
+/ KERMIT-12 IS CREATED.) ONCE ALL PORTIONS OF KERMIT-12 HAVE BEEN OBTAINED, THE
+/ FOLLOWING COMMANDS WILL COMBINE THEM INTO THE STANDARD RELEASE FILE K12MIT.SV:
+
+/ .LOAD DEV:FIELD1.SV/I,FIELD0.SV/I$ LOAD IMAGE FILES FIELD1.SV, FIELD0.SV
+/ WITH /I SWITCH SET. (FUTURE VERSIONS
+/ MAY REQUIRE LENGTHENING THE COMMAND TO
+/ ADD MORE FILES SUCH AS FIELD2.SV,
+/ FIELD3.SV, ETC.) $ INDICATES USING
+/ <ESC> TO TERMINATE LINE.
+
+/ .SAVE DEV K12MIT=1 SAVE COMPLETED FILE ON ANY AVAILABLE
+/ DEVICE DEV (PREFERABLY SYS).
+
+/ CREATING THE VARIANT VERSIONS.
+
+/ ONLY ONE PARAMETER NEED BE CHANGED TO PRODUCE THE VARIOUS VERSIONS REQUIRED.
+/ SETTING DFIELD=0 CREATES A VERSION USED TO OBTAIN THE FIELD-ZERO DATA.
+/ SETTING DFIELD=1 CREATES THE FIELD-ONE VERSION. LEGAL VALUES FOR DFIELD
+/ EXTEND UP TO SEVEN. THE DEFAULT VALUE IS ZERO. NOTE THAT THE FIELD-ZERO
+/ VERSION LOADS INTO FIELD ONE WHILE ALL OTHER VERSIONS LOAD INTO FIELD ZERO.
+/ THIS IS NECESSARY TO ALLOW UNRESTRICTED FILE LOADING WITHIN THE SELECTED
+/ FIELD. (OS/8 ITSELF GENERALLY BARS LOADING INTO 7600-7777 OF ANY FIELD, THUS
+/ LOADING IS ACTUALLY RESTRICTED TO 0000-7577 OF THE SELECTED FIELD.)
+\f/ OTHER ASSEMBLY PARAMETERS.
+
+/ SETTING REC= XX SETS THE REMOTE RECEIVE DEVICE CODE TO
+/ XX (DEFAULT VALUE IS 40).
+
+/ SETTING SEN= XY SETS THE REMOTE TRANSMIT DEVICE CODE
+/ TO XY (DEFAULT VALUE IS 41).
+
+/ SETTING BRATE= NN SETS THE BAUD RATE (FOR SYSTEMS THAT
+/ SUPPORT THIS FEATURE SUCH AS THE
+/ VT-78) FROM A TABLE OF VALUES (00-17)
+/ AS FOLLOWS:
+
+/ NN (OCTAL) BAUD RATE
+
+/ 00 50
+/ 01 75
+/ 02 110
+/ 03 134.5
+/ 04 150
+/ 05 300
+/ 06 600
+/ 07 1200
+/ 10 1800
+/ 11 2000
+/ 12 2400
+/ 13 3600
+/ 14 4800
+/ 15 7200
+/ 16 9600
+/ 17 19200
+
+/ (THE DEFAULT VALUE IS 07 FOR 1200
+/ BAUD COMMUNICATIONS.)
+\f/ ASSEMBLY INSTRUCTIONS FOR ANY VARIANT VERSION.
+
+/ ASSUMING A CUSTOMIZED FILE SETUP FOR LOADING FIELD ZERO DATA IS CALLED
+/ IPL0.PA, THE FOLLOWING COMMANDS WILL CREATE IPL0.SV:
+
+/ .PAL IPL0<IPL0/E/F ASSEMBLE VARIANT FOR FIELD ZERO
+/ .LOAD IPL0 LOAD THE BINARY
+/ .SAVE DEV IPL0 ;10200=0 SAVE THE IMAGE ON ANY DEV (SUCH AS
+/ SYS).
+
+/ NOTE THE NON-STANDARD STARTING ADDRESS FOR THE FIELD ZERO VERSION (10200).
+
+/ ASSUMING A CUSTOMIZED FILE SETUP FOR LOADING FIELD ONE DATA IS CALLED IPL1.PA,
+/ THE FOLLOWING COMMANDS WILL CREATE IPL1.SV:
+
+/ .PAL IPL1<IPL1/E/F ASSEMBLE VARIANT FOR FIELD ONE
+/ .LOAD IPL1 LOAD THE BINARY
+/ .SAVE DEV IPL1=0 SAVE THE IMAGE ON ANY DEV (SUCH AS
+/ SYS).
+
+/ IF NECESSARY FOR FIELD TWO AND FOLLOWING, ADDITIONAL VERSIONS CAN BE CREATED.
+/ THE SAVE COMMAND WILL BE THE SAME AS FOR IPL1.
+\f/ EQUATED SYSMBOLS.
+
+/ LOADING FIELD DEFINED HERE. REMOVE THE / FROM THE APPROPRIATE LINE.
+
+/ DFIELD= 0 /LOAD FIELD ZERO DATA
+/ DFIELD= 1 /LOAD FIELD ONE DATA
+
+ IFNDEF DFIELD <DFIELD=0> /DEFINE LOADING FIELD ZERO BY DEFAULT
+
+/ REMOTE LINE RECEIVE DEVICE CODE DEFINED HERE. REMOVE THE / AND FILL IN THE
+/ APPROPRIATE VALUE.
+
+/ REC= 31 /REMOTE RECEIVE DEVICE CODE
+
+ IFNDEF REC <REC= 40> /DEFAULT RECEIVE DEVICE CODE IS 40
+
+/ REMOTE LINE TRANSMIT DEVICE CODE DEFINED HERE. REMOVE THE / AND FILL IN THE
+/ APPROPRIATE VALUE.
+
+/ SEN= 32 /REMOTE TRANSMIT DEVICE CODE
+
+ IFNDEF SEN <SEN= 41> /DEFAULT TRANSMIT DEVICE CODE IS 41
+
+/ BAUD RATE CONTROL VALUE DEFINED HERE FOR VT-78, ETC. REMOVE THE / AND FILL IN
+/ THE APPROPRIATE VALUE.
+
+/ BRATE= 7 /BAUD RATE CONTROL VALUE
+
+ IFNDEF BRATE <BRATE= 7> /DEFAULT IS VALUE FOR 1200 BAUD
+
+/ REMOTE LINE IOT DEFINITIONS.
+
+/ RECEIVE DEFINITIONS.
+
+/ RKCCIOT=REC^10+6002 /CLEAR REMOTE INPUT FLAG, AC
+ RKRBIOT=REC^10+6006 /READ REMOTE, CLEAR FLAG
+ RKSFIOT=REC^10+6001 /SKIP ON REMOTE INPUT FLAG
+
+/ TRANSMIT DEFINITIONS.
+
+ RSBIOT= SEN^10+6003 /SET BAUD RATE FROM AC[8-11]
+ RTLSIOT=SEN^10+6006 /TRANSMIT CHARACTER, CLEAR FLAG
+/ RTSFIOT=SEN^10+6001 /SKIP ON TRANSMIT FLAG
+
+/ OTHER DEFINITIONS.
+
+ DATFLD= DFIELD^10 /LOADING FIELD FOR CDF INSTRUCTIONS
+\f/ THE PROGRAM CODE STARTS HERE.
+
+ IFZERO DFIELD <FIELD 1> /FIELD ZERO VERSION LOADS HERE
+
+ IFNZRO DFIELD <FIELD 0> /ALL OTHER VERSIONS LOAD HERE
+
+ *200 /START AT THE BEGINNING
+
+START, KCC /CLEAR KEYBOARD FLAG AND AC
+ TAD INPUT /GET BAUD RATE CONTROL VALUE
+ RSBIOT /SETUP THE BAUD RATE
+/ RKSFIOT /**** FOR DECMATE PRINTER PORT ONLY ****
+ KSF /WAIT FOR
+ JMP .-1 /KEYBOARD INPUT
+ KRB /GET THE CHARACTER
+ RTLSIOT /OUTPUT TO REMOTE
+ TLS /LET USER SEE IT ALSO
+ RKRBIOT /CLEAR REMOTE INPUT FLAG NOW
+ CDF DATFLD /SETUP LOADING FIELD
+ JMS INPUT /TRY TO GET A VALID DATA CHARACTER
+ JMP .-1 /LEADER FOUND, IGNORE IT
+ JMP GOTDATA /LOAD FIRST DATA CHARACTER THERE
+
+DATLUP, JMS INPUT /TRY TO GET A VALID DATA CHARACTER
+ JMP LOADEND /TRAILER FOUND, GO FINISH THERE
+GOTDATA,CLL RTL;RTL;RTL /MOVE HALF-WORD UP
+ DCA I LOADPTR /STORE HIGH-ORDER HALF
+ JMS INPUT /TRY TO GET A VALID DATA CHARACTER
+ JMP LOADEND /TRAILER FOUND, GO FINISH THERE
+ TAD I LOADPTR /COMBINE LATEST WITH PREVIOUS
+ DCA I LOADPTR /STORE BACK COMPOSITE
+ ISZ LOADPTR /BUMP TO NEXT
+L177, 177 /CONSTANT 0177; HERE JUST IN CASE IT SKIPS
+ JMP DATLUP /GO BACK FOR MORE
+
+/ COMES HERE WHEN LOADING IS DONE.
+
+LOADEND,CLA!400 /CLEAN UP; ALSO CONSTANT 7600
+ CIF CDF 00 /GOING TO MONITOR FIELD
+ JMP I LOADEND/(7600) /EXIT TO MONITOR
+
+LOADPTR,0000 /LOADING POINTER
+\fINPUT, BRATE /INPUT ROUTINE; ALSO HOLDS BAUD RATE VALUE
+INPAGN, RKSFIOT /ANY REMOTE INPUT?
+ JMP INPAGN /NO, WAIT FOR IT
+ RKRBIOT /YES, READ IT IN
+ AND L177/(177) /REMOVE PARITY BIT
+ TAD L7737/(-41) /COMPARE TO LOWER LIMIT
+ SPA /SKIP IF GREATER THAN THAT
+ JMP INPAGN /ELSE IGNORE IT
+ TAD L7700/(-100) /COMPARE TO UPPER LIMIT
+ SMA /SKIP IF IN RANGE
+ JMP I INPUT /ELSE TAKE IMMEDIATE RETURN ON LEADER/TRAILER
+ AND L77/(77) /REMOVE JUNK BITS
+ ISZ INPUT /BUMP RETURN
+ JMP I INPUT /TAKE SKIP RETURN TO CALLER
+
+L77, 77 /CONSTANT 0077
+L7700, 7700 /CONSTANT 7700
+L7737, 7737 /CONSTANT 7737
+
+ $ /THAT'S ALL FOLK!