software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape4 / BUILD.PA
1 /33 OS/8 V3D BUILD
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /COPYRIGHT (C) 1971,1972,1973,1974,1975,1977 BY DIGITAL EQUIPMENT CORPORATION
12 /
13 /
14 /
15 /
16 /
17 /
18 /
19 /
20 /
21 /
22 /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
23 /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
24 /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
25 /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
26 /
27 /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
28 /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
29 /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
30 /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
31 /
32 /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
33 /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
34 /DIGITAL.
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 \f/ABSTRACT--
46 /BUILD IS THE SYSTEM CONFIGURATOR FOR THE OS/8 PROGRAMMING
47 /SYSTEM. WITH BUILD, THE DEVICES WITHIN A PARTICULAR
48 /SYSTEM CAN BE RAPIDLY AND EASILY CHANGED. BUILD ALSO
49 /PROVIDES THE FACILITY FOR CREATING AN INITIAL OS/8 SYSTEM
50 /FROM BINARY PAPER TAPES OR CASSETTES.
51
52 /V3 CHANGES
53
54 /0. MADE BUILD SUPPORTABLE
55 /1. ADDED VE COMMAND (CURRENT VERSION # IS 3X WHERE X IS PATCH LEVEL)
56 /2. FIXED PROBLEM WITH Z'S AND 9'S IN FILENAMES
57 /3. CHANGED LENGTH OF DF32
58 /4. FIXED PROBLEM WITH RK8 BOOTSTRAP RECORD.
59 /5. ON LOAD, NULL EXTENSION FIRST SEARCHES FOR .BN
60 /6. CR TO $ DOESN'T GIVE ERROR
61 /7. FIXED BUG WITH BUILDING ROM SYS
62 /8. RUBOUTS TO BOL GIVE $
63 /9. ^U RETYPES $
64 /10. ASSUME DSK: IF NO DEV GIVEN WITH LOAD
65 /11. NO DOT IS PRINTED IF NO EXTENSION
66 /12. ^O STUFF NEW
67 /13. ALLOW PARITY ^C
68 /14. ADDED EXAMINE COMMAND
69 /15. FIXED BUG RE ACCESSING USR TABLE VIA POINTER
70 /16. CLEANED UP MOVE ROUTINE
71 /17. CLEANED UP NUMBER TOO BIG CHECKER
72 /18. OVERFLOW ERROR MESSAGE CHANGED TO 'BAD ORIGIN'
73 /19. DON'T ALLOW NAMES OVER 6 CHARS TO SPILL INTO EXTENSION;
74 / DON'T ALLOW MULTIPLE EXTENSIONS
75 /20. INCREASED NUMBER OF ALLOWABLE ENTRY PTS/HANDLER TO 16 (DEC)
76 /21. CLEANED UP SYMBOL PRINT ROUTINE
77 /22. GOT NAMES IN TABLE TO LINE UP.
78 /23. INSERT GRPNAME <CR> INSERTS FIRST HANDLER
79 /24. INSERT GRP,DEV1,DEV2,DEV3,...
80 /25. INSERT GRP,DEV1-5,...
81 /26. SAME FOR DELETE AND REPLACE
82 /27. COUNT DEVICES AND SLOTS ONLY ON BOOT
83 /28. FIXED BUG RE SYS RF08=4023
84 /29. GENERAL SUPPORT OF 2-PAGE SYS HANDLERS
85 /30. ADDED QL COMMAND
86 /31. SETS SA=00200, JSW=0
87 /32. UNLOAD UNLOADS AND DELETES
88 /33. ADDED DSK COMMAND
89 /34. BUILD COMMAND
90 /35. PRINT TELLS YOU ABOUT DSK
91 /36. TOOK OUT LOC DEPENDENT CHECK FOR SYSTEM HANDLERS
92 /37. INSERT ALLOWS SETTING # OF PLATTERS
93 /38. HANDLER HEADER LOADS DIRECTLY INTO DESCRIPTOR TABLE
94 /39. USES EXTRA CORE IF AVAILABLE (ALSO CHECKS SOFTWARE CORE SIZE)
95 /40. STOPS ECHOING ON INPUT LINE OVERFLOW
96 /41. *'S SYSTEM DEVICE
97 /42. REMEMBERS SYS ACROSS A BOOT
98 /43. 'Y' INSTEAD OF 'YE'
99 /44. BO CHECKS DCB IN CORE TO SEE IF NEED REWRITE MONITOR
100 /45. ALLOW UNLOADING ENTRY POINT NAMES
101 /46. CTL COMMAND
102 /47. EACH COMMAND HAS ITS OWN MAXIMUM INPUT LINE SIZE
103 /48. ADDED CORE COMMAND
104 /49. FIXED ^U TO WRITE ZERO DIRECT MSG BUG
105 /50. HIT CONTINUE AFTER 'SYS ERR' TO RETRY
106 /51. PRESERVED DATE ACROSS BOOT
107 /52. MULTIPLE LOADS AND UNLOADS
108 /53. LOAD FROM SCRATCH USES INTERNAL ACTIVE HANDLERS
109 /54. CASSETTE SUPPORT
110 /55. SETS CORE CONTROL BLOCK
111
112 /CHANGES SINCE FIELD RELEASE
113
114 /A 'NO ROOM' DOESN'T PRINT 'BAD LOAD'
115 /B NO. OF ENTRY POINTS NOW CORRECTLY CHECKED FOR
116 /C FIXED BUG RE BUILDING TD8E FROM TD8E
117 /D BOOT CMD DISABLES BUILD CMD
118 /E JSW SET TO 1 BEFORE CHAINING TO ABSLDR
119 /F P CMD BUG FIXED
120 /G ALTER BUG FIXED
121 /H LENGTH OF INPUT LINE SYMBOLIC
122 /I SOFCOR STUFF OPTIMIZED
123 /J QL DOESN'T PRINT SPACE BETWEEN SYS'S GRP:NAME
124 /K FIXED BUG IN 32K
125 /L PAPER TAPE PUTS HLT IN 7600
126
127 /THINGS TO DO:
128
129 /? DIES IF DATA OCCURS BEFORE *0
130 /? BOOT.ZE, .NZ CMD?
131 /? GET 2-PAGE BIT OF CURRENT SYSTEM
132
133 /CHANGES FOR MAINTENANCE RELEASE V3C:
134
135 / 7-AUG-75
136
137 /1. CHANGED VERSION NUMBER TO V5
138 /2. INCORPORATED PATCH SEQ #1 (DSN APRIL 1975)
139 / ZERO LOCATION SOFSET WHILE BUILDING
140 /3. INCORPORATED PATCH SEQ #2 (DSN NOV. 1974)
141 / DISMISS USR AFTER ?NAME ERROR
142 /4. INCORPORATED PATCH SEQ #3 (DSN MARCH 1975)
143 / DECREASE SYSTEM SIZE BY 5 (FOR ABSLDR) WHEN BUILDING FROM PAPER TAPE
144 /5. INCORPORATED PATCH SEQ #4 (DSN APRIL 1975)
145 / ADDED 'SIZE' COMMAND TO BUILD
146 /6. FIXED BUG WHICH CAUSES SYSXY.RS NOT FOUND TO BE PRINTED
147 / ON BOOTXY.RS COMMAND
148
149 /CHANGES FOR V3D:
150
151 / 1-MAY-77
152
153 /1. FIXED PROBLEM WITH CASSETTE BUILD (JSW WAS SET WRONG)
154 /2. ALLOWED SAVING OF HIGH-ORDER DATE BITS
155 \f/BUILD PAGE 0
156 *1
157 HLT /SAFETY HALT AND PATCH SPACE
158 SAV1, 0
159 SAV2, 0 /SAVES GROUP NAME
160 *10 /AUTO INDEX REGISTERS
161 XR1, 0 /GENERAL PURPOSE REGISTERS
162 XR2, 0
163 XR3, 0
164 XR4, 0 /USED TO BUILD IMAGE TABLES
165 XR5, 0
166 LXR, 0
167 GNMXR, 0
168 L600, 600
169
170 *20
171 COUNT, 0 /GENERAL COUNTER LOCATION
172 CHAR, 0 /CHARACTER BUFFER
173 TEMP, 0 /TEMPORARIES
174 TMP1, 0
175
176
177 BUFFER=5400
178 BINARY=6000
179 DEVBUF=0400 /FIRST HANDLER AT 10400
180 /FOR REASONS TOO LONG TO GO INTO HERE,
181 /BUT WHICH HAVE TO DO WITH CURIOUS
182 /PROPERTIES OF THE NUMBER 0,
183 /HANDLERS CAN'T START AT 0.
184 /THEY COULD HAVE STARTED AT 200.
185 SOFSET=7747 /SYSTEM OFFSET. (CURRENTLY =0)
186 PG7600=BUFFER /RECORD 0 (IMAGES OF BOTH 7600'S)
187
188 LDRCTL=4113 /CHECK OS/8 ASSEMBLY
189 NAME1, 0 /NAME1-4 HOLDS FILE AND DEVICE NAMES
190 NAME2, 0
191 NAME3, 0
192 NAME4, 0
193 TABLMT, DSCTAB /HIGH CORE END OF DESCRIPTORS
194 /FIRST FREE LOCATION
195 SIZE, 0
196 HNDPTR, DEVBUF /POINTS TO FIRST FREE LOCATION IN HANDLER TABLE
197
198 BLDSAV=75 /**** WILL DESTROY PREVIOUS FILES
199 /START OF 40 BLOCK TO SAVE BUILD IN
200 HDRSIZ=10 /NUMBER OF ITEMS IN A DESCRIPTOR
201 DSCPTR, DSCTAB /ALWAYS POINTS TO BEGIN OF CURRENT DESCRIPTOR
202 \fSLOT, 0
203 DSKG1, 0 /NAME OF 'DSK'
204 DSKG2, 0
205 DSKP1, 0
206 DSKP2, 0
207 NEWPAG, 0
208 OLDPAG, 0
209 NEWCOR, 0 /NEW CORE MAX
210 SAVDAT, 0 /REMEMBERS DATE ACROSS A BOOT
211 DATEWD=7666
212 FLAG2, 1 /0 IF PREVIOUS SYSTEM HAD A 2-PAGE HANDLER
213 /SAMSYS, 1 /0 IF DIDN'T SPECIFY NEW SYS
214 BLOK66=0
215 SYSDCB, 0
216 SA=7744
217 JSW=7746
218 /BOOTDV, 0 /HANDLER ADDRESS OF DEVICE WE'RE BOOTSTRAPPING TO
219 SAVHID, 0 /HIGH-ORDER DATE (BITS 3-4)
220 \f/BEGLIN: 72 CHAR LINE BUFFER
221
222 /NEW BUILD CORE ALLOCATION:
223
224 /0000-5177 BUILD (ABSLD MUST BE ABOVE 4177)
225 /5400-5777 DEVICE HANDLER FOR LOAD
226 /5200-5377 PAPER TAPE/INIT/LINE BUFFER
227 /6000-6377 INPUT BUFFER FOR LOAD (TEMP LOC OF USR)
228 /6400-7577 DESCRIPTOR TABLE (DSCTAB)
229
230 /BINARY MUST FOLLOW BUFFER
231 /FIELD 1: HANDLERS (0400-7577)
232 /10000-10377 BLOK66 BUFFER
233 \f *200
234
235 SKP CLA /ENTRY FROM 'R BUILD'
236 HLT /CHAIN ENTRY ADDRESS
237 TAD I [7600 /SEE IF SYSTEM ALREADY EXISTS
238 CIA
239 TAD [4207
240 SZA CLA /IF NOT, BUILD SYSTEM FROM PAPER TAPE
241 CLA IAC /NOTE FACT THAT OS/8 AINT AROUND
242 DCA I [RETSW
243 JMS CORE
244 DCA I (AMTCOR /FIGURE OUT HOW MUCH CORE WE HAVE
245 JMS I (GOOD /DO SOME INITIALIZATION; IT'LL DO YA GOOD
246 CONFIG, CDF 0
247 DCA I (ECHOFLG /ALLOW TYPING
248 JMS I [CRLF
249 DOLR, TAD ["$ /OUTPUT A $ BECAUSE I'M JEWISH
250 JMS I [TTYOUT
251 DCA I [SWAPER /USE CURRENT HANDLER, NO SWAP ON ^C.
252 TAD [-LNLNGT
253 JMS I [GTEXT /READ TTY LINE
254 JMP DOLR
255 JMS I [GNAME /INTERPRET THE COMMAND
256 TAD NAME1
257 SNA
258 JMP CONFIG
259 DCA CHAR /ENABLE TEST TO WORK
260 \f JMS I [TEST /LOOK FOR THE COMMAND IN LIST
261 -1417;LOAD /LOAD DEVICE HANDLER BINARY
262 -2205;REPLACE /REPLACE IN SYSTEM
263 -1601;NAME /ALTER PERMANENT NAME
264 -0114;ALTER /CHANGE DEVICE HANDLER LOCATION
265 -2022;PRINT /SYSTEM STATUS
266 -2331;SYSTEM /SPECIFY SYSTEM DEVICE
267 -0217;BOOT /BOOTSTRAP THE NEW SYSTEM
268 -2516;UNLOAD /DELETE INACTIVE HANDLER
269 -0405;DELETE /DELETE ACTIVE HANDLER
270 -1116;INSERT /INSERT HANDLER IN SYSTEM
271 -2605;VERS /TYPE VERSION #
272 -0530;EXAMINE /EXAMINE LOCATION
273 -2114;QLIST /QUICK LIST
274 -0423;DSK /DSK
275 -0317;KORE /CORE
276 -0403;DCBCM /DCB
277 -0324;CTLCM /CTL
278 -2311;SIZCM /SIZE
279 BD, -0225;BUILD /BUILD
280 0 /MUST TERMINATE LIST WITH 0
281 JMP I [WHAT /DIDN'T FIND COMMAND
282
283 /NEW HEADER BLOCK:
284
285 / DEVICE GROUPNAME
286 / DEVICE PERMANENT NAME
287 / DCB (R/W,TYPE,MAX # OF PLATTERS)
288 / 1/2 PAGE, SYSTEM BIT, CORES BIT, REL ENTRY PT
289 / MUST BE 0
290 / SIZE OF 1 PLATTER
291 \fCORSIZ,
292 GETCHA, 0
293 TAD DSCPTR
294 TAD I GETCHA
295 ISZ GETCHA
296 DCA GETEM
297 TAD I GETEM
298 JMP I GETCHA
299
300 GOTCHA, 0
301 DCA GOTEM
302 TAD I GOTCHA
303 TAD DSCPTR
304 ISZ GOTCHA
305 DCA GETEM
306 TAD GOTEM
307 DCA I GETEM
308 JMP I GOTCHA
309
310 PUT=JMS I [GOTCHA
311 GET=JMS I [GETCHA
312 \fGOTEM,
313 CORE, 0
314 TAD I [7777
315 AND [70
316 CLL RTR
317 RAR
318 SNA
319 JMS RELCOR
320 JMP I CORE
321
322 GETEM, /POINTS INTO DSCTAB
323 RELCOR, 0
324 CLA IAC
325 DCA CORSIZ /MAKE RE-USABLE
326 TAD [7400
327 DCA CORX /MAKE ROUTINE REUSABLE ON 32K MACHINE
328 COR0, CDF 0
329 TAD CORSIZ
330 RTL
331 RAL
332 AND COR70
333 TAD COREX
334 DCA .+1
335 COR1, CDF /N
336 TAD I CORLOC
337 COR2, NOP
338 DCA COR1
339 TAD COR2
340 DCA I CORLOC
341 COR70, 70
342 TAD I CORLOC
343 CORX, 7400
344 TAD CORX
345 TAD CORV
346 SZA CLA
347 JMP COREX
348 TAD COR1
349 DCA I CORLOC
350 ISZ CORSIZ
351 JMP COR0
352 COREX, CDF 0
353 STA
354 TAD CORSIZ
355 JMP I RELCOR /LEAVE WITH HIGHEST EXISTENT BANK
356
357 CORLOC, CORX
358 CORV, 1400
359 PAGE
360 \f/GET GETS DESCRIPTOR ITEM FROM CURRENT DESCRIPTOR
361 /OP
362
363 /PUT PUTS DESCRIPTOR ITEM IN AC BACK IN SPECIFIED ITEM
364 /OP IN CURRENT DESCRIPTOR
365
366 /ITEMS:
367
368 /ACTIVE BIT 0=1 MEANS ENTRY POINT HAS BEEN INSERTED (IS ACTIVE)
369 /PERM1 PERMANENT NAME (FIRST 2 CHARS)
370 /PERM2 2ND 2 CHARS
371 /TWOPAG BIT 0=1 MEANS 2-PAGE HANDLER, BIT 4 IGNORED, BITS 5-11 RELATIVE ENTRY POINT
372 /PAGRES BITS 7-11 GIVE PAGE OF START OF HANDLER WHEN ROTATED 6 RT
373 /GRPNM1 GROUP NAME (DEVICE NAME) FIRST 2 CHARS
374 /GRPNM2 2ND 2 CHARS
375 /DEVSIZ GIVES SIZE OF 1 PLATTER
376 /PLATNUM # OF PLATTERS IN BITS 2-4
377 /DSKBIT BIT 1 IS FLAG FOR 'DSK' (USED TEMPORARILY BY BUILD)
378 /MAXPLT MAXIMUM NUMBER OF PLATTERS ALLOWED (IN BITS 9-11)
379 /DCB D.C.B. BIT 0: FILESTRUCTURED, BITS 3-8 DEVICE TYPE
380 / BITS 9-11 MAX NO. OF PLATTERS
381 /CORES BIT 2 MEANS ENTRY PT IS CORESIDENT WITH SYS HANDLER
382 /SYSBIT BIT 1 IS A 1 IF THE DEVICE HAS NAME 'SYS' AND IS A SYS DEVICE
383
384 /IF FIRST ENTRY OF A DESCRIPTOR IS GE 7600, THEN THIS
385 /ENTRY IS A BOOTSTRAP ENTRY.
386 /IT STARTS WITH THE NEGATIVE OF THE NUMBER OF WORDS IN THE
387 /BOOTSTRAP (FOR THE PRECEDING DEVICE), FOLLOWED BY THAT MANY WORDS
388 \f GRPNM1=0
389 GRPNM2=1
390 PRMNM1=2
391 PRMNM2=3
392 DCB=4
393 MAXPLT=4
394 DVTYPE=4
395 TWOPAG=5 /BIT 0
396 SYSBIT=5 /BIT 1
397 ACTIVE=6
398 ENTPT=5
399 PAGRES=6
400 PLATNUM=6
401 DEVSIZ=7
402 DSKBIT=6 /BIT 1
403 CORES=5 /BIT 2
404 \f/READ A LINE OF TEXT RETURN 1 IS ^U RETURN
405 GTEXT, 0 /ROUTINE TO COLLECT TTY INPUT
406 TAD (-BEGLIN /AC IS NON-ZERO
407 DCA ENDLIN
408 DCA I (RUBFLG /INITIALIZE RUBOUT TO \
409 TAD (BEGLIN-1
410 RDTX, DCA LXR /BUFFER ADD. TO INDEX
411 RDTXT, JMS I [TTYIN /READ BLOODY TELETYPE
412 TAD CHAR
413 DCA NAME1 /SETUP FOR TEST AGAIN
414 JMS I [TEST
415 -377;RBOUT /RUBOUT
416 -212;LFEED /LINE FEED..ECHO CURRENT COMMAND
417 -215;CARRET /LINE TERMINATOR
418 -233;ALTMOD /ALT MODE IN SEVERAL FLAVORS
419 -375;ALTMOD
420 -376;ALTMOD
421 -200;RDTXT /IGNORE BLANKS
422 -217;RDTXT /AS WELL AS ^O
423 -203;CTRLC /BACK TO CURRENT SYSTEM
424 -225;CTRLU /CTRLU
425 0 /IF NOT ONE OF THESE, PUT IN BUFFER
426 TAD LXR
427 TAD ENDLIN
428 SNA CLA
429 JMP RDTXT /LINE OVERFLOW, STOP ECHOING
430 JMS I [PRNT /PRINT THE CHARACTER
431 TAD CHAR
432 DCA I LXR /AND PUT IN LINE BUFFER
433 JMP RDTXT /NO PROBLEMS YET
434 \fRBOUT, TAD LXR /IS THERE TEXT TO RUB OUT?
435 TAD [1-BEGLIN
436 SNA CLA
437 JMP RBCR /NO..SO DON'T DO ANYTHING
438 TAD ["\ /YES..ECHO BACKSLASH?
439 ISZ I (RUBFLG /IF = -1, NO
440 JMS I [TTYOUT
441 CLA CMA /IGNORE CONSECUTIVE RUBOUTS
442 DCA I (RUBFLG
443 TAD LXR
444 DCA TMP1
445 TAD I TMP1
446 JMS I [TTYOUT /ECHO LAST CHAR
447 XRBACK, CLA CMA
448 TAD LXR /MOVE INDEX BACK ONE
449 JMP RDTX
450 CARRET, JMS I [CRLF /GENERATE 215,212
451 CAR1, DCA I LXR
452 DCA I LXR /GUARD AGAINS CMD <CR>
453 TAD [BEGLIN-1
454 DCA GNMXR /SETUP FOR GNAME ROUTINE
455 ISZ GTEXT /TAKE NORMAL RETURN
456 JMP I GTEXT
457
458 LFEED, DCA I LXR /A 0 TO MARK END
459 TAD [BEGLIN-1
460 DCA LXR
461 JMS I [CRLF
462 TAD ["$
463 JMS I [TTYOUT
464 ECHO, TAD I LXR
465 SNA /DONE ECHOING?
466 JMP XRBACK /YES..REPOSITION LXR
467 JMS I [TTYOUT
468 JMP ECHO
469
470 ALTMOD, TAD ["$ /ALT MODE ECHOES AS $
471 JMS I [TTYOUT
472 JMP CAR1
473
474 CTRLU, TAD ["^
475 JMS I [TTYOUT /GENERATE ^U
476 TAD NAME1
477 TAD [100
478 JMS I [TTYOUT
479 RBCR, JMS I [CRLF
480 JMP I GTEXT /TAKE ERROR RETURN
481 \f GETCHR=JMS I [GETC
482 BAKCHR=JMS I [BAKC
483
484 ENDLIN,
485 GETNUM, 0 /PICKS UP NUMBER FROM LINE BUFF
486 /DELIM CHAR PUT IN 'CHAR'
487 /PRINTS ERROR MESSAGE IF GT 4095
488 /IF NO NUMBER, TAKES RETURN 1
489 /IF NUMBER, TAKES RET 2 WITH # IN 'SIZE'
490 DCA SIZE
491 DCA GOTSW /HAVEN'T FOUND ANY DIGITS YET
492 JMP NCHAR
493 ROT, DCA TMP1
494 ISZ GOTSW /FOUND A DIGIT
495 TAD SIZE
496 AND [7000
497 SZA CLA
498 JMP I [BADARG /NUMBER .GT. 4095
499 TAD SIZE
500 CLL RTL
501 RAL /BUILD UP THE DIGIT
502 TAD TMP1
503 DCA SIZE
504 NCHAR, GETCHR
505 SNA /0 ENDS THE LINE
506 JMP NUMOUT
507 TAD [-240 /IGNORE SPACES
508 SNA
509 JMP NCHAR
510 TAD (-30 /TEST LIMITS
511 CLL
512 TAD [10 /MUST BE BETWEEN 0 AND 7
513 SZL
514 JMP ROT
515 TAD (260 /RESTORE CHAR
516 NUMOUT, DCA CHAR /SAVE AWAY THIS DELIMETER
517 TAD GOTSW /DID WE GET ANY DIGITS?
518 SZA CLA /?
519 ISZ GETNUM /YES
520 JMP I GETNUM /NO, RETURN
521 \fGETC, 0 /GET THE NEXT CHARACTER, ADVANCE SCAN PAST IT
522 TAD I GNMXR
523 JMP I GETC
524
525 GOTSW, /1 MEANS GOT A DIGIT
526 BAKC, 0 /BACK UP SCAN TO THE CHARACTER JUST LOOKED AT
527 STA
528 TAD GNMXR
529 DCA GNMXR
530 JMP I BAKC
531 PAGE
532 \f INIT=JMS I [INI
533 ADVDSC=JMS I [DSCADV
534 ADVBOT=JMS I [BOTADV
535
536 / JMS PRMNAM /SEARCH TABLE FOR A PERMANENT NAME
537 /GIVEN IN NAME1-NAME2
538 /POINT TO DESCRIPTOR FOR THIS NAME
539 / JMS ACTNAM /SAME BUT PERMANENT NAME MUST BE ACTIVE
540 / JMS BIGNAM /SEARCHES FOR PERM & GRP NAME (GRP NAME IN SAV1,SAV2)
541 / JMS GRPNAM /SAME BUT SEARCH FOR GROUP NAME
542
543 CHKNAM, 0
544 INIT
545 CHKLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR
546 ADVBOT /ADVANCE OVER ANY BOOTSTRAP
547 JMP NFOUND /NO MORE- ERROR
548 GET
549 NM1, GRPNM1 /GET GROUP OR PERMANENT NAME
550 CIA
551 TAD NAME1
552 SZA CLA /DO FIRST WORDS MATCH?
553 JMP CHKLUP /NO, TRY AGAIN
554 GET
555 NM2, GRPNM2 /GET 2ND WORD
556 CIA
557 TAD NAME2
558 SZA CLA /2ND WORD MATCH?
559 JMP CHKLUP /NO
560 TAD BIGFLG
561 SNA CLA /WANT BOTH GROUP AND PERM NAME?
562 JMP NOBIG /NO
563 GET /YES
564 GRPNM1
565 CIA
566 TAD SAV1
567 SZA CLA
568 JMP CHKLUP
569 GET
570 GRPNM2
571 CIA
572 TAD SAV2
573 SZA CLA
574 JMP CHKLUP
575 NOBIG, TAD ACTSW /FOUND MATCH
576 SNA CLA /MUST HANDLER BE ACTIVE?
577 JMP I CHKNAM /NO, RETURN
578 GET /YES
579 ACTIVE
580 SMA CLA /IS IT ACTIVE?
581 JMP CHKLUP /NO, TRY AGAIN
582 JMP I CHKNAM /YES, RETURN
583 \fGRPNAM, 0
584 TAD (GRPNM1 /WANT TO SEARCH FOR GROUP NAME
585 DCA NM1
586 TAD (GRPNM2
587 DCA NM2
588 DCA ACTSW /NEED NOT BE ACTIVE
589 DCA BIGFLG
590 JMS CHKNAM /GO SEARCH
591 JMP I GRPNAM
592
593 ACTSW, 0 /1 MEANS HANDLER MUST BE ACTIVE
594
595 PRMNAM, 0
596 DCA ACTSW /AC MAY BE NON ZERO (TO MEAN ACTIVE ONLY)
597 TAD (PRMNM1 /WANT TO SEARCH FOR PERMANENT NAME
598 DCA NM1
599 TAD (PRMNM2
600 DCA NM2
601 DCA BIGFLG
602 JMS CHKNAM /GO SEARCH
603 JMP I PRMNAM
604
605 ACTNAM, 0
606 CLA IAC /THEY MUST BE ACTIVE
607 JMS PRMNAM
608 JMP I ACTNAM
609
610 BIGNAM, 0
611 DCA ACTSW
612 TAD (PRMNM1
613 DCA NM1
614 TAD (PRMNM2
615 DCA NM2
616 CLA IAC
617 DCA BIGFLG
618 JMS CHKNAM
619 JMP I BIGNAM
620
621 /SOMETIMES CHKNAM CAME FROM DSKASK INSTEAD OF GETSYS ****
622
623 BIGFLG, 0 /SET TO 1 TO CHECK GROUP & PERMANENT NAME
624 \fNFOUND, JMS I [PRNAME
625 JMS I [PRWD
626 TEXT / NOT FOUND/
627 JMP I [CONFIG
628
629 NOROOM, JMS I [PRWD
630 TEXT /?NO ROOM/
631 DCA I TABLMT /RESTORE SENTINEL 0
632 JMP I [CONFIG
633
634 VERS, JMS I [PRWD
635 TEXT /BUILD V6A/
636 JMP I [CONFIG
637
638 /BUILD CORE CONTROL BLOCK
639
640 BLDCCB, -2 /2 SEGMENTS
641 6203 /FIELD 0
642 0200 /200 IS S.A.
643 0000 /JSW
644 0000 /0-7577
645 3710
646 0000 /10000-17577
647 3700
648 /GOES INTO WORDS 200-377 OF BLOCK 37
649 \fOK, STA /NOW USE ORIGIN TO TELL US HOW BIG A
650 TAD I (ORIGIN /HANDLER WAS LOADED
651 AND [7600
652 TAD [200 /REMEMBER THAT ORIGIN IS ONE GREATER
653 DCA HNDPTR /THAN ACTUAL LAST LOCATION.
654 /BETTER TO USE 2-PAGE BIT
655 TAD I (NEWLIM
656 DCA TABLMT /SET NEW TABLE TOP
657 DCA I TABLMT /NEED 0 AT END
658 JMS I [COMMA
659 JMP I (LOAD
660 PAGE
661 \f/LOAD A 1- OR 2-PAGE HANDLER INTO BUFFER
662 /USE IT TO ABSLD
663
664 SETUP, 0
665 TAD [NAME1
666 DCA FILPTR /POINT TO FILENAME AREA
667 TAD (BUFFER+1 /LOAD 2 PAGE HANDLER INTO 'BUFFER'
668 DCA DRIVER /SET UP ASSIGN DEVICE HANDLER
669 JMS I [GNAME /GET DEVICE NAME
670 TAD NAME1
671 SNA CLA
672 JMP I SETUP /NO ARG
673 ISZ SETUP
674 TAD I (RETSW
675 SZA CLA
676 JMP I (BLDLOD /WHEN LOADING STANDALONE, USE INTERNAL HANDLERS
677 TAD CHAR
678 TAD [-":
679 SZA CLA
680 JMP I (SETDSK /USE 'DSK ' IF NO DEVICE GIVEN
681 TAD NAME1
682 DCA DVNM1
683 TAD NAME2
684 DCA DVNM1+1 /LOOKUP DEVICE NAME
685 GETU, JMS I (GETUSR
686 CIF 10
687 JMS I [200 /FETCH HANDLER
688 1
689 SUBLUP,
690 DVNM1, 0
691 LODTMP,
692 DVNUM, 0 /NAME GOES IN HERE
693 DRIVER, 0
694 JMP I (KICKM /NO DEVICE. RELEASE MONITOR
695 TAD CHAR
696 SZA CLA
697 JMS I [GNAME /PICK UP FILE NAME
698 TAD DVNM1+1 /DEVICE NUMBER
699 JMS I (DTYPE /SEE IF FILE STRUCTURED
700 TAD NAME1 /IF FILE STRUCTURED WITH NO NAME
701 SNA CLA /IT IS AN ERROR
702 JMP NMER /V3C
703 TAD NAME4 /SAVE ORIGINAL EXTENSION
704 DCA TEMP
705 TAD NAME4
706 SNA /IF NULL
707 TAD (0216 /TRY .BN FIRST
708 TRYAGN, DCA NAME4
709 TAD DVNUM /GET DEVICE NUMBER
710 CIF 10
711 JMS I [200 /DO LOOKUP OF FILENAME
712 2
713 FILPTR, NAME1
714 0
715 JMP LDEXT /DIDN'T FIND FILE. DO SOMETHING
716 CIF 10
717 JMS I [200 /KICK OUT MONITOR
718 11
719 TAD DRIVER
720 LOADIN, DCA I [DVICE /ENTRY POINT OF HANDLER
721 JMS I (IOPEN /IF HERE, IT WILL FIT
722 JMP I SETUP
723 \fLOAD, JMS SETUP /SET UP FOR INPUT
724 JMP I [NODEV /NO LOAD DEVICE
725 STA CLL RAL /-2 DO A HANDLER LOAD
726 JMS I (LDABS
727 JMP I [BADLOD /BAD
728 TAD I TABLMT /SEE IF HEADER INFORMATION IS OK
729 SMA
730 JMP I [BADLOD
731 TAD (20 /ALLOW 16 HANDLERS/BINARY
732 SPA CLA
733 JMP I [BADINP /TOO MANY
734 TAD I TABLMT
735 DCA LODTMP /# OF LOOPS TO EXECUTE
736 TAD TABLMT
737 TAD [PAGRES+1 /POINT TO FIRST 'PAGRES' WORD
738 DCA HDPTR /GO THERE FOR DESCRIPTORS
739 TAD HNDPTR
740 JMS I [ROTL
741 DCA TEMP /PAGE OF RESIDENCE
742 PGLUP, TAD TEMP
743 DCA I HDPTR /INSERT PAGE OF RESIDENCE
744 TAD HDPTR
745 TAD [HDRSIZ
746 DCA HDPTR
747 ISZ LODTMP
748 JMP PGLUP
749 TAD [2-HDRSIZ
750 TAD HDPTR
751 DCA HDPTR /POINT TO AFTER DESCRIPTORS
752 TAD HDPTR
753 CIA
754 TAD I (NEWLIM
755 SNA CLA /AT END?
756 JMP I (OK /YES
757 TAD I HDPTR /NO, MAYBE A BOOTSTRAP RECORD
758 CLL
759 TAD [200
760 SNL CLA
761 JMP I [BADLOD /NO
762 TAD I HDPTR /MAYBE
763 CIA
764 IAC /OVER COUNT
765 TAD HDPTR
766 CIA
767 TAD I (NEWLIM
768 SZA CLA
769 JMP I [BADLOD /NO
770 JMP I (OK
771 \fHDPTR, 0 /POINTS INTO NEW HEADER
772
773 /DESCRIPTOR TABLE DESCRIPTION:
774
775 /'TABLMT' ALWAYS POINTS TO FIRST FREE LOCATION
776 /'DSCPTR' ALWAYS POINTS TO BEGIN OF CURRENT HEADER BLOCK
777 /ITEMS ARE OF 3 FORMS:
778 /(A) GROUP COUNT: IN RANGE -1 TO -20 (IGNORED AND HAS NO MEANING)
779 / IT IS THERE FOR COMPATIBILITY WITH OLD BUILD
780 /(B) HEADER BLOCK STARTS WITH NUMBER IN RANGE 0-7577
781 / CONSISTS OF 'HDRSIZ' CONSECUTIVE WORDS
782 / DESCRIBED ELSEWHERE
783 /(C) BOOTSTRAP BLOCK: STARTS WITH NUMBER IN RANGE 7600-7757
784 / THIS IS THE NEGATIVE OF THE NUMBER OF WORDS TO FOLLOW
785 \f/NON-SYSTEM HEADER INFO:
786
787 / - NUMBER OF ENTRY POINTS
788
789 /FOR EACH ENTRY POINT:
790
791 /0,1 GROUP NAME
792 /2,3 ENTRY POINT NAME (PERMANENT NAME)
793 /4 R/W FILE-STR, DEVICE TYPE, MAX # OF PLATTERS
794 /5 1/2 PAGE, REL ENTRY PT, SYSBIT, CORES
795 /6* PAGE OF HANDLER, ACTIVE BIT, # OF PLATS, DSKBIT
796 /7 SIZE OF DEVICE
797
798 /* SUPPLIED BY BUILD
799
800 LDEXT, TAD TEMP /DIDN'T FIND FILE
801 SZA CLA
802 JMP I (KICKM /NO RESORT
803 ISZ TEMP
804 JMP TRYAGN /TRY NULL EXTENSION
805
806 NMER, CIF 10 /V3C
807 JMS I [200 /DISMISS USR FROM CORE
808 11
809 JMP I [NAMERR
810 PAGE
811 \fREPLACE,JMS I (DEL /DELETE PERMANENT NAME SPECIFIED NEXT
812 TAD CHAR
813 TAD MEQ
814 SZA CLA /AFTER ALL DELETIONS, MUST FIND A "="
815 JMP I [SYNTAX /IF NOT, WARN THE GUY
816 JMS INS /IF FOUND IT, NOW PERFORM INSERTIONS
817 JMP I [CONFIG /THE GUY HAS BEEN HUMORED
818
819 INSERT, JMS INS
820 TSTEOL, TAD CHAR /THERE SHOULDN'T BE ANYTHING AFTER EOC
821 SNA CLA
822 JMP I [CONFIG /THERE WASN'T
823 JMP I [SYNTAX /WARN BLOKE ABOUT EXTRA STUFF
824
825 DELETE, JMS I (DEL /DELETE PERMANENT NAMES SPECIFIED
826 JMP TSTEOL
827
828 SYSTEM, JMS INS /SYS IS SAME AS INSERT
829 GET
830 SYSBIT
831 RTL
832 SPA SZL CLA /BUT SYSBIT OR CORES SHOULD BE ON
833 JMP TSTEOL /JUST TO HUMOR IT'S NAME
834 TWOSYS, JMS I [PRWD /AND FOR COMPATIBILITY REASONS
835 TEXT /?SYS/
836 JMP I [CONFIG
837 \fINS, 0
838 TAD (STL RAR
839 DCA I (ACTION /SET 'ACTION' FOR INSERTIONS
840 JMS I [TSTNAM /LOOK FOR A NAME
841 JMS I [GRPNAM /GET GROUP NAME
842 JMS SAVNAM
843 JMS I [TEST
844 MEQ, -"=;ACT
845 -",;INSNAM
846 -":;INSNAM
847 4000;ACT
848 0
849 INSNAM, JMS I [TSTNAM /GRAB A NAME
850 INSGN, JMS I [BIGNAM /GET PERMANENT NAME WITH SPECIFIED GROUP NAME
851 GET
852 GRPNM1
853 CIA
854 TAD SAV1
855 SZA CLA
856 JMP I [NFOUND /MAKE SURE PERMANENT NAME FOUND
857 GET /HAS GROUP NAME PREVIOUSLY SPECIFIED
858 GRPNM2
859 CIA
860 TAD SAV2
861 SZA CLA
862 JMP I [NFOUND
863 ACT, JMS I (SETACT /SET ACTIVE BIT
864 COM, JMS I [TEST
865 -"-;HYPH
866 -",;INSNAM
867 -"=;INPLAT
868 0
869 JMP I INS
870 \fINPLAT, JMS I [GETNUM /AN "="
871 JMP I [SYNTAX
872 TAD SIZE
873 SNA CLA
874 JMP I [BADARG /=0 ILLEGAL
875 GET
876 MAXPLT
877 AND [7 /GET MAXIMUM # OF PLATTERS ALLOWED
878 SNA
879 IAC /0 MEANT 1
880 CMA CLL
881 TAD SIZE /COMPARE WITH USER'S REQUEST
882 SZL CLA /IS HIS REQUEST OKAY?
883 JMP BADPLT /REQUEST-SHMEST. TOO MANY PLATTERS
884 TAD SIZE
885 JMS I [ROTR
886 DCA SIZE
887 GET
888 PLATNUM
889 AND (6177
890 TAD SIZE /STORE AWAY HIS STATED NUMBER OF PLATTERS
891 PUT /FOR FUTURE USE BY 'BOOT'
892 PLATNUM
893 JMP COM /REJOIN PROCESSING
894
895 BADPLT, JMS I [PRWD
896 TEXT /?PLAT/
897 JMP I [CONFIG
898 \fSAVNAM, 0
899 TAD NAME1
900 DCA SAV1 /SAVE GROUP NAME
901 TAD NAME2
902 DCA SAV2
903 JMP I SAVNAM
904
905 HYPH, TAD NAME2
906 AND [77
907 CIA
908 DCA DETEM
909 GETCHR
910 AND [77
911 TAD DETEM /GET CHAR AFTER HYPEN
912 SNA CLA /REACHED IT YET?
913 JMP IGET /YES, WELL TRY FOR MORE STUFF
914 BAKCHR /NO, PUT IT BACK FOR FUTURE USE
915 ISZ NAME2 /FORM NEXT SEQUENTIAL NAME
916 JMP INSGN /GO INSERT IT
917 /DO WE REALLY HAVE TO START SEARCH AT CURRENT DESCR?
918
919 DETEM, 0
920
921 IGET, GETCHR
922 DCA CHAR
923 JMP COM
924
925 NODEV, JMS I [PRWD
926 TEXT /?DEVICE/
927 JMP I [CONFIG
928 PAGE
929 \fINTEM,
930 SETACT, 0
931 GET
932 ACTIVE /GET ACTIVATION BIT
933 RAL
934 ACTION, STL RAR /ACTIVATE IT (SET TO 'CLL RAR' TO DEACT)
935 PUT
936 ACTIVE /RESTORE
937 JMP I SETACT
938
939 DEL, 0
940 TAD (CLL RAR
941 DCA ACTION
942 DELNAM, JMS I [TSTNAM /PARSE OFF A NAME
943 DELGN, JMS I [ACTNAM /FIND IT AS AN ACTIVE PERMANENT NAME
944 JMS SETACT /DEACTIVATE IT
945 GET
946 PLATNUM
947 AND [6177 /SET # OF PLATTERS TO 0
948 PUT
949 PLATNUM
950 DCOM, JMS I [TEST
951 -"-;DHYPH
952 -",;DELNAM
953 0
954 JMP I DEL
955
956 DHYPH, TAD NAME2
957 AND [77
958 CIA
959 DCA INTEM
960 GETCHR
961 AND [77
962 TAD INTEM
963 SNA CLA /REACHED FINAL NAME?
964 JMP DGET /YES
965 BAKCHR /NO, PUT FINAL LETTER BACK
966 ISZ NAME2 /YES, BUMP TO NEXT NAME
967 L0423, 423
968 JMP DELGN /DELETE NEXT ONE IN SUCCESSION
969 \fDGET, GETCHR
970 DCA CHAR
971 JMP DCOM
972
973 TTYIN, 0 /TTY INPUT ROUTINE
974 KSF
975 JMP .-1
976 KRB
977 SNA /LOW LEVEL BLANK IGNORE
978 JMP TTYIN+1
979 AND [177 /HANDLE PARITY
980 TAD [200
981 DCA CHAR
982 JMP I TTYIN
983 \f/DSK=ACTIVE PERMANENT NAME
984 /DSK=GROUPNAME:PERMANENT NAME
985 /DSK=<CR> MEANS NO DSK SPECIFIED, USE 'SYS'
986
987 /JUST REMEMBERS NAME (NOTHING ELSE)
988
989 DSK, JMS I [GNAME /GET A NAME
990 TAD NAME1
991 SNA CLA
992 JMP NODSK
993 TAD CHAR
994 SNA
995 JMP NOCOL
996 TAD [-":
997 SZA CLA /IS IT FOLLOWED BY A ":"?
998 JMP I [SYNTAX /NO, ASSUME HE'S GIVING AN ACTIVE PERMANENT NAME
999 /THIS IS FOR COMPATIBILITY WITH OLD BUILD
1000 / JMS I [GRPNAM /YES, ITS A GROUP NAME
1001 TAD NAME1 /SAVE IT
1002 DCA DSKG1
1003 TAD NAME2
1004 DCA DSKG2
1005 JMS I [TSTNAM /GET PERMANENT NAME
1006 PN, TAD NAME1
1007 DCA DSKP1 /DON'T WORRY NOW IF IT'S AROUND
1008 TAD NAME2
1009 DCA DSKP2
1010 TAD CHAR
1011 SZA CLA
1012 JMP I [SYNTAX
1013 JMP I [CONFIG
1014
1015 NODSK, DCA DSKG1 /FIRST WORD 0 MEANS NONE SPECIFIED
1016 JMP I [CONFIG
1017
1018 NOCOL, JMS I [ACTNAM /IT MUST BE AN ACTIVE HANDLER
1019 GET
1020 GRPNM1
1021 DCA DSKG1
1022 GET
1023 GRPNM2
1024 DCA DSKG2
1025 JMP PN
1026 \fSETDSK, TAD L0423 /DS
1027 DCA I (DVNM1
1028 TAD (1300 /K
1029 DCA I (DVNM1+1
1030 JMP I (GETU
1031
1032 KICKM, CIF 10 /RELEASE MONITOR AND RELOAD
1033 JMS I [200 /OUR DEVICES
1034 11
1035 JMP I [NFOUND
1036
1037 GETUSR, 0
1038 CIF 10
1039 JMS I [7700 /LOCK IN MONITOR
1040 10
1041 CIF 10 /RESET RESIDENT HANDLER TABLE
1042 JMS I [200
1043 13
1044 JMP I GETUSR
1045 \f/ CODE FOR USING INTERNAL HANDLERS ON STANDALONE LOAD:
1046
1047 BLDLOD, DCA I (FILPTR /LOAD DEV
1048 JMS I [ACTNAM /MUST BE ACTIVE
1049 JMS I [GETPG
1050 DCA HNDLOK /LOCATION OF HANDLER
1051 TAD [-400
1052 JMS I [MOVE
1053 CDF 10
1054 HNDLOK, HLT
1055 CDF 0
1056 PBUFFER,BUFFER
1057 GET
1058 DCB
1059 DCA BLDCB
1060 GET
1061 ENTPT
1062 AND [177
1063 TAD PBUFFER /GET ENTRY POINT OF HANDLER
1064 JMP I (LOADIN
1065
1066 BLDCB, 0 /CONTAINS DCB OF CURRENT LOAD HANDLER
1067 PAGE
1068 \fGETPG, 0
1069 GET
1070 PAGRES
1071 JMS I [ROTR
1072 AND [7600
1073 JMP I GETPG
1074
1075 /FORMAT: NAME OLDNAME=NEWNAME
1076
1077 NAME, JMS TSTNAM /SEE IF ARGUMENT SUPPLIED
1078 /SEARCH PERMANENT TABLES
1079 JMS I [ACTNAM /GET ACTIVE PERMANENT NAME DESCRIPTOR
1080 TAD CHAR
1081 TAD MEQL /CHECK FOR =
1082 SZA CLA
1083 JMP I [BADARG
1084 JMS TSTNAM /GET NEW DEVICE NAME
1085 TAD NAME1 /REPLACE THE NAME
1086 PUT
1087 PRMNM1
1088 TAD NAME2
1089 PUT
1090 PRMNM2
1091 JMP I [CONFIG
1092 \fEXAMINE,CLA IAC
1093 ALTER, DCA XSWTCH
1094 JMS I [TSTNAM /ALTER ALLOWS MODS TO A PARTICULAR
1095 JMS I [GRPNAM /HANDLER'S ACTUAL CODE.
1096 /LOOK AT DEVICE TYPE ENTRY
1097 JMS GETPG /GET PAGE OF RESIDENCE
1098 DCA PAGAD /SAVE IT.
1099 JMS I [GETNUM /GET RELATIVE LOC TO ALTER
1100 JMP I [SYNTAX /NO NUMBER
1101 GET
1102 P2PAG, TWOPAG /IS THIS A 2-PAGE HANDLER?
1103 SPA CLA
1104 TAD [7600
1105 TAD [7600 /ALLOW 200 OR 400 MAXIMUM
1106 CLL
1107 TAD SIZE /IS THE # TO ALTER TOO LARGE?
1108 SZL CLA
1109 JMP I [BADARG /I GUESS IT IS
1110 TAD SIZE
1111 TAD PAGAD /GET ABSOLUTE LOCATION
1112 DCA PAGAD
1113 TAD XSWTCH
1114 SZA CLA /EXAMINE OR ALTER?
1115 JMP EXAM /EXAMINE
1116 TAD CHAR /ALTER
1117 SZA CLA /CR?
1118 JMP GETVAL /NO
1119 JMS EXAMSB /YES, GIVE GUY OLD VALUE FIRST
1120 ODTL, TAD ["/ /ODT LIKE
1121 JMS I [TTYOUT
1122 TAD [-100
1123 JMS I [GTEXT
1124 JMP ODTL
1125 GETVAL, JMS I [GETNUM /GET NEW CONTENTS
1126 JMP I (TSTEOL /NO NUMBER
1127 TAD SIZE
1128 CDF 10
1129 DCA I PAGAD /REPLACE THAT LOC.
1130 JMP I [CONFIG /AND GET OUT
1131 PAGAD, 0
1132
1133 /ALTER GROUPNAME,LOC=NEWVALUE
1134 /ALTER GROUPNAME,LOC
1135 /EXAMINE GROUPNAME,LOC
1136 \f/SIZE ACTNAM
1137 /SIZE ACTNAM=VALUE
1138 /DCB ACTNAM
1139 /DCB ACTNAM=VALUE
1140 /CTL ACTNAM
1141 /CTL ACTNAM=VALUE
1142
1143 SIZCM, TAD (3 /SIZE COMMAND V3C
1144 DCBCM, TAD [-1 /EXAMINE DCB WORD
1145 CTLCM, TAD P2PAG /EXAMINE CONTROL WORD
1146 DCA PUTAT
1147 TAD PUTAT
1148 DCA LOOKAT
1149 JMS I [TSTNAM /GET A NAME
1150 JMS I [ACTNAM /IT MUST BE ACTIVE
1151 JMS I [TEST
1152 MEQL, -"=;INPDCB
1153 4000;EXAMDCB
1154 0
1155 JMP I [SYNTAX
1156 INPDCB, JMS I [GETNUM
1157 JMP I [CONFIG /IGNORE = NOTHING
1158 TAD SIZE
1159 PUT
1160 XSWTCH, /0 MEANS ALTER, 1 MEANS EXAMINE
1161 PUTAT, DCB
1162 JMP I [CONFIG /THE USER LIVES DANGEROUSLY
1163
1164 EXAMDCB,GET
1165 LOOKAT, DCB
1166 JMS PUTNUM
1167 TAD ["/
1168 JMS I [TTYOUT
1169 TAD [-100
1170 JMS I [GTEXT
1171 JMP EXAMDCB
1172 JMP INPDCB /NOW PARSE OFF THE REPLY
1173 \fEXAM, JMS EXAMSB
1174 JMP I [CONFIG
1175
1176 EXAMSB, 0
1177 CDF 10
1178 TAD I PAGAD /GET CURRENT CONTENTS
1179 CDF 0
1180 JMS PUTNUM /PRINT IT
1181 JMP I EXAMSB
1182
1183 PUTNUM, 0 /PRINT AN OCTAL NUMBER
1184 DCA PTM
1185 TAD [-4 /4 DIGITS
1186 DCA PKNT
1187 PLOOP, TAD PTM
1188 RTL
1189 RTL
1190 AND [7
1191 TAD (60
1192 JMS I [TTYOUT
1193 TAD PTM
1194 RTL
1195 RAL
1196 DCA PTM
1197 ISZ PKNT
1198 JMP PLOOP
1199 JMP I PUTNUM
1200 PTM, 0
1201
1202 PKNT,
1203 TSTNAM, 0
1204 JMS I [GNAME /COLLECT NAME
1205 TAD NAME1 /IF NO NAME FOUND, GIVE ERROR
1206 SZA CLA
1207 JMP I TSTNAM
1208 NAMERR, JMS I [PRWD
1209 TEXT /?NAME/
1210 JMP I [CONFIG
1211 PAGE
1212 \f/PRINT FUNCTION TYPES OUT THE STATUS OF BUILD ON COMMAND
1213 /AN * BESIDE A DEVICE INDICATES THAT IT IS CURRENTLY MARKED
1214 /FOR INSERTION IN THE SYSTEM BEING BUILT.
1215
1216 TTY240,
1217 PRINT, STA
1218 DCA OLDPAG /SET ILLEGAL OLD PAGE
1219 INIT
1220 ISZ I (LINEUP /MAKE THINGS LINE UP
1221 PRLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR
1222 ADVBOT /ADVANCE PAST A BOOTSTRAP (IF ANY)
1223 JMP DONE /ALL DONE
1224 JMS I [GETPG /GET PAGE OF NEW HANDLER
1225 DCA NEWPAG
1226 TAD NEWPAG
1227 CIA
1228 TAD OLDPAG /COMPARE WITH LAST HANDLER'S PAGE
1229 SNA CLA /SAME?
1230 JMP PRTPER /YES
1231 JMS I [CRLF /NO, GO TO NEXT LINE
1232 TAD NEWPAG
1233 DCA OLDPAG
1234 JMS PGNAME
1235 TAD TTY240
1236 JMS I [TTYOUT
1237 PRTPER, GET /GET ACTIVE BIT
1238 ACTIVE
1239 SPA CLA /IS IT ACTIVE?
1240 TAD ("*-STA /YES, PRINT *
1241 TAD TTY240 /NO, PRINT SPACE
1242 JMS I [TTYOUT
1243 JMS PNAME /PRINT PERMANENT NAME
1244 JMP PRLUP
1245
1246 PGNAME, 0
1247 GET
1248 GRPNM1
1249 JMS I (PRINTE /PRINT GROUP NAME
1250 GET
1251 GRPNM2
1252 JMS I (PRINTE
1253 TAD (":
1254 JMS I [TTYOUT
1255 JMP I PGNAME
1256 \fDONE, DCA I (LINEUP /NO MORE LINE-UP
1257 TAD DSKG1
1258 SNA CLA
1259 JMP TELCOR
1260 JMS I [CRLF /TELL GUY ABOUT 'DSK'
1261 JMS I [CRLF
1262 JMS I [PRWD
1263 TEXT /DSK=/
1264 TAD DSKG1
1265 JMS I (PRINTE
1266 TAD DSKG2
1267 JMS I (PRINTE
1268 TAD (":
1269 JMS I [TTYOUT
1270 TAD DSKP1
1271 JMS I (PRINTE
1272 TAD DSKP2
1273 JMS I (PRINTE
1274 TELCOR, TAD NEWCOR
1275 SNA
1276 JMP I [CONFIG /NO SPECIFIED CORE LIMIT
1277 JMS I [ROTL
1278 TAD (6000
1279 DCA CORMSG+3
1280 JMS I [CRLF
1281 JMS I [PRWD
1282 CORMSG, TEXT /CORE= /
1283 JMP I [CONFIG
1284 \f/QUICK PRINT
1285
1286 QLIST, INIT
1287 QLUP, ADVDSC /ADVANCE TO NEXT DESCRIPTOR
1288 ADVBOT /ADVANCE OVER ANY BOOTSTRAP IF NECESSARY
1289 JMP DONE /GO AWAY WHEN NO MORE
1290 GET
1291 ACTIVE /GET ACTIVE BIT
1292 SMA CLA /IS IT ACTIVE?
1293 JMP QLUP /NO, IGNORE IT
1294 GET /YES
1295 SYSBIT
1296 RAL
1297 SPA CLA /IS IT 'SYS'?
1298 JMS PGNAME /YES, PRINT GROUP NAME TOO
1299 JMS PNAME /NO, PRINT PERMANENT NAME ONLY
1300 JMP QLUP
1301
1302 DT,
1303 PNAME, 0
1304 GET
1305 PRMNM1
1306 JMS I (PRINTE
1307 GET
1308 PRMNM2
1309 JMS I (PRINTE
1310 TAD TTY240
1311 JMS I [TTYOUT
1312 JMP I PNAME
1313 \f DCBTBL=7760
1314
1315 WHAT, JMS I [PRNAME
1316 JMS I [PRWD
1317 TEXT /?/ /FOR WHEN A COMMAND ERROR OCCURS
1318 JMP I [CONFIG
1319
1320
1321 DTYPE, 0 /RETURNS TYPE OF OUTPUT
1322 TAD (DCBTBL-1
1323 DCA DT /ENTRY AC HAD DEVICE #
1324 CDF 10
1325 TAD I DT /IF FILE DEVICE, LINK=0
1326 CDF 0
1327 CMA RAL /ALSO, IF FILE AC=0 ON EXIT
1328 CLA RAL
1329 JMP I DTYPE
1330 \fWRITCC, 0
1331 TAD [-6 /PUT IN DATA BREAK FILLERS
1332 JMS I [MOVE
1333 CDF 0
1334 K7750
1335 CDF 0
1336 PG7600+200+150
1337 TAD (4200
1338 JMS I [SYS /WRITE NEW CCB
1339 BLDCCB-200
1340 37
1341 JMP I WRITCC
1342 PAGE
1343 \fTOOMANY,JMS I [PRWD
1344 TEXT /?HANDLERS/
1345 JMP I [CONFIG
1346
1347 BADLOD, JMS I [CRLF
1348 JMS I [PRWD
1349 TEXT /?BAD LOAD/
1350 DCA I TABLMT /RESTORE SENTINEL 0
1351 JMP I [CONFIG
1352 \fTEST, 0 /TEST CHAR AGAINST ARGUMENTS
1353 TAD I TEST /PICK UP ARGUMENT FROM LIST
1354 SNA /0 TERMINATES
1355 JMP I TEST
1356 TAD CHAR /SEE IF THEY COMPARE =
1357 AND (3777 /COMPARE ONLY LOW ORDER, THUS ALLOWING '4000' TO MEAN '0'
1358 SNA CLA
1359 JMP TSTOVR /THEY DO..DISPATCH TO TABLE
1360 ISZ TEST
1361 ISZ TEST
1362 JMP TEST+1 /THEY DON'T. KEEP GOING
1363 TSTOVR, ISZ TEST
1364 TAD I TEST
1365 DCA TEMP
1366 JMP I TEMP
1367
1368 K7750, 7750 /DATA BREAK FILLERS
1369 7751
1370 7752
1371 7753
1372 7754
1373 7755
1374
1375 SYS, 0 /SAVES A FEW WORDS IN SYSTEM CALLS
1376 DCA SYCTL /SAVE FUNCTION WORD
1377 TAD I SYS
1378 DCA SYBUF /BUFFER BEING USED
1379 ISZ SYS
1380 TAD I SYS
1381 DCA SYREC /RECORD #
1382 ISZ SYS /THERE IS NO ERROR RETURN
1383 /IF SWAPER SET AND BOOTDV SET, USE SPECIAL BOOT HANDLER HERE
1384 GO, JMS I SYSENT
1385 SYCTL, 0
1386 SYBUF, 0
1387 SYREC, 0
1388 SKP CLA
1389 JMP I SYS
1390 JMS I [PRWD
1391 TEXT /SYS ERR/
1392 HLT /IF USER IS DARING, HIT CONTINUE TO RETRY
1393 JMP GO
1394
1395 SYSENT, 7607
1396 \f/*****************
1397 /
1398 / SYS HANDLER IS 2-PAGES LONG IF LOCATION 7612 IS A 3
1399 /
1400 /******************
1401
1402 CLRTBL, 0
1403 TAD [BEGLIN
1404 DCA XR1
1405 TAD [-200 /ZERO OUT 5200-5377
1406 DCA TMP1
1407 DCA I XR1
1408 ISZ TMP1
1409 JMP .-2
1410 JMP I CLRTBL
1411
1412 /FOR HANDLER ONLY
1413 ORGLIM, 0 /THIS ROUTINE MAKES CERTAIN THAT
1414 DCA CLRTBL /THE ORIGIN FOR LDABS IS WITHIN
1415 TAD CLRTBL /THE BOUNDS SPECIFIED BY SIZE
1416 TAD [7600 /AND THE CONTENTS OF HNDPTR
1417 SPA
1418 JMP BADORG /ORIGIN BELOW 200
1419 CIA
1420 TAD [400 /IS ORIGIN WITHIN UPPER BOUND?
1421 SPA CLA
1422 JMP BADORG
1423 TAD CLRTBL
1424 TAD [7600 /NOW GIVE BACK RELATIVE BUFFER
1425 TAD HNDPTR /ADDRESS IN FIELD 1
1426 DCA CLRTBL
1427 TAD CLRTBL
1428 AND [7600
1429 TAD [200
1430 SNA CLA
1431 JMP I (NOROOM /CAN'T 'ORIGIN' INTO PAGE 7600
1432 TAD CLRTBL
1433 JMP I ORGLIM
1434
1435 BADORG, JMS I [PRWD
1436 TEXT /?ORIGIN/
1437 JMP I (OVROUT
1438
1439 /SOMEWHERE TEST IF HE GAVE US A 2-PAGE BUT REQ A 1-PAGE
1440 \f/ PG7600_0
1441 / BLOK66_66
1442 / IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L
1443
1444 RECZRO, 0 /READS FIELD 1 CODE, EVEN FOR 12K TD8E
1445 TAD [200
1446 JMS I [SYS /READ RECORD 0
1447 PG7600
1448 0 /THAT NORMALLY CONTAINS FIELD 1
1449 TAD (210
1450 JMS I [SYS /READ RECORD 66
1451 BLOK66
1452 66
1453 TAD FLAG2 /DID PREVIOUS SYSTEM HAVE A 2-PAGE HANDLER?
1454 SZA CLA
1455 TAD [-200 /NO
1456 JMS I [MOVE /YES
1457 CDF 0
1458 PG7600
1459 CDF 10
1460 BLOK66
1461 JMP I RECZRO
1462
1463 NOTNUF, JMS I [PRWD
1464 TEXT /?CORE/
1465 JMP I [CONFIG
1466 PAGE
1467 \fUNLOAD, JMS I [TSTNAM /PULL OFF A NAME
1468 JMS I [GRPNAM /IT HAD BETTER BE A GROUP NAME
1469 JMS I [TEST
1470 -":;UNLPRM
1471 4000;UNLGRP
1472 0
1473 JMP I [SYNTAX
1474
1475 UNLPRM, JMS I (SAVNAM /UNLOAD PARTICULAR HANDLER
1476 UNLNAM, JMS I [TSTNAM
1477 JMS I [BIGNAM
1478 TAD DSCPTR /DELETE A SINGLE DESCRIPTOR
1479 DCA SAVPTR /DON(T DELETE HANDLER
1480 TAD DSCPTR /OR BOOTSTRAP
1481 TAD [HDRSIZ /NO RELOCATION NECESSARY
1482 DCA LSTPTR
1483 TAD TABLMT
1484 JMP NOMOR
1485 \fUNLGRP, JMS I [GETPG /GET PAGE OF RESIDENCE
1486 DCA TOMOV /START OF HANDLER
1487 GET
1488 TWOPAG /IS IT A 1- OR 2- PAGE HANDLER?
1489 SPA CLA
1490 TAD [200 /2 PAGE
1491 TAD [200 /1 PAGE
1492 DCA UNSIZE
1493 TAD TOMOV /DELETE HANDLER AND MOVE ALL FOLLOWING DOWN
1494 TAD UNSIZE
1495 DCA FROMOV /GET FIRST LOCATION AFTER HANDLER
1496 TAD HNDPTR /GET NEXT FREE LOCATION FOR HANDLER
1497 CIA
1498 TAD FROMOV /GET NUMBER OF LOCS TO MOVE
1499 JMS I [MOVE
1500 CDF 10
1501 FROMOV, 0
1502 CDF 10
1503 TOMOV, 0 /UPDATE POINTERS; SEARCH DESCRIPTORS
1504 TAD UNSIZE /FOR REFS TO MOVED HANDLERS AND DECREASE
1505 CIA /THOSE REFS BY -UNSIZE
1506 TAD HNDPTR
1507 DCA HNDPTR /FREES SOME BUFFER SPACE
1508 TAD TABLMT
1509 DCA OLDTOP /REMEMBER ORIGINAL TOP OF STACK
1510 STA /BACK UP OVER GROUP COUNT
1511 TAD DSCPTR
1512 DCA SAVPTR /REMEMBER THIS LOCATION
1513 TAD UNSIZE
1514 JMS I [ROTL
1515 CIA
1516 DCA UNSIZE
1517 TAD DSCPTR
1518 TAD [HDRSIZ
1519 DCA LSTPTR /'LSTPTR' POINTS TO FIRST DESCRIPTOR BEING MOVED
1520 \f/COMPRESS THE DESCRIPTORS ABOVE THIS ONE
1521
1522 ADV, ADVDSC /ADVANCE TO NEXT DESCRIPTOR
1523 JMP BADV /ENCOUNTERED A BOOTSTRAP RECORD
1524 JMP NOMORE /NO MORE, THROUGH
1525 GT, JMS I [GETPG /GET PAGE OF THIS DESCRIPTOR
1526 CLL CIA
1527 TAD TOMOV /COMPARE WITH PAGE OF DELETED HANDLER
1528 SNA CLA
1529 JMP SAMPAG /THEY'RE THE SAME
1530 SZL /THEY'RE NOT THE SAME. WHICH IS HIGHER?
1531 JMP ADV /IT WAS BELOW HANDLER. NO SWEAT.
1532 GET /IT WAS ABOVE HANDLER, HAVE TO ACCOUNT FOR THIS
1533 PAGRES /POINT TO NEW HANDLER LOCATION
1534 TAD UNSIZE
1535 PUT
1536 PAGRES
1537 JMP ADV /CONTINUE
1538 SAMPAG, TAD [HDRSIZ
1539 TAD DSCPTR
1540 DCA LSTPTR /NOTE LOCATION OF NEXT DESCRIPTOR
1541 JMP ADV
1542 /ADVANCE PAST BOOTSTRAP OR DELETE IT AS NECESSARY
1543 BADV, TAD DSCPTR
1544 CIA
1545 TAD LSTPTR
1546 SZA CLA /IS THIS BOOT PART OF GROUP BEING UNLOADED?
1547 JMP BDV /NO
1548 TAD I DSCPTR /YES
1549 CIA
1550 IAC
1551 TAD DSCPTR
1552 DCA LSTPTR /SET 'LSTPTR' TO BEGIN OF NEXT DESCRIPTOR
1553 BDV, ADVBOT /ADVANCE OVER BOOTSTRAP
1554 JMP NOMORE /DONE
1555 JMP GT /GO ON TO NEXT DESCRIPTOR
1556 \f/ALL DESCRIPTORS FOR THE SAME HANDLER ARE CONSECUTIVE
1557 /MOVE DOWN DESCRIPTORS
1558
1559 NOMORE, TAD OLDTOP
1560 NOMOR, CIA
1561 TAD LSTPTR /MINUS # OF WORDS TO MOVE
1562 JMS I [MOVE
1563 CDF 0
1564 LSTPTR, 0 /FIRST DESCRIPTOR NOT CONSIDERED
1565 CDF 0
1566 SAVPTR, 0 /POINTS TO INITIAL DESCRIPTOR BEING DELETED
1567 TAD LSTPTR
1568 CIA
1569 TAD SAVPTR /GET NUMBER OF WORDS DELETED
1570 TAD TABLMT
1571 DCA TABLMT /UPDATE TABLMT
1572 DCA I TABLMT /MUST HAVE 0 AT TABLE END SO DON'T THINK IT'S A BOOTSTRAP
1573 JMS I [COMMA
1574 JMP UNLNAM
1575
1576 OLDTOP, /ORIGINAL TOP OF DESCRIPTORS
1577 INI, 0
1578 TAD (DSCTAB-HDRSIZ
1579 DCA DSCPTR
1580 JMP I INI
1581
1582 INIT=JMS I [INI
1583
1584 /RETURN TO CONFIG IF EOL, OR BACK IN-LINE IF COMMA
1585
1586 UNSIZE,
1587 COMMA, 0
1588 TAD CHAR
1589 SNA
1590 JMP I [CONFIG
1591 TAD (-",
1592 SNA CLA
1593 JMP I COMMA
1594 JMP I [SYNTAX
1595 \fBOOTQ, SZA CLA /MAY BE OVERLAID
1596 JMP SAMEE
1597 DCA I (DRECT /DON'T TOUCH DIRECTORY IF DIDN'T COPY SYS
1598 SAMF, JMS I [SYSWP
1599 JMP I (BOOT4
1600 SAMEE, JMS I (SYSCPY /OR IF OLD DEV=NEW DEV
1601 JMP SAMF
1602 PAGE
1603 \fLOCSYS, 0
1604 TAD (2331 /"SY"
1605 DCA NAME1
1606 TAD (2300 /"S "
1607 DCA NAME2
1608 DCA NAME3 /V3C
1609 DCA NAME4
1610 JMS I [ACTNAM /LOOK UP 'SYS'
1611 JMP I LOCSYS
1612
1613 NOSLOT, JMS I [PRWD
1614 TEXT /?SLOTS/
1615 JMP I [CONFIG
1616
1617 GOOD, 0
1618 TAD [4207 /RESTORE 7600 TO NORMAL
1619 DCA I [7600
1620 TAD [5000
1621 DCA I [7601
1622 TAD (CDF CIF
1623 DCA I [SA /SET SA=00200
1624 TAD [200
1625 DCA I (SA+1
1626 DCA I (JSW /SET JOB STATUS WORD=0
1627 STA
1628 DCA I (DRECT
1629 CLL STA RTL /-3
1630 TAD I [7612 /FUDGE FOR 12K TD8E
1631 DCA FLAG2 /SET FLAG2=0 IF PREV SYSTEM WAS 2 PAGE
1632 JMP I GOOD
1633 \fPACK, ISZ PROTECT /OK TO PACK IT?
1634 JMP PACKOK /YES
1635 STA
1636 DCA PROTECT /INHIBIT OTHER PACKS ALSO
1637 JMP GNAME2
1638 PACKOK, ISZ SWIT /PACK LEFT OR RIGHT
1639 JMP RIGHT
1640 TAD CHAR
1641 AND [77
1642 JMS I [ROTL /ROTATE 6 LEFT
1643 DCA I TEMP /STORE THE CHARACTER
1644 JMP GNAME2
1645 RIGHT, CLA CMA /RESET FLIP FLOP
1646 DCA SWIT
1647 TAD CHAR
1648 AND [77
1649 TAD I TEMP
1650 DCA I TEMP
1651 ISZ TEMP /POINT TO NEXT WORD
1652 JMP GNAME2
1653 PROTECT,0 /-1 MEANS DON'T ACCEPT CHAR, IGNORE IT
1654 SWIT, 0
1655 \fDOT, CLA CMA
1656 DCA SWIT
1657 TAD (-3 /NOW ALLOW ONLY A 2-CHAR EXTENSION
1658 DCA PROTECT
1659 TAD (NAME4
1660 DCA TEMP
1661 ISZ DOTCNT /HAD WE SEEN A DOT BEFORE?
1662 JMP SYNTAX /YES
1663 JMP GNAME2 /NO
1664
1665 DOTCNT, -1 /-1 MEANS HAVEN'T SEEN A DOT
1666
1667 EOL, DCA CHAR
1668 JMP I GNAME
1669
1670 GNAME, 0 /COLLECT A WORD IN NAME1-NAME4
1671 /LEAVE DELIMITING CHAR IN 'CHAR'
1672 CDF 0
1673 TAD [-7 /MAX 6 CHARACTERS
1674 DCA PROTECT
1675 DCA NAME1 /FIRST CLEAR OUT COLLECTION AREA
1676 DCA NAME2
1677 DCA NAME3
1678 DCA NAME4
1679 CLA CMA
1680 DCA SWIT /L-R PACKING SWITCH
1681 STA
1682 DCA DOTCNT /ALLOW ONLY ONE DOT PER NAME
1683 TAD (NAME1
1684 DCA TEMP
1685 GNAME2, GETCHR
1686 SNA /A 0 ENDS THE SEARCH
1687 JMP EOL
1688 DCA CHAR
1689 TAD CHAR
1690 TAD (-"A /GET ONLY A-Z OR 0-9
1691 CLL
1692 TAD ("A-"Z-1
1693 SNL CLA /IS IT A-Z?
1694 JMP PACK /YES..PACK IT AWAY
1695 TAD CHAR
1696 TAD (-"0
1697 CLL
1698 TAD ("0-"9-1
1699 SNL CLA
1700 JMP PACK /FOUND 0-9
1701 JMS I [TEST /TEST FOR DELIMITING CHARS
1702 -".;DOT /ADVANCE POINTERS
1703 0
1704 JMP I GNAME
1705 \fSYNTAX, JMS I [PRWD
1706 TEXT /?SYNTAX/
1707 JMP I [CONFIG
1708
1709 DSKBAD, JMS I [PRWD
1710 TEXT /?DSK/
1711 JMP I [CONFIG
1712 \f SRES=BEGLIN+60 /RESIDENCY TABLE
1713 SDCB=BEGLIN+100 /DCB
1714 SHND=BEGLIN+120 /SLOT ASSSIGNED?
1715 SNAME=BEGLIN+140/NAME
1716 SBUFF=BEGLIN+160/ADDRESS OF HANDLER
1717
1718
1719 / SYSTEM TABLES:
1720
1721 /THOSE IN USR:
1722
1723 /PDNT PERMANENT DEVICE NAME TABLE (SNAME)
1724 / POINTED TO BY LOCATION 10036 IN USR
1725 / CONTAIN HASH CODE OF DEVICE NAME
1726 / ADD TWO WORDS OF NAME TOGETHER AND TURN ON BIT 0
1727 / IF SECOND WORD WAS NON-ZERO
1728 / AN ENTRY OF 0 MEANS THERE IS NO DEVICE FOR THAT ENTRY
1729
1730 /DHIT DEVICE HANDLER INFORMATION TABLE (SHND)
1731 / POINTED TO BY LOCATION 10037 IN USR
1732 / BIT 0 =1 IF THIS IS A TWO-PAGE HANDLER
1733 / BITS 1-4 RELATIVE BLOCK LOCATION OF HANDLER ON SYSTEM DEVICE
1734 / (BLOCK SLOT). ADD 15 TO GET ACTUAL BLOCK #.
1735 / BITS 5-11 RELATIVE ENTRY POINT OF HANDLER
1736
1737
1738 /DHRT DEVICE HANDLER RESIDENCY TABLE (SRES)
1739 / IN LOCATIONS 17647-17665
1740 / ACTUAL ENTRY POINT OF HANDLER
1741 / WE ONLY CARE ABOUT IT IF THE HANDLER IS RESIDENT.
1742 / OTHERWISE IT'S ZERO.
1743 / THE SYSTEM HANDLER AND ALL HANDLERS CORESIDENT WITH
1744 / IT ARE ALWAYS RESIDENT IN CORE AND HAVE THIS ENTRY NON-0.
1745
1746
1747 /DCWT DEVICE CONTROL WORD TABLE (SDCB)
1748 / RESIDES IN LOCATIONS 17760-17776
1749 / BIT 0 1 IF DEVICE IS FILE STRUCTURED
1750 / BIT 1 1 IF THE DEVICE IS READ ONLY
1751 / BIT 2 1 IF THE DEVICE IS WRITE-ONLY
1752 / BITS 3-8 PHYSICAL DEVICE TYPE
1753 / BITS 9-11 DIRECTORY BLOCK # (WE SET TO 0)
1754 \f/PRE-ASSIGNED DEVICE TYPES
1755
1756 /0 TELETYPE
1757 /1 HIGH SPEED PAPER TAPE READER
1758 /2 HIGH SPEED PAPER TAPE PUNCH
1759 /3 CARD READER
1760 /4 LINE PRINTER (ANY TYPE)
1761 /5 RK8 DISK
1762 /6 RF08 (1 PLATTER)
1763 /7 RF08 (2 PLATTERS)
1764 /10 RF08 (3 PLATTERS)
1765 /11 RF08 (4 PLATTERS)
1766 /12 DF32 (1 PLATTER)
1767 /13 DF32 (2 PLATTERS)
1768 /14 DF32 (3 PLATTERS)
1769 /15 DF32 (4 PLATTERS)
1770 /16 TC08 DECTAPE
1771 /17 LINCTAPE
1772 /20 TM8E MAGTAPE
1773 /21 TD8E DECTAPE (12K OR ROM)
1774 /22 BAT:
1775 /23 RK8E DISK
1776 /27 TU60 CASSETTES
1777 /30 VR12 (PDP-12 SCOPE)
1778 PAGE
1779 \fBOOT2A, TAD (15
1780 DCA SLOT /START ASSIGNING AT BLOCK SLOT 16 (16-25)
1781 TAD (-17 /ALLOW 16 ACTIVE HANDLERS NOT COUNTING DSK
1782 DCA COUNT
1783 JMS I (CLRTBL /CLEAR OUT IN-CORE TABLES
1784 TAD (SHND+1 /ASSIGN SLOTS, COUNT ACTIVE HANDLERS
1785 DCA XR1 /XR1 POINTS TO SLOT TABLE (DHIT)
1786 TAD (SDCB+1
1787 DCA XR2 /XR2 POINTS TO DCB TABLE
1788 TAD (SNAME+1
1789 DCA XR3 /XR3 POINTS TO PERMANENT DEVICE NAME TABLE
1790 TAD (SBUFF+1
1791 DCA XR4 /XR4 POINTS TO HANDLER BUFFER ADDRESSES
1792 TAD (SRES+1
1793 DCA XR5 /XR5 POINTS TO RESIDENCY TABLE
1794 CLA IAC /??
1795 DCA OLDPAG /SET 'OLDPAG' TO A RIDICULOUS VALUE
1796 INIT
1797 SLTLUP, ADVDSC /GO TO NEXT DESCRIPTOR
1798 ADVBOT /ADVANCING OVER ANY BOOTSTRAPS
1799 JMP BOOT2X /ALL DONE CREATING INTERNAL COPIES OF TABLES
1800 GET
1801 ACTIVE
1802 SMA CLA /IS IT ACTIVE?
1803 JMP INACT /NO
1804 ISZ COUNT /YES, UPDATE COUNT
1805 JMP ACTIV
1806 JMP I (TOOMANY /TOO MANY ACTIVE HANDLERS
1807
1808 BOOT2X,/ TAD I (SNAME /SEE IF SYS WAS SPECIFIED
1809 / DCA SAMSYS /0 IF DIDN'T SPECIFY NEW SYS
1810 / TAD SAMSYS
1811 / SZA CLA
1812 / JMP CHKDSK
1813 / CDF 10
1814 / TAD I (7760 /DIDN'T SPECIFY SYS SO USE CURRENT SYS
1815 / CDF 0
1816 / DCA I (SDCB
1817 / TAD (7607
1818 / DCA I (SRES
1819 /CHKDSK, TAD DSKG1 /WAS DSK SPECIFIED?
1820 / SZA CLA
1821 / JMP I (BOOT3 /YES, ALREADY SET UP
1822 / TAD I (SDCB
1823 / DCA I (SDCB+1
1824 / TAD (7607
1825 / DCA I (SRES+1
1826 / DCA I (SBUFF+1
1827 JMP I (BOOT3
1828 \fCHKRES, 0
1829 JMS I [GETPG /GET PAGE OF RESIDENCE
1830 DCA NEWPAG
1831 TAD NEWPAG
1832 TAD OLDPAG
1833 SNA CLA /SAME OR PREVIOUS PAGE?
1834 JMP I CHKRES /YES, SAME PAGE
1835 ISZ CHKRES
1836 GET /NO, A NEW PAGE, NEEDS NEW SLOT, ETC.
1837 CORES
1838 RTL /GET CORES BIT
1839 SPA CLA /IS THIS ALLOWED TO START A NEW GROUP?
1840 JMP I (TWOSYS /NO, IT MAY ONLY BE CORESIDENT WITH SOMETHING EARLIER
1841 TAD NEWPAG /YES
1842 CIA
1843 DCA OLDPAG /GOT NEW 'OLDPAG'
1844 JMP I CHKRES
1845 \fACTIV, JMS CHKRES
1846 JMP SAMPG
1847 GET
1848 SYSBIT
1849 RAL
1850 SPA CLA /IS IT A 'SYS' HANDLER?
1851 JMP I (SETSY /YES
1852 JMS I (GETSLOT /NO
1853 JMS I (SETSLT /SET BLOCK SLOT
1854 DCA I XR1
1855 TAD NEWPAG
1856 HNDLOC, DCA I XR4 /STORE AWAY ADDRESS OF HANDLER (OR 0 IF PREVIOUSLY USED)
1857 JMS I (GETDCB
1858 DCA I XR2 /SET DCB
1859 GET /HASH CODE NAME
1860 PRMNM2
1861 DCA TEMP /SAVE 2ND WORD
1862 GET
1863 PRMNM1
1864 TAD TEMP /ADD 2 WORDS
1865 DCA TMP1 /SAVE SUM
1866 TAD TEMP
1867 SNA CLA /WAS 2ND WORD 0?
1868 JMP NO4C /YES
1869 TAD TMP1 /NO, FORCE BIT 0 ON
1870 RAL
1871 STL RAR
1872 DCA TMP1
1873 NO4C, TAD TMP1 /TAKE CODED NAME
1874 DCA I XR3 /SET PERMANENT NAME TABLE
1875 GET
1876 CORES
1877 RTL /GET CORESIDENT BIT
1878 SMA CLA /IS IT RESIDENT?
1879 JMP NORE /NO
1880 GET /YES
1881 ENTPT /GET RELATIVE ENTRY POINT
1882 AND [177
1883 TAD [7600 /CORESIDENT ENTRY POINTS TO SYS MUST BE ON PAGE 7600
1884 NORE, DCA I XR5 /SET RESIDENCY TABLE
1885 INACT, GET /BUT MAYBE IT'S 'DSK'
1886 DSKBIT
1887 RTL
1888 SNL CLA /IS IT DSK?
1889 JMP SLTLUP /NO, IT'S TO BE IGNORED
1890 JMS I (SLOTDSK /YES ASSIGN 'DSK''S LOCATION SLOT
1891 GET /GET RID OF DSK BIT
1892 DSKBIT
1893 RTL
1894 CLL RTR
1895 PUT
1896 DSKBIT
1897 JMP SLTLUP /REITERATE
1898 \fSAMPG, TAD SLOT /ALREADY HAVE SLOT
1899 JMS I (SETSLT
1900 DCA I XR1
1901 JMP HNDLOC
1902
1903 BADARG, JMS I [PRWD
1904 TEXT /?ARG/
1905 JMP I [CONFIG
1906 PAGE
1907 \f/ STEPS IN BOOTSTRAPPING:
1908
1909 /1. ASSIGN DSK, IF SPECIFIED, MAKE SURE NFS [BOOT2]
1910 /2. ASSIGN SLOTS [BOOT2A]
1911 /3. GIVE ERROR IF TOO MANY ACTIVE OR TOO MANY SLOTS [BOOT2A]
1912 /4. BUILD INTERNAL COPIES OF DCB, SLOT, NAME, RES [BOOT2A]
1913 /5. ALSO BUILD HANDLER ADDRESS TABLE, CONTAINS [BOOT2A]
1914 / HANDLER ADDRESS IF NOT PREVIOUSLY WRITTEN OUT
1915 /6. COMPARE DCB'S OF NEW AND OLD SYSTEM, IF DIFF, [BOOT3]
1916 / COPY SYSTEM OVER. LEAVE NEW SYSTEM HANDLER
1917 / IN CORE
1918 /7. ASK GUY ABOUT NEW DIRECTORY [BOOT4]
1919 /8. READ IN USR, UPDATE ITS TABLES, WRITE OUT USR [BOOTC]
1920 / NAME TABLE, DHIT (SLOT, 2-PAGE,ENTPT)
1921 /9. READ IN CURRENT PAGE 7600 IMAGES [BOOT5]
1922 / SET UP AS FOLLOWS:
1923 / PG7600/L: BOOT
1924 / PG7600/H: 07600 IMAGE
1925 / BLOK66/L: 17600 IMAGE
1926 / BLOK66/U: 27600 IMAGE
1927 / THIS IS ACCOMPLISHED VIA:
1928 / PG7600_0
1929 / BLOK66_66
1930 / IF OLD SYS WAS 1 PAGE, BLOK66/L_PG7600/L
1931 /10. MOVE DCB AND RESIDENCY TABLES INTO 17600 IMAGE [BOOT6]
1932 /11. MOVE BOOTSTRAP INTO PAGE 7600 IMAGES (2 PLACES) [BOOT7]
1933 /12. WRITE OUT HANDLERS [BOOT8]
1934 /13. ZERO DIRECTORY IF REQUESTED [BOOTD]
1935 /14. PUT SYS, DATA BREAK, CORE LIM IN 07600 IMAGE [BOOTE]
1936 /15. WRITE 7600 IMAGES BACK OUT ONTO TAPE [BOOTF]
1937 / IF NEW SYS IS 1-PAGE, PG7600/L_BLOK66/L
1938 / 0_PG7600
1939 / 66_BLOK66
1940 /16. READ BACK PAGE 7600 IMAGES. MOVE IN FIELD 1 STUFF
1941 / EXCEPT FOR CD AREA, RESTORE TODAY'S DATE,
1942 / BRANCH TO 7600
1943 \fGETSLOT,0
1944 ISZ SLOT /USE NEXT SLOT
1945 TAD SLOT
1946 TAD (-26
1947 SNA CLA
1948 JMP I (NOSLOT
1949 TAD SLOT
1950 JMP I GETSLOT
1951
1952 BOOT, ISZ I (RETSW /***?
1953 CLA IAC
1954 DCA I (BD /DISABLE 'BUILD' CMD
1955 /SEE IF ARGUMENT WAS GIVEN; TREAT IT AS BOOT DEVICE,
1956 /SAVE HANDLER ADDRESS (MUST BE AN ACTIVE HANDLER)
1957 JMS I (LOCSYS /IN CASE DSK=SYS
1958 / JMS I [GETNUM
1959 / NOP
1960 / TAD SIZE
1961 / DCA BOOTDV /CHECK THAT # IS GT 7600
1962 BOOT2, TAD DSKG1 /FIND OUT ABOUT 'DSK'
1963 SNA
1964 JMP GOTD /DSK=SYS
1965 DCA SAV1
1966 TAD DSKG2
1967 DCA SAV2
1968 TAD DSKP1
1969 DCA NAME1
1970 TAD DSKP2
1971 DCA NAME2
1972 JMS I [BIGNAM /FIND IT IN TABLES
1973 GOTD, GET
1974 DCB
1975 SMA CLA /IS IT FILE-STRUCTURED?
1976 JMP I (DSKBAD /NO
1977 GET /YES
1978 DSKBIT
1979 RTL
1980 STL RTR /TURN ON BIT 1
1981 PUT
1982 DSKBIT
1983 JMP I (BOOT2A
1984 \fGETDCB, 0
1985 GET
1986 PLATNUM
1987 JMS I [ROTL
1988 AND [7 /GET # OF PLATTERS
1989 SNA
1990 IAC /0 MEANS 1
1991 TAD [-1 /SUBTRACT 1
1992 CLL RTL
1993 RAL /TIMES 10
1994 DCA TMP1
1995 GET
1996 DCB
1997 AND [7770 /MASK OFF USEFUL INFO
1998 TAD TMP1
1999 JMP I GETDCB
2000 \fSLOTDSK,0
2001 JMS I (CHKRES
2002 JMP SMPG
2003 TAD NEWPAG
2004 DCA I (SBUFF+1
2005 JMS GETSLOT
2006 JMS SETSLT
2007 B, DCA I (SHND+1
2008 JMS GETDCB
2009 DCA I (SDCB+1
2010 TAD (5723 /'DSK' HASHED
2011 DCA I (SNAME+1
2012 GET
2013 SYSBIT
2014 RTL /SYSBIT TO L, CORES BIT TO AC0
2015 SNL SMA CLA /IS IT EITHER SYS OR CORESIDENT WITH SYS?
2016 JMP NORE2 /NO, SO IT'S NOT CORE-RESIDENT
2017 GET /YES, RESIDENT AT ALL TIMES IN 07600
2018 ENTPT
2019 AND [177
2020 TAD [7600
2021 NORE2, DCA I (SRES+1
2022 JMP I SLOTDSK
2023
2024 SETSY, TAD NEWPAG
2025 DCA I (SBUFF
2026 / JMS SETSLT /NO BLOCK SLOT
2027 DCA I (SHND
2028 JMS GETDCB
2029 DCA I (SDCB /SET DCB
2030 TAD I (SNAME
2031 SZA CLA
2032 JMP I (TWOSYS
2033 TAD (4631 /HASH CODING FOR 'SYS'
2034 DCA I (SNAME
2035 /CHECK THAT NAME IS 'SYS'
2036 TAD [7607
2037 DCA I (SRES
2038 /CHECK REL ENTRY PT IS 7
2039 JMP I (INACT
2040
2041 SMPG, TAD SLOT
2042 JMS SETSLT
2043 JMP B
2044 \fSETSLT, 0
2045 SNA
2046 JMP .+3
2047 TAD [-15
2048 JMS I [ROTR
2049 DCA TMP1
2050 GET /
2051 CORES /
2052 RTL /
2053 SPA SZL CLA /
2054 JMP I SETSLT /SYS &CORES HANDLERS GET 0 ENTRY (UNFORTUNATELY)
2055 GET
2056 ENTPT
2057 AND (4177
2058 TAD TMP1
2059 JMP I SETSLT
2060 PAGE
2061 \f USRBLK=13 /BLOCK OF USR ON SYSTEM DEVICE
2062 USRNPT=36 /POINTS TO USR PTR TO PERMANENT DEVICE NAME TABLE
2063 USRHPT=37 /POINTS TO USR PTR TO DEVICE HANDLER INFORMATION TABLE
2064
2065 BOOTC, TAD [200 /READ FIRST BLOCK OF USR
2066 JMS I [SYS
2067 BUFFER /INTO BUFFER
2068 USRBLK
2069 TAD I [BUFFER+USRNPT /GET POINTER TO NAME TABLE
2070 TAD [BUFFER-400 /ADD IN OFFSET FOR RELOCATION
2071 DCA T1AD /ASSUME BOTH TABLES OCCUR IN THE SECOND
2072 TAD I [BUFFER+USRHPT /BLOCK OF THE USR
2073 TAD [BUFFER-400
2074 DCA T2AD /GET POINTER TO DHIT
2075 TAD [400 /READ BLOCKS 2 AND 3 OF USR
2076 JMS I [SYS /INTO BUFFER,BINARY
2077 BUFFER
2078 USRBLK+1
2079 TAD [-17
2080 JMS I [MOVE /MOVE IN PERMANENT DEVICE NAME TABLE
2081 CDF 0
2082 SNAME
2083 CDF 0
2084 T1AD, HLT
2085 / TAD SAMSYS /WAS SYS SPECIFIED?
2086 / SZA CLA
2087 / JMP CHKD2 /YES
2088 / TAD I T2AD /NO, USE CURRENT SYS INFO
2089 / DCA I (SHND
2090 /CHKD2, TAD DSKG1
2091 / SZA CLA /WAS DSK SPECIFIED?
2092 / JMP MVSHND /YES
2093 / TAD I T2AD /MAKE SAME AS SYS
2094 / DCA I (SHND+1
2095 MVSHND, TAD [-17 /NOW PUT IN SLOT WORDS (DHIT)
2096 JMS I [MOVE
2097 CDF 0
2098 SHND
2099 CDF 0
2100 TMP2,
2101 T2AD, HLT
2102 TAD [4400 /RE-WRITE USR
2103 JMS I [SYS
2104 L5400, BUFFER
2105 USRBLK+1
2106 JMP I [BOOT5
2107 IFNZRO BUFFER-5400 <ERRRR,XX>
2108 \fBOOTD, TAD DRECT /WANT NEW DIRECTORY?
2109 SNACLA, SNA CLA
2110 JMP BOOTE
2111 TAD L5400 /YEP. WRITE ONE
2112 JMS I [SYS
2113 DPROPR
2114 1
2115 BOOTE, TAD NEWCOR
2116 CLL RAL
2117 RTL
2118 TAD SAVHID /V3D SET NEW H.O. DATE WORD
2119 DCA I [7777 /SET UP NEW CORE LIMIT
2120 TAD SYSLOC /MOVE IN FRESH COPY OF SYS HANDLER
2121 TAD [7
2122 DCA SYSL2
2123 TAD [7607-7743-1
2124 JMS I [MOVE
2125 CDF 10
2126 SYSL2, HLT
2127 CDF 0
2128 7607
2129 TAD [-200 /PUT SYS HANDLER INTO REC 0 BUFF. ???
2130 JMS I [MOVE
2131 CDF 0
2132 7600
2133 CDF 0
2134 PG7600+200 /RESIDENT F0 CODE
2135 JMS I (WRITCC /WRITE CCB AND DATA BREAK FILLERS
2136 TAD [200
2137 TAD SYSLOC /MOVE IN COPY OF 27600 AGAIN
2138 DCA SYSL3
2139 TAD [-200
2140 JMS I [MOVE
2141 CDF 10
2142 SYSL3, HLT
2143 CDF 10
2144 BLOK66+200
2145 JMP I (BOOTF
2146
2147 DRECT, -1 /1 MEANS WRITE A ZERO DIRECTORY
2148 /0 MEANS DON'T TOUCH DIRECTORY
2149 /-1 MEANS ASK GUY FOR OPTION
2150 \f/SEE IF NEW SYSTEM HAS SAME DCB AS CURRENT SYSTEM
2151 /THIS MAY WELL CAUSE EXTRA I/O WHEN GOING FROM RF08=K TO RF08=M
2152
2153 BOOT3, CDF 10
2154 TAD I (DATEWD
2155 DCA SAVDAT /SAVE TODAY'S DATE FOR FUTURE REFERENCE
2156 TAD I (DCBTBL /GET DCB OF CURRENT SYSTEM
2157 CDF 0
2158 AND [7770
2159 DCA TMP2
2160 JMS I (PATCH /V3D
2161 TAD SAVLOC /DON'T COPY IF DID 'BUILD'
2162 SNA CLA /WAS THE 'BU' COMMAND USED?
2163 TAD [-10 /NO, USE 'SZA CLA'
2164 TAD SNACLA /YES, USE 'SNA CLA'
2165 DCA I (BOOTQ
2166 JMS SETUPSYS
2167 TAD SYSDCB
2168 CIA
2169 TAD TMP2
2170 JMP I (BOOTQ
2171
2172 /NOTE: THIS PROCEDURE DOESN'T COPY BOOTSTRAP IF NEW DEV=OLD DEV.
2173 / THEREFORE YOU CAN'T CHANGE BOOTSTRAPS
2174 / CHECK ON AFFECT FOR TD8E/ROM INTERACTION
2175 \fSETUPSYS,0
2176 DCA SAVLOC
2177 TAD SAVLOC
2178 DCA I (SAVLC
2179 JMS I (LOCSYS
2180 JMS I [GETPG /GET PAGE OF SYS HANDLER
2181 DCA SYSLOC /PAGE OF START OF NEW SYSTEM HANDLER
2182 JMS I (GETDCB
2183 DCA SYSDCB
2184 JMS I (GETLEN
2185 GET
2186 TWOPAG
2187 DCA I (SYSSIZ
2188 TAD I (SYSSIZ
2189 SMA CLA /IS IT 1- OR 2-PAGES?
2190 JMP ONEPG /GUESS WHAT THIS MEANS [HINT LOOK AT LABEL]
2191 STA
2192 TAD I (AMTCOR
2193 SNA CLA
2194 JMP I (NOTNUF /WE CAN'T RUN IN 8 K
2195 ONEPG, TAD [-400
2196 JMS I [MOVE
2197 CDF 10
2198 SYSLOC, HLT /MOVE SYSTEM HANDLER
2199 CDF 10
2200 SAVLOC, 0 /TO 10000-10377
2201 JMP I SETUPSYS
2202 PAGE
2203 \f/ASSUMES NEW PROPOSED SYSTEM HANDLER IS IN 10000-10377
2204
2205 /CAN'T DESTROY OS/8, IE. CAN'T USE PG 0 TEMPS
2206
2207 SYSWP, 0 /ROUTINE TO MOVE SYS HANDLER AROUND
2208 ISZ SWAPER /DIDDLE SWAP INDICATOR
2209 CLA CMA /-1 MEANS NEW HANDLER IS IN
2210 DCA SWAPER
2211 STA
2212 TAD AMTCOR
2213 SNA CLA /DO WE HAVE 8K?
2214 JMP SWAPLW /YES, DON'T SWAP WITH FIELD 2
2215 TAD L7600 /NO, CAN'T HURT TO SWAP FIELD 2
2216 DCA OUT
2217 TAD SAVLC
2218 TAD P200
2219 DCA IN
2220 TAD (4-200
2221 DCA STEMP /SWAP ENTIRE PAGE (EXCEPT LAST 4 LOCATIONS)
2222 SWAP3, CDF 10 /SWAP 27600 & 2ND PAGE OF HANDLER
2223 TAD I IN
2224 DCA SYSQ
2225 CDF 20
2226 TAD I OUT
2227 CDF 10
2228 DCA I IN
2229 TAD SYSQ
2230 CDF 20
2231 DCA I OUT
2232 ISZ IN
2233 L7400, 7400 /NOP
2234 ISZ OUT
2235 L7600, 7600
2236 ISZ STEMP
2237 JMP SWAP3
2238 SWAPLW, CDF 0
2239 TAD (7607
2240 DCA OUT /7607 ALWAYS TARGET DESTINATION
2241 TAD SAVLC
2242 TAD (7
2243 DCA IN
2244 TAD (7607-7743-1/ONLY 7607-7743 GETS MOVED
2245 DCA STEMP
2246 SWAP2, CDF 10
2247 TAD I IN
2248 DCA SYSQ /TEMP STORE
2249 CDF 0
2250 TAD I OUT
2251 CDF 10
2252 DCA I IN
2253 TAD SYSQ
2254 CDF 0
2255 DCA I OUT
2256 ISZ IN
2257 ISZ OUT
2258 ISZ STEMP
2259 JMP SWAP2
2260 DCA I (SOFSET /V3C
2261 JMP I SYSWP
2262
2263 AMTCOR, 1 /HIGHEST CORE BANK
2264 SAVLC, 0 /MUST BE ABOVE 3577
2265 \fCHTMP,
2266 IN, 0 /POINTS TO HANDLER AREA AT ONE NAMED SYS
2267 OUT, 0 /POINTS TO 7607 HANDLER
2268 SWAPER, 0 /-1 MEANS NEW HANDLER IN
2269 \f/MUST BE ABOVE OS/8, NO PAGE 0 LITERALS
2270
2271 STEMP,
2272 ICHAR, 0
2273 JMS I (CTCTST
2274 ISZ JMPGET /POINT TO CORRECT CHAR
2275 ISZ CHCNT /NEED WE READ?
2276 JMPX, JMP JMPGET /NOT YET
2277 TAD REOF /YES. DID LAST YIELD EOF?
2278 SZA CLA
2279 JMP I (BADINP /SOMETHING IS WRONG.
2280 RDIN, JMS I DVICE
2281 P200, 0200 /READ INTO FIELD 0
2282 BINBUF, BINARY
2283 RECNO, 0
2284 JMP RERROR /READ ERROR
2285 RECNO2, ISZ RECNO /POINT TO NEXT RECORD
2286 TAD (-601
2287 DCA CHCNT /NEW CHARACTER COUNT
2288 TAD BINBUF
2289 DCA CHPTR
2290 TAD JMPX
2291 DCA JMPGET /RESET JUMP SWITCH
2292 JMP ICHAR+1
2293 SYSQ,
2294 JMPGET, JMP . /IF WE GET CAUGHT HERE, WE KNOW IT
2295 JMP CHAR1 /ASSEMBLE FIRST CHAR
2296 JMP CHAR2 /SECOND CHAR
2297 TAD JMPX /THIRD CHAR HERE
2298 DCA JMPGET /RESET SWITCH
2299 TAD I CHPTR
2300 AND L7400
2301 CLL RTR
2302 RTR
2303 TAD CHTMP /ADD IN THE LAST TEMP STORE
2304 RTR
2305 RTR
2306 ISZ CHPTR /TO NEXT CHAR
2307 JMP GCHCOM
2308 \fCHAR2, TAD I CHPTR
2309 AND L7400
2310 DCA CHTMP /SAVE FOR THIRD CHAR
2311 ISZ CHPTR
2312 CHAR1, TAD I CHPTR
2313 GCHCOM, AND (377
2314 ISZ ICHAR /PASS UP ERROR RET
2315 JMP I ICHAR
2316 RERROR, SPA CLA /FATAL, OR EOF?
2317 JMP IOERR /FATAL
2318 ISZ REOF /END OF FILE
2319 JMP RECNO2 /BACK TO MAINSTREAM
2320 IOERR, JMS I (PRWD
2321 TEXT \?I/O\
2322 JMP I ICHAR
2323 REOF, 0
2324 CHCNT, 0
2325 CHPTR, 0
2326 DVICE, 0
2327 PAGE
2328 \f/BLOCK 0 OF DEVICE CONTAINS INITIAL IMAGE
2329 /OF 17600 FOLLOWED BY 07600
2330
2331 /17600-17646 CD AREA INITIALLY CONTAINS BOOTSTRAP
2332 /17647-17665 RESIDENCY TABLE
2333 /17666 DATE
2334 /17667-17677 PART OF OS/8 KBM
2335 /17700-17740 PART OF OS/8 USR
2336 /17741-17757 USER DEVICE NAME TABLE/ODT
2337 /17760-17776 CONTROL WORD TABLE (DCB)
2338 /17777 UNUSED
2339
2340 /07600-07606 PART OF OS/8 CODE
2341 /07607-07743 SYSTEM HANDLER
2342 /07744-07745 STARTING ADDRESS
2343 /07746 JOB STATUS WORD (JSW)
2344 /07747 MUST BE 0 (SOFSET)
2345 /07750-07755 DATA BREAK LOCATIONS RESERVED FOR HARDWARE
2346 /07756-07775 KBM AND ODT
2347 /07776 MUST BE 0 (SBLOCK)
2348 /07777 SOFTWARE CORE SIZE, BATCH FLAGS
2349
2350 /IF SYSTEM HANDLER IS TWO PAGES LONG, THEN WE HAVE INSTEAD:
2351
2352 /BLOCK 66 (LOWER) CONTAINS 17600 IMAGE
2353 /BLOCK 66 (UPPER) CONTAINS 27600 IMAGE (MUST END WITH 4 ZERO'S)
2354 /BLOCK 0 (LOWER) CONTAINS BOOTSTRAP
2355 /BLOCK 0 (UPPER) CONTAINS 07600 IMAGE
2356 \fDSCADV, 0 /ADVANCE TO NEXT DESCRIPTOR
2357 /RETURN 2 MEANS NO MORE
2358 /RETURN 1 MEANS NOW AT BOOTSTRAP BLOCK
2359 /RETURN 3 OTHERWISE
2360 TAD DSCPTR
2361 TAD [HDRSIZ
2362 DCA DSCPTR
2363 JMS I (SKPCRD /SKIP A POSSIBLE GROUP COUNT
2364 TAD I DSCPTR
2365 CLL
2366 TAD [200
2367 SZL CLA
2368 JMP I DSCADV /TAKE RETURN1 UPON REACHING BOOTSTRAP RECORD
2369 ISZ DSCADV
2370 TAD I DSCPTR
2371 SZA CLA
2372 ISZ DSCADV /TAKE RETURN 2 IF ADVANCED TO END
2373 JMP I DSCADV
2374
2375 /RETURN 1 MEANS NO MORE DESCRIPTORS
2376 BOTADV, 0
2377 TAD I DSCPTR
2378 CIA
2379 IAC /COUNT IS ONE MORE
2380 TAD DSCPTR
2381 DCA DSCPTR /POINT TO BEGIN OF NEXT DESCRIPTOR
2382 JMS I (SKPCRD
2383 TAD I DSCPTR
2384 CLL
2385 TAD [200
2386 SZL CLA
2387 JMP BOTADV+1 /WIERD CASE OF CONSECUTIVE BOOTSTRAPS
2388 TAD I DSCPTR
2389 SZA CLA
2390 ISZ BOTADV /TAKE RETURN1 IF ADVANCED TO END
2391 JMP I BOTADV
2392
2393 /WIERD CASES CAN OCCUR IF GUY DELETES ALL ENTRY POINTS IN A GROUP SEPARATELY
2394
2395 /DESCRIPTOR ENTRIES:
2396
2397 /FIRST WORD:
2398 / 0 MEANS END OF TABLE
2399 / -1 TO -20 MEANS GROUP COUNT (NOT NECESSARILY ACCURATE)
2400 / -21 TO -400 APPROX MEANS BOOTSTRAP RECORD COUNT
2401 / OTHER MEANS DESCRIPTOR
2402 \fSYSCPY, 0 /COPY OS/8 SYSTEM
2403 STA
2404 TAD I (AMTCOR
2405 SZA CLA
2406 TAD [10 /GT 8K
2407 DCA CORBIT
2408 TAD CORBIT
2409 SZA CLA
2410 JMP COP2
2411 JMS I [SYSWP /SWAP IN NEW SYS HANDLER
2412 TAD (7410
2413 JMS I [SYS /SAVE PART OF BUILD TO MAKE A BIG BUFFER
2414 400 /SAVE 400-
2415 27 /SAVE IN BLOCK 27
2416 JMS I [SYSWP /GET BACK ORIGINAL HANDLER
2417 COP2, TAD [4210
2418 JMS COPY /COPY BLOCK 0
2419 0
2420 TAD (5610
2421 JMS COPY /COPY 7-15
2422 7
2423 TAD [4210
2424 JMS COPY /COPY 26
2425 26
2426 TAD (7410
2427 JMS COPY /COPY 51-66
2428 51
2429 TAD [4210
2430 JMS COPY /COPY 67
2431 67
2432 TAD CORBIT
2433 SZA CLA
2434 JMP COP3
2435 JMS I [SYSWP /GET BACK NEW HANDLER FOR A MOMENT
2436 TAD (3410 /RESTORE CORE WE SAVED
2437 JMS I [SYS
2438 400
2439 27
2440 JMS I [SYSWP /RESTORE ORIGINAL SYS HANDLER
2441 COP3, JMP I SYSCPY
2442 \fCOPY, 0
2443 TAD CORBIT
2444 DCA TMP1
2445 TAD I COPY
2446 DCA COPREC /ARG 1 CONTAINS FIRST BLOCK TO COPY
2447 TAD COPREC
2448 DCA CPREC2 /MAKE TWO COPIES
2449 STL RAR /CONVERT 'WRITE' TO READ
2450 TAD TMP1
2451 JMS I [SYS /READ FROM ORIGINAL DEVICE
2452 400
2453 COPREC, HLT
2454 JMS I [SYSWP
2455 TAD TMP1
2456 JMS I [SYS /WRITE ON NEW DEVICE
2457 400
2458 CPREC2, HLT
2459 JMS I [SYSWP /LEAVE WITH ORIGINAL SYSTEM HANDLER STILL IN SYSTEM
2460 JMP I COPY /FALL THROUGH RECORD NUMBER
2461 \fCORBIT,
2462 GETLEN, 0
2463 GET /GET LENGTH OF DEVICE
2464 PLATNUM
2465 JMS I [ROTL /GET NUMBER OF PLATTERS
2466 AND [7
2467 SNA
2468 IAC /0 MEANS 1
2469 CIA
2470 DCA COUNT
2471 GET
2472 DEVSIZ
2473 DCA TMP1
2474 SIZLUP, TAD TMP1
2475 SNA
2476 STA /4096 BECOMES 4095
2477 ISZ COUNT
2478 JMP SIZLUP
2479 CIA
2480 TAD [70 /LEAVE ROOM FOR OS/8
2481 DCA DLENGTH
2482 JMP I GETLEN
2483
2484 DPROPR, -1 /INITIAL EMPTY DIRECTORY
2485 MFREE
2486 0
2487 0
2488 -1
2489 0 /1 EMPTY FILE
2490 DLENGT, 0
2491 PAGE
2492 \f/WANT TO COPY
2493
2494 /SYS 0
2495 /KBM 7-12
2496 /USR 13-15
2497 /ENTER 26
2498 /CD 51-53
2499 /SAVE,DATE 54-55
2500 /ERR 56
2501 /CHAIN 57
2502 /ODT 60-63
2503 /CCL 64,65,67
2504 /SYS 66
2505
2506 /EXTRA (DON'T WANT TO COPY):
2507
2508 /HANDLERS 16-25
2509 /SCRATCH 27-50
2510
2511 /NEW ALGORITHM:
2512
2513 /SET FIELD 2 IF 12K OR MORE AND SKIP *'ED ITEMS
2514
2515 /1. MOVE NEW SYS HANDLER TO 0,200
2516 /2.* SAVE 34 PAGES STARTING AT 10400 IN BLOCK 27 OF NEW DEVICE
2517 /3. COPY BLOCKS 7-15
2518 /4. COPY BLOCK 26
2519 /5. COPY BLOCKS 51-66
2520 /6. COPY BLOCK 67
2521 /7.* RESTORE 34 PAGES
2522 \f/THE FOLLOWING ROUTINES AND VARIABLES MUST BE ABOVE THE LOCATIONS
2523 /IN WHICH OS/8 AND CD LOAD INTO, BECAUSE THEY ARE CALLED BY LDABS.
2524 /FURTHERMORE, NONE OF THESE ROUTINES MAY USE PAGE 0 LITERALS
2525 /OR MAY USE ANY PAGE 0 TEMPORARIES, EXCEPT THAT SOME MAY USE
2526 /PAGE ZERO TEMPORARIES IF THE STORE INTO THEM FIRST
2527 /(EXCEPT THOSE COMMENTED OTHERWISE, WHICH MUST PRESERVE
2528 /THE NEW PAGE 0 AT ALL COSTS, UNTIL IT IS WRITTEN OUT
2529
2530 /LDABS
2531 /ICHAR
2532 /BADINP
2533 /OVER
2534 /ASSEMB
2535 /CTCTST
2536 /PRWD
2537 /CTRLC
2538 /OVROUT
2539 /ROTL
2540 /PRINTE
2541 /TTYOUT
2542 /ROTR
2543 /PWORD
2544 /ECHOFL
2545 /LINEUP
2546 /CRLF
2547 /PRNT
2548 /RUBFLG
2549 /MOVE
2550 /SYSWP
2551 /AMTCOR
2552 \f SYDCB=7760 /LOCATION OF SYS,DSK DCB WORDS
2553
2554 BOOT5, JMS I (RECZRO
2555 BOOT6, TAD [-17
2556 JMS I [MOVE /PUT RESIDENT FIELD 1 TABLES INTO
2557 CDF 0
2558 SDCB /FIXED SPOTS
2559 CDF 10
2560 BLOK66+160
2561 TAD [-17
2562 JMS I [MOVE
2563 CDF 0
2564 SRES
2565 CDF 10
2566 BLOK66+47 /COULD SET USER DEVICE NAMES HERE IF DESIRED
2567 BOOT7, JMS I (LOCSYS
2568 / TAD SAMSYS
2569 / SZA CLA /SAME SYSTEM?
2570 / JMP BOOT8 /YES
2571 BLOOK, ADVDSC /SEARCH FOR BOOTSTRAP
2572 JMP FNDBOT /FOUND BOOTSTRAP RECORD AMONGST DESCRIPTORS
2573 HLT /IT WASN'T THERE!
2574 JMP BLOOK /KEEP LOOKING
2575
2576 FNDBOT, TAD DSCPTR
2577 IAC /POINT TO BOOTSTRAP
2578 DCA FROMBO
2579 TAD I DSCPTR /LENGTH OF BOOTSTRAP
2580 /CHECK THAT'S IT'S LE 47 LOCS IF 1-PAGE SYSTEM
2581 JMS I [MOVE
2582 CDF 0
2583 FROMBO, HLT
2584 CDF 0
2585 PG7600
2586 TAD [-47 /MOVE FIRST 47 LOCS INTO CD AREA IN 17600 IMAGE
2587 JMS I [MOVE
2588 CDF 0
2589 PG7600
2590 CDF 10
2591 BLOK66
2592 BOOT8, TAD (-16
2593 DCA COUNT
2594 TAD (SBUFF
2595 DCA XR1
2596 TAD (SHND
2597 DCA XR2
2598 DVLOOP, TAD I XR1
2599 SNA
2600 JMP NOHN
2601 DCA DVBUF /LOCATION OF HANDLER
2602 TAD I XR2
2603 JMS I [ROTL
2604 AND [17
2605 SNA
2606 JMP CN /NO BLOCK SLOT
2607 TAD L15 /CONVERT TO ACTUAL BLOCK #
2608 DCA DVREC
2609 TAD [4210
2610 JMS I [SYS
2611 DVBUF, HLT
2612 DVREC, HLT
2613 CN, ISZ COUNT
2614 JMP DVLOOP
2615 JMP I (BOOTD
2616 NOHN, ISZ XR2
2617 JMP CN
2618
2619 SYSSIZ, 0 /MINUS MEANS 2-PAGE SYS HANDLER
2620 \fCTRLC, KCC /CLEAR ^C FLAG
2621 TAD I (SWAPER /DO WE HAVE TO SWITCH?
2622 SZA CLA
2623 JMS I (SYSWP /YES. INSERT OLD HANDLER
2624 JMP I (7600
2625
2626 KORE, JMS I [GETNUM
2627 L15, 15 /NOTHING MEANS 0
2628 TAD SIZE
2629 AND [7770
2630 SZA CLA
2631 JMP I [BADARG /MUST BE BETWEEN 0 AND 7
2632 JMS I (RELCOR /FIND REAL AMOUNT OF CORE
2633 CMA
2634 TAD SIZE
2635 SMA CLA
2636 JMP I (NOTNUF /MUST BE .LE. REAL AMT OF CORE
2637 TAD CHAR
2638 SZA CLA
2639 JMP I [SYNTAX
2640 TAD SIZE
2641 DCA NEWCOR
2642 JMP I [CONFIG
2643 \f/ IF NEW SYS IS 1-PAGE, PG7600/L_BLOK66/L
2644 / 0_PG7600
2645 / 66_BLOK66
2646
2647 BOOTF, TAD SYSSIZ
2648 SMA CLA /IS NEW SYS TWO PAGES?
2649 TAD [-200 /NO
2650 JMS I [MOVE /YES, NULL MOVE
2651 CDF 10
2652 BLOK66
2653 CDF 0
2654 PG7600
2655 TAD [4200
2656 JMS I [SYS
2657 PG7600
2658 0
2659 TAD [4210
2660 JMS I [SYS
2661 BLOK66
2662 66
2663 BOOTG, NOP
2664 / JMS I (RECZRO /SIMULATE BOOTSTRAP
2665 TAD [-131 /MOVE UP FIELD 1 CODE
2666 JMS I [MOVE
2667 CDF 10
2668 BLOK66+47
2669 CDF 10
2670 7600+47
2671 TAD SAVDAT
2672 CDF 10
2673 DCA I (DATEWD
2674 CDF 0
2675 JMS I [PRWD
2676 TEXT /SYS BUILT/
2677 JMP I [7600
2678 PAGE
2679 \f/MOVE MOVES CORE AROUND (CALLABLE FROM ANY FIELD)
2680
2681 / TAD (-# OF LOCS TO MOVE
2682 / JMS MOVE
2683 / CDF FROM FIELD
2684 / FROM BUFFER LOCATION START
2685 / CDF 'TO' FILED
2686 / TO BUFFER
2687
2688 /MUSTN'T DESTROY OS/8 LOCS, NO PAGE 0 TEMPS!
2689
2690 MOVE, 0
2691 DCA MVCT
2692 RDF
2693 TAD (CIF CDF
2694 DCA MOVRET
2695 TAD I MOVE /GET CDF FROM-FLD
2696 DCA MVCDF2
2697 ISZ MOVE /POINT TO FROM-BUF
2698 TAD I MOVE /GET LOC TO MOVE
2699 DCA MVTM1
2700 ISZ MOVE /POINT TO TO-CDF
2701 TAD I MOVE
2702 DCA MVDF /GET CDF TO FIELD OF DESTINATION
2703 ISZ MOVE /POINT TO TARGET AREA
2704 TAD I MOVE
2705 DCA MVTM2
2706 ISZ MOVE /POINT TO RETURN
2707 TAD MVCT
2708 SNA CLA
2709 JMP MOVRET /NOTHING TO MOVE
2710 MVCDF2, CDF 0 /GETS ALTERED TO PICK UP F1
2711 TAD I MVTM1
2712 MVDF, HLT
2713 DCA I MVTM2
2714 ISZ MVTM1 /BUMP POINTERS TO AREAS
2715 ISZ MVTM2
2716 MV20, 20
2717 ISZ MVCT
2718 JMP MVCDF2
2719 MOVRET, HLT /RETURN TO CALLING FIELD
2720 JMP I MOVE
2721
2722 CTCTST, 0
2723 TAD MV7600 /ALLOW FOR PARITY
2724 KRS
2725 TAD (-7603
2726 SNA CLA
2727 KSF
2728 JMP I CTCTST
2729 JMP I (CTRLC
2730 \fMVCT,
2731 IOPEN, 0 /PREPARE TO READ INPUT
2732 CLA CMA
2733 DCA I (CHCNT
2734 TAD I (JMPX /RESTORE SWITCH
2735 DCA I (JMPGET
2736 TAD I (FILPTR /RESULTS OF LOOKUP
2737 DCA I (RECNO
2738 DCA I (REOF
2739 TAD (CDF 0
2740 DCA I (XFIELD /SETUP LDABS FOR FIELD 0
2741 JMP I IOPEN
2742 \fBOOT4, TAD I (DRECT
2743 SMA CLA
2744 JMP I (BOOTC /HE'S SPECIFIED ABOUT DIRECTORY ZERO
2745 JMS I [PRWD /YES, NO NEED TO COPY SYSTEM
2746 TEXT /WRITE ZERO DIRECT?/
2747 TAD [-10 /DON'T WANT TO DESTROY PRECIOUS TABLES
2748 JMS I [GTEXT /GET REPLY
2749 JMP BOOT4
2750 JMS I [GNAME
2751 TAD NAME1
2752 AND [7700
2753 TAD (-3100
2754 SNA CLA
2755 CLA IAC /Y
2756 DCA I (DRECT /NO; COULD HAVE SAVED LOCATION BUT I FEEL SAFER THIS WAY
2757 JMP I (BOOTC
2758
2759 MVTM1,
2760 ROTL, 0
2761 CLL RTL
2762 RTL
2763 RTL
2764 JMP I ROTL
2765
2766 MVTM2,
2767 ROTR, 0
2768 CLL RTR
2769 RTR
2770 RTR
2771 JMP I ROTR
2772 \fTTYOUT, 0 /YOU GUESSED IT
2773 DCA TM
2774 TAD ECHOFL
2775 SZA CLA /ARE WE ECHOING?
2776 JMP I TTYOUT /NO
2777 TAD TM /YES
2778 TLS
2779 TSF
2780 JMP .-1
2781 MV7600, 7600 /CLA
2782 JMS I (CTCTST /TEST FOR ^C.
2783 JMP I TTYOUT
2784
2785 TM,
2786 SKPCRD, 0
2787 TAD I DSCPTR
2788 CLL
2789 TAD MV20 /A GROUP COUNT MUST BE IN THE RANGE -1 TO -20
2790 SNL CLA
2791 JMP I SKPCRD
2792 ISZ DSCPTR /IT'S A DARN GROUP COUNT, GO PAST IT
2793 JMP SKPCRD+1 /WIERD CASE OF CONSECUTIVE GROUP COUNTS
2794
2795 ECHOFL, 0 /1 MEANS NOT ECHOING, SAW ^O
2796 \fPATCH, 0
2797 TAD I [7777 /V3D
2798 AND L600
2799 DCA SAVHID /SAVE HIGH ORDER DATE BITS
2800 JMP I PATCH
2801 PAGE
2802 \fPRNAME, 0 /ROUTINE TO PRINT NAME1-NAME4
2803 TAD (NAME1
2804 DCA TEMP
2805 CLL STA RTL /-3
2806 DCA COUNT
2807 PRNM2, TAD I TEMP
2808 JMS PRINTE /TYPE OUT CHARS
2809 ISZ TEMP
2810 ISZ COUNT /EXHAUSTED ALL?
2811 JMP PRNM2
2812 TAD I TEMP
2813 SNA CLA
2814 JMP I PRNAME /NO . IF NO EXTENSION
2815 TAD (". /PRINT '.'
2816 JMS I (TTYOUT
2817 TAD I TEMP
2818 JMS PRINTE
2819 JMP I PRNAME
2820
2821 PRINTE, 0
2822 DCA CHTMP2
2823 TAD CHTMP2 /EXTRACT LEFT HAND SIDE
2824 JMS I (ROTR
2825 JMS PWORD
2826 TAD CHTMP2
2827 JMS PWORD
2828 JMP I PRINTE
2829 \fPWORD, 0
2830 AND (77
2831 SNA /IF NULL, GET OUT
2832 JMP NULL
2833 DCA PRTM
2834 TAD (200
2835 KRS
2836 TAD (-217 /^O
2837 SNA CLA /STOP ECHOING?
2838 KSF /MAYBE
2839 SKP /NO
2840 JMP CTO /YES
2841 TAD PRTM
2842 TAD (240
2843 AND (77
2844 PRSPAC, TAD (240
2845 JMS I (TTYOUT
2846 JMP I PWORD
2847 NULL, TAD LINEUP
2848 SNA CLA /PRINT SPACE?
2849 JMP I PRINTE /NO
2850 JMP PRSPAC /YES
2851
2852 PRWD, 0
2853 CLA
2854 PRWD2, TAD I PRWD
2855 JMS PRINTE
2856 TAD I PRWD
2857 ISZ PRWD
2858 AND (77
2859 SZA CLA
2860 JMP PRWD2
2861 JMP I PRWD /LEAVE IF LAST WORD ENDED WITH 00
2862
2863 CHTMP2, 0
2864
2865 CTO, KCC
2866 TAD ("^
2867 JMS I (TTYOUT
2868 TAD ("O
2869 JMS I (TTYOUT
2870 JMS CRLF
2871 CLA IAC
2872 DCA I (ECHOFL
2873 JMP I PWORD
2874
2875 LINEUP, 0 /NON-ZERO MEANS PRINT NULLS AS SPACES
2876 \fOVER, JMS ASSEMB /EXTENSION OF LDABS.
2877 CIA
2878 TAD I LCKSUM /CHECKSUM OK?
2879 SZA CLA
2880 JMP BADINP /SOORY ABOUT THAT
2881 CLA IAC
2882 JMP OVROUT /SKIP ERROR EXIT
2883 BADINP, JMS PRWD
2884 TEXT /?BAD INPUT/
2885 JMS CRLF
2886 OVROUT, TAD I (LDABS
2887 DCA OTEMP
2888 JMP I OTEMP
2889 OTEMP,
2890 ASSEMB, 0 /ASSEMBLE TWO 6 BIT WORDS
2891 TAD I LWD1
2892 JMS I PROTL /INTO A SINGLE 12 BIT WORD
2893 TAD I LWD2
2894 JMP I ASSEMB
2895
2896 LCKSUM, CKSUM
2897 LWD1, WD1
2898 LWD2, WD2
2899 PROTL, ROTL
2900 PRTM, 0
2901 \fCRLF, 0
2902 TAD (215
2903 DCA NAME1
2904 JMS PRNT
2905 TAD (212
2906 JMS I (TTYOUT
2907 JMP I CRLF
2908
2909 PRNT, 0 /CHARACTER PRINT ROUTINE
2910 TAD ("\ /IF NOT RUBOUT, AND IF RUBOUT WAS
2911 ISZ RUBFLG /LAST, ECHO \.
2912 SKP CLA
2913 JMS I (TTYOUT
2914 TAD NAME1
2915 JMS I (TTYOUT
2916 JMP I PRNT
2917 RUBFLG, 0 /RUBOUT FLAG
2918 PAGE
2919 \f/LDABS DOES A REAL LIVE ABSLOAD IF AC=0
2920 /IF AC=-2 THEN IT IS LOADING A HANDLER, THIS IS DONE AS FOLLOWS:
2921 /SEARCH FOR *0
2922 /THEN LOAD CONSEC WORDS INTO DESCRIPTOR TABLE
2923 /AT NEXT ORIGIN, LOAD WORDS INTO HANDLER AREA (ALLOW ORIGINS)
2924
2925 /CAN'T USE PAGE 0 LITERALS IN CASE LOADING OS/8
2926
2927 LDABS, 0
2928 DCA LODTST /-2 IF HANDLER, 0 IF OS8
2929 LDABS2, TAD JMPNXT
2930 DCA TSTO0
2931 DCA CKSUM /CLEAR CHECKSUM
2932 JMS I (ICHAR /GET A BUFFER CHAR
2933 JMP I LDABS /NO INPUT FOUND
2934 SNA
2935 JMP .-3 /IGNORE BLANKS
2936 TAD (-200
2937 SZA CLA /IS IT LEADER?
2938 JMP I (BADINP /WASN'T 200..PROBABLY NOT BINARY
2939 LEADER, JMS I (ICHAR
2940 JMP I LDABS /STRANGE....ALL LEADER!!!
2941 SNA
2942 JMP LDABS2 /START OVER.BLANKS AFTER LEADER
2943 TAD (-200 /IS IT STILL LEADER?
2944 SNA
2945 JMP LEADER /YES
2946 NEWWD, SMA /IS IT < 200?
2947 JMP FIELDW /NO.TEST FOR FIELD SEETING
2948 TAD (200 /RESTORE CHARACTER
2949 DCA WD1
2950 JMS I (ICHAR
2951 JMP I (BADINP /EOF BETWEEN WORDS. HOW NICE!
2952 DCA WD2
2953 JMS I (ICHAR
2954 JMP I (BADINP
2955 TAD (-200 /200 FINISHES US UP
2956 SNA
2957 JMP I (OVER
2958 DCA WD
2959 JMS I (ASSEMB /ASSEMBLE LAST WORD READ
2960 SZL /IS IT AN ORIGIN?
2961 JMP ORGTST /YES
2962 XFIELD, HLT /GETS CDF N
2963 DCA I ORIGIN /STORE THIS WORD
2964 CDF0, CDF 0
2965 ISZ ORIGIN /SHOULD NEVER SKIP, BUT...
2966 LD7, 7
2967 TAD ORIGIN
2968 TAD (200 /GIVE ERROR IF ORIGIN ADVANCES TO 7600
2969 SNA CLA
2970 JMP I (NOROOM
2971 NEXT, TAD WD1
2972 TAD WD2 /MAKE UP CHECKSUM
2973 TAD CKSUM
2974 DCA CKSUM
2975 TAD WD
2976 JMP NEWWD
2977 \fORGTST, DCA ORGX /TEST FOR ORIGIN
2978 TAD LODTST /GET POINTER TO PROPER ORIGIN
2979 SZA CLA
2980 JMP HND
2981 TAD ORGX /OS/8 - USE REAL ORIGIN
2982 ORI, DCA ORIGIN /BUFFER AREA
2983 TAD LODTST /HANDLER LOAD?
2984 SNA CLA
2985 JMP NEXT /NOPE
2986 TAD ORGX /DON'T START LOAD UNTIL *0 IS FOUND
2987 SZA CLA
2988 TSTO0, JMP NEXT
2989 DCA .-1 /FOUND *0..DO THE LOAD
2990 ISZ LODTST /YES. BUMP LODTST TO LOAD HANDLER NEXT
2991 JMP NEXT
2992 TAD XFIELD
2993 TAD (-CDF 0
2994 SNA CLA
2995 JMS FIRST /FIRST TIME THROUGH
2996 /DO THIS BETTER; ALSO MAKE SURE HANDLER DOESN(T HAVE A FILED PSEUDO
2997 TAD (CDF 10
2998 DCA XFIELD /AT THIS POINT, WE START
2999 CLA CMA /LOADING THE HANDLER INTO THE
3000 DCA LODTST /AREA SPECIFIED BY HNDORG+1
3001 /CHECK 'ORIGIN' TO SEE IF HEADER WAS RIGHT SIZE
3002 /ALSO ELSEWHERE, CAN CHECK ORIGIN WHEN BUMPING TO SEE
3003 /IF WE HIT ANY MAGIC LOCATIONS
3004 TAD ORGX /SEE IF LEGAL RE ORIGIN
3005 JMS I (ORGLIM
3006 DCA ORIGIN /ACTUAL FIELD 1 ORIGIN
3007 / TAD SNACLA /LOADING FIELD 1..TEST ORIGINS
3008 / DCA JMPRE
3009 JMPNXT, JMP NEXT
3010 FIELDW, TAD (-100 /LESS THAN 300 FAILS
3011 SPA
3012 JMP I (BADINP
3013 DCA WD1
3014 TAD WD1
3015 AND LD7
3016 SZA CLA
3017 JMP I (BADINP /DISECT WORD TO CATCH GARBAGE
3018 TAD LODTST /IF LOADING HANDLER, IGNORE FIELD
3019 SZA CLA
3020 JMP FIELD2
3021 TAD WD1
3022 AND (70 /EXTRACT FIELD SETTING
3023 TAD CDF0
3024 DCA XFIELD
3025 FIELD2, JMS I (ICHAR
3026 JMP I (BADINP
3027 TAD (7600
3028 SZA
3029 JMP NEWWD
3030 JMP I (OVER
3031 \fORGX, 0
3032 ORIGIN, 0
3033 WD1, 0
3034 WD2, 0
3035 WD, 0
3036 CKSUM, 0
3037 LODTST, 0
3038
3039 /0: LOADING OS/8
3040 /-2: LOADING HEADER OF HANDLER
3041 /-1: LOADING HANDLER
3042
3043 HND, TAD ORIGIN
3044 DCA KLUD
3045 TAD TABLMT
3046 JMP ORI /HANDLER - USE HANDLER SPACE
3047
3048 KLUD, 0
3049
3050 FIRST, 0
3051 TAD KLUD
3052 DCA NEWLIM
3053 JMP I FIRST
3054
3055 NEWLIM, 0 /NEW END OF DESCRIPTORS
3056 RETSW, 0 /0 MEANS RAN FROM OS/8, 1 MEANS RAN STANDALONE
3057 PAGE
3058 \f LNLNGT=103
3059 BEGLIN, ZBLOCK LNLNGT
3060
3061 SBLOCK=7776 /??
3062 /CTCFAK, .+1 /^C MUST NOT RETURN TO ANY SYSTEM.
3063 / JMP I CTCFAK /CTCFAK MARKS OUR PLACE DURING
3064 / /SYSGEN, AND ^C WILL RETURN TO THAT PLACE.
3065 /*** THIS STUFF GOES AWAY ON A BOOT
3066
3067 BUILD, CDF 10
3068 TAD I [7200 /HAS SPECIAL CODE BEEN OVERLAID BY HANDLERS?
3069 CDF 0
3070 TAD [-1234
3071 SZA CLA
3072 JMP I (NOROOM /YES, TOO BAD
3073 / TAD (5601
3074 / DCA I [7600
3075 / TAD (CTCFAK+1
3076 / DCA I (7601
3077 TAD [6600 /SAVE OLD SYSTEM HANDLER IN 16600
3078 JMS I (SETUPSYS
3079 / JMS CTCFAK
3080 RDOS8, JMS I [PRWD
3081 TEXT \LOAD OS/8: \
3082 JMS RD
3083 JMP RDOS8
3084 CIF CDF 10
3085 JMS I (WROS8
3086 JMS I (SYSWP
3087 / JMS CTCFAK
3088 RDCD, JMS I [CRLF
3089 JMS I [PRWD
3090 TEXT /LOAD CD: /
3091 DCA DVER
3092 JMS RD
3093 JMP RDCD
3094 CIF CDF 10
3095 JMS I (WRCD
3096 TAD I (RETSW
3097 SNA CLA /NOT IF FROM SCRATCH
3098 JMS I (SYSWP /GET OLD HANDLER IF ANY BACK IN
3099 JMP I [CONFIG
3100 \fRD, 0
3101 TAD [-40
3102 JMS I [GTEXT
3103 JMP I RD
3104 JMS I (SETUP
3105 DVER, JMP I (NODEV
3106 JMS I (SYSWP /PUT IN NEW HANDLER
3107 CIF CDF 10
3108 JMS I (SAVE
3109 JMS I (SYSWP
3110 JMS I (LDABS /PAST HERE PAGE 0 IS GONE
3111 JMP I RD
3112 JMS I (SYSWP
3113 ISZ RD
3114 JMP I RD
3115 PAGE
3116 \f *6400
3117
3118 DSCTAB, ZBLOCK 1200
3119 \f/RELIC:
3120
3121 *7600
3122 0 /ONLY LOADED FROM PAPER TAPE.
3123
3124 *7777
3125 0 /SET SOFTWARE CORE SIZE TO 'UNKNOWN'
3126 FIELD 1
3127 *0
3128 0 /FORCE ABSLDR TO LOAD THIS PAGE
3129 *400
3130 / ZBLOCK 5400
3131 0
3132 \f *6600
3133
3134 RELOC BINARY
3135
3136 BINPUN, CDF 10
3137 CLA
3138 TAD (-400
3139 CIF 0
3140 JMS I (MOVE
3141 CDF 10
3142 6600
3143 CDF 0
3144 BINARY /MOVE ONESELF DOWN
3145 CIF CDF 0
3146 JMP I (LDR /EXECUTE IN FIELD 0
3147 LDR, JMS LEDER /PUNCH 72 FRAMES OF 200
3148 DCA CHECK /0 CHECKSUM
3149 TAD (102
3150 JMS CKSUMM
3151 JMS PNCH
3152 STARTB, JMS I (CRLF
3153 TAD ("*
3154 JMS I (TTYOUT
3155 TAD (-100
3156 JMS I (GTEXT
3157 JMP STARTB
3158 JMS I (GETNUM
3159 JMP I (OVERB
3160 TAD SIZE
3161 AND (7770
3162 SZA CLA
3163 JMP STARTB
3164 TAD SIZE
3165 CLL RTL
3166 RAL
3167 DCA FLD
3168 JMS I (GETNUM /GET LOWER LIMIT
3169 JMP STARTB
3170 TAD SIZE
3171 DCA LIM1
3172 JMS I (GETNUM /GET UPPER LIMIT
3173 JMP STARTB
3174 TAD SIZE
3175 DCA LIM2
3176 TAD LIM2
3177 CMA
3178 TAD LIM1
3179 DCA COUNT2
3180 TAD FLD
3181 TAD (300
3182 JMS PNCH
3183 TAD FLD
3184 TAD (CDF 0
3185 DCA BUFLD
3186 TAD LIM1
3187 JMS I (ROTR
3188 AND (77
3189 TAD (100
3190 JMS CKSUMM
3191 TAD LIM1
3192 AND (77
3193 JMS CKSUMM
3194 BUFLD, HLT
3195 TAD I LIM1
3196 JMS I (ROTR
3197 AND (77
3198 JMS CKSUMM
3199 TAD I LIM1
3200 AND (77
3201 JMS CKSUMM
3202 ISZ LIM1
3203 ISZ COUNT2
3204 JMP BUFLD
3205 CIF CDF 0
3206 JMP STARTB
3207 \fLEDER, 0 /PUNCH LEADER/TRAILER
3208 TAD (-200
3209 DCA COUNT2
3210 TAD (200
3211 JMS PNCH
3212 ISZ COUNT2
3213 JMP .-3
3214 JMP I LEDER
3215
3216 PNCH, 0
3217 PLS
3218 PSF
3219 JMP .-1
3220 CLA
3221 JMP I PNCH
3222
3223 FLD, 0
3224 LIM1, 0
3225 LIM2, 0
3226 COUNT2, 0
3227 CHECK, 0
3228
3229 CKSUMM, 0
3230 DCA CK1
3231 TAD CK1
3232 TAD CHECK
3233 DCA CHECK
3234 TAD CK1
3235 JMS PNCH
3236 JMP I CKSUMM
3237
3238 CK1, 0
3239 PAGE
3240 \fOVERB, TAD (300
3241 JMS I (PNCH /FIELD 0
3242 TAD (176
3243 JMS I (CKSUMM
3244 JMS I (CKSUMM /*7600
3245 TAD (74
3246 JMS I (CKSUMM
3247 STL CLA RTL
3248 JMS I (CKSUMM /HLT
3249 TAD (177
3250 JMS I (CKSUMM
3251 TAD (77
3252 JMS I (CKSUMM /*7777
3253 JMS I (CKSUMM
3254 JMS I (CKSUMM /0000
3255 TAD (102
3256 JMS I (CKSUMM
3257 JMS I (CKSUMM /*200
3258 TAD I (CHECK
3259 JMS I (ROTR
3260 AND (77
3261 JMS I (PNCH
3262 TAD I (CHECK
3263 AND (77
3264 JMS I (PNCH
3265 JMS I (LEDER
3266 HLT
3267 JMP .-1 /ALL DONE
3268 PAGE
3269 RELOC
3270 \f *7200
3271
3272 DIRLOC=1400 /FROM OS/8 ASSEMBLY
3273
3274 READ=JMS I (7607
3275 WRITE=READ
3276 MFREE=70
3277 ERR=JMS I (WRERR
3278
3279 1234 /MAGIC NUMBER WHICH IF NOT HERE, MEANS HANDLERS OVERLAID
3280
3281 WROS8, 0
3282 CIF 0
3283 TAD Z7600
3284 JMS I (MOVE /SAVE CURRENT 7600
3285 CDF 0
3286 7600
3287 CDF 0
3288 7000 /IN 07000
3289 TAD (-7 /MOVE 6600 TO 7600
3290 CIF 0
3291 JMS I (MOVE
3292 CDF 0
3293 6600
3294 CDF 0
3295 7600
3296 TAD (-34 /FINISH MOVING FIELD 0
3297 CIF 0
3298 JMS I (MOVE
3299 CDF 0
3300 6744
3301 CDF 0
3302 7744
3303 CDF 0
3304 TAD (5 /V3C SUBTRACT OFF LENGTH OF ABSLDR
3305 TAD I (DLENGTH /FILL IN INITIAL LENGTH
3306 CDF 10
3307 DCA I (DIRLOC+14 /OS8 HAS INITIAL DIRECTORY
3308 \f CIF 0;WRITE;4200;7400;0;ERR /INITIAL REC.0
3309 CIF 0;WRITE;4200;7400;66;ERR /ALSO WRITE RECORD 66
3310 CIF 0;WRITE;4210;DIRLOC;1;ERR /INITIAL DIRECTORY
3311 CIF 0;WRITE;5000;0;7;ERR /KBM
3312 CIF 0;WRITE;4610;0;13;ERR /USR
3313 CIF 0;WRITE;4111;3400;26;ERR /ENTER OVERLAY
3314 CIF 0;WRITE;4701;2000;54;ERR /SAVE, DATE, MON ERROR, CHAIN OVERLAYS
3315 CIF 0;WRITE;4101;LDRCTL;70;ERR /ABSLDR CORE CONTROL BLOCK
3316 CIF 0;WRITE;5010;2000;71;ERR /ABSLDR
3317 CDF 0
3318 TAD I (RETSW
3319 CDF 10
3320 SNA CLA /SCRATCH BUILD?
3321 JMP I (RES76 /NO
3322 TAD Z7600 /YES /MOVE 17600 UP THERE
3323 CIF 0
3324 JMS I (MOVE
3325 CDF 0
3326 7400
3327 CDF 10
3328 Z7600, 7600
3329 JMS I (RESTORE
3330 CIF CDF 0
3331 JMP I WROS8
3332
3333 /RELATIONSHIP BEWTWEEN OS/8 CORE IMAGE AND BLOCKS ON SYSTEM DEVICE:
3334
3335 /ITEM CORE LOC BLOCKS
3336
3337 /KBM 0000-1777 7-12
3338 /OVERLAYS 2000-3577 54-57
3339 /INIT DIR DIRLOC- 1
3340 /ABSLDR CCB LDRCTL- 70
3341 /INIT BLOCK 0 7400-7777 0
3342 /USR 10000-11377 13-15
3343 /ABSLDR 12000-13777 71-74
3344 /ENTER 13400-13577 26
3345 /SYS 06600-06606 PART OF 07600
3346 /SYS 06744-06777 "
3347 \fWRCD, 0
3348 CIF 0;WRITE;4600;0;51;ERR /CD
3349 CIF 0;WRITE;5011;0;60;ERR /ODT
3350 JMS I (RESTORE
3351 JMS I (CASIT
3352 CIF CDF 0
3353 JMP I WRCD
3354 PAGE
3355 \f READ=JMS I (7607
3356 ERR=JMS WRERR
3357
3358 /SPECIAL CODE TO CHAIN TO ABSLDR, TO READ IN MCPIP
3359
3360 JMS I (7700
3361 10 /LOCK USR IN CORE
3362 TAD R7600 /ZERO CD AREA
3363 DCA CDPTR
3364 TAD (-47
3365 DCA CDKNT
3366 DCA I CDPTR
3367 ISZ CDPTR
3368 ISZ CDKNT
3369 JMP .-3
3370 STL CLA RAR /ALTMODE
3371 DCA I (7642
3372 JMS I (200
3373 12 /INQUIRE
3374 4503 /ENCODE CSA0
3375 CDN, 0
3376 0
3377 HLT
3378 TAD CDN /TAKE DEVICE NUMBER
3379 DCA I (7617 /STORE DEVICE NUMBER OF CASSETTE
3380 ISZ I (7620 /V3C FORCE BLOCK 1
3381 CLA IAC
3382 CDF 0 /V3D
3383 DCA I (7746 /SET JSW SO CHAIN DOESN'T DO USROUT
3384 CDF 10
3385 JMS I (200 /CHAIN TO ABSLDR
3386 6
3387 70
3388 \fRESTORE,0
3389 CIF 0;READ;3701;0;BLDSAV;ERR
3390 CIF 0;READ;3510;0;BLDSAV+20;ERR /RESTORE BUILD
3391 JMP I RESTORE
3392 \f WRITE=JMS I (7607
3393 ERR=JMS WRERR
3394
3395 SAVE, 0
3396 CDF 0
3397 DCA I (SOFSET
3398 DCA I (SBLOCK
3399 DCA I (DRECT /HAVE TO KEEP DIRECTORY LATER
3400 CDF 10
3401 CIF 0;WRITE;7701;0;BLDSAV;ERR
3402 CIF 0;WRITE;7510;0;BLDSAV+20;ERR
3403 JMS CASIT
3404 CIF CDF 0
3405 JMP I SAVE
3406
3407 RES76, TAD I (Z7600
3408 CIF 0
3409 JMS I (MOVE
3410 CDF 0
3411 7000 /RESTORE OLD PAGE 7600
3412 CDF 0
3413 7600
3414 JMP I (Z7600
3415 \fWRERR, 0 /WRITE ERROR
3416 HLT CLA /HIT CONTINUE TO RETRY
3417 TAD WRERR
3418 TAD (-6
3419 DCA WRERR /POINT BACK TO CIF OF CALL
3420 JMP I WRERR /RETRY
3421
3422 /RELATIONSHIP BETWEEN CD CORE IMAGE AND BLOCKS ON SYSTEM DEVICE:
3423
3424 /ITEM CORE LOC BLOCKS
3425 /CD 00000-01377 51-63
3426 /ODT 10000-11777 60-63
3427
3428 CSA, 0 /CASSETTE HANDLER ENTRY PT
3429 CDPTR, 0
3430
3431 CDKNT,
3432 CASIT, 0
3433 CDF 0
3434 TAD I (RECNO
3435 SNA
3436 CLA IAC /IF BLOCK 0, CHANGE TO 1
3437 DCA I (RECNO
3438 TAD I PRETSW
3439 SNA CLA /BUILDING FROM SCRATCH?
3440 JMP I CASIT /NO
3441 TAD I (BLDCB /YES, GET DCB OF LOAD HANDLER
3442 AND L770
3443 TAD M270 /CASSETTE DEVICE CODE=27
3444 SZA CLA
3445 JMP I CASIT /NOT A CASSETTE
3446 TAD I (DVICE
3447 DCA CSA /GET HANDLER ENTRY POINT
3448 CDF 10
3449 CIF 0
3450 JMS I CSA
3451 3 /SKIP TO NEXT FILE
3452 L770, 770
3453 M270, -270
3454 R7600, 7600 /IGNORE ERRORS
3455 CIF 0
3456 JMS I CSA
3457 100 /DUMMY READ A PAGE
3458 BINARY /TO SKIP HEADER
3459 PRETSW, RETSW
3460 SKP CLA /WANT AN ERROR
3461 HLT /A GOOD READ IS BAD!
3462 JMP I CASIT
3463 \f FIELD 0
3464 *200
3465 $
3466 \f