;This is a disk I/O driver for CPM+ and a Versafloppy II it is a self conta- ;ined unit and could be easly modified to other disk formats. ; ; John Monahan (201) 783-1548 (Feb 1983) ; ; FLOPPY DISK MODULES FOR CPM3 WITH VERSAFLOPPY II ; ; DEFINE LOGICAL VALUES: TRUE EQU -1 FALSE EQU NOT TRUE ; DETERMINE IF BANK SELECTING: BANKED EQU TRUE ;FULL BLOWN VERSION ; ;------ FLOPPY DISK PARAMETERS --------------------------------- ; X EQU 60H ;BASE ADDRESS OF PORTS FOR 1791 RSET EQU X+0 ;CONTROLLER RESET ADDRESS SELECT EQU X+3 ;DRIVE SELECT PORT STATUS EQU X+4 ;STATUS PORT TRACK EQU X+5 ;TRACK PORT SECTOR EQU X+6 ;SECTOR PORT DATA EQU X+7 ;DATA PORT CMD EQU X+4 ;COMMAND PORT RDACMD EQU 0C0H ;READ ADDRESS CODE RDCMD EQU 088H ;READ SECTOR CODE WRCMD EQU 0A8H ;WRITE SECTOR CODE WRTCMD EQU 0F4H ;WRITE TRACK CODE RSCMD EQU 009H ;RESTORE COMMAND SKNCMD EQU 019H ;SEEK NO VERIFY SKCMD EQU 1DH ;SEEK WITH VERIFY STDSDT EQU 26 ;STANDARD 8" 26 SECTORS/TRACK STDDDT EQU 50 ;STANDARD DD 8" 50 SECTORS/TRACK NBYTES EQU 128 ;BYTES/SECTOR NTRKS EQU 77 ;TRACKS/DISK ; ; ; ASCII CHARACTERS ; CR: EQU 0DH ;CARRIAGE RETURN LF: EQU 0AH ;LINE FEED BELL: EQU 7 ;DING ; ; DEFINE PUBLIC LABELS: PUBLIC DPH1,DPH2 ;DISK PARAMETER HEADERS ; DEFINE EXTERNAL LABELS: EXTRN @ADRV,@RDRV EXTRN @DMA,@TRK,@SECT EXTRN @DBNK ;BANK FOR DMA OPERATION EXTRN @ERMDE ;BDOS ERROR MODE EXTRN ?WBOOT ;WARM BOOT VECTOR EXTRN ?PMSG ;PRINT MESSAGE @ UP TO 00, SAVES ; [BC] AND [DE] EXTRN ?PDERR ;PRINT BIOS DISK ERROR HEADER EXTRN ?CONIN,?CONO ;CONSOLE IN AND OUT EXTRN ?CONST ;CONSOLE STATUS EXTRN ?BNKSL ;SELECT PROCESSOR MEMORY BANK EXTRN @CBNK EXTRN ?SMSG ;TALK STRING (Note this is a routine ;I have to send speech to my speech ;synthesis board you can remove ;references to it) ; INCLUDE CP/M 3.0 DISK DEFINITION MACROS: MACLIB CPM3 ; INCLUDE Z-80 MACRO LIBRARY: MACLIB Z80 IF BANKED DSEG ;PUT IN OP SYS BANK IF BANKING ELSE CSEG ;ELSE KEEP IN COMMON MEMORY ENDIF ; EXTENDED DISK PARAMETER HEADER FOR DRIVE 0: DW FWRITEA ;FLOPPY SECTOR WRITE DW FREADA ;FLOPPY SECTOR READ DW FLOGA ;FLOPPY LOGIN PROCEDURE DW FINIT ;FLOPPY DRIVE INITIALIZATION ROUTINE DB 0 ;RELATIVE DRIVE 0 ON THIS CONTROLLER DB -1 ;MEDIA TYPE: DPH1: DPH SKEW6,SDFLOPPY,, ; EXTENDED DISK PARAMETER HEADER FOR DRIVE 1: DW FWRITEB ;FLOPPY SECTOR WRITE DW FREADB ;FLOPPY SECTOR READ DW FLOGB ;FLOPPY LOGIN PROCEDURE DW FINIT ;FLOPPY DRIVE INITIALIZATION ROUTINE DB 1 ;RELATIVE DRIVE 1 ON THIS CONTROLLER DB -1 ;MEDIA TYPE: DPH2: DPH SKEW6,SDFLOPPY,, ; DRIVE TRANSLATION TABLES AND DISK PARAMETER BLOCKS: ; MAKE SURE DPB'S ARE IN COMMON MEMORY: CSEG ; 128 BYTE SECTORS, DSDD DISK PARAMETER BLOCK: DDFLOPPY: DPB 128,50,77,2048,64,2 ; 128 BYTE SECTORS, SSSD DISK PARAMETER BLOCK (IBM 3740): SDFLOPPY: DPB 128,26,77,1024,64,2 IF BANKED DSEG ;CAN SET BACK TO BANKED SEGMENT IF BANKING ENDIF SKEW6: SKEW 26,6,1 ; SKEW1: SKEW 50,1,1 ; ; ;;;;; DCBINIT: ; INITIALIZATION FOR EACH DRIVE PERFORMED HERE: FINIT: RET ;WE DON'T DO ANY PARTICULAR DRIVE INITS ;;;;; DCBLOGIN ; ROUTINE LOGS IN SELECTED DRIVE -- IF HI BIT OF TYPE FLAG IN XDPH ; IS SET THEN DRIVE RECALIBRATION IS PERFORMED, DISK FORMAT IS ; INSPECTED TO DETERMINE DENSITY AND DPB TYPE TO USE: FLOGA: MVI C,0 CALL GETTYPE ;FIND OUT IF SD OR DD DISK STA UNITA ;STORE DENSITY FLAG ANI 01000000B JNZ DDFMT LXI H,TALKSD CALL ?SMSG LXI H,SKEW6 ;DROP IN THE SD SKEW TABLE ADDRESS SHLD DPH1 LXI H,SDFLOPPY ;AND THE SD DPB ADDRESS SHLD DPH1+12 RET DDFMT: LXI H,TALKDD CALL ?SMSG LXI H,SKEW1 ;NEED TO PLACE ADDRESS BACK BECAUSE MAY HAVE SHLD DPH1 ;A SD DISK THERE PREVIOUSLY LXI H,DDFLOPPY SHLD DPH1+12 RET ; FLOGB: MVI C,1 CALL GETTYPE ;FIND OUT IF SD OR DD DISK ORI 01H STA UNITB ;STORE DENSITY FLAG ANI 01000000B JNZ DDFMTB LXI H,TALKSD CALL ?SMSG LXI H,SKEW6 ;DROP IN THE SD SKEW TABLE ADDRESS SHLD DPH2 LXI H,SDFLOPPY ;AND THE SD DPB ADDRESS SHLD DPH2+12 RET DDFMTB: LXI H,TALKDD CALL ?SMSG LXI H,SKEW1 ;NEED TO PLACE ADDRESS BACK BECAUSE MAY HAVE SHLD DPH2 ;A SD DISK THERE PREVIOUSLY LXI H,DDFLOPPY SHLD DPH2+12 RET ; ; THIS ROUTINE SETS UP THE FLOPPY DISK UNIT BYTE ; THE REQUIRED DRIVE IS IN [A] ; GETTYPE:MOV A,C ;FIND OUT TYPE OF DRIVE ANI 0FH ORI 40H ;COME UP DEFALT IN 8" DD STA UNIT MVI B,5 ;MAX NO OF RETRYS CALL USL1 LDA UNIT ANI 01000000B ;GET DENSITY FLAG RET ; USL1: PUSH B PUSH H DB 0EDH,73H DW SPSV ;-----