home *** CD-ROM | disk | FTP | other *** search
- This file was put together to help folks understand and use the Kaypro
- floppy disk formats. John Shotsky. 2-20-88
-
- There is no source code included for obvious reasons, however, with this
- information, one could write programs that need to know this stuff.
-
- ;Disk Equates and Parameters
-
- bitport equ 01CH ; bit port (m80 does not support extrn bytes)
- drvmask equ 0FCH ; drive select mask
- denmask equ 0DFH ; density bit mask
- ddbit equ 00H ; double density bit
- sdbit equ 20H ; single density bit
- control equ 10H ; I/O port of disk controller
- status equ control+0 ; status register
- cmnd equ control+0 ; command register
- track equ control+1 ; track register
- sector equ control+2 ; sector register
- data equ control+3 ; data register
- ficmd equ 11010000B ; force interrupt (Abort current command)
- rdcmd equ 10000000B ; read command
- wrtcmd equ 10100000B ; write command
- seekcmd equ 00010000B ; seek command
- rstcmd equ 00000000B ; home (restore) command
- adrcmd equ 11000000B ; read track address
- rdmask equ 10011100B ; read status mask
- wrtmask equ 11111100B ; write status mask
- tries1 equ 4 ; re-home on bad sector # of tries+1
- tries2 equ 15 ; re-read/write # of retries+1
- retcod equ 0C9H ; return op code
- nmivec equ 0066H ; non-maskable int vector (used in rd/wt loop)
-
- ; This section defines the disk parameters (dph's are images moved to RAM)
- dph0: defw 0,0,0,0 ; dph for unit A:
- defw dirbuf,dpbd ; directory buffer, Disk Parameter Block
- defw csva, alva ; check sum pointer, allocation map pointer
- defb ddbit ; density flag for this drive
-
- defw 0,0,0,0 ; dph for unit B:
- defw dirbuf,dpbd ; directory buffer, Disk Parameter Block
- defw csvb, alvb ; check sum pointer, allocation map pointer
- defb ddbit ; density flag for this drive
-
- ;dpbs: ;single sided single density
- defw 18 ; (spt) sectors per track
- defb 3 ; (bsh) block shift factor
- defb 7 ; (blm) block mask
- defb 0 ; (exm) extent mask
- defw 82 ; (dsm) max logical block
- defw 31 ; (drm) max directory
- defb 80H ; (al0) directory allocation map
- defb 00H ; (al1)
- defw 8 ; (cks) size of directory check vector
- defw 3 ; (off) reserved tracks
-
- ;dpbd: ; single sided double density
- defw 40 ; (spt) sectors per track
- defb 3 ; (bsh) block shift factor
- defb 7 ; (blm) block mask
- defb 0 ; (exm) extent mask
- defw 194 ; (dsm) max logical block
- defw 63 ; (drm) max directory
- defb 0F0H ; (al0) directory allocation map & BIOS space
- defb 00H ; (al1)
- defw 16 ; (cks) size of directory check vector
- defw 1 ; (off) reserved tracks
-
- ; sector interleave table
-
- defb 1,6,11,16
- defb 3,8,13,18
- defb 5,10,15,2
- defb 7,12,17,4
- defb 9,14
- enddph:
-
- ; Logical BIOS entry points
- ; Sector Deblocking Algorithms
-
- blksiz equ 1024 ;CP/M allocation size
- hstsiz equ 512 ;host disk sector size
- hstspt equ 10 ;host disk sectors/trk
- hstblk equ hstsiz/128 ;CP/M sects/host buff
- cpmspt equ hstblk * hstspt ;CP/M sectors/track
- secmsk equ hstblk-1 ;sector mask
- secshf equ 2 ;log2(hstblk) sector mask
- wrall equ 0 ;write to allocated
- wrdir equ 1 ;write to directory
- wrual equ 2 ;write to unallocated
-
- =================================================================
- This next set is from the Microcornucopia Rom source and provides
- both the double sided and the quad density formats. [jbs]
-
- ; Disk Equates and Parameters
-
- drvmask equ 11111100b ; drive select mask
- denmask equ 11011111b ; density bit mask
- ddbit equ 00000000b ; double density bit
- sdbit equ 00100000b ; single density bit
- sidmsk equ 11111011b ; side mask
- sid0 equ 00000000b ; side 0
- sid1 equ 00000100b ; side 1
- control equ 16 ; I/O port of disk controller
- status equ control+0 ; status register
- cmnd equ control+0 ; command register
- track equ control+1 ; track register
- sector equ control+2 ; sector register
- data equ control+3 ; data register
- ficmd equ 11010000B ; force interrupt (Abort current command)
- rdcmd equ 10001000B ; read command
- wrtcmd equ 10101100B ; write command
- seekcmd equ 00010000B ; seek command
- rstcmd equ 00000000B ; home (restore) command
- stpic equ 01001010b ; step in command
- stpoc equ 01101010b ; step out command
- adrcmd equ 11000100B ; read track address
- rdmask equ 10011100B ; read status mask
- wrtmask equ 11111100B ; write status mask
- tries1 equ 4 ; re-home on bad sector # of tries+1
- tries2 equ 15 ; re-read/write # of retries+1
- ssmblk equ 194
- dsmblk equ ssmblk*2
- retcod equ 0C9H ; return op code
- nmivec equ 0066H ; non-maskable interupt vector
- ; (used in rd/wt loop)
- spdsafe equ 03h ; mask to steprate
-
- ; This section defines the disk parameters (dph's are images moved to RAM)
- dph0: defw 0,0,0,0 ; dph for unit A:
- defw dirbuf,dpbd ; directory buffer, Disk Parameter Block
- defw csva, alva ; check sum pointer, allocation map pointer
- defb ddbit ; density flag for this drive
-
- defw 0,0,0,0 ; dph for unit B:
- defw dirbuf,dpbd ; directory buffer, Disk Parameter Block
- defw csvb, alvb ; check sum pointer, allocation map pointer
- defb ddbit ; density flag for this drive
-
- ;dpbs: ;single sided single density-NOBODY uses this! [jbs]
- defw 18 ; (spt) sectors per track
- defb 3 ; (bsh) block shift factor
- defb 7 ; (blm) block mask
- defb 0 ; (exm) extent mask
- defw 82 ; (dsm) max logical block
- defw 31 ; (drm) max directory
- defb 80H ; (al0) directory allocation map
- defb 00H ; (al1)
- defw 8 ; (cks) size of directory check vector
- defw 3 ; (off) reserved tracks
-
- ssdpbd: ; single sided double density -Original K-II [jbs]
- defw 40 ; (spt) sectors per track
- defb 3 ; (bsh) block shift factor
- defb 7 ; (blm) block mask
- defb 0 ; (exm) extent mask
- defw 194 ; (dsm) max logical block
- defw 63 ; (drm) max directory
- defb 0F0H ; (al0) directory allocation map & BIOS space
- defb 00H ; (al1)
- defw 16 ; (cks) size of directory check vector
- defw 1 ; (off) reserved tracks
-
- ; sector interleave table
- stbl: defb 1,6,11,16
- defb 3,8,13,18
- defb 5,10,15,2
- defb 7,12,17,4
- defb 9,14
- enddph:
-
- dphx: defw 0,0,0,0 ; dph for c:
- defw dirbuf,dpbd
- defw csvc,alvc
- defb ddbit
-
- defw 0,0,0,0 ; dph for d:
- defw dirbuf,dpbd
- defw csvd,alvd
- defb ddbit
- xendx:
-
- dsdpbd: ;double sided double density - Original K-IV [jbs]
- defw 40 ; (spt) sectors per track
- defb 4 ; (bsh) block shift factor
- defb 15 ; (blm) block mask
- defb 1 ; (exm) extent mask
- defw 196 ; (dsm) max logical block
- defw 63 ; (drm) max directory
- defb 0C0H ; (al0) directory allocation map & BIOS space
- defb 00H ; (al1)
- defw 16 ; (cks) size of directory check vector
- defw 1 ; (off) reserved tracks
-
- dtrk: ; Double sided quad density - uC's K-VIII
- defw 40
- defb 05h
- defb 1fh
- defb 03h
- defb 0C4h,0
- defb 5fh,0
- defb 80h,0
- defb 18h,0
- defb 2,0
-
- ; Logical BIOS entry points & Deblocking
- ; Logical BIOS entry points
- ; Sector Deblocking Algorithms
-
- blksiz equ 1024 ;CP/M allocation size
- hstsiz equ 512 ;host disk sector size
- hstspt equ 10 ;host disk sectors/trk
- hstblk equ hstsiz/128 ;CP/M sects/host buff
- cpmspt equ hstblk * hstspt ;CP/M sectors/track
- secmsk equ hstblk-1 ;sector mask
- secshf equ 2 ;log2(hstblk) sector mask
- wrall equ 0 ;write to allocated
- wrdir equ 1 ;write to directory
- wrual equ 2 ;write to unallocated
-
- That's IT folks...!!!