DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦f1d200bb2⟧ TextFile

    Length: 13696 (0x3580)
    Types: TextFile
    Names: »FDRIVES.ASM«

Derivation

└─⟦21f5a1bd4⟧ Bits:30003500 CP/M Plus (tm) Version 3.0 BIOS Revision F
    └─ ⟦this⟧ »FDRIVES.ASM« 

TextFile

	Title	'Fdrives.Asm'
;------------------------------------------------------------;
;     Definition Module for the Floppies in the system.      ;
;------------------------------------------------------------;
; Latest update: 1985-11-15. PSW
; Biosrevision: F
;
; For the RMAC assembler.

True		Equ	-1
False		Equ	Not True

;-------------------------------------------------------------------;
;       What kind of floppy system do You want ?		    ;
;								    ;
Verify		Equ	True	; Verify after write.		    ;
;								    ;
Jet8		Equ	False	; External 8" drive		    ;
;				; I: 8" 1x77x26x128,  64 ent. Unit0 ;
;				; J: 8" 2x77x8x1024, 256 ent. Unit0 ;
;								    ;
RamDisk		Equ	False	; M: 128 KBytes Ram Disk	    ;
;								    ;
; Mark correct floppy system with True. Note: Only one True.	    ;
;								    ;
M8		Equ	False	; A: 8" 2x77x8x1024, 256 ent. Unit0 ;
;				; B: 8" 2x77x8x1024, 256 ent. Unit1 ;
;				; C: 8" 1x77x26x128,  64 ent. Unit0 ;
;				; D: 8" 1x77x26x128,  64 ent. Unit1 ;
;				; Note: MUST NOT BE USED WITH Jet8=True
M5		Equ	False	; A: 5" 2x77x8x1024, 256 ent. Unit0 ;
;				; B: 5" 2x77x8x1024, 256 ent. Unit1 ;
;				; C: 5" 2x80x5x1024, 128 ent. Unit0 ;
;				; D: 5" 2x80x5x1024, 128 ent. Unit1 ;
M596D		Equ	True	; A: 5" 2x80x5x1024, 128 ent. Unit0 ;
;				; B: 5" 2x80x5x1024, 128 ent. Unit1 ;
M548D		Equ	False	; A: 5" 2x40x5x1024, 128 ent. Unit0 ;
;				; B: 5" 2x40x5x1024, 128 ent. Unit1 ;
;-------------------------------------------------------------------;
	Page	66
Rate0		Equ	00000000b	; 3ms/6ms
Rate1		Equ	00000001b	; 6ms/12ms
Rate2		Equ	00000010b	; 10ms/20ms
Rate3		Equ	00000011b	; 15ms/30ms

DoublS		Equ	-1		; Double sided
SinglS		Equ	0		; Single sided

Unit0		Equ	00000000b	; Physical Unit select 0
Unit1		Equ	00000001b	; Physical Unit select 1
Unit2		Equ	00000010b	; Physical Unit select 2
Unit3		Equ	00000011b	; Physical Unit select 3

Inch5		Equ	00001000b	; 5"-Floppy
Inch8		Equ	11010100b	; 8"-Floppy

DoublD		Equ	00000000b	; Double density
SinglD		Equ	00100000b	; Single density

Comm		Equ	0C0h		; Common area
					; 64K - 2*8K = 48K = C000h
	If	M8
Sign	Equ	'8'
	Else
Sign	Equ	'5'
	Endif
	Extrn	FdRead, FdWrit, FdLgin, FdInit
	If	RamDisk
	Extrn	RamWrit, RamRead, RamLgIn, RamInit
	Endif
	Public	@DTbl, ?Titel
	Public	@Commo, RamBuffer

	Cseg
@DTbl:	Dw	FlA,FlB			; All systems have A: and B:
	If	M8 Or M5
	Dw	FlC,FlD			; 
	Else
	Dw	0,0			;
	Endif
	Dw	0,0,0,0			; E:, F:, G:, H: not installed
	If	Jet8
	Dw	FlI,FlJ			; Jet8 has I: and J: installed
	Else
	Dw	0,0
	Endif
	Dw	0,0			; K:, L: not installed.
	If	RamDisk
	Dw	FlM			; M: can be Ram Disk
	Else
	Dw	0			;
	Endif
	Dw	0,0,0			; N:, O:, P: not installed

@Commo:	Db	Comm			;
	Page
	Dseg
	If	M8 Or Jet8
; Define 8" 2x77x8x1024, 256 entries. Unit A:/J:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch8+Unit0+DoublD	;; $FdXsl
	Db	0			;; 
	If	M8
FlA:	Dw	0			;; No trans table
	Else
FlJ:	Dw	0			;; No trans table
	Endif
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F8D			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank 
	Endif

	If	M8
; Define 8" 2x77x8x1024, 256 entries. Unit B:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch8+Unit1+DoublD	;; $FdXsl
	Db	0			;; 
