;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*- ;;; Patch file for CDI version 1.3 ;;; Reason: ;;; More changes to the disk interface. ;;; Written 14-May-86 15:03:49 by PTM at site LMI Cambridge ;;; while running on Larry from band 3 ;;; with System 110.232, Lambda-Diag 7.17, Experimental Local-File 68.7, FILE-Server 18.4, Unix-Interface 9.1, ZMail 65.14, Object Lisp 3.4, Tape 6.39, Site Data Editor 3.3, Tiger 24.0, KERMIT 31.3, Window-Maker 1.1, Gateway 4.8, TCP-Kernel 39.7, TCP-User 62.7, TCP-Server 45.5, MEDIUM-RESOLUTION-COLOR 3.4, MICRO-COMPILATION-TOOLS 3.2, System Revision Level 3.18, Experimental CDI 1.0, microcode 1512, SDU ROM 103. ; From modified file DJ: L.IO; DLEDIT.LISP#89 at 14-May-86 15:04:03 #8R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: IO; DLEDIT  " (DEFUN LE-COM-CONTROL-E-v2 () (SETQ LE-SOMETHING-CHANGED T) ;something probably will... (IF (< LE-ITEM-NUMBER (LENGTH LE-STRUCTURE)) (LET ((ITEM (NTH LE-ITEM-NUMBER LE-STRUCTURE))) (LET ((NAME (FIRST ITEM)) (VALUE (SECOND ITEM)) (*READ-BASE* 10.)) (WITH-INPUT-EDITING (T `((:INITIAL-INPUT ,(FORMAT NIL "~D" VALUE)))) (SETQ VALUE (PROMPT-AND-READ (IF (NUMBERP VALUE) ':INTEGER ':STRING) "Change the ~A from to:" NAME))) ;; Avoid lossage in lowercase partition names. (COND ((MEMQ NAME '(PARTITION-NAME CURRENT-BAND CURRENT-MICROLOAD)) (SETQ VALUE (STRING-UPCASE VALUE)))) (CASE NAME (PACK-NAME (PUT-DISK-STRING LE-RQB VALUE 12. 16.)) (DRIVE-NAME (PUT-DISK-STRING LE-RQB VALUE 5 12.)) (COMMENT (PUT-DISK-STRING LE-RQB VALUE 64. 96.)) (N-CYLINDERS (put-disk-fixnum le-rqb (dpb value (byte 16. 0) (get-disk-fixnum le-rqb 10.)) 10.)) (N-HEADS (put-disk-fixnum le-rqb (dpb value (byte 8 16.) (get-disk-fixnum le-rqb 9)) 9)) (N-sectors-PER-TRACK (put-disk-fixnum le-rqb (dpb value (byte 8 24.) (get-disk-fixnum le-rqb 9)) 9)) (N-PARTITIONS (put-disk-fixnum le-rqb value (+ 256. 2))) (WORDS-PER-PART (put-disk-fixnum le-rqb value (+ 256. 3))) ;; These occur in multiple instances; hair is required ((PARTITION-NAME PARTITION-START PARTITION-SIZE PARTITION-COMMENT partition-type) (LET ((PLOC (LE-CURRENT-PARTITION))) (CASE NAME (PARTITION-NAME (PUT-DISK-STRING LE-RQB VALUE PLOC 4)) (PARTITION-START (PUT-DISK-FIXNUM LE-RQB VALUE (1+ PLOC))) (PARTITION-SIZE (PUT-DISK-FIXNUM LE-RQB VALUE (+ PLOC 2))) (partition-type (put-disk-fixnum le-rqb (dpb value (byte 8 0) (get-disk-fixnum le-rqb (+ ploc 3))) (+ ploc 3))) (PARTITION-COMMENT (PUT-DISK-STRING LE-RQB VALUE (+ PLOC 4) (* 4 (- (GET-DISK-FIXNUM LE-RQB (+ 256. 3)) 4))))))) (current-microload (set-default-microload-V2 rqb value)) (current-band (set-default-load-band-V2 rqb value)) (OTHERWISE (FERROR "No editor for ~S" NAME))))) (BEEP)) (LE-DISPLAY-LABEL LE-RQB LE-UNIT)) ;;; Returns the word number of the start of the descriptor for the partition ;;; containing the current item. )) ; From modified file DJ: L.IO; DLEDIT.LISP#89 at 14-May-86 15:04:29 #8R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: IO; DLEDIT  " (DEFUN SET-CURRENT-BAND (BAND &OPTIONAL UNIT MICRO-P &AUX LABEL-INDEX) "Specify the LOD band to be used for loading the Lisp system at boot time. If the LOD band you specify goes with a different microcode, you will be given the option of selecting that microcode as well. Usually, do so. Do PRINT-DISK-LABEL to see what bands are available and what they contain. UNIT can be a string containing a machine's name, or /"CC/"; then the specified or debugged machine's current band is set. The last works even if the debugged machine is down. UNIT can also be a disk drive number; however, it is the disk on drive zero which is used for booting. Returns T if the band was set as specified, NIL if not (probably because user said no to a query)." (when (null unit) (select-processor ((:cadr :lambda) (setq unit 0)) (:explorer (setq unit (explorer-lod-band-logical-unit))))) (with-decoded-disk-unit (unit unit (FORMAT NIL "(SET-CURRENT-~:[BAND~;MICROLOAD~] ~D)" MICRO-P BAND)) (with-disk-rqb (rqb disk-label-rqb-pages) (PROG ((UCODE-NAME (SELECT-PROCESSOR (:CADR "MCR") (:LAMBDA "LMC") (:explorer "MCR") ))) (SETQ BAND (COND ((OR (SYMBOLP BAND) (STRINGP BAND)) (STRING-UPCASE (STRING BAND))) (T (FORMAT NIL "~A~D" (COND (MICRO-P UCODE-NAME) (T "LOD")) BAND)))) (OR (STRING-EQUAL (SUBSTRING BAND 0 3) (IF MICRO-P UCODE-NAME "LOD")) (FQUERY NIL "The specified band is not a ~A band. Select it anyway? " (IF MICRO-P UCODE-NAME "LOD")) (RETURN NIL)) (MULTIPLE-VALUE (NIL NIL LABEL-INDEX) (FIND-DISK-PARTITION-FOR-READ BAND RQB UNIT)) ;Does a READ-DISK-LABEL (ecase (get-disk-fixnum rqb 1) (1 (PUT-DISK-STRING RQB BAND (COND (MICRO-P 6) (T 7)) 4)) (2 (if (numberp unit) (if micro-p (set-default-microload-V2 rqb band) (set-default-load-band-V2 rqb band)) (ferror "can't set the default band remotely for V2 labels"))) ) (IF (NOT MICRO-P) (MULTIPLE-VALUE-BIND (NIL MEMORY-SIZE-OF-BAND UCODE-VERSION-OF-BAND) (MEASURED-SIZE-OF-PARTITION BAND UNIT) (LET ((CURRENT-UCODE-VERSION (current-microload-version unit)) (MACHINE-MEMORY-SIZE (cond ((and (numberp unit) (= (get-disk-fixnum rqb 1) 2)) (page-partition-size-for-local-machine)) (t (MEASURED-SIZE-OF-PARTITION "PAGE" UNIT))))) (AND (> MEMORY-SIZE-OF-BAND MACHINE-MEMORY-SIZE) (NOT (FQUERY NIL "~A requires a ~D block PAGE partition, but there is only ~D. Select ~A anyway? " BAND MEMORY-SIZE-OF-BAND MACHINE-MEMORY-SIZE BAND)) (RETURN NIL)) (MULTIPLE-VALUE-BIND (BASE-BAND-NAME BASE-BAND-VALID) (INC-BAND-BASE-BAND BAND UNIT) (WHEN BASE-BAND-NAME (FORMAT T "~%Band ~A is an incremental save with base band ~A." BAND BASE-BAND-NAME) (UNLESS BASE-BAND-VALID (FORMAT T "~2%It appears that ~A's contents have been changed since ~A was dumped. Therefore, booting ~A may fail to work!" BASE-BAND-NAME BAND BAND) (UNLESS (FQUERY FORMAT:YES-OR-NO-P-OPTIONS "~%Select ~A anyway? " BAND) (RETURN NIL))))) (IF UCODE-VERSION-OF-BAND (IF (EQ CURRENT-UCODE-VERSION UCODE-VERSION-OF-BAND) (FORMAT T "~%The new current band ~A should work properly with the ucode version that is already current." BAND) (LET ((BAND-UCODE-PARTITION (FIND-MICROCODE-PARTITION RQB UCODE-VERSION-OF-BAND))) (IF BAND-UCODE-PARTITION (IF (FQUERY NIL "~A goes with ucode ~D, which is not selected. Partition ~A claims to contain ucode ~D. Select it? " BAND UCODE-VERSION-OF-BAND BAND-UCODE-PARTITION UCODE-VERSION-OF-BAND) (ecase (get-disk-fixnum rqb 1) (1 (PUT-DISK-STRING RQB BAND-UCODE-PARTITION 6 4)) (2 (cond ((numberp unit) (set-default-microload-V2 rqb band-ucode-partition)) (t (ferror "can't set remote V2 labels"))))) (UNLESS (FQUERY FORMAT:YES-OR-NO-P-OPTIONS "~2%The machine may fail to boot if ~A is selected with the wrong microcode version. It wants ucode ~D. Currently ucode version ~D is selected. Do you know that ~A will run with this ucode? " BAND UCODE-VERSION-OF-BAND CURRENT-UCODE-VERSION BAND) (RETURN NIL))) ;; Band's desired microcode doesn't seem present. (FORMAT T "~%~A claims to go with ucode ~D, which does not appear to be present on this machine. It may or may not run with other ucode versions. Currently ucode ~D is selected." BAND UCODE-VERSION-OF-BAND CURRENT-UCODE-VERSION) (UNLESS (FQUERY FORMAT:YES-OR-NO-P-OPTIONS "~%Should I really select ~A? " BAND) (RETURN NIL)))))))) ;; Here to validate a MCR partition. (WHEN (and (= (get-disk-fixnum rqb 1) 1) (> LABEL-INDEX (- #o400 3))) (FORMAT T "~%Band ~A may not be selected since it is past the first page of the label. The bootstrap prom only looks at the first page. Sorry.") (RETURN NIL))) (WRITE-DISK-LABEL RQB UNIT) (RETURN T))))) ))