.MCALL .MODULE .MODULE FMTDZ,VERSION=03,COMMENT=,IDENT=NO ; Copyright (c) 1998 by Mentec, Inc., Nashua, NH. ; All rights reserved ; ; This software is furnished under a license for use only on a ; single computer system and may be copied only with the ; inclusion 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 Mentec, Inc. ; ; The information in this document is subject to change without ; notice and should not be construed as a commitment by Digital ; Equipment Corporation, or Mentec, Inc. ; ; Digital and Mentec assume no responsibility for the use or ; reliability of its software on equipment which is not supplied ; by Digital or Mentec, and listed in the Software Product ; Description. ; ; AUTHOR: JONATHAN P. HARRIS 5-DEC-77 V01-00 ; ; MODIFIED: BARBARA DOERRE 7-NOV-78 V01-01 ; MACROS MODIFIED AND ADDED TO SUPPORT VERIFIFICATION FUNCTIONALITY AND ; TO OVERLAY FORMAT ROUTINES ; 1)MODIFIED DEVIC$ AND ENTRY$ MACROS ; 2)ADDED LDPT$ MACRO ; ; ; THIS MODULE IS A PREFIX FILE FOR ASSEMBLY OF THE FORMAT ROOT ; AND OVERLAYS. IT PROVIDES MACROS NEEDED TO SPECIFY OPTIONS ; AND CREATE TABLES AND ENTRY POINTS. ; TO ADDED A DEVICE: ; 1) INVOKE DEVIC$ MACRO IN MODULE FMTDEV.MAC FOR THE DEVICE ; 2) CREATE A FILE FMTXX.MAC (XX=DEVICE MNEMONIC) CONTAINING THE FOLLOWING ; IN THE SPECIFIED ORDER ; A. MACRO PREFIX FILE ; B. INVOKE LDPT$ MACRO FOR DEVICE ; C. DEVICE CHECK ROUTINE ; D. INVOKE OPTN$ MACRO (OPTIONAL) ; E. INVOKE ENTRY$ MACRO ; F. FORMAT ROUTINE (IF ONE EXISTS) ;- .SBTTL (MACRO PREFIX FILE) ;+ ; DEVIC$ - USED TO SET UP EACH FORMATTING OVERLAY ; ; THIS MACRO CREATES THE DEVICE TABLE ENTRY FOR THE DEVICE. ; IT SHOULD BE PLACED IN THE FMTDEV.MAC MODULE. ; A ROUTINE FOR DEVICE XX WILL HAVE DEVICE TABLE ENTRIES CREATED ; FOR IT. ; ; THE MACRO HAS THREE PARAMETERS, THE TWO LETTER DEVICE MNEMONIC, ; THE DEVICE ID NUMBER AS RETURNED BY .DSTATUS, AND FMTRT, A 'Y' OR 'N' ; TO INDICATE WHETHER A FORMATTING ROUTINE EXISTS FOR THIS DEVICE. ; ; **THIS MACRO IS NOT TO BE INVOKED IN THE ROOT OR FORMAT OVERLAYS** ; ; TO INVOKE IT, TYPE: ; ; DEVIC$ XX,IDNUM,FMTRT ; ; WHERE XX IS THE DEVICE MNEMONIC, IDNUM IS THE .DSTATUS NUMBER ; AND FMTRT IS A 'Y' OR 'N' TO INDICATE WHETHER A FORMAT ROUTINE ; EXISTS FOR THIS DEVICE. ; ; EXAMPLES: ; DEVIC$ RK,0,Y ;DOES SETUP FOR RK05 ; DEVIC$ DM,23,Y ;DOES SETUP FOR RK06/7 ; DEVIC$ DX,22,N ;DOES SETUP FOR RX01 ;- ; ; SYMBOLIC DEFINITIONS FOR DEVICE TABLE ; ;SYMBOL MEANING ;------ ------- ;OFFSETS INTO DEVICE TABLE ENTRY: RADNAM=0 ; RAD50 DEVICE NAME DEVTYP=2 ; .DSTATUS DEVICE ID NUMBER ASCNAM=4 ; ASCII DEVICE NAME OPVAL=6 ; POINTER TO LIST OF VALID OPTIONS LOADPT=8. ; LOAD ENTRY POINT ENTRY=10. ; ENTRY POINT TO ROUTINE END=12. ; END POINT OF ROUTINE ;BD1+ DEVCHK=14. ; DEVICE CHECK ROUTINE ENTRY POINT CHAR=16. ; DEVICE CHARACTERISTICS RTDVSZ=1 ; SPFUN RETURNS DEVICE SIZE SPFIO=2 ; SPFUN READS/WRITES BFSZP1=4 ; BUFFER SIZE PLUS 1 FOR R/W ;BD1- DVENSZ=18. ;SIZE OF EACH ENTRY IN DEVICE TABLE ; .MACRO DEVIC$ NAME,IDNUM,FMTRT,CHARDV .PSECT $DV,RO,D,GBL .GLOBL $'NAME'TAB,$'NAME'END,$'NAME'DCK,NAME'LD .IIF IDN Y,FMTRT .GLOBL $'NAME'FMT .RAD50 /NAME/ .WORD IDNUM .ASCII /NAME/ .WORD $'NAME'TAB .WORD NAME'LD .IF IDN Y,FMTRT .WORD $'NAME'FMT .IFF .WORD 0 .ENDC .WORD $'NAME'END .WORD $'NAME'DCK .WORD CHARDV .PSECT .ENDM ;+ ; LDPT$ - THIS MACRO CREATES THE NECESSARY LOAD POINTS AND POINTERS ; TO THE LIST OF OPTIONS FOR THE DEVICE. ; A DEVICE WILL HAVE THE FOLLOWING CREATED FOR IT: ; 1) POINTER TO LIST OF VALID OPTIONS FOR THIS DEVICE ; 2) LOAD POINT FOR OVERLAY ; 3) DEVICE CHECK ROUTINE ENTRY POINT ; 4) PATCH SPACE ; ; A SHORT DEVICE CHECK ROUTINE SHOULD FOLLOW ; A CALL TO THIS MACRO OF THE FORM: ; IF (DEVICE NOT READY OR WRITE LOCKED) THEN SEC ; ELSE CLC ; THE UNIT NUMBER OF THE DEVICE TO BE TESTED IS PASSED IN R1. ; ; **THIS MACRO IS NOT TO BE USED IN THE ROOT** ; ; ; TO INVOKE IT, TYPE: ; ; LDPT$ NAME ; ; WHERE 'NAME' IS THE TWO LETTER DEVICE MNEMONIC. ; ; EXAMPLES: LDPT$ RK ;FOR RK05 ; LDPT$ DM ;FOR RK06/07 ; ;- .MACRO LDPT$ NAME .PSECT PATCH,RW,I .BLKW 32. .PSECT $OP,RW,D,GBL $'NAME'TAB:: .PSECT DATA,RW,D .PSECT PUREDATA,RO,D .PSECT NAME,I,RW NAME'LD:: RTS PC .PSECT NAME'END,RO,D $'NAME'END:: .PSECT NAME,I,RW $'NAME'DCK:: .ENDM ;+ ; OPTN$ - USED TO GENERATE THE 8 BYTE OPTION TABLE ENTRY THAT DEFINES AN OPTION. ; ; THIS MACRO ALLOWS EACH FORMATTING ROUTINE TO SPECIFY THE OPTIONS ; IT WILL NEED. THE OPTIONS SO SPECIFIED BECOME KNOWN TO THE ROOT ; AT LINK TIME, THUS THERE IS NO NEED TO MODIFY THE ROOT TO ADD AN ; OPTION TO THE PROGRAM. ; ; THERE CAN BE ANY NUMBER OF OPTIONS IN THE TABLE. THE TABLE IS ; TERMINATED WITH A .WORD 0 (AUTOMATICALLY HANDLED BY ENTRY$ MACRO). ; TO USE THE MACRO WITHIN A FORMATTING ROUTINE, PLACE IT AT THE ; BEGINNING OF THE ROUTINE IMMEDIATELY FOLLOWING THE DEVIC$ CALL. ; WITHIN THE ROOT, PLACE THE MACRO FOLLOWING EXISTING INVOCATIONS OF OPTN$. ; THE MACRO HAS TWO PARAMETERS: OPTION, THE ASCII OPTION, AND ; ACCEPT, A 'Y' OR 'N' TO INDICATE WHETHER THE OPTION WILL ACCEPT ; A VALUE. ; ; TO ACCESS THE INFORMATION IN THE TABLE, THE FOLLOWING SYMBOLS ARE ; PROVIDED WITH EACH OPTION '?': ; GIV.? = 1 IF USER SPECIFIED THAT OPTION WITH A VALUE, ; = 0 IF USER DIDN'T SPECIFY OPTION ; = -1 IF USER SPECIFIED OPTION WITHOUT A VALUE ; VAL.? VALUE GIVEN WITH OPTION ? (IF A VALUE WAS GIVEN) ; (ONLY PROVIDED IF OPTION ACCEPTS A VALUE) ; ; TO INVOKE OPTN$, TYPE ; ; OPTN$ OPTION,ACCEPT ; ; EXAMPLES: ; OPTN$ S,Y - SETS UP OPTION "S" THAT ACCEPTS A VALUE ; OPTN$ Q,N - SETS UP OPTION "Q" WHICH DOES NOT ACCEPT ; A VALUE ; ; ; EACH ENTRY CONSISTS OF: ; ; +--------+--------+ ; ! VALLOW ! OPTION ! ; +--------+--------+ ; ! RES. ! GIVEN ! ; +--------+--------+ ; ! VALUE ! ; +--------+--------+ ; ; WHERE: ; OPTION (1 BYTE) IS THE ASCII OPTION ; VALLOW (1 BYTE) IS: ; 1 - IF OPTION WILL ACCEPT A VALUE ; 0 - IF NOT ; GIVEN (1 BYTE) IS: ; 1 - IF OPTION SPECIFIED WITH A VALUE ; 0 - IF OPTION NOT SPECIFIED ; -1 - IF OPTION SPECIFIED WITHOUT A VALUE ; RES. (1 BYTE) IS RESERVED FOR FUTURE USE ; VALUE (1 WORD) IS THE VALUE GIVEN WITH OPTION ( IF ALLOWED) ;- ; ; SYMBOLIC DEFINITONS FOR OPTION TABLE ; ;SYMBOL MEANING ;----- ------- OPT=0 ;OFFSETS INTO AN OPTION ENTRY: ASCII OPTION VALLOW=1 ; ALLOW A VALUE? GIVEN=2 ; OPTION GIVEN? VALUE=4 ; VALUE GIVEN OPENSZ=6 ;SIZE OF EACH OPTION TABLE ENTRY IN BYTES ; .MACRO OPTN$ OP,ACCEPT .PSECT $OP,RW,D,GBL .BYTE ''OP .IF IDN Y,ACCEPT .BYTE 1 .IFF .BYTE 0 .IFTF GIV.'OP: .BYTE 0 .BYTE 0 .IFT VAL.'OP: .WORD 0 .IFF .WORD 0 .ENDC .PSECT .ENDM ;+ ; ENTRY$ - THIS MACRO CREATES THE NECESSARY ENTRY POINT AND .PSECT ; FOR THE FORMATTING ROUTINE.IT ALSO CLOSES OFF THE OPTION TABLE ; WITH A 0. ; ; **THIS MACRO IS NOT TO BE USED IN THE ROOT** ; ; TO INVOKE IT, TYPE: ; ; ENTRY$ NAME ; ; WHERE 'NAME' IS THE TWO LETTER DEVICE MNEMONIC. ; ; EXAMPLES: ENTRY$ RK ;FOR RK05 ; ENTRY$ DM ;FOR RK06/07 ; ;- .MACRO ENTRY$ NAME .PSECT $OP,RW,D,GBL .WORD 0 .PSECT NAME,I,RW $'NAME'FMT:: .ENDM .SBTTL RX50 FORMATTING ROUTINE ;+ ; ; COPYRIGHT (c) 1988 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ALL RIGHTS RESERVED. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. ; ; AUTHOR: E. A. Bausman 10-May-84 V01-00 ; ; ; THIS MODULE WILL FORMAT THE PROFESSIONAL 350 SERIES RX50 ; DISKETTES. ;- ;+ ; FMTDZ will format the Professioanl 350 series diskettes. ; ; The RX50 has 80. tracks, 10. sectors per track and 512. bytes per ; sector. ; ; Checks for controller REV number 11 or greater (less than 11 ; can not be formatted), and speed as well as formatting the diskette. .GLOBL PREMSG, $SERR1, $SERR2 ; ERROR REPORTING MACRO .IRPC X, .GLOBL ERR$$'X .ENDR .MACRO $ERROR ADDR,CODE MOV #ERR$$'CODE',R0 MOV ADDR,-(SP) CALL PREMSG .ENDM ; INTERFACE WITH ROOT ; LDPT$ DZ ;SET UP DEVICE LOAD POINT AND ; OPTION TABLE ;BD1+ ;;;; CSR = noncsr ;RX50 CSR CS0 = 4 ;Command register CS1 = 6 ;Track and error register CS2 = 10 ;Sector and current track register CS3 = 12 ;Current sector register CS4 = 14 ;Incorrect track register CS5 = 16 ;Extended function register for format CSGO = 24 ;Go register to execute command in CS0 DZMTRK = 79. ;0 - 79. = 80 tracks C5.VER = 4 ;Function code in CS5 for controller version C5.FMT = 6 ;Function code in CS5 for format FMTVER = 11. ;Controller rev level for format S.BIT = 1 ;Side select bit in CS0 DSK.BIT = 2 ;Disk select bit in CS0 DRV.BIT = 4 ;Drive select bit in CS0 C0.DON = 10 ;Done bit in CS0 C0.FMT = 120 ;Extend function bits in CS0 for format C0.ERR = 200 ;Error bit in CS0 ;READ STATUS CS3 VALUES ; C3.AVL = 1 ;Drive 0 or 1 available, not disk check ; C3.DBL = 2 ;Unit is double sided C3.RDY = 4 ;Unit is ready for access C3.WRT = 10 ;Floppy is write protected ; C3.CH0 = 20 ;Volumn 0 changed -drive 0, disk 0 ; C3.CH1 = 40 ;Volumn 1 changed -drive 0, disk 1 ; C3.CH2 = 100 ;Volumn 2 changed -drive 1, disk 0 ; C3.CH3 = 200 ;Volumn 3 changed -drive 1, disk 1 ; ; DEVCHK ROUTINE ENTRY POINT ; ; Check to see if there is a disk available for formatting and for ; verify, checks to see if an error from the verify was a disk error ; or a device error. If a disk is available for format or verify ; then CLC and return. If no disk is available or the disk is write ; protected via a write protect tab then SEC and return. ; .ENABL LSB DZCHK: ; MOV NONCSR,R4 ; MOV #3,(PC)+ ;DZTRY: .WORD 0 ;Retries on drive status ;GO: CLRB CS0(R4) ;Start clear ; CMP #1,R1 ;Unit number is in R1, is it 1 ; BMI DZERR1 ;Illegal device if neG ; BNE 1$ ; BISB #DSK.BIT,CS0(R4);Its disk 1, side 0, drive 0 ;1$: ;Its disk 0, side 0, drive 0 ; BISB CS0(R4),(PC)+ ;Save if for format routine if needed ;DZUNIT: .WORD 0 ; CLRB CSGO(R4) ;Any access to this register cause command to ;be executed, in this case a read status to ;check for available disk, write protect, etc ;2$: BITB #C0.DON,CS0(R4) ;Done yet ; BEQ 2$ ; TSTB CS0(R4) ;Check for error ; BMI DZERR ;Go check error ; BITB #C3.RDY,CS3(R4) ;Is the door closed ; BEQ DZERR ; BITB #C3.WRT,CS3(R4) ;Is the floppy write protected ; BNE DZERR ; CLC ;Everything is all set ; RETURN ;DZERR: DEC DZTRY ;Decrement retry count ; BNE GO ;Go try again, the drive may not be ready ; BR OUT ;DZERR1: $ERROR #ERR3,F ;Illegal device ;OUT: SEC ;A hard device error of some kind ; RETURN .DSABLE LSB ; FORMAT ROUTINE ENTRY POINT ; ENTRY$ DZ ;ENTRY POINT DZFORM::BR VERERR ; JSR PC,DZCHK ;Go check drive and floppy status ; BCS FMTERR ;No can format ; BISB #C0.FMT,DZUNIT ;Get extend function for format in CS0 ; MOVB DZUNIT,CS0(R4) ;Get unit, side and drive and function ; MOVB #C5.VER,CS5(R4) ;Get version check function in CS5 ; CLRB CSGO(R4) ;Go do it ;1$: BITB #C0.DON,CS0(R4) ;Done yet ; BEQ 1$ ; TSTB CS0(R4) ; BMI FMTERR ;Bad error ; CMPB #FMTVER,CS2(R4) ;What is version ; BHI VERERR ;Wrong version ; MOV #DZMTRK,R1 ;Get total tracks, can clobber R1 ; CLRB CS1(R4) ;Start with track 0 ;2$: MOVB DZUNIT,CS0(R4) ;Get unit again and function ; MOVB #C5.FMT,CS5(R4) ;Get format function in CS5 ; CLRB CS2(R4) ;Clear sector just in case ; CLRB CSGO(R4) ;go do it ;3$: BITB #C0.DON,CS0(R4) ;Done yet ; BEQ 3$ ; TSTB CS0(R4) ;Error ; BMI FMTERR ; INCB CS1(R4) ;Bump track number ; DEC R1 ;Bump counter down ; BMI 4$ ; BR 2$ ;Go do one more ;4$: CLC ;Clear carry, all done ; RETURN ;FMTERR: $ERROR #$SERR2,F ;Device error ; BR BYE VERERR: $ERROR #ERR4,F ;Wrong version BYE: SEC RETURN .SBTTL DATA AREA .PSECT PUREDATA,RO,D .ENABL LC .NLIST BEX ;ERR3: .ASCIZ /Unit number too large for RT-11 configuration/ ERR4: .ASCIZ /Invalid device for FORMAT/ .EVEN .LIST BEX .DSABL LC .END