Added version 10 of basic.
[retro-software/dec/tops10/v4.5.git] / src / copy.mac
1 TITLE COPY      V004    31MAR\r
2 ;COPYRIGHT 1968, DIGITAL EQUIPMENT CORP., MAYNARD, MASS.\r
3 REPEAT 0,<\r
4 \r
5 \r
6         COPY WILL RUN IN ANY AMOUNT OF CORE, HOWEVER, EFFICIENCY \r
7 INCREASES WITH CORE SIZE.  SWITCHES ARE PRECEDED BY A SLASH OR\r
8 ENCLOSED IN PARENTHESES AND MAY APPEAR ANYWHERE IN THE COMMAND\r
9 STRING.  THE GENERAL COMMAND STRING FORMAT IS:\r
10         (OUTPUT DECTAPE):_(INPUT DECTAPE):/C\r
11 \r
12         /C      COPY ALL BLOCKS FROM THE INPUT DECTAPE ONTO\r
13                 THE OUTPUT DECTAPE.\r
14         /Z      ZERO ALL BLOCKS OF THE OUTPUT DECTAPE, CLEAR\r
15                 THE DIRECTORY.\r
16         /V      PERFORM A WORD BY WORD COMPARISION BETWEEN\r
17                 EVERY WORD OF THE INPUT AND OUTPUT DECTAPES.\r
18         /T      CAUSES A BOOTSTRAP LOADER TO BE WRITTEN ONTO\r
19                 BLOCKS 0,1 AND 2 OF THE OUTPUT TAPE. COPY TYPES\r
20                 "TYPE CORE BANK OR OFFSET FOR BSLDR."\r
21                 OFFSET = OCTAL NUMBER 1000 TO 777600.\r
22                 CORE-BANK = NNNK = 16K TO 256K,\r
23                 EX:     NNNK=64K\r
24                 THEN    OFFSET=177000 (TOP OF COPE - 1000)\r
25         /N      DON'T OUTPUT A DIRECTORY.\r
26         /6      LOOK FOR A DIRECTORY IN BLOCK ONE, NOT BLOCK 144.\r
27         /G      DON'T RESTART THE PROGRAM AFTER A PARITY ERROR\r
28                 (BIT20), OUTPUT AN ERROR MESSAGE AND CONTINUE.\r
29     NO SW'S     SET C AND V SWITCHES (DEFAULT CONDITION).\r
30 \r
31     NOTE........AT COMPLETION THE OUTPUT DECTAPE SHOULD BE REASSIGNED\r
32                 TO ENSURE THAT THE DIRECTORY IN CORE IS UP TO DATE.\r
33 \r
34 \fTHE FOLLOWING MESSAGES MAY BE OUTPUT TO THE USER'S TELETYPE.\r
35 \r
36         WRITE LOCK ERROR\r
37         INPUT (OR OUTPUT) DEVICE ERROR\r
38         INPUT (OR OUTPUT) CHECKSUM OR PARITY ERROR\r
39         INPUT (OR OUTPUT) BLOCK TOO LARGE\r
40         INPUT (OR OUTPUT) PREMATURE END OF FILE\r
41         000000 VERIFICATION ERRORS\r
42         COMMAND ERROR\r
43         SWITCH ERROR\r
44         DEVICE INIT FAILURE\r
45         DEVICE MUST BE A DECTAPE\r
46         INPUT AND OUTPUT DECTAPES MAY NOT BE THE SAME DEVICE.\r
47 \r
48 THE FOLLOWING MAY BE OUTPUT WHILE PROESSING "/L".\r
49         PTR INIT FAILURE\r
50         LOOKUP FAILED, "BSLDR.REL"\r
51         ?DATA ERROR ON DEVICE PTR\r
52         ?ILLEGAL BLOCKTYPE\r
53         ?CANNOT PROCESS EXTERNAL SYMBOLS\r
54         ?CANNOT PROCESS HIGH SEG'S\r
55         ?NO END BLOCK ENCOUNTERED\r
56         ?BOOTSTRAP LOADER WILL NOT FIT IN 3 BLOCKS\r
57 \r
58 THE FOLLOWING MAY BE OUTPUT WHILE PROCESSING "/T".\r
59         TYPE CORE BANK OR OFFSET FOR DTBOOT\r
60         ?OFFSET = 1000 TO 777600 (OCTAL)\r
61         ?EXPECTED FORMAT IS "NNNK" = 16K T0 256K\r
62         ?BOOTSTRAP LOADER IS NOT IN COPY; TRY "/L".\r
63 >\r
64 \f\r
65 FLP=400000              ;NOT SW MODE                    **FLAGS ARE IN LH OF F**\r
66 FLC=200000              ;COPY\r
67 FLZ=100000              ;ZERO\r
68 FLV= 40000              ;VERIFY\r
69 FLT= 20000              ;TENDMP\r
70 FLG= 10000              ;IGNORE PARITY ERRORS\r
71 FLL=  4000              ;LIST DIR\r
72 FLK=  2000              ;COLON\r
73 FLA=  1000              ;LEFT ARROW\r
74 FLI=   400              ;INPUT DEVICE\r
75 FL2=   200              ;CHANEL TWO\r
76 HSW=   100              ;HELP\r
77 LSW=    20              ;REQ TO LOAD A BSLDR\r
78 LFL=    10              ;A BOOTSTRAP LOADER IS IN "COPY"\r
79 NSW=     4              ;NO DIRECTORY\r
80 FL6=     2              ;6 FORMATTED\r
81 FPT=     1              ;A PDP-10\r
82 ANYSW=FLC+FLZ+FLV+FLT   ;ANYSW=0 IMPLIES FLC+FLV\r
83 JOBVER=137\r
84 \r
85 AC0=0\r
86 AC1=1\r
87 AC2=2\r
88 AC3=3\r
89 AC4=4\r
90 AC5=5\r
91 AC6=6\r
92 V1=1    ;VERIFY CMDLST\r
93 VZ1=2   ;CMDLST TERMINATOR\r
94 V2=3    ;VERIFY CMDLST\r
95 VZ2=4   ;CMDLST TERM\r
96 BP=5    ;BYTE POINTER\r
97 C=6     ;CURRENT CHARACTER\r
98 LOC=7   ;BLOCK NUMBER\r
99 T=10    ;TEMP\r
100 U=T+1   ;TEMP\r
101 F=12    ;FLAGS\r
102 UNSD2=14        ;UNUSED\r
103 UNSD3=15        ;UNUSED\r
104 IOS=16  ;IO STATUS\r
105 P=17    ;PUSH DOWN LIST\r
106         EXTERN  JOBFF,JOBREL,JOBSA,JOBREN\r
107         LOC     JOBVER\r
108         XWD     0,4     ;;VERSION #\r
109         RELOC\r
110 \f\r
111 ST:     CALLI   0\r
112         MOVE    P,[IOWD 10,TTYIN+23]    ;PUSH DOWN LIST\r
113         MOVE    AC0,ZROWRD\r
114         TLNN    F,30\r
115         MOVEM   AC0,JOBFF\r
116         INIT    17,1                    ;ASCII LINE\r
117         SIXBIT  /TTY/\r
118         XWD     TOUT,TIN\r
119         HALT    .                       ;INIT ERROR\r
120         PUSH    P,JOBFF\r
121         MOVEI   T,TTYIN\r
122         MOVEM   T,JOBFF\r
123         INBUF   17,1                    ;SET THE BUFFER ADR TO TTYIN\r
124         MOVEI   T,TTYOUT\r
125         MOVEM   T,JOBFF\r
126         OUTBUF  17,1                    ;SET THE BUFFER ADR TO TTYOUT\r
127         OUTPUT  17,                     ;DUMMY\r
128         SETZB   F,IDEV\r
129         SETZB   T,ODEV\r
130         POP     P,JOBFF\r
131 \r
132         MOVE    T,JOBREL\r
133         SUB     T,JOBFF                 ;T=NO. OF FREE LOC\r
134         CAIGE   T,400           ;TRY FOR AT LEAST 2K OF BUFFER AREA\r
135         TRO     T,400\r
136         MOVE    C,JOBFF\r
137         SUBI    C,1\r
138         ANDI    T,-200          ;T=NO. OF FREE WORDS\r
139         MOVNM   T,U             ;IOWD FORMAT "-N"\r
140         LSH     T,-7            ;T=NO. OF BLOCKS PER COPY INPUT\r
141         MOVEM   T,INC           ;COPY INCREMENT\r
142         LSH     T,-1            ;T=NO. OF BLOCKS PER VERIFY INPUT\r
143         MOVEM   T,INCV          ;VERIFY INCREMENT\r
144         HRLM    U,C             ;ASSEMBLE\r
145         MOVEM   C,LISTC         ;COPY IOWD\r
146         ASH     U,-1            ;HALVE THE "-N" FOR VERIFY\r
147         TRNE    U,100           ;"-N" MUST AGREE WITH THE INCREMENT\r
148         ADDI    U,100           ;ADJUST\r
149         HRL     C,U             ;ASSEMBLE\r
150         MOVEM   C,LISTV1        ;VERIFY IOWD #1\r
151         MOVMM   U,U             ;\r
152         ADD     C,U             ;ASSEMBLE\r
153         MOVEM   C,LISTV2        ;VERIFY IOWD #2\r
154 \r
155 \f       MOVEI   C,"*"\r
156         PUSHJ   P,TYPC                  ;OUTPUT CHAR\r
157         INPUT   17,\r
158         SETZM   JOBREN\r
159         MOVE    F,FSAVE                 ;INITIAL FLAGS\r
160         SKIPA   BP,[POINT 6,ODEV]       ;ASSUME AN OUTPUT DEV\r
161 COIDEV: MOVE    BP,[POINT 6,IDEV]       ;INPUT IF LEFT-ARROW + COLON WERE SEEN  \r
162 COTGET: PUSHJ   P,TYPGET                ;RETURN A CHAR TO C\r
163         CAIN    C,"/"\r
164         JRST    COSLSH                  ;SLASH\r
165         CAIN    C,"("\r
166         JRST    COLPRN                  ;LEFT PAREN\r
167         CAIN    C,":"\r
168         JRST    COCOLN                  ;COLON\r
169         CAIE    C,12\r
170         CAIN    C,15\r
171         JRST    COCRET                  ;CR OR LF\r
172         CAIN    C,"_"\r
173         JRST    COLARO                  ;LEFT ARROW\r
174         CAIGE   C,"0"                   ;\r
175         JRST    ERRCMD                  ;\r
176         CAILE   C,"9"                   ;ILLEGAL CHAR?\r
177         CAIL    C,"A"                   ;\r
178         CAILE   C,"Z"                   ;\r
179         JRST    ERRCMD                  ;\r
180         SUBI    C,40                    ;6 BITIZE IT\r
181         TLNE    BP,770000               ;ACCEPY 6 CHARS ONLY\r
182         IDPB    C,BP                    ;ASSEMBLE AN I/O DEV NAME\r
183         JRST    COTGET                  ;\r
184 \fCOLPRN:        TLZA    F,FLP                   ;ENTER PAREN MODE\r
185 COEXIT: JUMPL   F,COTGET                ;NORMAL EXIT\r
186 COSLSH: PUSHJ   P,TYPGET                ;SLASH - RETURN SW IN C\r
187         MOVSI   U,-LEN                  ;U=-SWTAB LEN,0\r
188 COSWLP: MOVE    T,SWTAB(U)              ;T=FLAG,CHAR\r
189         CAIN    C,(T)                   ;C=0,CHAR\r
190         TDOA    F,T                     ;F=FLAGS,CHARS ANDED\r
191         AOBJN   U,COSWLP                ;MORE SW'S? LOOP\r
192         JUMPL   U,COEXIT                ;MATCH OR MORE SW? LOOP\r
193         JRST    ERRSW                   ;NOT A SWITCH\r
194 \r
195 COLARO: TLZE    F,FLK                   ;CLEAR COLON FLAG\r
196         TLOE    F,FLA                   ;SET LEFT ARROW FLAG\r
197         JRST    ERRCMD                  ;TOO MANY ARROWS,NOT ENOUGH KOLONS\r
198         JRST    COIDEV                  ;NEXT DEVICE MUST BE INPUT\r
199 \r
200 COCOLN: TLZ     BP,770000               ;ACCEPT NO MORE CHARS.\r
201         TLON    F,FLK                   ;SET KOLON FLAG\r
202         JUMPGE  BP,COTGET               ;NORMAL EXIT\r
203         JRST    ERRCMD                  ;NULL NAME, TOO MANY COLONS\r
204 \r
205 COCRET: TLNE    F,FLA           ;LOADING A LOADER?\r
206         JRST    COSTRT          ;YES\r
207         SKIPE   ODEV                    ;\r
208         JRST    ERRCMD                  ;NO_,SOME ODEV\r
209         TLNE    F,ANYSW                 ;\r
210         JRST    ERRCMD          ;NO_,NO ODEV, NO SW\r
211         JRST    ST                      ;NO_,NO ODEV,NO SW =*\r
212 \r
213 COSTRT: TLNN    F,ANYSW         ;ANY SW=SKIP\r
214         TLO     F,FLC+FLV       ;DEFAULT=COPY+VERIFY\r
215         TLNE    F,FLC           ;IF COPY\r
216         TLZ     F,FLZ           ;DONT ZERO\r
217         TLNE    F,FLZ           ;IF ZERO\r
218         TLZ     F,FLV           ;DONT VERIFY\r
219         SKIPN   T,IDEV\r
220         TLNE    F,FLC+FLV\r
221         JUMPE   T,ERRCMD        ;AN INDEVICE IS REQUIRED\r
222         TLNN    F,FLT           ;IS 10DMP WANTED?\r
223         JRST    CINIT           ;NO, PROCEED\r
224 \r
225 \f       ;HERE TO ACCEPT THE BOOTSTRAP LOADER OFFSET (/T)\r
226 \r
227 CTENDM: TLNN    F,LFL+LSW       ;IS A BOOTSTRAP LOADER LOADED?\r
228         JRST    ERRTNH          ;NO, COMPLAIN\r
229         TLNN    F,LSW\r
230         JRST    CTEN1\r
231         MOVEI   BP,MES32K\r
232         PUSHJ   P,TYPEIT        ;BSLDR'S NAME\r
233         PUSHJ   P,TYPBUF\r
234         INPUT   17,\r
235 CTEN0:  PUSHJ   P,TYPGET        ;\r
236         CAIN    C,"Y"           ;\r
237         JRST    CTEN2           ;K, MUST BE A CORE-BANK\r
238         CAIE    C,"N"\r
239         JRST    CTENDM\r
240 CTEN1:  MOVEI   BP,MES16K\r
241         PUSHJ   P,TYPEIT\r
242         PUSHJ   P,TYPBUF\r
243         INPUT   17,\r
244         PUSHJ   P,TYPGET\r
245         CAIN    C,"N"\r
246         JRST    CINIT\r
247         CAIE    C,"Y"\r
248         JRST    CTEN1\r
249         TLOA    F,40\r
250 CTEN2:  TLO     F,HSW\r
251 \fCINIT: MOVEI   T,134           ;BUFRD MODE\r
252         PUSHJ   P,INIT          ;FIRST INIT\r
253         TLNE    F,FLC!FLZ       ;BEGIN HERE  ___******\r
254         PUSHJ   P,COPZRO        ;ZERO OR COPY\r
255         TLNE    F,FLC!FLZ       ;IF C OR Z-\r
256         PUSHJ   P,LALA                  ;THEN REWIND\r
257         TLNN    F,FLZ           ;WASIT /Z ?\r
258         JRST    CNOZRO          ;NO\r
259         SETSTS  2,16            ;YES\r
260         CALLI   2,13            ;CLEAR DIR IN CORE\r
261         RELEAS  2,              ;AND ON TAPE\r
262         MOVEI   T,14            ;AND\r
263         PUSHJ   P,INIT          ;REINIT\r
264 CNOZRO: TLNE    F,FLV           ;VERIFY ?\r
265         PUSHJ   P,VERZRO        ;YES\r
266         TLNE    F,FLV           ;IF VERIFY-\r
267         PUSHJ   P,LALA  ;THEN REWIND\r
268         TLNE    F,FLT           ;TEN DUMP ?\r
269         PUSHJ   P,TENINT        ;YES\r
270         JRST    ST              ;GO AGAIN ******\r
271 \r
272 LALA:   MTAPE   2,1             ;\r
273         SKIPE   C,IDEV          ;\r
274         MTAPE   1,1             ;\r
275         JFCL    1,.+1           ;PROCESSOR TEST\r
276         JRST    .+1             ;\r
277         JFCL    1,.+3           ;6-JUMP\r
278         TLO     F,FPT           ;PDP-10 FLAG\r
279         JRST    LSTEST          ;10-JUMP\r
280         JUMPE   C,LSTES0        ;JUMP IF NO INPUT DEV\r
281         USETI   1,1\r
282         INPUT   1,REWIND        ;IOWD 1,DATA\r
283 LSTES0: USETI   2,1\r
284         INPUT   2,REWIND\r
285 LSTEST: TLZE    F,FLL           ;LIST A DIR?\r
286         JRST    DLST            ;YES\r
287         MOVEI   C,^D30          ;SECONDS\r
288 GDNITE: TLNE    F,FPT           ;6-SKIP\r
289         CALLI   C,31            ;TO SLEEP\r
290         POPJ    P,              ;\r
291 \r
292 SWTAB:  XWD     FLP,")"         ;XIT\r
293         XWD     FLC,"C"         ;COPY\r
294         XWD     FLZ,"Z"         ;ZERO\r
295         XWD     FLV,"V"         ;VERIFY\r
296         XWD     FLT,"T"         ;TENDMP\r
297         XWD     FLG,"G"         ;IGNORE\r
298         XWD     FL6,"6"         ;PDP6 DIR\r
299         LEN=.-SWTAB\r
300 \fDSAV:  TLON    F,FLL           ;ENTER THIS CODE ONCE ONLY\r
301         TLNE    F,FL6           ;SKIP IF ITS NOT 6FMT\r
302         JRST    COPSKP          ;2ND PASS OR 6FMT-EXIT.\r
303         MOVEM   LOC,AC1\r
304         SUBI    AC1,144         ;FIRST BLK OF NEXT OUTPUT\r
305         SUB     AC1,INC         ;FIND A\r
306         IMULI   AC1,-200                ;     DIRECTORY,\r
307         ADD     AC1,LISTC               ;GRAB\r
308         HRLI    AC1,1(AC1)              ;    A\r
309         HRRI    AC1,DIRECT      ;     DIRECTORY.\r
310         BLT     AC1,DIRECT+177  ;SAVE IT.\r
311         JRST    COPSKP\r
312 \r
313 DLST:   TLNE    F,FL6           ;6FMT?\r
314         JRST    D6LST           ;YES.\r
315         HRLI    AC3,150000              ;TERMINATOR\r
316         HRLZI   1,777752\r
317 DLST3:  SKIPN   AC2,DNAM(1)             ;FILE NAME\r
318         JRST    DLST5                   ;\r
319         MOVEI   BP,2                    ;\r
320         PUSHJ   P,TYPEIT                ;\r
321         HLLZ    AC2,DNAM+^D22(1)                ;EXTENSION\r
322         SKIPN   0,2\r
323         JRST    DLST4\r
324         MOVEI   6,11\r
325         PUSHJ   P,TYPC\r
326         HRRI    AC2,150000              ;\r
327         MOVEI   BP,2                    ;\r
328         PUSHJ   P,TYPEIT                ;\r
329 DLST4:  PUSHJ   P,TYPCL                 ;\r
330 DLST5:  AOBJN   AC1,DLST3               ;LOOP\r
331 DXIT:   MOVEI   C,^D22          ;22 SECONDS\r
332         JRST    GDNITE          ;TO SLEEP.\r
333 \r
334 D6LST:  MOVEI   AC0,36          ;MAX NO. OF ENTRIES\r
335         HRRZ    AC1,DIRECT      ;LOC OF FIRST DIR BLK\r
336 D6BEG:  HRLI    AC3,150000      ;"-" TERMINATOR\r
337         MOVEI   BP,2            ;\r
338         SKIPN   AC2,DIRECT(1)   ;IS THERE A FILENAME?\r
339         JRST    DXIT            ;NORMAL EXIT\r
340         PUSHJ   P,TYPEIT        ;FILENAME\r
341         HLLZ    AC2,DIRECT+1(1) ;EXTENSION\r
342         SKIPN   AC2             ;IF NULL,\r
343         JRST    D6FIN           ;JUMP\r
344         MOVEI   C,"     "       ;OTHERWISE\r
345         PUSHJ   P,TYPC          ;TAB\r
346         HRRI    AC2,150000      ;"-"\r
347         MOVEI   BP,2            ;TERM.\r
348         PUSHJ   P,TYPEIT        ;\r
349 D6FIN:  PUSHJ   P,TYPCL         ;CR-LF\r
350         ADDI    AC1,4           ;\r
351         SOJG    AC0,D6BEG       ;IN CASE\r
352         JRST    DXIT            ;DIR WAS FULL\r
353 \f\r
354 TYPEIT: HRLI    BP,440600               ;BP=MESSAGE ADR\r
355 TYPLOP: ILDB    C,BP                    ;\r
356         CAIN    C,15                    ;PLUS?\r
357         POPJ    P,                      ;GET THE WHOLE MESSASE\r
358         CAIN    C,3                     ;#?\r
359         JRST    TYPCL                   ;APPEND CR LF AND TYPE\r
360         ADDI    C,40                    ;ASCIZE IT\r
361         IDPB    C,TOUT+1                ;TO THE BUFFER\r
362         JRST    TYPLOP                  ;+LOOP\r
363 \r
364 TYPGET: ILDB    C,TIN+1                 ;GET CHAR\r
365         CAIE    C," "                   ;SPACE?\r
366         CAIN    C,"     "               ;TAB?\r
367         JRST    TYPGET                  ;FORGET IT\r
368         POPJ    P,\r
369 \r
370 TYPCCL: IDPB    C,TOUT+1                ;TYPE CHAR,CRLF\r
371 TYPCL:  MOVEI   C,15                    ;TYPE CRLF\r
372         IDPB    C,TOUT+1\r
373         MOVEI   C,12\r
374 TYPC:   IDPB    C,TOUT+1                ;TYPE CHAR\r
375 TYPBUF: OUTPUT  17,                     ;DO IT\r
376         POPJ    P,\r
377 \r
378 \fERRT1I:        TLOA    F,FLI                   ;INPUT ERROR\r
379 ERRT1O: TLZ     F,FLI                   ;OUTPUT ERROR\r
380         STATUS  1,IOS                   ;STATUS TO IOS\r
381         TRNE    IOS,360000              ;ALL THE ERRORS\r
382         JRST    ERRCHK                  ;FOUND AN ERROR\r
383         POPJ    P,\r
384 \r
385 ERRT2I: TLOA    F,FLI                   ;INPUT ERROR\r
386 ERRT2O: TLZ     F,FLI                   ;OUTPUT ERROR\r
387         STATUS  2,IOS                   ;FLAGS TO IOS\r
388         TRNN    IOS,760000              ;PLUS WRITE LOCK\r
389         POPJ    P,                      ;NO ERRORS\r
390         TLO     F,FL2                   ;IT'S A CHANNEL 2 ERROR\r
391 \r
392 ERRCHK: TRNE    IOS,400000\r
393         PUSHJ   P,ERR400                ;WRITE LOCK\r
394         TRNE    IOS,200000\r
395         PUSHJ   P,ERR200                ;DEVICE ERROR\r
396         TRNE    IOS,100000\r
397         PUSHJ   P,ERR100                ;CKSUM/PARITY\r
398         TRNE    IOS,040000\r
399         PUSHJ   P,ERR040                ;BLOCK TOO LARGE\r
400         TRNE    IOS,020000              ;PREMATURE EOF,PDP9-DTA?\r
401         PUSHJ   P,ERR020                ;\r
402         TRNN    IOS,640000              ;THESE BITS IMPLY RESTART\r
403         TLNN    F,FLG                   ;/G+PARITY ERR = CONTINUE\r
404         JRST    ST                      ;RESTART\r
405         TRZ     IOS,740000              ;ZERO IN\r
406         TLNN    F,FL2\r
407         SETSTS  1,(IOS)                 ;TURN OFF\r
408         TLZE    F,FL2\r
409         SETSTS  2,(IOS)                 ;AND\r
410         POPJ    P,                      ;POP OUT\r
411 \fERR400:        MOVEI   BP,MES400\r
412         JRST    TYPEIT\r
413 MES400: SIXBIT  /WRITE LOCK ERROR#/\r
414 ERR200: PUSHJ   P,ERRCOM\r
415         MOVEI   BP,MES200\r
416         JRST    TYPEIT\r
417 MES200: SIXBIT  / DEVICE ERROR#/\r
418 ERR100: PUSHJ   P,ERRCOM\r
419         MOVEI   BP,MES100\r
420         JRST    TYPEIT\r
421 MES100: SIXBIT  / CHECKSUM OR PARITY ERROR#/\r
422 ERR040: PUSHJ   P,ERRCOM\r
423         MOVEI   BP,MES040\r
424         JRST    TYPEIT\r
425 MES040: SIXBIT  / BLOCK TOO LARGE#/\r
426 ERR020: PUSHJ   P,ERRCOM\r
427         MOVEI   BP,MES020\r
428         JRST    TYPEIT\r
429 MES020: SIXBIT  / PREMATURE END OF FILE#/\r
430 ERRCOM: MOVEI   BP,SXBINP\r
431         TLNN    F,FLI\r
432         MOVEI   BP,SXBOUT\r
433         JRST    TYPEIT\r
434 SXBINP: SIXBIT  /INPUT-/\r
435 SXBOUT: SIXBIT  /OUTPUT-/\r
436 \fERRVER:        MOVE    T,[POINT 6,MESVER]\r
437         MOVE    BP,[POINT 3,U,17]\r
438 ERRVE1: ILDB    C,BP            ;LOAD AN OCTAL NUMBER\r
439         ADDI    C,20            ;6BITIZE IT\r
440         IDPB    C,T             ;INSERT IN MESS\r
441         TLNE    T,770000        ;ONE WORD ONLY\r
442         JRST    ERRVE1          ;LOOP 6 TIMES\r
443         MOVEI   BP,MESVER\r
444         JRST    TYPEIT\r
445 MESVER: SIXBIT  /000000 VERIFICATION ERRORS#/\r
446 ERRCMD: MOVEI   BP,MESCMD\r
447         PUSHJ   P,TYPEIT\r
448         JRST    ST\r
449 MESCMD: SIXBIT  /COMMAND ERROR#/\r
450 ERRSW:  MOVEI   BP,MESSW\r
451         PUSHJ   P,TYPEIT\r
452         JRST    ST\r
453 MESSW:  SIXBIT  /SWITCH ERROR#/\r
454 ERRIN1: SKIPA   T,IDEV\r
455 ERRIN2: MOVE    T,ODEV\r
456         MOVEM   T,MESINI\r
457         MOVEI   BP,MESINI\r
458         PUSHJ   P,TYPEIT\r
459         JRST    ST\r
460 MESINI: SIXBIT  /       INIT FAILURE#/\r
461 ERRDT1: SKIPA   T,IDEV\r
462 ERRDT2: MOVE    T,ODEV\r
463         MOVEM   T,MESDTA\r
464         MOVEI   BP,MESDTA\r
465         PUSHJ   P,TYPEIT\r
466         JRST ST\r
467 MESDTA: SIXBIT  /       MUST BE A DECTAPE#/\r
468 \fERRTNH:        MOVEI   BP,MESTNH\r
469         PUSHJ   P,TYPEIT\r
470         JRST    ST\r
471 MESTNH: SIXBIT  /TENDUMP IS NOT IN CORE.#/\r
472 MES32K: SIXBIT  /32K TENDUMP?... -/\r
473 MES16K: SIXBIT  /16K TENDUMP?... -/\r
474 TENINT: TLNN    F,140\r
475         POPJ    P,0\r
476 \f       ;WRITE A BOOOTSTRAP LOADER IN BLOCKS 0,1 AND 2\r
477         PUSH    P,JOBFF\r
478         SETSTS  2,134           ;SO I CAN WRITE IN BLK 0\r
479         USETO   2,0\r
480         OUTBUF  2,1\r
481         OUTPUT  2,              ;DUMMY!\r
482 \r
483         HRLZI   BP,L16K.\r
484         TLNN    F,HSW\r
485         HRLZI   BP,L32K.\r
486         TLNE    F,NSW\r
487         HRLZI   BP,L16K.\r
488         HRR     BP,OUT2+1       ;BLT PTR\r
489         MOVEM   BP,C            ;SAVE IT\r
490         BLT     BP,177(C)       ;ZAP 1\r
491         OUTPUT  2,              ;BLK 0\r
492         ADD     C,[XWD 200,0]\r
493         MOVEM   C,BP            ;2ND PTR SAVED\r
494         BLT     BP,177(C)       ;ZAP 2\r
495         USETO   2,1\r
496         OUTPUT  2,              ;BLK 1\r
497         PUSHJ   P,ERRT2O        ;ERRORS?\r
498         POP     P,JOBFF\r
499         POPJ    P,\r
500 \fCOPZRO:        PUSH    P,JOBFF         ;SAVE JOBFF\r
501         SETSTS  1,134           ;\r
502         SETSTS  2,134           ;\r
503         OUTBUF  2,1             ;WITH ONE BUFFER MODE-134\r
504         USETO   2,0             ;FOR BLOCK ZERO\r
505         OUTPUT  2,              ;DUMMY\r
506         TLNN    F,FLC           ;COPY\r
507         JRST    COPBKZ          ;NO, MUST BE ZERO\r
508         INBUF   1,1             ;ONE BUFFER MODE-134\r
509         USETI   1,0             ;BLOCK ZERO\r
510         INPUT   1,              ;GET IT\r
511         PUSHJ   P,ERRT1I        ;OK?\r
512         MOVEI   T,177           ;LOOP LENGTH\r
513         LDB     C,IN1+1         ;FIRST WORD\r
514         DPB     C,OUT2+1        ;TO THE BUFFER\r
515 COPLPZ: ILDB    C,IN1+1         ;OTHER WORDS\r
516         IDPB    C,OUT2+1        ;TO THE BUFFER\r
517         SOJG    T,COPLPZ        ;TO LOOP\r
518 COPBKZ: OUTPUT  2,              ;DUMP THE BUFFER\r
519         POP     P,JOBFF         ;FOR VERIFY?\r
520         PUSHJ   P,ERRT2O                ;OK?\r
521         SETSTS  2,136           ;DUMP MODE\r
522         SETSTS  1,136           ;DUMP MODE\r
523         USETI   1,1             ;BLOCK ZERO\r
524         INPUT   1,DIRWRD        ;GET IT\r
525         MOVE    U,JOBREL                ;UPPER LIMIT\r
526         MOVE    T,BLTWRD        ;FROM,TO\r
527         SETZM   @ZROWRD         ;START\r
528         BLT     T, (U)          ;ZAP\r
529         MOVEI   LOC,1           ;START AT BLOCK ONE\r
530 COPSET: CAILE   LOC,144\r
531         JRST    DSAV\r
532 COPSKP: TLNE    F,FLC           ;SKIP\r
533         USETI   1,(LOC)         ;IO 2 UNASGND CH\r
534         USETO   2,(LOC)         ;SET THE BLOCK NO.\r
535         ADD     LOC,INC         ;ADD THE INCREMENT\r
536         CAILE   LOC,1102        ;WILL IT FIT?\r
537         JRST    COPFIN          ;NO\r
538         PUSHJ   P,COPYIT        ;ONE BUFFER\r
539         JRST    COPSET          ;AND LOOP\r
540 COPFIN: SUBI    LOC,1102        ;N BLOCKS WON'T FIT\r
541         IMULI   LOC,200         ;N WORDS WON'T FIT\r
542         MOVSS   LOC             ;GET ORGANIZED\r
543         ADDM    LOC,LISTC       ;SUB N WORDS FROM LIST\r
544         SKIPL   LISTC           ;IF LH OF IOWD = 0,\r
545         POPJ    P,              ;EXIT\r
546 COPYIT: TLNN    F,FLC           ;COPY?\r
547         JRST    COPOUT          ;ZERO!\r
548         INPUT   1,LISTC         ;COPY!\r
549         PUSHJ   P,ERRT1I        ;OK?\r
550 COPOUT: OUTPUT  2,LISTC         ;COPY AND ZERO\r
551         JRST    ERRT2O          ;OK?\r
552 \fVERZRO:        PUSH    P,JOBFF\r
553         SETZB   VZ1,VZ2         ;CMDLST TERMINATOR\r
554         SETSTS  1,134           ;SET\r
555         SETSTS  2,134           ;IB MODE\r
556         USETI   1,0             ;AND\r
557         USETI   2,0             ;BLOCK 0\r
558         INBUF   1,1             ;WITH\r
559         INBUF   2,1             ;ONE BUFFER EA\r
560         INPUT   1,              ;GET A BLOCK\r
561         PUSHJ   P,ERRT1I        ;OK\r
562         INPUT   2,              ;GET ANOTHER\r
563         PUSHJ   P,ERRT2I        ;OK\r
564         HRRZ    V1,IN1          ;DUMMY\r
565         HRRZ    V2,IN2          ;IOWD\r
566         HRLI    V1,-200         ;FOR VERIFY LOOP\r
567         POP     P,JOBFF         ;RECLAIM BUFFERS\r
568         PUSHJ   P,VERIFY                ;VERIFY AND EXIT THIS PAGE\r
569 VERONE: SETSTS  1,136           ;SET\r
570         SETSTS  2,136           ;DUMP MODE\r
571         MOVEI   LOC,1           ;START AT BLOCK 1\r
572 VERSET: MOVE    V1,LISTV1       ;IOWDS\r
573         MOVE    V2,LISTV2       ;TO ACS\r
574         USETI   1,(LOC)         ;MASTER\r
575         USETI   2,(LOC)         ;AND COPY\r
576         ADD     LOC,INCV        ;ADD IN THE INCREMENT\r
577         CAILE   LOC,1102        ;AM I ASKING TOO MUCH?\r
578         JRST    VERFIN          ;YEP\r
579         PUSHJ   P,VERIN         ;COUPLE OF INPUTS AND VERIFY\r
580         JRST    VERSET\r
581 \r
582 VERFIN: SUBI    LOC,1102        ;HOW MUCH TOO MUCH?\r
583         IMULI   LOC,200         ;IN WORDS PLEASE\r
584         MOVSS   LOC             ;BACKWARDS\r
585         ADD     V1,LOC          ;SUB WORDS FROM LIST\r
586         ADD     V2,LOC          ;I.E. ASK FOR LESS\r
587         SKIPL   V1              ;IF LH OF IOWD = 0,\r
588         POPJ    P,              ;EXIT\r
589 \r
590 VERIN:  INPUT   1,V1            ;ONE FOR THE MASTER\r
591         PUSHJ   P,ERRT1I        ;OK?\r
592         INPUT   2,V2            ;ONE FOR THE COPY\r
593         PUSHJ   P,ERRT2I        ;OK?\r
594 \r
595 VERIFY: SETZ    U,              ;CLR THE ERROR CNT\r
596         MOVE    T,1(V1)         ;MASTER WORD\r
597         CAME    T,1(V2)         ;SAME AS COPY WORD?\r
598         AOS     U               ;NO, COUNT THE ERRORS\r
599         AOS     V2              ;PLUS ONE\r
600         AOBJN   V1,VERIFY+1     ;BOTH HALVES AND LOOP\r
601         JUMPN   U,ERRVER        ;ERROR MESS IF APPROPIATE\r
602         POPJ    P,              ;UNLESS V1 IS POSITIVE\r
603 \fINIT:  INIT    2,(T)\r
604 ODEV:   Z\r
605         XWD     OUT2,IN2\r
606         JRST    ERRIN2\r
607         MOVE    BP,ODEV         ;MAKE SURE ITS A DTA.\r
608         CALLI   BP,4\r
609         TLNN    BP,100\r
610         JRST    ERRDT2          ;ERROR, ITS NOT A DTA\r
611         SKIPN   IDEV            ;IF NULL\r
612         POPJ    P,              ;NO INPUT DEV REQUIRED\r
613         INIT    1,(T)\r
614 IDEV:   Z\r
615         XWD     0,IN1\r
616         JRST    ERRIN1\r
617         MOVE    BP,IDEV         ;MAKE SURE ITS A DTA\r
618         CALLI   BP,4\r
619         TLNN    BP,100\r
620         JRST    ERRDT1          ;ERROR\r
621         POPJ    P,\r
622 \r
623 \fBLTWRD:        XWD     END.,END.+1     ;ZRO FROM,TO\r
624 ZROWRD: EXP     END.            ;START\r
625 FSAVE:  XWD     FLP,0   ;MODIFIED WHEN BSLDR IS LOADED\r
626 LISTC:  IOWD    0,END.\r
627         Z\r
628 LISTV1: IOWD    0,END.\r
629 LISTV2: IOWD    0,END.\r
630 INC:    BLOCK   1\r
631 INCV:   BLOCK   1\r
632 ;LISTC: IOWD    10200,L16K.\r
633 ;       Z\r
634 ;LISTV1:        IOWD    4000,L16K.\r
635 ;LISTV2:        IOWD    4000,END.+3000\r
636 ;INC:   XWD     0,41\r
637 ;INCV:  XWD     0,20\r
638 DIRECT: BLOCK   123\r
639 DNAM:   BLOCK   55\r
640 DIRWRD: IOWD    200,DIRECT\r
641         Z\r
642 REWIND: IOWD    1,PTRBUF\r
643         Z\r
644 TTYIN:  BLOCK   33\r
645 ;TTYIN: Z\r
646 ;       XWD     21,.\r
647 ;       Z\r
648 ;       XWD     FLG+FLL,0\r
649 ;       BLOCK   17\r
650 ;       XWD     FLC+FLZ+FLG,2563\r
651 ;       BLOCK   7\r
652 TTYOUT: BLOCK   23\r
653 ;TTYOUT:        XWD     24,1\r
654 ;       XWD     21,.\r
655 ;       BLOCK   21\r
656 IN1:    BLOCK   3\r
657 IN2:    BLOCK   3\r
658 OUT2:   BLOCK   3\r
659 TIN:    BLOCK   3\r
660 TOUT:   BLOCK   3\r
661 PTRBUF: BLOCK   3\r
662 ;TIN:   XWD     FLP,TTYIN+1\r
663 ;       XWD     FLI+FL2+HSW,0\r
664 ;       Z\r
665 ;TOUT:  XWD     FLP,TTYOUT+1\r
666 ;       XWD     FLI+FL2+HSW,TTYOUT+2\r
667 ;       Z\r
668 ;PTRBUF:        XWD     FLP,END.+144\r
669 ;       XWD     FLL+FLI,END.+174\r
670 ;       Z\r
671         VAR\r
672         LIT\r
673 L16K.:  BLOCK   400\r
674 L32K.:  BLOCK   400\r
675 END.:   END     ST      ;;22-JUN\r
676 \f\r