; ;================================================================================================== ; FLOPPY DISK DRIVER - DATA ;================================================================================================== ; #IF (FDMEDIA == FDM720) #DEFINE FDDPB DPB_FD720 ; DPB_FD720 OR DPB_FD144 #DEFINE FDCKS CKS_FD720 #DEFINE FDALS ALS_FD720 #ENDIF #IF (FDMEDIA == FDM144) #DEFINE FDDPB DPB_FD144 ; DPB_FD720 OR DPB_FD144 #DEFINE FDCKS CKS_FD144 #DEFINE FDALS ALS_FD144 #ENDIF #IF (FDMEDIA == FDM360) #DEFINE FDDPB DPB_FD360 ; DPB_FD720 OR DPB_FD144 #DEFINE FDCKS CKS_FD360 #DEFINE FDALS ALS_FD360 #ENDIF #IF (FDMEDIA == FDM120) #DEFINE FDDPB DPB_FD120 ; DPB_FD720 OR DPB_FD144 #DEFINE FDCKS CKS_FD120 #DEFINE FDALS ALS_FD120 #ENDIF #IF (FDMEDIA == FDM111) #DEFINE FDDPB DPB_FD111 ; DPB_FD720 OR DPB_FD144 #DEFINE FDCKS CKS_FD111 #DEFINE FDALS ALS_FD111 #ENDIF ; ; ; .DB DIODEV_FD + 0 FDDPH0: .DW 0000, 0000 .DW 0000, 0000 .DW DIRBF, FDDPB .DW FDCSV0, FDALV0 .DB DIODEV_FD + 1 FDDPH1: .DW 0000, 0000 .DW 0000, 0000 .DW DIRBF, FDDPB .DW FDCSV1, FDALV1 ; .EXPORT FDDPH0, FDDPH1 ;; ;; DISK PARAMETER BLOCKS USED FOR FLOPPY DRIVER ;; ;; IBM 720KB 3.5" FLOPPY DRIVE, 80 TRKS, 36 SECS/TRK, 512 BYTES/SEC ;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 128 ;; ;#IF ((FDMEDIA == FDM720) | (FDMEDIAALT == FDM720)) ;DPB_FD720: ; .DW 36 ; SPT: SECTORS PER TRACK ; .DB 4 ; BSH: BLOCK SHIFT FACTOR ; .DB 15 ; BLM: BLOCK MASK ; .DB 0 ; EXM: EXTENT MASK ; .DW 350 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((720K - 18K OFF) / 2K BLS) - 1 = 350 ; .DW 127 ; DRM: DIR ENTRIES - 1 = 128 - 1 = 127 ; .DB 11000000B ; AL0: DIR BLK BIT MAP, FIRST BYTE ; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE ; .DW 32 ; CKS: DIRECTORY CHECK VECTOR SIZE = 128 / 4 ; .DW 4 ; OFF: RESERVED TRACKS = 4 TRKS * (512 B/SEC * 36 SEC/TRK) = 18K ;#ELSE ;DPB_FD720 .EQU 0 ;#ENDIF CKS_FD720 .EQU 32 ; CKS: DIR ENT / 4 = 128 / 4 = 32 ALS_FD720 .EQU 44 ; ALS: BLKS / 8 = 351 / 8 = 44 (ROUNDED UP) ; .EXPORT DPB_FD720 ;#ENDIF ;; ;; IBM 1.44MB 3.5" FLOPPY DRIVE, 80 TRKS, 72 SECS/TRK, 512 BYTES/SEC ;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 256 ;; ;#IF ((FDMEDIA == FDM144) | (FDMEDIAALT == FDM144)) ;DPB_FD144: ; .DW 72 ; SPT: SECTORS PER TRACK ; .DB 4 ; BSH: BLOCK SHIFT FACTOR ; .DB 15 ; BLM: BLOCK MASK ; .DB 0 ; EXM: EXTENT MASK ; .DW 710 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,440K - 18K OFF) / 2K BLS) - 1 = 710 ; .DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 ; .DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE ; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE ; .DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 ; .DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 72 SEC/TRK) = 18K ;#ELSE ;DPB_FD144 .EQU 0 ;#ENDIF CKS_FD144 .EQU 64 ; CKS: DIR ENT / 4 = 256 / 4 = 64 ALS_FD144 .EQU 89 ; ALS: BLKS / 8 = 711 / 8 = 89 (ROUNDED UP) ; .EXPORT DPB_FD144 ;#ENDIF ;; ;; IBM 360KB 5.25" FLOPPY DRIVE, 40 TRKS, 9 SECS/TRK, 512 BYTES/SEC ;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 128 ;; ;#IF ((FDMEDIA == FDM360) | (FDMEDIAALT == FDM360)) ;DPB_FD360: ; .DW 36 ; SPT: SECTORS PER TRACK ; .DB 4 ; BSH: BLOCK SHIFT FACTOR ; .DB 15 ; BLM: BLOCK MASK ; .DB 0 ; EXM: EXTENT MASK ; .DW 170 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((360K - 18K OFF) / 2K BLS) - 1 = 170 ; .DW 127 ; DRM: DIR ENTRIES - 1 = 128 - 1 = 127 ; .DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE ; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE ; .DW 32 ; CKS: DIRECTORY CHECK VECTOR SIZE = 128 / 4 ; .DW 4 ; OFF: RESERVED TRACKS = 4 TRKS * (512 B/SEC * 36 SEC/TRK) = 18K ;#ELSE ;DPB_FD360 .EQU 0 ;#ENDIF CKS_FD360 .EQU 32 ; CKS: DIR ENT / 4 = 128 / 4 = 32 ALS_FD360 .EQU 89 ; ALS: BLKS / 8 = 171 / 8 = 22 (ROUNDED UP) ; .EXPORT DPB_FD360 ;#ENDIF ;; ;; IBM 1.20MB 5.25" FLOPPY DRIVE, 80 TRKS, 60 SECS/TRK, 512 BYTES/SEC ;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 256 ;; ;#IF ((FDMEDIA == FDM120) | (FDMEDIAALT == FDM120)) ;DPB_FD120: ; .DW 60 ; SPT: SECTORS PER TRACK ; .DB 4 ; BSH: BLOCK SHIFT FACTOR ; .DB 15 ; BLM: BLOCK MASK ; .DB 0 ; EXM: EXTENT MASK ; .DW 591 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,200K - 15K OFF) / 2K BLS) - 1 = 591 ; .DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 ; .DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE ; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE ; .DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 ; .DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 60 SEC/TRK) = 15K ;#ELSE ;DPB_FD120 .EQU 0 ;#ENDIF CKS_FD120 .EQU 64 ; CKS: DIR ENT / 4 = 256 / 4 = 64 ALS_FD120 .EQU 74 ; ALS: BLKS / 8 = 592 / 8 = 74 (ROUNDED UP) ; .EXPORT DPB_FD120 ;#ENDIF ;; ;; IBM 1.11MB 8" FLOPPY DRIVE, 74 TRKS, 60 SECS/TRK, 512 BYTES/SEC ;; BLOCKSIZE (BLS) = 2K, DIRECTORY ENTRIES = 256 ;; ;#IF ((FDMEDIA == FDM111) | (FDMEDIAALT == FDM111)) ;DPB_FD111: ; .DW 60 ; SPT: SECTORS PER TRACK ; .DB 4 ; BSH: BLOCK SHIFT FACTOR ; .DB 15 ; BLM: BLOCK MASK ; .DB 0 ; EXM: EXTENT MASK ; .DW 546 ; DSM: TOTAL STORAGE IN BLOCKS - 1 BLK = ((1,110K - 15K OFF) / 2K BLS) - 1 = 546 ; .DW 255 ; DRM: DIR ENTRIES - 1 = 256 - 1 = 255 ; .DB 11110000B ; AL0: DIR BLK BIT MAP, FIRST BYTE ; .DB 00000000B ; AL1: DIR BLK BIT MAP, SECOND BYTE ; .DW 64 ; CKS: DIRECTORY CHECK VECTOR SIZE = 256 / 4 ; .DW 2 ; OFF: RESERVED TRACKS = 2 TRKS * (512 B/SEC * 60 SEC/TRK) = 15K CKS_FD111 .EQU 64 ; CKS: DIR ENT / 4 = 256 / 4 = 64 ALS_FD111 .EQU 69 ; ALS: BLKS / 8 = 592 / 8 = 74 (ROUNDED UP) ; .EXPORT DPB_FD111 ;#ENDIF ; ; ; #IF (FDMAUTO) ; ASSUME WORST CASE SIZES FDCSV0: .FILL CKS_FD144 FDALV0: .FILL ALS_FD144 FDCSV1: .FILL CKS_FD144 FDALV1: .FILL ALS_FD144 #ELSE FDCSV0: .FILL FDCKS FDALV0: .FILL FDALS FDCSV1: .FILL FDCKS FDALV1: .FILL FDALS #ENDIF