FlB:	Dw	0			;; No trans table 
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F8D			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank

	Endif
	If	M5
; Define 5.25" 2x77x8x1024, 256 entries. Unit A:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch5+Unit0+DoublD+11000000b	;; $FdXsl 2 MHz 8" Mode
	Db	0			;; 
FlA:	Dw	0			;; No trans table
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F5Max			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank.


; Define 5.25" 2x77x8x1024, 256 entries. Unit B:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch5+Unit1+DoublD+11000000b	;; $FdXsl 2 MHz 8" Mode
	Db	0			;; 
FlB:	Dw	0			;; No trans table
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F5Max			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank.

	Endif

	If	M596D Or M5

; Define 5.25" 2x80x5x1024, 128 entries. Unit A:/C:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch5+Unit0+DoublD	;; $FdXsl
	Db	0			;; 
	If	M596D
FlA:	Dw	0			;; No trans table
	Else
FlC:	Dw	0			;; No trans table
	Endif
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F596D			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank.


; Define 5.25" 2x80x5x1024, 128 entries. Unit B:/D:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch5+Unit1+DoublD	;; $FdXsl
	Db	0			;; 
	If	M596D
FlB:	Dw	0			;; No trans table
	Else
FlD:	Dw	0			;; No trans table
	Endif
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F596D			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank.

	Endif
	If	M548D

; Define 5.25" 2x40x5x1024, 128 entries. Unit A:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch5+Unit0+DoublD	;; $FdXsl
	Db	0			;; 
FlA:	Dw	0			;; No trans table 
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F548D			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank


; Define 5.25" 2x40x5x1024, 128 entries. Unit B:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch5+Unit1+DoublD	;; $FdXsl
	Db	0			;; 
FlB:	Dw	0			;; No trans table 
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F548D			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank

	Endif

	If	M8 Or Jet8

; Define 8" 1x77x26x128, 64 entries. (IBM) Unit C:/I:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch8+Unit0+SinglD	;;
	Db	0			;; 
	If	M8
FlC:	Dw	Trans			;; Trans table
	Else
FlI:	Dw	Trans			;; Trans table
	Endif
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F8S			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank.

	Endif

	If	M8

; Define 8" 1x77x26x128, 64 entries. (IBM) Unit D:

	Dw	FdWrit			;;
	Dw	FdRead			;;
	Dw	FdLgin			;;
	Dw	FdInit			;;
	Db	Inch8+Unit1+SinglD	;;
	Db	0			;; 
FlD:	Dw	Trans			;; Trans table
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	F8S			;; Address to DPB
	Dw	0FFFEh			;; Checksum vector set by GENCPM
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hash
	Db	0			;; Hash bank.

	Endif

	If	RamDisk
; Define RAM DISK, 32 entries 128 KBytes. Unit M:

	Dw	RamWrit			;;
	Dw	RamRead			;;
	Dw	RamLgIn			;;
	Dw	RamInit			;;
	Db	0			;;
	Db	0			;; 
FlM:	Dw	0			;; No trans table
	Db	0,0,0,0,0,0,0,0,0	;;
	Db	0			;; Mediaflag
	Dw	Ram			;; Address to DPB
	Dw	0			;; Checksum None.
	Dw	0FFFEh			;; Alloc vector set by GENCPM
	Dw	0FFFEh,0FFFFh		;; Let GENCPM setup
	Dw	0FFFEh			;; DirBcb, DtaBcb, Hashl
	Db	0			;; Hash bank.
	Endif

	Cseg

	If	M8 Or Jet8

; DPB for 8" 2x77x8x1024, 256 entries.

F8D:	Dw	64			; Number of logical sect/track
	Db	4,0Fh			; Blockshift and mask
	Db	0			; Extent mask
	Dw	607			; Max blocknumber
	Dw	256-1			; 256 Directory entries
	Db	0F0h,0			; Alloc vector to directory
	Dw	256/4			; Checksum size
	Dw	2			; Number of offset tracks
	Db	0			; Physical sector size
	Db	0			; Physical sector shift mask.

	Db	0			; Floppy
	Db	8			; No. of logical sectors/phys. sector.
	Db	22			; Read time out
	Db	19			; Write time out
	Db	-1			; Double sided
	Db	Verify			; Verify after write
	Db	Rate0			; Step rate
	Db	Inch8+DoublD		; Boot select
	Db	0,0,0,0,0,0		; Dummies

; DPB for 8" 1x77x26x128, 64 entries. (IBM)

F8S:	Dw	26			; No. of logical sectors/track.
	Db	3,7			; Blockshift and mask
	Db	0			; Extent mask
	Dw	242			; Max blocknumber
	Dw	64-1			; 64 Directory entries
	Db	0C0h,0			; Alloc vector to directory
	Dw	64/4			; Checksum size
	Dw	2			; Number of offset tracks
	Db	0			; Physical sector size
	Db	0			; Physical sector shift mask.

	Db	0			; Floppy
	Db	1			; No. of logical sectors/phys. sector.
	Db	22			; Read time out
	Db	19			; Write time out
	Db	0			; Single sided
	Db	Verify			; Verify after write
	Db	Rate0			; Step rate
	Db	Inch8+SinglD		; Boot select
	Db	0,0,0,0,0,0		; Dummies
	Endif

	If RamDisk
