Programming:Formatting a track on a disc

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
;; This example shows how to format a track to 
;; DATA format
;;
;; This code is public domain and can be used in your
;; own programs.
;; 
;; Written by Kevin Thacker, 2002.
;;
;;------------------------------------------------

;; firmware function to find a RSX
.kl_find_command equ &bcd4

org &8000
nolist

;;------------------------------------------------
;; find BIOS: FORMAT TRACK command
;;
;; This method is compatible with other DOSs that
;; override or provide this command. If the command
;; is not found, then there is no furthur action. Therefore
;; on tape based systems, this code will have no effect.

ld hl,cmd_bios_format_track
call kl_find_command
ret nc

;; command found

;; store address of command
ld (bios_format_track),hl

;; store "rom select" of command
ld a,c
ld (bios_format_track+2),a

;;------------------------------------------------------------------

;; D = track number
;; (change this value to define the track to write to )
ld d,0

;; HL = address of C,H,R,N table 
ld hl,sectorIDs
;; number of sectors defined in table
ld b,9
.setup_track
;; write D value into C parameter of each sector
ld (hl),d
;; go to next C,H,R,N entry in table
inc hl
inc hl
inc hl
inc hl
djnz setup_track

;; E = drive number (0 or 1)
;; (change this value to define the disc drive to write to)
ld e,0

;; execute command
rst 3
defw bios_format_track

ret

;;------------------------------------------------------------------

;; this is initialised when the "BIOS: FORMAT TRACK" RSX has been found.
.bios_format_track
defw 0                    ;; address of function
defb 0                    ;; "rom select" for function


.cmd_bios_format_track
defb 6+&80				;; this is the "BIOS: FORMAT TRACK" RSX


;;------------------------------------------------------------------

.sectorIDs
;; C, H, R, N
;; N = 2 defines a sector size of 512 bytes
;; R defines id of each sector
;; H = 0 for DATA format
;; C will be setup to be the number of the track
defb &0, &0, &c1,&2
defb &0, &0, &c6,&2
defb &0, &0, &c2,&2
defb &0, &0, &c7,&2
defb &0, &0, &c3,&2
defb &0, &0, &c8,&2
defb &0, &0, &c4,&2
defb &0, &0, &c9,&2
defb &0, &0, &c5,&2