.TITLE RPFMT - RP0X DISK FORMAT PROGRAM .IDENT /01/ ; ; COPYRIGHT (C) 1978 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- ; SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY ; OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE ; AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM ; AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO AND ; OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; D. N. CUTLER 2-MAY-78 ; ; RP0X FORMAT PROGRAM ; ; MACRO LIBRARY CALLS ; $IODEF ;DEFINE I/O FUNCTION CODES $SSDEF ;DEFINE SYSTEM STATUS VALUES .LIST MEB ;LIST EXPANDED BINARY ; ; LOCAL MACROS ; ; CHECK I/O STATUS ; .MACRO CHECKIO BSBW CHECKIOS .ENDM ; ; LOOP ON STATUS MISMATCH ; .MACRO LOOPS STAT .IF NB STAT CMPW #SS$_'STAT,R0 BSBW CHECKEQL .IFF BSBW CHECKLBS .ENDC .ENDM LOOPS ; ; LOCAL DATA ; ; OUTPUT BUFFER DESCRIPTOR ; .PSECT DATA,RD,WRT,NOEXE BUFFER: ; .LONG 132 ; .LONG OUTBUF ; ; ; DEVICE CHARACTERISTICS BUFFER ; DBBUF: .BLKL 3 ; ; ; DEVICE CHARACTERISTICS BUFFER DESCRIPTOR ; DBCHAR: .LONG 3*4 ; .LONG DBBUF ; ; ; DISK BUFFER ; DSKBUF: .BLKB 22*<512+8> ; ; ; I/O STATUS BLOCK ; IOSTAT: .BLKQ 1 ; ; ; LENGTH OF FORMATTED ERROR MESSAGE STRING ; LENGTH: .BLKW 1 ; ; ; OUTPUT BUFFER ; OUTBUF: ; .BLKB 132 ; ; ; DISK CHANNEL NUMBER ; DBCHAN: .BLKW 1 ; ; ; TERMINAL CHANNEL NUMBER ; TTCHAN: .BLKW 1 ; ; ; ERROR MESSAGE STRING DESCRIPTOR ; ERRORMSG: ;LENGTH OF CONTROL STRING IN BYTES .LONG 20$-10$ ; .LONG 10$ ;ADDRESS OF CONTROL STRING 10$: .ASCII / *** ERROR AT PC=!XL R0=!XL R9=!XL ***/ ; 20$: ; ; ; DISK NAME STRING DESCRIPTOR ; DBNAME: .LONG 20$-10$ ;LENGTH OF NAME STRING IN BYTES .LONG 10$ ;ADDRESS OF NAME STRING 10$: .ASCII /DRIVE/ ;DEVICE NAME STRING 20$: ;REF LABEL ; ; TERMINAL NAME STRING DESCRIPTOR ; TTNAME: .LONG 20$-10$ ;LENGTH OF NAME STRING IN BYTES .LONG 10$ ;ADDRESS OF NAME STRING 10$: .ASCII /TT/ ;DEVICE NAME STRING 20$: ;REF LABEL ; ; ENDING TIME ; ENDMSG: ; .ASCII <13><10>/END FORMAT = / ; ETIMEBUF: ; .BLKB 24 ; .BYTE 13,10 ; ENDMSGLEN=.-ENDMSG ; ; ; END TIME CONVERSION BUFFER DESCRIPTOR ; ETIME: ; .LONG 24 ; .LONG ETIMEBUF ; ; ; STARTING TIME ; STARTMSG: ; .ASCII <13><10>/START FORMAT = / ; STIMEBUF: ; .BLKB 24 ; .BYTE 13,10 ; STARTMSGLEN=.-STARTMSG ; ; ; START TIME CONVERSION BUFFER DESCRIPTOR ; STIME: ; .LONG 24 ; .LONG STIMEBUF ; .PAGE .SBTTL START OF RP0X FORMAT ;+ ; START - START OF RP0X FORMAT ;- .PSECT CODE,RD,NOWRT,EXE START: .WORD 0 ;ENTRY MASK $ASSIGN_S TTNAME,TTCHAN ;ASSIGN CHANNEL TO TERMINAL LOOPS NORMAL ;LOOP IF NOT NORMAL COMPLETION $ASSIGN_S DBNAME,DBCHAN ;ASSIGN CHANNEL TO DISK LOOPS NORMAL ;LOOP IF NOT NORMAL STATUS $GETCHN_S DBCHAN,,DBCHAR ;GET DEVICE CHARACTERISTICS LOOPS ;CHECK FOR SUCCESS STATUS $ASCTIM_S LENGTH,STIME ;CONVERT CURRENT TIME TO ASCII LOOPS NORMAL ;LOOP IF NOT NORMAL COMPLETION $OUTPUT TTCHAN,#STARTMSGLEN,STARTMSG ;OUTPUT START TIME LOOPS NORMAL ;LOOP IF NOT NORMAL COMPLETION ; ; BEGIN FORMATTING DISK ; FMTBEG: ; $QIOW_S #0,DBCHAN,#IO$_PACKACK,IOSTAT ;ACKNOWLEDGE PACK LOOPS NORMAL ;CHECK FOR NORMAL COMPLETION MOVZWL DBBUF+10,R7 ;GET NUMBER OF CYLINDERS DECL R7 ;REDUCE BY ONE CLRL R6 ;CLEAR CYLINDER NUMBER CLRL R5 ;CLEAR TRACK NUMBER 10$: CLRL R4 ;CLEAR SECTOR NUMBER MOVAB DSKBUF,R3 ;GET ADDRESS OF FORMAT BUFFER MOVW R6,-(SP) ;FORM DISK ADDRESS MOVB R5,-(SP) ; MOVB R4,-(SP) ; MOVL SP,R2 ;SAVE ADDRESS OF DISK ADDRESS 20$: BISW3 #^X1000,R6,(R3)+ ;INSERT CYLINDER NUMBER MOVB R4,(R3)+ ;INSERT SECTOR NUMBER MOVB R5,(R3)+ ;INSERT TRACK NUMBER MOVAB 516(R3),R3 ;POINT TO NEXT SECTOR AOBLEQ #21,R4,20$ ;ANY MORE SECTORS TO FILL IN? $QIOW_S #0,DBCHAN,#IO$_WRITEHEAD,IOSTAT,,,DSKBUF,#22*<512+8>,(R2) ;FORMAT TRACK LOOPS NORMAL ;CHECK FOR NORMAL COMPLETION CHECKIO ;CHECK I/O STATUS TSTL (SP)+ ;REMOVE DISK ADDRESS FROM STACK AOBLEQ #18,R5,10$ ;ANY MORE TRACKS TO FORMAT? CLRL R5 ;CLEAR TRACK NUMBER AOBLEQ R7,R6,10$ ;ANY MORE CYLINDERS TO FROMAT ; ; END OF FORMATTING ; FMTEND: ; $ASCTIM_S LENGTH,ETIME ;CONVERT CURRENT TIME TO ASCII $OUTPUT TTCHAN,#ENDMSGLEN,ENDMSG ;OUTPUT ENDING TIME $DASSGN_S DBCHAN ;DEASSIGN DISK $DASSGN_S TTCHAN ;DEASSIGN TERMINAL CHANNEL RET ; ; ; SUBROUTINES TO CHECK FOR CONDITIONS ; CHECKEQL: ;CHECK FOR EQUALITY BNEQ ERROR ; RSB ; CHECKIOS: ;CHECK I/O STATUS MOVL IOSTAT,R0 ; CHECKLBS: ;CHECK FOR TRUE BLBC R0,ERROR ; RSB ; ; ; ERROR MESSAGE OUTPUT ; ERROR: ; MOVL (SP),R1 ;GET RETURN PC $FAO_S ERRORMSG,LENGTH,BUFFER,R1,R0 ;FORMAT MESSAGE $OUTPUT TTCHAN,LENGTH,OUTBUF ;OUTPUT MESSAGE RSB ; .END START