; DPB for RamDisk, 32 entries. 128 KBytes

Ram:	Dw	512			; No. of logical sectors/track.
	Db	3,7			; Blockshift and mask
	Db	0			; Extent mask
	Dw	127			; Max blocknumber
	Dw	32-1			; 32 Directory entries
	Db	080h,0			; Alloc vector to directory
	Dw	8000h			; Checksum size None.
	Dw	0			; Number of offset tracks
	Db	0			; Physical sector size
	Db	0			; Physical sector shift mask.

	Db	3			; Ramdisk.
	Db	0			; Dummy
	Db	0			; Dummy
	Db	0			; Dummy
	Db	0			; Dummy
	Db	0			; Dummy
	Db	0			; Dummy
	Db	0			; Dummy
	Db	0,0,0,0,0,0		; Dummies
	Endif

	If	M5
; DPB for 5.25" 2x77x8x1024, 256 entries.

F5Max:	Dw	64			; No. of logical sectors/track.
	Db	4,0Fh			; Blockshift and mask
	Db	0			; Extent mask
	Dw	607			; Max blocknumber
	Dw	256-1			; 256 Directory entries
	Db	0F0h,0			; Alloc vector to directory
	Dw	256/4			; Checksum size
	Dw	2			; Number of offset tracks
	Db	0			; Physical sector size
	Db	0			; Physical sector shift mask.

	Db	0			; Floppy
	Db	8			; No. of logical sectors/phys. sector.
	Db	22			; Read time out
	Db	19			; Write time out
	Db	-1			; Double sided
	Db	Verify			; Verify after write
	Db	Rate0			; Step rate
	Db	Inch5+DoublD+11000000b	; Boot select
	Db	0,0,0,0,0,0		; Dummies
	Endif

	If	M5 Or M596D
; DPB for 5.25" 2x80x5x1024, 128 entries.

F596D:	Dw	40			; No. of logical sectors/track.
	Db	4,0Fh			; Blockshift and mask
	Db	0			; Extent mask
	Dw	394			; Max blocknumber
	Dw	128-1			; 128 Directory entries
	Db	0C0h,0			; Alloc vector to directory
	Dw	128/4			; Checksum size
	Dw	2			; Number of offset tracks
	Db	0			; Physical sector size
	Db	0			; Physical sector shift mask.

	Db	0			; Floppy
	Db	8			; No. of logical sectors/phys. sector.
	Db	22			; Read time out
	Db	19			; Write time out
	Db	-1			; Double sided
	Db	Verify			; Verify after write
	Db	Rate0			; Step rate
	Db	Inch5+DoublD		; Boot select
	Db	0,0,0,0,0,0		; Dummies
	Endif

	If	M548D

; DPB for 5.25" 2x40x5x1024, 128 entries.

F548D:	Dw	40			; No. of logical sectors/track.
	Db	4,0Fh			; Blockshift and mask
	Db	1			; Extent mask
	Dw	194			; Max blocknumber
	Dw	128-1			; 128 Directory entries
	Db	0C0h,0			; Alloc vector to directory
	Dw	128/4			; Checksum size
	Dw	2			; Number of offset tracks
	Db	0			; Physical sector size
	Db	0			; Physical sector shift mask.

	Db	0			; Floppy
	Db	8			; No. of logical sectors/phys. sector
	Db	22			; Read time out
	Db	19			; Write time out
	Db	-1			; Double sided
	Db	Verify			; Verify after write
	Db	Rate0			; Step rate
	Db	Inch5+DoublD		; Boot select
	Db	0,0,0,0,0,0		; Dummies
	Endif

	Dseg
?Titel:	Db	'80. ',Sign		;;
	Db	'"-floppy-version. '	;;
	If	M8
	Db	'2x1.2 MBytes.'		;;
	Endif
	If	M5
	Db	'2x1.2 MBytes.'		;;
	Endif
	If	M596D
	Db	'2x800 KBytes.'		;;
	Endif
	If	M548D
	Db	'2x400 KBytes.'		;;
	Endif
	If	RamDisk
	Db	' Ramdisc.'		;;
	Endif
	Db	13,10,0			;;
	Cseg
RamBuffer:
	If	RamDisk
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Db	0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h,0E5h
	Endif
	If	M8 Or Jet8
Trans:	Db	1,7,13,19,25		; Skewing for 8" SingleSided
	Db	5,11,17,23		; SingleDensity (IBM)
	Db	3,9,15,21		;
	Db	2,8,14,20,26		;
	Db	6,12,18,24		;
	Db	4,10,16,22		;
	Endif

	End
«eof»