A large commit.
[pdp8.git] / sw / kermit / hachti / K12IPL.PA
1 / INITIAL PROGRAM LOADER
2
3 / LAST EDIT: 06-OCT-1991 05:00:00 CJL
4
5 / MAY BE ASSEMBLED WITH '/F' SWITCH SET.
6
7 / THIS PROGRAM IS USED TO LOAD BINARY PROGRAMS IN .IPL FORMAT DIRECTLY. AN
8 / ERROR-FREE PATH IS ASSUMED BETWEEN THE PDP-8 (OR DECMATE) AND THE DATA SERVER.
9 / SUCH A CONNECTION COULD BE ESTABLISHED BETWEEN THE PDP-8 AND A NEARBY PC USING
10 / A SHORT RS-232 CABLE WITH NULL MODEM. THIS UTILITY IS WRITTEN FOR THE EXPRESS
11 / PURPOSE OF LOADING KERMIT-12 ON PDP-8 SYSTEMS WITHOUT IT. ONCE KERMIT-12 HAS
12 / BEEN LOADED, ITS USE SUPERSEDES THIS PROGRAM ENTIRELY.
13
14 / THERE IS NO FLOW-CONTROL PROTOCOL PER SE BETWEEN SYSTEMS, SINCE THE UTILITY
15 / STORES DATA DIRECTLY INTO PDP-8 MEMORY AND THEREFORE DOESN'T REQUIRE
16 / SYNCHRONIZATION DELAYS. INITIAL SYNCHRONIZATION CAN BE ACCOMPLISHED BY
17 / SENDING A SINGLE CHARACTER FROM THE PDP-8 TO THE SERVER SIDE WHICH STARTS THE
18 / TRANSMISSION. ALTERNATIVELY THE PDP-8 PROGRAM CAN BE STARTED FIRST, THEN THE
19 / SERVER CAN SEND DATA DIRECTLY TO THE PDP-8; THIS ASSUMES THE ABILITY TO START
20 / THE SERVER TRANSMISSION FROM THE SERVER'S END.
21
22 / THIS PROGRAM IS FOR ANY MODEL PDP-8 WITH A KL-STYLE REMOTE LINE SERIAL
23 / INTERFACE OR EQUIVALENT. DEFAULT PARAMETER VALUES ARE CONSISTENT WITH THE
24 / DISTRIBUTION SETTINGS FOR KERMIT-12 ITSELF AND ARE EASILY CHANGED. IT CAN BE
25 / MODIFIED FOR USE ON VARIOUS DECMATE MODELS, BUT WILL BECOME SOMEWHAT LARGER IN
26 / THE PROCESS DUE TO THE MUCH GREATER COMPLEXITY OF THE VARIOUS DECMATE
27 / COMMUNICATIONS INTERFACES UNLESS THE COMPATIBLE PRINTER PORT IS CHOSEN (DEVICE
28 / 32/33).
29
30 / THIS PROGRAM SHOULD ONLY BE USED IF NO OTHER METHOD IS AVAILABLE AS THE
31 / ASSUMPTION OF AN ERROR-FREE CONNECTION IS UNRELIABLE. DISTRIBUTION PATHS SUCH
32 / AS INTERNET FTP OR CONTACTING THE AUTHOR CAN YIELD COMPLETE COPIES OF THE
33 / PROGRAM DISTRIBUTION ON APPROPRIATE MEDIA WHERE APPLICABLE.
34 \f/ USAGE:
35
36 / THIS PROGRAM IS RESTRICTED TO A SINGLE-FIELD LOAD ONLY. SEVERAL VARIANT
37 / VERSIONS MUST BE CREATED TO COMPLETELY LOAD KERMIT-12. (AS OF THIS WRITING,
38 / ONLY A FIELD ZERO AND FIELD ONE VERSION NEED BE CREATED. HOWEVER, KERMIT-12
39 / MAY BECOME LARGER!). THE EXAMPLE GIVEN BELOW ILLUSTRATES USAGE FOR FIELD ONE.
40 / REPEATING THE PROCESS WITH THE INTENDED CONTENTS OF ALL OTHER FIELDS WILL
41 / (EVENTUALLY) YIELD AN ENTIRE COPY OF KERMIT-12:
42
43 / .R IPL1 (OR RUN DEV IPL1)
44
45 / [PRESS AN APPROPRIATE KEY (SUCH AS CR) TO START WAITING FOR THE TRANSFER]
46
47 / [THE DATA IS TRANSFERRED FROM THE OTHER SYSTEM AT THIS TIME AND THE PROGRAM
48 / EXITS AUTOMATICALLY TO THE KEYBOARD MONITOR.]
49
50 / .SAVE DEV FIELD1.SV 10000-17577=0
51
52 / CHANGING ALL OF THE ONES IN THE ABOVE EXAMPLE TO ZERO WILL YIELD THE
53 / FIELD-ZERO LOAD FILE FIELD0.SV AS WELL. DEV IS ANY CONVENIENT OS/8 DEVICE
54 / SUCH AS SYS OR DSK. (IT ISN'T CRITICAL SINCE THESE FILES CAN BE DELETED ONCE
55 / KERMIT-12 IS CREATED.) ONCE ALL PORTIONS OF KERMIT-12 HAVE BEEN OBTAINED, THE
56 / FOLLOWING COMMANDS WILL COMBINE THEM INTO THE STANDARD RELEASE FILE K12MIT.SV:
57
58 / .LOAD DEV:FIELD1.SV/I,FIELD0.SV/I$ LOAD IMAGE FILES FIELD1.SV, FIELD0.SV
59 / WITH /I SWITCH SET. (FUTURE VERSIONS
60 / MAY REQUIRE LENGTHENING THE COMMAND TO
61 / ADD MORE FILES SUCH AS FIELD2.SV,
62 / FIELD3.SV, ETC.) $ INDICATES USING
63 / <ESC> TO TERMINATE LINE.
64
65 / .SAVE DEV K12MIT=1 SAVE COMPLETED FILE ON ANY AVAILABLE
66 / DEVICE DEV (PREFERABLY SYS).
67
68 / CREATING THE VARIANT VERSIONS.
69
70 / ONLY ONE PARAMETER NEED BE CHANGED TO PRODUCE THE VARIOUS VERSIONS REQUIRED.
71 / SETTING DFIELD=0 CREATES A VERSION USED TO OBTAIN THE FIELD-ZERO DATA.
72 / SETTING DFIELD=1 CREATES THE FIELD-ONE VERSION. LEGAL VALUES FOR DFIELD
73 / EXTEND UP TO SEVEN. THE DEFAULT VALUE IS ZERO. NOTE THAT THE FIELD-ZERO
74 / VERSION LOADS INTO FIELD ONE WHILE ALL OTHER VERSIONS LOAD INTO FIELD ZERO.
75 / THIS IS NECESSARY TO ALLOW UNRESTRICTED FILE LOADING WITHIN THE SELECTED
76 / FIELD. (OS/8 ITSELF GENERALLY BARS LOADING INTO 7600-7777 OF ANY FIELD, THUS
77 / LOADING IS ACTUALLY RESTRICTED TO 0000-7577 OF THE SELECTED FIELD.)
78 \f/ OTHER ASSEMBLY PARAMETERS.
79
80 / SETTING REC= XX SETS THE REMOTE RECEIVE DEVICE CODE TO
81 / XX (DEFAULT VALUE IS 40).
82
83 / SETTING SEN= XY SETS THE REMOTE TRANSMIT DEVICE CODE
84 / TO XY (DEFAULT VALUE IS 41).
85
86 / SETTING BRATE= NN SETS THE BAUD RATE (FOR SYSTEMS THAT
87 / SUPPORT THIS FEATURE SUCH AS THE
88 / VT-78) FROM A TABLE OF VALUES (00-17)
89 / AS FOLLOWS:
90
91 / NN (OCTAL) BAUD RATE
92
93 / 00 50
94 / 01 75
95 / 02 110
96 / 03 134.5
97 / 04 150
98 / 05 300
99 / 06 600
100 / 07 1200
101 / 10 1800
102 / 11 2000
103 / 12 2400
104 / 13 3600
105 / 14 4800
106 / 15 7200
107 / 16 9600
108 / 17 19200
109
110 / (THE DEFAULT VALUE IS 07 FOR 1200
111 / BAUD COMMUNICATIONS.)
112 \f/ ASSEMBLY INSTRUCTIONS FOR ANY VARIANT VERSION.
113
114 / ASSUMING A CUSTOMIZED FILE SETUP FOR LOADING FIELD ZERO DATA IS CALLED
115 / IPL0.PA, THE FOLLOWING COMMANDS WILL CREATE IPL0.SV:
116
117 / .PAL IPL0<IPL0/E/F ASSEMBLE VARIANT FOR FIELD ZERO
118 / .LOAD IPL0 LOAD THE BINARY
119 / .SAVE DEV IPL0 ;10200=0 SAVE THE IMAGE ON ANY DEV (SUCH AS
120 / SYS).
121
122 / NOTE THE NON-STANDARD STARTING ADDRESS FOR THE FIELD ZERO VERSION (10200).
123
124 / ASSUMING A CUSTOMIZED FILE SETUP FOR LOADING FIELD ONE DATA IS CALLED IPL1.PA,
125 / THE FOLLOWING COMMANDS WILL CREATE IPL1.SV:
126
127 / .PAL IPL1<IPL1/E/F ASSEMBLE VARIANT FOR FIELD ONE
128 / .LOAD IPL1 LOAD THE BINARY
129 / .SAVE DEV IPL1=0 SAVE THE IMAGE ON ANY DEV (SUCH AS
130 / SYS).
131
132 / IF NECESSARY FOR FIELD TWO AND FOLLOWING, ADDITIONAL VERSIONS CAN BE CREATED.
133 / THE SAVE COMMAND WILL BE THE SAME AS FOR IPL1.
134 \f/ EQUATED SYSMBOLS.
135
136 / LOADING FIELD DEFINED HERE. REMOVE THE / FROM THE APPROPRIATE LINE.
137
138 / DFIELD= 0 /LOAD FIELD ZERO DATA
139 / DFIELD= 1 /LOAD FIELD ONE DATA
140
141 IFNDEF DFIELD <DFIELD=0> /DEFINE LOADING FIELD ZERO BY DEFAULT
142
143 / REMOTE LINE RECEIVE DEVICE CODE DEFINED HERE. REMOVE THE / AND FILL IN THE
144 / APPROPRIATE VALUE.
145
146 / REC= 31 /REMOTE RECEIVE DEVICE CODE
147
148 IFNDEF REC <REC= 40> /DEFAULT RECEIVE DEVICE CODE IS 40
149
150 / REMOTE LINE TRANSMIT DEVICE CODE DEFINED HERE. REMOVE THE / AND FILL IN THE
151 / APPROPRIATE VALUE.
152
153 / SEN= 32 /REMOTE TRANSMIT DEVICE CODE
154
155 IFNDEF SEN <SEN= 41> /DEFAULT TRANSMIT DEVICE CODE IS 41
156
157 / BAUD RATE CONTROL VALUE DEFINED HERE FOR VT-78, ETC. REMOVE THE / AND FILL IN
158 / THE APPROPRIATE VALUE.
159
160 / BRATE= 7 /BAUD RATE CONTROL VALUE
161
162 IFNDEF BRATE <BRATE= 7> /DEFAULT IS VALUE FOR 1200 BAUD
163
164 / REMOTE LINE IOT DEFINITIONS.
165
166 / RECEIVE DEFINITIONS.
167
168 / RKCCIOT=REC^10+6002 /CLEAR REMOTE INPUT FLAG, AC
169 RKRBIOT=REC^10+6006 /READ REMOTE, CLEAR FLAG
170 RKSFIOT=REC^10+6001 /SKIP ON REMOTE INPUT FLAG
171
172 / TRANSMIT DEFINITIONS.
173
174 RSBIOT= SEN^10+6003 /SET BAUD RATE FROM AC[8-11]
175 RTLSIOT=SEN^10+6006 /TRANSMIT CHARACTER, CLEAR FLAG
176 / RTSFIOT=SEN^10+6001 /SKIP ON TRANSMIT FLAG
177
178 / OTHER DEFINITIONS.
179
180 DATFLD= DFIELD^10 /LOADING FIELD FOR CDF INSTRUCTIONS
181 \f/ THE PROGRAM CODE STARTS HERE.
182
183 IFZERO DFIELD <FIELD 1> /FIELD ZERO VERSION LOADS HERE
184
185 IFNZRO DFIELD <FIELD 0> /ALL OTHER VERSIONS LOAD HERE
186
187 *200 /START AT THE BEGINNING
188
189 START, KCC /CLEAR KEYBOARD FLAG AND AC
190 TAD INPUT /GET BAUD RATE CONTROL VALUE
191 RSBIOT /SETUP THE BAUD RATE
192 / RKSFIOT /**** FOR DECMATE PRINTER PORT ONLY ****
193 KSF /WAIT FOR
194 JMP .-1 /KEYBOARD INPUT
195 KRB /GET THE CHARACTER
196 RTLSIOT /OUTPUT TO REMOTE
197 TLS /LET USER SEE IT ALSO
198 RKRBIOT /CLEAR REMOTE INPUT FLAG NOW
199 CDF DATFLD /SETUP LOADING FIELD
200 JMS INPUT /TRY TO GET A VALID DATA CHARACTER
201 JMP .-1 /LEADER FOUND, IGNORE IT
202 JMP GOTDATA /LOAD FIRST DATA CHARACTER THERE
203
204 DATLUP, JMS INPUT /TRY TO GET A VALID DATA CHARACTER
205 JMP LOADEND /TRAILER FOUND, GO FINISH THERE
206 GOTDATA,CLL RTL;RTL;RTL /MOVE HALF-WORD UP
207 DCA I LOADPTR /STORE HIGH-ORDER HALF
208 JMS INPUT /TRY TO GET A VALID DATA CHARACTER
209 JMP LOADEND /TRAILER FOUND, GO FINISH THERE
210 TAD I LOADPTR /COMBINE LATEST WITH PREVIOUS
211 DCA I LOADPTR /STORE BACK COMPOSITE
212 ISZ LOADPTR /BUMP TO NEXT
213 L177, 177 /CONSTANT 0177; HERE JUST IN CASE IT SKIPS
214 JMP DATLUP /GO BACK FOR MORE
215
216 / COMES HERE WHEN LOADING IS DONE.
217
218 LOADEND,CLA!400 /CLEAN UP; ALSO CONSTANT 7600
219 CIF CDF 00 /GOING TO MONITOR FIELD
220 JMP I LOADEND/(7600) /EXIT TO MONITOR
221
222 LOADPTR,0000 /LOADING POINTER
223 \fINPUT, BRATE /INPUT ROUTINE; ALSO HOLDS BAUD RATE VALUE
224 INPAGN, RKSFIOT /ANY REMOTE INPUT?
225 JMP INPAGN /NO, WAIT FOR IT
226 RKRBIOT /YES, READ IT IN
227 AND L177/(177) /REMOVE PARITY BIT
228 TAD L7737/(-41) /COMPARE TO LOWER LIMIT
229 SPA /SKIP IF GREATER THAN THAT
230 JMP INPAGN /ELSE IGNORE IT
231 TAD L7700/(-100) /COMPARE TO UPPER LIMIT
232 SMA /SKIP IF IN RANGE
233 JMP I INPUT /ELSE TAKE IMMEDIATE RETURN ON LEADER/TRAILER
234 AND L77/(77) /REMOVE JUNK BITS
235 ISZ INPUT /BUMP RETURN
236 JMP I INPUT /TAKE SKIP RETURN TO CALLER
237
238 L77, 77 /CONSTANT 0077
239 L7700, 7700 /CONSTANT 7700
240 L7737, 7737 /CONSTANT 7737
241
242 $ /THAT'S ALL FOLK!