Commit | Line | Data |
---|---|---|
7af5ad59 PH |
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 |